@adea-ai/ui 0.94.0 → 0.95.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/README.md +43 -1
- package/dist/NOTICE +10 -0
- package/dist/components/composites/action-button/action-button.d.ts.map +1 -1
- package/dist/components/composites/action-button/action-button.js +2 -0
- package/dist/components/composites/action-button/action-button.js.map +1 -1
- package/dist/components/composites/scene-controls/index.d.ts +3 -0
- package/dist/components/composites/scene-controls/index.d.ts.map +1 -0
- package/dist/components/composites/scene-controls/index.js +2 -0
- package/dist/components/composites/scene-controls/scene-controls.d.ts +41 -0
- package/dist/components/composites/scene-controls/scene-controls.d.ts.map +1 -0
- package/dist/components/composites/scene-controls/scene-controls.js +291 -0
- package/dist/components/composites/scene-controls/scene-controls.js.map +1 -0
- package/dist/components/ui/button/button.d.ts +2 -1
- package/dist/components/ui/button/button.d.ts.map +1 -1
- package/dist/components/ui/button/button.js +9 -3
- package/dist/components/ui/button/button.js.map +1 -1
- package/dist/components/ui/dialog/dialog.d.ts.map +1 -1
- package/dist/components/ui/dialog/dialog.js +5 -1
- package/dist/components/ui/dialog/dialog.js.map +1 -1
- package/dist/components/ui/modal-dialog/modal-dialog.d.ts +6 -0
- package/dist/components/ui/modal-dialog/modal-dialog.d.ts.map +1 -1
- package/dist/components/ui/modal-dialog/modal-dialog.js +4 -0
- package/dist/components/ui/modal-dialog/modal-dialog.js.map +1 -1
- package/dist/components/ui/sheet/sheet.d.ts +8 -1
- package/dist/components/ui/sheet/sheet.d.ts.map +1 -1
- package/dist/components/ui/sheet/sheet.js +43 -19
- package/dist/components/ui/sheet/sheet.js.map +1 -1
- package/dist/components/ui/toggle/toggle.d.ts +1 -1
- package/dist/components/ui/toggle/toggle.d.ts.map +1 -1
- package/dist/components/ui/toggle/toggle.js +3 -1
- package/dist/components/ui/toggle/toggle.js.map +1 -1
- package/dist/components/ui/toggle-group/toggle-group.d.ts.map +1 -1
- package/dist/components/ui/toggle-group/toggle-group.js +20 -7
- package/dist/components/ui/toggle-group/toggle-group.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/lib/tokens.d.ts.map +1 -1
- package/dist/lib/tokens.js +10 -0
- package/dist/lib/tokens.js.map +1 -1
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +2 -0
- package/dist/lib/utils.js.map +1 -1
- package/dist/lib/variants.d.ts +5 -2
- package/dist/lib/variants.d.ts.map +1 -1
- package/dist/lib/variants.js +7 -3
- package/dist/lib/variants.js.map +1 -1
- package/dist/lint/index.d.ts.map +1 -1
- package/dist/lint.js +2 -1
- package/dist/lint.js.map +1 -1
- package/dist/r/registry.json +24 -0
- package/dist/r/scene-controls.json +24 -0
- package/dist/r/src/components/composites/action-button/action-button.tsx +2 -0
- package/dist/r/src/components/composites/scene-controls/index.ts +7 -0
- package/dist/r/src/components/composites/scene-controls/scene-controls.tsx +282 -0
- package/dist/r/src/components/ui/button/button.tsx +20 -2
- package/dist/r/src/components/ui/dialog/dialog.tsx +6 -1
- package/dist/r/src/components/ui/modal-dialog/modal-dialog.tsx +20 -0
- package/dist/r/src/components/ui/sheet/sheet.tsx +37 -4
- package/dist/r/src/components/ui/toggle/toggle.tsx +2 -0
- package/dist/r/src/components/ui/toggle-group/toggle-group.tsx +18 -1
- package/dist/r/src/lib/tokens.ts +10 -0
- package/dist/r/src/lib/utils.ts +2 -0
- package/dist/r/src/lib/variants.ts +5 -2
- package/dist/r/src/styles/base.css +29 -9
- package/dist/r/src/styles/theme.css +8 -2
- package/package.json +2 -1
- package/registry.json +24 -0
- package/src/components/composites/action-button/action-button.tsx +2 -0
- package/src/components/composites/scene-controls/index.ts +7 -0
- package/src/components/composites/scene-controls/scene-controls.tsx +282 -0
- package/src/components/ui/button/button.tsx +20 -2
- package/src/components/ui/dialog/dialog.tsx +6 -1
- package/src/components/ui/modal-dialog/modal-dialog.tsx +20 -0
- package/src/components/ui/sheet/sheet.tsx +37 -4
- package/src/components/ui/toggle/toggle.tsx +2 -0
- package/src/components/ui/toggle-group/toggle-group.tsx +18 -1
- package/src/index.ts +1 -0
- package/src/lib/tokens.ts +10 -0
- package/src/lib/utils.ts +2 -0
- package/src/lib/variants.ts +5 -2
- package/src/lint/index.ts +1 -0
- package/src/styles/base.css +29 -9
- package/src/styles/theme.css +8 -2
|
@@ -34,12 +34,14 @@ export const toggleVariants = cva(
|
|
|
34
34
|
md: `${controlSize.md} [&_svg]:size-4`,
|
|
35
35
|
lg: `${controlSize.lg} [&_svg]:size-4`,
|
|
36
36
|
xl: `${controlSize.xl} [&_svg]:size-5`,
|
|
37
|
+
'2xl': `${controlSize['2xl']} [&_svg]:size-6`,
|
|
37
38
|
'icon-2xs': 'size-control-2xs p-0 [&_svg]:size-3',
|
|
38
39
|
'icon-xs': 'size-control-xs p-0 [&_svg]:size-3.5',
|
|
39
40
|
'icon-sm': 'size-control-sm p-0 [&_svg]:size-3.5',
|
|
40
41
|
'icon-md': 'size-control-md p-0 [&_svg]:size-4',
|
|
41
42
|
'icon-lg': 'size-control-lg p-0 [&_svg]:size-4',
|
|
42
43
|
'icon-xl': 'size-control-xl p-0 [&_svg]:size-5',
|
|
44
|
+
'icon-2xl': 'size-control-2xl p-0 [&_svg]:size-6',
|
|
43
45
|
},
|
|
44
46
|
},
|
|
45
47
|
defaultVariants: { variant: 'default', size: 'md' },
|
|
@@ -54,12 +54,29 @@ export function ToggleGroup(props: ToggleGroupProps) {
|
|
|
54
54
|
export type ToggleGroupItemProps = ComponentProps<typeof KobalteToggleGroup.Item> &
|
|
55
55
|
VariantProps<typeof toggleVariants>
|
|
56
56
|
|
|
57
|
+
function invokeEventHandler(handler: unknown, event: Event) {
|
|
58
|
+
if (Array.isArray(handler)) {
|
|
59
|
+
const [callback, data] = handler as [(data: unknown, event: Event) => void, unknown]
|
|
60
|
+
callback(data, event)
|
|
61
|
+
} else if (typeof handler === 'function') {
|
|
62
|
+
;(handler as (event: Event) => void)(event)
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
57
66
|
export function ToggleGroupItem(props: ToggleGroupItemProps) {
|
|
58
|
-
const [local, rest] = splitProps(props, ['class', 'variant', 'size'])
|
|
67
|
+
const [local, rest] = splitProps(props, ['class', 'variant', 'size', 'onKeyDown'])
|
|
59
68
|
|
|
60
69
|
return (
|
|
61
70
|
<KobalteToggleGroup.Item
|
|
62
71
|
class={cn(toggleVariants({ variant: local.variant, size: local.size }), local.class)}
|
|
72
|
+
onKeyDown={(event) => {
|
|
73
|
+
invokeEventHandler(local.onKeyDown, event)
|
|
74
|
+
// The group root's selection collection clears the selection and marks
|
|
75
|
+
// Escape handled, which starves an enclosing dialog or drawer of the
|
|
76
|
+
// Escape it needs to dismiss. Stopping at the focused item is the only
|
|
77
|
+
// point before that handler, so pass Escape through from here.
|
|
78
|
+
if (event.key === 'Escape') event.stopPropagation()
|
|
79
|
+
}}
|
|
63
80
|
{...rest}
|
|
64
81
|
/>
|
|
65
82
|
)
|
package/src/index.ts
CHANGED
|
@@ -104,6 +104,7 @@ export * from './components/composites/catalog-browser'
|
|
|
104
104
|
export * from './components/composites/list-row'
|
|
105
105
|
export * from './components/composites/tree'
|
|
106
106
|
export * from './components/composites/settings'
|
|
107
|
+
export * from './components/composites/scene-controls'
|
|
107
108
|
export * from './components/composites/stat'
|
|
108
109
|
export * from './components/composites/appearance-editor'
|
|
109
110
|
export * from './components/composites/update-dialog'
|
package/src/lib/tokens.ts
CHANGED
|
@@ -480,6 +480,11 @@ export const densityTokens: TokenDefinition[] = [
|
|
|
480
480
|
kind: 'dimension',
|
|
481
481
|
description: '40px — a hero control in an empty state.',
|
|
482
482
|
},
|
|
483
|
+
{
|
|
484
|
+
name: 'control-height-2xl',
|
|
485
|
+
kind: 'dimension',
|
|
486
|
+
description: '48px — a stable touch target, unchanged by compact density.',
|
|
487
|
+
},
|
|
483
488
|
{
|
|
484
489
|
name: 'control-padding-2xs',
|
|
485
490
|
kind: 'dimension',
|
|
@@ -510,6 +515,11 @@ export const densityTokens: TokenDefinition[] = [
|
|
|
510
515
|
kind: 'dimension',
|
|
511
516
|
description: 'Inline padding that pairs with the 40px control.',
|
|
512
517
|
},
|
|
518
|
+
{
|
|
519
|
+
name: 'control-padding-2xl',
|
|
520
|
+
kind: 'dimension',
|
|
521
|
+
description: 'Inline padding that pairs with the stable 48px touch target.',
|
|
522
|
+
},
|
|
513
523
|
{ name: 'row-height-sm', kind: 'dimension', description: '28px — a dense list row.' },
|
|
514
524
|
{ name: 'row-height-md', kind: 'dimension', description: '32px — the default list row.' },
|
|
515
525
|
{ name: 'row-height-lg', kind: 'dimension', description: '36px — a two-line list row.' },
|
package/src/lib/utils.ts
CHANGED
|
@@ -36,6 +36,7 @@ export const cn: CnFunction = createCn({
|
|
|
36
36
|
'control-md',
|
|
37
37
|
'control-lg',
|
|
38
38
|
'control-xl',
|
|
39
|
+
'control-2xl',
|
|
39
40
|
'row-sm',
|
|
40
41
|
'row-md',
|
|
41
42
|
'row-lg',
|
|
@@ -61,6 +62,7 @@ export const cn: CnFunction = createCn({
|
|
|
61
62
|
'control-md',
|
|
62
63
|
'control-lg',
|
|
63
64
|
'control-xl',
|
|
65
|
+
'control-2xl',
|
|
64
66
|
'rail-item',
|
|
65
67
|
],
|
|
66
68
|
},
|
package/src/lib/variants.ts
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* rather than inventing synonyms:
|
|
12
12
|
*
|
|
13
13
|
* variant what the control *is for* — primary, secondary, destructive, …
|
|
14
|
-
* size how much room it takes — 2xs, xs, sm, md, lg, xl
|
|
14
|
+
* size how much room it takes — 2xs, xs, sm, md, lg, xl, 2xl
|
|
15
15
|
* tone what it *communicates* — neutral, success, warning, …
|
|
16
16
|
*
|
|
17
17
|
* A component that needs a fourth axis is usually two components.
|
|
@@ -32,6 +32,8 @@ export const controlSize = {
|
|
|
32
32
|
md: 'h-control-md px-control-md text-sm gap-2',
|
|
33
33
|
lg: 'h-control-lg px-control-lg text-sm gap-2',
|
|
34
34
|
xl: 'h-control-xl px-control-xl text-base gap-2.5',
|
|
35
|
+
/** A stable 48px touch target; compact density intentionally leaves it alone. */
|
|
36
|
+
'2xl': 'h-control-2xl px-control-2xl text-lg gap-3',
|
|
35
37
|
} as const
|
|
36
38
|
|
|
37
39
|
/** Square counterparts for icon-only controls: the height, with equal width. */
|
|
@@ -42,9 +44,10 @@ export const controlSizeIcon = {
|
|
|
42
44
|
md: 'size-control-md p-0',
|
|
43
45
|
lg: 'size-control-lg p-0',
|
|
44
46
|
xl: 'size-control-xl p-0',
|
|
47
|
+
'2xl': 'size-control-2xl p-0',
|
|
45
48
|
} as const
|
|
46
49
|
|
|
47
|
-
export const controlSizes = ['2xs', 'xs', 'sm', 'md', 'lg', 'xl'] as const
|
|
50
|
+
export const controlSizes = ['2xs', 'xs', 'sm', 'md', 'lg', 'xl', '2xl'] as const
|
|
48
51
|
export type ControlSize = (typeof controlSizes)[number]
|
|
49
52
|
|
|
50
53
|
/**
|
package/src/lint/index.ts
CHANGED
package/src/styles/base.css
CHANGED
|
@@ -250,6 +250,18 @@
|
|
|
250
250
|
}
|
|
251
251
|
}
|
|
252
252
|
|
|
253
|
+
/**
|
|
254
|
+
* Opt into the stable 2xl control rung only when a coarse pointer is available.
|
|
255
|
+
* `any-pointer` intentionally includes hybrid devices without changing the
|
|
256
|
+
* glyph or desktop density of the selected Button size.
|
|
257
|
+
*/
|
|
258
|
+
@utility touch-target-comfortable {
|
|
259
|
+
@media (any-pointer: coarse) {
|
|
260
|
+
min-inline-size: var(--control-height-2xl);
|
|
261
|
+
min-block-size: var(--control-height-2xl);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
253
265
|
/**
|
|
254
266
|
* The drag region of a frameless desktop window.
|
|
255
267
|
*
|
|
@@ -422,9 +434,9 @@
|
|
|
422
434
|
}
|
|
423
435
|
}
|
|
424
436
|
|
|
425
|
-
/*
|
|
426
|
-
|
|
427
|
-
|
|
437
|
+
/* Glass treatments used by the top bar, rail, scene-control groups and floating
|
|
438
|
+
overlays. Consumers use the owning component; shared composites use the
|
|
439
|
+
named utility instead of restyling a primitive. */
|
|
428
440
|
@utility glass-panel {
|
|
429
441
|
background: color-mix(in oklch, var(--chrome) calc(var(--chrome-alpha) * 100%), transparent);
|
|
430
442
|
backdrop-filter: blur(18px) saturate(1.6);
|
|
@@ -438,6 +450,12 @@
|
|
|
438
450
|
-webkit-backdrop-filter: blur(12px) saturate(1.4);
|
|
439
451
|
}
|
|
440
452
|
|
|
453
|
+
@utility glass-scrim {
|
|
454
|
+
background: color-mix(in oklch, var(--scrim) 20%, transparent);
|
|
455
|
+
backdrop-filter: blur(2px);
|
|
456
|
+
-webkit-backdrop-filter: blur(2px);
|
|
457
|
+
}
|
|
458
|
+
|
|
441
459
|
/* The focus ring. Applied by components that cannot use the global outline
|
|
442
460
|
because they need the ring to follow their own radius. */
|
|
443
461
|
@utility focus-ring {
|
|
@@ -657,7 +675,8 @@
|
|
|
657
675
|
|
|
658
676
|
@media (prefers-reduced-transparency: reduce) {
|
|
659
677
|
.glass-panel,
|
|
660
|
-
.glass-surface
|
|
678
|
+
.glass-surface,
|
|
679
|
+
.glass-scrim {
|
|
661
680
|
backdrop-filter: none !important;
|
|
662
681
|
-webkit-backdrop-filter: none !important;
|
|
663
682
|
background: var(--background) !important;
|
|
@@ -670,18 +689,19 @@
|
|
|
670
689
|
}
|
|
671
690
|
|
|
672
691
|
.glass-panel,
|
|
673
|
-
.glass-surface
|
|
692
|
+
.glass-surface,
|
|
693
|
+
.glass-scrim {
|
|
674
694
|
background: var(--background) !important;
|
|
675
695
|
border: 1px solid var(--foreground) !important;
|
|
676
696
|
}
|
|
677
697
|
}
|
|
678
698
|
|
|
679
|
-
/*
|
|
680
|
-
|
|
681
|
-
surface instead, keeping borders and shadows so panels stay delimited. */
|
|
699
|
+
/* Without backdrop-filter there is no blurred context behind a glass surface.
|
|
700
|
+
Fall back to a solid surface so glass panels and scrim groups stay legible. */
|
|
682
701
|
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
|
|
683
702
|
.glass-panel,
|
|
684
|
-
.glass-surface
|
|
703
|
+
.glass-surface,
|
|
704
|
+
.glass-scrim {
|
|
685
705
|
background: var(--background) !important;
|
|
686
706
|
}
|
|
687
707
|
}
|
package/src/styles/theme.css
CHANGED
|
@@ -582,6 +582,7 @@
|
|
|
582
582
|
--control-height-md: 2rem; /* 32px — form default */
|
|
583
583
|
--control-height-lg: 2.25rem; /* 36px */
|
|
584
584
|
--control-height-xl: 2.5rem; /* 40px */
|
|
585
|
+
--control-height-2xl: 3rem; /* 48px — stable touch target */
|
|
585
586
|
|
|
586
587
|
--control-padding-2xs: 0.375rem;
|
|
587
588
|
--control-padding-xs: 0.5rem;
|
|
@@ -589,6 +590,7 @@
|
|
|
589
590
|
--control-padding-md: 0.75rem;
|
|
590
591
|
--control-padding-lg: 0.875rem;
|
|
591
592
|
--control-padding-xl: 1rem;
|
|
593
|
+
--control-padding-2xl: 1.125rem;
|
|
592
594
|
|
|
593
595
|
--row-height-sm: 1.75rem;
|
|
594
596
|
--row-height-md: 2rem;
|
|
@@ -646,14 +648,15 @@
|
|
|
646
648
|
--z-toast: 180;
|
|
647
649
|
}
|
|
648
650
|
|
|
649
|
-
/* Compact density: the
|
|
651
|
+
/* Compact density: the standard control ladder one rung tighter.
|
|
650
652
|
*
|
|
651
653
|
* It is a *shift* rather than a second set of numbers chosen by eye, so the
|
|
652
654
|
* relationship between the rungs is identical at either density and a control keeps
|
|
653
655
|
* its place in the ladder. Height moves by 4px per rung and padding by 2px, which is
|
|
654
656
|
* the step each already uses, and the row heights move by the same 4px. A `sm`
|
|
655
657
|
* control goes from 28px to 24px — the `xs` control's comfortable height. That is the
|
|
656
|
-
* intended meaning, not an oversight.
|
|
658
|
+
* intended meaning, not an oversight. The `2xl` touch target is intentionally
|
|
659
|
+
* omitted here so it stays at least 48px at either density.
|
|
657
660
|
*
|
|
658
661
|
* 16px at `2xs` is the floor. One rung below it would be 12px, under the minimum
|
|
659
662
|
* comfortable touch target, so the ladder compresses from the bottom rather than
|
|
@@ -833,6 +836,7 @@
|
|
|
833
836
|
--height-control-md: var(--control-height-md);
|
|
834
837
|
--height-control-lg: var(--control-height-lg);
|
|
835
838
|
--height-control-xl: var(--control-height-xl);
|
|
839
|
+
--height-control-2xl: var(--control-height-2xl);
|
|
836
840
|
/* Tailwind `size-*` prefers --size-* and then --spacing-*. Without this
|
|
837
841
|
bridge, square icon controls use the padding ladder below for both axes.
|
|
838
842
|
Height, square size and inline padding remain distinct semantic contracts. */
|
|
@@ -842,6 +846,7 @@
|
|
|
842
846
|
--size-control-md: var(--control-height-md);
|
|
843
847
|
--size-control-lg: var(--control-height-lg);
|
|
844
848
|
--size-control-xl: var(--control-height-xl);
|
|
849
|
+
--size-control-2xl: var(--control-height-2xl);
|
|
845
850
|
--height-row-sm: var(--row-height-sm);
|
|
846
851
|
--height-row-md: var(--row-height-md);
|
|
847
852
|
--height-row-lg: var(--row-height-lg);
|
|
@@ -855,6 +860,7 @@
|
|
|
855
860
|
--spacing-control-md: var(--control-padding-md);
|
|
856
861
|
--spacing-control-lg: var(--control-padding-lg);
|
|
857
862
|
--spacing-control-xl: var(--control-padding-xl);
|
|
863
|
+
--spacing-control-2xl: var(--control-padding-2xl);
|
|
858
864
|
|
|
859
865
|
--width-rail: var(--rail-width);
|
|
860
866
|
--width-rail-expanded: var(--rail-width-expanded);
|