@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,13 +1,21 @@
1
- interface Props {
1
+ export interface DateTimePickerProps {
2
+ /** Label text displayed above the picker */
2
3
  label?: string;
4
+ /** Disable the date/time picker */
3
5
  disabled?: boolean;
6
+ /** Mark field as required (shows asterisk) */
4
7
  required?: boolean;
8
+ /** CSS classes for the container element */
5
9
  containerClass?: string;
10
+ /** Selected date/time value in ISO format (bindable) */
6
11
  value?: string | undefined;
12
+ /** Minimum selectable date/time in ISO format */
7
13
  minDate?: string | undefined;
14
+ /** Maximum selectable date/time in ISO format */
8
15
  maxDate?: string | undefined;
16
+ /** Callback when selected date/time changes */
9
17
  onchange?: (date: string | undefined) => void;
10
18
  }
11
- declare const DateTimePicker: import("svelte").Component<Props, {}, "value">;
19
+ declare const DateTimePicker: import("svelte").Component<DateTimePickerProps, {}, "value">;
12
20
  type DateTimePicker = ReturnType<typeof DateTimePicker>;
13
21
  export default DateTimePicker;
@@ -1,20 +1,33 @@
1
- <script lang="ts">
2
- import { Icon, iconInfoCircle } from '../icon/index.js';
3
- import Tooltip from '../ui/Tooltip.svelte';
1
+ <script module lang="ts">
4
2
  import type { Snippet } from 'svelte';
5
3
 
6
- interface Props {
4
+ export interface FormGroupProps {
5
+ /** Label text displayed above the form field */
7
6
  label: string;
7
+ /** Mark field as required (shows asterisk) */
8
8
  required?: boolean;
9
+ /** Custom ID for the form field */
9
10
  id?: string;
11
+ /** Additional CSS classes */
10
12
  class?: string;
13
+ /** Show error state styling */
11
14
  showError?: boolean;
15
+ /** Error message to display */
12
16
  errorText?: string;
17
+ /** Rich tooltip content using a Svelte snippet */
13
18
  tooltipContent?: Snippet;
19
+ /** Simple tooltip text */
14
20
  tooltipText?: string;
21
+ /** Position of the tooltip */
15
22
  tooltipLocation?: 'top' | 'bottom' | 'left' | 'right';
23
+ /** Form field content */
16
24
  children: Snippet;
17
25
  }
26
+ </script>
27
+
28
+ <script lang="ts">
29
+ import { Icon, iconInfoCircle } from '../icon/index.js';
30
+ import Tooltip from '../ui/Tooltip.svelte';
18
31
 
19
32
  let {
20
33
  label,
@@ -27,7 +40,7 @@
27
40
  tooltipText,
28
41
  tooltipLocation = 'top',
29
42
  children
30
- }: Props = $props();
43
+ }: FormGroupProps = $props();
31
44
 
32
45
  const computedId = $derived(id ?? `form-${label}`);
33
46
  </script>
@@ -56,13 +69,23 @@
56
69
 
57
70
  <style>
58
71
  .label {
59
- font-size: var(--pui-font-size-md);
60
- line-height: var(--pui-line-height-normal);
72
+ display: flex;
73
+ align-items: center;
74
+ gap: 0.25rem;
75
+ font-size: 0.875rem;
76
+ line-height: 1.25rem;
77
+ font-weight: 500;
78
+ margin-bottom: 0.25rem;
79
+ color: var(--label-color, var(--bs-secondary, #6c757d));
80
+ }
81
+
82
+ .text-required {
83
+ color: var(--danger-text);
61
84
  }
62
85
 
63
86
  .error-text {
64
- color: var(--pui-text-danger);
65
- font-size: var(--pui-font-size-sm);
66
- margin-top: var(--pui-spacing-1);
87
+ color: var(--danger-text);
88
+ font-size: 0.875rem;
89
+ margin-top: 0.25rem;
67
90
  }
68
91
  </style>
@@ -1,16 +1,26 @@
1
1
  import type { Snippet } from 'svelte';
2
- interface Props {
2
+ export interface FormGroupProps {
3
+ /** Label text displayed above the form field */
3
4
  label: string;
5
+ /** Mark field as required (shows asterisk) */
4
6
  required?: boolean;
7
+ /** Custom ID for the form field */
5
8
  id?: string;
9
+ /** Additional CSS classes */
6
10
  class?: string;
11
+ /** Show error state styling */
7
12
  showError?: boolean;
13
+ /** Error message to display */
8
14
  errorText?: string;
15
+ /** Rich tooltip content using a Svelte snippet */
9
16
  tooltipContent?: Snippet;
17
+ /** Simple tooltip text */
10
18
  tooltipText?: string;
19
+ /** Position of the tooltip */
11
20
  tooltipLocation?: 'top' | 'bottom' | 'left' | 'right';
21
+ /** Form field content */
12
22
  children: Snippet;
13
23
  }
14
- declare const FormGroup: import("svelte").Component<Props, {}, "">;
24
+ declare const FormGroup: import("svelte").Component<FormGroupProps, {}, "">;
15
25
  type FormGroup = ReturnType<typeof FormGroup>;
16
26
  export default FormGroup;
@@ -4,42 +4,72 @@
4
4
  import Loader from '../ui/Loader.svelte';
5
5
  import Icon from '../icon/Icon.svelte';
6
6
 
7
- const autoName = `number-${Math.random().toString(36).substring(2, 15)}`;
7
+ const autoName = `number-${crypto.randomUUID()}`;
8
8
 
9
- interface Props {
9
+ export interface NumberProps {
10
10
  /** HTML name attribute for the input (falls back to label, then auto-generated) */
11
11
  name?: string;
12
+ /** Label text displayed above the input */
12
13
  label?: string;
14
+ /** Custom ID for the input element */
13
15
  inputId?: string;
16
+ /** Placeholder text when input is empty */
14
17
  placeholder?: string;
18
+ /** Mark field as required (shows asterisk) */
15
19
  required?: boolean;
20
+ /** Auto-focus the input on mount */
16
21
  autofocus?: boolean;
17
- /** HTML autocomplete attribute */
22
+ /** HTML autocomplete attribute for the input */
18
23
  autocomplete?: string;
24
+ /** Show loading spinner inside the input */
19
25
  loading?: boolean;
26
+ /** CSS classes for the FormGroup wrapper */
20
27
  groupClass?: string;
28
+ /** Reference to the input DOM element */
21
29
  numberElement?: HTMLElement;
30
+ /** SVG icon displayed on the left side */
22
31
  leftIconSvg?: string;
32
+ /** CSS classes for the input element */
23
33
  class?: string;
34
+ /** CSS classes for the container element */
24
35
  containerClass?: string;
36
+ /** Disable the input */
25
37
  disabled?: boolean;
38
+ /** Input value (bindable) */
26
39
  value?: number;
40
+ /** Whether the input is currently focused */
27
41
  isFocused?: boolean;
42
+ /** Show error state styling */
28
43
  showError?: boolean;
44
+ /** Error message to display */
29
45
  errorText?: string;
46
+ /** Position of the tooltip */
30
47
  tooltipLocation?: 'top' | 'bottom' | 'left' | 'right';
48
+ /** Minimum allowed value */
31
49
  min?: number;
50
+ /** Maximum allowed value */
32
51
  max?: number;
52
+ /** Increment/decrement step value */
33
53
  step?: number;
34
- onenter?: (v: number) => void;
54
+ /** Callback when Enter key is pressed */
55
+ onenter?: (value: number) => void;
56
+ /** Callback when value changes */
35
57
  onchange?: (e: Event) => void;
58
+ /** Callback on input event */
36
59
  oninput?: (e: Event) => void;
60
+ /** Callback on keydown event */
37
61
  onkeydown?: (e: KeyboardEvent) => void;
62
+ /** Callback on keypress event */
38
63
  onkeypress?: (e: KeyboardEvent) => void;
64
+ /** Callback on keyup event */
39
65
  onkeyup?: (e: KeyboardEvent) => void;
40
- onfocus?: (e: FocusEvent) => void;
41
- onblur?: (e: FocusEvent) => void;
66
+ /** Callback when input gains focus */
67
+ onfocus?: (value: number | undefined, e: FocusEvent) => void;
68
+ /** Callback when input loses focus */
69
+ onblur?: (value: number | undefined, e: FocusEvent) => void;
70
+ /** Content to render on the right side of the input */
42
71
  right?: Snippet;
72
+ /** Additional content below the input */
43
73
  children?: Snippet;
44
74
  }
45
75
 
@@ -76,7 +106,11 @@
76
106
  onblur = undefined,
77
107
  right,
78
108
  children
79
- }: Props = $props();
109
+ }: NumberProps = $props();
110
+
111
+ let resolvedName = $derived(
112
+ (name || label || autoName).replace(/[^a-zA-Z0-9_\-:.]/g, '_')
113
+ );
80
114
 
81
115
  let id = $derived.by(() => {
82
116
  if (inputId) return inputId;
@@ -86,10 +120,6 @@
86
120
  return Math.random().toString(36).substring(2, 8);
87
121
  });
88
122
 
89
- const resolvedName = $derived(
90
- (name || label || autoName).replace(/[^a-zA-Z0-9_\-:.]/g, '_')
91
- );
92
-
93
123
  const extraClasses: string[] = $derived.by(() => {
94
124
  const classes = [];
95
125
  if (right) classes.push('rounded-r-none');
@@ -139,16 +169,16 @@
139
169
  {min}
140
170
  {max}
141
171
  {step}
142
- autocomplete={(autocomplete ?? 'on') as AutoFill}
172
+ autocomplete={autocomplete as any}
143
173
  bind:value
144
174
  bind:this={numberElement}
145
- onblur={() => {
175
+ onblur={(e) => {
146
176
  isFocused = false;
147
- onblur?.(new FocusEvent('blur'));
177
+ onblur?.(value, e);
148
178
  }}
149
- onfocus={() => {
179
+ onfocus={(e) => {
150
180
  isFocused = true;
151
- onfocus?.(new FocusEvent('focus'));
181
+ onfocus?.(value, e);
152
182
  }}
153
183
  onchange={handleChange}
154
184
  {oninput}
@@ -167,7 +197,12 @@
167
197
  </div>
168
198
  {/if}
169
199
  {#if loading}
170
- <div class="loader" class:loader-left={!!leftIconSvg}>
200
+ <div
201
+ class="absolute
202
+ top-1/2 -translate-y-1/2
203
+ -translate-x-1/2
204
+ {leftIconSvg ? 'left-4' : 'right-0'}"
205
+ >
171
206
  <Loader sizeOverride="1.1rem" />
172
207
  </div>
173
208
  {:else}
@@ -191,29 +226,30 @@
191
226
 
192
227
  .number {
193
228
  width: 100%;
194
- font-size: var(--pui-font-size-md);
195
- line-height: var(--pui-line-height-normal);
196
- padding: var(--pui-spacing-1) var(--pui-spacing-2);
197
- border: 1px solid var(--pui-input-border);
198
- background-color: var(--pui-input-bg);
199
- color: var(--pui-input-text);
200
- border-radius: var(--pui-radius-base);
229
+ font-size: 1rem;
230
+ line-height: 1.5rem;
231
+ padding: 0.25rem;
232
+ border: 1px solid var(--border-color);
233
+ background-color: var(--input-bg-color);
234
+ color: var(--text-color);
235
+ border-radius: 0.25rem;
236
+ padding: 0.25rem 0.5rem;
201
237
  box-sizing: border-box;
202
238
  }
203
239
 
204
240
  .number.disabled {
205
241
  opacity: 0.5;
206
242
  cursor: not-allowed;
207
- background: var(--pui-bg-disabled);
243
+ background: var(--border-color);
208
244
  }
209
245
 
210
246
  .number:focus {
211
- border-color: var(--pui-input-border-focus);
247
+ border-color: var(--accent-color);
212
248
  outline: 2px solid transparent;
213
- outline-offset: var(--pui-focus-ring-offset);
249
+ outline-offset: 2px;
214
250
 
215
251
  & ~ .left-icon {
216
- color: var(--pui-input-border-focus);
252
+ color: var(--accent-color);
217
253
  }
218
254
  }
219
255
 
@@ -223,7 +259,7 @@
223
259
  }
224
260
 
225
261
  .with-left-icon {
226
- padding-left: var(--pui-spacing-8);
262
+ padding-left: 2rem;
227
263
  }
228
264
 
229
265
  .left-icon {
@@ -231,28 +267,15 @@
231
267
  pointer-events: none;
232
268
  top: 50%;
233
269
  transform: translateY(-40%);
234
- left: var(--pui-spacing-2);
235
- color: var(--pui-text-muted);
236
- }
237
-
238
- .loader {
239
- position: absolute;
240
- right: var(--pui-spacing-2);
241
- top: 50%;
242
- transform: translateY(-50%);
243
- pointer-events: none;
244
- }
245
-
246
- .loader.loader-left {
247
- right: auto;
248
- left: var(--pui-spacing-2);
270
+ left: 0.5rem;
271
+ color: rgb(115 115 115);
249
272
  }
250
273
 
251
274
  .show-error {
252
- border-color: var(--pui-text-danger);
275
+ border-color: var(--danger-text);
253
276
  }
254
277
 
255
278
  .text-error {
256
- color: var(--pui-text-danger);
279
+ color: var(--danger-text);
257
280
  }
258
- </style>
281
+ </style>
@@ -1,40 +1,70 @@
1
1
  import { type Snippet } from 'svelte';
2
- interface Props {
2
+ export interface NumberProps {
3
3
  /** HTML name attribute for the input (falls back to label, then auto-generated) */
4
4
  name?: string;
5
+ /** Label text displayed above the input */
5
6
  label?: string;
7
+ /** Custom ID for the input element */
6
8
  inputId?: string;
9
+ /** Placeholder text when input is empty */
7
10
  placeholder?: string;
11
+ /** Mark field as required (shows asterisk) */
8
12
  required?: boolean;
13
+ /** Auto-focus the input on mount */
9
14
  autofocus?: boolean;
10
- /** HTML autocomplete attribute */
15
+ /** HTML autocomplete attribute for the input */
11
16
  autocomplete?: string;
17
+ /** Show loading spinner inside the input */
12
18
  loading?: boolean;
19
+ /** CSS classes for the FormGroup wrapper */
13
20
  groupClass?: string;
21
+ /** Reference to the input DOM element */
14
22
  numberElement?: HTMLElement;
23
+ /** SVG icon displayed on the left side */
15
24
  leftIconSvg?: string;
25
+ /** CSS classes for the input element */
16
26
  class?: string;
27
+ /** CSS classes for the container element */
17
28
  containerClass?: string;
29
+ /** Disable the input */
18
30
  disabled?: boolean;
31
+ /** Input value (bindable) */
19
32
  value?: number;
33
+ /** Whether the input is currently focused */
20
34
  isFocused?: boolean;
35
+ /** Show error state styling */
21
36
  showError?: boolean;
37
+ /** Error message to display */
22
38
  errorText?: string;
39
+ /** Position of the tooltip */
23
40
  tooltipLocation?: 'top' | 'bottom' | 'left' | 'right';
41
+ /** Minimum allowed value */
24
42
  min?: number;
43
+ /** Maximum allowed value */
25
44
  max?: number;
45
+ /** Increment/decrement step value */
26
46
  step?: number;
27
- onenter?: (v: number) => void;
47
+ /** Callback when Enter key is pressed */
48
+ onenter?: (value: number) => void;
49
+ /** Callback when value changes */
28
50
  onchange?: (e: Event) => void;
51
+ /** Callback on input event */
29
52
  oninput?: (e: Event) => void;
53
+ /** Callback on keydown event */
30
54
  onkeydown?: (e: KeyboardEvent) => void;
55
+ /** Callback on keypress event */
31
56
  onkeypress?: (e: KeyboardEvent) => void;
57
+ /** Callback on keyup event */
32
58
  onkeyup?: (e: KeyboardEvent) => void;
33
- onfocus?: (e: FocusEvent) => void;
34
- onblur?: (e: FocusEvent) => void;
59
+ /** Callback when input gains focus */
60
+ onfocus?: (value: number | undefined, e: FocusEvent) => void;
61
+ /** Callback when input loses focus */
62
+ onblur?: (value: number | undefined, e: FocusEvent) => void;
63
+ /** Content to render on the right side of the input */
35
64
  right?: Snippet;
65
+ /** Additional content below the input */
36
66
  children?: Snippet;
37
67
  }
38
- declare const Number: import("svelte").Component<Props, {}, "value" | "numberElement">;
68
+ declare const Number: import("svelte").Component<NumberProps, {}, "value" | "numberElement">;
39
69
  type Number = ReturnType<typeof Number>;
40
70
  export default Number;
@@ -76,7 +76,7 @@
76
76
  -webkit-appearance: none;
77
77
  -moz-appearance: none;
78
78
  appearance: none;
79
- margin: var(--pui-spacing-2);
79
+ margin: 8px;
80
80
  box-sizing: content-box;
81
81
  overflow: hidden;
82
82
  cursor: pointer;
@@ -88,29 +88,29 @@
88
88
  box-sizing: content-box;
89
89
  width: 16px;
90
90
  height: 16px;
91
- border: 2px solid var(--pui-border-disabled);
92
- transition: var(--pui-transition-fast) border-color var(--pui-ease-out);
91
+ border: 2px solid #ccc;
92
+ transition: 0.2s border-color ease;
93
93
  }
94
94
 
95
95
  :global(.dark) input:before {
96
- border-color: var(--pui-color-gray-600);
96
+ border-color: #666;
97
97
  }
98
98
  input:checked:before {
99
- border-color: var(--pui-color-primary);
100
- transition: var(--pui-transition-slow) border-color var(--pui-ease-out);
99
+ border-color: var(--ui-primary);
100
+ transition: 0.5s border-color ease;
101
101
  }
102
102
  :global(.dark) input:checked:before {
103
- border-color: var(--pui-color-secondary);
103
+ border-color: var(--ui-accent);
104
104
  }
105
105
 
106
106
  input:disabled:before {
107
- border-color: var(--pui-border-disabled);
108
- background-color: var(--pui-border-disabled);
107
+ border-color: #ccc;
108
+ background-color: #ccc;
109
109
  opacity: 0.5;
110
110
  }
111
111
  :global(.dark) input:disabled:before {
112
- border-color: var(--pui-color-gray-600);
113
- background-color: var(--pui-color-gray-600);
112
+ border-color: #666;
113
+ background-color: #666;
114
114
  }
115
115
  input:after {
116
116
  content: '';
@@ -120,30 +120,30 @@
120
120
  top: 50%;
121
121
  left: 50%;
122
122
  transform-origin: 50% 50%;
123
- background-color: var(--pui-color-primary);
123
+ background-color: var(--ui-primary);
124
124
  width: 16px;
125
125
  height: 16px;
126
- border-radius: var(--pui-radius-full);
126
+ border-radius: 100vh;
127
127
  transform: translate(-50%, -50%) scale(0);
128
128
  }
129
129
  input:disabled:after {
130
130
  opacity: 0.5;
131
131
  }
132
132
  :global(.dark) input:after {
133
- background-color: var(--pui-color-secondary);
133
+ background-color: var(--ui-accent);
134
134
  }
135
135
  input[type='radio']:before {
136
- border-radius: var(--pui-radius-full);
136
+ border-radius: 100vh;
137
137
  }
138
138
  input[type='radio']:after {
139
139
  width: 16px;
140
140
  height: 16px;
141
- border-radius: var(--pui-radius-full);
141
+ border-radius: 100vh;
142
142
  transform: translate(-50%, -50%) scale(0);
143
143
  }
144
144
  input[type='radio']:checked:after {
145
- -webkit-animation: toggleOnRadio var(--pui-transition-fast) ease forwards;
146
- animation: toggleOnRadio var(--pui-transition-fast) ease forwards;
145
+ -webkit-animation: toggleOnRadio 0.2s ease forwards;
146
+ animation: toggleOnRadio 0.2s ease forwards;
147
147
  }
148
148
  @-webkit-keyframes toggleOnRadio {
149
149
  0% {
@@ -3,23 +3,34 @@
3
3
  import FormGroup from './FormGroup.svelte';
4
4
  import Radio from './Radio.svelte';
5
5
 
6
- interface Props {
6
+ export interface RadioGroupProps {
7
7
  /** HTML name attribute for the radio group (falls back to label, then auto-generated) */
8
8
  name?: string;
9
+ /** Label text displayed above the radio group */
9
10
  label: string;
11
+ /** Available radio options */
10
12
  options: ComboBoxItem[];
13
+ /** Mark field as required (shows asterisk) */
11
14
  required?: boolean;
15
+ /** Show error state styling */
12
16
  showError?: boolean;
17
+ /** Error message to display */
13
18
  errorText?: string;
19
+ /** Additional CSS classes */
14
20
  class?: string;
21
+ /** CSS classes for the container element */
15
22
  containerClass?: string;
23
+ /** Disable all radio options */
16
24
  disabled?: boolean;
17
25
  /** When true, the radio state is controlled externally only. Clicking will call onchange but won't change the value. */
18
26
  controlled?: boolean;
19
27
  /** Display options vertically instead of horizontally */
20
28
  vertical?: boolean;
29
+ /** Currently selected value (bindable) */
21
30
  value?: string;
31
+ /** Position of the tooltip */
22
32
  tooltipLocation?: 'top' | 'bottom' | 'left' | 'right';
33
+ /** Callback when selection changes */
23
34
  onchange?: (e: string | undefined) => void;
24
35
  }
25
36
 
@@ -32,17 +43,17 @@
32
43
  errorText = '',
33
44
  class: classes = '',
34
45
  containerClass = '',
46
+ vertical = false,
35
47
  disabled = false,
36
48
  controlled = false,
37
- vertical = false,
38
49
  tooltipLocation = 'top',
39
50
  value = $bindable(),
40
51
  onchange = undefined
41
- }: Props = $props();
52
+ }: RadioGroupProps = $props();
42
53
 
43
- const nonce = Math.random().toString(36).substring(2, 15);
54
+ const autoName = `radio-${crypto.randomUUID()}`;
44
55
  const resolvedName = $derived(
45
- (name || label || `radio-${nonce}`).replace(/[^a-zA-Z0-9_\-:.]/g, '_')
56
+ (name || label || autoName).replace(/[^a-zA-Z0-9_\-:.]/g, '_')
46
57
  );
47
58
 
48
59
  function handleChange(option: ComboBoxItem) {
@@ -86,12 +97,12 @@
86
97
  <style>
87
98
  .radio-options {
88
99
  display: flex;
89
- gap: var(--pui-spacing-2);
90
- border-radius: var(--pui-radius-lg);
100
+ gap: 0.5rem;
101
+ border-radius: 6px;
91
102
  }
92
103
 
93
104
  .radio-vertical.radio-options {
94
- gap: var(--pui-spacing-1);
105
+ gap: 0.25rem;
95
106
  }
96
107
 
97
108
  .radio-vertical {
@@ -99,15 +110,15 @@
99
110
  }
100
111
 
101
112
  .radio-required {
102
- padding: var(--pui-spacing-1);
113
+ padding: 0.25rem;
103
114
  }
104
115
 
105
116
  .error {
106
- border: 1px solid var(--pui-text-danger);
117
+ border: 1px solid var(--danger-text);
107
118
  }
108
119
 
109
120
  .error-text {
110
- margin-top: var(--pui-spacing-1);
111
- color: var(--pui-text-danger);
121
+ margin-top: 0.25rem;
122
+ color: var(--danger-text);
112
123
  }
113
124
  </style>
@@ -1,23 +1,34 @@
1
1
  import type { ComboBoxItem } from '../models/ComboBoxItem.js';
2
- interface Props {
2
+ export interface RadioGroupProps {
3
3
  /** HTML name attribute for the radio group (falls back to label, then auto-generated) */
4
4
  name?: string;
5
+ /** Label text displayed above the radio group */
5
6
  label: string;
7
+ /** Available radio options */
6
8
  options: ComboBoxItem[];
9
+ /** Mark field as required (shows asterisk) */
7
10
  required?: boolean;
11
+ /** Show error state styling */
8
12
  showError?: boolean;
13
+ /** Error message to display */
9
14
  errorText?: string;
15
+ /** Additional CSS classes */
10
16
  class?: string;
17
+ /** CSS classes for the container element */
11
18
  containerClass?: string;
19
+ /** Disable all radio options */
12
20
  disabled?: boolean;
13
21
  /** When true, the radio state is controlled externally only. Clicking will call onchange but won't change the value. */
14
22
  controlled?: boolean;
15
23
  /** Display options vertically instead of horizontally */
16
24
  vertical?: boolean;
25
+ /** Currently selected value (bindable) */
17
26
  value?: string;
27
+ /** Position of the tooltip */
18
28
  tooltipLocation?: 'top' | 'bottom' | 'left' | 'right';
29
+ /** Callback when selection changes */
19
30
  onchange?: (e: string | undefined) => void;
20
31
  }
21
- declare const RadioGroup: import("svelte").Component<Props, {}, "value">;
32
+ declare const RadioGroup: import("svelte").Component<RadioGroupProps, {}, "value">;
22
33
  type RadioGroup = ReturnType<typeof RadioGroup>;
23
34
  export default RadioGroup;