@geoffcox/sterling-svelte 1.0.12 → 2.0.1
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/dist/Button.svelte +8 -46
- package/dist/Button.svelte.d.ts +9 -65
- package/dist/Callout.svelte +47 -72
- package/dist/Callout.svelte.d.ts +14 -55
- package/dist/Callout.types.d.ts +11 -0
- package/dist/Checkbox.svelte +12 -48
- package/dist/Checkbox.svelte.d.ts +9 -62
- package/dist/Dialog.svelte +30 -38
- package/dist/Dialog.svelte.d.ts +13 -36
- package/dist/Dropdown.svelte +39 -71
- package/dist/Dropdown.svelte.d.ts +17 -76
- package/dist/Input.svelte +16 -50
- package/dist/Input.svelte.d.ts +12 -74
- package/dist/Label.svelte +55 -161
- package/dist/Label.svelte.d.ts +16 -81
- package/dist/Link.svelte +9 -41
- package/dist/Link.svelte.d.ts +11 -64
- package/dist/List.svelte +35 -85
- package/dist/List.svelte.d.ts +19 -74
- package/dist/List.types.d.ts +3 -11
- package/dist/ListItem.svelte +27 -56
- package/dist/ListItem.svelte.d.ts +12 -66
- package/dist/Menu.svelte +18 -45
- package/dist/Menu.svelte.d.ts +13 -63
- package/dist/MenuBar.svelte +36 -78
- package/dist/MenuBar.svelte.d.ts +12 -57
- package/dist/MenuButton.svelte +56 -85
- package/dist/MenuButton.svelte.d.ts +19 -70
- package/dist/MenuItem.svelte +107 -151
- package/dist/MenuItem.svelte.d.ts +21 -82
- package/dist/MenuItem.types.d.ts +1 -9
- package/dist/MenuSeparator.svelte +9 -7
- package/dist/MenuSeparator.svelte.d.ts +6 -20
- package/dist/Popover.svelte +45 -64
- package/dist/Popover.svelte.d.ts +14 -58
- package/dist/Progress.constants.d.ts +1 -1
- package/dist/Progress.constants.js +1 -1
- package/dist/Progress.svelte +24 -71
- package/dist/Progress.svelte.d.ts +11 -60
- package/dist/Progress.types.d.ts +3 -3
- package/dist/Radio.svelte +19 -92
- package/dist/Radio.svelte.d.ts +11 -63
- package/dist/Select.svelte +55 -94
- package/dist/Select.svelte.d.ts +19 -82
- package/dist/Slider.svelte +41 -98
- package/dist/Slider.svelte.d.ts +18 -65
- package/dist/Switch.svelte +29 -78
- package/dist/Switch.svelte.d.ts +20 -73
- package/dist/Tab.svelte +23 -66
- package/dist/Tab.svelte.d.ts +11 -70
- package/dist/TabList.svelte +50 -76
- package/dist/TabList.svelte.d.ts +17 -69
- package/dist/TabList.types.d.ts +3 -11
- package/dist/TextArea.svelte +17 -59
- package/dist/TextArea.svelte.d.ts +18 -68
- package/dist/Tooltip.svelte +23 -66
- package/dist/Tooltip.svelte.d.ts +9 -69
- package/dist/Tree.svelte +32 -83
- package/dist/Tree.svelte.d.ts +14 -66
- package/dist/Tree.types.d.ts +3 -11
- package/dist/TreeChevron.svelte +10 -49
- package/dist/TreeChevron.svelte.d.ts +8 -52
- package/dist/TreeItem.svelte +105 -159
- package/dist/TreeItem.svelte.d.ts +21 -100
- package/dist/TreeItem.types.d.ts +2 -12
- package/dist/actions/clickOutside.d.ts +1 -0
- package/dist/actions/clickOutside.js +1 -0
- package/dist/actions/extraClass.d.ts +8 -0
- package/dist/actions/extraClass.js +14 -0
- package/dist/index.d.ts +4 -12
- package/dist/index.js +3 -9
- package/package.json +20 -22
- package/dist/Button.constants.d.ts +0 -2
- package/dist/Button.constants.js +0 -2
- package/dist/Button.types.d.ts +0 -6
- package/dist/ColorPicker.constants.d.ts +0 -1
- package/dist/ColorPicker.constants.js +0 -1
- package/dist/ColorPicker.svelte +0 -287
- package/dist/ColorPicker.svelte.d.ts +0 -52
- package/dist/ColorPicker.types.d.ts +0 -4
- package/dist/ColorPicker.types.js +0 -1
- package/dist/HexColorSliders.svelte +0 -103
- package/dist/HexColorSliders.svelte.d.ts +0 -51
- package/dist/HslColorSliders.svelte +0 -128
- package/dist/HslColorSliders.svelte.d.ts +0 -51
- package/dist/Label.types.d.ts +0 -6
- package/dist/Label.types.js +0 -1
- package/dist/MenuItemDisplay.svelte +0 -32
- package/dist/MenuItemDisplay.svelte.d.ts +0 -39
- package/dist/RgbColorSliders.svelte +0 -93
- package/dist/RgbColorSliders.svelte.d.ts +0 -24
- package/dist/TreeItemDisplay.svelte +0 -74
- package/dist/TreeItemDisplay.svelte.d.ts +0 -73
- package/dist/css/Button.base.css +0 -54
- package/dist/css/Button.colorful.css +0 -17
- package/dist/css/Button.css +0 -8
- package/dist/css/Button.disabled.css +0 -22
- package/dist/css/Button.secondary.colorful.css +0 -15
- package/dist/css/Button.secondary.css +0 -11
- package/dist/css/Button.shapes.css +0 -14
- package/dist/css/Button.tool.colorful.css +0 -13
- package/dist/css/Button.tool.css +0 -18
- package/dist/css/Callout.base.css +0 -55
- package/dist/css/Callout.colorful.css +0 -5
- package/dist/css/Callout.css +0 -2
- package/dist/css/Checkbox.base.css +0 -121
- package/dist/css/Checkbox.colorful.css +0 -17
- package/dist/css/Checkbox.css +0 -3
- package/dist/css/Checkbox.disabled.css +0 -28
- package/dist/css/ColorPicker.base.css +0 -23
- package/dist/css/ColorPicker.css +0 -1
- package/dist/css/Dialog.base.css +0 -114
- package/dist/css/Dialog.css +0 -1
- package/dist/css/Dropdown.base.css +0 -105
- package/dist/css/Dropdown.colorful.css +0 -23
- package/dist/css/Dropdown.composed.css +0 -11
- package/dist/css/Dropdown.css +0 -4
- package/dist/css/Dropdown.disabled.css +0 -32
- package/dist/css/HexColorSliders.base.css +0 -87
- package/dist/css/HexColorSliders.css +0 -1
- package/dist/css/HslColorSliders.base.css +0 -105
- package/dist/css/HslColorSliders.css +0 -1
- package/dist/css/Input.base.css +0 -72
- package/dist/css/Input.colorful.css +0 -22
- package/dist/css/Input.composed.css +0 -12
- package/dist/css/Input.css +0 -4
- package/dist/css/Input.disabled.css +0 -24
- package/dist/css/Label.base.css +0 -114
- package/dist/css/Label.boxed.colorful.css +0 -21
- package/dist/css/Label.boxed.css +0 -31
- package/dist/css/Label.colorful.css +0 -3
- package/dist/css/Label.css +0 -5
- package/dist/css/Label.disabled.css +0 -9
- package/dist/css/Link.base.css +0 -43
- package/dist/css/Link.colorful.css +0 -15
- package/dist/css/Link.css +0 -11
- package/dist/css/Link.disabled.css +0 -10
- package/dist/css/Link.ghost.colorful.css +0 -7
- package/dist/css/Link.ghost.css +0 -11
- package/dist/css/Link.text-underline.css +0 -8
- package/dist/css/Link.text-underline.ghost.css +0 -13
- package/dist/css/Link.undecorated.colorful.css +0 -8
- package/dist/css/Link.undecorated.css +0 -8
- package/dist/css/Link.undecorated.ghost.css +0 -8
- package/dist/css/Link.undecorated.underline.css +0 -8
- package/dist/css/List.base.css +0 -84
- package/dist/css/List.composed.css +0 -8
- package/dist/css/List.css +0 -3
- package/dist/css/List.disabled.css +0 -7
- package/dist/css/ListItem.base.css +0 -33
- package/dist/css/ListItem.css +0 -2
- package/dist/css/ListItem.disabled.css +0 -28
- package/dist/css/Menu.base.css +0 -21
- package/dist/css/Menu.css +0 -1
- package/dist/css/MenuBar.base.css +0 -9
- package/dist/css/MenuBar.css +0 -1
- package/dist/css/MenuButton.base.css +0 -13
- package/dist/css/MenuButton.css +0 -1
- package/dist/css/MenuItem.base.css +0 -48
- package/dist/css/MenuItem.css +0 -1
- package/dist/css/MenuItemDisplay.base.css +0 -79
- package/dist/css/MenuItemDisplay.css +0 -2
- package/dist/css/MenuItemDisplay.disabled.css +0 -28
- package/dist/css/MenuSeparator.base.css +0 -5
- package/dist/css/MenuSeparator.css +0 -1
- package/dist/css/Popover.css +0 -21
- package/dist/css/Progress.base.css +0 -85
- package/dist/css/Progress.css +0 -2
- package/dist/css/Progress.disabled.css +0 -17
- package/dist/css/Radio.base.css +0 -109
- package/dist/css/Radio.colorful.css +0 -18
- package/dist/css/Radio.css +0 -3
- package/dist/css/Radio.disabled.css +0 -28
- package/dist/css/RgbColorSliders.base.css +0 -94
- package/dist/css/RgbColorSliders.css +0 -1
- package/dist/css/Select.base.css +0 -101
- package/dist/css/Select.colorful.css +0 -24
- package/dist/css/Select.composed.css +0 -12
- package/dist/css/Select.css +0 -4
- package/dist/css/Select.disabled.css +0 -28
- package/dist/css/Slider.base.css +0 -152
- package/dist/css/Slider.colorful.css +0 -11
- package/dist/css/Slider.composed.css +0 -8
- package/dist/css/Slider.css +0 -4
- package/dist/css/Slider.disabled.css +0 -30
- package/dist/css/Switch.base.css +0 -175
- package/dist/css/Switch.colorful.css +0 -45
- package/dist/css/Switch.css +0 -3
- package/dist/css/Switch.disabled.css +0 -30
- package/dist/css/Tab.base.css +0 -96
- package/dist/css/Tab.colorful.css +0 -13
- package/dist/css/Tab.css +0 -3
- package/dist/css/Tab.disabled.css +0 -36
- package/dist/css/TabList.base.css +0 -34
- package/dist/css/TabList.css +0 -1
- package/dist/css/TextArea.base.css +0 -62
- package/dist/css/TextArea.colorful.css +0 -17
- package/dist/css/TextArea.composed.css +0 -8
- package/dist/css/TextArea.css +0 -4
- package/dist/css/TextArea.disabled.css +0 -28
- package/dist/css/Tooltip.base.css +0 -6
- package/dist/css/Tooltip.css +0 -1
- package/dist/css/Tree.base.css +0 -49
- package/dist/css/Tree.composed.css +0 -8
- package/dist/css/Tree.css +0 -3
- package/dist/css/Tree.disabled.css +0 -27
- package/dist/css/TreeChevron.base.css +0 -86
- package/dist/css/TreeChevron.css +0 -1
- package/dist/css/TreeItem.base.css +0 -3
- package/dist/css/TreeItem.css +0 -1
- package/dist/css/TreeItemDisplay.base.css +0 -48
- package/dist/css/TreeItemDisplay.colorful.css +0 -9
- package/dist/css/TreeItemDisplay.css +0 -3
- package/dist/css/TreeItemDisplay.disabled.css +0 -28
- package/dist/css/dark-mode.css +0 -134
- package/dist/css/light-mode.css +0 -134
- package/dist/css/sterling.css +0 -37
- package/dist/package.json +0 -108
- /package/dist/{Button.types.js → Callout.types.js} +0 -0
package/dist/Popover.svelte
CHANGED
|
@@ -1,29 +1,14 @@
|
|
|
1
|
-
<
|
|
1
|
+
<svelte:options runes={true} />
|
|
2
|
+
|
|
3
|
+
<script lang="ts">import { getContext, onMount, tick } from 'svelte';
|
|
2
4
|
import { autoUpdate, computePosition, flip, offset } from '@floating-ui/dom';
|
|
3
5
|
import { portal } from './actions/portal';
|
|
4
6
|
import { STERLING_PORTAL_HOST_ID, STERLING_PORTAL_CONTEXT_ID } from './Portal.constants';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
/** The offset towards or away from the side of the reference element. */
|
|
11
|
-
export let mainAxisOffset = 0;
|
|
12
|
-
/** When true, the popover is open and visible. */
|
|
13
|
-
export let open = false;
|
|
14
|
-
/** How the popover should be positioned relative to the reference element. */
|
|
15
|
-
export let placement = 'top-start';
|
|
16
|
-
/** The host container for the callout. */
|
|
17
|
-
export let portalHost = undefined;
|
|
18
|
-
/** The reference to the element anchoring the position of the popover. */
|
|
19
|
-
export let reference;
|
|
20
|
-
/** Additional class names to apply. */
|
|
21
|
-
export let variant = '';
|
|
22
|
-
// ----- State ----- //
|
|
23
|
-
let popupRef;
|
|
24
|
-
let popupPosition = { x: 0, y: 0 };
|
|
25
|
-
$: floatingUIPlacement = placement;
|
|
26
|
-
let bodyHeight = 0;
|
|
7
|
+
let { children, conditionalRender = $bindable(true), crossAxisOffset = $bindable(0), mainAxisOffset = $bindable(0), open = $bindable(false), placement = $bindable('top-start'), portalHost, reference, class: _class, ...rest } = $props();
|
|
8
|
+
let popupRef = $state(undefined);
|
|
9
|
+
let popupPosition = $state({ x: 0, y: 0 });
|
|
10
|
+
let floatingUIPlacement = $derived(placement);
|
|
11
|
+
let bodyHeight = $state(0);
|
|
27
12
|
let resizeObserver = undefined;
|
|
28
13
|
const { portalHost: contextPortalHost } = getContext(STERLING_PORTAL_CONTEXT_ID) || {
|
|
29
14
|
portalHost: undefined
|
|
@@ -46,13 +31,11 @@ const ensurePortalHost = async () => {
|
|
|
46
31
|
}
|
|
47
32
|
portalHost = host;
|
|
48
33
|
};
|
|
49
|
-
$: {
|
|
50
|
-
if ($contextPortalHost || !$contextPortalHost) {
|
|
51
|
-
ensurePortalHost();
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
34
|
// ----- Position ----- //
|
|
55
|
-
|
|
35
|
+
let middleware = $derived([
|
|
36
|
+
offset({ mainAxis: mainAxisOffset, crossAxis: crossAxisOffset }),
|
|
37
|
+
flip()
|
|
38
|
+
]);
|
|
56
39
|
const computePopoverPosition = async () => {
|
|
57
40
|
if (reference && popupRef) {
|
|
58
41
|
popupPosition = await computePosition(reference, popupRef, {
|
|
@@ -72,10 +55,19 @@ const autoUpdatePopoverPosition = () => {
|
|
|
72
55
|
cleanupAutoUpdate = autoUpdate(reference, popupRef, computePopoverPosition);
|
|
73
56
|
}
|
|
74
57
|
};
|
|
75
|
-
|
|
76
|
-
|
|
58
|
+
$effect(() => {
|
|
59
|
+
autoUpdatePopoverPosition();
|
|
60
|
+
return () => {
|
|
61
|
+
cleanupAutoUpdate();
|
|
62
|
+
cleanupAutoUpdate = () => { };
|
|
63
|
+
};
|
|
64
|
+
});
|
|
65
|
+
$effect(() => {
|
|
66
|
+
bodyHeight;
|
|
67
|
+
computePopoverPosition();
|
|
68
|
+
});
|
|
77
69
|
// ----- EventHandlers ----- //
|
|
78
|
-
|
|
70
|
+
$effect(() => {
|
|
79
71
|
ensurePortalHost();
|
|
80
72
|
resizeObserver = new ResizeObserver((entries) => {
|
|
81
73
|
bodyHeight = entries[0].target.clientHeight;
|
|
@@ -92,49 +84,38 @@ const onKeydown = (event) => {
|
|
|
92
84
|
if (event.key === 'Escape') {
|
|
93
85
|
open = false;
|
|
94
86
|
}
|
|
87
|
+
rest.onkeydown?.(event);
|
|
95
88
|
};
|
|
89
|
+
//TODO: Is this necessary?
|
|
96
90
|
ensurePortalHost();
|
|
97
91
|
</script>
|
|
98
92
|
|
|
99
93
|
{#if open || !conditionalRender}
|
|
100
94
|
<div use:portal={{ target: portalHost }} class="sterling-popover-portal">
|
|
101
|
-
<!-- svelte-ignore
|
|
95
|
+
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
102
96
|
<div
|
|
103
97
|
bind:this={popupRef}
|
|
104
|
-
class={
|
|
98
|
+
class={['sterling-popover', _class].filter(Boolean).join(' ')}
|
|
105
99
|
class:open
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
on:keydown
|
|
121
|
-
on:keypress
|
|
122
|
-
on:keyup
|
|
123
|
-
on:mousedown
|
|
124
|
-
on:mouseenter
|
|
125
|
-
on:mouseleave
|
|
126
|
-
on:mousemove
|
|
127
|
-
on:mouseover
|
|
128
|
-
on:mouseout
|
|
129
|
-
on:mouseup
|
|
130
|
-
on:scroll
|
|
131
|
-
on:wheel|passive
|
|
132
|
-
on:paste
|
|
133
|
-
on:keydown={onKeydown}
|
|
134
|
-
{...$$restProps}
|
|
100
|
+
class:top={popupPosition.placement === 'top'}
|
|
101
|
+
class:top-start={popupPosition.placement === 'top-start'}
|
|
102
|
+
class:top-end={popupPosition.placement === 'top-end'}
|
|
103
|
+
class:right={popupPosition.placement === 'right'}
|
|
104
|
+
class:right-start={popupPosition.placement === 'right-start'}
|
|
105
|
+
class:right-end={popupPosition.placement === 'right-end'}
|
|
106
|
+
class:bottom={popupPosition.placement === 'bottom'}
|
|
107
|
+
class:bottom-start={popupPosition.placement === 'bottom-start'}
|
|
108
|
+
class:bottom-end={popupPosition.placement === 'bottom-end'}
|
|
109
|
+
class:left={popupPosition.placement === 'left'}
|
|
110
|
+
class:left-start={popupPosition.placement === 'left-start'}
|
|
111
|
+
class:left-end={popupPosition.placement === 'left-end'}
|
|
112
|
+
{...rest}
|
|
113
|
+
onkeydown={onKeydown}
|
|
135
114
|
style="left:{popupPosition.x}px; top:{popupPosition.y}px"
|
|
136
115
|
>
|
|
137
|
-
|
|
116
|
+
{#if children}
|
|
117
|
+
{@render children()}
|
|
118
|
+
{/if}
|
|
138
119
|
</div>
|
|
139
120
|
</div>
|
|
140
121
|
{/if}
|
package/dist/Popover.svelte.d.ts
CHANGED
|
@@ -1,59 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
variant?: string | undefined;
|
|
13
|
-
};
|
|
14
|
-
events: {
|
|
15
|
-
blur: FocusEvent;
|
|
16
|
-
click: MouseEvent;
|
|
17
|
-
copy: ClipboardEvent;
|
|
18
|
-
cut: ClipboardEvent;
|
|
19
|
-
dblclick: MouseEvent;
|
|
20
|
-
dragend: DragEvent;
|
|
21
|
-
dragenter: DragEvent;
|
|
22
|
-
dragleave: DragEvent;
|
|
23
|
-
dragover: DragEvent;
|
|
24
|
-
dragstart: DragEvent;
|
|
25
|
-
drop: DragEvent;
|
|
26
|
-
focus: FocusEvent;
|
|
27
|
-
focusin: FocusEvent;
|
|
28
|
-
focusout: FocusEvent;
|
|
29
|
-
keydown: KeyboardEvent;
|
|
30
|
-
keypress: KeyboardEvent;
|
|
31
|
-
keyup: KeyboardEvent;
|
|
32
|
-
mousedown: MouseEvent;
|
|
33
|
-
mouseenter: MouseEvent;
|
|
34
|
-
mouseleave: MouseEvent;
|
|
35
|
-
mousemove: MouseEvent;
|
|
36
|
-
mouseover: MouseEvent;
|
|
37
|
-
mouseout: MouseEvent;
|
|
38
|
-
mouseup: MouseEvent;
|
|
39
|
-
scroll: Event;
|
|
40
|
-
wheel: WheelEvent;
|
|
41
|
-
paste: ClipboardEvent;
|
|
42
|
-
} & {
|
|
43
|
-
[evt: string]: CustomEvent<any>;
|
|
44
|
-
};
|
|
45
|
-
slots: {
|
|
46
|
-
default: {
|
|
47
|
-
open: boolean;
|
|
48
|
-
variant: string;
|
|
49
|
-
};
|
|
50
|
-
};
|
|
51
|
-
exports?: undefined;
|
|
52
|
-
bindings?: undefined;
|
|
1
|
+
/// <reference types="svelte" />
|
|
2
|
+
import type { PopoverPlacement } from './Popover.types';
|
|
3
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
4
|
+
type Props = HTMLAttributes<HTMLDivElement> & {
|
|
5
|
+
conditionalRender?: boolean;
|
|
6
|
+
crossAxisOffset?: number;
|
|
7
|
+
mainAxisOffset?: number;
|
|
8
|
+
open?: boolean | null;
|
|
9
|
+
placement?: PopoverPlacement;
|
|
10
|
+
portalHost?: HTMLElement;
|
|
11
|
+
reference?: HTMLElement;
|
|
53
12
|
};
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
export
|
|
57
|
-
export default class Popover extends SvelteComponent<PopoverProps, PopoverEvents, PopoverSlots> {
|
|
58
|
-
}
|
|
59
|
-
export {};
|
|
13
|
+
declare const Popover: import("svelte").Component<Props, {}, "conditionalRender" | "crossAxisOffset" | "mainAxisOffset" | "open" | "placement">;
|
|
14
|
+
type Popover = ReturnType<typeof Popover>;
|
|
15
|
+
export default Popover;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const PROGRESS_ORIENTATIONS: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export const
|
|
1
|
+
export const PROGRESS_ORIENTATIONS = ['horizontal', 'vertical'];
|
package/dist/Progress.svelte
CHANGED
|
@@ -1,83 +1,36 @@
|
|
|
1
|
-
<
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export let max = 100;
|
|
6
|
-
/** A read-only percentage between 0 and 100 calculated from value and max. */
|
|
7
|
-
export let percent = 0;
|
|
8
|
-
/** The current status of the progress. */
|
|
9
|
-
export let status = 'none';
|
|
10
|
-
/** The current value. */
|
|
11
|
-
export let value = 0;
|
|
12
|
-
/** Additional class names to apply. */
|
|
13
|
-
export let variant = '';
|
|
14
|
-
/** When true, the progress bar is displayed vertically. */
|
|
15
|
-
export let vertical = false;
|
|
1
|
+
<svelte:options runes={true} />
|
|
2
|
+
|
|
3
|
+
<script lang="ts">let { class: _class, disabled = false, max = 100, percent = $bindable(0), //readonly
|
|
4
|
+
value = $bindable(0), vertical, ...rest } = $props();
|
|
16
5
|
//----- State ----- //
|
|
17
|
-
let clientHeight;
|
|
18
|
-
let clientWidth;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
6
|
+
let clientHeight = $state(0);
|
|
7
|
+
let clientWidth = $state(0);
|
|
8
|
+
let clampMax = $derived(Math.max(1, max));
|
|
9
|
+
let clampValue = $derived(Math.max(0, Math.min(value, clampMax)));
|
|
10
|
+
let ratio = $derived(clampValue / clampMax);
|
|
11
|
+
$effect(() => {
|
|
23
12
|
percent = Math.round(ratio * 100);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
13
|
+
});
|
|
14
|
+
let percentHeight = $derived(clientHeight * ratio);
|
|
15
|
+
let percentWidth = $derived(clientWidth * ratio);
|
|
16
|
+
let indicatorStyle = $derived(vertical ? `height: ${percentHeight}px` : `width: ${percentWidth}px`);
|
|
17
|
+
export {};
|
|
29
18
|
</script>
|
|
30
19
|
|
|
31
|
-
<!--
|
|
32
|
-
@component
|
|
33
|
-
An indicator of a value between 0 and a maximum value.ß
|
|
34
|
-
Does not use the HTML progress element.
|
|
35
|
-
-->
|
|
36
|
-
<!-- svelte-ignore a11y-label-has-associated-control -->
|
|
37
|
-
<!-- svelte-ignore a11y-no-noninteractive-element-interactions -->
|
|
20
|
+
<!-- svelte-ignore a11y_role_supports_aria_props -->
|
|
38
21
|
<div
|
|
39
|
-
|
|
22
|
+
aria-orientation={vertical ? 'vertical' : 'horizontal'}
|
|
23
|
+
class={['sterling-progress', _class].filter(Boolean).join(' ')}
|
|
40
24
|
class:disabled
|
|
25
|
+
class:horizontal={!vertical}
|
|
41
26
|
class:vertical
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
class:error={indicatorColor === 'danger'}
|
|
27
|
+
data-progress-percent={percent}
|
|
28
|
+
data-progress-max={max}
|
|
29
|
+
data-progress-value={value}
|
|
46
30
|
role="progressbar"
|
|
47
|
-
|
|
48
|
-
on:click
|
|
49
|
-
on:dblclick
|
|
50
|
-
on:dragend
|
|
51
|
-
on:dragenter
|
|
52
|
-
on:dragleave
|
|
53
|
-
on:dragover
|
|
54
|
-
on:dragstart
|
|
55
|
-
on:drop
|
|
56
|
-
on:focus
|
|
57
|
-
on:focusin
|
|
58
|
-
on:focusout
|
|
59
|
-
on:keydown
|
|
60
|
-
on:keypress
|
|
61
|
-
on:keyup
|
|
62
|
-
on:mousedown
|
|
63
|
-
on:mouseenter
|
|
64
|
-
on:mouseleave
|
|
65
|
-
on:mousemove
|
|
66
|
-
on:mouseover
|
|
67
|
-
on:mouseout
|
|
68
|
-
on:mouseup
|
|
69
|
-
on:pointercancel
|
|
70
|
-
on:pointerdown
|
|
71
|
-
on:pointerenter
|
|
72
|
-
on:pointerleave
|
|
73
|
-
on:pointermove
|
|
74
|
-
on:pointerover
|
|
75
|
-
on:pointerout
|
|
76
|
-
on:pointerup
|
|
77
|
-
on:wheel|passive
|
|
78
|
-
{...$$restProps}
|
|
31
|
+
{...rest}
|
|
79
32
|
>
|
|
80
33
|
<div class="container" bind:clientWidth bind:clientHeight>
|
|
81
|
-
<div class="indicator" style={indicatorStyle}
|
|
34
|
+
<div class="indicator" style={indicatorStyle}></div>
|
|
82
35
|
</div>
|
|
83
36
|
</div>
|
|
@@ -1,61 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
value?: number | undefined;
|
|
10
|
-
variant?: string | undefined;
|
|
11
|
-
vertical?: boolean | undefined;
|
|
12
|
-
};
|
|
13
|
-
events: {
|
|
14
|
-
blur: FocusEvent;
|
|
15
|
-
click: MouseEvent;
|
|
16
|
-
dblclick: MouseEvent;
|
|
17
|
-
dragend: DragEvent;
|
|
18
|
-
dragenter: DragEvent;
|
|
19
|
-
dragleave: DragEvent;
|
|
20
|
-
dragover: DragEvent;
|
|
21
|
-
dragstart: DragEvent;
|
|
22
|
-
drop: DragEvent;
|
|
23
|
-
focus: FocusEvent;
|
|
24
|
-
focusin: FocusEvent;
|
|
25
|
-
focusout: FocusEvent;
|
|
26
|
-
keydown: KeyboardEvent;
|
|
27
|
-
keypress: KeyboardEvent;
|
|
28
|
-
keyup: KeyboardEvent;
|
|
29
|
-
mousedown: MouseEvent;
|
|
30
|
-
mouseenter: MouseEvent;
|
|
31
|
-
mouseleave: MouseEvent;
|
|
32
|
-
mousemove: MouseEvent;
|
|
33
|
-
mouseover: MouseEvent;
|
|
34
|
-
mouseout: MouseEvent;
|
|
35
|
-
mouseup: MouseEvent;
|
|
36
|
-
pointercancel: PointerEvent;
|
|
37
|
-
pointerdown: PointerEvent;
|
|
38
|
-
pointerenter: PointerEvent;
|
|
39
|
-
pointerleave: PointerEvent;
|
|
40
|
-
pointermove: PointerEvent;
|
|
41
|
-
pointerover: PointerEvent;
|
|
42
|
-
pointerout: PointerEvent;
|
|
43
|
-
pointerup: PointerEvent;
|
|
44
|
-
wheel: WheelEvent;
|
|
45
|
-
} & {
|
|
46
|
-
[evt: string]: CustomEvent<any>;
|
|
47
|
-
};
|
|
48
|
-
slots: {};
|
|
49
|
-
exports?: undefined;
|
|
50
|
-
bindings?: undefined;
|
|
1
|
+
/// <reference types="svelte" />
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
type Props = HTMLAttributes<HTMLDivElement> & {
|
|
4
|
+
disabled?: boolean | null;
|
|
5
|
+
max?: number;
|
|
6
|
+
percent?: number;
|
|
7
|
+
value?: number;
|
|
8
|
+
vertical?: boolean | null;
|
|
51
9
|
};
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
export
|
|
55
|
-
/**
|
|
56
|
-
* An indicator of a value between 0 and a maximum value.ß
|
|
57
|
-
* Does not use the HTML progress element.
|
|
58
|
-
*/
|
|
59
|
-
export default class Progress extends SvelteComponent<ProgressProps, ProgressEvents, ProgressSlots> {
|
|
60
|
-
}
|
|
61
|
-
export {};
|
|
10
|
+
declare const Progress: import("svelte").Component<Props, {}, "value" | "percent">;
|
|
11
|
+
type Progress = ReturnType<typeof Progress>;
|
|
12
|
+
export default Progress;
|
package/dist/Progress.types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
type
|
|
3
|
-
export type
|
|
1
|
+
import type { PROGRESS_ORIENTATIONS } from './Progress.constants';
|
|
2
|
+
type ProgressOrientationTuple = typeof PROGRESS_ORIENTATIONS;
|
|
3
|
+
export type ProgressOrientation = ProgressOrientationTuple[number];
|
|
4
4
|
export {};
|
package/dist/Radio.svelte
CHANGED
|
@@ -1,57 +1,14 @@
|
|
|
1
|
-
<
|
|
1
|
+
<svelte:options runes={true} />
|
|
2
|
+
|
|
3
|
+
<script lang="ts">import { idGenerator } from './idGenerator';
|
|
2
4
|
import { usingKeyboard } from './mediaQueries/usingKeyboard';
|
|
3
|
-
|
|
4
|
-
export let checked = false;
|
|
5
|
-
export let disabled = false;
|
|
6
|
-
// bind:group doesn't seem to work properly (yet) in a nested radio.
|
|
7
|
-
// The workaround is to export `checked` and `group` properties
|
|
8
|
-
// and implement the same behavior.
|
|
9
|
-
export let group = undefined;
|
|
10
|
-
export let id = undefined;
|
|
11
|
-
/** Additional class names to apply. */
|
|
12
|
-
export let variant = '';
|
|
13
|
-
// ensure initial state is consistent
|
|
14
|
-
if (checked && $$restProps.value !== group) {
|
|
15
|
-
group = $$restProps.value;
|
|
16
|
-
}
|
|
17
|
-
else if (!checked && $$restProps.value === group) {
|
|
18
|
-
checked = true;
|
|
19
|
-
}
|
|
20
|
-
// ----- State ----- //
|
|
5
|
+
let { id, children, checked = $bindable(false), class: _class, disabled = false, group = $bindable(), ...rest } = $props();
|
|
21
6
|
let inputRef;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const reconcile = () => {
|
|
25
|
-
if (checked !== previousChecked) {
|
|
26
|
-
// when checked, set group to value
|
|
27
|
-
if (checked && $$restProps.value) {
|
|
28
|
-
group = $$restProps.value;
|
|
29
|
-
previousGroup = $$restProps.value;
|
|
30
|
-
}
|
|
31
|
-
previousChecked = checked;
|
|
32
|
-
}
|
|
33
|
-
else if (group !== previousGroup) {
|
|
34
|
-
// when group changes, update checked
|
|
35
|
-
if ($$restProps.value) {
|
|
36
|
-
checked = $$restProps.value === group;
|
|
37
|
-
previousChecked = checked;
|
|
38
|
-
}
|
|
39
|
-
previousGroup = group;
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
$: checked, group, $$restProps.value, reconcile();
|
|
43
|
-
$: {
|
|
44
|
-
if (inputRef && checked && !inputRef.checked) {
|
|
45
|
-
// setting checked doesn't cause raise on:change,
|
|
46
|
-
// so we click the radio to cause it to be checked.
|
|
47
|
-
inputRef.click();
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
$: {
|
|
51
|
-
if ($$slots.default && id === undefined) {
|
|
7
|
+
$effect(() => {
|
|
8
|
+
if (children && id === undefined) {
|
|
52
9
|
id = idGenerator.nextId('Radio');
|
|
53
10
|
}
|
|
54
|
-
}
|
|
11
|
+
});
|
|
55
12
|
// ----- Methods ----- //
|
|
56
13
|
export const blur = () => {
|
|
57
14
|
inputRef?.blur();
|
|
@@ -64,10 +21,14 @@ export const focus = (options) => {
|
|
|
64
21
|
};
|
|
65
22
|
// ----- Event Handlers ----- //
|
|
66
23
|
const onChange = (e) => {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
24
|
+
console.log('onChange', e);
|
|
25
|
+
// if ((e.currentTarget && e.currentTarget.checked) || (e.target && e.target.checked)) {
|
|
26
|
+
// group = value;
|
|
27
|
+
// }
|
|
70
28
|
};
|
|
29
|
+
$effect(() => {
|
|
30
|
+
console.log(id, '-checked', checked);
|
|
31
|
+
});
|
|
71
32
|
</script>
|
|
72
33
|
|
|
73
34
|
<!--
|
|
@@ -75,52 +36,18 @@ const onChange = (e) => {
|
|
|
75
36
|
A styled HTML input type=radio element with optional label.
|
|
76
37
|
-->
|
|
77
38
|
<div
|
|
78
|
-
class={`sterling-radio ${
|
|
39
|
+
class={`sterling-radio ${_class}`}
|
|
79
40
|
class:checked
|
|
80
41
|
class:disabled
|
|
81
42
|
class:using-keyboard={$usingKeyboard}
|
|
82
43
|
>
|
|
83
44
|
<div class="container">
|
|
84
|
-
<input
|
|
85
|
-
|
|
86
|
-
{checked}
|
|
87
|
-
{disabled}
|
|
88
|
-
name={group}
|
|
89
|
-
{id}
|
|
90
|
-
type="radio"
|
|
91
|
-
on:blur
|
|
92
|
-
on:click
|
|
93
|
-
on:change
|
|
94
|
-
on:change={onChange}
|
|
95
|
-
on:dblclick
|
|
96
|
-
on:dragend
|
|
97
|
-
on:dragenter
|
|
98
|
-
on:dragleave
|
|
99
|
-
on:dragover
|
|
100
|
-
on:dragstart
|
|
101
|
-
on:drop
|
|
102
|
-
on:focus
|
|
103
|
-
on:focusin
|
|
104
|
-
on:focusout
|
|
105
|
-
on:keydown
|
|
106
|
-
on:keypress
|
|
107
|
-
on:keyup
|
|
108
|
-
on:input
|
|
109
|
-
on:mousedown
|
|
110
|
-
on:mouseenter
|
|
111
|
-
on:mouseleave
|
|
112
|
-
on:mousemove
|
|
113
|
-
on:mouseover
|
|
114
|
-
on:mouseout
|
|
115
|
-
on:mouseup
|
|
116
|
-
on:wheel|passive
|
|
117
|
-
{...$$restProps}
|
|
118
|
-
/>
|
|
119
|
-
<div class="indicator" />
|
|
45
|
+
<input bind:this={inputRef} checked {disabled} bind:group {id} type="radio" {...rest} />
|
|
46
|
+
<div class="indicator"></div>
|
|
120
47
|
</div>
|
|
121
|
-
{#if
|
|
48
|
+
{#if children}
|
|
122
49
|
<label for={id}>
|
|
123
|
-
|
|
50
|
+
{@render children()}
|
|
124
51
|
</label>
|
|
125
52
|
{/if}
|
|
126
53
|
</div>
|
package/dist/Radio.svelte.d.ts
CHANGED
|
@@ -1,65 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
checked?: boolean | undefined;
|
|
6
|
-
disabled?: boolean | undefined;
|
|
7
|
-
group?: any | undefined | null;
|
|
8
|
-
id?: string | undefined;
|
|
9
|
-
variant?: string | undefined;
|
|
10
|
-
blur?: (() => void) | undefined;
|
|
11
|
-
click?: (() => void) | undefined;
|
|
12
|
-
focus?: ((options?: FocusOptions) => void) | undefined;
|
|
13
|
-
};
|
|
14
|
-
events: {
|
|
15
|
-
blur: FocusEvent;
|
|
16
|
-
click: MouseEvent;
|
|
17
|
-
change: Event;
|
|
18
|
-
dblclick: MouseEvent;
|
|
19
|
-
dragend: DragEvent;
|
|
20
|
-
dragenter: DragEvent;
|
|
21
|
-
dragleave: DragEvent;
|
|
22
|
-
dragover: DragEvent;
|
|
23
|
-
dragstart: DragEvent;
|
|
24
|
-
drop: DragEvent;
|
|
25
|
-
focus: FocusEvent;
|
|
26
|
-
focusin: FocusEvent;
|
|
27
|
-
focusout: FocusEvent;
|
|
28
|
-
keydown: KeyboardEvent;
|
|
29
|
-
keypress: KeyboardEvent;
|
|
30
|
-
keyup: KeyboardEvent;
|
|
31
|
-
input: Event;
|
|
32
|
-
mousedown: MouseEvent;
|
|
33
|
-
mouseenter: MouseEvent;
|
|
34
|
-
mouseleave: MouseEvent;
|
|
35
|
-
mousemove: MouseEvent;
|
|
36
|
-
mouseover: MouseEvent;
|
|
37
|
-
mouseout: MouseEvent;
|
|
38
|
-
mouseup: MouseEvent;
|
|
39
|
-
wheel: WheelEvent;
|
|
40
|
-
} & {
|
|
41
|
-
[evt: string]: CustomEvent<any>;
|
|
42
|
-
};
|
|
43
|
-
slots: {
|
|
44
|
-
default: {
|
|
45
|
-
checked: boolean;
|
|
46
|
-
disabled: boolean;
|
|
47
|
-
group: any;
|
|
48
|
-
inputId: string | undefined;
|
|
49
|
-
value: any;
|
|
50
|
-
variant: string;
|
|
51
|
-
};
|
|
52
|
-
};
|
|
53
|
-
exports?: undefined;
|
|
54
|
-
bindings?: undefined;
|
|
1
|
+
/// <reference types="svelte" />
|
|
2
|
+
import type { HTMLInputAttributes } from 'svelte/elements';
|
|
3
|
+
type Props = HTMLInputAttributes & {
|
|
4
|
+
group?: any | null;
|
|
55
5
|
};
|
|
56
|
-
export type RadioProps = typeof __propDef.props;
|
|
57
|
-
export type RadioEvents = typeof __propDef.events;
|
|
58
|
-
export type RadioSlots = typeof __propDef.slots;
|
|
59
6
|
/** A styled HTML input type=radio element with optional label. */
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
|
|
7
|
+
declare const Radio: import("svelte").Component<Props, {
|
|
8
|
+
blur: () => void;
|
|
9
|
+
click: () => void;
|
|
10
|
+
focus: (options?: FocusOptions) => void;
|
|
11
|
+
}, "group" | "checked">;
|
|
12
|
+
type Radio = ReturnType<typeof Radio>;
|
|
13
|
+
export default Radio;
|