@dryui/ui 0.5.1 → 1.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/dist/alert/{alert-root.svelte → alert.svelte} +78 -20
- package/dist/alert/alert.svelte.d.ts +15 -0
- package/dist/alert/index.d.ts +15 -14
- package/dist/alert/index.js +3 -12
- package/dist/breadcrumb/breadcrumb-link.svelte +1 -1
- package/dist/button/button.svelte +1 -1
- package/dist/card/card-root.svelte +2 -2
- package/dist/chromatic-shift/chromatic-shift.svelte +2 -2
- package/dist/code-block/code-block-button.svelte +1 -1
- package/dist/color-picker/color-picker-area.svelte +2 -2
- package/dist/color-picker/color-picker-channel-input.svelte +2 -2
- package/dist/color-picker/color-picker-input-alpha-slider.svelte +2 -2
- package/dist/color-picker/color-picker-input-hue-slider.svelte +2 -2
- package/dist/color-picker/color-picker-input.svelte +9 -9
- package/dist/color-picker/color-picker-swatch.svelte +2 -2
- package/dist/combobox/combobox-input.svelte +9 -9
- package/dist/command-palette/command-palette-item.svelte +1 -1
- package/dist/data-grid/data-grid-button-input-column.svelte +1 -1
- package/dist/diagram/diagram.svelte +222 -32
- package/dist/diagram/diagram.svelte.d.ts +1 -0
- package/dist/diagram/edge-routing.d.ts +63 -1
- package/dist/diagram/edge-routing.js +316 -26
- package/dist/diagram/layout.js +633 -62
- package/dist/diagram/types.d.ts +58 -0
- package/dist/drag-and-drop/drag-and-drop-handle.svelte +1 -1
- package/dist/drag-and-drop/drag-and-drop-item.svelte +1 -1
- package/dist/file-select/file-select-root.svelte +2 -2
- package/dist/file-upload/file-upload-dropzone.svelte +2 -2
- package/dist/gauge/gauge.svelte +1 -1
- package/dist/image-comparison/image-comparison.svelte +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +1 -1
- package/dist/input/input.svelte +10 -11
- package/dist/label/label.svelte +1 -1
- package/dist/link/link.svelte +1 -1
- package/dist/list/list-item.svelte +2 -2
- package/dist/multi-select-combobox/multi-select-combobox-selection-item.svelte +9 -3
- package/dist/multi-select-combobox/multi-select-combobox-selection-remove-button.svelte +2 -0
- package/dist/navigation-menu/navigation-menu-link.svelte +1 -1
- package/dist/notification-center/notification-center-item.svelte +1 -1
- package/dist/number-input/number-input-button.svelte +3 -3
- package/dist/option-picker/context.svelte.d.ts +9 -0
- package/dist/option-picker/context.svelte.js +2 -0
- package/dist/option-picker/option-picker-item.svelte +31 -4
- package/dist/option-picker/option-picker-preview.svelte +2 -2
- package/dist/option-picker/option-picker-root.svelte +2 -2
- package/dist/phone-input/phone-input-select.svelte +2 -2
- package/dist/pin-input/pin-input-cell.svelte +1 -1
- package/dist/pin-input/pin-input-root.svelte +1 -1
- package/dist/progress/progress.svelte +1 -1
- package/dist/scroll-area/scroll-area.svelte +1 -1
- package/dist/select/select-trigger-button.svelte +33 -25
- package/dist/shimmer/index.d.ts +8 -0
- package/dist/shimmer/index.js +1 -0
- package/dist/shimmer/shimmer.svelte +87 -0
- package/dist/shimmer/shimmer.svelte.d.ts +10 -0
- package/dist/sidebar/sidebar-item.svelte +1 -1
- package/dist/slider/slider-input.svelte +2 -2
- package/dist/splitter/splitter-handle.svelte +1 -1
- package/dist/table-of-contents/table-of-contents-item.svelte +1 -1
- package/dist/table-of-contents/table-of-contents-list.svelte +1 -1
- package/dist/tags-input/tags-input-root.svelte +1 -1
- package/dist/tags-input/tags-input-tag-delete-button.svelte +2 -0
- package/dist/tags-input/tags-input-tag.svelte +9 -3
- package/dist/textarea/textarea.svelte +11 -11
- package/dist/themes/default.css +31 -0
- package/dist/toast/toast-root.svelte +1 -1
- package/dist/tour/tour-root.css +3 -3
- package/dist/tree/tree-item-children.svelte +1 -1
- package/dist/tree/tree-item-label.svelte +1 -1
- package/dist/video-embed/video-embed-button.svelte +1 -1
- package/package.json +11 -750
- package/skills/dryui/SKILL.md +26 -21
- package/skills/dryui/rules/compound-components.md +3 -3
- package/skills/dryui/rules/theming.md +1 -1
- package/dist/alert/alert-button-close.svelte +0 -29
- package/dist/alert/alert-button-close.svelte.d.ts +0 -8
- package/dist/alert/alert-description.svelte +0 -28
- package/dist/alert/alert-description.svelte.d.ts +0 -8
- package/dist/alert/alert-icon.svelte +0 -26
- package/dist/alert/alert-icon.svelte.d.ts +0 -8
- package/dist/alert/alert-root.svelte.d.ts +0 -12
- package/dist/alert/alert-title.svelte +0 -29
- package/dist/alert/alert-title.svelte.d.ts +0 -8
- package/dist/alert/context.svelte.d.ts +0 -9
- package/dist/alert/context.svelte.js +0 -10
- package/dist/option-swatch-group/context.svelte.d.ts +0 -9
- package/dist/option-swatch-group/context.svelte.js +0 -2
- package/dist/option-swatch-group/index.d.ts +0 -29
- package/dist/option-swatch-group/index.js +0 -12
- package/dist/option-swatch-group/option-swatch-group-item-button.svelte +0 -214
- package/dist/option-swatch-group/option-swatch-group-item-button.svelte.d.ts +0 -12
- package/dist/option-swatch-group/option-swatch-group-label.svelte +0 -24
- package/dist/option-swatch-group/option-swatch-group-label.svelte.d.ts +0 -8
- package/dist/option-swatch-group/option-swatch-group-meta.svelte +0 -24
- package/dist/option-swatch-group/option-swatch-group-meta.svelte.d.ts +0 -8
- package/dist/option-swatch-group/option-swatch-group-root.svelte +0 -81
- package/dist/option-swatch-group/option-swatch-group-root.svelte.d.ts +0 -12
- package/dist/option-swatch-group/option-swatch-group-swatch.svelte +0 -52
- package/dist/option-swatch-group/option-swatch-group-swatch.svelte.d.ts +0 -10
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
export interface ShimmerProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {
|
|
4
|
+
color?: string;
|
|
5
|
+
duration?: number;
|
|
6
|
+
children: Snippet;
|
|
7
|
+
}
|
|
8
|
+
export { default as Shimmer } from './shimmer.svelte';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Shimmer } from './shimmer.svelte';
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
4
|
+
|
|
5
|
+
interface Props extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {
|
|
6
|
+
color?: string;
|
|
7
|
+
duration?: number;
|
|
8
|
+
children: Snippet;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
let {
|
|
12
|
+
color = 'var(--dry-color-fill-brand)',
|
|
13
|
+
duration = 3,
|
|
14
|
+
class: className,
|
|
15
|
+
children,
|
|
16
|
+
...rest
|
|
17
|
+
}: Props = $props();
|
|
18
|
+
|
|
19
|
+
function applyStyles(node: HTMLSpanElement) {
|
|
20
|
+
$effect(() => {
|
|
21
|
+
node.style.setProperty('--dry-shimmer-color', color);
|
|
22
|
+
node.style.setProperty('--dry-shimmer-duration', `${duration}s`);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
<span data-shimmer class={className} {...rest} {@attach applyStyles}>
|
|
28
|
+
<span data-shimmer-base>
|
|
29
|
+
{@render children()}
|
|
30
|
+
</span>
|
|
31
|
+
<span data-shimmer-streak aria-hidden="true">
|
|
32
|
+
{@render children()}
|
|
33
|
+
</span>
|
|
34
|
+
</span>
|
|
35
|
+
|
|
36
|
+
<style>
|
|
37
|
+
[data-shimmer] {
|
|
38
|
+
display: grid;
|
|
39
|
+
grid-template-columns: var(--dry-shimmer-outer-columns, max-content);
|
|
40
|
+
grid-column: var(--dry-shimmer-column, auto);
|
|
41
|
+
justify-self: var(--dry-shimmer-justify-self, auto);
|
|
42
|
+
isolation: isolate;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
[data-shimmer-base],
|
|
46
|
+
[data-shimmer-streak] {
|
|
47
|
+
grid-area: 1 / 1;
|
|
48
|
+
display: grid;
|
|
49
|
+
grid-template-columns: var(--dry-shimmer-content-columns, none);
|
|
50
|
+
grid-auto-flow: column;
|
|
51
|
+
grid-auto-columns: max-content;
|
|
52
|
+
align-items: center;
|
|
53
|
+
gap: var(--dry-shimmer-gap, var(--dry-space-2));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
[data-shimmer-streak] {
|
|
57
|
+
color: var(--dry-shimmer-color, var(--dry-color-fill-brand));
|
|
58
|
+
pointer-events: none;
|
|
59
|
+
-webkit-mask-image: linear-gradient(100deg, transparent 40%, #000 50%, transparent 60%);
|
|
60
|
+
mask-image: linear-gradient(100deg, transparent 40%, #000 50%, transparent 60%);
|
|
61
|
+
-webkit-mask-size: 200% 100%;
|
|
62
|
+
mask-size: 200% 100%;
|
|
63
|
+
-webkit-mask-repeat: no-repeat;
|
|
64
|
+
mask-repeat: no-repeat;
|
|
65
|
+
will-change: mask-position;
|
|
66
|
+
animation: shimmer-sweep var(--dry-shimmer-duration, 3s) linear infinite;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
@keyframes shimmer-sweep {
|
|
70
|
+
from {
|
|
71
|
+
-webkit-mask-position: 150% 0;
|
|
72
|
+
mask-position: 150% 0;
|
|
73
|
+
}
|
|
74
|
+
to {
|
|
75
|
+
-webkit-mask-position: -50% 0;
|
|
76
|
+
mask-position: -50% 0;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
@media (prefers-reduced-motion: reduce) {
|
|
81
|
+
[data-shimmer-streak] {
|
|
82
|
+
animation: none;
|
|
83
|
+
-webkit-mask-position: 50% 0;
|
|
84
|
+
mask-position: 50% 0;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
</style>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
interface Props extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {
|
|
4
|
+
color?: string;
|
|
5
|
+
duration?: number;
|
|
6
|
+
children: Snippet;
|
|
7
|
+
}
|
|
8
|
+
declare const Shimmer: import("svelte").Component<Props, {}, "">;
|
|
9
|
+
type Shimmer = ReturnType<typeof Shimmer>;
|
|
10
|
+
export default Shimmer;
|
|
@@ -152,12 +152,12 @@
|
|
|
152
152
|
}
|
|
153
153
|
|
|
154
154
|
&:focus-visible {
|
|
155
|
-
outline:
|
|
155
|
+
outline: var(--dry-focus-ring);
|
|
156
156
|
outline-offset: 4px;
|
|
157
157
|
}
|
|
158
158
|
|
|
159
159
|
&[data-disabled] {
|
|
160
|
-
opacity:
|
|
160
|
+
opacity: var(--dry-state-disabled-opacity);
|
|
161
161
|
cursor: not-allowed;
|
|
162
162
|
}
|
|
163
163
|
|
|
@@ -35,13 +35,15 @@
|
|
|
35
35
|
grid-auto-columns: max-content;
|
|
36
36
|
vertical-align: middle;
|
|
37
37
|
align-items: center;
|
|
38
|
-
|
|
39
|
-
padding
|
|
38
|
+
padding-block: var(--dry-space-1);
|
|
39
|
+
padding-inline-start: var(--dry-tags-input-tag-padding-x, var(--dry-space-2));
|
|
40
|
+
padding-inline-end: 0;
|
|
40
41
|
margin-inline-end: var(--dry-tags-input-gap, var(--dry-space-1_5));
|
|
41
42
|
margin-block: calc(var(--dry-tags-input-gap, var(--dry-space-1_5)) / 2);
|
|
42
43
|
background: color-mix(in srgb, var(--dry-color-fill-brand) 15%, transparent);
|
|
43
44
|
color: var(--dry-color-fill-brand);
|
|
44
|
-
border-radius: var(--dry-radius-
|
|
45
|
+
border-radius: var(--dry-tags-input-tag-radius, var(--dry-radius-md));
|
|
46
|
+
overflow: hidden;
|
|
45
47
|
font-size: var(
|
|
46
48
|
--dry-tags-input-tag-font-size,
|
|
47
49
|
var(--dry-type-tiny-size, var(--dry-text-xs-size))
|
|
@@ -51,5 +53,9 @@
|
|
|
51
53
|
line-height: 1.5;
|
|
52
54
|
white-space: nowrap;
|
|
53
55
|
user-select: none;
|
|
56
|
+
--dry-btn-radius: 0;
|
|
57
|
+
--dry-btn-padding-x: var(--dry-tags-input-tag-padding-x, var(--dry-space-2));
|
|
58
|
+
--dry-btn-padding-y: 0;
|
|
59
|
+
--dry-btn-font-size: inherit;
|
|
54
60
|
}
|
|
55
61
|
</style>
|
|
@@ -43,19 +43,19 @@
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
textarea {
|
|
46
|
-
--dry-input-bg: var(--dry-control-bg
|
|
47
|
-
--dry-input-border: var(--dry-control-border
|
|
48
|
-
--dry-input-padding-x: var(--dry-
|
|
49
|
-
--dry-input-padding-y: var(--dry-
|
|
50
|
-
--dry-input-font-size: var(--dry-
|
|
46
|
+
--dry-input-bg: var(--dry-form-control-bg);
|
|
47
|
+
--dry-input-border: var(--dry-form-control-border);
|
|
48
|
+
--dry-input-padding-x: var(--dry-form-control-padding-inline);
|
|
49
|
+
--dry-input-padding-y: var(--dry-form-control-padding-block);
|
|
50
|
+
--dry-input-font-size: var(--dry-form-control-font-size);
|
|
51
51
|
padding: var(--dry-input-padding-y) var(--dry-input-padding-x);
|
|
52
52
|
font-size: var(--dry-input-font-size);
|
|
53
53
|
line-height: var(--dry-type-small-leading);
|
|
54
54
|
font-family: var(--dry-font-sans);
|
|
55
|
-
color: var(--dry-input-color, var(--dry-
|
|
55
|
+
color: var(--dry-input-color, var(--dry-form-control-color));
|
|
56
56
|
background: var(--dry-input-bg);
|
|
57
57
|
border: 1px solid var(--dry-input-border);
|
|
58
|
-
border-radius: var(--dry-input-radius, var(--dry-control-radius
|
|
58
|
+
border-radius: var(--dry-input-radius, var(--dry-form-control-radius));
|
|
59
59
|
transition:
|
|
60
60
|
border-color var(--dry-duration-fast) var(--dry-ease-default),
|
|
61
61
|
box-shadow var(--dry-duration-fast) var(--dry-ease-default);
|
|
@@ -65,22 +65,22 @@
|
|
|
65
65
|
min-height: 160px;
|
|
66
66
|
|
|
67
67
|
&::placeholder {
|
|
68
|
-
color: var(--dry-color-
|
|
68
|
+
color: var(--dry-form-control-color-placeholder);
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
&:hover:not([data-disabled]) {
|
|
72
|
-
border-color: var(--dry-
|
|
72
|
+
border-color: var(--dry-form-control-border-hover);
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
&:focus-visible {
|
|
76
|
-
outline:
|
|
76
|
+
outline: var(--dry-focus-ring);
|
|
77
77
|
outline-offset: -1px;
|
|
78
78
|
border-color: var(--dry-color-focus-ring);
|
|
79
79
|
box-shadow: 0 0 0 1px var(--dry-color-focus-ring);
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
&[data-disabled] {
|
|
83
|
-
opacity:
|
|
83
|
+
opacity: var(--dry-state-disabled-opacity);
|
|
84
84
|
cursor: not-allowed;
|
|
85
85
|
}
|
|
86
86
|
|
package/dist/themes/default.css
CHANGED
|
@@ -305,6 +305,37 @@ samp {
|
|
|
305
305
|
--dry-text-4xl-size: var(--dry-type-ui-display-size);
|
|
306
306
|
--dry-text-4xl-leading: var(--dry-type-ui-display-leading);
|
|
307
307
|
|
|
308
|
+
/* ─── State ───────────────────────────────────────────────────────
|
|
309
|
+
Shared shorthands for focus / disabled state. Consumers can
|
|
310
|
+
override these at :root to restyle every focusable or disabled
|
|
311
|
+
control in one place.
|
|
312
|
+
- Focus ring: `outline: var(--dry-focus-ring); outline-offset: 2px;`
|
|
313
|
+
- Disabled state: `opacity: var(--dry-state-disabled-opacity); cursor: not-allowed;`
|
|
314
|
+
*/
|
|
315
|
+
--dry-focus-ring: 2px solid var(--dry-color-focus-ring);
|
|
316
|
+
--dry-state-disabled-opacity: 0.5;
|
|
317
|
+
|
|
318
|
+
/* ─── Form control shared tokens ──────────────────────────────────
|
|
319
|
+
Consumed by input, textarea, combobox-input, and color-picker-input.
|
|
320
|
+
Per-component `--dry-<name>-*` overrides still work — they now
|
|
321
|
+
resolve through this shared family by default, so consumers can
|
|
322
|
+
restyle all form controls with one change at :root.
|
|
323
|
+
Intentionally excluded (pre-existing divergence):
|
|
324
|
+
- border-focus: some controls use --dry-color-stroke-focus,
|
|
325
|
+
others use --dry-color-focus-ring; left per-component.
|
|
326
|
+
- bg-disabled: input uses --dry-color-bg-sunken, others rely on
|
|
327
|
+
opacity; left per-component.
|
|
328
|
+
*/
|
|
329
|
+
--dry-form-control-bg: var(--dry-color-bg-raised);
|
|
330
|
+
--dry-form-control-border: var(--dry-color-stroke-strong);
|
|
331
|
+
--dry-form-control-border-hover: var(--dry-color-stroke-strong);
|
|
332
|
+
--dry-form-control-color: var(--dry-color-text-strong);
|
|
333
|
+
--dry-form-control-color-placeholder: var(--dry-color-text-weak);
|
|
334
|
+
--dry-form-control-radius: var(--dry-radius-md);
|
|
335
|
+
--dry-form-control-font-size: var(--dry-type-small-size);
|
|
336
|
+
--dry-form-control-padding-block: var(--dry-space-2);
|
|
337
|
+
--dry-form-control-padding-inline: var(--dry-space-3);
|
|
338
|
+
|
|
308
339
|
/* ─── Motion ──────────────────────────────────────────────────── */
|
|
309
340
|
--dry-duration-instant: 0ms;
|
|
310
341
|
--dry-duration-fast: 120ms;
|
|
@@ -149,7 +149,7 @@
|
|
|
149
149
|
background: var(--dry-color-stroke-weak, #e2e8f0);
|
|
150
150
|
border-radius: 0 0 var(--dry-radius-lg) var(--dry-radius-lg);
|
|
151
151
|
overflow: hidden;
|
|
152
|
-
transition: grid-template-columns
|
|
152
|
+
transition: grid-template-columns var(--dry-duration-normal) var(--dry-ease-default);
|
|
153
153
|
}
|
|
154
154
|
|
|
155
155
|
[data-part='progress']::after {
|
package/dist/tour/tour-root.css
CHANGED
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
[data-tour-root] [data-part='skipButton']:focus-visible {
|
|
118
|
-
outline:
|
|
118
|
+
outline: var(--dry-focus-ring);
|
|
119
119
|
outline-offset: 2px;
|
|
120
120
|
}
|
|
121
121
|
|
|
@@ -136,7 +136,7 @@
|
|
|
136
136
|
}
|
|
137
137
|
|
|
138
138
|
[data-tour-root] [data-part='prevButton']:focus-visible {
|
|
139
|
-
outline:
|
|
139
|
+
outline: var(--dry-focus-ring);
|
|
140
140
|
outline-offset: 2px;
|
|
141
141
|
}
|
|
142
142
|
|
|
@@ -157,7 +157,7 @@
|
|
|
157
157
|
}
|
|
158
158
|
|
|
159
159
|
[data-tour-root] [data-part='nextButton']:focus-visible {
|
|
160
|
-
outline:
|
|
160
|
+
outline: var(--dry-focus-ring);
|
|
161
161
|
outline-offset: 2px;
|
|
162
162
|
}
|
|
163
163
|
|
|
@@ -44,6 +44,6 @@
|
|
|
44
44
|
display: grid;
|
|
45
45
|
grid-template-rows: var(--_rows, 0fr);
|
|
46
46
|
padding-left: var(--dry-tree-indent, var(--dry-space-4));
|
|
47
|
-
transition: grid-template-rows var(--dry-duration-normal
|
|
47
|
+
transition: grid-template-rows var(--dry-duration-normal) var(--dry-ease-default);
|
|
48
48
|
}
|
|
49
49
|
</style>
|
|
@@ -160,7 +160,7 @@
|
|
|
160
160
|
height: var(--dry-video-embed-play-size);
|
|
161
161
|
aspect-ratio: 1;
|
|
162
162
|
filter: drop-shadow(0 2px 8px rgb(15 23 42 / 0.3));
|
|
163
|
-
transition: transform var(--dry-duration-normal
|
|
163
|
+
transition: transform var(--dry-duration-normal) var(--dry-ease-default);
|
|
164
164
|
}
|
|
165
165
|
|
|
166
166
|
.play-btn-slot:hover [data-part='play-icon'] {
|