@dryui/ui 1.5.1 → 1.7.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/accordion/accordion-item.svelte +9 -0
- package/dist/accordion/accordion-root.svelte +1 -1
- package/dist/alert/alert.svelte +1 -0
- package/dist/avatar/avatar.svelte +1 -1
- package/dist/button/button.svelte +3 -2
- package/dist/button-group/context.svelte.js +4 -7
- package/dist/calendar/calendar-root.svelte +15 -32
- package/dist/card/card-root.svelte +1 -0
- package/dist/chart/chart-y-axis.svelte +5 -0
- package/dist/checkbox/checkbox-input.svelte +30 -31
- package/dist/chip-group/context.svelte.d.ts +2 -4
- package/dist/chip-group/context.svelte.js +2 -9
- package/dist/combobox/combobox-content.svelte +1 -0
- package/dist/combobox/combobox-item.svelte +9 -0
- package/dist/command-palette/command-palette-item.svelte +9 -0
- package/dist/command-palette/command-palette-list.svelte +1 -0
- package/dist/context-menu/context-menu-content.svelte +25 -12
- package/dist/context-menu/context-menu-group.svelte +3 -2
- package/dist/context-menu/context-menu-item.svelte +8 -61
- package/dist/context-menu/context-menu-label.svelte +3 -11
- package/dist/context-menu/context-menu-root.svelte +10 -29
- package/dist/context-menu/context-menu-separator.svelte +2 -9
- package/dist/context-menu/context.svelte.d.ts +2 -12
- package/dist/data-grid/data-grid-cell.svelte +5 -0
- package/dist/date-picker/datepicker-content.svelte +11 -81
- package/dist/date-picker/datepicker-content.svelte.d.ts +1 -1
- package/dist/date-picker/datepicker-input-root.svelte +39 -47
- package/dist/date-range-picker/date-range-picker-content.svelte +11 -75
- package/dist/date-range-picker/date-range-picker-content.svelte.d.ts +1 -1
- package/dist/date-range-picker/date-range-picker-root.svelte +44 -49
- package/dist/drag-and-drop/group-context.svelte.d.ts +1 -1
- package/dist/drag-and-drop/group-context.svelte.js +4 -4
- package/dist/dropdown-menu/context.svelte.d.ts +2 -8
- package/dist/dropdown-menu/dropdown-menu-content.svelte +22 -3
- package/dist/dropdown-menu/dropdown-menu-group.svelte +3 -2
- package/dist/dropdown-menu/dropdown-menu-item.svelte +8 -61
- package/dist/dropdown-menu/dropdown-menu-label.svelte +3 -11
- package/dist/dropdown-menu/dropdown-menu-root.svelte +10 -21
- package/dist/dropdown-menu/dropdown-menu-separator.svelte +2 -9
- package/dist/flip-card/context.svelte.d.ts +5 -0
- package/dist/flip-card/context.svelte.js +2 -0
- package/dist/flip-card/flip-card-back.svelte +2 -2
- package/dist/flip-card/flip-card-root.svelte +42 -15
- package/dist/heading/heading.svelte +10 -1
- package/dist/heading/heading.svelte.d.ts +1 -0
- package/dist/heading/index.d.ts +1 -0
- package/dist/hover-card/hover-card-content.svelte +9 -21
- package/dist/hover-card/hover-card-root.svelte +2 -2
- package/dist/hover-card/hover-card-root.svelte.d.ts +4 -0
- package/dist/image/image.svelte +5 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- package/dist/internal/anchored-overlay-content.svelte.d.ts +20 -0
- package/dist/internal/anchored-overlay-content.svelte.js +28 -0
- package/dist/internal/date-family-controller.svelte.d.ts +45 -0
- package/dist/internal/date-family-controller.svelte.js +99 -0
- package/dist/internal/menu-group.svelte +15 -0
- package/dist/internal/menu-group.svelte.d.ts +9 -0
- package/dist/internal/menu-item.svelte +91 -0
- package/dist/internal/menu-item.svelte.d.ts +11 -0
- package/dist/internal/menu-label.svelte +24 -0
- package/dist/internal/menu-label.svelte.d.ts +9 -0
- package/dist/internal/menu-root-state.svelte.d.ts +24 -0
- package/dist/internal/menu-root-state.svelte.js +42 -0
- package/dist/internal/menu-separator.svelte +19 -0
- package/dist/internal/menu-separator.svelte.d.ts +7 -0
- package/dist/internal/modal-content.svelte +18 -0
- package/dist/internal/motion.js +12 -1
- package/dist/internal/nav-arrow-button.svelte +21 -5
- package/dist/internal/picker-popover-content.svelte +112 -0
- package/dist/internal/picker-popover-content.svelte.d.ts +16 -0
- package/dist/link-preview/link-preview-content.svelte +7 -10
- package/dist/list/list-item-icon.svelte +3 -3
- package/dist/list/list-item-icon.svelte.d.ts +1 -1
- package/dist/list/list-item-text.svelte +3 -3
- package/dist/list/list-item-text.svelte.d.ts +1 -1
- package/dist/list/list-item.svelte +58 -35
- package/dist/list/list-item.svelte.d.ts +8 -2
- package/dist/menubar/menubar-content.svelte +1 -0
- package/dist/menubar/menubar-item.svelte +10 -1
- package/dist/number-input/number-input-button.svelte +1 -0
- package/dist/pin-input/pin-input-cell.svelte +1 -0
- package/dist/popover/popover-content.svelte +15 -11
- package/dist/progress/progress.svelte +1 -0
- package/dist/radio-group/radio-group-item-input.svelte +17 -2
- package/dist/range-calendar/range-calendar-root.svelte +13 -19
- package/dist/reveal/reveal.svelte +1 -1
- package/dist/select/select-content.svelte +1 -0
- package/dist/select/select-item.svelte +9 -0
- package/dist/select/select-trigger-button.svelte +18 -1
- package/dist/skeleton/skeleton.svelte +2 -0
- package/dist/slider/slider-input.svelte +1 -0
- package/dist/text/index.d.ts +1 -0
- package/dist/text/text.svelte +4 -1
- package/dist/text/text.svelte.d.ts +1 -0
- package/dist/theme-toggle/index.d.ts +18 -0
- package/dist/theme-toggle/index.js +3 -0
- package/dist/theme-toggle/theme-controller.svelte.d.ts +54 -0
- package/dist/theme-toggle/theme-controller.svelte.js +121 -0
- package/dist/theme-toggle/theme-flash.d.ts +16 -0
- package/dist/theme-toggle/theme-flash.js +38 -0
- package/dist/theme-toggle/theme-toggle.svelte +199 -0
- package/dist/theme-toggle/theme-toggle.svelte.d.ts +40 -0
- package/dist/themes/dark.css +6 -0
- package/dist/themes/default.css +92 -0
- package/dist/toast/toast-provider.svelte +1 -0
- package/dist/toast/toast-root.svelte +1 -0
- package/dist/tooltip/tooltip-content.svelte +13 -10
- package/dist/typography/heading.svelte +13 -89
- package/dist/typography/heading.svelte.d.ts +3 -8
- package/dist/typography/index.d.ts +8 -7
- package/dist/typography/text.svelte +12 -84
- package/dist/typography/text.svelte.d.ts +3 -10
- package/dist/video-embed/video-embed-button.svelte +2 -1
- package/package.json +7 -2
- package/skills/dryui/SKILL.md +18 -5
- package/skills/dryui/rules/composition.md +1 -1
- package/skills/dryui/rules/theming.md +1 -2
|
@@ -1,92 +1,16 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import type {
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
children
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
let { level = 2, variant = 'default', class: className, children, ...rest }: Props = $props();
|
|
2
|
+
import type { HeadingProps } from './index.js';
|
|
3
|
+
import Heading from '../heading/heading.svelte';
|
|
4
|
+
|
|
5
|
+
let {
|
|
6
|
+
level = 2,
|
|
7
|
+
variant = 'default',
|
|
8
|
+
class: className,
|
|
9
|
+
children,
|
|
10
|
+
...rest
|
|
11
|
+
}: HeadingProps = $props();
|
|
13
12
|
</script>
|
|
14
13
|
|
|
15
|
-
{
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
</h1>
|
|
19
|
-
{:else if level === 2}
|
|
20
|
-
<h2 class={className} {...variantAttrs({ level, variant })} {...rest}>
|
|
21
|
-
{@render children()}
|
|
22
|
-
</h2>
|
|
23
|
-
{:else if level === 3}
|
|
24
|
-
<h3 class={className} {...variantAttrs({ level, variant })} {...rest}>
|
|
25
|
-
{@render children()}
|
|
26
|
-
</h3>
|
|
27
|
-
{:else if level === 4}
|
|
28
|
-
<h4 class={className} {...variantAttrs({ level, variant })} {...rest}>
|
|
29
|
-
{@render children()}
|
|
30
|
-
</h4>
|
|
31
|
-
{:else if level === 5}
|
|
32
|
-
<h5 class={className} {...variantAttrs({ level, variant })} {...rest}>
|
|
33
|
-
{@render children()}
|
|
34
|
-
</h5>
|
|
35
|
-
{:else}
|
|
36
|
-
<h6 class={className} {...variantAttrs({ level, variant })} {...rest}>
|
|
37
|
-
{@render children()}
|
|
38
|
-
</h6>
|
|
39
|
-
{/if}
|
|
40
|
-
|
|
41
|
-
<style>
|
|
42
|
-
h1,
|
|
43
|
-
h2,
|
|
44
|
-
h3,
|
|
45
|
-
h4,
|
|
46
|
-
h5,
|
|
47
|
-
h6 {
|
|
48
|
-
margin: 0;
|
|
49
|
-
color: var(--dry-typography-heading-color, var(--dry-color-text-strong));
|
|
50
|
-
font-family: var(--dry-font-sans);
|
|
51
|
-
font-weight: 700;
|
|
52
|
-
line-height: var(--dry-type-heading-2-leading, 2.5rem);
|
|
53
|
-
letter-spacing: -0.03em;
|
|
54
|
-
text-wrap: balance;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
[data-level='1'] {
|
|
58
|
-
font-size: var(--dry-type-heading-1-size, var(--dry-text-4xl-size, 2.25rem));
|
|
59
|
-
line-height: var(--dry-type-heading-1-leading, 3rem);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
[data-level='2'] {
|
|
63
|
-
font-size: var(--dry-type-heading-2-size, var(--dry-text-3xl-size, 1.875rem));
|
|
64
|
-
line-height: var(--dry-type-heading-2-leading, 2.5rem);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
[data-level='3'] {
|
|
68
|
-
font-size: var(--dry-type-heading-3-size, var(--dry-text-2xl-size, 1.5rem));
|
|
69
|
-
line-height: var(--dry-type-heading-3-leading, 2rem);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
[data-level='4'] {
|
|
73
|
-
font-size: var(--dry-type-heading-4-size, var(--dry-text-xl-size, 1.25rem));
|
|
74
|
-
line-height: var(--dry-type-heading-4-leading, 1.75rem);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
[data-level='5'] {
|
|
78
|
-
font-size: var(--dry-type-small-size, var(--dry-text-lg-size, 1.125rem));
|
|
79
|
-
line-height: var(--dry-type-small-leading, 1.5rem);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
[data-level='6'] {
|
|
83
|
-
font-size: var(--dry-type-tiny-size, var(--dry-text-xs-size));
|
|
84
|
-
line-height: var(--dry-type-tiny-leading, 1.25rem);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
[data-variant='display'] {
|
|
88
|
-
font-size: var(--dry-type-display-size, var(--dry-text-4xl-size, 2.25rem));
|
|
89
|
-
line-height: var(--dry-type-display-leading, 4rem);
|
|
90
|
-
letter-spacing: -0.04em;
|
|
91
|
-
}
|
|
92
|
-
</style>
|
|
14
|
+
<Heading {level} {variant} {className} {...rest}>
|
|
15
|
+
{@render children()}
|
|
16
|
+
</Heading>
|
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
level?: 1 | 2 | 3 | 4 | 5 | 6;
|
|
5
|
-
variant?: 'default' | 'display';
|
|
6
|
-
children: Snippet;
|
|
7
|
-
}
|
|
8
|
-
declare const Heading: import("svelte").Component<Props, {}, "">;
|
|
1
|
+
import type { HeadingProps } from './index.js';
|
|
2
|
+
import Heading from '../heading/heading.svelte';
|
|
3
|
+
declare const Heading: import("svelte").Component<HeadingProps, {}, "">;
|
|
9
4
|
type Heading = ReturnType<typeof Heading>;
|
|
10
5
|
export default Heading;
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export
|
|
3
|
-
variant?: 'default' | 'display';
|
|
4
|
-
}
|
|
1
|
+
import type { TextProps as SharedTextProps } from '../text/index.js';
|
|
2
|
+
export type { HeadingProps } from '../heading/index.js';
|
|
5
3
|
export type { CodeProps, BlockquoteProps } from '@dryui/primitives';
|
|
6
|
-
export interface TextProps extends
|
|
4
|
+
export interface TextProps extends Omit<SharedTextProps, 'color' | 'variant'> {
|
|
7
5
|
color?: 'default' | 'muted' | 'secondary';
|
|
8
|
-
variant?: 'default' | 'muted' | 'secondary';
|
|
9
|
-
size?: '
|
|
6
|
+
variant?: 'default' | 'muted' | 'secondary' | 'label';
|
|
7
|
+
size?: SharedTextProps['size'];
|
|
8
|
+
font?: SharedTextProps['font'];
|
|
9
|
+
weight?: SharedTextProps['weight'];
|
|
10
|
+
className?: SharedTextProps['className'];
|
|
10
11
|
}
|
|
11
12
|
import TypographyHeading from './heading.svelte';
|
|
12
13
|
import TypographyText from './text.svelte';
|
|
@@ -1,97 +1,25 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import type {
|
|
3
|
-
import
|
|
4
|
-
import { variantAttrs } from '@dryui/primitives';
|
|
5
|
-
|
|
6
|
-
interface Props extends HTMLAttributes<HTMLElement> {
|
|
7
|
-
as?: 'p' | 'span' | 'div';
|
|
8
|
-
color?: 'default' | 'muted' | 'secondary';
|
|
9
|
-
variant?: 'default' | 'muted' | 'secondary';
|
|
10
|
-
size?: 'sm' | 'md' | 'lg';
|
|
11
|
-
children: Snippet;
|
|
12
|
-
}
|
|
2
|
+
import type { TextProps } from './index.js';
|
|
3
|
+
import Text from '../text/text.svelte';
|
|
13
4
|
|
|
14
5
|
let {
|
|
15
6
|
as = 'p',
|
|
16
7
|
color,
|
|
17
8
|
variant,
|
|
18
9
|
size = 'md',
|
|
10
|
+
font = 'sans',
|
|
11
|
+
weight,
|
|
19
12
|
class: className,
|
|
20
13
|
children,
|
|
21
14
|
...rest
|
|
22
|
-
}:
|
|
15
|
+
}: TextProps = $props();
|
|
23
16
|
|
|
24
|
-
let tone = $derived(
|
|
17
|
+
let tone: TextProps['color'] = $derived(
|
|
18
|
+
color ?? (variant === 'muted' || variant === 'secondary' ? variant : 'default')
|
|
19
|
+
);
|
|
20
|
+
let textVariant: 'default' | 'label' = $derived(variant === 'label' ? 'label' : 'default');
|
|
25
21
|
</script>
|
|
26
22
|
|
|
27
|
-
{
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
>
|
|
31
|
-
{:else if as === 'div'}
|
|
32
|
-
<div class={className} {...variantAttrs({ as, color: tone, size })} {...rest}>
|
|
33
|
-
{@render children()}
|
|
34
|
-
</div>
|
|
35
|
-
{:else}
|
|
36
|
-
<p class={className} {...variantAttrs({ as, color: tone, size })} {...rest}>
|
|
37
|
-
{@render children()}
|
|
38
|
-
</p>
|
|
39
|
-
{/if}
|
|
40
|
-
|
|
41
|
-
<style>
|
|
42
|
-
p,
|
|
43
|
-
span,
|
|
44
|
-
div {
|
|
45
|
-
margin: 0;
|
|
46
|
-
color: var(--dry-typography-text-color, var(--dry-color-text-strong));
|
|
47
|
-
font-family: var(--dry-font-sans);
|
|
48
|
-
line-height: 1.7;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
[data-color='muted'] {
|
|
52
|
-
--dry-typography-text-color: var(--dry-color-text-weak);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
[data-color='secondary'] {
|
|
56
|
-
--dry-typography-text-color: var(--dry-color-text-weak);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
[data-size='xs'] {
|
|
60
|
-
font-size: var(--dry-type-xs-size);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
[data-size='sm'] {
|
|
64
|
-
font-size: var(--dry-type-ui-control-size, var(--dry-type-tiny-size, var(--dry-text-sm-size)));
|
|
65
|
-
line-height: var(
|
|
66
|
-
--dry-type-ui-control-leading,
|
|
67
|
-
var(--dry-type-tiny-leading, var(--dry-text-sm-leading))
|
|
68
|
-
);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
[data-size='md'] {
|
|
72
|
-
font-size: var(--dry-type-ui-body-size, var(--dry-type-small-size, var(--dry-text-base-size)));
|
|
73
|
-
line-height: var(
|
|
74
|
-
--dry-type-ui-body-leading,
|
|
75
|
-
var(--dry-type-small-leading, var(--dry-text-base-leading))
|
|
76
|
-
);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
[data-size='lg'] {
|
|
80
|
-
font-size: var(
|
|
81
|
-
--dry-type-ui-title-size,
|
|
82
|
-
var(--dry-type-heading-4-size, var(--dry-text-lg-size))
|
|
83
|
-
);
|
|
84
|
-
line-height: var(
|
|
85
|
-
--dry-type-ui-title-leading,
|
|
86
|
-
var(--dry-type-heading-4-leading, var(--dry-text-lg-leading))
|
|
87
|
-
);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
[data-as='span'] {
|
|
91
|
-
display: inline;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
[data-as='div'] {
|
|
95
|
-
display: block;
|
|
96
|
-
}
|
|
97
|
-
</style>
|
|
23
|
+
<Text {as} color={tone} {size} {font} {weight} variant={textVariant} {className} {...rest}>
|
|
24
|
+
{@render children()}
|
|
25
|
+
</Text>
|
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
as?: 'p' | 'span' | 'div';
|
|
5
|
-
color?: 'default' | 'muted' | 'secondary';
|
|
6
|
-
variant?: 'default' | 'muted' | 'secondary';
|
|
7
|
-
size?: 'sm' | 'md' | 'lg';
|
|
8
|
-
children: Snippet;
|
|
9
|
-
}
|
|
10
|
-
declare const Text: import("svelte").Component<Props, {}, "">;
|
|
1
|
+
import type { TextProps } from './index.js';
|
|
2
|
+
import Text from '../text/text.svelte';
|
|
3
|
+
declare const Text: import("svelte").Component<TextProps, {}, "">;
|
|
11
4
|
type Text = ReturnType<typeof Text>;
|
|
12
5
|
export default Text;
|
|
@@ -166,10 +166,11 @@
|
|
|
166
166
|
height: var(--dry-video-embed-play-size);
|
|
167
167
|
aspect-ratio: 1;
|
|
168
168
|
filter: drop-shadow(0 2px 8px rgb(15 23 42 / 0.3));
|
|
169
|
+
transform: translateX(1px);
|
|
169
170
|
transition: transform var(--dry-duration-normal) var(--dry-ease-default);
|
|
170
171
|
}
|
|
171
172
|
|
|
172
173
|
.play-btn-slot:hover [data-part='play-icon'] {
|
|
173
|
-
transform: scale(1.1);
|
|
174
|
+
transform: translateX(1px) scale(1.1);
|
|
174
175
|
}
|
|
175
176
|
</style>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dryui/ui",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0",
|
|
4
4
|
"description": "Zero-dependency styled Svelte 5 components with scoped styles and --dry-* CSS variable theming.",
|
|
5
5
|
"author": "Rob Balfre",
|
|
6
6
|
"license": "MIT",
|
|
@@ -680,6 +680,11 @@
|
|
|
680
680
|
"svelte": "./dist/textarea/index.js",
|
|
681
681
|
"default": "./dist/textarea/index.js"
|
|
682
682
|
},
|
|
683
|
+
"./theme-toggle": {
|
|
684
|
+
"types": "./dist/theme-toggle/index.d.ts",
|
|
685
|
+
"svelte": "./dist/theme-toggle/index.js",
|
|
686
|
+
"default": "./dist/theme-toggle/index.js"
|
|
687
|
+
},
|
|
683
688
|
"./time-input": {
|
|
684
689
|
"types": "./dist/time-input/index.d.ts",
|
|
685
690
|
"svelte": "./dist/time-input/index.js",
|
|
@@ -779,7 +784,7 @@
|
|
|
779
784
|
"postpack": "bun ../../scripts/postpack-exports.ts"
|
|
780
785
|
},
|
|
781
786
|
"dependencies": {
|
|
782
|
-
"@dryui/primitives": "^1.
|
|
787
|
+
"@dryui/primitives": "^1.7.0"
|
|
783
788
|
},
|
|
784
789
|
"peerDependencies": {
|
|
785
790
|
"svelte": "^5.55.1"
|
package/skills/dryui/SKILL.md
CHANGED
|
@@ -85,6 +85,19 @@ The test: does your CSS contain zero hex colors, zero `rgb()` values, and zero i
|
|
|
85
85
|
|
|
86
86
|
The test: grep your output for `display: flex`, `style=`, `@media` — all should return nothing.
|
|
87
87
|
|
|
88
|
+
## 4A. Escape Hatches Mean Stop.
|
|
89
|
+
|
|
90
|
+
**If lint or the compiler pushes you toward an escape hatch, the structure is usually wrong.**
|
|
91
|
+
|
|
92
|
+
- Never add `:global()`, `!important`, `all: unset`, `<svelte:element>`, or `<!-- svelte-ignore ... -->` just to make a selector or warning go away
|
|
93
|
+
- Never add `width`, `min-width`, `max-width`, `inline-size`, `min-inline-size`, or `max-inline-size` to solve layout pressure
|
|
94
|
+
- Never use raw native elements outside their canonical DryUI component directories just because composition feels inconvenient
|
|
95
|
+
- Never pass `class=` to DryUI components expecting it to style their internals; use wrapper elements, component props, `data-*` attributes, or `--dry-*` tokens instead
|
|
96
|
+
- When blocked, restructure the markup instead: add a local wrapper, split explicit `{#if}` branches, move sizing to parent grid tracks, or promote the pattern into the canonical component where the raw element belongs
|
|
97
|
+
- Treat `dryui/no-global`, `dryui/no-important`, `dryui/no-width`, `dryui/no-raw-native-element`, `dryui/no-css-ignore`, and `dryui/no-svelte-element` as design feedback, not obstacles to suppress
|
|
98
|
+
|
|
99
|
+
The test: grep your output for `:global(`, `!important`, `all: unset`, `svelte-ignore`, `svelte:element`, raw `<button`, raw `<input`, raw `<select`, raw `<dialog`, raw `<hr`, raw `<table`, and `width:` — all should return nothing unless you are editing the canonical component that owns that native element.
|
|
100
|
+
|
|
88
101
|
## 5. Every Input Gets a Field.Root
|
|
89
102
|
|
|
90
103
|
**Accessibility isn't optional.**
|
|
@@ -215,7 +228,7 @@ Use these to look up APIs, discover components, plan setup, and validate code.
|
|
|
215
228
|
|
|
216
229
|
1. `dryui info <Component>` or `dryui compose "<query>"` before writing so you confirm kind, required parts, bindables, and canonical usage. If MCP is available, `ask --scope component` and `ask --scope recipe` are the equivalent surface.
|
|
217
230
|
2. Build the route or component with raw CSS grid, `Container` for constrained width, and `@container` for responsive layout.
|
|
218
|
-
3. `
|
|
231
|
+
3. Run `check` if DryUI MCP is available after implementation to catch composition drift, layout violations, and accessibility regressions. Without MCP, rely on the `@dryui/lint` preprocessor plus the project's normal build and test commands.
|
|
219
232
|
4. Never guess component shape from memory. DryUI is intentionally strict, and the lookup cost is lower than rework.
|
|
220
233
|
|
|
221
234
|
### CLI (default entry point)
|
|
@@ -230,11 +243,11 @@ dryui info <component> # Look up component API
|
|
|
230
243
|
dryui compose "date input" # Composition guidance
|
|
231
244
|
dryui detect [path] # Check project setup
|
|
232
245
|
dryui install [path] # Print install plan
|
|
233
|
-
dryui review <file.svelte> # Validate component
|
|
234
|
-
dryui diagnose <file.css> # Validate theme CSS
|
|
235
|
-
dryui doctor [path] # Audit workspace
|
|
236
|
-
dryui lint [path] # Deterministic findings
|
|
237
246
|
dryui list # List components
|
|
247
|
+
dryui tokens --category color # Browse design tokens
|
|
248
|
+
dryui ambient # SessionStart context
|
|
249
|
+
dryui install-hook --dry-run # Preview Claude hook wiring
|
|
250
|
+
dryui feedback init # Feedback tooling setup
|
|
238
251
|
```
|
|
239
252
|
|
|
240
253
|
Without a global install, prefix any command with `bunx @dryui/cli …` or `npx -y @dryui/cli …` — same behaviour, just slower (re-fetches on each call).
|
|
@@ -457,7 +457,7 @@ DryUI is a presentation and accessibility system, not a workflow engine. For dep
|
|
|
457
457
|
- Normalize route/session state in script before rendering DryUI inputs.
|
|
458
458
|
- Reset dependent `Select.Root` values when their parent choice changes; do not rely on stale child state surviving domain changes.
|
|
459
459
|
- Use raw CSS grid to lay out planner sections, and keep orchestration logic in route-level stores or derived state.
|
|
460
|
-
- Run `dryui info <Component>` or `dryui compose "<pattern>"` before introducing a new field shape, then
|
|
460
|
+
- Run `dryui info <Component>` or `dryui compose "<pattern>"` before introducing a new field shape, then use MCP `check` if it is available after the flow is wired. Without MCP, rely on the `@dryui/lint` preprocessor plus the project's normal build and test commands.
|
|
461
461
|
|
|
462
462
|
```svelte
|
|
463
463
|
<script lang="ts">
|
|
@@ -268,10 +268,9 @@ Ensure sufficient contrast between text and background.
|
|
|
268
268
|
|
|
269
269
|
## Validating Theme CSS
|
|
270
270
|
|
|
271
|
-
|
|
271
|
+
Use `check <theme.css>` when DryUI MCP is available to catch theme issues. Without MCP, validate by rebuilding the app with `@dryui/lint` wired and checking the resulting diagnostics:
|
|
272
272
|
|
|
273
273
|
```bash
|
|
274
|
-
dryui diagnose src/styles/global.css
|
|
275
274
|
check src/styles/global.css
|
|
276
275
|
```
|
|
277
276
|
|