sveltacular 0.0.76 → 1.0.0

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 (374) hide show
  1. package/README.md +142 -15
  2. package/dist/forms/base-input-wrapper.svelte +99 -0
  3. package/dist/forms/base-input-wrapper.svelte.d.ts +15 -0
  4. package/dist/forms/bool-box/bool-box.svelte +30 -17
  5. package/dist/forms/bool-box/bool-box.svelte.d.ts +9 -21
  6. package/dist/forms/button/button.svelte +153 -89
  7. package/dist/forms/button/button.svelte.d.ts +25 -29
  8. package/dist/forms/check-box/check-box-group.svelte +63 -29
  9. package/dist/forms/check-box/check-box-group.svelte.d.ts +11 -27
  10. package/dist/forms/check-box/check-box.svelte +57 -33
  11. package/dist/forms/check-box/check-box.svelte.d.ts +15 -25
  12. package/dist/forms/check-box/index.d.ts +2 -0
  13. package/dist/forms/check-box/index.js +2 -0
  14. package/dist/forms/combo/new-or-existing-combo.svelte +37 -18
  15. package/dist/forms/combo/new-or-existing-combo.svelte.d.ts +15 -25
  16. package/dist/forms/combo-box/combo-box.svelte +655 -0
  17. package/dist/forms/combo-box/combo-box.svelte.d.ts +62 -0
  18. package/dist/forms/combo-box/index.d.ts +1 -0
  19. package/dist/forms/combo-box/index.js +1 -0
  20. package/dist/forms/date-box/date-box.svelte +80 -54
  21. package/dist/forms/date-box/date-box.svelte.d.ts +21 -32
  22. package/dist/forms/file-area/file-area.svelte +109 -68
  23. package/dist/forms/file-area/file-area.svelte.d.ts +12 -22
  24. package/dist/forms/file-box/file-box.svelte +40 -21
  25. package/dist/forms/file-box/file-box.svelte.d.ts +14 -25
  26. package/dist/forms/form-field.svelte +18 -15
  27. package/dist/forms/form-field.svelte.d.ts +8 -18
  28. package/dist/forms/form-footer.svelte +6 -3
  29. package/dist/forms/form-footer.svelte.d.ts +6 -26
  30. package/dist/forms/form-header.svelte +15 -4
  31. package/dist/forms/form-header.svelte.d.ts +8 -18
  32. package/dist/forms/form-label.svelte +15 -6
  33. package/dist/forms/form-label.svelte.d.ts +8 -19
  34. package/dist/forms/form-section.svelte +15 -4
  35. package/dist/forms/form-section.svelte.d.ts +8 -18
  36. package/dist/forms/form.svelte +30 -13
  37. package/dist/forms/form.svelte.d.ts +11 -22
  38. package/dist/forms/index.d.ts +26 -0
  39. package/dist/forms/index.js +31 -0
  40. package/dist/forms/info-box/info-box.svelte +19 -8
  41. package/dist/forms/info-box/info-box.svelte.d.ts +8 -19
  42. package/dist/forms/list-box/index.d.ts +2 -0
  43. package/dist/forms/list-box/index.js +1 -0
  44. package/dist/forms/list-box/list-box.svelte +190 -118
  45. package/dist/forms/list-box/list-box.svelte.d.ts +16 -26
  46. package/dist/forms/money-box/money-box.svelte +223 -190
  47. package/dist/forms/money-box/money-box.svelte.d.ts +16 -28
  48. package/dist/forms/number-box/number-box.svelte +84 -67
  49. package/dist/forms/number-box/number-box.svelte.d.ts +17 -28
  50. package/dist/forms/phone-box/index.d.ts +1 -0
  51. package/dist/forms/phone-box/index.js +1 -0
  52. package/dist/forms/phone-box/phone-box.svelte +152 -122
  53. package/dist/forms/phone-box/phone-box.svelte.d.ts +8 -20
  54. package/dist/forms/radio-group/index.d.ts +2 -0
  55. package/dist/forms/radio-group/index.js +2 -0
  56. package/dist/forms/radio-group/radio-box.svelte +23 -8
  57. package/dist/forms/radio-group/radio-box.svelte.d.ts +10 -19
  58. package/dist/forms/radio-group/radio-group.svelte +27 -13
  59. package/dist/forms/radio-group/radio-group.svelte.d.ts +10 -21
  60. package/dist/forms/slider/slider.svelte +210 -0
  61. package/dist/forms/slider/slider.svelte.d.ts +17 -0
  62. package/dist/forms/switch-box/switch-box.svelte +35 -21
  63. package/dist/forms/switch-box/switch-box.svelte.d.ts +9 -20
  64. package/dist/forms/text-area/text-area.svelte +89 -15
  65. package/dist/forms/text-area/text-area.svelte.d.ts +15 -23
  66. package/dist/forms/text-box/text-box.svelte +253 -75
  67. package/dist/forms/text-box/text-box.svelte.d.ts +28 -36
  68. package/dist/forms/time-box/time-box.svelte +67 -0
  69. package/dist/forms/time-box/time-box.svelte.d.ts +12 -0
  70. package/dist/forms/url-box/url-box.svelte +32 -18
  71. package/dist/forms/url-box/url-box.svelte.d.ts +9 -20
  72. package/dist/forms/validation.d.ts +60 -0
  73. package/dist/forms/validation.js +123 -0
  74. package/dist/generic/address/address.svelte +22 -13
  75. package/dist/generic/address/address.svelte.d.ts +9 -19
  76. package/dist/generic/avatar/avatar.svelte +86 -0
  77. package/dist/generic/avatar/avatar.svelte.d.ts +10 -0
  78. package/dist/generic/badge/badge.svelte +82 -0
  79. package/dist/generic/badge/badge.svelte.d.ts +11 -0
  80. package/dist/generic/card/card-container.svelte +41 -13
  81. package/dist/generic/card/card-container.svelte.d.ts +8 -18
  82. package/dist/generic/card/card.svelte +47 -29
  83. package/dist/generic/card/card.svelte.d.ts +9 -19
  84. package/dist/generic/card/index.d.ts +3 -0
  85. package/dist/generic/card/index.js +2 -0
  86. package/dist/generic/chip/chip.svelte +90 -0
  87. package/dist/generic/chip/chip.svelte.d.ts +11 -0
  88. package/dist/generic/date/date-time.svelte +86 -64
  89. package/dist/generic/date/date-time.svelte.d.ts +10 -20
  90. package/dist/generic/divider/divider.svelte.d.ts +22 -19
  91. package/dist/generic/dot/dot.svelte +13 -4
  92. package/dist/generic/dot/dot.svelte.d.ts +7 -17
  93. package/dist/generic/dropdown-item/dropdown-item.svelte +24 -12
  94. package/dist/generic/dropdown-item/dropdown-item.svelte.d.ts +10 -21
  95. package/dist/generic/email/email.svelte +6 -4
  96. package/dist/generic/email/email.svelte.d.ts +5 -15
  97. package/dist/generic/empty/empty.svelte +57 -26
  98. package/dist/generic/empty/empty.svelte.d.ts +11 -21
  99. package/dist/generic/header/header.svelte +26 -10
  100. package/dist/generic/header/header.svelte.d.ts +10 -20
  101. package/dist/generic/index.d.ts +28 -0
  102. package/dist/generic/index.js +31 -0
  103. package/dist/generic/link/link.svelte +20 -7
  104. package/dist/generic/link/link.svelte.d.ts +11 -21
  105. package/dist/generic/list/index.d.ts +4 -0
  106. package/dist/generic/list/index.js +3 -0
  107. package/dist/generic/list/list-item.svelte +17 -13
  108. package/dist/generic/list/list-item.svelte.d.ts +6 -15
  109. package/dist/generic/list/list.d.ts +2 -2
  110. package/dist/generic/list/list.svelte +28 -15
  111. package/dist/generic/list/list.svelte.d.ts +9 -19
  112. package/dist/generic/menu/menu.svelte +163 -57
  113. package/dist/generic/menu/menu.svelte.d.ts +16 -24
  114. package/dist/generic/notice/notice.svelte +119 -81
  115. package/dist/generic/notice/notice.svelte.d.ts +17 -26
  116. package/dist/generic/overlay.svelte +40 -14
  117. package/dist/generic/overlay.svelte.d.ts +9 -19
  118. package/dist/generic/panel/panel.svelte +16 -6
  119. package/dist/generic/panel/panel.svelte.d.ts +8 -18
  120. package/dist/generic/phone/phone.svelte +30 -24
  121. package/dist/generic/phone/phone.svelte.d.ts +6 -16
  122. package/dist/generic/pill/pill.svelte +47 -33
  123. package/dist/generic/pill/pill.svelte.d.ts +10 -21
  124. package/dist/generic/popover/popover.svelte +226 -0
  125. package/dist/generic/popover/popover.svelte.d.ts +15 -0
  126. package/dist/generic/rating/rating.svelte +85 -0
  127. package/dist/generic/rating/rating.svelte.d.ts +11 -0
  128. package/dist/generic/scorecard/scorecard.svelte +34 -21
  129. package/dist/generic/scorecard/scorecard.svelte.d.ts +9 -19
  130. package/dist/generic/section/section.svelte +28 -9
  131. package/dist/generic/section/section.svelte.d.ts +11 -21
  132. package/dist/generic/spinner/spinner.svelte +64 -0
  133. package/dist/generic/spinner/spinner.svelte.d.ts +8 -0
  134. package/dist/generic/theme-provider/index.d.ts +1 -0
  135. package/dist/generic/theme-provider/index.js +1 -0
  136. package/dist/generic/theme-provider/theme-provider-demo.svelte +182 -0
  137. package/dist/generic/theme-provider/theme-provider-demo.svelte.d.ts +3 -0
  138. package/dist/generic/theme-provider/theme-provider.svelte +83 -0
  139. package/dist/generic/theme-provider/theme-provider.svelte.d.ts +44 -0
  140. package/dist/generic/toaster/toaster.svelte +31 -6
  141. package/dist/generic/toaster/toaster.svelte.d.ts +7 -15
  142. package/dist/generic/tooltip/tooltip.svelte +389 -0
  143. package/dist/generic/tooltip/tooltip.svelte.d.ts +21 -0
  144. package/dist/helpers/ago.d.ts +7 -1
  145. package/dist/helpers/ago.js +6 -0
  146. package/dist/helpers/animation-actions.d.ts +124 -0
  147. package/dist/helpers/animation-actions.js +299 -0
  148. package/dist/helpers/animations.d.ts +198 -0
  149. package/dist/helpers/animations.js +280 -0
  150. package/dist/helpers/announcer.d.ts +118 -0
  151. package/dist/helpers/announcer.js +250 -0
  152. package/dist/helpers/copy-to-clipboard.svelte.d.ts +5 -0
  153. package/dist/helpers/copy-to-clipboard.svelte.js +28 -0
  154. package/dist/helpers/debounce.d.ts +7 -0
  155. package/dist/helpers/debounce.js +7 -0
  156. package/dist/helpers/focus.d.ts +123 -0
  157. package/dist/helpers/focus.js +335 -0
  158. package/dist/helpers/fuzzy-search.d.ts +41 -0
  159. package/dist/helpers/fuzzy-search.js +114 -0
  160. package/dist/helpers/index.d.ts +24 -0
  161. package/dist/helpers/index.js +24 -0
  162. package/dist/helpers/navigate-to.d.ts +4 -0
  163. package/dist/helpers/navigate-to.js +4 -0
  164. package/dist/helpers/positioning.d.ts +97 -0
  165. package/dist/helpers/positioning.js +230 -0
  166. package/dist/helpers/round-to-decimals.d.ts +7 -5
  167. package/dist/helpers/round-to-decimals.js +7 -5
  168. package/dist/helpers/spring.svelte.d.ts +97 -0
  169. package/dist/helpers/spring.svelte.js +216 -0
  170. package/dist/helpers/subscribable.d.ts +1 -2
  171. package/dist/helpers/theme.svelte.d.ts +63 -0
  172. package/dist/helpers/theme.svelte.js +123 -0
  173. package/dist/helpers/unique-id.d.ts +4 -0
  174. package/dist/helpers/unique-id.js +4 -0
  175. package/dist/helpers/use-position.svelte.d.ts +96 -0
  176. package/dist/helpers/use-position.svelte.js +189 -0
  177. package/dist/helpers/use-virtual-list.svelte.d.ts +121 -0
  178. package/dist/helpers/use-virtual-list.svelte.js +239 -0
  179. package/dist/icons/angle-right-icon.svelte +2 -1
  180. package/dist/icons/angle-right-icon.svelte.d.ts +16 -12
  181. package/dist/icons/angle-up-icon.svelte.d.ts +22 -19
  182. package/dist/icons/check-icon.svelte.d.ts +22 -19
  183. package/dist/icons/copy-icon.svelte +46 -0
  184. package/dist/icons/copy-icon.svelte.d.ts +6 -0
  185. package/dist/icons/envelope-icon.svelte.d.ts +22 -19
  186. package/dist/icons/folder-open-icon.svelte.d.ts +22 -19
  187. package/dist/icons/hamburger-icon.svelte.d.ts +22 -19
  188. package/dist/icons/home-icon.svelte +2 -1
  189. package/dist/icons/home-icon.svelte.d.ts +16 -12
  190. package/dist/icons/index.d.ts +13 -0
  191. package/dist/icons/index.js +13 -0
  192. package/dist/icons/link-icon.svelte.d.ts +22 -19
  193. package/dist/icons/mobile-phone-icon.svelte.d.ts +22 -19
  194. package/dist/icons/phone-icon.svelte.d.ts +22 -19
  195. package/dist/icons/svg-icon.svelte +46 -12
  196. package/dist/icons/svg-icon.svelte.d.ts +13 -23
  197. package/dist/icons/upload-icon.svelte.d.ts +22 -19
  198. package/dist/images/icon.svelte +9 -3
  199. package/dist/images/icon.svelte.d.ts +6 -16
  200. package/dist/images/image.svelte +28 -10
  201. package/dist/images/image.svelte.d.ts +14 -26
  202. package/dist/images/index.d.ts +2 -0
  203. package/dist/images/index.js +2 -0
  204. package/dist/index.d.ts +13 -122
  205. package/dist/index.js +27 -135
  206. package/dist/layout/flex-col.svelte +65 -22
  207. package/dist/layout/flex-col.svelte.d.ts +12 -22
  208. package/dist/layout/flex-item.svelte +13 -3
  209. package/dist/layout/flex-item.svelte.d.ts +8 -18
  210. package/dist/layout/flex-row.svelte +70 -21
  211. package/dist/layout/flex-row.svelte.d.ts +14 -24
  212. package/dist/layout/grid.svelte +7 -1
  213. package/dist/layout/grid.svelte.d.ts +6 -26
  214. package/dist/layout/index.d.ts +4 -0
  215. package/dist/layout/index.js +4 -0
  216. package/dist/modals/alert.svelte +42 -28
  217. package/dist/modals/alert.svelte.d.ts +13 -24
  218. package/dist/modals/confirm.svelte +54 -37
  219. package/dist/modals/confirm.svelte.d.ts +16 -27
  220. package/dist/modals/dialog-body.svelte +10 -4
  221. package/dist/modals/dialog-body.svelte.d.ts +6 -26
  222. package/dist/modals/dialog-close-button.svelte +15 -9
  223. package/dist/modals/dialog-close-button.svelte.d.ts +6 -17
  224. package/dist/modals/dialog-footer.svelte +6 -3
  225. package/dist/modals/dialog-footer.svelte.d.ts +6 -26
  226. package/dist/modals/dialog-header.svelte +13 -1
  227. package/dist/modals/dialog-header.svelte.d.ts +7 -26
  228. package/dist/modals/dialog-window.svelte +42 -14
  229. package/dist/modals/dialog-window.svelte.d.ts +9 -17
  230. package/dist/modals/index.d.ts +9 -0
  231. package/dist/modals/index.js +9 -0
  232. package/dist/modals/modal.svelte +88 -25
  233. package/dist/modals/modal.svelte.d.ts +14 -22
  234. package/dist/modals/prompt.svelte +71 -50
  235. package/dist/modals/prompt.svelte.d.ts +19 -30
  236. package/dist/navigation/accordion/accordion.svelte +104 -0
  237. package/dist/navigation/accordion/accordion.svelte.d.ts +9 -0
  238. package/dist/navigation/app-bar/app-bar.svelte +26 -20
  239. package/dist/navigation/app-bar/app-bar.svelte.d.ts +10 -20
  240. package/dist/navigation/app-bar/app-branding.svelte +10 -5
  241. package/dist/navigation/app-bar/app-branding.svelte.d.ts +6 -15
  242. package/dist/navigation/app-bar/app-logo.svelte +20 -5
  243. package/dist/navigation/app-bar/app-logo.svelte.d.ts +9 -19
  244. package/dist/navigation/app-bar/app-nav-item.svelte +26 -14
  245. package/dist/navigation/app-bar/app-nav-item.svelte.d.ts +9 -20
  246. package/dist/navigation/app-bar/app-nav.svelte +39 -12
  247. package/dist/navigation/app-bar/app-nav.svelte.d.ts +8 -18
  248. package/dist/navigation/app-bar/index.d.ts +5 -0
  249. package/dist/navigation/app-bar/index.js +5 -0
  250. package/dist/navigation/breadcrumbs/breadcrumbs.svelte +54 -28
  251. package/dist/navigation/breadcrumbs/breadcrumbs.svelte.d.ts +12 -21
  252. package/dist/navigation/command-palette/command-palette.svelte +758 -0
  253. package/dist/navigation/command-palette/command-palette.svelte.d.ts +65 -0
  254. package/dist/navigation/command-palette/index.d.ts +2 -0
  255. package/dist/navigation/command-palette/index.js +1 -0
  256. package/dist/navigation/context-menu/README.md +146 -0
  257. package/dist/navigation/context-menu/context-menu-divider.svelte +21 -0
  258. package/dist/navigation/context-menu/context-menu-divider.svelte.d.ts +18 -0
  259. package/dist/navigation/context-menu/context-menu-item.svelte +268 -0
  260. package/dist/navigation/context-menu/context-menu-item.svelte.d.ts +19 -0
  261. package/dist/navigation/context-menu/context-menu.svelte +226 -0
  262. package/dist/navigation/context-menu/context-menu.svelte.d.ts +38 -0
  263. package/dist/navigation/context-menu/index.d.ts +3 -0
  264. package/dist/navigation/context-menu/index.js +3 -0
  265. package/dist/navigation/drawer/drawer.svelte +137 -0
  266. package/dist/navigation/drawer/drawer.svelte.d.ts +11 -0
  267. package/dist/navigation/dropdown-button/dropdown-button.svelte +58 -20
  268. package/dist/navigation/dropdown-button/dropdown-button.svelte.d.ts +10 -20
  269. package/dist/navigation/index.d.ts +11 -0
  270. package/dist/navigation/index.js +14 -0
  271. package/dist/navigation/pagination/pagination.svelte +55 -42
  272. package/dist/navigation/pagination/pagination.svelte.d.ts +10 -21
  273. package/dist/navigation/side-bar/side-bar.svelte +18 -9
  274. package/dist/navigation/side-bar/side-bar.svelte.d.ts +7 -17
  275. package/dist/navigation/tabs/index.d.ts +4 -0
  276. package/dist/navigation/tabs/index.js +3 -0
  277. package/dist/navigation/tabs/tab-context.d.ts +12 -6
  278. package/dist/navigation/tabs/tab-group.svelte +268 -55
  279. package/dist/navigation/tabs/tab-group.svelte.d.ts +9 -20
  280. package/dist/navigation/tabs/tab.svelte +64 -34
  281. package/dist/navigation/tabs/tab.svelte.d.ts +11 -22
  282. package/dist/navigation/wizard/index.d.ts +3 -0
  283. package/dist/navigation/wizard/index.js +2 -0
  284. package/dist/navigation/wizard/wizard-context.d.ts +13 -8
  285. package/dist/navigation/wizard/wizard-step.svelte +38 -15
  286. package/dist/navigation/wizard/wizard-step.svelte.d.ts +8 -18
  287. package/dist/navigation/wizard/wizard.svelte +123 -89
  288. package/dist/navigation/wizard/wizard.svelte.d.ts +15 -26
  289. package/dist/placeholders/index.d.ts +6 -0
  290. package/dist/placeholders/index.js +6 -0
  291. package/dist/placeholders/loading.svelte +39 -23
  292. package/dist/placeholders/loading.svelte.d.ts +10 -17
  293. package/dist/placeholders/progress.svelte +7 -6
  294. package/dist/placeholders/progress.svelte.d.ts +5 -15
  295. package/dist/placeholders/skeleton-input.svelte +66 -38
  296. package/dist/placeholders/skeleton-input.svelte.d.ts +5 -15
  297. package/dist/placeholders/skeleton-paragraph.svelte +25 -0
  298. package/dist/placeholders/skeleton-paragraph.svelte.d.ts +8 -0
  299. package/dist/placeholders/skeleton-table.svelte +75 -0
  300. package/dist/placeholders/skeleton-table.svelte.d.ts +8 -0
  301. package/dist/placeholders/skeleton-text.svelte +46 -16
  302. package/dist/placeholders/skeleton-text.svelte.d.ts +7 -17
  303. package/dist/tables/cell-renderers.d.ts +24 -0
  304. package/dist/tables/cell-renderers.js +228 -0
  305. package/dist/tables/data-grid.svelte +332 -135
  306. package/dist/tables/data-grid.svelte.d.ts +34 -33
  307. package/dist/tables/index.d.ts +10 -0
  308. package/dist/tables/index.js +12 -0
  309. package/dist/tables/table-caption.svelte +13 -4
  310. package/dist/tables/table-caption.svelte.d.ts +8 -18
  311. package/dist/tables/table-cell.svelte +45 -15
  312. package/dist/tables/table-cell.svelte.d.ts +10 -19
  313. package/dist/tables/table-context.svelte.d.ts +32 -0
  314. package/dist/tables/table-context.svelte.js +160 -0
  315. package/dist/tables/table-header-cell.svelte +158 -19
  316. package/dist/tables/table-header-cell.svelte.d.ts +15 -19
  317. package/dist/tables/table-header.svelte +31 -6
  318. package/dist/tables/table-header.svelte.d.ts +7 -26
  319. package/dist/tables/table-row.svelte +87 -7
  320. package/dist/tables/table-row.svelte.d.ts +10 -26
  321. package/dist/tables/table.svelte +61 -2
  322. package/dist/tables/table.svelte.d.ts +13 -26
  323. package/dist/test-utils/accessibility-helpers.d.ts +80 -0
  324. package/dist/test-utils/accessibility-helpers.js +220 -0
  325. package/dist/test-utils/index.d.ts +8 -0
  326. package/dist/test-utils/index.js +8 -0
  327. package/dist/test-utils/mock-helpers.d.ts +68 -0
  328. package/dist/test-utils/mock-helpers.js +165 -0
  329. package/dist/test-utils/render-helpers.d.ts +55 -0
  330. package/dist/test-utils/render-helpers.js +114 -0
  331. package/dist/test-utils/setup.d.ts +5 -0
  332. package/dist/test-utils/setup.js +91 -0
  333. package/dist/test-utils/test-data.d.ts +102 -0
  334. package/dist/test-utils/test-data.js +99 -0
  335. package/dist/timeline/index.d.ts +2 -0
  336. package/dist/timeline/index.js +2 -0
  337. package/dist/timeline/timeline-item.svelte +26 -9
  338. package/dist/timeline/timeline-item.svelte.d.ts +13 -23
  339. package/dist/timeline/timeline.svelte +12 -6
  340. package/dist/timeline/timeline.svelte.d.ts +6 -26
  341. package/dist/types/data.d.ts +61 -0
  342. package/dist/types/date.d.ts +1 -1
  343. package/dist/types/form.d.ts +20 -2
  344. package/dist/types/index.d.ts +5 -0
  345. package/dist/types/index.js +5 -0
  346. package/dist/types/size.d.ts +22 -0
  347. package/dist/types/size.js +22 -0
  348. package/dist/typography/code-block.svelte +89 -10
  349. package/dist/typography/code-block.svelte.d.ts +7 -17
  350. package/dist/typography/code.svelte +89 -0
  351. package/dist/typography/code.svelte.d.ts +7 -0
  352. package/dist/typography/headline.svelte +29 -9
  353. package/dist/typography/headline.svelte.d.ts +8 -18
  354. package/dist/typography/index.d.ts +6 -0
  355. package/dist/typography/index.js +6 -0
  356. package/dist/typography/paragraph.svelte +18 -10
  357. package/dist/typography/paragraph.svelte.d.ts +6 -26
  358. package/dist/typography/subtitle.svelte +18 -4
  359. package/dist/typography/subtitle.svelte.d.ts +8 -18
  360. package/dist/typography/text.svelte +20 -5
  361. package/dist/typography/text.svelte.d.ts +9 -19
  362. package/package.json +46 -36
  363. package/dist/navigation/accordian/accordian.svelte +0 -62
  364. package/dist/navigation/accordian/accordian.svelte.d.ts +0 -19
  365. package/dist/tables/table-body.svelte +0 -3
  366. package/dist/tables/table-body.svelte.d.ts +0 -27
  367. package/dist/tables/table-footer-cell.svelte +0 -22
  368. package/dist/tables/table-footer-cell.svelte.d.ts +0 -18
  369. package/dist/tables/table-footer-row.svelte +0 -3
  370. package/dist/tables/table-footer-row.svelte.d.ts +0 -27
  371. package/dist/tables/table-footer.svelte +0 -13
  372. package/dist/tables/table-footer.svelte.d.ts +0 -27
  373. package/dist/tables/table-header-row.svelte +0 -4
  374. package/dist/tables/table-header-row.svelte.d.ts +0 -27
@@ -1,111 +1,230 @@
1
- <script>import TableBody from "./table-body.svelte";
2
- import TableCell from "./table-cell.svelte";
3
- import TableFooterCell from "./table-footer-cell.svelte";
4
- import TableFooterRow from "./table-footer-row.svelte";
5
- import TableFooter from "./table-footer.svelte";
6
- import TableHeaderCell from "./table-header-cell.svelte";
7
- import TableHeaderRow from "./table-header-row.svelte";
8
- import TableHeader from "./table-header.svelte";
9
- import TableRow from "./table-row.svelte";
10
- import Table from "./table.svelte";
11
- import Button from "../forms/button/button.svelte";
12
- import DropdownItem from "../generic/dropdown-item/dropdown-item.svelte";
13
- import Empty from "../generic/empty/empty.svelte";
14
- import Pill from "../generic/pill/pill.svelte";
15
- import FolderOpenIcon from "../icons/folder-open-icon.svelte";
16
- import { formatDateTime } from "../index.js";
17
- import DropdownButton from "../navigation/dropdown-button/dropdown-button.svelte";
18
- import Pagination from "../navigation/pagination/pagination.svelte";
19
- import Loading from "../placeholders/loading.svelte";
20
- import TableCaption from "./table-caption.svelte";
21
- export let captionSide = "top";
22
- export let captionAlign = "center";
23
- export let rows = void 0;
24
- export let cols;
25
- export let pagination = void 0;
26
- export let actions = void 0;
27
- export let onPageChange = null;
28
- const getColType = (col) => {
29
- if (col.type)
30
- return col.type;
31
- if (!rows?.length)
32
- return "string";
33
- const firstRow = rows[0];
34
- if (!firstRow)
35
- return "undefined";
36
- if (col.key in firstRow)
37
- return typeof firstRow[col.key];
38
- };
39
- const format = (row, key) => {
40
- const col = cols.find((col2) => col2.key === key);
41
- if (!col)
42
- return key in row ? String(row[key]) : "";
43
- if ((row[key] === null || row[key] === void 0) && col.nullText)
44
- return col.nullText;
45
- if (String(row[key]).trim() === "" && col.emptyText)
46
- return col.emptyText;
47
- if (col.format)
48
- return col.format(row, key);
49
- if (col.type === "date")
50
- return formatDateTime(String(row[key])).substring(0, 10);
51
- if (col.type === "date-time")
52
- return formatDateTime(String(row[key]));
53
- return String(row[key]);
54
- };
55
- const calculateTotalPages = () => {
56
- if (!pagination || !rows)
57
- return 1;
58
- const totalRows = Math.max(pagination.total || rows.length);
59
- return Math.ceil(totalRows / pagination.perPage);
60
- };
61
- const changePage = async (e) => {
62
- pagination = { page: e.detail, perPage: pagination?.perPage || 5 };
63
- if (onPageChange) {
64
- rows = await onPageChange(pagination);
65
- }
66
- };
67
- const filterRows = () => {
68
- if (!rows?.length || !pagination)
69
- return rows;
70
- if (onPageChange)
71
- return rows;
72
- const currentPage = pagination.page || 1;
73
- const perPage = pagination.perPage || 5;
74
- const startIndex = currentPage * perPage - perPage;
75
- const endIndex = startIndex + perPage;
76
- return rows.filter((_row, index) => index >= startIndex && index < endIndex);
77
- };
78
- $:
79
- hasActionCol = actions?.items && actions.items.length > 0;
80
- $:
81
- colCount = Math.max(1, cols.filter((col) => !col.hide).length) + (hasActionCol ? 1 : 0);
82
- $:
83
- totalPages = pagination && rows ? calculateTotalPages() : 1;
84
- $:
85
- filteredRows = rows && pagination ? filterRows() : rows;
1
+ <script lang="ts">
2
+ import TableCell from './table-cell.svelte';
3
+ import TableHeaderCell from './table-header-cell.svelte';
4
+ import TableHeader from './table-header.svelte';
5
+ import TableRow from './table-row.svelte';
6
+ import Table from './table.svelte';
7
+ import type { ColumnDef, JsonObject, PaginationProperties } from '../types/data.js';
8
+ import Button from '../forms/button/button.svelte';
9
+ import DropdownItem from '../generic/dropdown-item/dropdown-item.svelte';
10
+ import Empty from '../generic/empty/empty.svelte';
11
+ import Pill from '../generic/pill/pill.svelte';
12
+ import FolderOpenIcon from '../icons/folder-open-icon.svelte';
13
+ import DropdownButton from '../navigation/dropdown-button/dropdown-button.svelte';
14
+ import Pagination from '../navigation/pagination/pagination.svelte';
15
+ import Loading from '../placeholders/loading.svelte';
16
+ import TableCaption from './table-caption.svelte';
17
+ import {
18
+ formatCell,
19
+ getCellLink,
20
+ getCellAlignment,
21
+ getCellTypeClass,
22
+ sortRows
23
+ } from './cell-renderers.js';
24
+ import { getTableContext } from './table-context.svelte.js';
25
+ import type { Snippet } from 'svelte';
26
+ import { useVirtualList } from '../helpers/use-virtual-list.svelte.js';
27
+ import { onMount } from 'svelte';
28
+
29
+ type PaginationEvent = (pagination: PaginationProperties) => void;
30
+
31
+ interface Action {
32
+ text: string;
33
+ onClick: (row: JsonObject) => unknown;
34
+ }
35
+
36
+ interface Actions {
37
+ text?: string;
38
+ type?: string;
39
+ items: Action[];
40
+ }
41
+
42
+ let {
43
+ captionSide = 'top' as 'top' | 'bottom',
44
+ captionAlign = 'center' as 'left' | 'center' | 'right',
45
+ rows = undefined,
46
+ cols,
47
+ pagination = undefined,
48
+ actions = undefined,
49
+ stickyHeader = false,
50
+ enableSorting = true,
51
+ enableSelection = false,
52
+ selectionMode = 'multi',
53
+ rowIdKey = 'id',
54
+ onPageChange = null,
55
+ onSort = undefined,
56
+ onSelectionChange = undefined,
57
+ children = undefined,
58
+ virtualScroll = false,
59
+ rowHeight = 48,
60
+ maxHeight = '600px'
61
+ }: {
62
+ captionSide?: 'top' | 'bottom';
63
+ captionAlign?: 'left' | 'center' | 'right';
64
+ rows?: JsonObject[];
65
+ cols: ColumnDef[];
66
+ pagination?: PaginationProperties;
67
+ actions?: Actions;
68
+ stickyHeader?: boolean;
69
+ enableSorting?: boolean;
70
+ enableSelection?: boolean;
71
+ selectionMode?: 'single' | 'multi';
72
+ rowIdKey?: string;
73
+ onPageChange?: PaginationEvent | null;
74
+ onSort?: (column: string, direction: 'asc' | 'desc') => void;
75
+ onSelectionChange?: (selectedIds: Set<string | number>) => void;
76
+ children?: Snippet;
77
+ virtualScroll?: boolean;
78
+ rowHeight?: number;
79
+ maxHeight?: string;
80
+ } = $props();
81
+
82
+ // Track current page internally
83
+ let currentPage = $state(1);
84
+
85
+ // Update currentPage when pagination prop changes
86
+ $effect(() => {
87
+ const page = pagination?.page;
88
+ if (page) {
89
+ currentPage = page;
90
+ }
91
+ });
92
+
93
+ let totalPages = $derived.by(() => {
94
+ if (!pagination || !rows) return 1;
95
+ const totalRows = Math.max(pagination.total || rows.length);
96
+ return Math.ceil(totalRows / pagination.perPage);
97
+ });
98
+
99
+ const changePage = (page: number) => {
100
+ if (!pagination) return;
101
+ currentPage = page;
102
+ // Notify parent if callback provided
103
+ if (onPageChange) {
104
+ const newPagination = { ...pagination, page };
105
+ onPageChange(newPagination);
106
+ }
107
+ };
108
+
109
+ // Computed values
110
+ let hasActionCol = $derived(actions?.items && actions.items.length > 0);
111
+ let visibleCols = $derived(cols.filter((col) => !col.hidden));
112
+ let colCount = $derived(Math.max(1, visibleCols.length) + (hasActionCol ? 1 : 0));
113
+
114
+ // Manage sort state directly in DataGrid (not via context)
115
+ let currentSortColumn = $state<string | null>(null);
116
+ let currentSortDirection = $state<'asc' | 'desc'>('asc');
117
+
118
+ // Handle sort changes
119
+ function handleSortChange(column: string, direction: 'asc' | 'desc') {
120
+ // Empty column means clear sort
121
+ if (column === '') {
122
+ currentSortColumn = null;
123
+ } else {
124
+ currentSortColumn = column;
125
+ currentSortDirection = direction;
126
+ onSort?.(column, direction);
127
+ }
128
+ }
129
+
130
+ // Apply sorting
131
+ let sortedRows = $derived.by(() => {
132
+ if (!rows?.length || !enableSorting) return rows;
133
+ if (!currentSortColumn) return rows;
134
+
135
+ const sortColumn = cols.find((col) => col.key === currentSortColumn);
136
+ if (!sortColumn) return rows;
137
+
138
+ return sortRows(rows, sortColumn, currentSortDirection);
139
+ });
140
+
141
+ // Apply pagination
142
+ let filteredRows = $derived.by(() => {
143
+ const dataRows = sortedRows;
144
+ if (!dataRows?.length || !pagination) return dataRows;
145
+
146
+ // Always do client-side pagination
147
+ // onPageChange callback is just for notification
148
+ const perPage = pagination.perPage || 5;
149
+ const startIndex = currentPage * perPage - perPage;
150
+ const endIndex = startIndex + perPage;
151
+ return dataRows.filter((_row, index) => index >= startIndex && index < endIndex);
152
+ });
153
+
154
+ // Virtual scrolling setup (only when pagination is disabled)
155
+ let tbodyRef: HTMLElement | null = null;
156
+ let virtual = $state<ReturnType<typeof useVirtualList<JsonObject>> | null>(null);
157
+
158
+ // Initialize virtual list
159
+ $effect(() => {
160
+ if (virtualScroll && !pagination) {
161
+ if (!virtual) {
162
+ virtual = useVirtualList(filteredRows || [], { itemHeight: rowHeight });
163
+ if (tbodyRef) {
164
+ virtual.setContainer(tbodyRef);
165
+ }
166
+ } else {
167
+ virtual.setItems(filteredRows || []);
168
+ }
169
+ } else if (virtual) {
170
+ virtual.destroy();
171
+ virtual = null;
172
+ }
173
+ });
174
+
175
+ // Set container when tbody ref is available
176
+ $effect(() => {
177
+ if (virtual && tbodyRef) {
178
+ virtual.setContainer(tbodyRef);
179
+ }
180
+ });
86
181
  </script>
87
182
 
88
- <Table>
89
- {#if $$slots.default}
90
- <TableCaption side={captionSide} align={captionAlign}><slot /></TableCaption>
183
+ <Table
184
+ {stickyHeader}
185
+ enableSorting={false}
186
+ {enableSelection}
187
+ {selectionMode}
188
+ {rowIdKey}
189
+ onSort={handleSortChange}
190
+ {onSelectionChange}
191
+ >
192
+ {#if children}
193
+ <TableCaption side={captionSide} align={captionAlign}>{@render children?.()}</TableCaption>
91
194
  {/if}
92
- <TableHeader>
93
- <TableHeaderRow>
94
- {#each cols as col}
95
- {#if !col.hide}
96
- <TableHeaderCell type={getColType(col)} width={col.width}>{col.label}</TableHeaderCell>
97
- {/if}
195
+
196
+ <TableHeader sticky={stickyHeader}>
197
+ <tr>
198
+ {#each visibleCols as col}
199
+ <TableHeaderCell
200
+ type={col.type}
201
+ width={col.width}
202
+ sortable={col.sortable ?? enableSorting}
203
+ sortKey={col.key}
204
+ align={getCellAlignment(col)}
205
+ isSorted={currentSortColumn === col.key}
206
+ sortDirection={currentSortColumn === col.key ? currentSortDirection : undefined}
207
+ onSort={handleSortChange}
208
+ >
209
+ {col.label}
210
+ </TableHeaderCell>
98
211
  {/each}
99
212
  {#if hasActionCol}
100
- <TableHeaderCell type="string" />
213
+ <TableHeaderCell type="actions">Actions</TableHeaderCell>
101
214
  {/if}
102
- </TableHeaderRow>
215
+ </tr>
103
216
  </TableHeader>
104
- <TableBody>
217
+
218
+ <tbody
219
+ bind:this={tbodyRef}
220
+ style={virtualScroll && !pagination
221
+ ? `display: block; max-height: ${maxHeight}; overflow-y: auto;`
222
+ : ''}
223
+ >
105
224
  {#if !filteredRows?.length}
106
225
  <TableRow>
107
226
  <TableCell colspan={colCount}>
108
- <div class="empty">
227
+ <div class="empty" role="status" aria-live="polite">
109
228
  {#if rows === undefined}
110
229
  <Loading />
111
230
  {:else}
@@ -116,32 +235,88 @@ $:
116
235
  </div>
117
236
  </TableCell>
118
237
  </TableRow>
238
+ {:else if virtualScroll && !pagination && virtual}
239
+ <!-- Virtual scrolling mode -->
240
+ <tr style="height: {virtual.totalHeight}px; position: relative;">
241
+ <td colspan={colCount} style="padding: 0; border: 0;">
242
+ {#each virtual.visibleItems as vItem (vItem.index)}
243
+ {@const row = vItem.data}
244
+ {@const index = vItem.index}
245
+ <div
246
+ style="position: absolute; top: {vItem.offsetTop}px; height: {vItem.height}px; width: 100%; display: table; table-layout: fixed;"
247
+ >
248
+ <TableRow {row} rowIndex={index} selectable={enableSelection}>
249
+ {#each visibleCols as col}
250
+ {@const cellValue = formatCell(row, col)}
251
+ {@const cellLink = getCellLink(row, col)}
252
+ {@const cellAlign = getCellAlignment(col)}
253
+ <TableCell type={getCellTypeClass(col)} width={col.width} align={cellAlign}>
254
+ {#if cellLink}
255
+ <a href={cellLink}>{cellValue}</a>
256
+ {:else if col.type === 'check' || col.type === 'boolean'}
257
+ {#if row[col.key]}
258
+ <Pill shape="circle" variant="positive" compact label="✔" />
259
+ {/if}
260
+ {:else}
261
+ {cellValue}
262
+ {/if}
263
+ </TableCell>
264
+ {/each}
265
+ {#if hasActionCol && actions}
266
+ <TableCell type="actions">
267
+ {#if actions.type === 'dropdown'}
268
+ <DropdownButton text={actions.text ?? ''} variant="ghost">
269
+ {#each actions.items as action}
270
+ <DropdownItem onClick={() => action.onClick(row)}
271
+ >{action.text}</DropdownItem
272
+ >
273
+ {/each}
274
+ </DropdownButton>
275
+ {:else}
276
+ {#each actions.items as action}
277
+ <Button
278
+ collapse={true}
279
+ size="sm"
280
+ type="button"
281
+ variant={actions.type === 'outline' ? 'outline' : 'secondary'}
282
+ onClick={() => action.onClick(row)}
283
+ label={action.text}
284
+ />
285
+ {/each}
286
+ {/if}
287
+ </TableCell>
288
+ {/if}
289
+ </TableRow>
290
+ </div>
291
+ {/each}
292
+ </td>
293
+ </tr>
119
294
  {:else}
120
- {#each filteredRows as row}
121
- <TableRow>
122
- {#each cols as col}
123
- {#if !col.hide}
124
- <TableCell type={col.type || typeof row[col.key]} width={col.width}>
125
- {#if col.link}
126
- <a href={col.link(row, col.key)}>{format(row, col.key)}</a>
127
- {:else if col.type == 'email' && row[col.key]}
128
- <a href={`mailto:${row[col.key]}`}>{format(row, col.key)}</a>
129
- {:else if col.type == 'check'}
130
- {#if row[col.key]}
131
- <Pill shape="circle" style="positive" compact>✔</Pill>
132
- {/if}
133
- {:else}
134
- {format(row, col.key)}
295
+ <!-- Regular rendering mode -->
296
+ {#each filteredRows as row, index}
297
+ <TableRow {row} rowIndex={index} selectable={enableSelection}>
298
+ {#each visibleCols as col}
299
+ {@const cellValue = formatCell(row, col)}
300
+ {@const cellLink = getCellLink(row, col)}
301
+ {@const cellAlign = getCellAlignment(col)}
302
+ <TableCell type={getCellTypeClass(col)} width={col.width} align={cellAlign}>
303
+ {#if cellLink}
304
+ <a href={cellLink}>{cellValue}</a>
305
+ {:else if col.type === 'check' || col.type === 'boolean'}
306
+ {#if row[col.key]}
307
+ <Pill shape="circle" variant="positive" compact label="✔" />
135
308
  {/if}
136
- </TableCell>
137
- {/if}
309
+ {:else}
310
+ {cellValue}
311
+ {/if}
312
+ </TableCell>
138
313
  {/each}
139
314
  {#if hasActionCol && actions}
140
315
  <TableCell type="actions">
141
316
  {#if actions.type === 'dropdown'}
142
- <DropdownButton text={actions.text ?? ''} style="ghost">
317
+ <DropdownButton text={actions.text ?? ''} variant="ghost">
143
318
  {#each actions.items as action}
144
- <DropdownItem on:click={() => action.onClick(row)}>{action.text}</DropdownItem>
319
+ <DropdownItem onClick={() => action.onClick(row)}>{action.text}</DropdownItem>
145
320
  {/each}
146
321
  </DropdownButton>
147
322
  {:else}
@@ -150,9 +325,10 @@ $:
150
325
  collapse={true}
151
326
  size="sm"
152
327
  type="button"
153
- style={actions.type == 'link' ? 'link' : 'secondary'}
154
- on:click={() => action.onClick(row)}>{action.text}</Button
155
- >
328
+ variant={actions.type === 'outline' ? 'outline' : 'secondary'}
329
+ onClick={() => action.onClick(row)}
330
+ label={action.text}
331
+ />
156
332
  {/each}
157
333
  {/if}
158
334
  </TableCell>
@@ -160,22 +336,25 @@ $:
160
336
  </TableRow>
161
337
  {/each}
162
338
  {/if}
163
- </TableBody>
339
+ </tbody>
340
+
164
341
  {#if pagination}
165
- <TableFooter>
166
- <TableFooterRow>
167
- <TableFooterCell colspan={colCount}>
168
- <Pagination
169
- currentPage={pagination.page}
170
- {totalPages}
171
- style="flat"
172
- size="sm"
173
- align="center"
174
- on:page={changePage}
175
- />
176
- </TableFooterCell>
177
- </TableFooterRow>
178
- </TableFooter>
342
+ <tfoot>
343
+ <tr>
344
+ <td colspan={colCount} class="footer-cell">
345
+ <nav aria-label="Table pagination">
346
+ <Pagination
347
+ bind:currentPage
348
+ {totalPages}
349
+ variant="flat"
350
+ size="sm"
351
+ align="center"
352
+ onPage={changePage}
353
+ />
354
+ </nav>
355
+ </td>
356
+ </tr>
357
+ </tfoot>
179
358
  {/if}
180
359
  </Table>
181
360
 
@@ -191,4 +370,22 @@ a {
191
370
  }
192
371
  a:hover {
193
372
  text-decoration: underline;
373
+ }
374
+
375
+ tfoot {
376
+ background: var(--table-footer-bg);
377
+ color: var(--table-footer-fg);
378
+ border-top: solid var(--border-thin) var(--table-footer-border);
379
+ border-bottom: solid var(--border-thin) var(--table-footer-border);
380
+ font-size: var(--font-sm);
381
+ }
382
+
383
+ .footer-cell {
384
+ padding: 0.5rem;
385
+ }
386
+
387
+ td.footer-cell :global(.pagination) {
388
+ display: flex;
389
+ justify-content: center;
390
+ align-items: center;
194
391
  }</style>
@@ -1,34 +1,35 @@
1
- import { SvelteComponent } from "svelte";
2
- import type { DataCol, JsonObject, PaginationProperties } from '../types/data.js';
3
- declare const __propDef: {
4
- props: {
5
- captionSide?: "top" | "bottom" | undefined;
6
- captionAlign?: "center" | "left" | "right" | undefined;
7
- rows?: JsonObject[] | undefined;
8
- cols: DataCol[];
9
- pagination?: PaginationProperties | undefined;
10
- actions?: {
11
- text?: string | undefined;
12
- type?: string | undefined;
13
- items: {
14
- text: string;
15
- onClick: (row: JsonObject) => unknown;
16
- }[];
17
- } | undefined;
18
- /**
19
- * Handle page change, which should return the new filtered/fetched rows.
20
- */ onPageChange?: ((pagination: PaginationProperties) => Promise<JsonObject[]>) | null | undefined;
21
- };
22
- events: {
23
- [evt: string]: CustomEvent<any>;
24
- };
25
- slots: {
26
- default: {};
27
- };
28
- };
29
- export type DataGridProps = typeof __propDef.props;
30
- export type DataGridEvents = typeof __propDef.events;
31
- export type DataGridSlots = typeof __propDef.slots;
32
- export default class DataGrid extends SvelteComponent<DataGridProps, DataGridEvents, DataGridSlots> {
1
+ import type { ColumnDef, JsonObject, PaginationProperties } from '../types/data.js';
2
+ import type { Snippet } from 'svelte';
3
+ type PaginationEvent = (pagination: PaginationProperties) => void;
4
+ interface Action {
5
+ text: string;
6
+ onClick: (row: JsonObject) => unknown;
7
+ }
8
+ interface Actions {
9
+ text?: string;
10
+ type?: string;
11
+ items: Action[];
33
12
  }
34
- export {};
13
+ type $$ComponentProps = {
14
+ captionSide?: 'top' | 'bottom';
15
+ captionAlign?: 'left' | 'center' | 'right';
16
+ rows?: JsonObject[];
17
+ cols: ColumnDef[];
18
+ pagination?: PaginationProperties;
19
+ actions?: Actions;
20
+ stickyHeader?: boolean;
21
+ enableSorting?: boolean;
22
+ enableSelection?: boolean;
23
+ selectionMode?: 'single' | 'multi';
24
+ rowIdKey?: string;
25
+ onPageChange?: PaginationEvent | null;
26
+ onSort?: (column: string, direction: 'asc' | 'desc') => void;
27
+ onSelectionChange?: (selectedIds: Set<string | number>) => void;
28
+ children?: Snippet;
29
+ virtualScroll?: boolean;
30
+ rowHeight?: number;
31
+ maxHeight?: string;
32
+ };
33
+ declare const DataGrid: import("svelte").Component<$$ComponentProps, {}, "">;
34
+ type DataGrid = ReturnType<typeof DataGrid>;
35
+ export default DataGrid;
@@ -0,0 +1,10 @@
1
+ export { default as DataGrid } from './data-grid.svelte';
2
+ export { default as Table } from './table.svelte';
3
+ export { default as TableCell } from './table-cell.svelte';
4
+ export { default as TableHeader } from './table-header.svelte';
5
+ export { default as TableHeaderCell } from './table-header-cell.svelte';
6
+ export { default as TableRow } from './table-row.svelte';
7
+ export { default as TableCaption } from './table-caption.svelte';
8
+ export { createTableContext, getTableContext, TableContext } from './table-context.svelte.js';
9
+ export type { TableContextConfig } from './table-context.svelte.js';
10
+ export { formatCell, formatTextCell, formatNumberCell, formatCurrencyCell, formatDateCell, formatDateTimeCell, formatBooleanCell, formatEmailCell, formatCustomCell, getCellValue, getCellLink, getCellAlignment, getCellTypeClass, sortRows, compareValues } from './cell-renderers.js';
@@ -0,0 +1,12 @@
1
+ // Main components
2
+ export { default as DataGrid } from './data-grid.svelte';
3
+ export { default as Table } from './table.svelte';
4
+ export { default as TableCell } from './table-cell.svelte';
5
+ export { default as TableHeader } from './table-header.svelte';
6
+ export { default as TableHeaderCell } from './table-header-cell.svelte';
7
+ export { default as TableRow } from './table-row.svelte';
8
+ export { default as TableCaption } from './table-caption.svelte';
9
+ // Context and utilities
10
+ export { createTableContext, getTableContext, TableContext } from './table-context.svelte.js';
11
+ // Cell renderers and utilities
12
+ export { formatCell, formatTextCell, formatNumberCell, formatCurrencyCell, formatDateCell, formatDateTimeCell, formatBooleanCell, formatEmailCell, formatCustomCell, getCellValue, getCellLink, getCellAlignment, getCellTypeClass, sortRows, compareValues } from './cell-renderers.js';
@@ -1,9 +1,19 @@
1
- <script>export let side = "top";
2
- export let align = "center";
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+
4
+ let {
5
+ side = 'top' as 'top' | 'bottom',
6
+ align = 'center' as 'left' | 'center' | 'right',
7
+ children
8
+ }: {
9
+ side?: 'top' | 'bottom';
10
+ align?: 'left' | 'center' | 'right';
11
+ children: Snippet;
12
+ } = $props();
3
13
  </script>
4
14
 
5
15
  <caption class="{side} {align}">
6
- <slot />
16
+ {@render children?.()}
7
17
  </caption>
8
18
 
9
19
  <style>caption {
@@ -14,7 +24,6 @@ export let align = "center";
14
24
  letter-spacing: 0.1em;
15
25
  text-transform: uppercase;
16
26
  font-family: sans-serif;
17
- text-shadow: 1px 1px 1px black;
18
27
  text-align: center;
19
28
  caption-side: top;
20
29
  }