@placeholderco/placeholder-ui 1.0.12 → 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 (276) 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 +86 -135
  99. package/dist/form/Autocomplete.svelte.d.ts +6 -8
  100. package/dist/form/AutocompleteMulti.svelte +385 -227
  101. package/dist/form/AutocompleteMulti.svelte.d.ts +59 -10
  102. package/dist/form/Checkbox.svelte +59 -54
  103. package/dist/form/Checkbox.svelte.d.ts +14 -5
  104. package/dist/form/Chips.svelte +29 -13
  105. package/dist/form/Chips.svelte.d.ts +16 -2
  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 +148 -195
  115. package/dist/form/DateRangePicker.svelte +101 -98
  116. package/dist/form/DateTimePicker.svelte +167 -208
  117. package/dist/form/DateTimePicker.svelte.d.ts +10 -2
  118. package/dist/form/FormGroup.svelte +33 -10
  119. package/dist/form/FormGroup.svelte.d.ts +12 -2
  120. package/dist/form/Number.svelte +70 -47
  121. package/dist/form/Number.svelte.d.ts +36 -6
  122. package/dist/form/Radio.svelte +18 -18
  123. package/dist/form/RadioGroup.svelte +23 -12
  124. package/dist/form/RadioGroup.svelte.d.ts +13 -2
  125. package/dist/form/SegmentedControl.svelte +76 -56
  126. package/dist/form/SegmentedControl.svelte.d.ts +9 -4
  127. package/dist/form/Select.svelte +150 -233
  128. package/dist/form/Select.svelte.d.ts +29 -5
  129. package/dist/form/SelectMulti.svelte +163 -277
  130. package/dist/form/SelectMulti.svelte.d.ts +36 -7
  131. package/dist/form/Slider.svelte +183 -269
  132. package/dist/form/Slider.svelte.d.ts +32 -17
  133. package/dist/form/StringArrayBuilder.svelte +249 -0
  134. package/dist/form/StringArrayBuilder.svelte.d.ts +15 -0
  135. package/dist/form/Switch.svelte +164 -106
  136. package/dist/form/Switch.svelte.d.ts +22 -3
  137. package/dist/form/TextArea.svelte +49 -29
  138. package/dist/form/TextArea.svelte.d.ts +23 -3
  139. package/dist/form/Textbox.svelte +69 -68
  140. package/dist/form/Textbox.svelte.d.ts +32 -4
  141. package/dist/form/TimePicker.svelte +42 -47
  142. package/dist/form/TimePicker.svelte.d.ts +12 -2
  143. package/dist/form/comboBoxCore.svelte.d.ts +99 -0
  144. package/dist/form/comboBoxCore.svelte.js +243 -0
  145. package/dist/icon/Icon.svelte +8 -3
  146. package/dist/icon/Icon.svelte.d.ts +8 -3
  147. package/dist/icon/file-type-bmp.svg +1 -0
  148. package/dist/icon/file-type-csv.svg +1 -0
  149. package/dist/icon/file-type-doc.svg +1 -0
  150. package/dist/icon/file-type-docx.svg +1 -0
  151. package/dist/icon/file-type-jpg.svg +1 -0
  152. package/dist/icon/file-type-pdf.svg +1 -0
  153. package/dist/icon/file-type-png.svg +1 -0
  154. package/dist/icon/file-type-ppt.svg +1 -0
  155. package/dist/icon/file-type-svg.svg +1 -0
  156. package/dist/icon/file-type-txt.svg +1 -0
  157. package/dist/icon/file-type-xls.svg +1 -0
  158. package/dist/icon/file-type-zip.svg +1 -0
  159. package/dist/icon/index.d.ts +166 -151
  160. package/dist/icon/index.js +166 -152
  161. package/dist/icon/logo-placeholder.svg +6 -0
  162. package/dist/icon/source-code.svg +1 -0
  163. package/dist/icon/sun-moon.svg +1 -0
  164. package/dist/icon/table.svg +6 -0
  165. package/dist/index.d.ts +87 -26
  166. package/dist/index.js +25 -28
  167. package/dist/layout/AppShell.svelte +12 -162
  168. package/dist/layout/AppShell.svelte.d.ts +6 -27
  169. package/dist/layout/CustomNavbar.svelte +9 -7
  170. package/dist/layout/CustomNavbar.svelte.d.ts +4 -2
  171. package/dist/layout/Navbar.svelte +161 -129
  172. package/dist/layout/Navbar.svelte.d.ts +29 -15
  173. package/dist/layout/NavbarItemDisplay.svelte +2 -2
  174. package/dist/layout/NavbarItemView.svelte +182 -0
  175. package/dist/layout/NavbarItemView.svelte.d.ts +10 -0
  176. package/dist/layout/Sidenav.svelte +280 -341
  177. package/dist/layout/Sidenav.svelte.d.ts +36 -4
  178. package/dist/models/ComboBoxItem.d.ts +2 -0
  179. package/dist/models/Employee.d.ts +53 -0
  180. package/dist/models/Employee.js +23 -0
  181. package/dist/models/Hyperlink.d.ts +3 -1
  182. package/dist/models/LinkCollectionItem.d.ts +3 -1
  183. package/dist/models/NavbarItem.d.ts +6 -2
  184. package/dist/theme.svelte.d.ts +0 -1
  185. package/dist/theme.svelte.js +46 -58
  186. package/dist/ui/Accordion.svelte +81 -242
  187. package/dist/ui/Accordion.svelte.d.ts +37 -14
  188. package/dist/ui/AccordionItem.svelte +303 -0
  189. package/dist/ui/AccordionItem.svelte.d.ts +21 -0
  190. package/dist/ui/ActionIcon.svelte +25 -21
  191. package/dist/ui/ActionIcon.svelte.d.ts +15 -2
  192. package/dist/ui/Badge.svelte +163 -171
  193. package/dist/ui/Badge.svelte.d.ts +13 -5
  194. package/dist/ui/Button.svelte +178 -205
  195. package/dist/ui/Button.svelte.d.ts +19 -2
  196. package/dist/ui/ButtonVariant.d.ts +15 -1
  197. package/dist/ui/ContextMenu.svelte +146 -0
  198. package/dist/ui/ContextMenu.svelte.d.ts +37 -0
  199. package/dist/ui/ContextMenuList.svelte +188 -0
  200. package/dist/ui/ContextMenuList.svelte.d.ts +12 -0
  201. package/dist/ui/Dialog.svelte +183 -111
  202. package/dist/ui/Dialog.svelte.d.ts +21 -4
  203. package/dist/ui/Drawer.svelte +237 -184
  204. package/dist/ui/Drawer.svelte.d.ts +20 -2
  205. package/dist/ui/Dropdown.svelte +24 -14
  206. package/dist/ui/Dropdown.svelte.d.ts +11 -2
  207. package/dist/ui/Dropzone.svelte +159 -57
  208. package/dist/ui/Dropzone.svelte.d.ts +29 -2
  209. package/dist/ui/Link.svelte +12 -4
  210. package/dist/ui/Link.svelte.d.ts +8 -2
  211. package/dist/ui/Loader.svelte +23 -18
  212. package/dist/ui/Loader.svelte.d.ts +5 -2
  213. package/dist/ui/Logo.svelte +37 -0
  214. package/dist/ui/Logo.svelte.d.ts +16 -0
  215. package/dist/ui/MultiSortable.svelte +287 -0
  216. package/dist/ui/MultiSortable.svelte.d.ts +50 -0
  217. package/dist/ui/Pagination.svelte +15 -9
  218. package/dist/ui/Pagination.svelte.d.ts +6 -2
  219. package/dist/ui/Popover.svelte +43 -65
  220. package/dist/ui/Popover.svelte.d.ts +14 -5
  221. package/dist/ui/ProgressBar.svelte +28 -30
  222. package/dist/ui/ProgressBarVariant.d.ts +7 -1
  223. package/dist/ui/SegmentedControl.svelte +0 -0
  224. package/dist/ui/SegmentedControl.svelte.d.ts +26 -0
  225. package/dist/ui/Sortable.svelte +163 -0
  226. package/dist/ui/Sortable.svelte.d.ts +47 -0
  227. package/dist/ui/Table.svelte +383 -80
  228. package/dist/ui/Table.svelte.d.ts +43 -2
  229. package/dist/ui/Tabs.svelte +22 -18
  230. package/dist/ui/Tabs.svelte.d.ts +6 -2
  231. package/dist/ui/ThemeSwitcher.svelte +26 -7
  232. package/dist/ui/ThemeSwitcher.svelte.d.ts +4 -2
  233. package/dist/ui/Tooltip.svelte +312 -180
  234. package/dist/ui/Tooltip.svelte.d.ts +4 -3
  235. package/dist/uiTheme.svelte.d.ts +86 -0
  236. package/dist/uiTheme.svelte.js +214 -0
  237. package/dist/util/DateFunctions.js +1 -1
  238. package/dist/util/DragDrop.d.ts +50 -0
  239. package/dist/util/DragDrop.js +154 -0
  240. package/dist/util/NavigateTo.js +2 -2
  241. package/dist/util/dayjs.d.ts +4 -0
  242. package/dist/util/dayjs.js +15 -0
  243. package/package.json +66 -26
  244. package/dist/display/Alert.svelte +0 -179
  245. package/dist/display/Alert.svelte.d.ts +0 -13
  246. package/dist/form/FileInput.svelte +0 -235
  247. package/dist/form/FileInput.svelte.d.ts +0 -23
  248. package/dist/form/PasswordInput.svelte +0 -253
  249. package/dist/form/PasswordInput.svelte.d.ts +0 -34
  250. package/dist/form/Rating.svelte +0 -235
  251. package/dist/form/Rating.svelte.d.ts +0 -21
  252. package/dist/styles/components.css +0 -199
  253. package/dist/styles/dark.css +0 -146
  254. package/dist/styles/index.css +0 -116
  255. package/dist/styles/reset.css +0 -110
  256. package/dist/styles/semantic.css +0 -86
  257. package/dist/styles/tokens.css +0 -203
  258. package/dist/styles/utilities.css +0 -523
  259. package/dist/ui/Breadcrumbs.svelte +0 -131
  260. package/dist/ui/Breadcrumbs.svelte.d.ts +0 -16
  261. package/dist/ui/LoadingOverlay.svelte +0 -53
  262. package/dist/ui/LoadingOverlay.svelte.d.ts +0 -11
  263. package/dist/ui/Progress.svelte +0 -191
  264. package/dist/ui/Progress.svelte.d.ts +0 -15
  265. package/dist/ui/RingProgress.svelte +0 -141
  266. package/dist/ui/RingProgress.svelte.d.ts +0 -18
  267. package/dist/ui/Skeleton.svelte +0 -85
  268. package/dist/ui/Skeleton.svelte.d.ts +0 -12
  269. package/dist/ui/Stepper.svelte +0 -355
  270. package/dist/ui/Stepper.svelte.d.ts +0 -24
  271. package/dist/ui/Timeline.svelte +0 -225
  272. package/dist/ui/Timeline.svelte.d.ts +0 -23
  273. /package/dist/{actions → util}/ClickOutside.d.ts +0 -0
  274. /package/dist/{actions → util}/ClickOutside.js +0 -0
  275. /package/dist/{transitions → util}/Transitions.d.ts +0 -0
  276. /package/dist/{transitions → util}/Transitions.js +0 -0
@@ -1,21 +1,30 @@
1
1
  <script lang="ts">
2
2
  import type { ComboBoxItem } from '../models/ComboBoxItem.js';
3
3
  import FormGroup from './FormGroup.svelte';
4
- import { onMount, tick } from 'svelte';
4
+ import { onMount } from 'svelte';
5
5
 
6
- export type SegmentedControlSize = 'default' | 'sm';
6
+ export type SegmentedControlSize = 'default' | 'lg';
7
7
 
8
- interface Props {
8
+ export interface SegmentedControlProps {
9
+ /** Available segment options */
9
10
  options: ComboBoxItem[];
11
+ /** Currently selected value (bindable) */
10
12
  value?: any;
11
13
  /** Label text displayed above the control */
12
14
  label?: string;
13
- /** Visual size: 'default' or 'sm' (sized to match Textbox/Select) */
15
+ /** Visual size: 'default' (sized to match Textbox/Select) or 'lg' */
14
16
  size?: SegmentedControlSize;
17
+ /** Callback when selection changes */
15
18
  onchange?: (value: string) => void;
16
19
  }
17
20
 
18
- let { options, value = $bindable(), label, size = 'default', onchange }: Props = $props();
21
+ let {
22
+ options,
23
+ value = $bindable(),
24
+ label,
25
+ size = 'default',
26
+ onchange
27
+ }: SegmentedControlProps = $props();
19
28
 
20
29
  let containerRef: HTMLDivElement;
21
30
  let buttonElements = $state<HTMLButtonElement[]>([]);
@@ -25,25 +34,13 @@
25
34
  const selectedIndex = $derived(options.findIndex((option) => option.value === value));
26
35
 
27
36
  onMount(() => {
28
- // Recalculate after initial DOM render
29
- tick().then(() => {
30
- if (selectedIndex >= 0 && buttonElements[selectedIndex]) {
31
- recalculateBackground();
32
- }
33
- });
34
-
35
- // Use ResizeObserver to handle layout shifts (e.g. font loading, container resize)
36
- const observer = new ResizeObserver(() => {
37
- if (selectedIndex >= 0 && buttonElements[selectedIndex]) {
38
- recalculateBackground();
39
- }
40
- });
41
- observer.observe(containerRef);
42
-
43
- return () => observer.disconnect();
37
+ // recalculate 10 times on startup to ensure background is positioned correctly
38
+ for (let i = 0; i < 10; i++) {
39
+ setTimeout(() => recalculateBackground(), 100 * i);
40
+ }
44
41
  });
45
42
 
46
- // Update background position and size when selection changes
43
+ // Update background position and size based on selected element
47
44
  $effect(() => {
48
45
  if (selectedIndex >= 0 && buttonElements[selectedIndex] && containerRef) {
49
46
  recalculateBackground();
@@ -57,16 +54,30 @@
57
54
  }
58
55
  });
59
56
 
60
- function recalculateBackground() {
57
+ /**
58
+ * Recalculate the selected item background position/size (e.g. after a layout change).
59
+ * @param delay Optional delay in milliseconds before measuring (e.g. to let a transition finish)
60
+ */
61
+ export function recalculateBackground(delay?: number) {
62
+ if (delay) {
63
+ setTimeout(() => recalculateBackground(), delay);
64
+ return;
65
+ }
66
+
61
67
  const selectedButton = buttonElements[selectedIndex];
68
+ if (!selectedButton || !containerRef) return;
69
+
62
70
  const containerRect = containerRef.getBoundingClientRect();
63
71
  const buttonRect = selectedButton.getBoundingClientRect();
64
72
 
65
- const offsetLeft = buttonRect.left - containerRect.left;
73
+ // Absolute positioning is relative to the padding box, but getBoundingClientRect
74
+ // measures from the border's outer edge — subtract the border (clientLeft/clientTop)
75
+ const offsetLeft = buttonRect.left - containerRect.left - containerRef.clientLeft;
76
+ const offsetTop = buttonRect.top - containerRect.top - containerRef.clientTop;
66
77
  const width = buttonRect.width;
67
78
  const height = buttonRect.height;
68
79
 
69
- backgroundStyle = `left: ${offsetLeft}px; width: ${width}px; height: ${height}px; top: ${buttonRect.top - containerRect.top}px;`;
80
+ backgroundStyle = `left: ${offsetLeft}px; width: ${width}px; height: ${height}px; top: ${offsetTop}px;`;
70
81
  }
71
82
 
72
83
  function setValue(newValue: any) {
@@ -76,7 +87,7 @@
76
87
  </script>
77
88
 
78
89
  {#snippet control()}
79
- <div class="segmented-control size-{size}" bind:this={containerRef}>
90
+ <div class="segmented-control {size === 'lg' ? 'large' : ''}" bind:this={containerRef}>
80
91
  <div class="segmented-control-background" style={backgroundStyle}></div>
81
92
  {#each options as option, index}
82
93
  {@const isSelected = option.value === value}
@@ -94,7 +105,9 @@
94
105
 
95
106
  {#if label}
96
107
  <FormGroup {label}>
97
- {@render control()}
108
+ <div class="segmented-control-container">
109
+ {@render control()}
110
+ </div>
98
111
  </FormGroup>
99
112
  {:else}
100
113
  {@render control()}
@@ -104,72 +117,79 @@
104
117
  .segmented-control {
105
118
  position: relative;
106
119
  display: inline-flex;
107
- background-color: var(--pui-color-gray-200);
108
- border-radius: var(--pui-radius-lg);
109
- padding: var(--pui-spacing-1);
120
+ background-color: #e5e7eb;
121
+ border-radius: 0.5rem;
122
+ border: 1px solid var(--border-color);
123
+ padding: 0.125rem;
110
124
  user-select: none;
111
125
  }
112
126
 
113
127
  .segmented-control-background {
114
128
  position: absolute;
115
- background-color: var(--pui-color-white);
116
- border-radius: var(--pui-radius-md);
117
- transition: all var(--pui-transition-fast) var(--pui-ease-in-out);
118
- box-shadow: var(--pui-shadow-sm);
119
- }
120
-
121
- .segmented-control.size-sm {
122
- padding: 2px;
123
- }
124
-
125
- .segmented-control.size-sm .segmented-control-item {
126
- padding: var(--pui-spacing-1) var(--pui-spacing-3);
127
- font-size: var(--pui-font-size-xs);
129
+ background-color: white;
130
+ border-radius: 0.375rem;
131
+ transition: all 0.2s ease-in-out;
132
+ box-shadow:
133
+ 0 1px 3px 0 rgba(0, 0, 0, 0.1),
134
+ 0 1px 2px 0 rgba(0, 0, 0, 0.06);
128
135
  }
129
136
 
130
137
  .segmented-control-item {
131
138
  position: relative;
132
139
  align-items: center;
133
140
  justify-content: center;
134
- padding: var(--pui-spacing-2) var(--pui-spacing-4);
135
141
  cursor: pointer;
136
142
  user-select: none;
137
143
  border: none;
138
144
  background: transparent;
139
- border-radius: var(--pui-radius-md);
140
- font-size: var(--pui-font-size-sm);
141
- font-weight: var(--pui-font-weight-medium);
142
- color: var(--pui-color-gray-500);
143
- transition: color var(--pui-transition-fast) var(--pui-ease-in-out);
145
+ border-radius: 0.375rem;
146
+ padding: 0.125rem 0.75rem;
147
+ font-size: 0.875rem;
148
+ line-height: 1.5rem;
149
+ font-weight: 500;
150
+ color: #6b7280;
151
+ transition: color 0.2s ease-in-out;
144
152
  z-index: 1;
145
153
  }
146
154
 
147
155
  .segmented-control-item:hover {
148
- color: var(--pui-color-gray-700);
156
+ color: #374151;
149
157
  }
150
158
 
151
159
  .segmented-control-item.selected {
152
- color: var(--pui-color-gray-900);
160
+ color: #111827;
161
+ }
162
+
163
+ /* Large size */
164
+ .segmented-control.large {
165
+ border: none;
166
+ padding: 0.25rem;
167
+ }
168
+
169
+ .segmented-control.large .segmented-control-item {
170
+ padding: 0.5rem 1rem;
171
+ line-height: inherit;
153
172
  }
154
173
 
155
174
  /* Dark mode styles */
156
175
  :global(.dark) .segmented-control {
157
- background-color: var(--pui-input-bg);
176
+ background-color: var(--input-bg-color);
177
+ border-color: var(--border-color);
158
178
  }
159
179
 
160
180
  :global(.dark) .segmented-control-background {
161
- background-color: var(--pui-color-primary);
181
+ background-color: var(--ui-primary);
162
182
  }
163
183
 
164
184
  :global(.dark) .segmented-control-item {
165
- color: var(--pui-color-gray-400);
185
+ color: #9ca3af;
166
186
  }
167
187
 
168
188
  :global(.dark) .segmented-control-item:hover {
169
- color: var(--pui-color-gray-300);
189
+ color: #d1d5db;
170
190
  }
171
191
 
172
192
  :global(.dark) .segmented-control-item.selected {
173
- color: var(--pui-color-gray-100);
193
+ color: #f9fafb;
174
194
  }
175
195
  </style>
@@ -1,14 +1,19 @@
1
1
  import type { ComboBoxItem } from '../models/ComboBoxItem.js';
2
- export type SegmentedControlSize = 'default' | 'sm';
3
- interface Props {
2
+ export type SegmentedControlSize = 'default' | 'lg';
3
+ export interface SegmentedControlProps {
4
+ /** Available segment options */
4
5
  options: ComboBoxItem[];
6
+ /** Currently selected value (bindable) */
5
7
  value?: any;
6
8
  /** Label text displayed above the control */
7
9
  label?: string;
8
- /** Visual size: 'default' or 'sm' (sized to match Textbox/Select) */
10
+ /** Visual size: 'default' (sized to match Textbox/Select) or 'lg' */
9
11
  size?: SegmentedControlSize;
12
+ /** Callback when selection changes */
10
13
  onchange?: (value: string) => void;
11
14
  }
12
- declare const SegmentedControl: import("svelte").Component<Props, {}, "value">;
15
+ declare const SegmentedControl: import("svelte").Component<SegmentedControlProps, {
16
+ recalculateBackground: (delay?: number) => void;
17
+ }, "value">;
13
18
  type SegmentedControl = ReturnType<typeof SegmentedControl>;
14
19
  export default SegmentedControl;