@ifloppy/maxcraftmc-ui-svelte 0.1.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 (495) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/LICENSE +201 -0
  3. package/NOTICE +11 -0
  4. package/README.md +122 -0
  5. package/css/_popover.scss +325 -0
  6. package/css/all.css +1 -0
  7. package/css/all.scss +81 -0
  8. package/css/g10.css +1 -0
  9. package/css/g10.scss +34 -0
  10. package/css/g100.css +1 -0
  11. package/css/g100.scss +33 -0
  12. package/css/g80.css +1 -0
  13. package/css/g80.scss +34 -0
  14. package/css/g90.css +1 -0
  15. package/css/g90.scss +33 -0
  16. package/css/maxcraft.css +3239 -0
  17. package/css/white.css +1 -0
  18. package/css/white.scss +33 -0
  19. package/docs/compatibility.md +53 -0
  20. package/docs/component-catalog.md +99 -0
  21. package/docs/consumer-checklist.md +42 -0
  22. package/docs/contributing.md +80 -0
  23. package/docs/hugo-integration.md +94 -0
  24. package/docs/installation.md +89 -0
  25. package/docs/publishing.md +74 -0
  26. package/docs/svelte-migration.md +123 -0
  27. package/docs/theme-tokens.md +60 -0
  28. package/examples/component-gallery/index.html +12 -0
  29. package/examples/component-gallery/src/App.svelte +474 -0
  30. package/examples/component-gallery/src/main.js +6 -0
  31. package/examples/component-gallery/vite.config.js +6 -0
  32. package/examples/hugo-head.html +25 -0
  33. package/examples/hugo-module-mounts.toml +34 -0
  34. package/examples/svelte-basic/+layout.svelte +11 -0
  35. package/examples/svelte-basic/+page.svelte +150 -0
  36. package/package.json +80 -0
  37. package/src/Accordion/Accordion.svelte +60 -0
  38. package/src/Accordion/AccordionItem.svelte +79 -0
  39. package/src/Accordion/AccordionSkeleton.svelte +63 -0
  40. package/src/Accordion/index.js +3 -0
  41. package/src/AspectRatio/AspectRatio.svelte +25 -0
  42. package/src/AspectRatio/index.js +1 -0
  43. package/src/Breadcrumb/Breadcrumb.svelte +40 -0
  44. package/src/Breadcrumb/BreadcrumbItem.svelte +46 -0
  45. package/src/Breadcrumb/BreadcrumbSkeleton.svelte +26 -0
  46. package/src/Breadcrumb/index.js +3 -0
  47. package/src/Breakpoint/Breakpoint.svelte +47 -0
  48. package/src/Breakpoint/breakpointObserver.d.ts +28 -0
  49. package/src/Breakpoint/breakpointObserver.js +82 -0
  50. package/src/Breakpoint/breakpoints.d.ts +11 -0
  51. package/src/Breakpoint/breakpoints.js +13 -0
  52. package/src/Breakpoint/index.d.ts +4 -0
  53. package/src/Breakpoint/index.js +3 -0
  54. package/src/Button/Button.svelte +212 -0
  55. package/src/Button/ButtonSet.svelte +12 -0
  56. package/src/Button/ButtonSkeleton.svelte +54 -0
  57. package/src/Button/index.js +3 -0
  58. package/src/Checkbox/Checkbox.svelte +130 -0
  59. package/src/Checkbox/CheckboxSkeleton.svelte +14 -0
  60. package/src/Checkbox/InlineCheckbox.svelte +41 -0
  61. package/src/Checkbox/index.js +3 -0
  62. package/src/CodeSnippet/CodeSnippet.svelte +280 -0
  63. package/src/CodeSnippet/CodeSnippetSkeleton.svelte +27 -0
  64. package/src/CodeSnippet/index.js +2 -0
  65. package/src/ComboBox/ComboBox.svelte +432 -0
  66. package/src/ComboBox/index.js +1 -0
  67. package/src/ComposedModal/ComposedModal.svelte +172 -0
  68. package/src/ComposedModal/ModalBody.svelte +22 -0
  69. package/src/ComposedModal/ModalFooter.svelte +90 -0
  70. package/src/ComposedModal/ModalHeader.svelte +65 -0
  71. package/src/ComposedModal/index.js +4 -0
  72. package/src/ContentSwitcher/ContentSwitcher.svelte +74 -0
  73. package/src/ContentSwitcher/Switch.svelte +72 -0
  74. package/src/ContentSwitcher/index.js +2 -0
  75. package/src/ContextMenu/ContextMenu.svelte +196 -0
  76. package/src/ContextMenu/ContextMenuDivider.svelte +1 -0
  77. package/src/ContextMenu/ContextMenuGroup.svelte +36 -0
  78. package/src/ContextMenu/ContextMenuOption.svelte +286 -0
  79. package/src/ContextMenu/ContextMenuRadioGroup.svelte +34 -0
  80. package/src/ContextMenu/index.js +5 -0
  81. package/src/CopyButton/CopyButton.svelte +82 -0
  82. package/src/CopyButton/index.js +1 -0
  83. package/src/DataTable/DataTable.svelte +609 -0
  84. package/src/DataTable/DataTableSkeleton.svelte +102 -0
  85. package/src/DataTable/DataTableTypes.d.ts +18 -0
  86. package/src/DataTable/Table.svelte +60 -0
  87. package/src/DataTable/TableBody.svelte +3 -0
  88. package/src/DataTable/TableCell.svelte +4 -0
  89. package/src/DataTable/TableContainer.svelte +28 -0
  90. package/src/DataTable/TableHead.svelte +5 -0
  91. package/src/DataTable/TableHeader.svelte +76 -0
  92. package/src/DataTable/TableRow.svelte +4 -0
  93. package/src/DataTable/Toolbar.svelte +34 -0
  94. package/src/DataTable/ToolbarBatchActions.svelte +99 -0
  95. package/src/DataTable/ToolbarContent.svelte +3 -0
  96. package/src/DataTable/ToolbarMenu.svelte +23 -0
  97. package/src/DataTable/ToolbarMenuItem.svelte +9 -0
  98. package/src/DataTable/ToolbarSearch.svelte +122 -0
  99. package/src/DataTable/index.js +15 -0
  100. package/src/DatePicker/DatePicker.svelte +271 -0
  101. package/src/DatePicker/DatePickerInput.svelte +173 -0
  102. package/src/DatePicker/DatePickerSkeleton.svelte +36 -0
  103. package/src/DatePicker/createCalendar.js +100 -0
  104. package/src/DatePicker/index.js +3 -0
  105. package/src/Dropdown/Dropdown.svelte +336 -0
  106. package/src/Dropdown/DropdownSkeleton.svelte +23 -0
  107. package/src/Dropdown/index.js +2 -0
  108. package/src/FileUploader/FileUploader.svelte +177 -0
  109. package/src/FileUploader/FileUploaderButton.svelte +125 -0
  110. package/src/FileUploader/FileUploaderDropContainer.svelte +129 -0
  111. package/src/FileUploader/FileUploaderItem.svelte +79 -0
  112. package/src/FileUploader/FileUploaderSkeleton.svelte +19 -0
  113. package/src/FileUploader/Filename.svelte +57 -0
  114. package/src/FileUploader/index.js +6 -0
  115. package/src/FluidForm/FluidForm.svelte +23 -0
  116. package/src/FluidForm/index.js +1 -0
  117. package/src/Form/Form.svelte +20 -0
  118. package/src/Form/index.js +1 -0
  119. package/src/FormGroup/FormGroup.svelte +44 -0
  120. package/src/FormGroup/index.js +1 -0
  121. package/src/FormItem/FormItem.svelte +12 -0
  122. package/src/FormItem/index.js +1 -0
  123. package/src/FormLabel/FormLabel.svelte +18 -0
  124. package/src/FormLabel/index.js +1 -0
  125. package/src/Grid/Column.svelte +119 -0
  126. package/src/Grid/Grid.svelte +58 -0
  127. package/src/Grid/Row.svelte +54 -0
  128. package/src/Grid/index.js +3 -0
  129. package/src/ImageLoader/ImageLoader.svelte +117 -0
  130. package/src/ImageLoader/index.js +1 -0
  131. package/src/InlineLoading/InlineLoading.svelte +82 -0
  132. package/src/InlineLoading/index.js +1 -0
  133. package/src/Link/Link.svelte +89 -0
  134. package/src/Link/OutboundLink.svelte +18 -0
  135. package/src/Link/index.js +2 -0
  136. package/src/ListBox/ListBox.svelte +64 -0
  137. package/src/ListBox/ListBoxField.svelte +67 -0
  138. package/src/ListBox/ListBoxMenu.svelte +18 -0
  139. package/src/ListBox/ListBoxMenuIcon.svelte +38 -0
  140. package/src/ListBox/ListBoxMenuItem.svelte +38 -0
  141. package/src/ListBox/ListBoxSelection.svelte +114 -0
  142. package/src/ListBox/index.js +6 -0
  143. package/src/ListItem/ListItem.svelte +12 -0
  144. package/src/ListItem/index.js +1 -0
  145. package/src/Loading/Loading.svelte +76 -0
  146. package/src/Loading/index.js +1 -0
  147. package/src/LocalStorage/LocalStorage.svelte +71 -0
  148. package/src/LocalStorage/index.js +1 -0
  149. package/src/Modal/Modal.svelte +304 -0
  150. package/src/Modal/index.js +1 -0
  151. package/src/Modal/modalStore.js +36 -0
  152. package/src/MultiSelect/MultiSelect.svelte +557 -0
  153. package/src/MultiSelect/index.js +1 -0
  154. package/src/Notification/InlineNotification.svelte +114 -0
  155. package/src/Notification/NotificationActionButton.svelte +18 -0
  156. package/src/Notification/NotificationButton.svelte +47 -0
  157. package/src/Notification/NotificationIcon.svelte +41 -0
  158. package/src/Notification/ToastNotification.svelte +131 -0
  159. package/src/Notification/index.js +5 -0
  160. package/src/NumberInput/NumberInput.svelte +279 -0
  161. package/src/NumberInput/NumberInputSkeleton.svelte +20 -0
  162. package/src/NumberInput/index.js +2 -0
  163. package/src/OrderedList/OrderedList.svelte +26 -0
  164. package/src/OrderedList/index.js +1 -0
  165. package/src/OverflowMenu/OverflowMenu.svelte +259 -0
  166. package/src/OverflowMenu/OverflowMenuItem.svelte +117 -0
  167. package/src/OverflowMenu/index.js +2 -0
  168. package/src/Pagination/Pagination.svelte +216 -0
  169. package/src/Pagination/PaginationSkeleton.svelte +24 -0
  170. package/src/Pagination/index.js +2 -0
  171. package/src/PaginationNav/PaginationItem.svelte +23 -0
  172. package/src/PaginationNav/PaginationNav.svelte +190 -0
  173. package/src/PaginationNav/PaginationOverflow.svelte +56 -0
  174. package/src/PaginationNav/index.js +1 -0
  175. package/src/Popover/Popover.svelte +73 -0
  176. package/src/Popover/index.js +1 -0
  177. package/src/ProgressBar/ProgressBar.svelte +110 -0
  178. package/src/ProgressBar/index.js +1 -0
  179. package/src/ProgressIndicator/ProgressIndicator.svelte +79 -0
  180. package/src/ProgressIndicator/ProgressIndicatorSkeleton.svelte +38 -0
  181. package/src/ProgressIndicator/ProgressStep.svelte +107 -0
  182. package/src/ProgressIndicator/index.js +3 -0
  183. package/src/RadioButton/RadioButton.svelte +93 -0
  184. package/src/RadioButton/RadioButtonSkeleton.svelte +13 -0
  185. package/src/RadioButton/index.js +2 -0
  186. package/src/RadioButtonGroup/RadioButtonGroup.svelte +120 -0
  187. package/src/RadioButtonGroup/index.js +1 -0
  188. package/src/RecursiveList/RecursiveList.svelte +38 -0
  189. package/src/RecursiveList/RecursiveListItem.svelte +19 -0
  190. package/src/RecursiveList/index.js +1 -0
  191. package/src/Search/Search.svelte +173 -0
  192. package/src/Search/SearchSkeleton.svelte +24 -0
  193. package/src/Search/index.js +2 -0
  194. package/src/Select/Select.svelte +248 -0
  195. package/src/Select/SelectItem.svelte +63 -0
  196. package/src/Select/SelectItemGroup.svelte +11 -0
  197. package/src/Select/SelectSkeleton.svelte +22 -0
  198. package/src/Select/index.js +4 -0
  199. package/src/SkeletonPlaceholder/SkeletonPlaceholder.svelte +10 -0
  200. package/src/SkeletonPlaceholder/index.js +1 -0
  201. package/src/SkeletonText/SkeletonText.svelte +50 -0
  202. package/src/SkeletonText/index.js +1 -0
  203. package/src/Slider/Slider.svelte +232 -0
  204. package/src/Slider/SliderSkeleton.svelte +28 -0
  205. package/src/Slider/index.js +2 -0
  206. package/src/StructuredList/StructuredList.svelte +53 -0
  207. package/src/StructuredList/StructuredListBody.svelte +13 -0
  208. package/src/StructuredList/StructuredListCell.svelte +22 -0
  209. package/src/StructuredList/StructuredListHead.svelte +13 -0
  210. package/src/StructuredList/StructuredListInput.svelte +45 -0
  211. package/src/StructuredList/StructuredListRow.svelte +44 -0
  212. package/src/StructuredList/StructuredListSkeleton.svelte +36 -0
  213. package/src/StructuredList/index.js +7 -0
  214. package/src/Tabs/Tab.svelte +74 -0
  215. package/src/Tabs/TabContent.svelte +26 -0
  216. package/src/Tabs/Tabs.svelte +168 -0
  217. package/src/Tabs/TabsSkeleton.svelte +34 -0
  218. package/src/Tabs/index.js +4 -0
  219. package/src/Tag/Tag.svelte +172 -0
  220. package/src/Tag/TagSkeleton.svelte +17 -0
  221. package/src/Tag/index.js +2 -0
  222. package/src/TextArea/TextArea.svelte +134 -0
  223. package/src/TextArea/TextAreaSkeleton.svelte +20 -0
  224. package/src/TextArea/index.js +2 -0
  225. package/src/TextInput/PasswordInput.svelte +265 -0
  226. package/src/TextInput/TextInput.svelte +249 -0
  227. package/src/TextInput/TextInputSkeleton.svelte +20 -0
  228. package/src/TextInput/index.js +3 -0
  229. package/src/Theme/Theme.svelte +120 -0
  230. package/src/Theme/index.js +1 -0
  231. package/src/Tile/ClickableTile.svelte +43 -0
  232. package/src/Tile/ExpandableTile.svelte +104 -0
  233. package/src/Tile/RadioTile.svelte +95 -0
  234. package/src/Tile/SelectableTile.svelte +95 -0
  235. package/src/Tile/Tile.svelte +18 -0
  236. package/src/Tile/TileGroup.svelte +66 -0
  237. package/src/Tile/index.js +6 -0
  238. package/src/TimePicker/TimePicker.svelte +115 -0
  239. package/src/TimePicker/TimePickerSelect.svelte +78 -0
  240. package/src/TimePicker/index.js +2 -0
  241. package/src/Toggle/Toggle.svelte +107 -0
  242. package/src/Toggle/ToggleSkeleton.svelte +51 -0
  243. package/src/Toggle/index.js +2 -0
  244. package/src/Tooltip/Tooltip.svelte +269 -0
  245. package/src/Tooltip/TooltipFooter.svelte +29 -0
  246. package/src/Tooltip/index.js +2 -0
  247. package/src/TooltipDefinition/TooltipDefinition.svelte +85 -0
  248. package/src/TooltipDefinition/index.js +1 -0
  249. package/src/TooltipIcon/TooltipIcon.svelte +83 -0
  250. package/src/TooltipIcon/index.js +1 -0
  251. package/src/TreeView/TreeView.svelte +266 -0
  252. package/src/TreeView/TreeViewNode.svelte +133 -0
  253. package/src/TreeView/TreeViewNodeList.svelte +179 -0
  254. package/src/TreeView/index.d.ts +1 -0
  255. package/src/TreeView/index.js +1 -0
  256. package/src/Truncate/Truncate.svelte +12 -0
  257. package/src/Truncate/index.js +2 -0
  258. package/src/Truncate/truncate.d.ts +12 -0
  259. package/src/Truncate/truncate.js +29 -0
  260. package/src/UIShell/Content.svelte +24 -0
  261. package/src/UIShell/HamburgerMenu.svelte +45 -0
  262. package/src/UIShell/Header.svelte +103 -0
  263. package/src/UIShell/HeaderAction.svelte +160 -0
  264. package/src/UIShell/HeaderActionLink.svelte +43 -0
  265. package/src/UIShell/HeaderGlobalAction.svelte +33 -0
  266. package/src/UIShell/HeaderNav.svelte +13 -0
  267. package/src/UIShell/HeaderNavItem.svelte +66 -0
  268. package/src/UIShell/HeaderNavMenu.svelte +106 -0
  269. package/src/UIShell/HeaderPanelDivider.svelte +22 -0
  270. package/src/UIShell/HeaderPanelLink.svelte +23 -0
  271. package/src/UIShell/HeaderPanelLinks.svelte +3 -0
  272. package/src/UIShell/HeaderSearch.svelte +338 -0
  273. package/src/UIShell/HeaderUtilities.svelte +3 -0
  274. package/src/UIShell/SideNav.svelte +84 -0
  275. package/src/UIShell/SideNavDivider.svelte +1 -0
  276. package/src/UIShell/SideNavItems.svelte +3 -0
  277. package/src/UIShell/SideNavLink.svelte +54 -0
  278. package/src/UIShell/SideNavMenu.svelte +59 -0
  279. package/src/UIShell/SideNavMenuItem.svelte +32 -0
  280. package/src/UIShell/SkipToContent.svelte +11 -0
  281. package/src/UIShell/index.js +20 -0
  282. package/src/UIShell/navStore.js +7 -0
  283. package/src/UnorderedList/UnorderedList.svelte +22 -0
  284. package/src/UnorderedList/index.js +1 -0
  285. package/src/icons/Add.svelte +28 -0
  286. package/src/icons/ArrowUp.svelte +28 -0
  287. package/src/icons/ArrowsVertical.svelte +28 -0
  288. package/src/icons/Calendar.svelte +28 -0
  289. package/src/icons/CaretDown.svelte +26 -0
  290. package/src/icons/CaretLeft.svelte +26 -0
  291. package/src/icons/CaretRight.svelte +26 -0
  292. package/src/icons/Checkmark.svelte +26 -0
  293. package/src/icons/CheckmarkFilled.svelte +32 -0
  294. package/src/icons/CheckmarkOutline.svelte +30 -0
  295. package/src/icons/ChevronDown.svelte +26 -0
  296. package/src/icons/ChevronRight.svelte +26 -0
  297. package/src/icons/CircleDash.svelte +28 -0
  298. package/src/icons/Close.svelte +28 -0
  299. package/src/icons/Copy.svelte +28 -0
  300. package/src/icons/EditOff.svelte +28 -0
  301. package/src/icons/ErrorFilled.svelte +33 -0
  302. package/src/icons/IconSearch.svelte +28 -0
  303. package/src/icons/Incomplete.svelte +28 -0
  304. package/src/icons/Information.svelte +30 -0
  305. package/src/icons/InformationFilled.svelte +32 -0
  306. package/src/icons/InformationSquareFilled.svelte +32 -0
  307. package/src/icons/Launch.svelte +30 -0
  308. package/src/icons/Menu.svelte +26 -0
  309. package/src/icons/OverflowMenuHorizontal.svelte +27 -0
  310. package/src/icons/OverflowMenuVertical.svelte +27 -0
  311. package/src/icons/Settings.svelte +30 -0
  312. package/src/icons/Subtract.svelte +26 -0
  313. package/src/icons/Switcher.svelte +28 -0
  314. package/src/icons/View.svelte +30 -0
  315. package/src/icons/ViewOff.svelte +30 -0
  316. package/src/icons/Warning.svelte +29 -0
  317. package/src/icons/WarningAltFilled.svelte +34 -0
  318. package/src/icons/WarningFilled.svelte +33 -0
  319. package/src/index.js +155 -0
  320. package/src/utils/toHierarchy.d.ts +21 -0
  321. package/src/utils/toHierarchy.js +49 -0
  322. package/tokens/maxcraft.css +84 -0
  323. package/types/Accordion/Accordion.svelte.d.ts +39 -0
  324. package/types/Accordion/AccordionItem.svelte.d.ts +48 -0
  325. package/types/Accordion/AccordionSkeleton.svelte.d.ts +45 -0
  326. package/types/AspectRatio/AspectRatio.svelte.d.ts +31 -0
  327. package/types/Breadcrumb/Breadcrumb.svelte.d.ts +27 -0
  328. package/types/Breadcrumb/BreadcrumbItem.svelte.d.ts +33 -0
  329. package/types/Breadcrumb/BreadcrumbSkeleton.svelte.d.ts +33 -0
  330. package/types/Breakpoint/Breakpoint.svelte.d.ts +30 -0
  331. package/types/Breakpoint/breakpointObserver.d.ts +28 -0
  332. package/types/Breakpoint/breakpoints.d.ts +11 -0
  333. package/types/Breakpoint/index.d.ts +4 -0
  334. package/types/Button/Button.svelte.d.ts +140 -0
  335. package/types/Button/ButtonSet.svelte.d.ts +22 -0
  336. package/types/Button/ButtonSkeleton.svelte.d.ts +35 -0
  337. package/types/Checkbox/Checkbox.svelte.d.ts +109 -0
  338. package/types/Checkbox/CheckboxSkeleton.svelte.d.ts +21 -0
  339. package/types/CodeSnippet/CodeSnippet.svelte.d.ts +140 -0
  340. package/types/CodeSnippet/CodeSnippetSkeleton.svelte.d.ts +27 -0
  341. package/types/ComboBox/ComboBox.svelte.d.ts +189 -0
  342. package/types/ComposedModal/ComposedModal.svelte.d.ts +69 -0
  343. package/types/ComposedModal/ModalBody.svelte.d.ts +28 -0
  344. package/types/ComposedModal/ModalFooter.svelte.d.ts +65 -0
  345. package/types/ComposedModal/ModalHeader.svelte.d.ts +58 -0
  346. package/types/ContentSwitcher/ContentSwitcher.svelte.d.ts +34 -0
  347. package/types/ContentSwitcher/Switch.svelte.d.ts +53 -0
  348. package/types/ContextMenu/ContextMenu.svelte.d.ts +53 -0
  349. package/types/ContextMenu/ContextMenuDivider.svelte.d.ts +9 -0
  350. package/types/ContextMenu/ContextMenuGroup.svelte.d.ts +20 -0
  351. package/types/ContextMenu/ContextMenuOption.svelte.d.ts +86 -0
  352. package/types/ContextMenu/ContextMenuRadioGroup.svelte.d.ts +21 -0
  353. package/types/CopyButton/CopyButton.svelte.d.ts +50 -0
  354. package/types/DataTable/DataTable.svelte.d.ts +238 -0
  355. package/types/DataTable/DataTableSkeleton.svelte.d.ts +67 -0
  356. package/types/DataTable/DataTableTypes.d.ts +18 -0
  357. package/types/DataTable/Table.svelte.d.ts +52 -0
  358. package/types/DataTable/TableBody.svelte.d.ts +16 -0
  359. package/types/DataTable/TableCell.svelte.d.ts +21 -0
  360. package/types/DataTable/TableContainer.svelte.d.ts +40 -0
  361. package/types/DataTable/TableHead.svelte.d.ts +21 -0
  362. package/types/DataTable/TableHeader.svelte.d.ts +57 -0
  363. package/types/DataTable/TableRow.svelte.d.ts +21 -0
  364. package/types/DataTable/Toolbar.svelte.d.ts +22 -0
  365. package/types/DataTable/ToolbarBatchActions.svelte.d.ts +28 -0
  366. package/types/DataTable/ToolbarContent.svelte.d.ts +9 -0
  367. package/types/DataTable/ToolbarMenu.svelte.d.ts +10 -0
  368. package/types/DataTable/ToolbarMenuItem.svelte.d.ts +10 -0
  369. package/types/DataTable/ToolbarSearch.svelte.d.ts +84 -0
  370. package/types/DatePicker/DatePicker.svelte.d.ts +105 -0
  371. package/types/DatePicker/DatePickerInput.svelte.d.ts +118 -0
  372. package/types/DatePicker/DatePickerSkeleton.svelte.d.ts +33 -0
  373. package/types/Dropdown/Dropdown.svelte.d.ts +160 -0
  374. package/types/Dropdown/DropdownSkeleton.svelte.d.ts +27 -0
  375. package/types/FileUploader/FileUploader.svelte.d.ts +104 -0
  376. package/types/FileUploader/FileUploaderButton.svelte.d.ts +98 -0
  377. package/types/FileUploader/FileUploaderDropContainer.svelte.d.ts +92 -0
  378. package/types/FileUploader/FileUploaderItem.svelte.d.ts +69 -0
  379. package/types/FileUploader/FileUploaderSkeleton.svelte.d.ts +21 -0
  380. package/types/FileUploader/Filename.svelte.d.ts +36 -0
  381. package/types/FluidForm/FluidForm.svelte.d.ts +23 -0
  382. package/types/Form/Form.svelte.d.ts +29 -0
  383. package/types/FormGroup/FormGroup.svelte.d.ts +57 -0
  384. package/types/FormItem/FormItem.svelte.d.ts +21 -0
  385. package/types/FormLabel/FormLabel.svelte.d.ts +27 -0
  386. package/types/Grid/Column.svelte.d.ts +92 -0
  387. package/types/Grid/Grid.svelte.d.ts +65 -0
  388. package/types/Grid/Row.svelte.d.ts +59 -0
  389. package/types/ImageLoader/ImageLoader.svelte.d.ts +64 -0
  390. package/types/InlineLoading/InlineLoading.svelte.d.ts +47 -0
  391. package/types/Link/Link.svelte.d.ts +64 -0
  392. package/types/Link/OutboundLink.svelte.d.ts +15 -0
  393. package/types/ListBox/ListBox.svelte.d.ts +70 -0
  394. package/types/ListBox/ListBoxField.svelte.d.ts +67 -0
  395. package/types/ListBox/ListBoxMenu.svelte.d.ts +28 -0
  396. package/types/ListBox/ListBoxMenuIcon.svelte.d.ts +35 -0
  397. package/types/ListBox/ListBoxMenuItem.svelte.d.ts +38 -0
  398. package/types/ListBox/ListBoxSelection.svelte.d.ts +47 -0
  399. package/types/ListItem/ListItem.svelte.d.ts +21 -0
  400. package/types/Loading/Loading.svelte.d.ts +40 -0
  401. package/types/LocalStorage/LocalStorage.svelte.d.ts +34 -0
  402. package/types/Modal/Modal.svelte.d.ts +156 -0
  403. package/types/MultiSelect/MultiSelect.svelte.d.ts +264 -0
  404. package/types/Notification/InlineNotification.svelte.d.ts +82 -0
  405. package/types/Notification/NotificationActionButton.svelte.d.ts +15 -0
  406. package/types/Notification/NotificationButton.svelte.d.ts +45 -0
  407. package/types/Notification/NotificationIcon.svelte.d.ts +33 -0
  408. package/types/Notification/ToastNotification.svelte.d.ts +95 -0
  409. package/types/NumberInput/NumberInput.svelte.d.ts +168 -0
  410. package/types/NumberInput/NumberInputSkeleton.svelte.d.ts +27 -0
  411. package/types/OrderedList/OrderedList.svelte.d.ts +39 -0
  412. package/types/OverflowMenu/OverflowMenu.svelte.d.ts +96 -0
  413. package/types/OverflowMenu/OverflowMenuItem.svelte.d.ts +71 -0
  414. package/types/Pagination/Pagination.svelte.d.ts +129 -0
  415. package/types/Pagination/PaginationSkeleton.svelte.d.ts +21 -0
  416. package/types/PaginationNav/PaginationNav.svelte.d.ts +63 -0
  417. package/types/Popover/Popover.svelte.d.ts +70 -0
  418. package/types/ProgressBar/ProgressBar.svelte.d.ts +70 -0
  419. package/types/ProgressIndicator/ProgressIndicator.svelte.d.ts +46 -0
  420. package/types/ProgressIndicator/ProgressIndicatorSkeleton.svelte.d.ts +34 -0
  421. package/types/ProgressIndicator/ProgressStep.svelte.d.ts +70 -0
  422. package/types/RadioButton/RadioButton.svelte.d.ts +80 -0
  423. package/types/RadioButton/RadioButtonSkeleton.svelte.d.ts +21 -0
  424. package/types/RadioButtonGroup/RadioButtonGroup.svelte.d.ts +76 -0
  425. package/types/RecursiveList/RecursiveList.svelte.d.ts +34 -0
  426. package/types/Search/Search.svelte.d.ts +128 -0
  427. package/types/Search/SearchSkeleton.svelte.d.ts +27 -0
  428. package/types/Select/Select.svelte.d.ts +124 -0
  429. package/types/Select/SelectItem.svelte.d.ts +46 -0
  430. package/types/Select/SelectItemGroup.svelte.d.ts +28 -0
  431. package/types/Select/SelectSkeleton.svelte.d.ts +27 -0
  432. package/types/SkeletonPlaceholder/SkeletonPlaceholder.svelte.d.ts +21 -0
  433. package/types/SkeletonText/SkeletonText.svelte.d.ts +45 -0
  434. package/types/Slider/Slider.svelte.d.ts +139 -0
  435. package/types/Slider/SliderSkeleton.svelte.d.ts +27 -0
  436. package/types/StructuredList/StructuredList.svelte.d.ts +46 -0
  437. package/types/StructuredList/StructuredListBody.svelte.d.ts +21 -0
  438. package/types/StructuredList/StructuredListCell.svelte.d.ts +33 -0
  439. package/types/StructuredList/StructuredListHead.svelte.d.ts +21 -0
  440. package/types/StructuredList/StructuredListInput.svelte.d.ts +52 -0
  441. package/types/StructuredList/StructuredListRow.svelte.d.ts +40 -0
  442. package/types/StructuredList/StructuredListSkeleton.svelte.d.ts +28 -0
  443. package/types/Tabs/Tab.svelte.d.ts +58 -0
  444. package/types/Tabs/TabContent.svelte.d.ts +22 -0
  445. package/types/Tabs/Tabs.svelte.d.ts +50 -0
  446. package/types/Tabs/TabsSkeleton.svelte.d.ts +33 -0
  447. package/types/Tag/Tag.svelte.d.ts +87 -0
  448. package/types/Tag/TagSkeleton.svelte.d.ts +26 -0
  449. package/types/TextArea/TextArea.svelte.d.ts +124 -0
  450. package/types/TextArea/TextAreaSkeleton.svelte.d.ts +27 -0
  451. package/types/TextInput/PasswordInput.svelte.d.ts +154 -0
  452. package/types/TextInput/TextInput.svelte.d.ts +139 -0
  453. package/types/TextInput/TextInputSkeleton.svelte.d.ts +27 -0
  454. package/types/Theme/Theme.svelte.d.ts +58 -0
  455. package/types/Tile/ClickableTile.svelte.d.ts +46 -0
  456. package/types/Tile/ExpandableTile.svelte.d.ts +88 -0
  457. package/types/Tile/RadioTile.svelte.d.ts +77 -0
  458. package/types/Tile/SelectableTile.svelte.d.ts +84 -0
  459. package/types/Tile/Tile.svelte.d.ts +27 -0
  460. package/types/Tile/TileGroup.svelte.d.ts +46 -0
  461. package/types/TimePicker/TimePicker.svelte.d.ts +112 -0
  462. package/types/TimePicker/TimePickerSelect.svelte.d.ts +63 -0
  463. package/types/Toggle/Toggle.svelte.d.ts +80 -0
  464. package/types/Toggle/ToggleSkeleton.svelte.d.ts +39 -0
  465. package/types/Tooltip/Tooltip.svelte.d.ts +106 -0
  466. package/types/Tooltip/TooltipFooter.svelte.d.ts +15 -0
  467. package/types/TooltipDefinition/TooltipDefinition.svelte.d.ts +60 -0
  468. package/types/TooltipIcon/TooltipIcon.svelte.d.ts +65 -0
  469. package/types/TreeView/TreeView.svelte.d.ts +114 -0
  470. package/types/TreeView/index.d.ts +1 -0
  471. package/types/Truncate/Truncate.svelte.d.ts +21 -0
  472. package/types/Truncate/truncate.d.ts +12 -0
  473. package/types/UIShell/Content.svelte.d.ts +22 -0
  474. package/types/UIShell/Header.svelte.d.ts +93 -0
  475. package/types/UIShell/HeaderAction.svelte.d.ts +80 -0
  476. package/types/UIShell/HeaderActionLink.svelte.d.ts +40 -0
  477. package/types/UIShell/HeaderGlobalAction.svelte.d.ts +28 -0
  478. package/types/UIShell/HeaderNav.svelte.d.ts +16 -0
  479. package/types/UIShell/HeaderNavItem.svelte.d.ts +49 -0
  480. package/types/UIShell/HeaderNavMenu.svelte.d.ts +49 -0
  481. package/types/UIShell/HeaderPanelDivider.svelte.d.ts +9 -0
  482. package/types/UIShell/HeaderPanelLink.svelte.d.ts +28 -0
  483. package/types/UIShell/HeaderPanelLinks.svelte.d.ts +9 -0
  484. package/types/UIShell/HeaderSearch.svelte.d.ts +67 -0
  485. package/types/UIShell/HeaderUtilities.svelte.d.ts +9 -0
  486. package/types/UIShell/SideNav.svelte.d.ts +56 -0
  487. package/types/UIShell/SideNavDivider.svelte.d.ts +16 -0
  488. package/types/UIShell/SideNavItems.svelte.d.ts +9 -0
  489. package/types/UIShell/SideNavLink.svelte.d.ts +46 -0
  490. package/types/UIShell/SideNavMenu.svelte.d.ts +40 -0
  491. package/types/UIShell/SideNavMenuItem.svelte.d.ts +40 -0
  492. package/types/UIShell/SkipToContent.svelte.d.ts +28 -0
  493. package/types/UnorderedList/UnorderedList.svelte.d.ts +33 -0
  494. package/types/index.d.ts +169 -0
  495. package/types/utils/toHierarchy.d.ts +21 -0
@@ -0,0 +1,609 @@
1
+ <script>
2
+ /**
3
+ * @generics {Row extends DataTableRow = DataTableRow} Row
4
+ * @template {DataTableRow} Row
5
+ * @typedef {import('./DataTableTypes.d.ts').PropertyPath<Row>} DataTableKey<Row=DataTableRow>
6
+ * @typedef {any} DataTableValue
7
+ * @typedef {{
8
+ * key: DataTableKey<Row> | (string & {});
9
+ * empty: boolean;
10
+ * display?: (item: DataTableValue, row: Row) => DataTableValue;
11
+ * sort?: false | ((a: DataTableValue, b: DataTableValue) => number);
12
+ * columnMenu?: boolean;
13
+ * width?: string;
14
+ * minWidth?: string;
15
+ * }} DataTableEmptyHeader<Row=DataTableRow>
16
+ * @typedef {{
17
+ * key: DataTableKey<Row>;
18
+ * value: DataTableValue;
19
+ * display?: (item: DataTableValue, row: Row) => DataTableValue;
20
+ * sort?: false | ((a: DataTableValue, b: DataTableValue) => number);
21
+ * columnMenu?: boolean;
22
+ * width?: string;
23
+ * minWidth?: string;
24
+ * }} DataTableNonEmptyHeader<Row=DataTableRow>
25
+ * @typedef {DataTableNonEmptyHeader<Row> | DataTableEmptyHeader<Row>} DataTableHeader<Row=DataTableRow>
26
+ * @typedef {{ id: any; [key: string]: DataTableValue; }} DataTableRow
27
+ * @typedef {any} DataTableRowId
28
+ * @typedef {{
29
+ * key: DataTableKey<Row> | (string & {});
30
+ * value: DataTableValue;
31
+ * display?: (item: DataTableValue, row: DataTableRow) => DataTableValue;
32
+ * }} DataTableCell<Row=DataTableRow>
33
+ * @slot {{ row: Row; }} expanded-row
34
+ * @slot {{ header: DataTableNonEmptyHeader; }} cell-header
35
+ * @slot {{ row: Row; cell: DataTableCell<Row>; rowIndex: number; cellIndex: number; }} cell
36
+ * @event {{ header?: DataTableHeader<Row>; row?: Row; cell?: DataTableCell<Row>; }} click
37
+ * @event {{ expanded: boolean; }} click:header--expand
38
+ * @event {{ header: DataTableHeader<Row>; sortDirection?: "ascending" | "descending" | "none" }} click:header
39
+ * @event {{ indeterminate: boolean; selected: boolean; }} click:header--select
40
+ * @event {Row} click:row
41
+ * @event {Row} mouseenter:row
42
+ * @event {Row} mouseleave:row
43
+ * @event {{ expanded: boolean; row: Row; }} click:row--expand
44
+ * @event {{ selected: boolean; row: Row; }} click:row--select
45
+ * @event {DataTableCell<Row>} click:cell
46
+ * @restProps {div}
47
+ */
48
+
49
+ /**
50
+ * Specify the data table headers
51
+ * @type {ReadonlyArray<DataTableHeader<Row>>}
52
+ */
53
+ export let headers = [];
54
+
55
+ /**
56
+ * Specify the rows the data table should render
57
+ * keys defined in `headers` are used for the row ids
58
+ * @type {ReadonlyArray<Row>}
59
+ */
60
+ export let rows = [];
61
+
62
+ /**
63
+ * Set the size of the data table
64
+ * @type {"compact" | "short" | "medium" | "tall"}
65
+ */
66
+ export let size = undefined;
67
+
68
+ /** Specify the title of the data table */
69
+ export let title = "";
70
+
71
+ /** Specify the description of the data table */
72
+ export let description = "";
73
+
74
+ /**
75
+ * Specify a name attribute for the input elements
76
+ * in a selectable data table (radio or checkbox).
77
+ * When the table is inside a form, this name will
78
+ * be included in the form data on submit.
79
+ */
80
+ export let inputName = "ccs-" + Math.random().toString(36);
81
+
82
+ /** Set to `true` to use zebra styles */
83
+ export let zebra = false;
84
+
85
+ /** Set to `true` for the sortable variant */
86
+ export let sortable = false;
87
+
88
+ /**
89
+ * Specify the header key to sort by
90
+ * @type {DataTableKey<Row>}
91
+ */
92
+ export let sortKey = null;
93
+
94
+ /**
95
+ * Specify the sort direction
96
+ * @type {"none" | "ascending" | "descending"}
97
+ */
98
+ export let sortDirection = "none";
99
+
100
+ /**
101
+ * Set to `true` for the expandable variant
102
+ * Automatically set to `true` if `batchExpansion` is `true`
103
+ */
104
+ export let expandable = false;
105
+
106
+ /**
107
+ * Set to `true` to enable batch expansion
108
+ */
109
+ export let batchExpansion = false;
110
+
111
+ /**
112
+ * Specify the row ids to be expanded
113
+ * @type {ReadonlyArray<DataTableRowId>}
114
+ */
115
+ export let expandedRowIds = [];
116
+
117
+ /**
118
+ * Specify the ids for rows that should not be expandable
119
+ * @type {ReadonlyArray<DataTableRowId>}
120
+ */
121
+ export let nonExpandableRowIds = [];
122
+
123
+ /** Set to `true` for the radio selection variant */
124
+ export let radio = false;
125
+
126
+ /**
127
+ * Set to `true` for the selectable variant
128
+ * Automatically set to `true` if `radio` or `batchSelection` are `true`
129
+ */
130
+ export let selectable = false;
131
+
132
+ /** Set to `true` to enable batch selection */
133
+ export let batchSelection = false;
134
+
135
+ /**
136
+ * Specify the row ids to be selected
137
+ * @type {ReadonlyArray<DataTableRowId>}
138
+ */
139
+ export let selectedRowIds = [];
140
+
141
+ /**
142
+ * Specify the ids of rows that should not be selectable
143
+ * @type {ReadonlyArray<DataTableRowId>}
144
+ */
145
+ export let nonSelectableRowIds = [];
146
+
147
+ /** Set to `true` to enable a sticky header */
148
+ export let stickyHeader = false;
149
+
150
+ /** Set to `true` to use static width */
151
+ export let useStaticWidth = false;
152
+
153
+ /** Specify the number of items to display in a page */
154
+ export let pageSize = 0;
155
+
156
+ /** Set to `number` to set current page */
157
+ export let page = 0;
158
+
159
+ import { createEventDispatcher, setContext } from "svelte";
160
+ import { writable } from "svelte/store";
161
+ import ChevronRight from "../icons/ChevronRight.svelte";
162
+ import InlineCheckbox from "../Checkbox/InlineCheckbox.svelte";
163
+ import RadioButton from "../RadioButton/RadioButton.svelte";
164
+ import Table from "./Table.svelte";
165
+ import TableBody from "./TableBody.svelte";
166
+ import TableCell from "./TableCell.svelte";
167
+ import TableContainer from "./TableContainer.svelte";
168
+ import TableHead from "./TableHead.svelte";
169
+ import TableHeader from "./TableHeader.svelte";
170
+ import TableRow from "./TableRow.svelte";
171
+
172
+ const sortDirectionMap = {
173
+ none: "ascending",
174
+ ascending: "descending",
175
+ descending: "none",
176
+ };
177
+ const dispatch = createEventDispatcher();
178
+ const batchSelectedIds = writable(false);
179
+ const tableRows = writable(rows);
180
+
181
+ // Internal ID prefix for radio buttons, checkboxes, etc.
182
+ // since there may be multiple `DataTable` instances that have overlapping row ids.
183
+ const id = "ccs-" + Math.random().toString(36);
184
+
185
+ // Store a copy of the original rows for filter restoration.
186
+ $: originalRows = [...rows];
187
+
188
+ $: thKeys = headers.reduce((a, c) => ({ ...a, [c.key]: c.key }), {});
189
+ const resolvePath = (object, path) => {
190
+ if (path in object) return object[path];
191
+ return path
192
+ .split(/[\.\[\]\'\"]/)
193
+ .filter((p) => p)
194
+ .reduce((o, p) => (o && typeof o === "object" ? o[p] : o), object);
195
+ };
196
+
197
+ setContext("DataTable", {
198
+ batchSelectedIds,
199
+ tableRows,
200
+ resetSelectedRowIds: () => {
201
+ selectAll = false;
202
+ selectedRowIds = [];
203
+ if (refSelectAll) refSelectAll.checked = false;
204
+ },
205
+ filterRows: (searchValue, customFilter) => {
206
+ const value = searchValue.trim().toLowerCase();
207
+
208
+ if (value.length === 0) {
209
+ // Reset to original rows.
210
+ tableRows.set(originalRows);
211
+ return originalRows.map((row) => row.id);
212
+ }
213
+
214
+ let filteredRows = [];
215
+
216
+ if (typeof customFilter === "function") {
217
+ // Apply custom filter if provided.
218
+ filteredRows = originalRows.filter((row) => customFilter(row, value));
219
+ } else {
220
+ // Default filter checks all non-id fields for a basic, case-insensitive match (non-fuzzy).
221
+ filteredRows = originalRows.filter((row) => {
222
+ return Object.entries(row)
223
+ .filter(([key]) => key !== "id")
224
+ .some(([key, _value]) => {
225
+ if (typeof _value === "string" || typeof _value === "number") {
226
+ return (_value + "")?.toLowerCase().includes(value);
227
+ }
228
+ });
229
+ });
230
+ }
231
+
232
+ tableRows.set(filteredRows);
233
+ return filteredRows.map((row) => row.id);
234
+ },
235
+ });
236
+
237
+ let expanded = false;
238
+ let parentRowId = null;
239
+
240
+ $: expandedRows = expandedRowIds.reduce(
241
+ (a, id) => ({ ...a, [id]: true }),
242
+ {},
243
+ );
244
+
245
+ let refSelectAll = null;
246
+
247
+ $: batchSelectedIds.set(selectedRowIds);
248
+ $: rowIds = $tableRows.map((row) => row.id);
249
+ $: expandableRowIds = rowIds.filter(
250
+ (id) => !nonExpandableRowIds.includes(id),
251
+ );
252
+ $: selectableRowIds = rowIds.filter(
253
+ (id) => !nonSelectableRowIds.includes(id),
254
+ );
255
+ $: selectAll =
256
+ selectableRowIds.length > 0 &&
257
+ selectedRowIds.length === selectableRowIds.length;
258
+ $: indeterminate =
259
+ selectedRowIds.length > 0 &&
260
+ selectedRowIds.length < selectableRowIds.length;
261
+ $: if (batchExpansion) {
262
+ expandable = true;
263
+ expanded = expandedRowIds.length === expandableRowIds.length;
264
+ }
265
+ $: if (radio || batchSelection) selectable = true;
266
+ $: headerKeys = headers.map(({ key }) => key);
267
+ $: tableCellsByRowId = rows.reduce((rows, row) => {
268
+ rows[row.id] = headerKeys.map((key, index) => ({
269
+ key,
270
+ value: resolvePath(row, key),
271
+ display: headers[index].display,
272
+ }));
273
+ return rows;
274
+ }, {});
275
+ $: $tableRows = rows;
276
+ $: sortedRows = [...$tableRows];
277
+ $: ascending = sortDirection === "ascending";
278
+ $: sorting = sortable && sortKey != null;
279
+ $: sortingHeader = headers.find((header) => header.key === sortKey);
280
+ $: if (sorting) {
281
+ if (sortDirection === "none") {
282
+ sortedRows = $tableRows;
283
+ } else {
284
+ sortedRows = [...$tableRows].sort((a, b) => {
285
+ const itemA = ascending
286
+ ? resolvePath(a, sortKey)
287
+ : resolvePath(b, sortKey);
288
+ const itemB = ascending
289
+ ? resolvePath(b, sortKey)
290
+ : resolvePath(a, sortKey);
291
+
292
+ if (sortingHeader?.sort) return sortingHeader.sort(itemA, itemB);
293
+
294
+ if (typeof itemA === "number" && typeof itemB === "number")
295
+ return itemA - itemB;
296
+
297
+ if ([itemA, itemB].every((item) => !item && item !== 0)) return 0;
298
+ if (!itemA && itemA !== 0) return ascending ? 1 : -1;
299
+ if (!itemB && itemB !== 0) return ascending ? -1 : 1;
300
+
301
+ return itemA
302
+ .toString()
303
+ .localeCompare(itemB.toString(), "en", { numeric: true });
304
+ });
305
+ }
306
+ }
307
+ const getDisplayedRows = (rows, page, pageSize) =>
308
+ page && pageSize
309
+ ? rows.slice((page - 1) * pageSize, page * pageSize)
310
+ : rows;
311
+ $: displayedRows = getDisplayedRows($tableRows, page, pageSize);
312
+ $: displayedSortedRows = getDisplayedRows(sortedRows, page, pageSize);
313
+
314
+ $: hasCustomHeaderWidth = headers.some(
315
+ (header) => header.width || header.minWidth,
316
+ );
317
+
318
+ /** @type {(header: DataTableHeader) => undefined | string} */
319
+ const formatHeaderWidth = (header) => {
320
+ const styles = [
321
+ header.width && `width: ${header.width}`,
322
+ header.minWidth && `min-width: ${header.minWidth}`,
323
+ ].filter(Boolean);
324
+ if (styles.length === 0) return undefined;
325
+ return styles.join(";");
326
+ };
327
+ </script>
328
+
329
+ <TableContainer {useStaticWidth} {...$$restProps}>
330
+ {#if title || $$slots.title || description || $$slots.description}
331
+ <div class:bx--data-table-header={true}>
332
+ {#if title || $$slots.title}
333
+ <h4 class:bx--data-table-header__title={true}>
334
+ <slot name="title">{title}</slot>
335
+ </h4>
336
+ {/if}
337
+ {#if description || $$slots.description}
338
+ <p class:bx--data-table-header__description={true}>
339
+ <slot name="description">{description}</slot>
340
+ </p>
341
+ {/if}
342
+ </div>
343
+ {/if}
344
+ <slot />
345
+ <Table
346
+ {zebra}
347
+ {size}
348
+ {stickyHeader}
349
+ {sortable}
350
+ {useStaticWidth}
351
+ tableStyle={hasCustomHeaderWidth && "table-layout: fixed"}
352
+ >
353
+ <TableHead>
354
+ <TableRow>
355
+ {#if expandable}
356
+ <th
357
+ scope="col"
358
+ class:bx--table-expand={true}
359
+ data-previous-value={expanded ? "collapsed" : undefined}
360
+ >
361
+ {#if batchExpansion}
362
+ <button
363
+ type="button"
364
+ class:bx--table-expand__button={true}
365
+ aria-label={expanded ? "Collapse all rows" : "Expand all rows"}
366
+ aria-controls={expandableRowIds
367
+ .map((id) => `expandable-row-${id}`)
368
+ .join(" ")}
369
+ on:click={() => {
370
+ expanded = !expanded;
371
+ expandedRowIds = expanded ? expandableRowIds : [];
372
+
373
+ dispatch("click:header--expand", { expanded });
374
+ }}
375
+ >
376
+ <ChevronRight
377
+ aria-hidden="true"
378
+ class="bx--table-expand__svg"
379
+ />
380
+ </button>
381
+ {/if}
382
+ </th>
383
+ {/if}
384
+ {#if selectable && !batchSelection}
385
+ <th scope="col"></th>
386
+ {/if}
387
+ {#if batchSelection && !radio}
388
+ <th scope="col" class:bx--table-column-checkbox={true}>
389
+ <InlineCheckbox
390
+ bind:ref={refSelectAll}
391
+ aria-label="Select all rows"
392
+ name="{id}-select-all"
393
+ value="all"
394
+ checked={selectAll}
395
+ {indeterminate}
396
+ on:change={(e) => {
397
+ dispatch("click:header--select", {
398
+ indeterminate,
399
+ selected: !indeterminate && e.target.checked,
400
+ });
401
+
402
+ if (indeterminate) {
403
+ e.target.checked = false;
404
+ selectAll = false;
405
+ selectedRowIds = [];
406
+ return;
407
+ }
408
+
409
+ if (e.target.checked) {
410
+ selectedRowIds = selectableRowIds;
411
+ } else {
412
+ selectedRowIds = [];
413
+ }
414
+ }}
415
+ />
416
+ </th>
417
+ {/if}
418
+ {#each headers as header (header.key)}
419
+ {#if header.empty}
420
+ <th scope="col" style={formatHeaderWidth(header)}></th>
421
+ {:else}
422
+ <TableHeader
423
+ id={header.key}
424
+ style={formatHeaderWidth(header)}
425
+ sortable={sortable && header.sort !== false}
426
+ sortDirection={sortKey === header.key ? sortDirection : "none"}
427
+ active={sortKey === header.key}
428
+ on:click={() => {
429
+ dispatch("click", { header });
430
+
431
+ if (header.sort === false) {
432
+ dispatch("click:header", { header });
433
+ } else {
434
+ let currentSortDirection =
435
+ sortKey === header.key ? sortDirection : "none";
436
+ sortDirection = sortDirectionMap[currentSortDirection];
437
+ sortKey =
438
+ sortDirection === "none" ? null : thKeys[header.key];
439
+ dispatch("click:header", { header, sortDirection });
440
+ }
441
+ }}
442
+ >
443
+ <slot name="cell-header" {header}>{header.value}</slot>
444
+ </TableHeader>
445
+ {/if}
446
+ {/each}
447
+ </TableRow>
448
+ </TableHead>
449
+ <TableBody>
450
+ {#each sorting ? displayedSortedRows : displayedRows as row, i (row.id)}
451
+ <TableRow
452
+ data-row={row.id}
453
+ data-parent-row={expandable ? true : undefined}
454
+ class="{selectedRowIds.includes(row.id)
455
+ ? 'bx--data-table--selected'
456
+ : ''} {expandedRows[row.id] ? 'bx--expandable-row' : ''} {expandable
457
+ ? 'bx--parent-row'
458
+ : ''} {expandable && parentRowId === row.id
459
+ ? 'bx--expandable-row--hover'
460
+ : ''}"
461
+ on:click={({ target }) => {
462
+ // forgo "click", "click:row" events if target
463
+ // resembles an overflow menu, a checkbox, or radio button
464
+ if (
465
+ [...target.classList].some((name) =>
466
+ /^bx--(overflow-menu|checkbox|radio-button)/.test(name),
467
+ )
468
+ ) {
469
+ return;
470
+ }
471
+ dispatch("click", { row });
472
+ dispatch("click:row", row);
473
+ }}
474
+ on:mouseenter={() => {
475
+ dispatch("mouseenter:row", row);
476
+ }}
477
+ on:mouseleave={() => {
478
+ dispatch("mouseleave:row", row);
479
+ }}
480
+ >
481
+ {#if expandable}
482
+ <TableCell
483
+ class="bx--table-expand"
484
+ headers="expand"
485
+ data-previous-value={!nonExpandableRowIds.includes(row.id) &&
486
+ expandedRows[row.id]
487
+ ? "collapsed"
488
+ : undefined}
489
+ >
490
+ {#if !nonExpandableRowIds.includes(row.id)}
491
+ <button
492
+ type="button"
493
+ class:bx--table-expand__button={true}
494
+ aria-controls={`expandable-row-${row.id}`}
495
+ aria-label={expandedRows[row.id]
496
+ ? "Collapse current row"
497
+ : "Expand current row"}
498
+ on:click|stopPropagation={() => {
499
+ const rowExpanded = !!expandedRows[row.id];
500
+
501
+ expandedRowIds = rowExpanded
502
+ ? expandedRowIds.filter((id) => id !== row.id)
503
+ : [...expandedRowIds, row.id];
504
+
505
+ dispatch("click:row--expand", {
506
+ row,
507
+ expanded: !rowExpanded,
508
+ });
509
+ }}
510
+ >
511
+ <ChevronRight
512
+ aria-hidden="true"
513
+ class="bx--table-expand__svg"
514
+ />
515
+ </button>
516
+ {/if}
517
+ </TableCell>
518
+ {/if}
519
+ {#if selectable}
520
+ <td
521
+ class:bx--table-column-checkbox={true}
522
+ class:bx--table-column-radio={radio}
523
+ >
524
+ {#if !nonSelectableRowIds.includes(row.id)}
525
+ {@const inputId = `${id}-${row.id}`}
526
+ {#if radio}
527
+ <RadioButton
528
+ id={inputId}
529
+ name={inputName}
530
+ checked={selectedRowIds.includes(row.id)}
531
+ value={row.id}
532
+ on:change={() => {
533
+ selectedRowIds = [row.id];
534
+ dispatch("click:row--select", { row, selected: true });
535
+ }}
536
+ />
537
+ {:else}
538
+ <InlineCheckbox
539
+ id={inputId}
540
+ name={inputName}
541
+ checked={selectedRowIds.includes(row.id)}
542
+ value={row.id}
543
+ on:change={() => {
544
+ if (selectedRowIds.includes(row.id)) {
545
+ selectedRowIds = selectedRowIds.filter(
546
+ (id) => id !== row.id,
547
+ );
548
+ dispatch("click:row--select", { row, selected: false });
549
+ } else {
550
+ selectedRowIds = [...selectedRowIds, row.id];
551
+ dispatch("click:row--select", { row, selected: true });
552
+ }
553
+ }}
554
+ />
555
+ {/if}
556
+ {/if}
557
+ </td>
558
+ {/if}
559
+ {#each tableCellsByRowId[row.id] as cell, j (cell.key)}
560
+ {#if headers[j].empty}
561
+ <td class:bx--table-column-menu={headers[j].columnMenu}>
562
+ <slot name="cell" {row} {cell} rowIndex={i} cellIndex={j}>
563
+ {cell.display ? cell.display(cell.value, row) : cell.value}
564
+ </slot>
565
+ </td>
566
+ {:else}
567
+ <TableCell
568
+ on:click={() => {
569
+ dispatch("click", { row, cell });
570
+ dispatch("click:cell", cell);
571
+ }}
572
+ >
573
+ <slot name="cell" {row} {cell} rowIndex={i} cellIndex={j}>
574
+ {cell.display ? cell.display(cell.value, row) : cell.value}
575
+ </slot>
576
+ </TableCell>
577
+ {/if}
578
+ {/each}
579
+ </TableRow>
580
+
581
+ {#if expandable}
582
+ <tr
583
+ id={`expandable-row-${row.id}`}
584
+ data-child-row
585
+ class:bx--expandable-row={true}
586
+ on:mouseenter={() => {
587
+ if (nonExpandableRowIds.includes(row.id)) return;
588
+ parentRowId = row.id;
589
+ }}
590
+ on:mouseleave={() => {
591
+ if (nonExpandableRowIds.includes(row.id)) return;
592
+ parentRowId = null;
593
+ }}
594
+ >
595
+ {#if expandedRows[row.id] && !nonExpandableRowIds.includes(row.id)}
596
+ <TableCell
597
+ colspan={selectable ? headers.length + 2 : headers.length + 1}
598
+ >
599
+ <div class:bx--child-row-inner-container={true}>
600
+ <slot name="expanded-row" {row} />
601
+ </div>
602
+ </TableCell>
603
+ {/if}
604
+ </tr>
605
+ {/if}
606
+ {/each}
607
+ </TableBody>
608
+ </Table>
609
+ </TableContainer>
@@ -0,0 +1,102 @@
1
+ <script>
2
+ /** @extends {"./DataTable.svelte"} DataTableHeader */
3
+
4
+ /**
5
+ * Specify the number of columns
6
+ * Superseded by `headers` if `headers` is a non-empty array
7
+ */
8
+ export let columns = 5;
9
+
10
+ /** Specify the number of rows */
11
+ export let rows = 5;
12
+
13
+ /**
14
+ * Set the size of the data table
15
+ * @type {"compact" | "short" | "tall"}
16
+ */
17
+ export let size = undefined;
18
+
19
+ /** Set to `true` to apply zebra styles to the datatable rows */
20
+ export let zebra = false;
21
+
22
+ /** Set to `false` to hide the header */
23
+ export let showHeader = true;
24
+
25
+ /**
26
+ * Set the column headers
27
+ * Supersedes `columns` if value is a non-empty array
28
+ * @type {ReadonlyArray<string | Partial<DataTableHeader>>}
29
+ */
30
+ export let headers = [];
31
+
32
+ /** Set to `false` to hide the toolbar */
33
+ export let showToolbar = true;
34
+
35
+ $: values = headers.map((header) =>
36
+ header.value !== undefined ? header.value : header,
37
+ );
38
+ $: cols = Array.from(
39
+ { length: headers.length > 0 ? headers.length : columns },
40
+ (_, i) => i,
41
+ );
42
+ </script>
43
+
44
+ <!-- svelte-ignore a11y-mouse-events-have-key-events -->
45
+ <div
46
+ class:bx--skeleton={true}
47
+ class:bx--data-table-container={true}
48
+ {...$$restProps}
49
+ >
50
+ {#if showHeader}
51
+ <div class:bx--data-table-header={true}>
52
+ <div class:bx--data-table-header__title={true}></div>
53
+ <div class:bx--data-table-header__description={true}></div>
54
+ </div>
55
+ {/if}
56
+ {#if showToolbar}
57
+ <section aria-label="data table toolbar" class:bx--table-toolbar={true}>
58
+ <div class:bx--toolbar-content={true}>
59
+ <span
60
+ class:bx--skeleton={true}
61
+ class:bx--btn={true}
62
+ class:bx--btn--sm={true}
63
+ ></span>
64
+ </div>
65
+ </section>
66
+ {/if}
67
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
68
+ <!-- svelte-ignore a11y-no-noninteractive-element-interactions -->
69
+ <table
70
+ class:bx--skeleton={true}
71
+ class:bx--data-table={true}
72
+ class:bx--data-table--compact={size === "compact"}
73
+ class:bx--data-table--short={size === "short"}
74
+ class:bx--data-table--tall={size === "tall"}
75
+ class:bx--data-table--zebra={zebra}
76
+ on:click
77
+ on:mouseover
78
+ on:mouseenter
79
+ on:mouseleave
80
+ >
81
+ <thead>
82
+ <tr>
83
+ {#each cols as col (col)}
84
+ {#if typeof values[col] === "object" && values[col].empty === true}
85
+ <th></th>
86
+ {:else}
87
+ <th>{values[col] || ""}</th>
88
+ {/if}
89
+ {/each}
90
+ </tr>
91
+ </thead>
92
+ <tbody>
93
+ {#each Array.from({ length: rows }, (_, i) => i) as row (row)}
94
+ <tr>
95
+ {#each cols as col (col)}
96
+ <td><span></span></td>
97
+ {/each}
98
+ </tr>
99
+ {/each}
100
+ </tbody>
101
+ </table>
102
+ </div>