@rkosafo/cai.components 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. package/dist/baseEditor/index.svelte +32 -0
  2. package/dist/baseEditor/index.svelte.d.ts +18 -0
  3. package/dist/builders/filters/FilterBuilder.svelte +638 -0
  4. package/dist/builders/filters/FilterBuilder.svelte.d.ts +4 -0
  5. package/dist/builders/filters/index.d.ts +1 -0
  6. package/dist/builders/filters/index.js +1 -0
  7. package/dist/forms/FormCheckbox/FormCheckbox.svelte +53 -0
  8. package/dist/forms/FormCheckbox/FormCheckbox.svelte.d.ts +4 -0
  9. package/dist/forms/FormCheckbox/index.d.ts +1 -0
  10. package/dist/forms/FormCheckbox/index.js +1 -0
  11. package/dist/forms/FormDatepicker/FormDatepicker.svelte +159 -0
  12. package/dist/forms/FormDatepicker/FormDatepicker.svelte.d.ts +13 -0
  13. package/dist/forms/FormDatepicker/index.d.ts +1 -0
  14. package/dist/forms/FormDatepicker/index.js +1 -0
  15. package/dist/forms/FormInput/FormInput.svelte +87 -0
  16. package/dist/forms/FormInput/FormInput.svelte.d.ts +4 -0
  17. package/dist/forms/FormInput/index.d.ts +1 -0
  18. package/dist/forms/FormInput/index.js +1 -0
  19. package/dist/forms/FormRadio/FormRadio.svelte +53 -0
  20. package/dist/forms/FormRadio/FormRadio.svelte.d.ts +4 -0
  21. package/dist/forms/FormRadio/index.d.ts +1 -0
  22. package/dist/forms/FormRadio/index.js +1 -0
  23. package/dist/forms/FormSelect/FormSelect.svelte +86 -0
  24. package/dist/forms/FormSelect/FormSelect.svelte.d.ts +4 -0
  25. package/dist/forms/FormSelect/index.d.ts +1 -0
  26. package/dist/forms/FormSelect/index.js +1 -0
  27. package/dist/forms/FormTextarea/FormTextarea.svelte +77 -0
  28. package/dist/forms/FormTextarea/FormTextarea.svelte.d.ts +4 -0
  29. package/dist/forms/FormTextarea/index.d.ts +1 -0
  30. package/dist/forms/FormTextarea/index.js +1 -0
  31. package/dist/forms/checkbox/Checkbox.svelte +82 -0
  32. package/dist/forms/checkbox/Checkbox.svelte.d.ts +4 -0
  33. package/dist/forms/checkbox/CheckboxButton.svelte +92 -0
  34. package/dist/forms/checkbox/CheckboxButton.svelte.d.ts +18 -0
  35. package/dist/forms/checkbox/index.d.ts +3 -0
  36. package/dist/forms/checkbox/index.js +3 -0
  37. package/dist/forms/checkbox/theme.d.ts +317 -0
  38. package/dist/forms/checkbox/theme.js +113 -0
  39. package/dist/forms/datepicker/Datepicker.svelte +706 -0
  40. package/dist/forms/datepicker/Datepicker.svelte.d.ts +41 -0
  41. package/dist/forms/datepicker/index.d.ts +2 -0
  42. package/dist/forms/datepicker/index.js +2 -0
  43. package/dist/forms/datepicker/theme.d.ts +385 -0
  44. package/dist/forms/datepicker/theme.js +56 -0
  45. package/dist/forms/form/Form.svelte +69 -0
  46. package/dist/forms/form/Form.svelte.d.ts +6 -0
  47. package/dist/forms/form/index.d.ts +2 -0
  48. package/dist/forms/form/index.js +2 -0
  49. package/dist/forms/input/Input.svelte +363 -0
  50. package/dist/forms/input/Input.svelte.d.ts +4 -0
  51. package/dist/forms/input/index.d.ts +4 -0
  52. package/dist/forms/input/index.js +5 -0
  53. package/dist/forms/input/theme.d.ts +301 -0
  54. package/dist/forms/input/theme.js +100 -0
  55. package/dist/forms/label/Label.svelte +38 -0
  56. package/dist/forms/label/Label.svelte.d.ts +15 -0
  57. package/dist/forms/label/index.d.ts +2 -0
  58. package/dist/forms/label/index.js +2 -0
  59. package/dist/forms/label/theme.d.ts +75 -0
  60. package/dist/forms/label/theme.js +29 -0
  61. package/dist/forms/radio/Radio.svelte +48 -0
  62. package/dist/forms/radio/Radio.svelte.d.ts +25 -0
  63. package/dist/forms/radio/RadioButton.svelte +22 -0
  64. package/dist/forms/radio/RadioButton.svelte.d.ts +25 -0
  65. package/dist/forms/radio/index.d.ts +3 -0
  66. package/dist/forms/radio/index.js +3 -0
  67. package/dist/forms/radio/theme.d.ts +290 -0
  68. package/dist/forms/radio/theme.js +95 -0
  69. package/dist/forms/select/Select.svelte +50 -0
  70. package/dist/forms/select/Select.svelte.d.ts +4 -0
  71. package/dist/forms/select/index.d.ts +1 -0
  72. package/dist/forms/select/index.js +1 -0
  73. package/dist/forms/textarea/Textarea.svelte +165 -0
  74. package/dist/forms/textarea/Textarea.svelte.d.ts +4 -0
  75. package/dist/forms/textarea/index.d.ts +2 -0
  76. package/dist/forms/textarea/index.js +2 -0
  77. package/dist/forms/textarea/theme.d.ts +100 -0
  78. package/dist/forms/textarea/theme.js +35 -0
  79. package/dist/index.d.ts +42 -2
  80. package/dist/index.js +42 -2
  81. package/dist/layout/TF/Content/Content.svelte +28 -0
  82. package/dist/layout/TF/Content/Content.svelte.d.ts +8 -0
  83. package/dist/layout/TF/Content/index.d.ts +1 -0
  84. package/dist/layout/TF/Content/index.js +1 -0
  85. package/dist/layout/TF/Header/Header.svelte +159 -0
  86. package/dist/layout/TF/Header/Header.svelte.d.ts +21 -0
  87. package/dist/layout/TF/Header/index.d.ts +1 -0
  88. package/dist/layout/TF/Header/index.js +1 -0
  89. package/dist/layout/TF/Sidebar/Sidebar.svelte +74 -0
  90. package/dist/layout/TF/Sidebar/Sidebar.svelte.d.ts +23 -0
  91. package/dist/layout/TF/Sidebar/index.d.ts +1 -0
  92. package/dist/layout/TF/Sidebar/index.js +1 -0
  93. package/dist/layout/TF/Wrapper/Wrapper.svelte +17 -0
  94. package/dist/layout/TF/Wrapper/Wrapper.svelte.d.ts +8 -0
  95. package/dist/layout/TF/Wrapper/index.d.ts +1 -0
  96. package/dist/layout/TF/Wrapper/index.js +1 -0
  97. package/dist/layout/TF/index.d.ts +5 -0
  98. package/dist/layout/TF/index.js +5 -0
  99. package/dist/themes/ThemeProvider.svelte +20 -0
  100. package/dist/themes/ThemeProvider.svelte.d.ts +9 -0
  101. package/dist/themes/index.d.ts +7 -0
  102. package/dist/themes/index.js +1 -0
  103. package/dist/themes/themeUtils.d.ts +24 -0
  104. package/dist/themes/themeUtils.js +74 -0
  105. package/dist/themes/themes.d.ts +18 -0
  106. package/dist/themes/themes.js +18 -0
  107. package/dist/types/index.d.ts +755 -0
  108. package/dist/types/index.js +1 -0
  109. package/dist/typography/heading/Heading.svelte +35 -0
  110. package/dist/typography/heading/Heading.svelte.d.ts +10 -0
  111. package/dist/typography/heading/index.d.ts +2 -0
  112. package/dist/typography/heading/index.js +2 -0
  113. package/dist/typography/heading/theme.d.ts +30 -0
  114. package/dist/typography/heading/theme.js +17 -0
  115. package/dist/ui/accordion/Accordion.svelte +49 -0
  116. package/dist/ui/accordion/Accordion.svelte.d.ts +4 -0
  117. package/dist/ui/accordion/AccordionItem.svelte +173 -0
  118. package/dist/ui/accordion/AccordionItem.svelte.d.ts +4 -0
  119. package/dist/ui/accordion/index.d.ts +3 -0
  120. package/dist/ui/accordion/index.js +3 -0
  121. package/dist/ui/accordion/theme.d.ts +96 -0
  122. package/dist/ui/accordion/theme.js +59 -0
  123. package/dist/ui/alert/Alert.svelte +83 -0
  124. package/dist/ui/alert/Alert.svelte.d.ts +5 -0
  125. package/dist/ui/alert/index.d.ts +2 -0
  126. package/dist/ui/alert/index.js +2 -0
  127. package/dist/ui/alert/theme.d.ts +108 -0
  128. package/dist/ui/alert/theme.js +149 -0
  129. package/dist/ui/alertDialog/AlertDialog.svelte +40 -0
  130. package/dist/ui/alertDialog/AlertDialog.svelte.d.ts +4 -0
  131. package/dist/ui/alertDialog/index.d.ts +1 -0
  132. package/dist/ui/alertDialog/index.js +1 -0
  133. package/dist/ui/avatar/Avatar.svelte +77 -0
  134. package/dist/ui/avatar/Avatar.svelte.d.ts +4 -0
  135. package/dist/ui/avatar/index.d.ts +2 -0
  136. package/dist/ui/avatar/index.js +2 -0
  137. package/dist/ui/avatar/theme.d.ts +63 -0
  138. package/dist/ui/avatar/theme.js +31 -0
  139. package/dist/ui/buttons/Button.svelte +102 -0
  140. package/dist/ui/buttons/Button.svelte.d.ts +4 -0
  141. package/dist/ui/buttons/GradientButton.svelte +59 -0
  142. package/dist/ui/buttons/GradientButton.svelte.d.ts +4 -0
  143. package/dist/ui/buttons/index.d.ts +3 -0
  144. package/dist/ui/buttons/index.js +3 -0
  145. package/dist/ui/buttons/theme.d.ts +704 -0
  146. package/dist/ui/buttons/theme.js +332 -0
  147. package/dist/ui/datatable/Datatable.svelte +516 -0
  148. package/dist/ui/datatable/Datatable.svelte.d.ts +5 -0
  149. package/dist/ui/datatable/index.d.ts +2 -0
  150. package/dist/ui/datatable/index.js +2 -0
  151. package/dist/ui/drawer/Drawer.svelte +280 -0
  152. package/dist/ui/drawer/Drawer.svelte.d.ts +37 -0
  153. package/dist/ui/drawer/index.d.ts +2 -0
  154. package/dist/ui/drawer/index.js +2 -0
  155. package/dist/ui/drawer/theme.d.ts +211 -0
  156. package/dist/ui/drawer/theme.js +46 -0
  157. package/dist/ui/dropdown/Dropdown.svelte +36 -0
  158. package/dist/ui/dropdown/Dropdown.svelte.d.ts +4 -0
  159. package/dist/ui/dropdown/DropdownDivider.svelte +11 -0
  160. package/dist/ui/dropdown/DropdownDivider.svelte.d.ts +4 -0
  161. package/dist/ui/dropdown/DropdownGroup.svelte +14 -0
  162. package/dist/ui/dropdown/DropdownGroup.svelte.d.ts +4 -0
  163. package/dist/ui/dropdown/DropdownHeader.svelte +14 -0
  164. package/dist/ui/dropdown/DropdownHeader.svelte.d.ts +4 -0
  165. package/dist/ui/dropdown/DropdownItem.svelte +52 -0
  166. package/dist/ui/dropdown/DropdownItem.svelte.d.ts +4 -0
  167. package/dist/ui/dropdown/index.d.ts +6 -0
  168. package/dist/ui/dropdown/index.js +6 -0
  169. package/dist/ui/dropdown/theme.d.ts +55 -0
  170. package/dist/ui/dropdown/theme.js +20 -0
  171. package/dist/ui/footer/Footer.svelte +15 -0
  172. package/dist/ui/footer/Footer.svelte.d.ts +4 -0
  173. package/dist/ui/footer/FooterBrand.svelte +37 -0
  174. package/dist/ui/footer/FooterBrand.svelte.d.ts +4 -0
  175. package/dist/ui/footer/FooterCopyright.svelte +45 -0
  176. package/dist/ui/footer/FooterCopyright.svelte.d.ts +4 -0
  177. package/dist/ui/footer/FooterIcon.svelte +22 -0
  178. package/dist/ui/footer/FooterIcon.svelte.d.ts +4 -0
  179. package/dist/ui/footer/FooterLink.svelte +33 -0
  180. package/dist/ui/footer/FooterLink.svelte.d.ts +4 -0
  181. package/dist/ui/footer/FooterLinkGroup.svelte +13 -0
  182. package/dist/ui/footer/FooterLinkGroup.svelte.d.ts +4 -0
  183. package/dist/ui/footer/index.d.ts +7 -0
  184. package/dist/ui/footer/index.js +7 -0
  185. package/dist/ui/footer/theme.d.ts +137 -0
  186. package/dist/ui/footer/theme.js +39 -0
  187. package/dist/ui/indicator/Indicator.svelte +42 -0
  188. package/dist/ui/indicator/Indicator.svelte.d.ts +4 -0
  189. package/dist/ui/indicator/index.d.ts +2 -0
  190. package/dist/ui/indicator/index.js +2 -0
  191. package/dist/ui/indicator/theme.d.ts +177 -0
  192. package/dist/ui/indicator/theme.js +114 -0
  193. package/dist/ui/modal/Modal.svelte +265 -0
  194. package/dist/ui/modal/Modal.svelte.d.ts +38 -0
  195. package/dist/ui/modal/index.d.ts +2 -0
  196. package/dist/ui/modal/index.js +2 -0
  197. package/dist/ui/modal/theme.d.ts +190 -0
  198. package/dist/ui/modal/theme.js +41 -0
  199. package/dist/ui/notificationList/NotificationList.svelte +123 -0
  200. package/dist/ui/notificationList/NotificationList.svelte.d.ts +25 -0
  201. package/dist/ui/notificationList/index.d.ts +1 -0
  202. package/dist/ui/notificationList/index.js +1 -0
  203. package/dist/ui/pageLoader/PageLoader.svelte +10 -0
  204. package/dist/ui/pageLoader/PageLoader.svelte.d.ts +4 -0
  205. package/dist/ui/pageLoader/index.d.ts +1 -0
  206. package/dist/ui/pageLoader/index.js +1 -0
  207. package/dist/ui/paginate/Paginate.svelte +96 -0
  208. package/dist/ui/paginate/Paginate.svelte.d.ts +4 -0
  209. package/dist/ui/paginate/index.d.ts +1 -0
  210. package/dist/ui/paginate/index.js +1 -0
  211. package/dist/ui/tab/Tab.svelte +65 -0
  212. package/dist/ui/tab/Tab.svelte.d.ts +4 -0
  213. package/dist/ui/tab/index.d.ts +2 -0
  214. package/dist/ui/tab/index.js +2 -0
  215. package/dist/ui/tab/theme.d.ts +135 -0
  216. package/dist/ui/tab/theme.js +83 -0
  217. package/dist/ui/table/Table.svelte +385 -0
  218. package/dist/ui/table/Table.svelte.d.ts +4 -0
  219. package/dist/ui/table/index.d.ts +1 -0
  220. package/dist/ui/table/index.js +1 -0
  221. package/dist/ui/tableLoader/TableLoader.svelte +24 -0
  222. package/dist/ui/tableLoader/TableLoader.svelte.d.ts +13 -0
  223. package/dist/ui/tableLoader/index.d.ts +1 -0
  224. package/dist/ui/tableLoader/index.js +1 -0
  225. package/dist/ui/toolbar/Toolbar.svelte +59 -0
  226. package/dist/ui/toolbar/Toolbar.svelte.d.ts +17 -0
  227. package/dist/ui/toolbar/ToolbarButton.svelte +56 -0
  228. package/dist/ui/toolbar/ToolbarButton.svelte.d.ts +17 -0
  229. package/dist/ui/toolbar/ToolbarGroup.svelte +43 -0
  230. package/dist/ui/toolbar/ToolbarGroup.svelte.d.ts +16 -0
  231. package/dist/ui/toolbar/index.d.ts +4 -0
  232. package/dist/ui/toolbar/index.js +4 -0
  233. package/dist/ui/toolbar/theme.d.ts +320 -0
  234. package/dist/ui/toolbar/theme.js +155 -0
  235. package/dist/utils/Popper.svelte +257 -0
  236. package/dist/utils/Popper.svelte.d.ts +4 -0
  237. package/dist/utils/action.d.ts +16 -0
  238. package/dist/utils/action.js +107 -0
  239. package/dist/utils/closeButton/CloseButton.svelte +88 -0
  240. package/dist/utils/closeButton/CloseButton.svelte.d.ts +12 -0
  241. package/dist/utils/closeButton/index.d.ts +2 -0
  242. package/dist/utils/closeButton/index.js +2 -0
  243. package/dist/utils/closeButton/theme.d.ts +100 -0
  244. package/dist/utils/closeButton/theme.js +69 -0
  245. package/dist/utils/dismissable.d.ts +9 -0
  246. package/dist/utils/dismissable.js +16 -0
  247. package/dist/utils/index.d.ts +8 -0
  248. package/dist/utils/index.js +35 -0
  249. package/dist/utils/paginate.svelte.d.ts +22 -0
  250. package/dist/utils/paginate.svelte.js +167 -0
  251. package/dist/utils/singleSelection.svelte.d.ts +15 -0
  252. package/dist/utils/singleSelection.svelte.js +49 -0
  253. package/dist/utils/svelte-legos.d.ts +7 -0
  254. package/dist/utils/svelte-legos.js +14 -0
  255. package/package.json +24 -2
@@ -0,0 +1,135 @@
1
+ import type { Classes } from '../../themes/themeUtils.js';
2
+ import { type VariantProps } from 'tailwind-variants';
3
+ export type TabsVaraints = VariantProps<typeof tabs> & Classes<typeof tabs>;
4
+ export type TabItemVariants = VariantProps<typeof tabItem> & Classes<typeof tabItem>;
5
+ export declare const tabs: import("tailwind-variants").TVReturnType<{
6
+ tabStyle: {
7
+ full: {
8
+ active: string;
9
+ inactive: string;
10
+ };
11
+ pill: {
12
+ active: string;
13
+ inactive: string;
14
+ };
15
+ underline: {
16
+ base: string;
17
+ active: string;
18
+ inactive: string;
19
+ };
20
+ none: {
21
+ active: string;
22
+ inactive: string;
23
+ };
24
+ };
25
+ hasDivider: {
26
+ true: {};
27
+ };
28
+ }, {
29
+ base: string;
30
+ content: string;
31
+ divider: string;
32
+ active: string;
33
+ inactive: string;
34
+ }, undefined, {
35
+ tabStyle: {
36
+ full: {
37
+ active: string;
38
+ inactive: string;
39
+ };
40
+ pill: {
41
+ active: string;
42
+ inactive: string;
43
+ };
44
+ underline: {
45
+ base: string;
46
+ active: string;
47
+ inactive: string;
48
+ };
49
+ none: {
50
+ active: string;
51
+ inactive: string;
52
+ };
53
+ };
54
+ hasDivider: {
55
+ true: {};
56
+ };
57
+ }, {
58
+ base: string;
59
+ content: string;
60
+ divider: string;
61
+ active: string;
62
+ inactive: string;
63
+ }, import("tailwind-variants").TVReturnType<{
64
+ tabStyle: {
65
+ full: {
66
+ active: string;
67
+ inactive: string;
68
+ };
69
+ pill: {
70
+ active: string;
71
+ inactive: string;
72
+ };
73
+ underline: {
74
+ base: string;
75
+ active: string;
76
+ inactive: string;
77
+ };
78
+ none: {
79
+ active: string;
80
+ inactive: string;
81
+ };
82
+ };
83
+ hasDivider: {
84
+ true: {};
85
+ };
86
+ }, {
87
+ base: string;
88
+ content: string;
89
+ divider: string;
90
+ active: string;
91
+ inactive: string;
92
+ }, undefined, unknown, unknown, undefined>>;
93
+ export declare const tabItem: import("tailwind-variants").TVReturnType<{
94
+ open: {
95
+ true: {
96
+ button: string;
97
+ };
98
+ };
99
+ disabled: {
100
+ true: {
101
+ button: string;
102
+ };
103
+ };
104
+ }, {
105
+ base: string;
106
+ button: string;
107
+ }, undefined, {
108
+ open: {
109
+ true: {
110
+ button: string;
111
+ };
112
+ };
113
+ disabled: {
114
+ true: {
115
+ button: string;
116
+ };
117
+ };
118
+ }, {
119
+ base: string;
120
+ button: string;
121
+ }, import("tailwind-variants").TVReturnType<{
122
+ open: {
123
+ true: {
124
+ button: string;
125
+ };
126
+ };
127
+ disabled: {
128
+ true: {
129
+ button: string;
130
+ };
131
+ };
132
+ }, {
133
+ base: string;
134
+ button: string;
135
+ }, undefined, unknown, unknown, undefined>>;
@@ -0,0 +1,83 @@
1
+ import { tv } from 'tailwind-variants';
2
+ export const tabs = tv({
3
+ slots: {
4
+ base: 'flex space-x-2 rtl:space-x-reverse',
5
+ content: 'p-4 bg-gray-50 rounded-lg dark:bg-gray-800 mt-4',
6
+ divider: 'h-px bg-gray-200 dark:bg-gray-700',
7
+ active: 'p-4 text-primary-600 bg-gray-100 rounded-t-lg dark:bg-gray-800 dark:text-primary-500',
8
+ inactive: 'p-4 text-gray-500 rounded-t-lg hover:text-gray-600 hover:bg-gray-50 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-gray-300'
9
+ },
10
+ variants: {
11
+ tabStyle: {
12
+ full: {
13
+ active: 'p-4 w-full rounded-none group-first:rounded-s-lg group-last:rounded-e-lg text-gray-900 bg-gray-100 focus:ring-4 focus:ring-primary-300 focus:outline-hidden dark:bg-gray-700 dark:text-white',
14
+ inactive: 'p-4 w-full rounded-none group-first:rounded-s-lg group-last:rounded-e-lg text-gray-500 dark:text-gray-400 bg-white hover:text-gray-700 hover:bg-gray-50 focus:ring-4 focus:ring-primary-300 focus:outline-hidden dark:hover:text-white dark:bg-gray-800 dark:hover:bg-gray-700'
15
+ },
16
+ pill: {
17
+ active: 'py-3 px-4 text-white bg-primary-600 rounded-lg',
18
+ inactive: 'py-3 px-4 text-gray-500 rounded-lg hover:text-gray-900 hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-white'
19
+ },
20
+ underline: {
21
+ base: '-mb-px',
22
+ active: 'p-4 text-primary-600 border-b-2 border-primary-600 dark:text-primary-500 dark:border-primary-500 bg-transparent',
23
+ inactive: 'p-4 border-b-2 border-transparent hover:text-gray-600 hover:border-gray-300 dark:hover:text-gray-300 text-gray-500 dark:text-gray-400 bg-transparent'
24
+ },
25
+ none: {
26
+ active: '',
27
+ inactive: ''
28
+ }
29
+ },
30
+ hasDivider: {
31
+ true: {}
32
+ }
33
+ },
34
+ compoundVariants: [
35
+ {
36
+ tabStyle: ['full', 'pill'],
37
+ hasDivider: true,
38
+ class: {
39
+ divider: 'hidden'
40
+ }
41
+ }
42
+ ],
43
+ defaultVariants: {
44
+ tabStyle: 'none',
45
+ hasDivider: true
46
+ }
47
+ });
48
+ export const tabItem = tv({
49
+ slots: {
50
+ base: 'group focus-within:z-10',
51
+ button: 'inline-block text-sm font-medium text-center disabled:cursor-not-allowed'
52
+ },
53
+ variants: {
54
+ open: {
55
+ true: {
56
+ button: 'active'
57
+ }
58
+ },
59
+ disabled: {
60
+ true: {
61
+ button: 'cursor-not-allowed'
62
+ }
63
+ }
64
+ },
65
+ compoundVariants: [
66
+ {
67
+ open: true,
68
+ class: {
69
+ button: '' // We'll merge this with activeClasses from context
70
+ }
71
+ },
72
+ {
73
+ open: false,
74
+ class: {
75
+ button: '' // We'll merge this with inactiveClasses from context
76
+ }
77
+ }
78
+ ],
79
+ defaultVariants: {
80
+ open: false,
81
+ disabled: false
82
+ }
83
+ });
@@ -0,0 +1,385 @@
1
+ <script lang="ts">
2
+ import { Dropdown, DropdownItem, type TableProps } from '../../index.js';
3
+ import { clickOutsideAction } from '../../utils/svelte-legos.js';
4
+ import { createTable, Render, Subscribe } from 'svelte-headless-table';
5
+ import {
6
+ addColumnOrder,
7
+ addHiddenColumns,
8
+ addResizedColumns,
9
+ addSelectedRows,
10
+ addSortBy
11
+ } from 'svelte-headless-table/plugins';
12
+ import { writable } from 'svelte/store';
13
+
14
+ let {
15
+ data = [],
16
+ headerColor = 'white',
17
+ height = 400,
18
+ bgWhite = false,
19
+ headerTextColor = 'black',
20
+ tableColumns = [],
21
+ showActions = false,
22
+ showCheckBox = false,
23
+ showViewDetails = true,
24
+ showEdit = false,
25
+ showMiniWidth = false,
26
+ rowClickable = false,
27
+ hideWhiteSpace = true,
28
+ hiddenColumns = $bindable([]),
29
+ sortedColumns = $bindable([]),
30
+ initialSortKeys = [],
31
+ actionLists = [],
32
+ showIndex = false,
33
+ selectedRows = $bindable([]),
34
+ selectAllChecked = $bindable(false),
35
+ showDelete = false,
36
+ handleCheckbox,
37
+ onActionClicked,
38
+ onDelete,
39
+ onEdit,
40
+ onView,
41
+ onRowClicked
42
+ }: TableProps = $props();
43
+
44
+ let dropdown = $state(-1);
45
+ let openDropDown = $state(false);
46
+ let tableData = writable(data);
47
+
48
+ $effect(() => {
49
+ tableData.set(data);
50
+ });
51
+
52
+ const table = createTable(tableData, {
53
+ sort: addSortBy({
54
+ disableMultiSort: false,
55
+ serverSide: true,
56
+ initialSortKeys: initialSortKeys
57
+ }),
58
+ colOrder: addColumnOrder(),
59
+ select: addSelectedRows(),
60
+ hideCols: addHiddenColumns({
61
+ initialHiddenColumnIds: hiddenColumns
62
+ }),
63
+ resize: addResizedColumns()
64
+ });
65
+ const columns = tableColumns.map((x: any) => table.column({ ...x }));
66
+ const { headerRows, flatColumns, rows, tableAttrs, tableBodyAttrs, pluginStates, pageRows } =
67
+ table.createViewModel(columns);
68
+ // $allColumns = flatColumns;
69
+ const { hiddenColumnIds } = pluginStates.hideCols;
70
+
71
+ $effect(() => hiddenColumnIds.set(hiddenColumns));
72
+
73
+ const { sortKeys } = pluginStates.sort;
74
+ $effect(() => {
75
+ sortedColumns = $sortKeys;
76
+ });
77
+
78
+ function handleRowCheckboxChange(checked: boolean, row: any) {
79
+ let updatedSelectedRows;
80
+
81
+ if (checked) {
82
+ updatedSelectedRows = [...selectedRows, row];
83
+ } else {
84
+ updatedSelectedRows = selectedRows.filter((item) => item !== row);
85
+ }
86
+
87
+ selectedRows = updatedSelectedRows;
88
+ if (handleCheckbox) handleCheckbox(updatedSelectedRows);
89
+ }
90
+
91
+ const handleSelectAllChange = () => {
92
+ if (selectAllChecked) {
93
+ selectedRows = [];
94
+ if (handleCheckbox) handleCheckbox([]);
95
+ } else {
96
+ const allRows = data.map((x) => x);
97
+ selectedRows = allRows;
98
+ if (handleCheckbox) handleCheckbox(allRows);
99
+ }
100
+ selectAllChecked = !selectAllChecked;
101
+ };
102
+
103
+ function toggleSubmenu(index: any) {
104
+ dropdown = dropdown === index ? -1 : index;
105
+ }
106
+
107
+ function closeDropDown() {
108
+ openDropDown = false;
109
+ dropdown = -1;
110
+ }
111
+ function getRow(row: any) {
112
+ const { original } = row;
113
+ return original;
114
+ }
115
+ </script>
116
+
117
+ <div class="h-full w-full flex-auto">
118
+ <div class="grid grid-cols-1 gap-2">
119
+ <div
120
+ class=" scrollbar-thumb-blue scrollbar-thumb-rounded scrollbar-track-blue-lighter scrollbar-w-2 scrolling-touch h-full w-full overflow-x-auto"
121
+ >
122
+ <table {...$tableAttrs} class="mb-6 w-full pb-6">
123
+ <thead
124
+ class=" sticky top-0"
125
+ class:bg-[#92cbdf]={headerColor === 'sky'}
126
+ class:bg-green-300={headerColor === 'green'}
127
+ class:bg-[#CF9B14]={headerColor === 'orange'}
128
+ class:bg-[#cbc3fa]={headerColor === 'purple'}
129
+ class:bg-blue-300={headerColor === 'blue'}
130
+ class:bg-white={headerColor === 'white'}
131
+ class:text-gray-700={headerTextColor === 'gray'}
132
+ class:text-white={headerTextColor === 'white'}
133
+ class:text-black={headerTextColor === 'black'}
134
+ class:border-b-2={headerColor === 'white'}
135
+ >
136
+ {#each $headerRows as headerRow (headerRow.id)}
137
+ <Subscribe rowAttrs={headerRow.attrs()}>
138
+ {#snippet children({ rowAttrs })}
139
+ <tr {...rowAttrs}>
140
+ {#if showCheckBox}
141
+ <th
142
+ class="px-6 py-2.5 text-left text-sm font-semibold whitespace-nowrap rtl:text-right"
143
+ >
144
+ <input
145
+ class="cursor-pointer"
146
+ type="checkbox"
147
+ checked={selectAllChecked}
148
+ onchange={handleSelectAllChange}
149
+ />
150
+ </th>
151
+ {/if}
152
+ {#if showActions}
153
+ <th
154
+ class="px-4 py-2.5 text-left text-sm font-semibold whitespace-nowrap rtl:text-right"
155
+ >Actions</th
156
+ >
157
+ {/if}
158
+ {#if showIndex}
159
+ <th
160
+ class="px-6 py-2.5 text-left text-sm font-semibold whitespace-nowrap rtl:text-right"
161
+ >#</th
162
+ >
163
+ {/if}
164
+ {#each headerRow.cells as cell (cell.id)}
165
+ <Subscribe attrs={cell.attrs()} props={cell.props()}>
166
+ {#snippet children({ attrs, props })}
167
+ <!-- use:props.resize : apply to th -->
168
+ <th
169
+ {...attrs}
170
+ onclick={props.sort.toggle}
171
+ class="relative cursor-pointer px-6 py-2.5 text-left text-sm font-semibold whitespace-nowrap rtl:text-right"
172
+ >
173
+ <div class="flex items-center gap-1">
174
+ <Render of={cell.render()} />
175
+ {#if props.sort?.order === 'asc'}
176
+ <iconify-icon icon="ph:caret-up" class="text-gray-500"></iconify-icon>
177
+ {:else if props.sort?.order === 'desc'}
178
+ <iconify-icon icon="ph:caret-down" class="text-gray-500"
179
+ ></iconify-icon>
180
+ {:else if props.sort?.disabled == false}
181
+ <iconify-icon icon="ph:caret-up-down" class="text-gray-500"
182
+ ></iconify-icon>
183
+ {/if}
184
+ <!-- {#if !props.resize.disabled}
185
+ <div class="resizer" use:props.resize.drag />
186
+ {/if} -->
187
+ </div>
188
+ </th>
189
+ {/snippet}
190
+ </Subscribe>
191
+ {/each}
192
+ </tr>
193
+ {/snippet}
194
+ </Subscribe>
195
+ {/each}
196
+ </thead>
197
+ <tbody
198
+ {...$tableBodyAttrs}
199
+ class="divide-y"
200
+ class:bg-white={bgWhite}
201
+ use:clickOutsideAction
202
+ onclickoutside={closeDropDown}
203
+ >
204
+ {#each $pageRows as row, index (row.id)}
205
+ <Subscribe rowAttrs={row.attrs()}>
206
+ {#snippet children({ rowAttrs })}
207
+ <tr
208
+ {...rowAttrs}
209
+ class:bg-slate-100={index % 2 !== 0}
210
+ class:cursor-pointer={rowClickable}
211
+ class:hover:bg-gray-100={rowClickable}
212
+ class="dark:bg-gray-900 dark:text-white dark:hover:bg-gray-800"
213
+ onclick={(e) => {
214
+ if (rowClickable) {
215
+ const target = e.target as HTMLElement | null;
216
+ if (
217
+ target &&
218
+ (target.localName === 'iconify-icon' || target.localName === 'button')
219
+ ) {
220
+ return;
221
+ }
222
+ onRowClicked && onRowClicked(getRow(row));
223
+ closeDropDown();
224
+ }
225
+ }}
226
+ >
227
+ {#if showCheckBox}
228
+ <td class="px-6 py-2">
229
+ <input
230
+ type="checkbox"
231
+ class="cursor-pointer"
232
+ onchange={(e) => {
233
+ const checked = e?.target?.checked;
234
+ handleRowCheckboxChange(checked, getRow(row));
235
+ }}
236
+ checked={selectedRows.find((x) => x.id === getRow(row).id) ?? false}
237
+ />
238
+ </td>
239
+ {/if}
240
+ {#if showActions}
241
+ <td class="px-5 py-2">
242
+ <!-- svelte-ignore a11y_consider_explicit_label -->
243
+ <button
244
+ class="dropdown-{row.id} grid h-7 w-7 place-content-center rounded-[5px] border border-gray-300 bg-gray-200 hover:bg-gray-300 dark:bg-gray-900 dark:hover:bg-gray-700"
245
+ >
246
+ <iconify-icon class="dots-menu dark:text-white" icon="tabler:dots-vertical"
247
+ ></iconify-icon>
248
+ </button>
249
+ <!-- {#if dropdown === index && openDropDown} -->
250
+ <Dropdown
251
+ triggeredBy=".dropdown-{row.id}"
252
+ placement="right"
253
+ class="list-none"
254
+ >
255
+ {#each actionLists as { name, icon, otherClasses, visible }}
256
+ {#if visible}
257
+ {#if visible(getRow(row))}
258
+ <DropdownItem
259
+ data-dropdown-id={`dropdown-${row.id}`}
260
+ class="flex w-full items-center gap-1 px-4 py-2 text-sm whitespace-nowrap hover:bg-gray-100 {otherClasses}"
261
+ onclick={(e) => {
262
+ onActionClicked && onActionClicked({ name, row: getRow(row) });
263
+ closeDropDown();
264
+ e.stopPropagation();
265
+ }}
266
+ >
267
+ {#if icon}
268
+ <iconify-icon {icon} style="font-size: 18px;"></iconify-icon>
269
+ {/if}
270
+ {name}
271
+ </DropdownItem>
272
+ {/if}
273
+ {:else}
274
+ <DropdownItem
275
+ data-dropdown-id={`dropdown-${row.id}`}
276
+ class=" flex w-full items-center gap-1 px-4 py-2 text-sm whitespace-nowrap hover:bg-gray-100 {otherClasses}"
277
+ onclick={(e) => {
278
+ onActionClicked && onActionClicked({ name, row: getRow(row) });
279
+ closeDropDown();
280
+ e.stopPropagation();
281
+ }}
282
+ >
283
+ {#if icon}
284
+ <iconify-icon {icon} style="font-size: 18px;"></iconify-icon>
285
+ {/if}
286
+ {name}
287
+ </DropdownItem>
288
+ {/if}
289
+ {:else}
290
+ {#if showViewDetails}
291
+ <DropdownItem
292
+ data-dropdown-id={`dropdown-${row.id}`}
293
+ class="flex items-center px-4 py-2 gap-1 hover:bg-gray-100 w-full text-sm"
294
+ onclick={(e) => {
295
+ onView && onView(getRow(row));
296
+ closeDropDown();
297
+ e.stopPropagation();
298
+ }}
299
+ >
300
+ <iconify-icon icon="ion:eye" style="font-size: 18px;"
301
+ ></iconify-icon>View Details
302
+ </DropdownItem>
303
+ {/if}
304
+
305
+ {#if showEdit}
306
+ <DropdownItem
307
+ data-dropdown-id={`dropdown-${row.id}`}
308
+ class="flex items-center px-4 py-2 gap-1 hover:bg-gray-100 w-full text-sm"
309
+ onclick={(e) => {
310
+ onEdit && onEdit(getRow(row));
311
+ closeDropDown();
312
+ e.stopPropagation();
313
+ }}
314
+ >
315
+ <iconify-icon icon="ri:edit-2-fill" style="font-size: 18px;"
316
+ ></iconify-icon>Edit Details
317
+ </DropdownItem>
318
+ {/if}
319
+ {#if showDelete}
320
+ <DropdownItem
321
+ data-dropdown-id={`dropdown-${row.id}`}
322
+ class="flex items-center px-4 py-2 gap-1 text-red-600 hover:bg-red-100 w-full text-sm"
323
+ onclick={(e) => {
324
+ onDelete && onDelete(getRow(row));
325
+ closeDropDown();
326
+ e.stopPropagation();
327
+ }}
328
+ >
329
+ <iconify-icon icon="mdi:trash" style="font-size: 18px;"
330
+ ></iconify-icon>Delete Details
331
+ </DropdownItem>
332
+ {/if}
333
+ {/each}
334
+ </Dropdown>
335
+
336
+ <!-- {/if} -->
337
+ </td>
338
+ {/if}
339
+ {#if showIndex}
340
+ <td class="px-6 py-2">
341
+ {index + 1}
342
+ </td>
343
+ {/if}
344
+ {#each row.cells as cell (cell.id)}
345
+ <Subscribe attrs={cell.attrs()}>
346
+ {#snippet children({ attrs })}
347
+ <td
348
+ {...attrs}
349
+ class="px-6 py-2 text-left text-sm rtl:text-right"
350
+ class:whitespace-nowrap={hideWhiteSpace}
351
+ >
352
+ <Render of={cell.render()} />
353
+ </td>
354
+ {/snippet}
355
+ </Subscribe>
356
+ {/each}
357
+ </tr>
358
+ {/snippet}
359
+ </Subscribe>
360
+ {/each}
361
+ </tbody>
362
+ </table>
363
+ <div class="h-48"></div>
364
+
365
+ {#if !$pageRows.length}
366
+ <div class="flex h-72 w-full items-center justify-center">
367
+ <div class="rounded-md bg-yellow-200 px-6 py-4">No records found</div>
368
+ </div>
369
+ {/if}
370
+ </div>
371
+ </div>
372
+ </div>
373
+
374
+ <style>
375
+ .resizer {
376
+ position: absolute;
377
+ top: 0;
378
+ bottom: 0;
379
+ right: -4px;
380
+ width: 8px;
381
+ background: #6194d9;
382
+ cursor: col-resize;
383
+ z-index: 1;
384
+ }
385
+ </style>
@@ -0,0 +1,4 @@
1
+ import { type TableProps } from '../../index.js';
2
+ declare const Table: import("svelte").Component<TableProps, {}, "hiddenColumns" | "sortedColumns" | "selectedRows" | "selectAllChecked">;
3
+ type Table = ReturnType<typeof Table>;
4
+ export default Table;
@@ -0,0 +1 @@
1
+ export { default as Table } from "./Table.svelte";
@@ -0,0 +1 @@
1
+ export { default as Table } from "./Table.svelte";
@@ -0,0 +1,24 @@
1
+ <script>
2
+ let { bodySize = 10, headerSize = 6 } = $props();
3
+ </script>
4
+
5
+ <table class="w-full animate-pulse">
6
+ <thead>
7
+ {#each Array(headerSize) as _}
8
+ <th class="whitespace-nowrap px-6 py-2">
9
+ <div class=" h-7 rounded-md bg-gray-300"></div>
10
+ </th>
11
+ {/each}
12
+ </thead>
13
+ <tbody class="divide-y border-t border-gray-400">
14
+ {#each Array(bodySize) as _}
15
+ <tr>
16
+ {#each Array(headerSize) as _}
17
+ <td class="whitespace-nowrap px-6 py-2">
18
+ <div class=" h-7 rounded-md bg-gray-300"></div>
19
+ </td>
20
+ {/each}
21
+ </tr>
22
+ {/each}
23
+ </tbody>
24
+ </table>
@@ -0,0 +1,13 @@
1
+ export default TableLoader;
2
+ type TableLoader = {
3
+ $on?(type: string, callback: (e: any) => void): () => void;
4
+ $set?(props: Partial<$$ComponentProps>): void;
5
+ };
6
+ declare const TableLoader: import("svelte").Component<{
7
+ bodySize?: number;
8
+ headerSize?: number;
9
+ }, {}, "">;
10
+ type $$ComponentProps = {
11
+ bodySize?: number;
12
+ headerSize?: number;
13
+ };
@@ -0,0 +1 @@
1
+ export { default as TableLoader } from "./TableLoader.svelte";
@@ -0,0 +1 @@
1
+ export { default as TableLoader } from "./TableLoader.svelte";