> {
158 | return array as any
159 | }
160 | // console.log(this.CurrentItems)
161 | // let computeClass = (props: ISBTable) => {
162 | // return [
163 | // 'btn-close',
164 | // {
165 | // // disabled: props.disabled
166 | // },
167 | // props.class
168 | // ]
169 | // }
170 |
171 | // return (
172 | // this.emitToParent($event)}>
177 | // )
178 | let renderTableRowHeader = null
179 | let renderTableRowItems = null
180 |
181 | if (this.fields) {
182 | renderTableRowHeader = elemT(this.fields).map((value: any, index: any) => {
183 | // console.log({value})
184 |
185 | // TODO: sortable feature. WIP...
186 | if (value.key) {
187 | // return (
188 | // {value.key}
189 | // )
190 | } else {
191 | // only ['Ages', 'First', 'Last']
192 | return (
193 |
194 | {value}
195 |
196 | )
197 | }
198 | })
199 | }
200 | if (this.items) {
201 |
202 | if (this.perPage && this.currentPage) {
203 | // With pagination mode
204 | // console.log('TODO: With pagination mode')
205 | // console.log(this.paginationFilterList)
206 | renderTableRowItems = this.paginationFilterList.map((value: any, index: any) => {
207 | // console.log({value})
208 | if (value.rowVariant) {
209 | let oldObj = Object.assign({}, value)
210 | delete oldObj.rowVariant
211 | let renderTableRowDataWithRowVariant: any = []
212 | let mergerOrginalObj = Object.assign({}, oldObj)
213 | for (let i = 1; i < Object.keys(mergerOrginalObj).length; i++) {
214 | renderTableRowDataWithRowVariant.push({value[Object.keys(mergerOrginalObj)[i]]} )
215 | }
216 |
217 | return (
218 | {renderTableRowDataWithRowVariant}
219 | )
220 | } else if (value.cellVariant) {
221 | let oldObj = Object.assign({}, value)
222 | delete oldObj.cellVariant
223 | delete oldObj.isActive
224 | let renderTableRowDataWithCellVariants: any = []
225 | let mergerOrginalObj = Object.assign({}, oldObj)
226 | // console.log({mergerOrginalObj})
227 | for (let key in mergerOrginalObj) {
228 | if (key === Object.keys(value.cellVariant)[0]) {
229 | renderTableRowDataWithCellVariants.push({value[key]} )
230 | } else {
231 | // console.log('Object.keys(mergerOrginalObj', value, 'key', key, Object.keys(value.cellVariant))
232 |
233 | renderTableRowDataWithCellVariants.push({value[key]} )
234 | }
235 | // console.log(Object.getOwnPropertyNames(value))
236 | // if ( Object.keys(mergerOrginalObj).includes(Object.keys(value.cellVariant)[0])) {
237 | // renderTableRowDataWithCellVariants.push((
238 | // {value[Object.keys(mergerOrginalObj)[i]]}
239 | // ))
240 | // } else {
241 | // renderTableRowDataWithCellVariants.push((
242 | // {value[Object.keys(mergerOrginalObj)[i]]}
243 | // ))
244 | // }
245 | // if (value.cellVariant) {
246 |
247 | // renderTableRowDataWithCellVariants.push((
248 | // {value[Object.keys(mergerOrginalObj)[i]]}
249 | // ))
250 | // } else {
251 | // renderTableRowDataWithCellVariants.push((
252 | // {value[Object.keys(mergerOrginalObj)[i]]}
253 | // ))
254 | // }
255 | }
256 |
257 | return (
258 |
259 | {renderTableRowDataWithCellVariants}
260 |
261 | )
262 | } else {
263 | let renderTableRowData: any = []
264 |
265 | for (let i = 1; i < Object.keys(value).length; i++) {
266 | renderTableRowData.push({value[Object.keys(value)[i]]} )
267 | }
268 |
269 | return {renderTableRowData}
270 | }
271 | })
272 |
273 | } else {
274 | // Non-pagination mode
275 | renderTableRowItems = this.items.map((value, index) => {
276 | if (value.rowVariant) {
277 | let oldObj = Object.assign({}, value)
278 | delete oldObj.rowVariant
279 | let renderTableRowDataWithRowVariant: any = []
280 | let mergerOrginalObj = Object.assign({}, oldObj)
281 | for (let i = 1; i < Object.keys(mergerOrginalObj).length; i++) {
282 | renderTableRowDataWithRowVariant.push({value[Object.keys(mergerOrginalObj)[i]]} )
283 | }
284 |
285 | return (
286 | {renderTableRowDataWithRowVariant}
287 | )
288 | } else if (value.cellVariant) {
289 | let oldObj = Object.assign({}, value)
290 | delete oldObj.cellVariant
291 | delete oldObj.isActive
292 | let renderTableRowDataWithCellVariants: any = []
293 | let mergerOrginalObj = Object.assign({}, oldObj)
294 | // console.log({mergerOrginalObj})
295 | for (let key in mergerOrginalObj) {
296 | if (key === Object.keys(value.cellVariant)[0]) {
297 | renderTableRowDataWithCellVariants.push({value[key]} )
298 | } else {
299 | console.log('Object.keys(mergerOrginalObj', value, 'key', key, Object.keys(value.cellVariant))
300 |
301 | renderTableRowDataWithCellVariants.push({value[key]} )
302 | }
303 | // console.log(Object.getOwnPropertyNames(value))
304 | // if ( Object.keys(mergerOrginalObj).includes(Object.keys(value.cellVariant)[0])) {
305 | // renderTableRowDataWithCellVariants.push((
306 | // {value[Object.keys(mergerOrginalObj)[i]]}
307 | // ))
308 | // } else {
309 | // renderTableRowDataWithCellVariants.push((
310 | // {value[Object.keys(mergerOrginalObj)[i]]}
311 | // ))
312 | // }
313 | // if (value.cellVariant) {
314 |
315 | // renderTableRowDataWithCellVariants.push((
316 | // {value[Object.keys(mergerOrginalObj)[i]]}
317 | // ))
318 | // } else {
319 | // renderTableRowDataWithCellVariants.push((
320 | // {value[Object.keys(mergerOrginalObj)[i]]}
321 | // ))
322 | // }
323 | }
324 |
325 | return (
326 |
327 | {renderTableRowDataWithCellVariants}
328 |
329 | )
330 | } else {
331 | let renderTableRowData: any = []
332 |
333 | for (let i = 1; i < Object.keys(value).length; i++) {
334 | renderTableRowData.push({value[Object.keys(value)[i]]} )
335 | }
336 |
337 | return {renderTableRowData}
338 | }
339 | })
340 | }
341 |
342 | }
343 |
344 |
345 |
346 | return (
347 |
348 |
349 |
350 | {renderTableRowHeader}
351 |
352 | {renderTableRowItems}
353 |
354 |
355 | )
356 | }
357 | })
358 |
359 | export default SBTable
360 |
--------------------------------------------------------------------------------
/src/components/table/example.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
34 |
--------------------------------------------------------------------------------
/src/components/table/table.css:
--------------------------------------------------------------------------------
1 | .table > * [aria-sort='descending'] {
2 | background-position: right 0.375rem center;
3 | padding-right: calc(0.75rem + 0.65em);
4 | cursor: pointer;
5 | background-image: none;
6 | background-repeat: no-repeat;
7 | background-size: 0.65em 1em;
8 |
9 | background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' preserveAspectRatio='none'%3E%3Cpath opacity='.3' d='M51 1l25 23 24 22H1l25-22z'/%3E%3Cpath d='M51 101l25-23 24-22H1l25 22z'/%3E%3C/svg%3E");
10 | }
11 |
12 | .table > * [aria-sort='ascending'] {
13 | background-position: right 0.375rem center;
14 | padding-right: calc(0.75rem + 0.65em);
15 | cursor: pointer;
16 | background-image: none;
17 | background-repeat: no-repeat;
18 | background-size: 0.65em 1em;
19 |
20 | background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' preserveAspectRatio='none'%3E%3Cpath d='M51 1l25 23 24 22H1l25-22z'/%3E%3Cpath opacity='.3' d='M51 101l25-23 24-22H1l25 22z'/%3E%3C/svg%3E");
21 | }
22 |
--------------------------------------------------------------------------------
/src/components/toasts/SBToasts.tsx:
--------------------------------------------------------------------------------
1 | import { defineComponent, PropType } from 'vue'
2 |
3 | interface ISBToastsProps {
4 | imgSrc: string
5 | alt?: string
6 | top?: boolean
7 | bottom?: boolean
8 | start?: boolean
9 | left?: boolean
10 | end?: boolean
11 | right?: boolean
12 | height?: string | number
13 | width?: string | number
14 | [key: string]: any
15 | }
16 |
17 | // TODO: NOT DONE.. NEED MORE WORK ON...
18 | const SBToasts = defineComponent({
19 | name: 'SBToasts',
20 | props: {
21 | imgSrc: {
22 | type: String,
23 | required: false
24 | },
25 | alt: {
26 | type: String,
27 | required: false
28 | },
29 | top: {
30 | type: Boolean,
31 | required: false
32 | },
33 | bottom: {
34 | type: Boolean,
35 | required: false
36 | },
37 | start: {
38 | type: Boolean,
39 | required: false
40 | },
41 | left: {
42 | type: Boolean,
43 | required: false
44 | },
45 | end: {
46 | type: Boolean,
47 | required: false
48 | },
49 | right: {
50 | type: Boolean,
51 | required: false
52 | },
53 | height: {
54 | type: String || Number,
55 | required: false
56 | },
57 | width: {
58 | type: String || Number,
59 | required: false
60 | },
61 | class: {
62 | type: String,
63 | required: false
64 | },
65 | style: {
66 | type: String,
67 | required: false
68 | }
69 | },
70 | render() {
71 | let computeClass = (props: ISBToastsProps) => {
72 | let cardImgPost = 'card-img-top'
73 | for (let key in props) {
74 | if (props[key] === true) {
75 | cardImgPost = `card-img-${key}`
76 | }
77 | }
78 | return [cardImgPost]
79 | }
80 | let computeStyle = (props: ISBToastsProps) => {
81 | console.log('props', props)
82 | return ''
83 | }
84 |
85 | return (
86 |
87 |
MY VERISON
88 |
REAL
89 |
90 |
91 |
97 |
Hello, world! This is a toast message.
98 |
99 |
100 | )
101 |
102 | // return (
103 | //
104 | // )
105 | }
106 | })
107 |
108 | export default SBToasts
109 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import SBAccordion from './components/accordion/SBAccordion'
2 | import SBAlert from './components/alert/SBAlert'
3 | import SBBadge from './components/badge/SBBadge'
4 | import SBBreadcrumb from './components/breadcrumb/SBBreadcrumb'
5 | import SBButton from './components/button/SBButton'
6 | import SBButtonGroup from './components/buttonGroup/SBButtonGroup'
7 | import SBCard from './components/card/SBCard'
8 | import SBCardHeader from './components/card/SBCardHeader'
9 | import SBListgroup from './components/card/SBListgroup'
10 | import SBListgroupItem from './components/card/SBListgroupItem'
11 | import SBCardTitle from './components/card/SBCardTitle'
12 | import SBCloseButton from './components/closeButton/SBCloseButton'
13 | import SBContainer from './components/layoutAndGridSystem/SBContainer'
14 | import SBCol from './components/layoutAndGridSystem/SBCol'
15 | import SBFormSelect from './components/form/SBFormSelect'
16 | import SBFormInput from './components/form/SBFormInput'
17 | import SBNav from './components/nav/SBNav'
18 | import SBNavLink from './components/nav/SBNavLink'
19 | import SBProgress from './components/progress/SBProgress'
20 | import SBProgressBar from './components/progress/SBProgressBar'
21 | import SBPagination from './components/pagination/Pagination'
22 | import SBRow from './components/layoutAndGridSystem/SBRow'
23 | import SBTable from './components/table/SBTable'
24 |
25 | export {
26 | SBAccordion,
27 | SBAlert,
28 | SBBadge,
29 | SBBreadcrumb,
30 | SBButton,
31 | SBButtonGroup,
32 | SBCard,
33 | SBCardHeader,
34 | SBListgroup,
35 | SBListgroupItem,
36 | SBCardTitle,
37 | SBCloseButton,
38 | SBContainer,
39 | SBCol,
40 | SBFormSelect,
41 | SBFormInput,
42 | SBNav,
43 | SBNavLink,
44 | SBProgress,
45 | SBProgressBar,
46 | SBPagination,
47 | SBRow,
48 | SBTable
49 | }
50 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import SBAccordion from './components/accordion/SBAccordion'
2 | import SBAlert from './components/alert/SBAlert'
3 | import SBBadge from './components/badge/SBBadge'
4 | import SBBreadcrumb from './components/breadcrumb/SBBreadcrumb'
5 | import SBButton from './components/button/SBButton'
6 | import SBButtonGroup from './components/buttonGroup/SBButtonGroup'
7 | import SBCard from './components/card/SBCard'
8 | import SBCardHeader from './components/card/SBCardHeader'
9 | import SBListgroup from './components/card/SBListgroup'
10 | import SBListgroupItem from './components/card/SBListgroupItem'
11 | import SBCardTitle from './components/card/SBCardTitle'
12 | import SBCloseButton from './components/closeButton/SBCloseButton'
13 | import SBContainer from './components/layoutAndGridSystem/SBContainer'
14 | import SBCol from './components/layoutAndGridSystem/SBCol'
15 | import SBFormSelect from './components/form/SBFormSelect'
16 | import SBFormInput from './components/form/SBFormInput'
17 | import SBNav from './components/nav/SBNav'
18 | import SBNavLink from './components/nav/SBNavLink'
19 | import SBProgress from './components/progress/SBProgress'
20 | import SBProgressBar from './components/progress/SBProgressBar'
21 | import SBPagination from './components/pagination/Pagination'
22 | import SBRow from './components/layoutAndGridSystem/SBRow'
23 | import SBTable from './components/table/SBTable'
24 |
25 | export {
26 | SBAccordion,
27 | SBAlert,
28 | SBBadge,
29 | SBBreadcrumb,
30 | SBButton,
31 | SBButtonGroup,
32 | SBCard,
33 | SBCardHeader,
34 | SBListgroup,
35 | SBListgroupItem,
36 | SBCardTitle,
37 | SBCloseButton,
38 | SBContainer,
39 | SBCol,
40 | SBFormSelect,
41 | SBFormInput,
42 | SBNav,
43 | SBNavLink,
44 | SBProgress,
45 | SBProgressBar,
46 | SBPagination,
47 | SBRow,
48 | SBTable
49 | }
50 |
--------------------------------------------------------------------------------
/src/main.ts:
--------------------------------------------------------------------------------
1 | import { createApp } from 'vue'
2 | import App from './App'
3 | // import { RouterLink, useRoute, useRouter } from 'vue-router'
4 | // import router from './router'
5 | // import BButton from './components/buttons/BButton'
6 |
7 | import './assets/bootstrap.css'
8 |
9 | const app = createApp(App)
10 | // app.use(router)
11 | // app.component('BButton', BButton)
12 |
13 | app.mount('#app')
14 |
15 | // export {
16 | // BButton
17 | // }
18 |
--------------------------------------------------------------------------------
/src/router.ts:
--------------------------------------------------------------------------------
1 | import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
2 |
3 | // const routes: Array = []
4 |
5 | // const router = createRouter({
6 | // history: createWebHistory(),
7 | // routes
8 | // })
9 |
10 | // export default router
11 |
--------------------------------------------------------------------------------
/src/shims-vue.d.ts:
--------------------------------------------------------------------------------
1 | declare module '*.vue' {
2 | import type { DefineComponent } from 'vue'
3 | const component: DefineComponent<{}, {}, any>
4 | export default component
5 | }
6 |
--------------------------------------------------------------------------------
/tests/unit/example.spec.ts:
--------------------------------------------------------------------------------
1 | import { shallowMount } from '@vue/test-utils'
2 |
3 | describe('example', () => {
4 | // let wrapper = shallowMount(HelloWorld); // setting the type
5 |
6 | it('demo example', () => {
7 |
8 | expect(1 + 1).toBe(2)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "esnext",
4 | "module": "esnext",
5 | "strict": true,
6 | "jsx": "preserve",
7 | "importHelpers": true,
8 | "moduleResolution": "node",
9 | "skipLibCheck": true,
10 | "esModuleInterop": true,
11 | "allowSyntheticDefaultImports": true,
12 | "sourceMap": true,
13 | "baseUrl": ".",
14 | "types": [
15 | "webpack-env",
16 | "jest"
17 | ],
18 | "paths": {
19 | "@/*": [
20 | "src/*"
21 | ]
22 | },
23 | "lib": [
24 | "esnext",
25 | "dom",
26 | "dom.iterable",
27 | "scripthost"
28 | ]
29 | },
30 | "typedocOptions": {
31 | "inputFiles": [
32 | "index.ts",
33 | "src/main.ts"
34 | ],
35 | "mode": "library",
36 | "name": "superbvue",
37 | "includeVersion": true,
38 | },
39 | "include": [
40 | "src/**/*.ts",
41 | "src/**/*.tsx",
42 | "src/**/*.vue",
43 | "tests/**/*.ts",
44 | "tests/**/*.tsx"
45 | ],
46 | "exclude": [
47 | "node_modules"
48 | ]
49 | }
50 |
--------------------------------------------------------------------------------