@placeholderco/placeholder-ui 1.0.11 → 2.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 (289) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +134 -130
  3. package/dist/app.css +178 -0
  4. package/dist/bootstrap.min.css +3600 -0
  5. package/dist/cards/GitCard.svelte +115 -0
  6. package/dist/cards/GitCard.svelte.d.ts +22 -0
  7. package/dist/display/Avatar.svelte +29 -17
  8. package/dist/display/Avatar.svelte.d.ts +12 -2
  9. package/dist/display/LinkCollection.svelte +40 -18
  10. package/dist/display/LinkCollection.svelte.d.ts +9 -2
  11. package/dist/display/Paper.svelte +31 -19
  12. package/dist/display/Paper.svelte.d.ts +12 -3
  13. package/dist/display/alert/Alert.svelte +129 -0
  14. package/dist/display/alert/Alert.svelte.d.ts +15 -0
  15. package/dist/display/alert/AlertVariant.d.ts +1 -0
  16. package/dist/display/alert/AlertVariant.js +1 -0
  17. package/dist/display/filetree/FileTree.svelte +259 -0
  18. package/dist/display/filetree/FileTree.svelte.d.ts +76 -0
  19. package/dist/display/filetree/FileTreeItem.svelte +396 -0
  20. package/dist/display/filetree/FileTreeItem.svelte.d.ts +40 -0
  21. package/dist/display/filetree/FileTreeNode.d.ts +46 -0
  22. package/dist/display/filetree/FileTreeNode.js +115 -0
  23. package/dist/display/filetree/index.d.ts +5 -0
  24. package/dist/display/filetree/index.js +3 -0
  25. package/dist/editors/CodeMirror.svelte +306 -0
  26. package/dist/editors/CodeMirror.svelte.d.ts +31 -0
  27. package/dist/editors/tiptap/LinkActionMenu.svelte +307 -0
  28. package/dist/editors/tiptap/LinkActionMenu.svelte.d.ts +8 -0
  29. package/dist/editors/tiptap/TipTap.svelte +856 -0
  30. package/dist/editors/tiptap/TipTap.svelte.d.ts +54 -0
  31. package/dist/editors/tiptap/TipTapBubble.svelte +790 -0
  32. package/dist/editors/tiptap/TipTapBubble.svelte.d.ts +44 -0
  33. package/dist/editors/tiptap/collaboration.d.ts +55 -0
  34. package/dist/editors/tiptap/collaboration.js +1 -0
  35. package/dist/editors/tiptap/extensions/Alert.d.ts +18 -0
  36. package/dist/editors/tiptap/extensions/Alert.js +72 -0
  37. package/dist/editors/tiptap/extensions/CodeBlockEditor.d.ts +21 -0
  38. package/dist/editors/tiptap/extensions/CodeBlockEditor.js +326 -0
  39. package/dist/editors/tiptap/extensions/Div.d.ts +19 -0
  40. package/dist/editors/tiptap/extensions/Div.js +89 -0
  41. package/dist/editors/tiptap/extensions/Span.d.ts +5 -0
  42. package/dist/editors/tiptap/extensions/Span.js +56 -0
  43. package/dist/editors/tiptap/extensions/codeBlockEditor.css +236 -0
  44. package/dist/editors/tiptap/extensions/codeBlockLanguages.d.ts +17 -0
  45. package/dist/editors/tiptap/extensions/codeBlockLanguages.js +124 -0
  46. package/dist/editors/tiptap/extensions/index.d.ts +7 -0
  47. package/dist/editors/tiptap/extensions/index.js +5 -0
  48. package/dist/editors/tiptap/toolbar/AlertButton.svelte +261 -0
  49. package/dist/editors/tiptap/toolbar/AlertButton.svelte.d.ts +7 -0
  50. package/dist/editors/tiptap/toolbar/AlignCenterButton.svelte +18 -0
  51. package/dist/editors/tiptap/toolbar/AlignCenterButton.svelte.d.ts +7 -0
  52. package/dist/editors/tiptap/toolbar/AlignJustifyButton.svelte +18 -0
  53. package/dist/editors/tiptap/toolbar/AlignJustifyButton.svelte.d.ts +7 -0
  54. package/dist/editors/tiptap/toolbar/AlignLeftButton.svelte +18 -0
  55. package/dist/editors/tiptap/toolbar/AlignLeftButton.svelte.d.ts +7 -0
  56. package/dist/editors/tiptap/toolbar/AlignRightButton.svelte +18 -0
  57. package/dist/editors/tiptap/toolbar/AlignRightButton.svelte.d.ts +7 -0
  58. package/dist/editors/tiptap/toolbar/BoldButton.svelte +18 -0
  59. package/dist/editors/tiptap/toolbar/BoldButton.svelte.d.ts +7 -0
  60. package/dist/editors/tiptap/toolbar/BulletListButton.svelte +18 -0
  61. package/dist/editors/tiptap/toolbar/BulletListButton.svelte.d.ts +7 -0
  62. package/dist/editors/tiptap/toolbar/CodeBlockButton.svelte +18 -0
  63. package/dist/editors/tiptap/toolbar/CodeBlockButton.svelte.d.ts +7 -0
  64. package/dist/editors/tiptap/toolbar/CodeButton.svelte +18 -0
  65. package/dist/editors/tiptap/toolbar/CodeButton.svelte.d.ts +7 -0
  66. package/dist/editors/tiptap/toolbar/ColorButton.svelte +299 -0
  67. package/dist/editors/tiptap/toolbar/ColorButton.svelte.d.ts +20 -0
  68. package/dist/editors/tiptap/toolbar/DocumentButton.svelte +58 -0
  69. package/dist/editors/tiptap/toolbar/DocumentButton.svelte.d.ts +9 -0
  70. package/dist/editors/tiptap/toolbar/HeadingButton.svelte +30 -0
  71. package/dist/editors/tiptap/toolbar/HeadingButton.svelte.d.ts +8 -0
  72. package/dist/editors/tiptap/toolbar/HtmlButton.svelte +68 -0
  73. package/dist/editors/tiptap/toolbar/HtmlButton.svelte.d.ts +7 -0
  74. package/dist/editors/tiptap/toolbar/ImageButton.svelte +54 -0
  75. package/dist/editors/tiptap/toolbar/ImageButton.svelte.d.ts +8 -0
  76. package/dist/editors/tiptap/toolbar/ItalicButton.svelte +18 -0
  77. package/dist/editors/tiptap/toolbar/ItalicButton.svelte.d.ts +7 -0
  78. package/dist/editors/tiptap/toolbar/LinkButton.svelte +257 -0
  79. package/dist/editors/tiptap/toolbar/LinkButton.svelte.d.ts +7 -0
  80. package/dist/editors/tiptap/toolbar/OrderedListButton.svelte +18 -0
  81. package/dist/editors/tiptap/toolbar/OrderedListButton.svelte.d.ts +7 -0
  82. package/dist/editors/tiptap/toolbar/RedoButton.svelte +18 -0
  83. package/dist/editors/tiptap/toolbar/RedoButton.svelte.d.ts +7 -0
  84. package/dist/editors/tiptap/toolbar/StrikethroughButton.svelte +18 -0
  85. package/dist/editors/tiptap/toolbar/StrikethroughButton.svelte.d.ts +7 -0
  86. package/dist/editors/tiptap/toolbar/SubscriptButton.svelte +18 -0
  87. package/dist/editors/tiptap/toolbar/SubscriptButton.svelte.d.ts +7 -0
  88. package/dist/editors/tiptap/toolbar/SuperscriptButton.svelte +18 -0
  89. package/dist/editors/tiptap/toolbar/SuperscriptButton.svelte.d.ts +7 -0
  90. package/dist/editors/tiptap/toolbar/TableButton.svelte +258 -0
  91. package/dist/editors/tiptap/toolbar/TableButton.svelte.d.ts +7 -0
  92. package/dist/editors/tiptap/toolbar/ToolbarButton.svelte +84 -0
  93. package/dist/editors/tiptap/toolbar/ToolbarButton.svelte.d.ts +10 -0
  94. package/dist/editors/tiptap/toolbar/UnderlineButton.svelte +18 -0
  95. package/dist/editors/tiptap/toolbar/UnderlineButton.svelte.d.ts +7 -0
  96. package/dist/editors/tiptap/toolbar/UndoButton.svelte +18 -0
  97. package/dist/editors/tiptap/toolbar/UndoButton.svelte.d.ts +7 -0
  98. package/dist/form/Autocomplete.svelte +270 -137
  99. package/dist/form/Autocomplete.svelte.d.ts +58 -10
  100. package/dist/form/AutocompleteMulti.svelte +385 -227
  101. package/dist/form/AutocompleteMulti.svelte.d.ts +59 -10
  102. package/dist/form/Checkbox.svelte +124 -43
  103. package/dist/form/Checkbox.svelte.d.ts +26 -2
  104. package/dist/form/Chips.svelte +47 -17
  105. package/dist/form/Chips.svelte.d.ts +24 -3
  106. package/dist/form/ComboBox.svelte +30 -20
  107. package/dist/form/ComboBox.svelte.d.ts +1 -1
  108. package/dist/form/ComboBoxItemBuilder.svelte +161 -188
  109. package/dist/form/ComboBoxItemBuilder.svelte.d.ts +19 -2
  110. package/dist/form/ComboBoxMulti.svelte +38 -24
  111. package/dist/form/ComboBoxMulti.svelte.d.ts +1 -1
  112. package/dist/form/CronBuilder.svelte +84 -67
  113. package/dist/form/CronBuilder.svelte.d.ts +16 -3
  114. package/dist/form/DatePicker.svelte +177 -191
  115. package/dist/form/DatePicker.svelte.d.ts +17 -2
  116. package/dist/form/DateRangePicker.svelte +775 -0
  117. package/dist/form/DateRangePicker.svelte.d.ts +23 -0
  118. package/dist/form/DateTimePicker.svelte +168 -209
  119. package/dist/form/DateTimePicker.svelte.d.ts +10 -2
  120. package/dist/form/FormGroup.svelte +33 -10
  121. package/dist/form/FormGroup.svelte.d.ts +12 -2
  122. package/dist/form/Number.svelte +71 -29
  123. package/dist/form/Number.svelte.d.ts +39 -6
  124. package/dist/form/Radio.svelte +174 -0
  125. package/dist/form/Radio.svelte.d.ts +21 -0
  126. package/dist/form/RadioGroup.svelte +52 -138
  127. package/dist/form/RadioGroup.svelte.d.ts +19 -2
  128. package/dist/form/SegmentedControl.svelte +103 -57
  129. package/dist/form/SegmentedControl.svelte.d.ts +12 -2
  130. package/dist/form/Select.svelte +160 -229
  131. package/dist/form/Select.svelte.d.ts +35 -6
  132. package/dist/form/SelectMulti.svelte +166 -277
  133. package/dist/form/SelectMulti.svelte.d.ts +37 -6
  134. package/dist/form/Slider.svelte +185 -268
  135. package/dist/form/Slider.svelte.d.ts +33 -16
  136. package/dist/form/StringArrayBuilder.svelte +249 -0
  137. package/dist/form/StringArrayBuilder.svelte.d.ts +15 -0
  138. package/dist/form/Switch.svelte +164 -106
  139. package/dist/form/Switch.svelte.d.ts +22 -3
  140. package/dist/form/TextArea.svelte +80 -45
  141. package/dist/form/TextArea.svelte.d.ts +35 -10
  142. package/dist/form/Textbox.svelte +80 -47
  143. package/dist/form/Textbox.svelte.d.ts +41 -8
  144. package/dist/form/TimePicker.svelte +42 -47
  145. package/dist/form/TimePicker.svelte.d.ts +12 -2
  146. package/dist/form/comboBoxCore.svelte.d.ts +99 -0
  147. package/dist/form/comboBoxCore.svelte.js +243 -0
  148. package/dist/icon/Icon.svelte +8 -3
  149. package/dist/icon/Icon.svelte.d.ts +8 -3
  150. package/dist/icon/cube-send.svg +1 -0
  151. package/dist/icon/file-type-bmp.svg +1 -0
  152. package/dist/icon/file-type-csv.svg +1 -0
  153. package/dist/icon/file-type-doc.svg +1 -0
  154. package/dist/icon/file-type-docx.svg +1 -0
  155. package/dist/icon/file-type-jpg.svg +1 -0
  156. package/dist/icon/file-type-pdf.svg +1 -0
  157. package/dist/icon/file-type-png.svg +1 -0
  158. package/dist/icon/file-type-ppt.svg +1 -0
  159. package/dist/icon/file-type-svg.svg +1 -0
  160. package/dist/icon/file-type-txt.svg +1 -0
  161. package/dist/icon/file-type-xls.svg +1 -0
  162. package/dist/icon/file-type-zip.svg +1 -0
  163. package/dist/icon/index.d.ts +166 -145
  164. package/dist/icon/index.js +166 -146
  165. package/dist/icon/layout-sidebar-left-collapse.svg +1 -0
  166. package/dist/icon/layout-sidebar-left-expand.svg +1 -0
  167. package/dist/icon/logo-placeholder.svg +6 -0
  168. package/dist/icon/paperclip.svg +1 -0
  169. package/dist/icon/source-code.svg +1 -0
  170. package/dist/icon/sun-moon.svg +1 -0
  171. package/dist/icon/table.svg +6 -0
  172. package/dist/icon/thumb-down.svg +1 -0
  173. package/dist/icon/thumb-up.svg +1 -0
  174. package/dist/index.d.ts +93 -22
  175. package/dist/index.js +28 -27
  176. package/dist/layout/AppShell.svelte +12 -162
  177. package/dist/layout/AppShell.svelte.d.ts +6 -27
  178. package/dist/layout/CustomNavbar.svelte +9 -7
  179. package/dist/layout/CustomNavbar.svelte.d.ts +4 -2
  180. package/dist/layout/Navbar.svelte +158 -110
  181. package/dist/layout/Navbar.svelte.d.ts +26 -12
  182. package/dist/layout/NavbarItemDisplay.svelte +2 -2
  183. package/dist/layout/NavbarItemView.svelte +182 -0
  184. package/dist/layout/NavbarItemView.svelte.d.ts +10 -0
  185. package/dist/layout/Sidenav.svelte +280 -341
  186. package/dist/layout/Sidenav.svelte.d.ts +36 -4
  187. package/dist/models/ComboBoxItem.d.ts +2 -0
  188. package/dist/models/Employee.d.ts +53 -0
  189. package/dist/models/Employee.js +23 -0
  190. package/dist/models/Hyperlink.d.ts +3 -1
  191. package/dist/models/LinkCollectionItem.d.ts +3 -1
  192. package/dist/models/NavbarItem.d.ts +6 -2
  193. package/dist/theme.svelte.d.ts +0 -1
  194. package/dist/theme.svelte.js +46 -58
  195. package/dist/ui/Accordion.svelte +81 -242
  196. package/dist/ui/Accordion.svelte.d.ts +37 -14
  197. package/dist/ui/AccordionItem.svelte +303 -0
  198. package/dist/ui/AccordionItem.svelte.d.ts +21 -0
  199. package/dist/ui/ActionIcon.svelte +25 -21
  200. package/dist/ui/ActionIcon.svelte.d.ts +15 -2
  201. package/dist/ui/Badge.svelte +170 -161
  202. package/dist/ui/Badge.svelte.d.ts +16 -4
  203. package/dist/ui/Button.svelte +178 -205
  204. package/dist/ui/Button.svelte.d.ts +19 -2
  205. package/dist/ui/ButtonVariant.d.ts +15 -1
  206. package/dist/ui/ContextMenu.svelte +146 -0
  207. package/dist/ui/ContextMenu.svelte.d.ts +37 -0
  208. package/dist/ui/ContextMenuList.svelte +188 -0
  209. package/dist/ui/ContextMenuList.svelte.d.ts +12 -0
  210. package/dist/ui/Dialog.svelte +183 -104
  211. package/dist/ui/Dialog.svelte.d.ts +21 -2
  212. package/dist/ui/Drawer.svelte +237 -184
  213. package/dist/ui/Drawer.svelte.d.ts +20 -2
  214. package/dist/ui/Dropdown.svelte +24 -14
  215. package/dist/ui/Dropdown.svelte.d.ts +11 -2
  216. package/dist/ui/Dropzone.svelte +159 -57
  217. package/dist/ui/Dropzone.svelte.d.ts +29 -2
  218. package/dist/ui/Link.svelte +12 -4
  219. package/dist/ui/Link.svelte.d.ts +8 -2
  220. package/dist/ui/Loader.svelte +23 -18
  221. package/dist/ui/Loader.svelte.d.ts +5 -2
  222. package/dist/ui/Logo.svelte +37 -0
  223. package/dist/ui/Logo.svelte.d.ts +16 -0
  224. package/dist/ui/MultiSortable.svelte +287 -0
  225. package/dist/ui/MultiSortable.svelte.d.ts +50 -0
  226. package/dist/ui/Pagination.svelte +12 -6
  227. package/dist/ui/Pagination.svelte.d.ts +6 -2
  228. package/dist/ui/Popover.svelte +43 -65
  229. package/dist/ui/Popover.svelte.d.ts +14 -5
  230. package/dist/ui/ProgressBar.svelte +169 -0
  231. package/dist/ui/ProgressBar.svelte.d.ts +30 -0
  232. package/dist/ui/ProgressBarVariant.d.ts +7 -0
  233. package/dist/ui/ProgressBarVariant.js +1 -0
  234. package/dist/ui/SegmentedControl.svelte +0 -0
  235. package/dist/ui/SegmentedControl.svelte.d.ts +26 -0
  236. package/dist/ui/Sortable.svelte +163 -0
  237. package/dist/ui/Sortable.svelte.d.ts +47 -0
  238. package/dist/ui/Table.svelte +497 -56
  239. package/dist/ui/Table.svelte.d.ts +64 -2
  240. package/dist/ui/Tabs.svelte +22 -18
  241. package/dist/ui/Tabs.svelte.d.ts +6 -2
  242. package/dist/ui/ThemeSwitcher.svelte +26 -7
  243. package/dist/ui/ThemeSwitcher.svelte.d.ts +4 -2
  244. package/dist/ui/Tooltip.svelte +312 -180
  245. package/dist/ui/Tooltip.svelte.d.ts +4 -3
  246. package/dist/uiTheme.svelte.d.ts +86 -0
  247. package/dist/uiTheme.svelte.js +214 -0
  248. package/dist/util/DateFunctions.js +1 -1
  249. package/dist/util/DragDrop.d.ts +50 -0
  250. package/dist/util/DragDrop.js +154 -0
  251. package/dist/util/NavigateTo.js +2 -2
  252. package/dist/util/dayjs.d.ts +4 -0
  253. package/dist/util/dayjs.js +15 -0
  254. package/dist/util/interceptLinkClick.d.ts +13 -0
  255. package/dist/util/interceptLinkClick.js +33 -0
  256. package/package.json +66 -26
  257. package/dist/display/Alert.svelte +0 -179
  258. package/dist/display/Alert.svelte.d.ts +0 -13
  259. package/dist/form/FileInput.svelte +0 -235
  260. package/dist/form/FileInput.svelte.d.ts +0 -23
  261. package/dist/form/PasswordInput.svelte +0 -252
  262. package/dist/form/PasswordInput.svelte.d.ts +0 -33
  263. package/dist/form/Rating.svelte +0 -235
  264. package/dist/form/Rating.svelte.d.ts +0 -21
  265. package/dist/styles/components.css +0 -199
  266. package/dist/styles/dark.css +0 -146
  267. package/dist/styles/index.css +0 -116
  268. package/dist/styles/reset.css +0 -110
  269. package/dist/styles/semantic.css +0 -86
  270. package/dist/styles/tokens.css +0 -203
  271. package/dist/styles/utilities.css +0 -523
  272. package/dist/ui/Breadcrumbs.svelte +0 -131
  273. package/dist/ui/Breadcrumbs.svelte.d.ts +0 -16
  274. package/dist/ui/LoadingOverlay.svelte +0 -53
  275. package/dist/ui/LoadingOverlay.svelte.d.ts +0 -11
  276. package/dist/ui/Progress.svelte +0 -191
  277. package/dist/ui/Progress.svelte.d.ts +0 -15
  278. package/dist/ui/RingProgress.svelte +0 -141
  279. package/dist/ui/RingProgress.svelte.d.ts +0 -18
  280. package/dist/ui/Skeleton.svelte +0 -85
  281. package/dist/ui/Skeleton.svelte.d.ts +0 -12
  282. package/dist/ui/Stepper.svelte +0 -355
  283. package/dist/ui/Stepper.svelte.d.ts +0 -24
  284. package/dist/ui/Timeline.svelte +0 -225
  285. package/dist/ui/Timeline.svelte.d.ts +0 -23
  286. /package/dist/{actions → util}/ClickOutside.d.ts +0 -0
  287. /package/dist/{actions → util}/ClickOutside.js +0 -0
  288. /package/dist/{transitions → util}/Transitions.d.ts +0 -0
  289. /package/dist/{transitions → util}/Transitions.js +0 -0
@@ -0,0 +1,303 @@
1
+ <script lang="ts">
2
+ import { getContext } from 'svelte';
3
+ import type { Snippet } from 'svelte';
4
+ import { slide } from 'svelte/transition';
5
+ import Icon from '../icon/Icon.svelte';
6
+ import { iconChevronDown } from '../icon/index.js';
7
+ import type { AccordionContext } from './Accordion.svelte';
8
+ import type { ButtonVariant } from './ButtonVariant.js';
9
+
10
+ export interface AccordionItemProps {
11
+ /** Unique value identifying this item. Defaults to a generated id */
12
+ value?: string;
13
+ /** Header text. Ignored when the `header` snippet is provided */
14
+ title?: string;
15
+ /** Optional leading icon (raw SVG string) shown before the title */
16
+ icon?: string;
17
+ /** Prevent the item from being toggled */
18
+ disabled?: boolean;
19
+ /** Colour variant for this item's expanded header, overriding the accordion-level variant */
20
+ variant?: ButtonVariant;
21
+ /** Custom header content, replaces `title` */
22
+ header?: Snippet;
23
+ /** Collapsible body content */
24
+ children?: Snippet;
25
+ }
26
+
27
+ const uid = $props.id();
28
+
29
+ let {
30
+ value = uid,
31
+ title = '',
32
+ icon,
33
+ disabled = false,
34
+ variant,
35
+ header,
36
+ children
37
+ }: AccordionItemProps = $props();
38
+
39
+ const accordion = getContext<AccordionContext>('accordion');
40
+
41
+ if (!accordion) {
42
+ throw new Error('AccordionItem must be used inside an Accordion');
43
+ }
44
+
45
+ const open = $derived(accordion.isOpen(value));
46
+ const small = $derived(accordion.size === 'sm');
47
+ const iconSize = $derived(small ? '16' : '18');
48
+ const effectiveVariant = $derived(variant ?? accordion.variant);
49
+ const contentId = `${uid}-content`;
50
+ const headerId = `${uid}-header`;
51
+ </script>
52
+
53
+ <div class="accordion-item variant-{effectiveVariant}" class:open class:small>
54
+ <h3 class="accordion-heading">
55
+ <button
56
+ id={headerId}
57
+ class="accordion-trigger"
58
+ type="button"
59
+ aria-expanded={open}
60
+ aria-controls={contentId}
61
+ {disabled}
62
+ onclick={() => accordion.toggle(value)}
63
+ >
64
+ {#if icon}
65
+ <Icon svg={icon} size={iconSize} class="accordion-leading-icon" />
66
+ {/if}
67
+ <span class="accordion-title">
68
+ {#if header}
69
+ {@render header()}
70
+ {:else if accordion.itemTitle}
71
+ {@render accordion.itemTitle({ value, title, open, disabled })}
72
+ {:else}
73
+ {title}
74
+ {/if}
75
+ </span>
76
+ <span class="accordion-chevron" class:rotated={open}>
77
+ <Icon svg={iconChevronDown} size={iconSize} />
78
+ </span>
79
+ </button>
80
+ </h3>
81
+
82
+ {#if open}
83
+ <div
84
+ id={contentId}
85
+ class="accordion-content"
86
+ role="region"
87
+ aria-labelledby={headerId}
88
+ transition:slide={{ duration: 200 }}
89
+ >
90
+ <div class="accordion-body">
91
+ {@render children?.()}
92
+ </div>
93
+ </div>
94
+ {/if}
95
+ </div>
96
+
97
+ <style>
98
+ .accordion-item {
99
+ border-bottom: 1px solid var(--border-color);
100
+ }
101
+
102
+ .accordion-item:last-child {
103
+ border-bottom: none;
104
+ }
105
+
106
+ .accordion-heading {
107
+ margin: 0;
108
+ font-size: inherit;
109
+ font-weight: inherit;
110
+ }
111
+
112
+ .accordion-trigger {
113
+ display: flex;
114
+ align-items: center;
115
+ gap: 0.625rem;
116
+ width: 100%;
117
+ padding: 0.875rem 1rem;
118
+ border: none;
119
+ background: transparent;
120
+ color: var(--text-color);
121
+ font-size: 0.9375rem;
122
+ font-weight: 600;
123
+ text-align: left;
124
+ cursor: pointer;
125
+ transition: background-color 0.15s ease-in-out;
126
+ }
127
+
128
+ .accordion-trigger:hover:not(:disabled) {
129
+ background-color: rgba(var(--ui-primary-rgbc), 0.05);
130
+ }
131
+
132
+ .accordion-item.open .accordion-trigger {
133
+ background-color: var(--accordion-open-bg, var(--ui-accent));
134
+ color: var(--accordion-open-color, var(--ui-primary));
135
+ box-shadow: inset 0 0 0 1px var(--accordion-open-border-color, transparent);
136
+ }
137
+
138
+ .accordion-item.open .accordion-chevron {
139
+ color: var(--accordion-open-color, var(--ui-primary));
140
+ }
141
+
142
+ .accordion-trigger:disabled {
143
+ opacity: 0.5;
144
+ cursor: not-allowed;
145
+ }
146
+
147
+ .accordion-trigger:focus-visible {
148
+ outline: 2px solid var(--ui-primary);
149
+ outline-offset: -2px;
150
+ }
151
+
152
+ .accordion-title {
153
+ flex: 1;
154
+ min-width: 0;
155
+ }
156
+
157
+ .accordion-chevron {
158
+ display: inline-flex;
159
+ color: var(--text-muted);
160
+ transition: transform 0.2s ease-in-out;
161
+ }
162
+
163
+ .accordion-chevron.rotated {
164
+ transform: rotate(180deg);
165
+ }
166
+
167
+ .accordion-content {
168
+ overflow: hidden;
169
+ }
170
+
171
+ .accordion-body {
172
+ padding: 0.875rem 1rem;
173
+ color: var(--text-color);
174
+ font-size: 0.9375rem;
175
+ line-height: 1.5;
176
+ }
177
+
178
+ .accordion-item.small .accordion-trigger {
179
+ gap: 0.5rem;
180
+ padding: 0.5rem 0.75rem;
181
+ font-size: 0.8125rem;
182
+ }
183
+
184
+ .accordion-item.small .accordion-body {
185
+ padding: 0.5rem 0.75rem;
186
+ font-size: 0.8125rem;
187
+ }
188
+
189
+ /* Variant colours for the expanded header, mirroring the Button variants.
190
+ `auto-subtle` defines nothing and falls through to the theme-aware defaults. */
191
+ .variant-white {
192
+ --accordion-open-bg: white;
193
+ --accordion-open-color: var(--ui-primary);
194
+ }
195
+
196
+ .variant-secondary,
197
+ .variant-shaded {
198
+ --accordion-open-bg: var(--border-color);
199
+ --accordion-open-color: var(--text-color);
200
+ }
201
+
202
+ .variant-secondary-subtle {
203
+ --accordion-open-bg: #aaaaaa66;
204
+ --accordion-open-color: var(--text-color);
205
+ }
206
+
207
+ .variant-secondary-selected {
208
+ --accordion-open-bg: var(--accent-color);
209
+ --accordion-open-color: white;
210
+ }
211
+
212
+ .variant-danger {
213
+ --accordion-open-bg: var(--danger-bg);
214
+ --accordion-open-color: white;
215
+ }
216
+
217
+ .variant-danger-subtle {
218
+ --accordion-open-bg: var(--danger-bg-subtle);
219
+ --accordion-open-color: var(--danger-text);
220
+ }
221
+
222
+ .variant-accent,
223
+ .variant-pistachio {
224
+ --accordion-open-bg: var(--ui-accent);
225
+ --accordion-open-color: var(--ui-primary);
226
+ }
227
+
228
+ .variant-accent-subtle,
229
+ .variant-pistachio-subtle {
230
+ --accordion-open-bg: rgba(var(--ui-accent-rgbc), 0.15);
231
+ --accordion-open-color: var(--text-color);
232
+ }
233
+
234
+ .variant-accent-outline,
235
+ .variant-pistachio-outline {
236
+ --accordion-open-bg: transparent;
237
+ --accordion-open-color: var(--ui-accent);
238
+ --accordion-open-border-color: var(--ui-accent);
239
+ }
240
+
241
+ .variant-primary,
242
+ .variant-midnight {
243
+ --accordion-open-bg: var(--ui-primary);
244
+ --accordion-open-color: white;
245
+ }
246
+
247
+ .variant-primary-subtle,
248
+ .variant-midnight-subtle {
249
+ --accordion-open-bg: rgba(var(--ui-primary-rgbc), 0.1);
250
+ --accordion-open-color: var(--text-color);
251
+ }
252
+
253
+ .variant-primary-outline,
254
+ .variant-midnight-outline {
255
+ --accordion-open-bg: transparent;
256
+ --accordion-open-color: var(--ui-primary);
257
+ --accordion-open-border-color: var(--ui-primary);
258
+ }
259
+
260
+ .variant-tertiary,
261
+ .variant-turquoise {
262
+ --accordion-open-bg: var(--ui-tertiary);
263
+ --accordion-open-color: var(--ui-primary);
264
+ }
265
+
266
+ .variant-tertiary-subtle,
267
+ .variant-turquoise-subtle {
268
+ --accordion-open-bg: rgba(var(--ui-tertiary-dark-rgbc), 0.25);
269
+ --accordion-open-color: var(--ui-tertiary-dark);
270
+ }
271
+
272
+ .variant-auto-outline {
273
+ --accordion-open-bg: transparent;
274
+ --accordion-open-color: var(--ui-primary);
275
+ --accordion-open-border-color: var(--ui-primary);
276
+ }
277
+
278
+ :global(.dark) .variant-secondary-selected {
279
+ --accordion-open-color: var(--ui-primary);
280
+ }
281
+
282
+ :global(.dark) .variant-auto-outline {
283
+ --accordion-open-color: var(--ui-accent);
284
+ --accordion-open-border-color: var(--ui-accent);
285
+ }
286
+
287
+ :global(.dark) .accordion-trigger:hover:not(:disabled) {
288
+ background-color: rgba(var(--ui-accent-rgbc), 0.05);
289
+ }
290
+
291
+ :global(.dark) .accordion-item.open .accordion-trigger {
292
+ background-color: var(--accordion-open-bg, var(--ui-primary));
293
+ color: var(--accordion-open-color, var(--ui-accent));
294
+ }
295
+
296
+ :global(.dark) .accordion-item.open .accordion-chevron {
297
+ color: var(--accordion-open-color, var(--ui-accent));
298
+ }
299
+
300
+ :global(.dark) .accordion-trigger:focus-visible {
301
+ outline-color: var(--ui-accent);
302
+ }
303
+ </style>
@@ -0,0 +1,21 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { ButtonVariant } from './ButtonVariant.js';
3
+ export interface AccordionItemProps {
4
+ /** Unique value identifying this item. Defaults to a generated id */
5
+ value?: string;
6
+ /** Header text. Ignored when the `header` snippet is provided */
7
+ title?: string;
8
+ /** Optional leading icon (raw SVG string) shown before the title */
9
+ icon?: string;
10
+ /** Prevent the item from being toggled */
11
+ disabled?: boolean;
12
+ /** Colour variant for this item's expanded header, overriding the accordion-level variant */
13
+ variant?: ButtonVariant;
14
+ /** Custom header content, replaces `title` */
15
+ header?: Snippet;
16
+ /** Collapsible body content */
17
+ children?: Snippet;
18
+ }
19
+ declare const AccordionItem: import("svelte").Component<AccordionItemProps, {}, "">;
20
+ type AccordionItem = ReturnType<typeof AccordionItem>;
21
+ export default AccordionItem;
@@ -1,20 +1,34 @@
1
1
  <script lang="ts">
2
2
  import Button from './Button.svelte';
3
3
  import Tooltip from './Tooltip.svelte';
4
+ import Icon from '../icon/Icon.svelte';
4
5
  import type { ButtonVariant } from './ButtonVariant.js';
5
6
 
6
- interface Props {
7
+ export interface ActionIconProps {
8
+ /** Visual style variant */
7
9
  variant?: ButtonVariant;
10
+ /** URL to navigate to (renders as anchor) */
8
11
  href?: string;
12
+ /** Show loading state */
9
13
  loading?: boolean;
14
+ /** Disable the button */
10
15
  disabled?: boolean;
16
+ /** Style as an input button (for form inputs) */
11
17
  inputButton?: boolean;
18
+ /** Size of the icon */
12
19
  size?: string;
20
+ /** Raw SVG HTML string. Do NOT use external/user input - it will be executed in the browser */
13
21
  svg: string;
22
+ /** Link target attribute (when href is provided) */
14
23
  target?: undefined | '_self' | '_blank';
24
+ /** Additional CSS classes */
15
25
  class?: string;
26
+ /** Click event handler */
16
27
  onclick?: (event: MouseEvent) => void;
28
+ /** Tooltip text on hover */
17
29
  tooltip?: string;
30
+ /** Accessible label for the button (recommended — the icon has no text) */
31
+ ariaLabel?: string;
18
32
  }
19
33
 
20
34
  let {
@@ -27,9 +41,10 @@
27
41
  svg,
28
42
  target = undefined,
29
43
  class: buttonClass = '',
30
- onclick = () => {},
31
- tooltip = undefined
32
- }: Props = $props();
44
+ onclick = undefined,
45
+ tooltip = undefined,
46
+ ariaLabel = undefined
47
+ }: ActionIconProps = $props();
33
48
  </script>
34
49
 
35
50
  {#snippet buttonContent()}
@@ -40,13 +55,13 @@
40
55
  {loading}
41
56
  {target}
42
57
  iconSize={size}
43
- effectsDisabled={false}
44
58
  class="action-icon {inputButton ? 'input-button' : ''} {buttonClass}"
45
59
  {onclick}
60
+ ariaLabel={ariaLabel ?? tooltip}
46
61
  >
47
- <span class="action-icon-svg" style="width:{size};height:{size};">
48
- {@html svg}
49
- </span>
62
+ {#if !loading}
63
+ <Icon {svg} {size} />
64
+ {/if}
50
65
  </Button>
51
66
  {/snippet}
52
67
 
@@ -59,18 +74,7 @@
59
74
  {/if}
60
75
 
61
76
  <style>
62
- :global(button.action-icon):active:not(:disabled) {
63
- transform: translateY(calc(0.0625rem * 1));
64
- }
65
-
66
- .action-icon-svg {
67
- display: inline-flex;
68
- align-items: center;
69
- justify-content: center;
70
- }
71
-
72
- .action-icon-svg :global(svg) {
73
- width: 100%;
74
- height: 100%;
77
+ :global(.pui-button.action-icon:active:not(:disabled)) {
78
+ transform: translateY(0.0625rem);
75
79
  }
76
80
  </style>
@@ -1,17 +1,30 @@
1
1
  import type { ButtonVariant } from './ButtonVariant.js';
2
- interface Props {
2
+ export interface ActionIconProps {
3
+ /** Visual style variant */
3
4
  variant?: ButtonVariant;
5
+ /** URL to navigate to (renders as anchor) */
4
6
  href?: string;
7
+ /** Show loading state */
5
8
  loading?: boolean;
9
+ /** Disable the button */
6
10
  disabled?: boolean;
11
+ /** Style as an input button (for form inputs) */
7
12
  inputButton?: boolean;
13
+ /** Size of the icon */
8
14
  size?: string;
15
+ /** Raw SVG HTML string. Do NOT use external/user input - it will be executed in the browser */
9
16
  svg: string;
17
+ /** Link target attribute (when href is provided) */
10
18
  target?: undefined | '_self' | '_blank';
19
+ /** Additional CSS classes */
11
20
  class?: string;
21
+ /** Click event handler */
12
22
  onclick?: (event: MouseEvent) => void;
23
+ /** Tooltip text on hover */
13
24
  tooltip?: string;
25
+ /** Accessible label for the button (recommended — the icon has no text) */
26
+ ariaLabel?: string;
14
27
  }
15
- declare const ActionIcon: import("svelte").Component<Props, {}, "">;
28
+ declare const ActionIcon: import("svelte").Component<ActionIconProps, {}, "">;
16
29
  type ActionIcon = ReturnType<typeof ActionIcon>;
17
30
  export default ActionIcon;