@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.
- package/LICENSE +1 -1
- package/README.md +134 -130
- package/dist/app.css +178 -0
- package/dist/bootstrap.min.css +3600 -0
- package/dist/cards/GitCard.svelte +115 -0
- package/dist/cards/GitCard.svelte.d.ts +22 -0
- package/dist/display/Avatar.svelte +29 -17
- package/dist/display/Avatar.svelte.d.ts +12 -2
- package/dist/display/LinkCollection.svelte +40 -18
- package/dist/display/LinkCollection.svelte.d.ts +9 -2
- package/dist/display/Paper.svelte +31 -19
- package/dist/display/Paper.svelte.d.ts +12 -3
- package/dist/display/alert/Alert.svelte +129 -0
- package/dist/display/alert/Alert.svelte.d.ts +15 -0
- package/dist/display/alert/AlertVariant.d.ts +1 -0
- package/dist/display/alert/AlertVariant.js +1 -0
- package/dist/display/filetree/FileTree.svelte +259 -0
- package/dist/display/filetree/FileTree.svelte.d.ts +76 -0
- package/dist/display/filetree/FileTreeItem.svelte +396 -0
- package/dist/display/filetree/FileTreeItem.svelte.d.ts +40 -0
- package/dist/display/filetree/FileTreeNode.d.ts +46 -0
- package/dist/display/filetree/FileTreeNode.js +115 -0
- package/dist/display/filetree/index.d.ts +5 -0
- package/dist/display/filetree/index.js +3 -0
- package/dist/editors/CodeMirror.svelte +306 -0
- package/dist/editors/CodeMirror.svelte.d.ts +31 -0
- package/dist/editors/tiptap/LinkActionMenu.svelte +307 -0
- package/dist/editors/tiptap/LinkActionMenu.svelte.d.ts +8 -0
- package/dist/editors/tiptap/TipTap.svelte +856 -0
- package/dist/editors/tiptap/TipTap.svelte.d.ts +54 -0
- package/dist/editors/tiptap/TipTapBubble.svelte +790 -0
- package/dist/editors/tiptap/TipTapBubble.svelte.d.ts +44 -0
- package/dist/editors/tiptap/collaboration.d.ts +55 -0
- package/dist/editors/tiptap/collaboration.js +1 -0
- package/dist/editors/tiptap/extensions/Alert.d.ts +18 -0
- package/dist/editors/tiptap/extensions/Alert.js +72 -0
- package/dist/editors/tiptap/extensions/CodeBlockEditor.d.ts +21 -0
- package/dist/editors/tiptap/extensions/CodeBlockEditor.js +326 -0
- package/dist/editors/tiptap/extensions/Div.d.ts +19 -0
- package/dist/editors/tiptap/extensions/Div.js +89 -0
- package/dist/editors/tiptap/extensions/Span.d.ts +5 -0
- package/dist/editors/tiptap/extensions/Span.js +56 -0
- package/dist/editors/tiptap/extensions/codeBlockEditor.css +236 -0
- package/dist/editors/tiptap/extensions/codeBlockLanguages.d.ts +17 -0
- package/dist/editors/tiptap/extensions/codeBlockLanguages.js +124 -0
- package/dist/editors/tiptap/extensions/index.d.ts +7 -0
- package/dist/editors/tiptap/extensions/index.js +5 -0
- package/dist/editors/tiptap/toolbar/AlertButton.svelte +261 -0
- package/dist/editors/tiptap/toolbar/AlertButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/AlignCenterButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/AlignCenterButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/AlignJustifyButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/AlignJustifyButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/AlignLeftButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/AlignLeftButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/AlignRightButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/AlignRightButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/BoldButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/BoldButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/BulletListButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/BulletListButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/CodeBlockButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/CodeBlockButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/CodeButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/CodeButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/ColorButton.svelte +299 -0
- package/dist/editors/tiptap/toolbar/ColorButton.svelte.d.ts +20 -0
- package/dist/editors/tiptap/toolbar/DocumentButton.svelte +58 -0
- package/dist/editors/tiptap/toolbar/DocumentButton.svelte.d.ts +9 -0
- package/dist/editors/tiptap/toolbar/HeadingButton.svelte +30 -0
- package/dist/editors/tiptap/toolbar/HeadingButton.svelte.d.ts +8 -0
- package/dist/editors/tiptap/toolbar/HtmlButton.svelte +68 -0
- package/dist/editors/tiptap/toolbar/HtmlButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/ImageButton.svelte +54 -0
- package/dist/editors/tiptap/toolbar/ImageButton.svelte.d.ts +8 -0
- package/dist/editors/tiptap/toolbar/ItalicButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/ItalicButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/LinkButton.svelte +257 -0
- package/dist/editors/tiptap/toolbar/LinkButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/OrderedListButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/OrderedListButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/RedoButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/RedoButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/StrikethroughButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/StrikethroughButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/SubscriptButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/SubscriptButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/SuperscriptButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/SuperscriptButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/TableButton.svelte +258 -0
- package/dist/editors/tiptap/toolbar/TableButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/ToolbarButton.svelte +84 -0
- package/dist/editors/tiptap/toolbar/ToolbarButton.svelte.d.ts +10 -0
- package/dist/editors/tiptap/toolbar/UnderlineButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/UnderlineButton.svelte.d.ts +7 -0
- package/dist/editors/tiptap/toolbar/UndoButton.svelte +18 -0
- package/dist/editors/tiptap/toolbar/UndoButton.svelte.d.ts +7 -0
- package/dist/form/Autocomplete.svelte +86 -135
- package/dist/form/Autocomplete.svelte.d.ts +6 -8
- package/dist/form/AutocompleteMulti.svelte +385 -227
- package/dist/form/AutocompleteMulti.svelte.d.ts +59 -10
- package/dist/form/Checkbox.svelte +59 -54
- package/dist/form/Checkbox.svelte.d.ts +14 -5
- package/dist/form/Chips.svelte +29 -13
- package/dist/form/Chips.svelte.d.ts +16 -2
- package/dist/form/ComboBox.svelte +30 -20
- package/dist/form/ComboBox.svelte.d.ts +1 -1
- package/dist/form/ComboBoxItemBuilder.svelte +161 -188
- package/dist/form/ComboBoxItemBuilder.svelte.d.ts +19 -2
- package/dist/form/ComboBoxMulti.svelte +38 -24
- package/dist/form/ComboBoxMulti.svelte.d.ts +1 -1
- package/dist/form/CronBuilder.svelte +84 -67
- package/dist/form/CronBuilder.svelte.d.ts +16 -3
- package/dist/form/DatePicker.svelte +148 -195
- package/dist/form/DateRangePicker.svelte +101 -98
- package/dist/form/DateTimePicker.svelte +167 -208
- package/dist/form/DateTimePicker.svelte.d.ts +10 -2
- package/dist/form/FormGroup.svelte +33 -10
- package/dist/form/FormGroup.svelte.d.ts +12 -2
- package/dist/form/Number.svelte +70 -47
- package/dist/form/Number.svelte.d.ts +36 -6
- package/dist/form/Radio.svelte +18 -18
- package/dist/form/RadioGroup.svelte +23 -12
- package/dist/form/RadioGroup.svelte.d.ts +13 -2
- package/dist/form/SegmentedControl.svelte +76 -56
- package/dist/form/SegmentedControl.svelte.d.ts +9 -4
- package/dist/form/Select.svelte +150 -233
- package/dist/form/Select.svelte.d.ts +29 -5
- package/dist/form/SelectMulti.svelte +163 -277
- package/dist/form/SelectMulti.svelte.d.ts +36 -7
- package/dist/form/Slider.svelte +183 -269
- package/dist/form/Slider.svelte.d.ts +32 -17
- package/dist/form/StringArrayBuilder.svelte +249 -0
- package/dist/form/StringArrayBuilder.svelte.d.ts +15 -0
- package/dist/form/Switch.svelte +164 -106
- package/dist/form/Switch.svelte.d.ts +22 -3
- package/dist/form/TextArea.svelte +49 -29
- package/dist/form/TextArea.svelte.d.ts +23 -3
- package/dist/form/Textbox.svelte +69 -68
- package/dist/form/Textbox.svelte.d.ts +32 -4
- package/dist/form/TimePicker.svelte +42 -47
- package/dist/form/TimePicker.svelte.d.ts +12 -2
- package/dist/form/comboBoxCore.svelte.d.ts +99 -0
- package/dist/form/comboBoxCore.svelte.js +243 -0
- package/dist/icon/Icon.svelte +8 -3
- package/dist/icon/Icon.svelte.d.ts +8 -3
- package/dist/icon/file-type-bmp.svg +1 -0
- package/dist/icon/file-type-csv.svg +1 -0
- package/dist/icon/file-type-doc.svg +1 -0
- package/dist/icon/file-type-docx.svg +1 -0
- package/dist/icon/file-type-jpg.svg +1 -0
- package/dist/icon/file-type-pdf.svg +1 -0
- package/dist/icon/file-type-png.svg +1 -0
- package/dist/icon/file-type-ppt.svg +1 -0
- package/dist/icon/file-type-svg.svg +1 -0
- package/dist/icon/file-type-txt.svg +1 -0
- package/dist/icon/file-type-xls.svg +1 -0
- package/dist/icon/file-type-zip.svg +1 -0
- package/dist/icon/index.d.ts +166 -151
- package/dist/icon/index.js +166 -152
- package/dist/icon/logo-placeholder.svg +6 -0
- package/dist/icon/source-code.svg +1 -0
- package/dist/icon/sun-moon.svg +1 -0
- package/dist/icon/table.svg +6 -0
- package/dist/index.d.ts +87 -26
- package/dist/index.js +25 -28
- package/dist/layout/AppShell.svelte +12 -162
- package/dist/layout/AppShell.svelte.d.ts +6 -27
- package/dist/layout/CustomNavbar.svelte +9 -7
- package/dist/layout/CustomNavbar.svelte.d.ts +4 -2
- package/dist/layout/Navbar.svelte +161 -129
- package/dist/layout/Navbar.svelte.d.ts +29 -15
- package/dist/layout/NavbarItemDisplay.svelte +2 -2
- package/dist/layout/NavbarItemView.svelte +182 -0
- package/dist/layout/NavbarItemView.svelte.d.ts +10 -0
- package/dist/layout/Sidenav.svelte +280 -341
- package/dist/layout/Sidenav.svelte.d.ts +36 -4
- package/dist/models/ComboBoxItem.d.ts +2 -0
- package/dist/models/Employee.d.ts +53 -0
- package/dist/models/Employee.js +23 -0
- package/dist/models/Hyperlink.d.ts +3 -1
- package/dist/models/LinkCollectionItem.d.ts +3 -1
- package/dist/models/NavbarItem.d.ts +6 -2
- package/dist/theme.svelte.d.ts +0 -1
- package/dist/theme.svelte.js +46 -58
- package/dist/ui/Accordion.svelte +81 -242
- package/dist/ui/Accordion.svelte.d.ts +37 -14
- package/dist/ui/AccordionItem.svelte +303 -0
- package/dist/ui/AccordionItem.svelte.d.ts +21 -0
- package/dist/ui/ActionIcon.svelte +25 -21
- package/dist/ui/ActionIcon.svelte.d.ts +15 -2
- package/dist/ui/Badge.svelte +163 -171
- package/dist/ui/Badge.svelte.d.ts +13 -5
- package/dist/ui/Button.svelte +178 -205
- package/dist/ui/Button.svelte.d.ts +19 -2
- package/dist/ui/ButtonVariant.d.ts +15 -1
- package/dist/ui/ContextMenu.svelte +146 -0
- package/dist/ui/ContextMenu.svelte.d.ts +37 -0
- package/dist/ui/ContextMenuList.svelte +188 -0
- package/dist/ui/ContextMenuList.svelte.d.ts +12 -0
- package/dist/ui/Dialog.svelte +183 -111
- package/dist/ui/Dialog.svelte.d.ts +21 -4
- package/dist/ui/Drawer.svelte +237 -184
- package/dist/ui/Drawer.svelte.d.ts +20 -2
- package/dist/ui/Dropdown.svelte +24 -14
- package/dist/ui/Dropdown.svelte.d.ts +11 -2
- package/dist/ui/Dropzone.svelte +159 -57
- package/dist/ui/Dropzone.svelte.d.ts +29 -2
- package/dist/ui/Link.svelte +12 -4
- package/dist/ui/Link.svelte.d.ts +8 -2
- package/dist/ui/Loader.svelte +23 -18
- package/dist/ui/Loader.svelte.d.ts +5 -2
- package/dist/ui/Logo.svelte +37 -0
- package/dist/ui/Logo.svelte.d.ts +16 -0
- package/dist/ui/MultiSortable.svelte +287 -0
- package/dist/ui/MultiSortable.svelte.d.ts +50 -0
- package/dist/ui/Pagination.svelte +15 -9
- package/dist/ui/Pagination.svelte.d.ts +6 -2
- package/dist/ui/Popover.svelte +43 -65
- package/dist/ui/Popover.svelte.d.ts +14 -5
- package/dist/ui/ProgressBar.svelte +28 -30
- package/dist/ui/ProgressBarVariant.d.ts +7 -1
- package/dist/ui/SegmentedControl.svelte +0 -0
- package/dist/ui/SegmentedControl.svelte.d.ts +26 -0
- package/dist/ui/Sortable.svelte +163 -0
- package/dist/ui/Sortable.svelte.d.ts +47 -0
- package/dist/ui/Table.svelte +383 -80
- package/dist/ui/Table.svelte.d.ts +43 -2
- package/dist/ui/Tabs.svelte +22 -18
- package/dist/ui/Tabs.svelte.d.ts +6 -2
- package/dist/ui/ThemeSwitcher.svelte +26 -7
- package/dist/ui/ThemeSwitcher.svelte.d.ts +4 -2
- package/dist/ui/Tooltip.svelte +312 -180
- package/dist/ui/Tooltip.svelte.d.ts +4 -3
- package/dist/uiTheme.svelte.d.ts +86 -0
- package/dist/uiTheme.svelte.js +214 -0
- package/dist/util/DateFunctions.js +1 -1
- package/dist/util/DragDrop.d.ts +50 -0
- package/dist/util/DragDrop.js +154 -0
- package/dist/util/NavigateTo.js +2 -2
- package/dist/util/dayjs.d.ts +4 -0
- package/dist/util/dayjs.js +15 -0
- package/package.json +66 -26
- package/dist/display/Alert.svelte +0 -179
- package/dist/display/Alert.svelte.d.ts +0 -13
- package/dist/form/FileInput.svelte +0 -235
- package/dist/form/FileInput.svelte.d.ts +0 -23
- package/dist/form/PasswordInput.svelte +0 -253
- package/dist/form/PasswordInput.svelte.d.ts +0 -34
- package/dist/form/Rating.svelte +0 -235
- package/dist/form/Rating.svelte.d.ts +0 -21
- package/dist/styles/components.css +0 -199
- package/dist/styles/dark.css +0 -146
- package/dist/styles/index.css +0 -116
- package/dist/styles/reset.css +0 -110
- package/dist/styles/semantic.css +0 -86
- package/dist/styles/tokens.css +0 -203
- package/dist/styles/utilities.css +0 -523
- package/dist/ui/Breadcrumbs.svelte +0 -131
- package/dist/ui/Breadcrumbs.svelte.d.ts +0 -16
- package/dist/ui/LoadingOverlay.svelte +0 -53
- package/dist/ui/LoadingOverlay.svelte.d.ts +0 -11
- package/dist/ui/Progress.svelte +0 -191
- package/dist/ui/Progress.svelte.d.ts +0 -15
- package/dist/ui/RingProgress.svelte +0 -141
- package/dist/ui/RingProgress.svelte.d.ts +0 -18
- package/dist/ui/Skeleton.svelte +0 -85
- package/dist/ui/Skeleton.svelte.d.ts +0 -12
- package/dist/ui/Stepper.svelte +0 -355
- package/dist/ui/Stepper.svelte.d.ts +0 -24
- package/dist/ui/Timeline.svelte +0 -225
- package/dist/ui/Timeline.svelte.d.ts +0 -23
- /package/dist/{actions → util}/ClickOutside.d.ts +0 -0
- /package/dist/{actions → util}/ClickOutside.js +0 -0
- /package/dist/{transitions → util}/Transitions.d.ts +0 -0
- /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
|
|
4
|
+
import { onMount } from 'svelte';
|
|
5
5
|
|
|
6
|
-
export type SegmentedControlSize = 'default' | '
|
|
6
|
+
export type SegmentedControlSize = 'default' | 'lg';
|
|
7
7
|
|
|
8
|
-
interface
|
|
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'
|
|
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 {
|
|
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
|
-
//
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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: ${
|
|
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
|
|
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
|
-
|
|
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:
|
|
108
|
-
border-radius:
|
|
109
|
-
|
|
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:
|
|
116
|
-
border-radius:
|
|
117
|
-
transition: all
|
|
118
|
-
box-shadow:
|
|
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:
|
|
140
|
-
|
|
141
|
-
font-
|
|
142
|
-
|
|
143
|
-
|
|
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:
|
|
156
|
+
color: #374151;
|
|
149
157
|
}
|
|
150
158
|
|
|
151
159
|
.segmented-control-item.selected {
|
|
152
|
-
color:
|
|
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(--
|
|
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(--
|
|
181
|
+
background-color: var(--ui-primary);
|
|
162
182
|
}
|
|
163
183
|
|
|
164
184
|
:global(.dark) .segmented-control-item {
|
|
165
|
-
color:
|
|
185
|
+
color: #9ca3af;
|
|
166
186
|
}
|
|
167
187
|
|
|
168
188
|
:global(.dark) .segmented-control-item:hover {
|
|
169
|
-
color:
|
|
189
|
+
color: #d1d5db;
|
|
170
190
|
}
|
|
171
191
|
|
|
172
192
|
:global(.dark) .segmented-control-item.selected {
|
|
173
|
-
color:
|
|
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' | '
|
|
3
|
-
interface
|
|
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'
|
|
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<
|
|
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;
|