@dryui/ui 0.5.2 → 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.
Files changed (99) hide show
  1. package/dist/alert/{alert-root.svelte → alert.svelte} +78 -20
  2. package/dist/alert/alert.svelte.d.ts +15 -0
  3. package/dist/alert/index.d.ts +15 -14
  4. package/dist/alert/index.js +3 -12
  5. package/dist/breadcrumb/breadcrumb-link.svelte +1 -1
  6. package/dist/button/button.svelte +1 -1
  7. package/dist/card/card-root.svelte +2 -2
  8. package/dist/chromatic-shift/chromatic-shift.svelte +2 -2
  9. package/dist/code-block/code-block-button.svelte +1 -1
  10. package/dist/color-picker/color-picker-area.svelte +2 -2
  11. package/dist/color-picker/color-picker-channel-input.svelte +2 -2
  12. package/dist/color-picker/color-picker-input-alpha-slider.svelte +2 -2
  13. package/dist/color-picker/color-picker-input-hue-slider.svelte +2 -2
  14. package/dist/color-picker/color-picker-input.svelte +9 -9
  15. package/dist/color-picker/color-picker-swatch.svelte +2 -2
  16. package/dist/combobox/combobox-input.svelte +9 -9
  17. package/dist/command-palette/command-palette-item.svelte +1 -1
  18. package/dist/data-grid/data-grid-button-input-column.svelte +1 -1
  19. package/dist/diagram/diagram.svelte +222 -32
  20. package/dist/diagram/diagram.svelte.d.ts +1 -0
  21. package/dist/diagram/edge-routing.d.ts +63 -1
  22. package/dist/diagram/edge-routing.js +316 -26
  23. package/dist/diagram/layout.js +633 -62
  24. package/dist/diagram/types.d.ts +58 -0
  25. package/dist/drag-and-drop/drag-and-drop-handle.svelte +1 -1
  26. package/dist/drag-and-drop/drag-and-drop-item.svelte +1 -1
  27. package/dist/file-select/file-select-root.svelte +2 -2
  28. package/dist/file-upload/file-upload-dropzone.svelte +2 -2
  29. package/dist/gauge/gauge.svelte +1 -1
  30. package/dist/image-comparison/image-comparison.svelte +1 -1
  31. package/dist/index.d.ts +3 -3
  32. package/dist/index.js +1 -1
  33. package/dist/input/input.svelte +10 -11
  34. package/dist/label/label.svelte +1 -1
  35. package/dist/link/link.svelte +1 -1
  36. package/dist/list/list-item.svelte +2 -2
  37. package/dist/multi-select-combobox/multi-select-combobox-selection-item.svelte +9 -3
  38. package/dist/multi-select-combobox/multi-select-combobox-selection-remove-button.svelte +2 -0
  39. package/dist/navigation-menu/navigation-menu-link.svelte +1 -1
  40. package/dist/notification-center/notification-center-item.svelte +1 -1
  41. package/dist/number-input/number-input-button.svelte +3 -3
  42. package/dist/option-picker/context.svelte.d.ts +9 -0
  43. package/dist/option-picker/context.svelte.js +2 -0
  44. package/dist/option-picker/option-picker-item.svelte +31 -4
  45. package/dist/option-picker/option-picker-preview.svelte +2 -2
  46. package/dist/option-picker/option-picker-root.svelte +2 -2
  47. package/dist/phone-input/phone-input-select.svelte +2 -2
  48. package/dist/pin-input/pin-input-cell.svelte +1 -1
  49. package/dist/pin-input/pin-input-root.svelte +1 -1
  50. package/dist/progress/progress.svelte +1 -1
  51. package/dist/scroll-area/scroll-area.svelte +1 -1
  52. package/dist/shimmer/index.d.ts +8 -0
  53. package/dist/shimmer/index.js +1 -0
  54. package/dist/shimmer/shimmer.svelte +87 -0
  55. package/dist/shimmer/shimmer.svelte.d.ts +10 -0
  56. package/dist/sidebar/sidebar-item.svelte +1 -1
  57. package/dist/slider/slider-input.svelte +2 -2
  58. package/dist/splitter/splitter-handle.svelte +1 -1
  59. package/dist/table-of-contents/table-of-contents-item.svelte +1 -1
  60. package/dist/table-of-contents/table-of-contents-list.svelte +1 -1
  61. package/dist/tags-input/tags-input-root.svelte +1 -1
  62. package/dist/tags-input/tags-input-tag-delete-button.svelte +2 -0
  63. package/dist/tags-input/tags-input-tag.svelte +9 -3
  64. package/dist/textarea/textarea.svelte +11 -11
  65. package/dist/themes/default.css +31 -0
  66. package/dist/toast/toast-root.svelte +1 -1
  67. package/dist/tour/tour-root.css +3 -3
  68. package/dist/tree/tree-item-children.svelte +1 -1
  69. package/dist/tree/tree-item-label.svelte +1 -1
  70. package/dist/video-embed/video-embed-button.svelte +1 -1
  71. package/package.json +11 -750
  72. package/skills/dryui/SKILL.md +26 -21
  73. package/skills/dryui/rules/compound-components.md +3 -3
  74. package/skills/dryui/rules/theming.md +1 -1
  75. package/dist/alert/alert-button-close.svelte +0 -29
  76. package/dist/alert/alert-button-close.svelte.d.ts +0 -8
  77. package/dist/alert/alert-description.svelte +0 -28
  78. package/dist/alert/alert-description.svelte.d.ts +0 -8
  79. package/dist/alert/alert-icon.svelte +0 -26
  80. package/dist/alert/alert-icon.svelte.d.ts +0 -8
  81. package/dist/alert/alert-root.svelte.d.ts +0 -12
  82. package/dist/alert/alert-title.svelte +0 -29
  83. package/dist/alert/alert-title.svelte.d.ts +0 -8
  84. package/dist/alert/context.svelte.d.ts +0 -9
  85. package/dist/alert/context.svelte.js +0 -10
  86. package/dist/option-swatch-group/context.svelte.d.ts +0 -9
  87. package/dist/option-swatch-group/context.svelte.js +0 -2
  88. package/dist/option-swatch-group/index.d.ts +0 -29
  89. package/dist/option-swatch-group/index.js +0 -12
  90. package/dist/option-swatch-group/option-swatch-group-item-button.svelte +0 -214
  91. package/dist/option-swatch-group/option-swatch-group-item-button.svelte.d.ts +0 -12
  92. package/dist/option-swatch-group/option-swatch-group-label.svelte +0 -24
  93. package/dist/option-swatch-group/option-swatch-group-label.svelte.d.ts +0 -8
  94. package/dist/option-swatch-group/option-swatch-group-meta.svelte +0 -24
  95. package/dist/option-swatch-group/option-swatch-group-meta.svelte.d.ts +0 -8
  96. package/dist/option-swatch-group/option-swatch-group-root.svelte +0 -81
  97. package/dist/option-swatch-group/option-swatch-group-root.svelte.d.ts +0 -12
  98. package/dist/option-swatch-group/option-swatch-group-swatch.svelte +0 -52
  99. package/dist/option-swatch-group/option-swatch-group-swatch.svelte.d.ts +0 -10
@@ -1,41 +1,41 @@
1
1
  <script lang="ts">
2
2
  import type { Snippet } from 'svelte';
3
3
  import type { HTMLAttributes } from 'svelte/elements';
4
- import { setAlertCtx, type AlertVariant } from './context.svelte.js';
4
+ import CloseButtonBase from '../internal/close-button-base.svelte';
5
+
6
+ export type AlertVariant = 'info' | 'success' | 'warning' | 'error';
5
7
 
6
8
  interface Props extends HTMLAttributes<HTMLDivElement> {
7
9
  variant?: AlertVariant;
8
10
  dismissible?: boolean;
9
11
  onDismiss?: () => void;
10
- children: Snippet;
12
+ icon?: Snippet;
13
+ title?: Snippet;
14
+ description?: Snippet;
15
+ children?: Snippet;
11
16
  }
12
17
 
13
18
  let {
14
19
  variant = 'info',
15
20
  dismissible = false,
16
21
  onDismiss,
17
- class: className,
22
+ icon,
23
+ title,
24
+ description,
18
25
  children,
26
+ class: className,
19
27
  ...rest
20
28
  }: Props = $props();
21
29
 
22
- let isDismissed = $state(false);
23
-
24
- setAlertCtx({
25
- get variant() {
26
- return variant;
27
- },
28
- get isDismissed() {
29
- return isDismissed;
30
- },
31
- dismiss() {
32
- isDismissed = true;
33
- onDismiss?.();
34
- }
35
- });
30
+ let dismissed = $state(false);
31
+
32
+ function handleDismiss() {
33
+ dismissed = true;
34
+ onDismiss?.();
35
+ }
36
36
  </script>
37
37
 
38
- {#if !isDismissed}
38
+ {#if !dismissed}
39
39
  <div
40
40
  role="alert"
41
41
  data-alert
@@ -44,7 +44,29 @@
44
44
  class={className}
45
45
  {...rest}
46
46
  >
47
- {@render children()}
47
+ {#if icon}
48
+ <span data-alert-icon aria-hidden="true">
49
+ {@render icon()}
50
+ </span>
51
+ {/if}
52
+
53
+ <div data-alert-body>
54
+ {#if title}
55
+ <h5 data-alert-title>{@render title()}</h5>
56
+ {/if}
57
+ {#if description}
58
+ <p data-alert-description>{@render description()}</p>
59
+ {/if}
60
+ {#if children}
61
+ {@render children()}
62
+ {/if}
63
+ </div>
64
+
65
+ {#if dismissible}
66
+ <span data-alert-close>
67
+ <CloseButtonBase aria-label="Dismiss alert" onclick={handleDismiss} />
68
+ </span>
69
+ {/if}
48
70
  </div>
49
71
  {/if}
50
72
 
@@ -66,7 +88,6 @@
66
88
  grid-template-columns: auto minmax(0, 1fr) auto;
67
89
  align-items: start;
68
90
  column-gap: 0;
69
- row-gap: var(--dry-space-1);
70
91
  padding: var(--dry-alert-padding, var(--dry-space-6));
71
92
  background: var(--dry-alert-bg);
72
93
  border: 1px solid var(--dry-alert-border);
@@ -78,6 +99,43 @@
78
99
  position: relative;
79
100
  }
80
101
 
102
+ [data-alert-icon] {
103
+ grid-column: 1;
104
+ color: var(--dry-alert-icon-color);
105
+ display: grid;
106
+ align-items: center;
107
+ margin-top: var(--dry-space-0_5);
108
+ padding-inline-end: var(--dry-alert-gap, var(--dry-space-3));
109
+ }
110
+
111
+ [data-alert-body] {
112
+ grid-column: 2;
113
+ display: grid;
114
+ gap: var(--dry-space-1);
115
+ }
116
+
117
+ [data-alert-close] {
118
+ grid-column: 3;
119
+ display: inline-grid;
120
+ align-self: start;
121
+ margin-inline-start: var(--dry-alert-gap, var(--dry-space-3));
122
+ }
123
+
124
+ [data-alert-title] {
125
+ font-size: var(--dry-type-heading-4-size);
126
+ font-weight: 600;
127
+ line-height: var(--dry-type-small-leading);
128
+ color: var(--dry-color-text-strong);
129
+ margin: 0;
130
+ }
131
+
132
+ [data-alert-description] {
133
+ font-size: var(--dry-type-small-size);
134
+ line-height: var(--dry-type-small-leading);
135
+ color: var(--dry-color-text-weak);
136
+ margin: 0;
137
+ }
138
+
81
139
  /* ── Variants ──────────────────────────────────────────────────────────────── */
82
140
 
83
141
  [data-variant='info'] {
@@ -0,0 +1,15 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ export type AlertVariant = 'info' | 'success' | 'warning' | 'error';
4
+ interface Props extends HTMLAttributes<HTMLDivElement> {
5
+ variant?: AlertVariant;
6
+ dismissible?: boolean;
7
+ onDismiss?: () => void;
8
+ icon?: Snippet;
9
+ title?: Snippet;
10
+ description?: Snippet;
11
+ children?: Snippet;
12
+ }
13
+ declare const Alert: import("svelte").Component<Props, {}, "">;
14
+ type Alert = ReturnType<typeof Alert>;
15
+ export default Alert;
@@ -1,14 +1,15 @@
1
- export type { AlertVariant } from './context.svelte.js';
2
- export type { AlertRootProps, AlertIconProps, AlertTitleProps, AlertDescriptionProps, AlertCloseProps } from '@dryui/primitives';
3
- import AlertRoot from './alert-root.svelte';
4
- import AlertIcon from './alert-icon.svelte';
5
- import AlertTitle from './alert-title.svelte';
6
- import AlertDescription from './alert-description.svelte';
7
- import AlertClose from './alert-button-close.svelte';
8
- export declare const Alert: {
9
- Root: typeof AlertRoot;
10
- Icon: typeof AlertIcon;
11
- Title: typeof AlertTitle;
12
- Description: typeof AlertDescription;
13
- Close: typeof AlertClose;
14
- };
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ import Alert from './alert.svelte';
4
+ export type AlertVariant = 'info' | 'success' | 'warning' | 'error';
5
+ export interface AlertProps extends HTMLAttributes<HTMLDivElement> {
6
+ variant?: AlertVariant;
7
+ dismissible?: boolean;
8
+ onDismiss?: () => void;
9
+ icon?: Snippet;
10
+ title?: Snippet;
11
+ description?: Snippet;
12
+ children?: Snippet;
13
+ }
14
+ export { Alert };
15
+ export default Alert;
@@ -1,12 +1,3 @@
1
- import AlertRoot from './alert-root.svelte';
2
- import AlertIcon from './alert-icon.svelte';
3
- import AlertTitle from './alert-title.svelte';
4
- import AlertDescription from './alert-description.svelte';
5
- import AlertClose from './alert-button-close.svelte';
6
- export const Alert = {
7
- Root: AlertRoot,
8
- Icon: AlertIcon,
9
- Title: AlertTitle,
10
- Description: AlertDescription,
11
- Close: AlertClose
12
- };
1
+ import Alert from './alert.svelte';
2
+ export { Alert };
3
+ export default Alert;
@@ -46,7 +46,7 @@
46
46
  }
47
47
 
48
48
  &:focus-visible {
49
- outline: 2px solid var(--dry-color-focus-ring);
49
+ outline: var(--dry-focus-ring);
50
50
  outline-offset: 2px;
51
51
  border-radius: var(--dry-radius-sm);
52
52
  }
@@ -188,7 +188,7 @@
188
188
  opacity var(--dry-duration-fast) var(--dry-ease-default);
189
189
 
190
190
  &:focus-visible {
191
- outline: 2px solid var(--dry-color-focus-ring);
191
+ outline: var(--dry-focus-ring);
192
192
  outline-offset: 2px;
193
193
  box-shadow: 0 0 0 1px var(--dry-color-stroke-focus);
194
194
  }
@@ -115,7 +115,7 @@
115
115
  }
116
116
 
117
117
  button[data-card]:focus-visible {
118
- outline: 2px solid var(--dry-color-focus-ring);
118
+ outline: var(--dry-focus-ring);
119
119
  outline-offset: 2px;
120
120
  }
121
121
 
@@ -156,7 +156,7 @@
156
156
  }
157
157
 
158
158
  [data-card][data-variant='interactive']:focus-visible {
159
- outline: 2px solid var(--dry-color-focus-ring);
159
+ outline: var(--dry-focus-ring);
160
160
  outline-offset: 2px;
161
161
  }
162
162
 
@@ -96,7 +96,7 @@
96
96
  pointer-events: none;
97
97
  transform: translate(var(--dry-chromatic-offset), 0);
98
98
  filter: saturate(2) hue-rotate(-30deg);
99
- transition: transform var(--dry-duration-fast, 120ms) var(--dry-ease-out, ease);
99
+ transition: transform var(--dry-duration-fast) var(--dry-ease-out);
100
100
  }
101
101
 
102
102
  [data-chromatic-shift][data-active]::after {
@@ -110,7 +110,7 @@
110
110
  pointer-events: none;
111
111
  transform: translate(calc(var(--dry-chromatic-offset) * -1), 0);
112
112
  filter: saturate(2) hue-rotate(30deg);
113
- transition: transform var(--dry-duration-fast, 120ms) var(--dry-ease-out, ease);
113
+ transition: transform var(--dry-duration-fast) var(--dry-ease-out);
114
114
  }
115
115
 
116
116
  [data-chromatic-shift][data-channels='rgb'][data-active] {
@@ -318,7 +318,7 @@
318
318
  text-decoration: none;
319
319
  cursor: pointer;
320
320
  border-radius: var(--dry-radius-sm);
321
- transition: background var(--dry-duration-fast, 100ms);
321
+ transition: background var(--dry-duration-fast) var(--dry-ease-default);
322
322
 
323
323
  &:hover {
324
324
  background: color-mix(in srgb, currentColor 15%, transparent);
@@ -154,12 +154,12 @@
154
154
  }
155
155
 
156
156
  [data-cp-area]:focus-visible {
157
- outline: 2px solid var(--dry-color-focus-ring);
157
+ outline: var(--dry-focus-ring);
158
158
  outline-offset: 2px;
159
159
  }
160
160
 
161
161
  [data-cp-area][data-disabled] {
162
- opacity: 0.5;
162
+ opacity: var(--dry-state-disabled-opacity);
163
163
  cursor: not-allowed;
164
164
  }
165
165
 
@@ -73,13 +73,13 @@
73
73
  }
74
74
 
75
75
  [data-cp-input]:focus-visible {
76
- outline: 2px solid var(--dry-color-focus-ring);
76
+ outline: var(--dry-focus-ring);
77
77
  outline-offset: -1px;
78
78
  border-color: var(--dry-color-focus-ring);
79
79
  }
80
80
 
81
81
  [data-cp-input][data-disabled] {
82
- opacity: 0.5;
82
+ opacity: var(--dry-state-disabled-opacity);
83
83
  cursor: not-allowed;
84
84
  }
85
85
  </style>
@@ -133,12 +133,12 @@
133
133
  }
134
134
 
135
135
  [data-cp-slider]:focus-visible {
136
- outline: 2px solid var(--dry-color-focus-ring);
136
+ outline: var(--dry-focus-ring);
137
137
  outline-offset: 2px;
138
138
  }
139
139
 
140
140
  [data-cp-slider][data-disabled] {
141
- opacity: 0.5;
141
+ opacity: var(--dry-state-disabled-opacity);
142
142
  cursor: not-allowed;
143
143
  }
144
144
  </style>
@@ -132,12 +132,12 @@
132
132
  }
133
133
 
134
134
  [data-cp-slider]:focus-visible {
135
- outline: 2px solid var(--dry-color-focus-ring);
135
+ outline: var(--dry-focus-ring);
136
136
  outline-offset: 2px;
137
137
  }
138
138
 
139
139
  [data-cp-slider][data-disabled] {
140
- opacity: 0.5;
140
+ opacity: var(--dry-state-disabled-opacity);
141
141
  cursor: not-allowed;
142
142
  }
143
143
  </style>
@@ -97,14 +97,14 @@
97
97
 
98
98
  <style>
99
99
  [data-cp-input] {
100
- padding: var(--dry-space-2) var(--dry-space-3);
101
- font-size: var(--dry-type-small-size);
100
+ padding: var(--dry-form-control-padding-block) var(--dry-form-control-padding-inline);
101
+ font-size: var(--dry-form-control-font-size);
102
102
  line-height: var(--dry-type-small-leading);
103
103
  font-family: var(--dry-font-mono);
104
- color: var(--dry-color-text-strong);
105
- background: var(--dry-color-bg-raised);
106
- border: 1px solid var(--dry-color-stroke-strong);
107
- border-radius: var(--dry-radius-md);
104
+ color: var(--dry-form-control-color);
105
+ background: var(--dry-form-control-bg);
106
+ border: 1px solid var(--dry-form-control-border);
107
+ border-radius: var(--dry-form-control-radius);
108
108
  transition:
109
109
  border-color var(--dry-duration-fast) var(--dry-ease-default),
110
110
  box-shadow var(--dry-duration-fast) var(--dry-ease-default);
@@ -113,17 +113,17 @@
113
113
  }
114
114
 
115
115
  [data-cp-input]:hover:not([data-disabled]) {
116
- border-color: var(--dry-color-stroke-strong);
116
+ border-color: var(--dry-form-control-border-hover);
117
117
  }
118
118
 
119
119
  [data-cp-input]:focus-visible {
120
- outline: 2px solid var(--dry-color-focus-ring);
120
+ outline: var(--dry-focus-ring);
121
121
  outline-offset: -1px;
122
122
  border-color: var(--dry-color-focus-ring);
123
123
  }
124
124
 
125
125
  [data-cp-input][data-disabled] {
126
- opacity: 0.5;
126
+ opacity: var(--dry-state-disabled-opacity);
127
127
  cursor: not-allowed;
128
128
  }
129
129
  </style>
@@ -104,12 +104,12 @@
104
104
  }
105
105
 
106
106
  [data-cp-swatch][data-interactive]:focus-visible {
107
- outline: 2px solid var(--dry-color-focus-ring);
107
+ outline: var(--dry-focus-ring);
108
108
  outline-offset: 2px;
109
109
  }
110
110
 
111
111
  [data-cp-swatch][data-interactive][data-disabled] {
112
- opacity: 0.5;
112
+ opacity: var(--dry-state-disabled-opacity);
113
113
  cursor: not-allowed;
114
114
  }
115
115
  </style>
@@ -136,12 +136,12 @@
136
136
 
137
137
  <style>
138
138
  [data-combobox-input] {
139
- --dry-combobox-bg: var(--dry-color-bg-raised);
140
- --dry-combobox-border: var(--dry-color-stroke-strong);
141
- --dry-combobox-color: var(--dry-color-text-strong);
142
- --dry-combobox-padding-x: var(--dry-space-3);
143
- --dry-combobox-padding-y: var(--dry-space-2);
144
- --dry-combobox-font-size: var(--dry-type-small-size);
139
+ --dry-combobox-bg: var(--dry-form-control-bg);
140
+ --dry-combobox-border: var(--dry-form-control-border);
141
+ --dry-combobox-color: var(--dry-form-control-color);
142
+ --dry-combobox-padding-x: var(--dry-form-control-padding-inline);
143
+ --dry-combobox-padding-y: var(--dry-form-control-padding-block);
144
+ --dry-combobox-font-size: var(--dry-form-control-font-size);
145
145
 
146
146
  display: grid;
147
147
  padding: var(--dry-combobox-padding-y) var(--dry-combobox-padding-x);
@@ -151,7 +151,7 @@
151
151
  color: var(--dry-combobox-color);
152
152
  background: var(--dry-combobox-bg);
153
153
  border: 1px solid var(--dry-combobox-border);
154
- border-radius: var(--dry-combobox-radius, var(--dry-radius-md));
154
+ border-radius: var(--dry-combobox-radius, var(--dry-form-control-radius));
155
155
  box-sizing: border-box;
156
156
  appearance: none;
157
157
  transition:
@@ -160,12 +160,12 @@
160
160
  }
161
161
 
162
162
  [data-combobox-input]:hover:not([data-disabled]) {
163
- border-color: var(--dry-color-stroke-strong);
163
+ border-color: var(--dry-form-control-border-hover);
164
164
  }
165
165
 
166
166
  [data-combobox-input]:focus-visible,
167
167
  [data-combobox-input]:focus {
168
- outline: 2px solid var(--dry-color-focus-ring);
168
+ outline: var(--dry-focus-ring);
169
169
  outline-offset: -1px;
170
170
  border-color: var(--dry-color-stroke-focus);
171
171
  }
@@ -82,7 +82,7 @@
82
82
  }
83
83
 
84
84
  [data-command-palette-item][data-disabled] {
85
- opacity: 0.5;
85
+ opacity: var(--dry-state-disabled-opacity);
86
86
  cursor: not-allowed;
87
87
  }
88
88
  </style>
@@ -237,7 +237,7 @@
237
237
  }
238
238
 
239
239
  [data-dg-column] input[data-filter-input]:focus {
240
- outline: 2px solid var(--dry-color-focus-ring);
240
+ outline: var(--dry-focus-ring);
241
241
  outline-offset: -1px;
242
242
  border-color: var(--dry-color-fill-brand);
243
243
  }