kosui 0.2.0 → 0.5.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/README.md +34 -3
- package/dist/alert/alert.svelte +16 -157
- package/dist/alert/alert.svelte.d.ts +3 -26
- package/dist/alert/index.d.ts +1 -1
- package/dist/alert/index.js +1 -1
- package/dist/autocomplete/autocomplete.svelte +126 -12
- package/dist/autocomplete/autocomplete.svelte.d.ts +30 -6
- package/dist/autocomplete/index.d.ts +1 -5
- package/dist/autocomplete/index.js +1 -5
- package/dist/avatar/avatar.svelte +16 -10
- package/dist/badge/badge.svelte +31 -20
- package/dist/badge/badge.svelte.d.ts +8 -4
- package/dist/badge/index.d.ts +1 -1
- package/dist/base.d.ts +4 -8
- package/dist/base.js +14 -28
- package/dist/box/box.svelte +2 -14
- package/dist/box/box.svelte.d.ts +0 -2
- package/dist/breadcrumbs/breadcrumbs.svelte +38 -19
- package/dist/breadcrumbs/breadcrumbs.svelte.d.ts +6 -4
- package/dist/breadcrumbs/index.d.ts +1 -1
- package/dist/breadcrumbs/index.js +1 -1
- package/dist/button/button.svelte +96 -31
- package/dist/button/button.svelte.d.ts +11 -5
- package/dist/button/index.d.ts +1 -1
- package/dist/button/index.js +1 -1
- package/dist/chip/chip.svelte +62 -14
- package/dist/chip/chip.svelte.d.ts +2 -1
- package/dist/command/action.svelte.js +13 -18
- package/dist/command/command-palette.svelte +163 -0
- package/dist/command/command-palette.svelte.d.ts +11 -0
- package/dist/command/index.d.ts +1 -8
- package/dist/command/index.js +1 -8
- package/dist/common/divider.svelte +10 -5
- package/dist/common/divider.svelte.d.ts +3 -3
- package/dist/common/index.d.ts +0 -2
- package/dist/common/index.js +0 -2
- package/dist/dialog/dialog-provider.svelte +70 -0
- package/dist/dialog/dialog-provider.svelte.d.ts +7 -0
- package/dist/dialog/dialog.svelte +33 -35
- package/dist/dialog/dialog.svelte.d.ts +4 -8
- package/dist/dialog/dialogs.svelte.d.ts +49 -0
- package/dist/dialog/dialogs.svelte.js +73 -0
- package/dist/dialog/index.d.ts +2 -3
- package/dist/dialog/index.js +2 -3
- package/dist/drawer/drawer.svelte +51 -0
- package/dist/drawer/drawer.svelte.d.ts +8 -0
- package/dist/drawer/index.d.ts +1 -0
- package/dist/drawer/index.js +1 -0
- package/dist/fab/fab.svelte +30 -10
- package/dist/fab/fab.svelte.d.ts +3 -2
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/input/field.d.ts +8 -0
- package/dist/input/field.js +7 -0
- package/dist/input/index.d.ts +2 -1
- package/dist/input/index.js +2 -1
- package/dist/input/input.svelte +21 -66
- package/dist/input/input.svelte.d.ts +6 -16
- package/dist/link/link.svelte +33 -42
- package/dist/link/link.svelte.d.ts +4 -3
- package/dist/markdown/index.d.ts +2 -25
- package/dist/markdown/index.js +0 -24
- package/dist/markdown/markdown-tokens.svelte +166 -6
- package/dist/markdown/markdown-tokens.svelte.d.ts +2 -0
- package/dist/markdown/markdown.svelte +62 -173
- package/dist/markdown/markdown.svelte.d.ts +7 -27
- package/dist/markdown/parse.d.ts +5 -0
- package/dist/markdown/parse.js +30 -0
- package/dist/markdown/types.d.ts +28 -0
- package/dist/markdown/types.js +1 -0
- package/dist/menu/index.d.ts +3 -6
- package/dist/menu/index.js +3 -6
- package/dist/menu/menu-actions.svelte +44 -38
- package/dist/menu/menu-context.d.ts +4 -0
- package/dist/menu/menu-context.js +2 -0
- package/dist/menu/menu-group.svelte +40 -0
- package/dist/menu/menu-group.svelte.d.ts +11 -0
- package/dist/menu/menu-item.svelte +31 -54
- package/dist/menu/menu-item.svelte.d.ts +7 -5
- package/dist/menu/menu.svelte +160 -15
- package/dist/menu/menu.svelte.d.ts +15 -4
- package/dist/merge-props.d.ts +1 -1
- package/dist/merge-props.js +10 -5
- package/dist/modal/modal.svelte +67 -84
- package/dist/modal/modal.svelte.d.ts +7 -4
- package/dist/nav/index.d.ts +2 -0
- package/dist/nav/index.js +2 -0
- package/dist/nav/nav-group.svelte +40 -0
- package/dist/nav/nav-group.svelte.d.ts +10 -0
- package/dist/nav/nav-item.svelte +65 -0
- package/dist/nav/nav-item.svelte.d.ts +14 -0
- package/dist/popover/index.d.ts +1 -1
- package/dist/popover/index.js +1 -1
- package/dist/popover/popover.svelte +58 -111
- package/dist/popover/popover.svelte.d.ts +6 -8
- package/dist/progress/circular-progress.svelte +64 -30
- package/dist/progress/circular-progress.svelte.d.ts +7 -8
- package/dist/shortcut/index.d.ts +2 -2
- package/dist/shortcut/index.js +1 -1
- package/dist/shortcut/shortcut-hint.svelte +36 -0
- package/dist/shortcut/shortcut-hint.svelte.d.ts +9 -0
- package/dist/shortcut/shortcut.d.ts +19 -14
- package/dist/shortcut/shortcut.js +105 -52
- package/dist/skeleton/skeleton.svelte +13 -8
- package/dist/skeleton/skeleton.svelte.d.ts +2 -5
- package/dist/slider/index.d.ts +1 -8
- package/dist/slider/index.js +1 -8
- package/dist/slider/slider.svelte +180 -211
- package/dist/slider/slider.svelte.d.ts +11 -32
- package/dist/switch/index.d.ts +1 -2
- package/dist/switch/index.js +1 -2
- package/dist/switch/switch.svelte +36 -60
- package/dist/switch/switch.svelte.d.ts +6 -17
- package/dist/textarea/index.d.ts +1 -1
- package/dist/textarea/index.js +1 -1
- package/dist/textarea/textarea.svelte +23 -63
- package/dist/textarea/textarea.svelte.d.ts +8 -18
- package/dist/theme.css +191 -0
- package/dist/toggle/index.d.ts +0 -1
- package/dist/toggle/index.js +0 -1
- package/dist/toggle/toggle-button.svelte +72 -38
- package/dist/toggle/toggle-button.svelte.d.ts +4 -4
- package/dist/toggle/toggle-context.d.ts +10 -0
- package/dist/toggle/toggle-context.js +2 -0
- package/dist/toggle/toggle-group.svelte +41 -22
- package/dist/toggle/toggle-group.svelte.d.ts +7 -4
- package/dist/tooltip/tooltip.svelte +67 -26
- package/dist/tooltip/tooltip.svelte.d.ts +10 -4
- package/dist/utils.d.ts +9 -3
- package/dist/utils.js +10 -0
- package/package.json +6 -5
- package/dist/autocomplete/autocomplete-content.svelte +0 -47
- package/dist/autocomplete/autocomplete-content.svelte.d.ts +0 -10
- package/dist/autocomplete/autocomplete-context.svelte.d.ts +0 -12
- package/dist/autocomplete/autocomplete-context.svelte.js +0 -34
- package/dist/autocomplete/autocomplete-input.svelte +0 -36
- package/dist/autocomplete/autocomplete-input.svelte.d.ts +0 -5
- package/dist/autocomplete/autocomplete-item.svelte +0 -68
- package/dist/autocomplete/autocomplete-item.svelte.d.ts +0 -11
- package/dist/base.css +0 -71
- package/dist/bindable.svelte.d.ts +0 -7
- package/dist/bindable.svelte.js +0 -25
- package/dist/command/command-content.svelte +0 -15
- package/dist/command/command-content.svelte.d.ts +0 -8
- package/dist/command/command-context.svelte.d.ts +0 -5
- package/dist/command/command-context.svelte.js +0 -13
- package/dist/command/command-input.svelte +0 -44
- package/dist/command/command-input.svelte.d.ts +0 -7
- package/dist/command/command-item.svelte +0 -66
- package/dist/command/command-item.svelte.d.ts +0 -11
- package/dist/command/command-search.svelte +0 -28
- package/dist/command/command-search.svelte.d.ts +0 -5
- package/dist/command/command.svelte +0 -19
- package/dist/command/command.svelte.d.ts +0 -8
- package/dist/command/commander.svelte +0 -107
- package/dist/command/commander.svelte.d.ts +0 -9
- package/dist/common/header.svelte +0 -35
- package/dist/common/header.svelte.d.ts +0 -10
- package/dist/common/item-context.svelte.d.ts +0 -12
- package/dist/common/item-context.svelte.js +0 -77
- package/dist/dialog/dialog-button.svelte +0 -25
- package/dist/dialog/dialog-button.svelte.d.ts +0 -32
- package/dist/dialog/dialoguer-context.svelte.d.ts +0 -53
- package/dist/dialog/dialoguer-context.svelte.js +0 -85
- package/dist/dialog/dialoguer.svelte +0 -65
- package/dist/dialog/dialoguer.svelte.d.ts +0 -7
- package/dist/markdown/markdown-blockquote.svelte +0 -14
- package/dist/markdown/markdown-blockquote.svelte.d.ts +0 -7
- package/dist/markdown/markdown-br.svelte +0 -12
- package/dist/markdown/markdown-br.svelte.d.ts +0 -7
- package/dist/markdown/markdown-code.svelte +0 -14
- package/dist/markdown/markdown-code.svelte.d.ts +0 -7
- package/dist/markdown/markdown-codespan.svelte +0 -15
- package/dist/markdown/markdown-codespan.svelte.d.ts +0 -7
- package/dist/markdown/markdown-context.svelte.d.ts +0 -26
- package/dist/markdown/markdown-context.svelte.js +0 -31
- package/dist/markdown/markdown-def.svelte +0 -15
- package/dist/markdown/markdown-def.svelte.d.ts +0 -7
- package/dist/markdown/markdown-del.svelte +0 -14
- package/dist/markdown/markdown-del.svelte.d.ts +0 -7
- package/dist/markdown/markdown-em.svelte +0 -14
- package/dist/markdown/markdown-em.svelte.d.ts +0 -7
- package/dist/markdown/markdown-escape.svelte +0 -8
- package/dist/markdown/markdown-escape.svelte.d.ts +0 -5
- package/dist/markdown/markdown-heading.svelte +0 -16
- package/dist/markdown/markdown-heading.svelte.d.ts +0 -7
- package/dist/markdown/markdown-hr.svelte +0 -12
- package/dist/markdown/markdown-hr.svelte.d.ts +0 -7
- package/dist/markdown/markdown-html.svelte +0 -9
- package/dist/markdown/markdown-html.svelte.d.ts +0 -5
- package/dist/markdown/markdown-image.svelte +0 -12
- package/dist/markdown/markdown-image.svelte.d.ts +0 -7
- package/dist/markdown/markdown-link.svelte +0 -17
- package/dist/markdown/markdown-link.svelte.d.ts +0 -7
- package/dist/markdown/markdown-list-item.svelte +0 -14
- package/dist/markdown/markdown-list-item.svelte.d.ts +0 -7
- package/dist/markdown/markdown-list.svelte +0 -19
- package/dist/markdown/markdown-list.svelte.d.ts +0 -7
- package/dist/markdown/markdown-paragraph.svelte +0 -16
- package/dist/markdown/markdown-paragraph.svelte.d.ts +0 -7
- package/dist/markdown/markdown-space.svelte +0 -8
- package/dist/markdown/markdown-space.svelte.d.ts +0 -5
- package/dist/markdown/markdown-strong.svelte +0 -15
- package/dist/markdown/markdown-strong.svelte.d.ts +0 -7
- package/dist/markdown/markdown-table-cell.svelte +0 -16
- package/dist/markdown/markdown-table-cell.svelte.d.ts +0 -7
- package/dist/markdown/markdown-table.svelte +0 -36
- package/dist/markdown/markdown-table.svelte.d.ts +0 -7
- package/dist/markdown/markdown-text.svelte +0 -8
- package/dist/markdown/markdown-text.svelte.d.ts +0 -5
- package/dist/markdown/markdown-token.svelte +0 -25
- package/dist/markdown/markdown-token.svelte.d.ts +0 -7
- package/dist/menu/menu-content.svelte +0 -47
- package/dist/menu/menu-content.svelte.d.ts +0 -10
- package/dist/menu/menu-context.svelte.d.ts +0 -18
- package/dist/menu/menu-context.svelte.js +0 -118
- package/dist/menu/menu-trigger-button.svelte +0 -31
- package/dist/menu/menu-trigger-button.svelte.d.ts +0 -5
- package/dist/menu/menu-trigger.svelte +0 -42
- package/dist/menu/menu-trigger.svelte.d.ts +0 -10
- package/dist/ordered-html-elements.d.ts +0 -7
- package/dist/ordered-html-elements.js +0 -29
- package/dist/portal/index.d.ts +0 -2
- package/dist/portal/index.js +0 -2
- package/dist/portal/portal.svelte +0 -15
- package/dist/portal/portal.svelte.d.ts +0 -8
- package/dist/portal/proxy.svelte +0 -13
- package/dist/portal/proxy.svelte.d.ts +0 -7
- package/dist/shortcut/shortcut-badge.svelte +0 -41
- package/dist/shortcut/shortcut-badge.svelte.d.ts +0 -11
- package/dist/slider/slider-context.svelte.d.ts +0 -50
- package/dist/slider/slider-context.svelte.js +0 -216
- package/dist/slider/slider-handle-label-arrow.svelte +0 -18
- package/dist/slider/slider-handle-label-arrow.svelte.d.ts +0 -6
- package/dist/slider/slider-handle-label.svelte +0 -35
- package/dist/slider/slider-handle-label.svelte.d.ts +0 -6
- package/dist/slider/slider-handle.svelte +0 -54
- package/dist/slider/slider-handle.svelte.d.ts +0 -6
- package/dist/slider/slider-mark-dot.svelte +0 -25
- package/dist/slider/slider-mark-dot.svelte.d.ts +0 -6
- package/dist/slider/slider-mark-label.svelte +0 -37
- package/dist/slider/slider-mark-label.svelte.d.ts +0 -9
- package/dist/slider/slider-mark.svelte +0 -33
- package/dist/slider/slider-mark.svelte.d.ts +0 -9
- package/dist/switch/switch-thumb.svelte +0 -52
- package/dist/switch/switch-thumb.svelte.d.ts +0 -7
- package/dist/toggle/toggle-context.svelte.d.ts +0 -9
- package/dist/toggle/toggle-context.svelte.js +0 -32
|
@@ -3,62 +3,59 @@
|
|
|
3
3
|
import { mergeProps } from "../merge-props.js";
|
|
4
4
|
import { Shortcut } from "../shortcut/index.js";
|
|
5
5
|
import {
|
|
6
|
-
|
|
6
|
+
cn,
|
|
7
7
|
type ClassName,
|
|
8
|
-
type ElementRef,
|
|
9
8
|
type ToggleEventWithTarget,
|
|
10
9
|
} from "../utils.js";
|
|
11
|
-
import * as floatingUi from "@floating-ui/dom";
|
|
12
10
|
import type { Snippet } from "svelte";
|
|
11
|
+
import { prefersReducedMotion } from "svelte/motion";
|
|
13
12
|
import type { HTMLAttributes } from "svelte/elements";
|
|
14
13
|
import { scale } from "svelte/transition";
|
|
15
|
-
|
|
14
|
+
|
|
15
|
+
type Side = "top" | "right" | "bottom" | "left";
|
|
16
|
+
export type PopoverPlacement = Side | `${Side}-start` | `${Side}-end`;
|
|
16
17
|
|
|
17
18
|
export type PopoverProps = {
|
|
18
|
-
|
|
19
|
-
arrowClass?: ClassNameValue;
|
|
20
|
-
placement?: floatingUi.Placement;
|
|
21
|
-
strategy?: floatingUi.Strategy;
|
|
19
|
+
placement?: PopoverPlacement;
|
|
22
20
|
open?: boolean;
|
|
23
21
|
anchorEl?: HTMLElement;
|
|
24
22
|
onKeydownWhileOpen?: (event: KeyboardEvent) => void;
|
|
25
23
|
children: Snippet;
|
|
24
|
+
el?: HTMLDivElement;
|
|
26
25
|
} & ClassName &
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
Omit<HTMLAttributes<HTMLDivElement>, "class">;
|
|
27
|
+
|
|
28
|
+
const AREAS: Record<PopoverPlacement, string> = {
|
|
29
|
+
top: "top span-all",
|
|
30
|
+
"top-start": "top span-right",
|
|
31
|
+
"top-end": "top span-left",
|
|
32
|
+
bottom: "bottom span-all",
|
|
33
|
+
"bottom-start": "bottom span-right",
|
|
34
|
+
"bottom-end": "bottom span-left",
|
|
35
|
+
left: "left span-all",
|
|
36
|
+
"left-start": "left span-bottom",
|
|
37
|
+
"left-end": "left span-top",
|
|
38
|
+
right: "right span-all",
|
|
39
|
+
"right-start": "right span-bottom",
|
|
40
|
+
"right-end": "right span-top",
|
|
41
|
+
};
|
|
31
42
|
</script>
|
|
32
43
|
|
|
33
44
|
<script lang="ts">
|
|
34
45
|
let {
|
|
35
|
-
arrow = false,
|
|
36
46
|
placement = "top",
|
|
37
|
-
strategy = "fixed",
|
|
38
47
|
open = $bindable(false),
|
|
39
48
|
anchorEl,
|
|
40
49
|
children,
|
|
41
50
|
onKeydownWhileOpen,
|
|
42
51
|
el: popoverEl = $bindable(),
|
|
43
|
-
ref = noop,
|
|
44
|
-
arrowClass,
|
|
45
52
|
class: className,
|
|
46
53
|
...restProps
|
|
47
54
|
}: PopoverProps = $props();
|
|
48
55
|
|
|
49
|
-
let
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
if (placement === "top") {
|
|
53
|
-
return "rotateZ(0deg)";
|
|
54
|
-
} else if (placement === "right") {
|
|
55
|
-
return "rotateZ(90deg)";
|
|
56
|
-
} else if (placement === "bottom") {
|
|
57
|
-
return "rotateZ(180deg)";
|
|
58
|
-
} else if (placement === "left") {
|
|
59
|
-
return "rotateZ(270deg)";
|
|
60
|
-
}
|
|
61
|
-
}
|
|
56
|
+
let side = $derived(placement.split("-")[0] as Side);
|
|
57
|
+
let vertical = $derived(side === "top" || side === "bottom");
|
|
58
|
+
let centered = $derived(!placement.includes("-"));
|
|
62
59
|
|
|
63
60
|
function handleEscape(event: KeyboardEvent) {
|
|
64
61
|
if (popoverEl && Shortcut.ESCAPE.matches(event)) {
|
|
@@ -80,101 +77,51 @@
|
|
|
80
77
|
}
|
|
81
78
|
}
|
|
82
79
|
|
|
83
|
-
function handleClickInside(event: MouseEvent) {
|
|
84
|
-
event.stopImmediatePropagation();
|
|
85
|
-
}
|
|
86
|
-
|
|
87
80
|
function onbeforetoggle(event: ToggleEventWithTarget<HTMLDivElement>) {
|
|
88
|
-
|
|
89
|
-
open = false;
|
|
90
|
-
} else {
|
|
91
|
-
open = true;
|
|
92
|
-
}
|
|
81
|
+
open = event.newState === "open";
|
|
93
82
|
}
|
|
94
83
|
|
|
95
84
|
$effect(() => {
|
|
96
|
-
if (popoverEl)
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
events.on("keydown", onKeydownWhileOpen);
|
|
100
|
-
events.on("mousedown", handleClickOutside);
|
|
101
|
-
|
|
102
|
-
return () => {
|
|
103
|
-
events.remove("keydown", handleEscape);
|
|
104
|
-
events.remove("keydown", onKeydownWhileOpen);
|
|
105
|
-
events.remove("mousedown", handleClickOutside);
|
|
106
|
-
};
|
|
85
|
+
if (!open || !popoverEl) return;
|
|
86
|
+
if (!popoverEl.matches(":popover-open")) {
|
|
87
|
+
popoverEl.showPopover({ source: anchorEl });
|
|
107
88
|
}
|
|
89
|
+
events.on("keydown", handleEscape);
|
|
90
|
+
events.on("keydown", onKeydownWhileOpen);
|
|
91
|
+
events.on("mousedown", handleClickOutside);
|
|
92
|
+
|
|
93
|
+
return () => {
|
|
94
|
+
events.remove("keydown", handleEscape);
|
|
95
|
+
events.remove("keydown", onKeydownWhileOpen);
|
|
96
|
+
events.remove("mousedown", handleClickOutside);
|
|
97
|
+
};
|
|
108
98
|
});
|
|
109
|
-
|
|
110
|
-
$effect(() => {
|
|
111
|
-
if (anchorEl && popoverEl) {
|
|
112
|
-
return floatingUi.autoUpdate(anchorEl, popoverEl, updatePosition);
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
async function updatePosition() {
|
|
117
|
-
if (anchorEl && popoverEl && arrowEl) {
|
|
118
|
-
const computedPosition = await floatingUi.computePosition(
|
|
119
|
-
anchorEl,
|
|
120
|
-
popoverEl,
|
|
121
|
-
{
|
|
122
|
-
placement,
|
|
123
|
-
middleware: [
|
|
124
|
-
floatingUi.offset(6),
|
|
125
|
-
floatingUi.flip(),
|
|
126
|
-
floatingUi.shift({ padding: 5 }),
|
|
127
|
-
floatingUi.arrow({ element: arrowEl }),
|
|
128
|
-
],
|
|
129
|
-
strategy,
|
|
130
|
-
},
|
|
131
|
-
);
|
|
132
|
-
|
|
133
|
-
Object.assign(popoverEl.style, {
|
|
134
|
-
left: `${computedPosition.x}px`,
|
|
135
|
-
top: `${computedPosition.y}px`,
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
if (computedPosition.middlewareData.arrow) {
|
|
139
|
-
const arrow = computedPosition.middlewareData.arrow;
|
|
140
|
-
|
|
141
|
-
const side = computedPosition.placement.split("-")[0] as Side;
|
|
142
|
-
|
|
143
|
-
const staticSide = {
|
|
144
|
-
top: "bottom",
|
|
145
|
-
right: "left",
|
|
146
|
-
bottom: "top",
|
|
147
|
-
left: "right",
|
|
148
|
-
}[side];
|
|
149
|
-
|
|
150
|
-
Object.assign(arrowEl.style, {
|
|
151
|
-
left: arrow.x != null ? `${arrow.x}px` : "",
|
|
152
|
-
top: arrow.y != null ? `${arrow.y}px` : "",
|
|
153
|
-
[staticSide]: "-4px",
|
|
154
|
-
transform: getArrowRotation(side),
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
99
|
</script>
|
|
160
100
|
|
|
161
101
|
{#if open}
|
|
162
102
|
<div
|
|
163
103
|
bind:this={popoverEl}
|
|
164
|
-
use:ref
|
|
165
104
|
popover="manual"
|
|
166
|
-
class={
|
|
167
|
-
|
|
168
|
-
{
|
|
105
|
+
class={cn(className)}
|
|
106
|
+
style:position-area={anchorEl && AREAS[placement]}
|
|
107
|
+
style:position-try-fallbacks={anchorEl &&
|
|
108
|
+
(vertical
|
|
109
|
+
? "flip-block, flip-inline, flip-block flip-inline"
|
|
110
|
+
: "flip-inline, flip-block, flip-block flip-inline")}
|
|
111
|
+
style:inset={anchorEl && "auto"}
|
|
112
|
+
style:margin={anchorEl && (centered ? "6px" : vertical ? "6px 0" : "0 6px")}
|
|
113
|
+
style:justify-self={anchorEl && vertical && centered
|
|
114
|
+
? "anchor-center"
|
|
115
|
+
: undefined}
|
|
116
|
+
style:align-self={anchorEl && !vertical && centered
|
|
117
|
+
? "anchor-center"
|
|
118
|
+
: undefined}
|
|
119
|
+
transition:scale={{
|
|
120
|
+
duration: prefersReducedMotion.current ? 0 : 150,
|
|
121
|
+
start: 0.95,
|
|
122
|
+
}}
|
|
123
|
+
{...mergeProps(restProps, { onbeforetoggle })}
|
|
169
124
|
>
|
|
170
125
|
{@render children()}
|
|
171
|
-
<div
|
|
172
|
-
bind:this={arrowEl}
|
|
173
|
-
class={twMerge(
|
|
174
|
-
arrowClass,
|
|
175
|
-
"absolute size-2 rotate-45",
|
|
176
|
-
arrow ? "block" : "hidden",
|
|
177
|
-
)}
|
|
178
|
-
></div>
|
|
179
126
|
</div>
|
|
180
127
|
{/if}
|
|
@@ -1,18 +1,16 @@
|
|
|
1
|
-
import { type ClassName
|
|
2
|
-
import * as floatingUi from "@floating-ui/dom";
|
|
1
|
+
import { type ClassName } from "../utils.js";
|
|
3
2
|
import type { Snippet } from "svelte";
|
|
4
3
|
import type { HTMLAttributes } from "svelte/elements";
|
|
5
|
-
|
|
4
|
+
type Side = "top" | "right" | "bottom" | "left";
|
|
5
|
+
export type PopoverPlacement = Side | `${Side}-start` | `${Side}-end`;
|
|
6
6
|
export type PopoverProps = {
|
|
7
|
-
|
|
8
|
-
arrowClass?: ClassNameValue;
|
|
9
|
-
placement?: floatingUi.Placement;
|
|
10
|
-
strategy?: floatingUi.Strategy;
|
|
7
|
+
placement?: PopoverPlacement;
|
|
11
8
|
open?: boolean;
|
|
12
9
|
anchorEl?: HTMLElement;
|
|
13
10
|
onKeydownWhileOpen?: (event: KeyboardEvent) => void;
|
|
14
11
|
children: Snippet;
|
|
15
|
-
|
|
12
|
+
el?: HTMLDivElement;
|
|
13
|
+
} & ClassName & Omit<HTMLAttributes<HTMLDivElement>, "class">;
|
|
16
14
|
declare const Popover: import("svelte").Component<PopoverProps, {}, "el" | "open">;
|
|
17
15
|
type Popover = ReturnType<typeof Popover>;
|
|
18
16
|
export default Popover;
|
|
@@ -1,50 +1,83 @@
|
|
|
1
1
|
<script lang="ts" module>
|
|
2
|
+
import {
|
|
3
|
+
baseClasses,
|
|
4
|
+
type ColorProp,
|
|
5
|
+
type Size,
|
|
6
|
+
type SizeProp,
|
|
7
|
+
} from "../base.js";
|
|
8
|
+
import { cn, type ClassName } from "../utils.js";
|
|
2
9
|
import type { Snippet } from "svelte";
|
|
10
|
+
import type { SVGAttributes } from "svelte/elements";
|
|
11
|
+
|
|
3
12
|
export type CircularProgressProps = {
|
|
4
|
-
children?: Snippet;
|
|
5
13
|
progress?: number;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
14
|
+
children?: Snippet;
|
|
15
|
+
el?: SVGSVGElement;
|
|
16
|
+
} & ColorProp &
|
|
17
|
+
SizeProp &
|
|
18
|
+
ClassName &
|
|
19
|
+
Omit<SVGAttributes<SVGSVGElement>, "children" | "class" | "color">;
|
|
20
|
+
|
|
21
|
+
const SIZES: Record<Size, string> = {
|
|
22
|
+
xs: "size-4",
|
|
23
|
+
sm: "size-6",
|
|
24
|
+
md: "size-8",
|
|
25
|
+
lg: "size-10",
|
|
26
|
+
xl: "size-12",
|
|
11
27
|
};
|
|
28
|
+
const CIRCUMFERENCE = 2 * Math.PI * 10;
|
|
12
29
|
</script>
|
|
13
30
|
|
|
14
31
|
<script lang="ts">
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const {
|
|
18
|
-
children,
|
|
32
|
+
let {
|
|
19
33
|
progress,
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
34
|
+
children,
|
|
35
|
+
el = $bindable(),
|
|
36
|
+
color = "primary",
|
|
37
|
+
size = "sm",
|
|
24
38
|
class: className,
|
|
39
|
+
"aria-label": ariaLabel = "Loading",
|
|
40
|
+
...restProps
|
|
25
41
|
}: CircularProgressProps = $props();
|
|
42
|
+
|
|
43
|
+
let fraction = $derived(
|
|
44
|
+
progress === undefined ? undefined : Math.min(Math.max(progress, 0), 1),
|
|
45
|
+
);
|
|
26
46
|
</script>
|
|
27
47
|
|
|
28
48
|
<svg
|
|
49
|
+
bind:this={el}
|
|
29
50
|
xmlns="http://www.w3.org/2000/svg"
|
|
30
|
-
width={size}
|
|
31
|
-
height={size}
|
|
32
51
|
viewBox="0 0 24 24"
|
|
33
52
|
fill="transparent"
|
|
34
|
-
|
|
35
|
-
|
|
53
|
+
role="progressbar"
|
|
54
|
+
aria-label={ariaLabel}
|
|
55
|
+
aria-valuemin={0}
|
|
56
|
+
aria-valuemax={100}
|
|
57
|
+
aria-valuenow={fraction === undefined
|
|
58
|
+
? undefined
|
|
59
|
+
: Math.round(fraction * 100)}
|
|
60
|
+
class={cn("shrink-0", SIZES[size], baseClasses({ color }), className)}
|
|
61
|
+
class:spin={fraction === undefined}
|
|
62
|
+
{...restProps}
|
|
36
63
|
>
|
|
37
|
-
<circle cx="50%" cy="50%" r="10px" stroke={trackColor} stroke-width="2px" />
|
|
38
64
|
<circle
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
stroke=
|
|
44
|
-
|
|
65
|
+
cx="12"
|
|
66
|
+
cy="12"
|
|
67
|
+
r="10"
|
|
68
|
+
stroke="color-mix(in srgb, currentColor 10%, transparent)"
|
|
69
|
+
stroke-width="2"
|
|
70
|
+
/>
|
|
71
|
+
<circle
|
|
72
|
+
class={[fraction === undefined && "dash"]}
|
|
73
|
+
cx="12"
|
|
74
|
+
cy="12"
|
|
75
|
+
r="10"
|
|
76
|
+
stroke="currentColor"
|
|
77
|
+
stroke-width="2"
|
|
45
78
|
stroke-linecap="round"
|
|
46
|
-
stroke-dasharray={
|
|
47
|
-
stroke-dashoffset={(1 - (
|
|
79
|
+
stroke-dasharray={CIRCUMFERENCE}
|
|
80
|
+
stroke-dashoffset={(1 - (fraction ?? 1)) * CIRCUMFERENCE}
|
|
48
81
|
transform-origin="center"
|
|
49
82
|
transform="rotate(-90)"
|
|
50
83
|
/>
|
|
@@ -54,18 +87,18 @@
|
|
|
54
87
|
font-size="7"
|
|
55
88
|
text-anchor="middle"
|
|
56
89
|
dominant-baseline="central"
|
|
57
|
-
fill=
|
|
90
|
+
fill="currentColor"
|
|
58
91
|
>
|
|
59
92
|
{@render children?.()}
|
|
60
93
|
</text>
|
|
61
94
|
</svg>
|
|
62
95
|
|
|
63
96
|
<style>@layer components {
|
|
64
|
-
.
|
|
97
|
+
.spin {
|
|
65
98
|
animation: rotate 2s linear infinite;
|
|
66
99
|
}
|
|
67
100
|
|
|
68
|
-
.
|
|
101
|
+
.dash {
|
|
69
102
|
animation: dash 1.5s ease-in-out infinite;
|
|
70
103
|
}
|
|
71
104
|
|
|
@@ -74,6 +107,7 @@
|
|
|
74
107
|
transform: rotate(360deg);
|
|
75
108
|
}
|
|
76
109
|
}
|
|
110
|
+
|
|
77
111
|
@keyframes dash {
|
|
78
112
|
0% {
|
|
79
113
|
stroke-dasharray: 1, 200;
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
+
import { type ColorProp, type SizeProp } from "../base.js";
|
|
2
|
+
import { type ClassName } from "../utils.js";
|
|
1
3
|
import type { Snippet } from "svelte";
|
|
4
|
+
import type { SVGAttributes } from "svelte/elements";
|
|
2
5
|
export type CircularProgressProps = {
|
|
3
|
-
children?: Snippet;
|
|
4
6
|
progress?: number;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class?: string;
|
|
10
|
-
};
|
|
11
|
-
declare const CircularProgress: import("svelte").Component<CircularProgressProps, {}, "">;
|
|
7
|
+
children?: Snippet;
|
|
8
|
+
el?: SVGSVGElement;
|
|
9
|
+
} & ColorProp & SizeProp & ClassName & Omit<SVGAttributes<SVGSVGElement>, "children" | "class" | "color">;
|
|
10
|
+
declare const CircularProgress: import("svelte").Component<CircularProgressProps, {}, "el">;
|
|
12
11
|
type CircularProgress = ReturnType<typeof CircularProgress>;
|
|
13
12
|
export default CircularProgress;
|
package/dist/shortcut/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
1
|
+
export { Shortcut, type ShortcutOptions } from "./shortcut.js";
|
|
2
|
+
export { default as ShortcutHint, type ShortcutHintProps, } from "./shortcut-hint.svelte";
|
package/dist/shortcut/index.js
CHANGED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<script module lang="ts">
|
|
2
|
+
import { cn, type ClassName, type ElementRef } from "../utils.js";
|
|
3
|
+
import type { HTMLAttributes } from "svelte/elements";
|
|
4
|
+
import type { Shortcut } from "./shortcut.js";
|
|
5
|
+
|
|
6
|
+
export type ShortcutHintProps = {
|
|
7
|
+
shortcut: Shortcut;
|
|
8
|
+
} & ElementRef &
|
|
9
|
+
ClassName &
|
|
10
|
+
HTMLAttributes<HTMLElement>;
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<script lang="ts">
|
|
14
|
+
let {
|
|
15
|
+
shortcut,
|
|
16
|
+
el = $bindable(),
|
|
17
|
+
class: className,
|
|
18
|
+
...restProps
|
|
19
|
+
}: ShortcutHintProps = $props();
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<kbd
|
|
23
|
+
bind:this={el}
|
|
24
|
+
class={cn("inline-flex shrink-0 gap-1 font-sans text-xs", className)}
|
|
25
|
+
{...restProps}
|
|
26
|
+
>
|
|
27
|
+
<span class="sr-only">{shortcut}</span>
|
|
28
|
+
{#each shortcut.keys() as key, index (index)}
|
|
29
|
+
<kbd
|
|
30
|
+
aria-hidden="true"
|
|
31
|
+
class="inline-flex h-[1.75em] min-w-[1.75em] items-center justify-center rounded border border-b-2 border-m3-outline-variant bg-m3-surface-container-low px-[0.4em] text-m3-on-surface-variant"
|
|
32
|
+
>
|
|
33
|
+
{key}
|
|
34
|
+
</kbd>
|
|
35
|
+
{/each}
|
|
36
|
+
</kbd>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type ClassName, type ElementRef } from "../utils.js";
|
|
2
|
+
import type { HTMLAttributes } from "svelte/elements";
|
|
3
|
+
import type { Shortcut } from "./shortcut.js";
|
|
4
|
+
export type ShortcutHintProps = {
|
|
5
|
+
shortcut: Shortcut;
|
|
6
|
+
} & ElementRef & ClassName & HTMLAttributes<HTMLElement>;
|
|
7
|
+
declare const ShortcutHint: import("svelte").Component<ShortcutHintProps, {}, "el">;
|
|
8
|
+
type ShortcutHint = ReturnType<typeof ShortcutHint>;
|
|
9
|
+
export default ShortcutHint;
|
|
@@ -1,20 +1,25 @@
|
|
|
1
|
-
export
|
|
1
|
+
export type ShortcutOptions = {
|
|
2
2
|
key: string;
|
|
3
|
-
|
|
4
|
-
ctrl
|
|
5
|
-
|
|
6
|
-
shift
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
3
|
+
mod?: boolean;
|
|
4
|
+
ctrl?: boolean;
|
|
5
|
+
alt?: boolean;
|
|
6
|
+
shift?: boolean;
|
|
7
|
+
meta?: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare function isApple(): boolean;
|
|
10
|
+
export declare class Shortcut {
|
|
11
|
+
#private;
|
|
12
|
+
readonly key: string;
|
|
13
|
+
readonly mod: boolean;
|
|
14
|
+
readonly ctrl: boolean;
|
|
15
|
+
readonly alt: boolean;
|
|
16
|
+
readonly shift: boolean;
|
|
17
|
+
readonly meta: boolean;
|
|
18
|
+
constructor({ key, mod, ctrl, alt, shift, meta }: ShortcutOptions);
|
|
19
|
+
equals(other: Shortcut): boolean;
|
|
14
20
|
matches(event: KeyboardEvent): boolean;
|
|
15
|
-
|
|
21
|
+
keys(): string[];
|
|
16
22
|
toString(): string;
|
|
17
|
-
[Symbol.iterator](): Iterator<string>;
|
|
18
23
|
static isChar(event: KeyboardEvent): boolean;
|
|
19
24
|
static fromEvent(event: KeyboardEvent): Shortcut;
|
|
20
25
|
static ARROW_UP: Shortcut;
|