@viraui/react 0.0.24 → 0.0.25
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/catalog.json +14 -2
- package/dist/components/avatar/avatar.css +1 -1
- package/dist/components/avatar-group/avatar-group.css +7 -1
- package/dist/components/avatar-group/avatar-group.d.ts +0 -7
- package/dist/components/avatar-group/avatar-group.js +2 -9
- package/dist/components/button/button.css +1 -1
- package/dist/components/button/button.js +1 -1
- package/dist/components/checkbox/checkbox.css +1 -1
- package/dist/components/chip/chip.css +1 -1
- package/dist/components/fieldset/fieldset.js +1 -2
- package/dist/components/index.d.ts +2 -0
- package/dist/components/linear-progress/linear-progress.css +1 -1
- package/dist/components/radio/radio.css +1 -1
- package/dist/components/select/select.css +1 -1
- package/dist/components/shimmer/index.d.ts +2 -0
- package/dist/components/shimmer/shimmer.css +1 -0
- package/dist/components/shimmer/shimmer.d.ts +43 -0
- package/dist/components/shimmer/shimmer.guide.json +25 -0
- package/dist/components/shimmer/shimmer.js +25 -0
- package/dist/components/shimmer/shimmer.module.js +6 -0
- package/dist/components/skeleton/skeleton.js +4 -4
- package/dist/components/slider/slider.css +1 -1
- package/dist/components/slider/slider.js +1 -1
- package/dist/components/stack/stack.css +1 -1
- package/dist/components/stack/stack.d.ts +1 -1
- package/dist/components/stack/stack.guide.json +7 -3
- package/dist/components/stack/stack.js +2 -2
- package/dist/components/surface/surface.css +1 -1
- package/dist/components/surface/surface.guide.json +5 -3
- package/dist/components/surface/surface.js +4 -4
- package/dist/components/tabs/tabs.css +1 -1
- package/dist/components/text/text.js +1 -1
- package/dist/components/textarea/textarea.css +1 -1
- package/dist/components/textfield/textfield.css +1 -1
- package/dist/components/title/title.js +1 -1
- package/dist/components/toast/index.d.ts +2 -0
- package/dist/components/toast/toast-action.d.ts +9 -0
- package/dist/components/toast/toast-action.js +10 -0
- package/dist/components/toast/toast-banner.d.ts +59 -0
- package/dist/components/toast/toast-banner.js +66 -0
- package/dist/components/toast/toast-viewport.d.ts +17 -0
- package/dist/components/toast/toast-viewport.js +12 -0
- package/dist/components/toast/toast.css +1 -0
- package/dist/components/toast/toast.d.ts +18 -0
- package/dist/components/toast/toast.guide.json +26 -0
- package/dist/components/toast/toast.js +22 -0
- package/dist/components/toast/toast.module.js +7 -0
- package/dist/core/props/intrinsic-vira-props.js +3 -3
- package/dist/index.js +3 -1
- package/dist/preflight.css +1 -1
- package/package.json +13 -5
package/dist/catalog.json
CHANGED
|
@@ -116,6 +116,12 @@
|
|
|
116
116
|
"summary": "Thematic or content divider with horizontal or vertical orientation, token padding, and preset line thickness.",
|
|
117
117
|
"guidePath": "./components/separator/separator.guide.json"
|
|
118
118
|
},
|
|
119
|
+
{
|
|
120
|
+
"id": "shimmer",
|
|
121
|
+
"name": "Shimmer",
|
|
122
|
+
"summary": "Decorative inline text shimmer that inherits typography and color from a parent text primitive.",
|
|
123
|
+
"guidePath": "./components/shimmer/shimmer.guide.json"
|
|
124
|
+
},
|
|
119
125
|
{
|
|
120
126
|
"id": "icon",
|
|
121
127
|
"name": "Icon",
|
|
@@ -131,13 +137,13 @@
|
|
|
131
137
|
{
|
|
132
138
|
"id": "stack",
|
|
133
139
|
"name": "Stack",
|
|
134
|
-
"summary": "Flex layout primitive for arranging children with token spacing, alignment, and padding.",
|
|
140
|
+
"summary": "Flex layout primitive for arranging children with token spacing, alignment, and padding; root is a named CSS container query context (`stack`).",
|
|
135
141
|
"guidePath": "./components/stack/stack.guide.json"
|
|
136
142
|
},
|
|
137
143
|
{
|
|
138
144
|
"id": "surface",
|
|
139
145
|
"name": "Surface",
|
|
140
|
-
"summary": "Presentational container with token background, optional border, radius, and padding; nested surfaces use radius=\"auto\" for concentric corners.",
|
|
146
|
+
"summary": "Presentational container with token background, optional border, radius, and padding; nested surfaces use radius=\"auto\" for concentric corners; root is a named CSS container query context (`surface`).",
|
|
141
147
|
"guidePath": "./components/surface/surface.guide.json"
|
|
142
148
|
},
|
|
143
149
|
{
|
|
@@ -146,6 +152,12 @@
|
|
|
146
152
|
"summary": "Compound segmented tab control with Surface list chrome, moving indicator, and animated panels.",
|
|
147
153
|
"guidePath": "./components/tabs/tabs.guide.json"
|
|
148
154
|
},
|
|
155
|
+
{
|
|
156
|
+
"id": "toast",
|
|
157
|
+
"name": "Toast",
|
|
158
|
+
"summary": "Transient notification surface with stacked or anchored placement, Banner high-level API, and optional action buttons.",
|
|
159
|
+
"guidePath": "./components/toast/toast.guide.json"
|
|
160
|
+
},
|
|
149
161
|
{
|
|
150
162
|
"id": "spinner",
|
|
151
163
|
"name": "Spinner",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.viraui__avatar-module__Avatar_BRuS3{--avatar-size:var(--space-2x-large);--avatar-background:var(--global-contrast);--avatar-foreground:var(--global-foreground);--avatar-radius:var(--radius-
|
|
1
|
+
.viraui__avatar-module__Avatar_BRuS3{--avatar-size:var(--space-2x-large);--avatar-background:var(--global-contrast);--avatar-foreground:var(--global-foreground);--avatar-radius:var(--radius-medium);display:inline-flex;align-items:center;justify-content:center;inline-size:var(--avatar-size);block-size:var(--avatar-size);min-inline-size:var(--avatar-size);min-block-size:var(--avatar-size);overflow:hidden;border-radius:var(--avatar-radius);background:var(--avatar-background);color:var(--avatar-foreground);vertical-align:middle;-webkit-user-select:none;user-select:none;container-name:viraui-avatar;container-type:inline-size;&[data-size=x-small]{--avatar-size:var(--space-large)}&[data-size=small]{--avatar-size:var(--space-2x-large)}&[data-size=regular]{--avatar-size:var(--space-wide)}&[data-size=big]{--avatar-size:var(--space-2x-wide)}}.viraui__avatar-module__Image_Q7bHi{inline-size:100%;block-size:100%;display:block;object-fit:cover}.viraui__avatar-module__Label_QASTF{font-size:30cqw}
|
|
@@ -1 +1,7 @@
|
|
|
1
|
-
.viraui__avatar-group-module__AvatarGroup_zOrR-{--avatar-size:var(--space-2x-large);--avatar-overlap-distance:var(--space-
|
|
1
|
+
.viraui__avatar-group-module__AvatarGroup_zOrR-{--avatar-size:var(--space-2x-large);--avatar-overlap-distance:var(--space-small);--avatar-group-gap-size:var(--space-x-small);--avatar-group-item-radius:var(--radius-medium);display:inline-flex;flex-wrap:nowrap;align-items:flex-start;min-inline-size:max-content;vertical-align:middle;&[data-direction=vertical]{flex-direction:column}&[data-size=x-small]{--avatar-size:var(--space-large);--avatar-overlap-distance:var(--space-x-small);--avatar-group-gap-size:var(--space-2x-small)}&[data-size=regular]{--avatar-size:var(--space-wide);--avatar-overlap-distance:var(--space-medium);--avatar-group-gap-size:var(--space-x-small)}&[data-size=big]{--avatar-size:var(--space-2x-wide);--avatar-overlap-distance:var(--space-large);--avatar-group-gap-size:var(--space-small)}}.viraui__avatar-group-module__AvatarWrapper_0opqY{position:relative;display:inline-flex;flex:0 0 auto;inline-size:var(--avatar-size);block-size:var(--avatar-size);.viraui__avatar-group-module__AvatarGroup_zOrR-[data-direction=horizontal] &:not(:first-child){margin-inline-start:calc(var(--avatar-overlap-distance) * -1)}.viraui__avatar-group-module__AvatarGroup_zOrR-[data-direction=vertical] &:not(:first-child){margin-block-start:calc(var(--avatar-overlap-distance) * -1)}--avatar-hole-half:calc((var(--avatar-size) / 2) + var(--avatar-group-gap-size));--avatar-hole-r:calc(min(var(--avatar-group-item-radius), var(--avatar-size) / 2) + var(--avatar-group-gap-size));.viraui__avatar-group-module__AvatarGroup_zOrR-:dir(ltr)[data-direction=horizontal] &:not(:last-child){--avatar-hole-cx:calc(100% + (var(--avatar-size) / 2) - var(--avatar-overlap-distance));--avatar-hole-cy:50%}.viraui__avatar-group-module__AvatarGroup_zOrR-:dir(rtl)[data-direction=horizontal] &:not(:last-child){--avatar-hole-cx:calc(var(--avatar-overlap-distance) - (var(--avatar-size) / 2));--avatar-hole-cy:50%}.viraui__avatar-group-module__AvatarGroup_zOrR-[data-direction=vertical] &:not(:last-child){--avatar-hole-cx:50%;--avatar-hole-cy:calc(100% + (var(--avatar-size) / 2) - var(--avatar-overlap-distance))}.viraui__avatar-group-module__AvatarGroup_zOrR- &:not(:last-child){--avatar-hole-edge:calc((var(--avatar-hole-half) - var(--avatar-hole-r)) * 2);--avatar-hole-corner-inset:calc(var(--avatar-hole-r) * 0.85);@supports (corner-shape:squircle){@container root not style(--corner-shape-enable: initial){--avatar-hole-corner-tr:curve by var(--avatar-hole-r) var(--avatar-hole-r) with var(--avatar-hole-corner-inset) 0px /var(--avatar-hole-r) calc(var(--avatar-hole-r) * 0.15);--avatar-hole-corner-br:curve by calc(var(--avatar-hole-r) * -1) var(--avatar-hole-r) with 0px var(--avatar-hole-corner-inset) /calc(var(--avatar-hole-r) * -0.15) var(--avatar-hole-r);--avatar-hole-corner-bl:curve by calc(var(--avatar-hole-r) * -1) calc(var(--avatar-hole-r) * -1) with calc(var(--avatar-hole-corner-inset) * -1) 0px /calc(var(--avatar-hole-r) * -1) calc(var(--avatar-hole-r) * -0.15);--avatar-hole-corner-tl:curve by var(--avatar-hole-r) calc(var(--avatar-hole-r) * -1) with 0px calc(var(--avatar-hole-corner-inset) * -1) /calc(var(--avatar-hole-r) * 0.15) calc(var(--avatar-hole-r) * -1)}}clip-path:shape(evenodd from 0 0,line to 100% 0,line to 100% 100%,line to 0 100%,close,move to calc(var(--avatar-hole-cx) - var(--avatar-hole-half) + var(--avatar-hole-r)) calc(var(--avatar-hole-cy) - var(--avatar-hole-half)),line by var(--avatar-hole-edge) 0,var(--avatar-hole-corner-tr,arc by var(--avatar-hole-r) var(--avatar-hole-r) of var(--avatar-hole-r) cw),line by 0 var(--avatar-hole-edge),var(
|
|
2
|
+
--avatar-hole-corner-br,arc by calc(var(--avatar-hole-r) * -1) var(--avatar-hole-r) of var(--avatar-hole-r) cw
|
|
3
|
+
),line by calc(var(--avatar-hole-edge) * -1) 0,var(
|
|
4
|
+
--avatar-hole-corner-bl,arc by calc(var(--avatar-hole-r) * -1) calc(var(--avatar-hole-r) * -1) of var(--avatar-hole-r) cw
|
|
5
|
+
),line by 0 calc(var(--avatar-hole-edge) * -1),var(
|
|
6
|
+
--avatar-hole-corner-tl,arc by var(--avatar-hole-r) calc(var(--avatar-hole-r) * -1) of var(--avatar-hole-r) cw
|
|
7
|
+
),close)}}.viraui__avatar-group-module__OverflowWrapper_bKv6I{inline-size:auto}.viraui__avatar-group-module__AvatarGroupItem_Vvlyh{--avatar-radius:var(--avatar-group-item-radius)}.viraui__avatar-group-module__OverflowPill_nMmTD{display:inline-flex;align-items:center;justify-content:center;min-inline-size:var(--avatar-size);block-size:var(--avatar-size)}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { AvatarProps } from '..';
|
|
2
2
|
import { IntrinsicViraProps } from '../../core/props/intrinsic-vira-props';
|
|
3
|
-
import { ThemeTypes } from '@viraui/foundation/vira/types';
|
|
4
3
|
import type * as React from 'react';
|
|
5
4
|
type AvatarGroupAvatarProps = Omit<AvatarProps, 'size' | 'ref'>;
|
|
6
5
|
/**
|
|
@@ -30,12 +29,6 @@ export type AvatarGroupProps = React.ComponentPropsWithRef<'div'> & IntrinsicVir
|
|
|
30
29
|
* @default 'horizontal'
|
|
31
30
|
*/
|
|
32
31
|
direction?: 'horizontal' | 'vertical';
|
|
33
|
-
/**
|
|
34
|
-
* Sets the empty visual separation preserved inside the overlap cutout.
|
|
35
|
-
*
|
|
36
|
-
* @default 'x-small'
|
|
37
|
-
*/
|
|
38
|
-
gap?: Extract<ThemeTypes['space'], '2x-small' | 'x-small' | 'small'>;
|
|
39
32
|
/**
|
|
40
33
|
* Limits how many real avatars render before the optional overflow pill is appended.
|
|
41
34
|
*
|
|
@@ -2,7 +2,6 @@ import './avatar-group.css';
|
|
|
2
2
|
import { clsx } from "../../core/clsx.js";
|
|
3
3
|
import { extractIntrinsicViraProps } from "../../core/props/intrinsic-vira-props.js";
|
|
4
4
|
import { Avatar } from "../avatar/avatar.js";
|
|
5
|
-
import { resolveThemeValue } from "../../core/theme/resolve-theme-value.js";
|
|
6
5
|
import avatar_group_module_default from "./avatar-group.module.js";
|
|
7
6
|
import { Stack } from "../stack/stack.js";
|
|
8
7
|
import { Text } from "../text/text.js";
|
|
@@ -10,25 +9,19 @@ import { Surface } from "../surface/surface.js";
|
|
|
10
9
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
11
10
|
//#region src/components/avatar-group/avatar-group.tsx
|
|
12
11
|
var getAvatarKey = (avatar, index) => `${avatar.src ?? "fallback"}-${typeof avatar.fallback === "string" ? avatar.fallback : "node"}-${index}`;
|
|
13
|
-
var AvatarGroup = ({ avatars, className, direction = "horizontal",
|
|
12
|
+
var AvatarGroup = ({ avatars, className, direction = "horizontal", maxVisible, overflowText, ref, size = "small", style, ...otherProps }) => {
|
|
14
13
|
const { componentProps, intrinsicAttributes } = extractIntrinsicViraProps(otherProps);
|
|
15
14
|
const isOverflowing = typeof maxVisible === "number" && maxVisible > 0 && avatars.length > maxVisible;
|
|
16
15
|
const hasOverflow = isOverflowing && overflowText !== void 0 && overflowText !== null;
|
|
17
16
|
const truncatedAvatars = isOverflowing ? avatars.slice(0, maxVisible) : avatars;
|
|
18
|
-
const dynamicStyle = {
|
|
19
|
-
"--avatar-group-gap-size": resolveThemeValue(gap, "space", "var(--space-x-small)"),
|
|
20
|
-
...style
|
|
21
|
-
};
|
|
22
17
|
return /* @__PURE__ */ jsxs("div", {
|
|
23
18
|
...componentProps,
|
|
24
19
|
...intrinsicAttributes,
|
|
25
20
|
ref,
|
|
26
21
|
className: clsx(avatar_group_module_default.AvatarGroup, className),
|
|
27
22
|
"data-direction": direction,
|
|
28
|
-
"data-gap": gap,
|
|
29
|
-
"data-has-overflow": hasOverflow ? "true" : "false",
|
|
30
23
|
"data-size": size,
|
|
31
|
-
style
|
|
24
|
+
style,
|
|
32
25
|
children: [truncatedAvatars.map((avatar, index) => /* @__PURE__ */ jsx("div", {
|
|
33
26
|
className: avatar_group_module_default.AvatarWrapper,
|
|
34
27
|
children: /* @__PURE__ */ jsx(Avatar, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.viraui__button-module__Button_oPhrP{--button-background:var(--global-primary);--button-color:var(--base-1);--button-height:var(--space-x-large);--button-padding-inline:var(--space-small);--button-padding-block:var(--space-small);--button-spinner-color:currentColor;--button-icon-size:1.125em;--button-radius:var(--radius-medium);-webkit-
|
|
1
|
+
.viraui__button-module__Button_oPhrP{--button-background:var(--global-primary);--button-color:var(--base-1);--button-height:var(--space-x-large);--button-padding-inline:var(--space-small);--button-padding-block:var(--space-small);--button-spinner-color:currentColor;--button-icon-size:1.125em;--button-radius:var(--radius-medium);-webkit-user-select:none;user-select:none;margin:0;cursor:pointer;font-family:inherit;display:inline-flex;align-items:center;min-inline-size:fit-content;max-block-size:var(--button-height);block-size:var(--button-height);justify-content:center;text-decoration:none;white-space:nowrap;appearance:button;overflow:hidden;position:relative;padding:var(--button-padding-block) var(--button-padding-inline);font-weight:400;font-variation-settings:"wght" 400;gap:var(--space-small);border:1px solid #0000;background:var(--button-background);color:var(--button-color);font-size:var(--font-scale-body-medium);border-radius:var(--button-radius);transition:translate var(--easing-elastic) var(--duration-instant);will-change:translate;&:not(:disabled){background-clip:padding-box}&:not(:disabled):active{translate:0 1px}&[data-pill=true]{border-radius:var(--radius-infinite);&[data-addon-position=end]{padding-inline-end:calc(var(--button-padding-inline) / 2)}&[data-addon-position=start]{padding-inline-start:calc(var(--button-padding-inline) / 2)}}&[data-size=big]{--button-height:var(--space-2x-large);--button-padding-inline:var(--space-medium);--button-padding-block:var(--space-small);--button-icon-size:1.125em;--button-radius:var(--radius-medium)}&[data-size=small]{--button-height:var(--space-large);--button-padding-inline:var(--space-small);--button-padding-block:var(--space-x-small);--button-icon-size:1em;--button-radius:var(--radius-small);gap:var(--space-x-small);font-size:var(--font-scale-body-small)}&[data-variant=primary]{--button-background:var(--global-primary);--button-color:contrast-color(var(--global-primary));&:hover{--button-background:oklab(from var(--global-primary) calc(l + 0.05) a b)}}&[data-variant=secondary]{--button-background:var(--global-contrast);--button-color:var(--base-6);background-clip:unset;&:hover{--button-background:oklab(from var(--global-contrast) l a b/calc(alpha + 0.03))}}&[data-variant=flat]{--button-background:#0000;--button-color:var(--base-5);&:hover{--button-background:var(--global-contrast);--button-color:var(--base-7)}}&[data-variant=destructive]{--button-background:oklab(from var(--highlight-red) l a b/12%);--button-color:var(--highlight-red);&:hover{--button-background:oklab(from var(--highlight-red) l a b/30%)}}&[data-addon-position=start]{flex-direction:row;padding-inline-end:calc(var(--button-padding-inline) * 1.2)}&[data-addon-position=end]{flex-direction:row-reverse;padding-inline-start:calc(var(--button-padding-inline) * 1.2)}&[data-icon-only=true]{gap:0;padding-block:var(--button-padding-block);padding-inline:var(--button-padding-block);inline-size:var(--button-height);min-inline-size:var(--button-height);max-inline-size:var(--button-height);aspect-ratio:1/1}&:disabled,&:disabled:hover,&[aria-disabled=true]{--button-background:var(--global-disabled-background);--button-color:var(--global-disabled-foreground);cursor:not-allowed;box-shadow:none}&[data-loading=true][data-disabled]{pointer-events:none;border:0;box-shadow:none;--button-color:var(--base-7)}}.viraui__button-module__Content_w-pX-{display:inline-grid;place-items:center;&[data-loading=true]{opacity:0}&:first-child>svg{block-size:var(--button-icon-size);inline-size:var(--button-icon-size);flex-shrink:0}}.viraui__button-module__SpinnerOverlay_vKqw1{position:absolute;inset:0;display:grid;place-content:center;pointer-events:none}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.viraui__checkbox-module__Checkbox_3oGip{&:has([required]) .viraui__checkbox-module__Label_n9HL7:after{content:" *";color:var(--highlight-red)}}.viraui__checkbox-module__CheckboxRoot_PeyF5{--checkbox-size:var(--space-medium);--checkbox-radius:var(--radius-x-small);--checkbox-background:var(--global-contrast);--checkbox-border-color
|
|
1
|
+
.viraui__checkbox-module__Checkbox_3oGip{&:has([required]) .viraui__checkbox-module__Label_n9HL7:after{content:" *";color:var(--highlight-red)}}.viraui__checkbox-module__CheckboxRoot_PeyF5{--checkbox-size:var(--space-medium);--checkbox-radius:var(--radius-x-small);--checkbox-background:var(--global-contrast);--checkbox-border-color:#0000;--checkbox-indicator-color:contrast-color(var(--global-primary));position:relative;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;appearance:none;border:0;box-shadow:inset 0 0 0 1px var(--checkbox-border-color);inline-size:var(--checkbox-size);block-size:var(--checkbox-size);background:var(--checkbox-background);border-radius:var(--checkbox-radius);&[data-size=regular]{--checkbox-size:var(--space-large);--checkbox-radius:var(--radius-small)}&[data-checked]:not([data-disabled]):not([data-invalid]),&[data-indeterminate]:not([data-disabled]):not([data-invalid]){--checkbox-background:var(--global-primary);--checkbox-border-color:var(--global-primary);box-shadow:none}&[data-invalid]:not([data-disabled]),[data-invalid] &:not([data-disabled]){--checkbox-border-color:var(--highlight-red);--checkbox-indicator-color:var(--global-primary);box-shadow:inset 0 0 0 1px var(--highlight-red);outline-color:oklab(from var(--highlight-red) l a b/.5)}&[data-disabled],[data-disabled] &{--checkbox-background:var(--global-disabled-background);--checkbox-border-color:#0000;--checkbox-indicator-color:var(--global-disabled-foreground);box-shadow:none;cursor:not-allowed}}.viraui__checkbox-module__Indicator_C-k-l{display:inline-flex;align-items:center;justify-content:center;color:var(--checkbox-indicator-color)}.viraui__checkbox-module__Icon_926Sa{stroke:currentColor}.viraui__checkbox-module__CheckboxRoot_PeyF5:not([data-indeterminate]) .viraui__checkbox-module__MinusIcon_Q57pY,.viraui__checkbox-module__CheckboxRoot_PeyF5[data-indeterminate] .viraui__checkbox-module__CheckIcon_XqUcs{display:none}.viraui__checkbox-module__CheckboxRoot_PeyF5[data-indeterminate] .viraui__checkbox-module__MinusIcon_Q57pY{display:inline-flex}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.viraui__chip-module__Chip_2D18T{--chip-background:var(--global-primary);--chip-border-color
|
|
1
|
+
.viraui__chip-module__Chip_2D18T{--chip-background:var(--global-primary);--chip-border-color:#0000;--chip-color:contrast-color(var(--global-primary));--chip-height:var(--space-large);--chip-icon-size:0.9em;--chip-color-bg-opacity:13%;--chip-color-border-opacity:0%;min-block-size:var(--chip-height);block-size:var(--chip-height);border:1px solid var(--chip-border-color);border-radius:var(--radius-infinite);background:var(--chip-background);color:var(--chip-color);font-size:var(--font-scale-body-small);font-variation-settings:"wght" 400;text-decoration:none;white-space:nowrap;overflow:hidden;&[data-variant=primary]{--chip-background:var(--global-primary);--chip-color:contrast-color(var(--global-primary))}&[data-variant=secondary]{--chip-background:var(--global-contrast);--chip-color:var(--base-6)}&[data-variant=outline]{--chip-background:#0000;--chip-border-color:oklab(from var(--global-contrast) l a b/0.2);--chip-color:var(--base-6)}&[data-variant=gray]{--chip-background:oklab(from currentColor l a b/var(--chip-color-bg-opacity));--chip-border-color:oklab(from currentColor l a b/var(--chip-color-border-opacity));--chip-color:var(--highlight-gray)}&[data-variant=slate]{--chip-background:oklab(from currentColor l a b/var(--chip-color-bg-opacity));--chip-border-color:oklab(from currentColor l a b/var(--chip-color-border-opacity));--chip-color:var(--highlight-slate)}&[data-variant=yellow]{--chip-background:oklab(from currentColor l a b/var(--chip-color-bg-opacity));--chip-border-color:oklab(from currentColor l a b/var(--chip-color-border-opacity));--chip-color:var(--highlight-yellow)}&[data-variant=green]{--chip-background:oklab(from currentColor l a b/var(--chip-color-bg-opacity));--chip-border-color:oklab(from currentColor l a b/var(--chip-color-border-opacity));--chip-color:var(--highlight-green)}&[data-variant=blue]{--chip-color:var(--highlight-blue)}&[data-variant=blue],&[data-variant=red]{--chip-background:oklab(from currentColor l a b/var(--chip-color-bg-opacity));--chip-border-color:oklab(from currentColor l a b/var(--chip-color-border-opacity))}&[data-variant=red]{--chip-color:var(--highlight-red)}&[data-variant=cyan]{--chip-background:oklab(from currentColor l a b/var(--chip-color-bg-opacity));--chip-border-color:oklab(from currentColor l a b/var(--chip-color-border-opacity));--chip-color:var(--highlight-cyan)}&[data-variant=purple]{--chip-background:oklab(from currentColor l a b/var(--chip-color-bg-opacity));--chip-border-color:oklab(from currentColor l a b/var(--chip-color-border-opacity));--chip-color:var(--highlight-purple)}&[data-variant=indigo]{--chip-background:oklab(from currentColor l a b/var(--chip-color-bg-opacity));--chip-border-color:oklab(from currentColor l a b/var(--chip-color-border-opacity));--chip-color:var(--highlight-indigo)}&[data-variant=acid]{--chip-background:oklab(from currentColor l a b/var(--chip-color-bg-opacity));--chip-border-color:oklab(from currentColor l a b/var(--chip-color-border-opacity));--chip-color:var(--highlight-acid)}&[data-variant=salmon]{--chip-background:oklab(from currentColor l a b/var(--chip-color-bg-opacity));--chip-border-color:oklab(from currentColor l a b/var(--chip-color-border-opacity));--chip-color:var(--highlight-salmon)}&[data-variant=magenta]{--chip-background:oklab(from currentColor l a b/var(--chip-color-bg-opacity));--chip-border-color:oklab(from currentColor l a b/var(--chip-color-border-opacity));--chip-color:var(--highlight-magenta)}}.viraui__chip-module__Content_7mLuL{min-inline-size:0;min-block-size:100%}.viraui__chip-module__IconSlot_9N5vD{display:inline-grid;place-items:center;flex-shrink:0;>svg{inline-size:var(--chip-icon-size);block-size:var(--chip-icon-size)}}.viraui__chip-module__Label_Hdx7l{display:inline-block;min-inline-size:0;overflow:hidden;text-overflow:ellipsis}
|
|
@@ -5,14 +5,13 @@ import { FieldLabel } from "../basic-input/field-label.js";
|
|
|
5
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
6
|
import { Fieldset } from "@base-ui/react";
|
|
7
7
|
//#region src/components/fieldset/fieldset.tsx
|
|
8
|
-
var Fieldset$1 = ({ children, className, description, disabled, error, label,
|
|
8
|
+
var Fieldset$1 = ({ children, className, description, disabled, error, label, ...fieldsetRootProps }) => {
|
|
9
9
|
const { componentProps, intrinsicAttributes } = extractIntrinsicViraProps(fieldsetRootProps);
|
|
10
10
|
return /* @__PURE__ */ jsxs(Fieldset.Root, {
|
|
11
11
|
...intrinsicAttributes,
|
|
12
12
|
...componentProps,
|
|
13
13
|
className,
|
|
14
14
|
disabled,
|
|
15
|
-
render,
|
|
16
15
|
children: [/* @__PURE__ */ jsxs(Stack, {
|
|
17
16
|
vPadding: [0, "small"],
|
|
18
17
|
rowGap: "small",
|
|
@@ -17,11 +17,13 @@ export * from './fieldset';
|
|
|
17
17
|
export * from './radio';
|
|
18
18
|
export * from './select';
|
|
19
19
|
export * from './separator';
|
|
20
|
+
export * from './shimmer';
|
|
20
21
|
export * from './icon';
|
|
21
22
|
export * from './skeleton';
|
|
22
23
|
export * from './stack';
|
|
23
24
|
export * from './surface';
|
|
24
25
|
export * from './tabs';
|
|
26
|
+
export * from './toast';
|
|
25
27
|
export * from './spinner';
|
|
26
28
|
export * from './static-noise';
|
|
27
29
|
export * from './progressive-blur';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.viraui__linear-progress-module__LinearProgress_-KN0j{--linear-progress-track-size:var(--space-x-small);--linear-progress-track-background:var(--global-contrast);--linear-progress-indicator-color:var(--global-primary);& .viraui__linear-progress-module__Track_qUz8P{position:relative;overflow:hidden;block-size:var(--linear-progress-track-size);background:var(--linear-progress-track-background);border-radius:var(--radius-infinite)}& .viraui__linear-progress-module__Indicator_maaZF{block-size:100%;background:var(--linear-progress-indicator-color);border-radius:inherit;&[data-indeterminate]{position:absolute;inset:0;inline-size:100%;background
|
|
1
|
+
.viraui__linear-progress-module__LinearProgress_-KN0j{--linear-progress-track-size:var(--space-x-small);--linear-progress-track-background:var(--global-contrast);--linear-progress-indicator-color:var(--global-primary);& .viraui__linear-progress-module__Track_qUz8P{position:relative;overflow:hidden;block-size:var(--linear-progress-track-size);background:var(--linear-progress-track-background);border-radius:var(--radius-infinite)}& .viraui__linear-progress-module__Indicator_maaZF{block-size:100%;background:var(--linear-progress-indicator-color);border-radius:inherit;&[data-indeterminate]{position:absolute;inset:0;inline-size:100%;background:#0000;&:before{position:absolute;inset-block:0;inline-size:40%;background:var(--linear-progress-indicator-color);border-radius:inherit;animation:viraui__linear-progress-module__linear-progress-indeterminate_g0cSO 1.4s var(--easing-standard) infinite;content:""}}}}@keyframes viraui__linear-progress-module__linear-progress-indeterminate_g0cSO{0%{transform:translateX(-120%)}to{transform:translateX(260%)}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.viraui__radio-module__RadioRoot_3uvvn{--radio-size:var(--space-medium);--radio-background:var(--global-contrast);--radio-border-color
|
|
1
|
+
.viraui__radio-module__RadioRoot_3uvvn{--radio-size:var(--space-medium);--radio-background:var(--global-contrast);--radio-border-color:#0000;--radio-indicator-color:contrast-color(var(--global-primary));--radio-disk-size:calc(var(--radio-size) / 2);position:relative;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;appearance:none;border:0;box-shadow:inset 0 0 0 1px var(--radio-border-color);inline-size:var(--radio-size);block-size:var(--radio-size);background:var(--radio-background);border-radius:100000px;corner-shape:unset;&[data-size=regular]{--radio-size:var(--space-large)}&[data-checked]:not([data-disabled]):not([data-invalid]){--radio-background:var(--global-primary);--radio-border-color:var(--global-primary);box-shadow:none}&[data-invalid]:not([data-disabled]),[data-invalid] &:not([data-disabled]){--radio-border-color:var(--highlight-red);--radio-indicator-color:var(--global-primary);box-shadow:inset 0 0 0 1px var(--highlight-red);outline-color:oklab(from var(--highlight-red) l a b/.5)}&[data-disabled],[data-disabled] &{--radio-background:var(--global-disabled-background);--radio-border-color:#0000;--radio-indicator-color:var(--global-disabled-foreground);box-shadow:none;cursor:not-allowed}}.viraui__radio-module__Indicator_Ecavw{display:inline-flex;align-items:center;justify-content:center;color:var(--radio-indicator-color)}.viraui__radio-module__Disk_pV-Q1{inline-size:var(--radio-disk-size);aspect-ratio:1/1;border-radius:100000px;corner-shape:unset;background:currentColor}.viraui__radio-module__RadioRoot_3uvvn:not([data-checked]) .viraui__radio-module__Disk_pV-Q1{display:none}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.viraui__select-module__Select_eXv4Y{--input-height:var(--space-x-large);--control-group-background:var(--base-1);--control-group-color:var(--global-foreground);--control-group-border-color:var(--global-contrast);--control-group-border-radius:var(--radius-medium);--select-trigger-padding-inline-start:var(--space-small);--select-trigger-padding-inline-end:var(--space-x-small);--field-label-padding-inline:calc((var(--control-group-border-radius) + 0px) / 2);--select-list-appear-offest:8px;z-index:0;&:has([required]) .viraui__select-module__Label_-Y1fR:after{content:" *";color:var(--highlight-red)}&[data-invalid]>.viraui__select-module__Trigger_-wBsg:not(:disabled):not([data-disabled]){--control-group-border-color:var(--highlight-red);box-shadow:none;outline-color:oklab(from var(--highlight-red) l a b/.5)}}.viraui__select-module__Trigger_-wBsg{box-sizing:border-box;inline-size:100%;min-inline-size:0;block-size:var(--input-height);padding-inline:var(--select-trigger-padding-inline-start) var(--select-trigger-padding-inline-end);border:1px solid var(--control-group-border-color);border-radius:var(--control-group-border-radius);background:var(--control-group-background);color:var(--control-group-color);font:inherit;text-align:start;cursor:pointer;&[data-popup-open]{outline:none}&:disabled,&[data-disabled]{--control-group-background:var(--global-disabled-background);--control-group-border-color
|
|
1
|
+
.viraui__select-module__Select_eXv4Y{--input-height:var(--space-x-large);--control-group-background:var(--base-1);--control-group-color:var(--global-foreground);--control-group-border-color:var(--global-contrast);--control-group-border-radius:var(--radius-medium);--select-trigger-padding-inline-start:var(--space-small);--select-trigger-padding-inline-end:var(--space-x-small);--field-label-padding-inline:calc((var(--control-group-border-radius) + 0px) / 2);--select-list-appear-offest:8px;z-index:0;&:has([required]) .viraui__select-module__Label_-Y1fR:after{content:" *";color:var(--highlight-red)}&[data-invalid]>.viraui__select-module__Trigger_-wBsg:not(:disabled):not([data-disabled]){--control-group-border-color:var(--highlight-red);box-shadow:none;outline-color:oklab(from var(--highlight-red) l a b/.5)}}.viraui__select-module__Trigger_-wBsg{box-sizing:border-box;inline-size:100%;min-inline-size:0;block-size:var(--input-height);padding-inline:var(--select-trigger-padding-inline-start) var(--select-trigger-padding-inline-end);border:1px solid var(--control-group-border-color);border-radius:var(--control-group-border-radius);background:var(--control-group-background);color:var(--control-group-color);font:inherit;text-align:start;cursor:pointer;&[data-popup-open]{outline:none}&:disabled,&[data-disabled]{--control-group-background:var(--global-disabled-background);--control-group-border-color:#0000;--control-group-color:var(--global-disabled-foreground);box-shadow:none;cursor:not-allowed}}.viraui__select-module__Value_uWHPX{--text-fluid-factor:0;--text-font-size:var(--font-scale-body-small);flex:1 1 auto;min-inline-size:0;overflow:hidden;display:block;text-overflow:ellipsis;&[data-placeholder]{color:var(--global-disabled-foreground)}}.viraui__select-module__Icon_EOwki{font-size:var(--font-scale-body-small);pointer-events:none}.viraui__select-module__Description_OmwmV{padding-inline:calc((var(--control-group-border-radius) + 0px) / 2)}.viraui__select-module__SelectPopup_UzGXL{--select-list-border-radius:var(--radius-medium);--select-list-padding:var(--space-x-small);box-sizing:border-box;min-inline-size:var(--anchor-width);overflow:visible;color:var(--global-foreground);outline:none;position:relative;transform-origin:var(--transform-origin);transition:opacity var(--duration-instant) var(--easing-entrance),scale var(--duration-instant) var(--easing-entrance),translate var(--duration-instant) var(--easing-entrance);&[data-ending-style],&[data-starting-style]{opacity:0;scale:.96}&[data-side=bottom][data-ending-style],&[data-side=bottom][data-starting-style]{scale:.96;translate:0 calc(var(--select-list-appear-offest) * -1)}&[data-side=top][data-ending-style],&[data-side=top][data-starting-style]{scale:.96;translate:0 var(--select-list-appear-offest)}&[data-side=inline-start][data-ending-style],&[data-side=inline-start][data-starting-style],&[data-side=left][data-ending-style],&[data-side=left][data-starting-style]{scale:.96;translate:var(--select-list-appear-offest) 0}&[data-side=inline-end][data-ending-style],&[data-side=inline-end][data-starting-style],&[data-side=right][data-ending-style],&[data-side=right][data-starting-style]{scale:.96;translate:calc(var(--select-list-appear-offest) * -1) 0}&[data-side=none]{transition:none;scale:1;translate:0;opacity:1}}.viraui__select-module__ScrollArrow_kHlEi{position:absolute;inset-inline:0;z-index:1;inline-size:100%;block-size:var(--space-large);cursor:default;background:var(--base-1);border:1px solid var(--global-contrast);@container root not style(--vibrancy-enable: initial){background:oklab(from var(--base-1) l a b/80%);backdrop-filter:brightness(var(--vibrancy-brightness)) blur(calc(var(--vibrancy-blur) * 1px))}}.viraui__select-module__ScrollButton_sHBOa{pointer-events:none}.viraui__select-module__ScrollArrowUp_DGXS-{inset-block-start:0;border-radius:var(--select-list-border-radius) var(--select-list-border-radius) 0 0}.viraui__select-module__ScrollArrowDown_vhJy0{inset-block-end:0;border-radius:0 0 var(--select-list-border-radius) var(--select-list-border-radius)}.viraui__select-module__List_jdUWx{box-sizing:border-box;inline-size:100%;max-block-size:var(--available-height);overflow-y:auto;scroll-padding-block:var(--select-list-padding);list-style:none;overscroll-behavior:contain;&:focus,&:focus-visible{outline:none}}.viraui__select-module__OptionText_UynBD{flex:1 1 auto;min-inline-size:0}.viraui__select-module__Option_KgYqz{border-radius:calc((var(--select-list-border-radius) + 0px) - var(--select-list-padding));cursor:pointer;&:focus{outline:none}&:focus-visible{outline:none;box-shadow:none}&:not([data-disabled]):hover,&:not([data-disabled])[data-highlighted]{background:var(--global-contrast);@container root not style(--vibrancy-enable: initial){background:oklab(from var(--global-contrast) l a b/12%)}}&[data-disabled]{color:var(--global-disabled-foreground);cursor:not-allowed}}.viraui__select-module__Indicator_YNUuz{inline-size:var(--space-medium);color:var(--global-primary);opacity:0;transition:opacity var(--duration-fast) var(--easing-standard),transform var(--duration-fast) var(--easing-standard);&[data-selected]{opacity:1}}.viraui__select-module__Group_xzkuA+.viraui__select-module__Group_xzkuA{margin-block-start:var(--space-medium)}.viraui__select-module__Separator_Q-ri9{block-size:1px;margin-block:var(--space-small);margin-inline:var(--space-small);background:var(--base-3)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.viraui__shimmer-module__Shimmer_1k-ZM{--shimmer-duration:var(--duration-slowest);--shimmer-spread:calc(3ch + var(--space-2x-large));--shimmer-angle:0deg;--shimmer-base:currentcolor;--shimmer-highlight:oklch(from var(--shimmer-base) min(calc(l + 0.35),1) c h);background-image:linear-gradient(calc(90deg + var(--shimmer-angle)),var(--shimmer-base) calc(50% - var(--shimmer-spread)),color-mix(in oklch,var(--shimmer-highlight),var(--shimmer-base) 50%) calc(50% - var(--shimmer-spread) * .5),var(--shimmer-highlight) 50%,color-mix(in oklch,var(--shimmer-highlight),var(--shimmer-base) 50%) calc(50% + var(--shimmer-spread) * .5),var(--shimmer-base) calc(50% + var(--shimmer-spread)));background-repeat:no-repeat;background-size:calc(200% + var(--shimmer-spread) * 2) 100%;background-position:0 0;background-clip:text;-webkit-text-fill-color:#0000;animation:viraui__shimmer-module__shimmer-slide_V1znC var(--shimmer-duration) linear infinite;&::selection{background-color:var(--global-primary);color:contrast-color(var(--global-primary));-webkit-text-fill-color:contrast-color(var(--global-primary));background-image:none;background-clip:initial;text-shadow:none}@media (prefers-reduced-motion:reduce){animation:none;background-image:none;-webkit-text-fill-color:currentcolor}}@keyframes viraui__shimmer-module__shimmer-slide_V1znC{0%{background-position:0 0}to{background-position:100% 0}}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { IntrinsicViraProps } from '../../core/props/intrinsic-vira-props';
|
|
2
|
+
import type * as React from 'react';
|
|
3
|
+
/**
|
|
4
|
+
* Public Shimmer props.
|
|
5
|
+
*
|
|
6
|
+
* Includes standard `span` attributes such as `children`, `id`, `title`, and event handlers,
|
|
7
|
+
* plus Vira-owned shimmer tuning controls.
|
|
8
|
+
*
|
|
9
|
+
* @default Native span pass-through props keep React defaults.
|
|
10
|
+
*/
|
|
11
|
+
export type ShimmerProps = React.ComponentPropsWithoutRef<'span'> & IntrinsicViraProps & {
|
|
12
|
+
/**
|
|
13
|
+
* Sets the shimmer sweep duration using any valid CSS time string.
|
|
14
|
+
*
|
|
15
|
+
* @default The CSS duration is `var(--duration-slowest)`.
|
|
16
|
+
*/
|
|
17
|
+
duration?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Sets the shimmer highlight spread using any valid CSS length string.
|
|
20
|
+
*
|
|
21
|
+
* @default The CSS spread is `calc(3ch + var(--space-2x-large))`.
|
|
22
|
+
*/
|
|
23
|
+
spread?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Sets the shimmer gradient angle offset using any valid CSS angle string.
|
|
26
|
+
*
|
|
27
|
+
* @default The CSS angle offset is `0deg`.
|
|
28
|
+
*/
|
|
29
|
+
angle?: string;
|
|
30
|
+
/**
|
|
31
|
+
* Overrides the shimmer highlight color when relative base lightness tuning is not used.
|
|
32
|
+
*
|
|
33
|
+
* @default The highlight increases base `currentColor` lightness.
|
|
34
|
+
*/
|
|
35
|
+
highlightColor?: string;
|
|
36
|
+
/**
|
|
37
|
+
* Ref forwarded to the rendered shimmer root element.
|
|
38
|
+
*
|
|
39
|
+
* @default No ref is attached.
|
|
40
|
+
*/
|
|
41
|
+
ref?: React.Ref<HTMLSpanElement>;
|
|
42
|
+
};
|
|
43
|
+
export declare const Shimmer: React.FC<ShimmerProps>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Shimmer",
|
|
3
|
+
"summary": "Decorative inline text shimmer that inherits typography and color from a parent text primitive.",
|
|
4
|
+
"whenToUse": [
|
|
5
|
+
"Loading placeholder copy inside Text or Title",
|
|
6
|
+
"Animated text shimmer while awaiting async content",
|
|
7
|
+
"Muted loading labels that keep the final text dimensions"
|
|
8
|
+
],
|
|
9
|
+
"whenNotToUse": [
|
|
10
|
+
"Block or fixed-dimension placeholders without text content",
|
|
11
|
+
"Standalone accessible loading status without a surrounding aria-busy region",
|
|
12
|
+
"Replacing Skeleton for non-text layout placeholders"
|
|
13
|
+
],
|
|
14
|
+
"accessibility": [
|
|
15
|
+
"Shimmer renders real text content — do not mark it aria-hidden",
|
|
16
|
+
"Announce loading on the surrounding region with aria-busy or live text",
|
|
17
|
+
"Reduced motion disables the sweep and restores normal text rendering"
|
|
18
|
+
],
|
|
19
|
+
"antiPatterns": [
|
|
20
|
+
"Putting aria-busy on Shimmer instead of the surrounding loading region",
|
|
21
|
+
"Using Shimmer without children text content",
|
|
22
|
+
"Using Shimmer for block placeholders better served by Skeleton"
|
|
23
|
+
],
|
|
24
|
+
"related": ["Text", "Title", "Skeleton"]
|
|
25
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import './shimmer.css';
|
|
2
|
+
import { clsx } from "../../core/clsx.js";
|
|
3
|
+
import { extractIntrinsicViraProps } from "../../core/props/intrinsic-vira-props.js";
|
|
4
|
+
import shimmer_module_default from "./shimmer.module.js";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
//#region src/components/shimmer/shimmer.tsx
|
|
7
|
+
var Shimmer = ({ angle, className, duration, highlightColor, ref, spread, style, ...otherProps }) => {
|
|
8
|
+
const { componentProps, intrinsicAttributes } = extractIntrinsicViraProps(otherProps);
|
|
9
|
+
const dynamicStyle = {
|
|
10
|
+
...duration && { "--shimmer-duration": duration },
|
|
11
|
+
...spread && { "--shimmer-spread": spread },
|
|
12
|
+
...angle && { "--shimmer-angle": angle },
|
|
13
|
+
...highlightColor && { "--shimmer-highlight": highlightColor },
|
|
14
|
+
...style
|
|
15
|
+
};
|
|
16
|
+
return /* @__PURE__ */ jsx("span", {
|
|
17
|
+
...componentProps,
|
|
18
|
+
...intrinsicAttributes,
|
|
19
|
+
ref,
|
|
20
|
+
className: clsx(shimmer_module_default.Shimmer, className),
|
|
21
|
+
style: dynamicStyle
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
//#endregion
|
|
25
|
+
export { Shimmer };
|
|
@@ -9,10 +9,10 @@ var Skeleton = ({ className, height, minHeight, minWidth, radius, ref, style, wi
|
|
|
9
9
|
const { componentProps, intrinsicAttributes } = extractIntrinsicViraProps(otherProps);
|
|
10
10
|
const dynamicStyle = {
|
|
11
11
|
"--skeleton-border-radius": resolveThemeValue(radius, "radius", "var(--radius-small)"),
|
|
12
|
-
...width
|
|
13
|
-
...height
|
|
14
|
-
...minWidth
|
|
15
|
-
...minHeight
|
|
12
|
+
...width && { "--skeleton-inline-size": width },
|
|
13
|
+
...height && { "--skeleton-block-size": height },
|
|
14
|
+
...minWidth && { "--skeleton-min-inline-size": minWidth },
|
|
15
|
+
...minHeight && { "--skeleton-min-block-size": minHeight },
|
|
16
16
|
...style
|
|
17
17
|
};
|
|
18
18
|
return /* @__PURE__ */ jsx("span", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.viraui__slider-module__Slider_vDNlm{--slider-track-size:var(--space-x-small);--slider-thumb-size:var(--space-medium);--slider-track-background:var(--global-contrast);--slider-progress-background:var(--global-primary);--slider-thumb-background:contrast-color(var(--global-primary));inline-size:100%;block-size:100%;min-inline-size:0;min-block-size:0;&:has([required]) .viraui__slider-module__Label_eQQHf:after{content:" *";color:var(--highlight-red)}&[data-invalid]{--slider-progress-background:var(--highlight-red)}&:has(.viraui__slider-module__SliderRoot_4JScw[data-disabled]),&[data-disabled]{--slider-track-background:var(--global-disabled-background);--slider-progress-background:var(--global-disabled-foreground);--slider-thumb-background:var(--global-disabled-foreground);cursor:not-allowed}}.viraui__slider-module__SliderRoot_4JScw{inline-size:100%;block-size:100%;min-inline-size:0;min-block-size:0}.viraui__slider-module__SliderHeader_gOy9k{inline-size:100%;min-inline-size:0}.viraui__slider-module__Value_FaY9i{flex-shrink:0}.viraui__slider-module__SliderControl_FQd5-{position:relative;flex:1 1 auto;user-select:none;touch-action:none;inline-size:100%;block-size:var(--slider-track-size);min-inline-size:0;min-block-size:0;&[data-orientation=vertical]{inline-size:var(--slider-track-size);block-size:100%;>.viraui__slider-module__Track_wvLEH{inline-size:var(--slider-track-size);block-size:100%}}}.viraui__slider-module__Track_wvLEH{position:relative;overflow:visible;inline-size:100%;block-size:var(--slider-track-size);background:var(--slider-track-background);border-radius:var(--radius-infinite)}.viraui__slider-module__Indicator_y3JyJ{background:var(--slider-progress-background);border-radius:inherit}.viraui__slider-module__Thumb_S-uLF{box-sizing:border-box;inline-size:var(--slider-thumb-size);block-size:calc(var(--slider-thumb-size) - 2px);background:var(--slider-thumb-background);border:2px solid var(--slider-progress-background);border-radius:var(--radius-x-small);appearance:none;transition:scale var(--easing-elastic) var(--duration-slow);&:not(:disabled,[data-disabled]){cursor:grab}&:not(:disabled,[data-disabled]):active,&:not(:disabled,[data-disabled]):has(>input:active),&:not(:disabled,[data-disabled])[data-dragging]:has(>input:focus){cursor:grabbing;scale:1.2}&:has(>input:focus-visible){outline:var(--outline);outline-offset:var(--outline-offset)}>input:focus-visible{outline:none}}
|
|
1
|
+
.viraui__slider-module__Slider_vDNlm{--slider-track-size:var(--space-x-small);--slider-thumb-size:var(--space-medium);--slider-track-background:var(--global-contrast);--slider-progress-background:var(--global-primary);--slider-thumb-background:contrast-color(var(--global-primary));inline-size:100%;block-size:100%;min-inline-size:0;min-block-size:0;&:has([required]) .viraui__slider-module__Label_eQQHf:after{content:" *";color:var(--highlight-red)}&[data-invalid]{--slider-progress-background:var(--highlight-red)}&:has(.viraui__slider-module__SliderRoot_4JScw[data-disabled]),&[data-disabled]{--slider-track-background:var(--global-disabled-background);--slider-progress-background:var(--global-disabled-foreground);--slider-thumb-background:var(--global-disabled-foreground);cursor:not-allowed}}.viraui__slider-module__SliderRoot_4JScw{inline-size:100%;block-size:100%;min-inline-size:0;min-block-size:0}.viraui__slider-module__SliderHeader_gOy9k{inline-size:100%;min-inline-size:0}.viraui__slider-module__Value_FaY9i{flex-shrink:0}.viraui__slider-module__SliderControl_FQd5-{position:relative;flex:1 1 auto;-webkit-user-select:none;user-select:none;touch-action:none;inline-size:100%;block-size:var(--slider-track-size);min-inline-size:0;min-block-size:0;&[data-orientation=vertical]{inline-size:var(--slider-track-size);block-size:100%;>.viraui__slider-module__Track_wvLEH{inline-size:var(--slider-track-size);block-size:100%}}}.viraui__slider-module__Track_wvLEH{position:relative;overflow:visible;inline-size:100%;block-size:var(--slider-track-size);background:var(--slider-track-background);border-radius:var(--radius-infinite)}.viraui__slider-module__Indicator_y3JyJ{background:var(--slider-progress-background);border-radius:inherit}.viraui__slider-module__Thumb_S-uLF{box-sizing:border-box;inline-size:var(--slider-thumb-size);block-size:calc(var(--slider-thumb-size) - 2px);background:var(--slider-thumb-background);border:2px solid var(--slider-progress-background);border-radius:var(--radius-x-small);appearance:none;transition:scale var(--easing-elastic) var(--duration-slow);&:not(:disabled,[data-disabled]){cursor:grab}&:not(:disabled,[data-disabled]):active,&:not(:disabled,[data-disabled]):has(>input:active),&:not(:disabled,[data-disabled])[data-dragging]:has(>input:focus){cursor:grabbing;scale:1.2}&:has(>input:focus-visible){outline:var(--outline);outline-offset:var(--outline-offset)}>input:focus-visible{outline:none}}
|
|
@@ -44,7 +44,7 @@ var Slider$1 = ({ className, defaultValue, description, dirty, disabled, error,
|
|
|
44
44
|
render: /* @__PURE__ */ jsx(Stack, {
|
|
45
45
|
direction: "column",
|
|
46
46
|
fillChildren: false,
|
|
47
|
-
rowGap: "
|
|
47
|
+
rowGap: "medium",
|
|
48
48
|
columnGap: "x-small",
|
|
49
49
|
vAlign: isVertical ? "stretch" : "center",
|
|
50
50
|
hAlign: isVertical ? "center" : "initial"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.viraui__stack-module__Stack_NR-Ey{--stack-row-gap:0;--stack-column-gap:0;--stack-h-align:initial;--stack-v-align:initial;--stack-padding-inline-start:0;--stack-padding-inline-end:0;--stack-padding-block-start:0;--stack-padding-block-end:0;display:flex;gap:var(--stack-row-gap) var(--stack-column-gap);flex-direction:column;align-items:var(--stack-h-align);justify-content:var(--stack-v-align);max-inline-size:var(--stack-max-width,none);min-inline-size:var(--stack-min-width,none);&[data-stack-direction=column-reverse]{flex-direction:column-reverse}&[data-stack-direction=row-reverse],&[data-stack-direction=row]{align-items:var(--stack-v-align);justify-content:var(--stack-h-align)}&[data-stack-direction=row]{flex-direction:row}&[data-stack-direction=row-reverse]{flex-direction:row-reverse}&[data-stack-inline=true]{display:inline-flex;flex-grow:0}:where(&[data-stack-wrap=true]){flex-wrap:wrap}:where(&[data-stack-has-padding=true]){padding:var(--stack-padding-block-start) var(--stack-padding-inline-end) var(--stack-padding-block-end) var(--stack-padding-inline-start)}:where(&[data-stack-fill-children=true]>*){flex-grow:var(--vira-flex-grow,1)}}
|
|
1
|
+
.viraui__stack-module__Stack_NR-Ey{--stack-row-gap:0;--stack-column-gap:0;--stack-h-align:initial;--stack-v-align:initial;--stack-padding-inline-start:0;--stack-padding-inline-end:0;--stack-padding-block-start:0;--stack-padding-block-end:0;container:stack/inline-size block-size;display:flex;gap:var(--stack-row-gap) var(--stack-column-gap);flex-direction:column;align-items:var(--stack-h-align);justify-content:var(--stack-v-align);max-inline-size:var(--stack-max-width,none);min-inline-size:var(--stack-min-width,none);&[data-stack-direction=column-reverse]{flex-direction:column-reverse}&[data-stack-direction=row-reverse],&[data-stack-direction=row]{align-items:var(--stack-v-align);justify-content:var(--stack-h-align)}&[data-stack-direction=row]{flex-direction:row}&[data-stack-direction=row-reverse]{flex-direction:row-reverse}&[data-stack-inline=true]{display:inline-flex;flex-grow:0}:where(&[data-stack-wrap=true]){flex-wrap:wrap}:where(&[data-stack-has-padding=true]){padding:var(--stack-padding-block-start) var(--stack-padding-inline-end) var(--stack-padding-block-end) var(--stack-padding-inline-start)}:where(&[data-stack-fill-children=true]>*){flex-grow:var(--vira-flex-grow,1)}}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useRender } from '@base-ui/react/use-render';
|
|
2
|
-
import { ThemeTypes } from '@viraui/foundation/vira/types';
|
|
3
2
|
import { IntrinsicViraProps } from '../../core/props/intrinsic-vira-props';
|
|
3
|
+
import { ThemeTypes } from '@viraui/foundation/vira/types';
|
|
4
4
|
import type * as React from 'react';
|
|
5
5
|
type StackAlignment = 'start' | 'center' | 'end' | 'stretch' | 'initial' | 'space-between' | 'space-around' | 'space-evenly';
|
|
6
6
|
type StackSpace = ThemeTypes['space'];
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "Stack",
|
|
3
|
-
"summary": "Flex layout primitive for arranging children with token spacing, alignment, and padding.",
|
|
3
|
+
"summary": "Flex layout primitive for arranging children with token spacing, alignment, and padding; root is a named CSS container query context (`stack`).",
|
|
4
4
|
"whenToUse": [
|
|
5
5
|
"Column or row layouts with token gap and alignment",
|
|
6
6
|
"Composing screens and component internals without custom flex CSS",
|
|
7
|
-
"Custom native root through render while keeping data-stack hooks"
|
|
7
|
+
"Custom native root through render while keeping data-stack hooks",
|
|
8
|
+
"Style descendants with @container stack queries when layout, gap, or typography should respond to the Stack's own inline-size and block-size instead of the viewport"
|
|
8
9
|
],
|
|
9
10
|
"whenNotToUse": [
|
|
10
11
|
"Cases where a single component already owns required flex chrome",
|
|
@@ -15,6 +16,9 @@
|
|
|
15
16
|
"Keep reading order aligned with visual order when using direction and wrap",
|
|
16
17
|
"Do not use Stack alone to imply grouping; use landmarks or headings where needed"
|
|
17
18
|
],
|
|
18
|
-
"antiPatterns": [
|
|
19
|
+
"antiPatterns": [
|
|
20
|
+
"Re-declaring primitive flex container rules in app CSS when Stack can own the layout",
|
|
21
|
+
"Using viewport media queries when @container stack queries against the rendered Stack size would match the design intent"
|
|
22
|
+
],
|
|
19
23
|
"related": ["Surface", "Text", "Button"]
|
|
20
24
|
}
|
|
@@ -14,8 +14,8 @@ var Stack = ({ className, direction = "column", fillChildren = true, hAlign = "i
|
|
|
14
14
|
"--stack-column-gap": resolveThemeValue(columnGap, "space", 0),
|
|
15
15
|
"--stack-h-align": hAlign,
|
|
16
16
|
"--stack-v-align": vAlign,
|
|
17
|
-
...maxWidth
|
|
18
|
-
...minWidth
|
|
17
|
+
...maxWidth && { "--stack-max-width": maxWidth },
|
|
18
|
+
...minWidth && { "--stack-min-width": minWidth },
|
|
19
19
|
...resolveAxisPadding(hPadding, "--stack-padding-inline-start", "--stack-padding-inline-end"),
|
|
20
20
|
...resolveAxisPadding(vPadding, "--stack-padding-block-start", "--stack-padding-block-end"),
|
|
21
21
|
...style
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.viraui__surface-module__Surface_slEYq{--surface-border-radius:0;--surface-border-radius-top-left:var(--surface-border-radius);--surface-border-radius-top-right:var(--surface-border-radius);--surface-border-radius-bottom-right:var(--surface-border-radius);--surface-border-radius-bottom-left:var(--surface-border-radius);--surface-padding-inline-start:0;--surface-padding-inline-end:0;--surface-padding-block-start:0;--surface-padding-block-end:0;--surface-background-hover:var(--surface-background);--surface-overflow:visible
|
|
1
|
+
.viraui__surface-module__Surface_slEYq{--surface-border-radius:0;--surface-border-radius-top-left:var(--surface-border-radius);--surface-border-radius-top-right:var(--surface-border-radius);--surface-border-radius-bottom-right:var(--surface-border-radius);--surface-border-radius-bottom-left:var(--surface-border-radius);--surface-padding-inline-start:0;--surface-padding-inline-end:0;--surface-padding-block-start:0;--surface-padding-block-end:0;--surface-background-hover:var(--surface-background);--surface-overflow:visible;container:surface/inline-size block-size;position:relative;overflow:var(--surface-overflow);box-sizing:border-box;background:var(--surface-background,#0000);border-radius:var(--surface-border-radius-top-left) var(--surface-border-radius-top-right) var(--surface-border-radius-bottom-right) var(--surface-border-radius-bottom-left);border:0;@container root not style(--vibrancy-enable: initial){&[data-vibrant]{background:oklab(from var(--surface-background) l a b/80%)}}&[data-surface-radius=auto]{--surface-border-radius-top-left:0;--surface-border-radius-top-right:0;--surface-border-radius-bottom-right:0;--surface-border-radius-bottom-left:0}&[data-surface-has-padding=true]{padding:var(--surface-padding-block-start) var(--surface-padding-inline-end) var(--surface-padding-block-end) var(--surface-padding-inline-start)}&[data-surface-border]{border-style:var(--surface-border-style,solid);border-color:var(--global-contrast)}&[data-surface-border=all]{border-width:1px}&[data-surface-border=top]{border-width:1px 0 0}&[data-surface-border=right]{border-width:0 1px 0 0}&[data-surface-border=bottom]{border-width:0 0 1px}&[data-surface-border=left]{border-width:0 0 0 1px}&[data-surface-border=x]{border-width:0 1px}&[data-surface-border=y]{border-width:1px 0}@media (hover:hover) and (pointer:fine){&[data-surface-has-hover-color=true]:hover{background:var(--surface-background-hover)}}}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "Surface",
|
|
3
|
-
"summary": "Presentational container with token background, optional border, radius, and padding; nested surfaces use radius=\"auto\" for concentric corners.",
|
|
3
|
+
"summary": "Presentational container with token background, optional border, radius, and padding; nested surfaces use radius=\"auto\" for concentric corners; root is a named CSS container query context (`surface`).",
|
|
4
4
|
"whenToUse": [
|
|
5
5
|
"Group content with base-level background and contrast border",
|
|
6
6
|
"Popup or card chrome with optional hover background",
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
"Set radius to a four-value tuple [top-left, top-right, bottom-right, bottom-left] when corners need different token radii",
|
|
10
10
|
"Set radius=\"auto\" on a nested Surface when its parent Surface has a radius so each corner subtracts the nearest ancestor padding and stays concentric",
|
|
11
11
|
"Stack nested auto-radius Surfaces recursively; context still resolves through wrapper layout such as Stack",
|
|
12
|
-
"Set overflow=\"hidden\" (or scroll/auto) when Surface must clip or scroll inner content with radius or padding"
|
|
12
|
+
"Set overflow=\"hidden\" (or scroll/auto) when Surface must clip or scroll inner content with radius or padding",
|
|
13
|
+
"Style descendants with @container surface queries when layout or typography should respond to the Surface's own inline-size and block-size instead of the viewport"
|
|
13
14
|
],
|
|
14
15
|
"whenNotToUse": [
|
|
15
16
|
"Interactive control semantics without an appropriate render root",
|
|
@@ -25,7 +26,8 @@
|
|
|
25
26
|
"Overwriting transition shorthand without composing box-shadow when data-elevation is present",
|
|
26
27
|
"Assuming hoverColor applies on touch devices",
|
|
27
28
|
"Reusing the parent token radius on nested Surfaces instead of radius=\"auto\" when concentric corners are required",
|
|
28
|
-
"Expecting radius=\"auto\" to inherit a token when the nearest ancestor Surface has no radius set"
|
|
29
|
+
"Expecting radius=\"auto\" to inherit a token when the nearest ancestor Surface has no radius set",
|
|
30
|
+
"Using viewport media queries when @container surface queries against the rendered Surface size would match the design intent"
|
|
29
31
|
],
|
|
30
32
|
"related": ["Elevator", "Stack"]
|
|
31
33
|
}
|
|
@@ -33,8 +33,8 @@ var Surface = ({ border, borderStyle = "solid", className, color, hPadding, hove
|
|
|
33
33
|
});
|
|
34
34
|
const dynamicStyle = {
|
|
35
35
|
"--surface-background": toSurfaceColor(color ?? "none"),
|
|
36
|
-
...hasHoverColor
|
|
37
|
-
...border
|
|
36
|
+
...hasHoverColor && { "--surface-background-hover": toSurfaceColor(hoverColor) },
|
|
37
|
+
...border && { "--surface-border-style": borderStyle },
|
|
38
38
|
"--surface-overflow": overflow,
|
|
39
39
|
...radiusStyle,
|
|
40
40
|
...resolveAxisPadding(hPadding, "--surface-padding-inline-start", "--surface-padding-inline-end"),
|
|
@@ -48,8 +48,8 @@ var Surface = ({ border, borderStyle = "solid", className, color, hPadding, hove
|
|
|
48
48
|
props: {
|
|
49
49
|
...componentProps,
|
|
50
50
|
...intrinsicAttributes,
|
|
51
|
-
...border
|
|
52
|
-
...hasAutoRadius
|
|
51
|
+
...border && { "data-surface-border": border },
|
|
52
|
+
...hasAutoRadius && { "data-surface-radius": "auto" },
|
|
53
53
|
"data-surface-has-hover-color": hasHoverColor ? "true" : "false",
|
|
54
54
|
"data-surface-has-padding": hasPadding ? "true" : "false",
|
|
55
55
|
className: clsx(surface_module_default.Surface, className),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.viraui__tabs-module__Tabs_AwbZZ{--tabs-translate-amount:10px;min-block-size:10rem}.viraui__tabs-module__Viewport_15X1I{display:grid;grid-template-columns:minmax(0,1fr);inline-size:100%}.viraui__tabs-module__List_XJorr{position:relative;overflow-x:auto}.viraui__tabs-module__Indicator_UyNUn{position:absolute;pointer-events:none;inset-block-start:var(--active-tab-top);inset-inline-start:var(--active-tab-left);inline-size:var(--active-tab-width);block-size:var(--active-tab-height);transition:inset-inline-start var(--duration-fast) var(--easing-standard),inset-block-start var(--duration-fast) var(--easing-standard),inline-size var(--duration-fast) var(--easing-standard),block-size var(--duration-fast) var(--easing-standard)}.viraui__tabs-module__Item_XZ86Z{position:relative;flex-shrink:0;cursor:pointer;flex-basis:0;transition:none;will-change:auto;&[data-variant]:not(:disabled):active{translate:0 0}&:hover
|
|
1
|
+
.viraui__tabs-module__Tabs_AwbZZ{--tabs-translate-amount:10px;min-block-size:10rem}.viraui__tabs-module__Viewport_15X1I{display:grid;grid-template-columns:minmax(0,1fr);inline-size:100%}.viraui__tabs-module__List_XJorr{position:relative;overflow-x:auto}.viraui__tabs-module__Indicator_UyNUn{position:absolute;pointer-events:none;inset-block-start:var(--active-tab-top);inset-inline-start:var(--active-tab-left);inline-size:var(--active-tab-width);block-size:var(--active-tab-height);transition:inset-inline-start var(--duration-fast) var(--easing-standard),inset-block-start var(--duration-fast) var(--easing-standard),inline-size var(--duration-fast) var(--easing-standard),block-size var(--duration-fast) var(--easing-standard)}.viraui__tabs-module__Item_XZ86Z{position:relative;flex-shrink:0;cursor:pointer;flex-basis:0;transition:none;will-change:auto;&[data-variant]:not(:disabled):active{translate:0 0}&:hover{background:#0000}&[data-disabled]{opacity:.5;background:#0000}&[data-active]{color:var(--global-foreground)}&:focus-visible{border-radius:var(--radius-small);outline-offset:0}}.viraui__tabs-module__Item_XZ86Z[data-active] .viraui__tabs-module__Label_5-8-Y{color:var(--global-foreground)}.viraui__tabs-module__Panel_vkCFI{grid-area:1/1;inline-size:100%;opacity:1;translate:0 0;transition:opacity var(--duration-fast) var(--easing-entrance),translate var(--duration-fast) var(--easing-entrance);&[data-ending-style]{pointer-events:none}&[data-ending-style],&[data-starting-style]{opacity:0}&[data-activation-direction=right][data-starting-style]{translate:var(--tabs-translate-amount) 0}&[data-activation-direction=left][data-starting-style],&[data-activation-direction=right][data-ending-style]{translate:calc(var(--tabs-translate-amount) * -1) 0}&[data-activation-direction=left][data-ending-style]{translate:var(--tabs-translate-amount) 0}&[data-activation-direction=none][data-ending-style],&[data-activation-direction=none][data-starting-style]{translate:0 var(--tabs-translate-amount)}&[hidden]{display:none}@media (prefers-reduced-motion:reduce){transition:none;&[data-ending-style],&[data-starting-style]{opacity:1;translate:0 0}}}
|
|
@@ -15,7 +15,7 @@ var Text = ({ align = "start", balanced = false, selection = true, className, co
|
|
|
15
15
|
"--text-white-space": whiteSpace,
|
|
16
16
|
"--text-trim": trim ? `trim-${trim}` : "initial",
|
|
17
17
|
"--text-trim-type": trim ? trimType : "initial",
|
|
18
|
-
...typeof weight === "number"
|
|
18
|
+
...typeof weight === "number" && { "--text-font-weight": weight },
|
|
19
19
|
"--text-font-width": fontWidth,
|
|
20
20
|
"--text-font-opsz": opticalSize,
|
|
21
21
|
...resolveAxisPadding(hPadding, "--text-padding-inline-start", "--text-padding-inline-end"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.viraui__textarea-module__Textarea_mtOUG{--textarea-min-block-size:calc(var(--space-x-large) * 2);--textarea-padding-block:var(--space-small);--textarea-input-border-radius:var(--radius-small);--field-label-padding-inline:calc(var(--textarea-input-border-radius) / 2);inline-size:100%;&:has([required]) .viraui__textarea-module__Label_5dOso:after{content:" *";color:var(--highlight-red)}}.viraui__textarea-module__CustomBasicInput_Ce7yA{--basic-input-border-radius:var(--textarea-input-border-radius);border:1px solid var(--global-contrast);min-block-size:var(--textarea-min-block-size);padding-block:var(--textarea-padding-block);line-height:1.4;resize:none;&[data-resize=vertical]{resize:vertical}&[data-resize=both]{resize:both}&[data-invalid]{border-color:var(--highlight-red)}&:disabled,&[data-disabled]{border-color
|
|
1
|
+
.viraui__textarea-module__Textarea_mtOUG{--textarea-min-block-size:calc(var(--space-x-large) * 2);--textarea-padding-block:var(--space-small);--textarea-input-border-radius:var(--radius-small);--field-label-padding-inline:calc(var(--textarea-input-border-radius) / 2);inline-size:100%;&:has([required]) .viraui__textarea-module__Label_5dOso:after{content:" *";color:var(--highlight-red)}}.viraui__textarea-module__CustomBasicInput_Ce7yA{--basic-input-border-radius:var(--textarea-input-border-radius);border:1px solid var(--global-contrast);min-block-size:var(--textarea-min-block-size);padding-block:var(--textarea-padding-block);line-height:1.4;resize:none;&[data-resize=vertical]{resize:vertical}&[data-resize=both]{resize:both}&[data-invalid]{border-color:var(--highlight-red)}&:disabled,&[data-disabled]{border-color:#0000}}.viraui__textarea-module__Description_er3zI{padding-inline:calc(var(--textarea-input-border-radius) / 2)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.viraui__textfield-module__Textfield_o-70A{--input-height:var(--space-x-large);--control-group-background:var(--base-1);--control-group-color:var(--global-foreground);--control-group-border-color:var(--global-contrast);--control-group-border-radius:var(--radius-medium);--field-label-padding-inline:calc(var(--control-group-border-radius) / 2);inline-size:100%;&:has([required]) .viraui__textfield-module__Label_5rjr0:after{content:" *";color:var(--highlight-red)}}.viraui__textfield-module__ControlGroup_2W-OC{box-sizing:border-box;inline-size:100%;min-inline-size:0;block-size:var(--input-height);background:var(--control-group-background);border:1px solid var(--control-group-border-color);border-radius:var(--control-group-border-radius);&:has(.viraui__textfield-module__CustomBasicInput_oHgtd:focus-visible),&:has(.viraui__textfield-module__CustomBasicInput_oHgtd[data-focused]){outline:var(--outline);outline-offset:var(--outline-offset)}&:has(.viraui__textfield-module__CustomBasicInput_oHgtd[data-invalid]){--control-group-border-color:var(--highlight-red);box-shadow:none;outline-color:oklab(from var(--highlight-red) l a b/.5)}&:has(.viraui__textfield-module__CustomBasicInput_oHgtd:disabled),&:has(.viraui__textfield-module__CustomBasicInput_oHgtd[data-disabled]){--control-group-background:var(--global-disabled-background);--control-group-border-color
|
|
1
|
+
.viraui__textfield-module__Textfield_o-70A{--input-height:var(--space-x-large);--control-group-background:var(--base-1);--control-group-color:var(--global-foreground);--control-group-border-color:var(--global-contrast);--control-group-border-radius:var(--radius-medium);--field-label-padding-inline:calc(var(--control-group-border-radius) / 2);inline-size:100%;&:has([required]) .viraui__textfield-module__Label_5rjr0:after{content:" *";color:var(--highlight-red)}}.viraui__textfield-module__ControlGroup_2W-OC{box-sizing:border-box;inline-size:100%;min-inline-size:0;block-size:var(--input-height);background:var(--control-group-background);border:1px solid var(--control-group-border-color);border-radius:var(--control-group-border-radius);&:has(.viraui__textfield-module__CustomBasicInput_oHgtd:focus-visible),&:has(.viraui__textfield-module__CustomBasicInput_oHgtd[data-focused]){outline:var(--outline);outline-offset:var(--outline-offset)}&:has(.viraui__textfield-module__CustomBasicInput_oHgtd[data-invalid]){--control-group-border-color:var(--highlight-red);box-shadow:none;outline-color:oklab(from var(--highlight-red) l a b/.5)}&:has(.viraui__textfield-module__CustomBasicInput_oHgtd:disabled),&:has(.viraui__textfield-module__CustomBasicInput_oHgtd[data-disabled]){--control-group-background:var(--global-disabled-background);--control-group-border-color:#0000;box-shadow:none;cursor:not-allowed}&:has(.viraui__textfield-module__Addon_kK1ef[data-position=start])>.viraui__textfield-module__CustomBasicInput_oHgtd{padding-inline-start:var(--space-x-small)}&:has(.viraui__textfield-module__Addon_kK1ef[data-position=end])>.viraui__textfield-module__CustomBasicInput_oHgtd{padding-inline-end:var(--space-x-small)}}.viraui__textfield-module__CustomBasicInput_oHgtd{flex:1 1 auto;min-inline-size:0;block-size:100%;line-height:1.2;border:none;background:#0000;box-shadow:none;border-radius:inherit;&:focus-visible{outline:none}&:disabled{cursor:not-allowed}}.viraui__textfield-module__Addon_kK1ef{min-inline-size:var(--space-x-large)}.viraui__textfield-module__Description_8Qxot{padding-inline:calc(var(--control-group-border-radius) / 2)}
|
|
@@ -15,7 +15,7 @@ var Title = ({ align = "start", balanced = false, selection = true, className, c
|
|
|
15
15
|
"--title-white-space": whiteSpace,
|
|
16
16
|
"--title-trim": trim ? `trim-${trim}` : "initial",
|
|
17
17
|
"--title-trim-type": trim ? trimType : "initial",
|
|
18
|
-
...typeof weight === "number"
|
|
18
|
+
...typeof weight === "number" && { "--title-font-weight": weight },
|
|
19
19
|
"--title-font-width": fontWidth,
|
|
20
20
|
"--title-font-opsz": opticalSize,
|
|
21
21
|
...resolveAxisPadding(hPadding, "--title-padding-inline-start", "--title-padding-inline-end"),
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ToastAction as ToastActionNamespace } from '@base-ui/react/toast';
|
|
2
|
+
import type * as React from 'react';
|
|
3
|
+
/**
|
|
4
|
+
* Public Toast.Action props.
|
|
5
|
+
*
|
|
6
|
+
* @default Base UI pass-through props keep upstream defaults.
|
|
7
|
+
*/
|
|
8
|
+
export type ToastActionProps = ToastActionNamespace.Props;
|
|
9
|
+
export declare const ToastAction: React.FC<ToastActionProps>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Button } from "../button/button.js";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { Toast } from "@base-ui/react/toast";
|
|
4
|
+
//#region src/components/toast/toast-action.tsx
|
|
5
|
+
var ToastAction = ({ render, ...props }) => /* @__PURE__ */ jsx(Toast.Action, {
|
|
6
|
+
render: render ?? /* @__PURE__ */ jsx(Button, { variant: "secondary" }),
|
|
7
|
+
...props
|
|
8
|
+
});
|
|
9
|
+
//#endregion
|
|
10
|
+
export { ToastAction };
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { ToastRoot as ToastRootNamespace } from '@base-ui/react/toast';
|
|
2
|
+
import { ToastActionProps } from './toast-action';
|
|
3
|
+
import type * as React from 'react';
|
|
4
|
+
type ToastBannerChildren = React.ReactElement<ToastActionProps> | React.ReactElement<ToastActionProps>[];
|
|
5
|
+
/**
|
|
6
|
+
* Public Toast.Banner props.
|
|
7
|
+
*
|
|
8
|
+
* High-level toast API with heading from `title`, optional `description`, and Toast.Action children.
|
|
9
|
+
*/
|
|
10
|
+
export type ToastBannerProps = ToastRootNamespace.Props & {
|
|
11
|
+
/**
|
|
12
|
+
* Toast instance from `useToastManager().toasts` or `createToastManager()`.
|
|
13
|
+
*/
|
|
14
|
+
toast: ToastRootNamespace.ToastObject;
|
|
15
|
+
/**
|
|
16
|
+
* Heading above the description. Falls back to `toast.title` from `toastManager.add`.
|
|
17
|
+
*
|
|
18
|
+
* @default `toast.title` when set on the toast instance.
|
|
19
|
+
*/
|
|
20
|
+
title?: React.ReactNode;
|
|
21
|
+
/**
|
|
22
|
+
* Supporting copy below the title.
|
|
23
|
+
*
|
|
24
|
+
* @default No description is rendered.
|
|
25
|
+
*/
|
|
26
|
+
description?: React.ReactNode;
|
|
27
|
+
/**
|
|
28
|
+
* Whether to render the dismiss control.
|
|
29
|
+
*
|
|
30
|
+
* @default true
|
|
31
|
+
*/
|
|
32
|
+
dismissable?: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Label for the dismiss control.
|
|
35
|
+
*
|
|
36
|
+
* @default 'Dismiss'
|
|
37
|
+
*/
|
|
38
|
+
dismissLabel?: React.ReactNode;
|
|
39
|
+
/**
|
|
40
|
+
* Called when the dismiss control is activated, before Base UI closes the toast.
|
|
41
|
+
*
|
|
42
|
+
* @default No callback is invoked.
|
|
43
|
+
*/
|
|
44
|
+
onDismiss?: () => void;
|
|
45
|
+
/**
|
|
46
|
+
* Optional action buttons. Accepts a single `Toast.Action` or an array of them.
|
|
47
|
+
*
|
|
48
|
+
* @default No actions are rendered.
|
|
49
|
+
*/
|
|
50
|
+
children?: ToastBannerChildren;
|
|
51
|
+
/**
|
|
52
|
+
* Class name forwarded to the toast root.
|
|
53
|
+
*
|
|
54
|
+
* @default No extra class name.
|
|
55
|
+
*/
|
|
56
|
+
className?: string;
|
|
57
|
+
};
|
|
58
|
+
export declare const ToastBanner: React.FC<ToastBannerProps>;
|
|
59
|
+
export {};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { clsx } from "../../core/clsx.js";
|
|
2
|
+
import { Stack } from "../stack/stack.js";
|
|
3
|
+
import { Button } from "../button/button.js";
|
|
4
|
+
import { Text } from "../text/text.js";
|
|
5
|
+
import { Surface } from "../surface/surface.js";
|
|
6
|
+
import toast_module_default from "./toast.module.js";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
import { Toast } from "@base-ui/react/toast";
|
|
9
|
+
//#region src/components/toast/toast-banner.tsx
|
|
10
|
+
var ToastBanner = ({ children, className, description, dismissable = true, dismissLabel = "Dismiss", onDismiss, toast, title, ...otherProps }) => {
|
|
11
|
+
const actions = children ? [children].flat() : [];
|
|
12
|
+
const resolvedTitle = title ?? toast.title;
|
|
13
|
+
const resolvedDescription = description ?? toast.description;
|
|
14
|
+
return /* @__PURE__ */ jsx(Toast.Root, {
|
|
15
|
+
...otherProps,
|
|
16
|
+
toast,
|
|
17
|
+
className: clsx(toast_module_default.Banner, className),
|
|
18
|
+
render: /* @__PURE__ */ jsx(Surface, {
|
|
19
|
+
color: 1,
|
|
20
|
+
border: "all",
|
|
21
|
+
radius: "large",
|
|
22
|
+
vibrant: true
|
|
23
|
+
}),
|
|
24
|
+
...!resolvedTitle && resolvedDescription && { "aria-label": typeof resolvedDescription === "string" ? resolvedDescription : void 0 },
|
|
25
|
+
children: /* @__PURE__ */ jsxs(Toast.Content, {
|
|
26
|
+
render: /* @__PURE__ */ jsx(Stack, {
|
|
27
|
+
className: toast_module_default.Content,
|
|
28
|
+
columnGap: "medium",
|
|
29
|
+
direction: "row",
|
|
30
|
+
fillChildren: false,
|
|
31
|
+
hAlign: "space-between",
|
|
32
|
+
vAlign: "center",
|
|
33
|
+
hPadding: "large",
|
|
34
|
+
vPadding: "large"
|
|
35
|
+
}),
|
|
36
|
+
children: [/* @__PURE__ */ jsxs(Stack, {
|
|
37
|
+
fillChildren: false,
|
|
38
|
+
rowGap: "small",
|
|
39
|
+
children: [resolvedTitle && /* @__PURE__ */ jsx(Toast.Title, {
|
|
40
|
+
render: /* @__PURE__ */ jsx(Text, { size: "medium" }),
|
|
41
|
+
children: resolvedTitle
|
|
42
|
+
}), resolvedDescription && /* @__PURE__ */ jsx(Toast.Description, {
|
|
43
|
+
render: /* @__PURE__ */ jsx(Text, {
|
|
44
|
+
size: "small",
|
|
45
|
+
tone: "muted",
|
|
46
|
+
render: /* @__PURE__ */ jsx("p", {})
|
|
47
|
+
}),
|
|
48
|
+
children: resolvedDescription
|
|
49
|
+
})]
|
|
50
|
+
}), (dismissable || Boolean(actions.length)) && /* @__PURE__ */ jsxs(Stack, {
|
|
51
|
+
columnGap: "small",
|
|
52
|
+
direction: "row",
|
|
53
|
+
fillChildren: false,
|
|
54
|
+
children: [dismissable && /* @__PURE__ */ jsx(Toast.Close, {
|
|
55
|
+
render: /* @__PURE__ */ jsx(Button, { variant: "secondary" }),
|
|
56
|
+
onClick: () => {
|
|
57
|
+
onDismiss?.();
|
|
58
|
+
},
|
|
59
|
+
children: dismissLabel
|
|
60
|
+
}), Boolean(actions.length) && actions]
|
|
61
|
+
})]
|
|
62
|
+
})
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
//#endregion
|
|
66
|
+
export { ToastBanner };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ToastViewport as ToastViewportNamespace } from '@base-ui/react/toast';
|
|
2
|
+
import type * as React from 'react';
|
|
3
|
+
export type ToastViewportPosition = 'bottom-right' | 'bottom-left' | 'bottom-center' | 'top-right' | 'top-left' | 'top-center' | 'anchored';
|
|
4
|
+
/**
|
|
5
|
+
* Public Toast.Viewport props.
|
|
6
|
+
*
|
|
7
|
+
* @default `position` is `bottom-right`.
|
|
8
|
+
*/
|
|
9
|
+
export type ToastViewportProps = ToastViewportNamespace.Props & {
|
|
10
|
+
/**
|
|
11
|
+
* Controls viewport placement and stacking layout hooks.
|
|
12
|
+
*
|
|
13
|
+
* @default 'bottom-right'
|
|
14
|
+
*/
|
|
15
|
+
position?: ToastViewportPosition;
|
|
16
|
+
};
|
|
17
|
+
export declare const ToastViewport: React.FC<ToastViewportProps>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { clsx } from "../../core/clsx.js";
|
|
2
|
+
import toast_module_default from "./toast.module.js";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
import { Toast } from "@base-ui/react/toast";
|
|
5
|
+
//#region src/components/toast/toast-viewport.tsx
|
|
6
|
+
var ToastViewport = ({ className, position = "bottom-right", ...props }) => /* @__PURE__ */ jsx(Toast.Viewport, {
|
|
7
|
+
className: clsx(toast_module_default.Viewport, className),
|
|
8
|
+
"data-position": position,
|
|
9
|
+
...props
|
|
10
|
+
});
|
|
11
|
+
//#endregion
|
|
12
|
+
export { ToastViewport };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.viraui__toast-module__Viewport_oSF5e{position:fixed;z-index:4;pointer-events:none;outline:0;inline-size:min(24rem,calc(100vw - 2 * var(--space-medium)));&[data-position=bottom-right]{inset-block-end:var(--space-medium);inset-inline-end:var(--space-medium)}&[data-position=bottom-left]{inset-block-end:var(--space-medium);inset-inline-start:var(--space-medium)}&[data-position=bottom-center]{inset-block-end:var(--space-medium);inset-inline:0;margin-inline:auto}&[data-position=top-right]{inset-block-start:var(--space-medium);inset-inline-end:var(--space-medium)}&[data-position=top-left]{inset-block-start:var(--space-medium);inset-inline-start:var(--space-medium)}&[data-position=top-center]{inset-block-start:var(--space-medium);inset-inline:0;margin-inline:auto}&[data-position=anchored]{inset:0;inline-size:auto}&>*{pointer-events:auto}}.viraui__toast-module__Banner_QkOlo{--gap:var(--space-small);--peek:var(--space-small);--scale:calc(max(0, 1 - (var(--toast-index, 0) * 0.1)));--shrink:calc(1 - var(--scale));--stack-height:var(--toast-frontmost-height,var(--toast-height,0px));--offset-y:calc(var(--toast-offset-y, 0px) * -1 + (var(--toast-index, 0) * var(--gap) * -1) + var(--toast-swipe-movement-y, 0px));position:absolute;inset-inline-end:0;inset-block-end:0;z-index:calc(1000 - var(--toast-index, 0));inline-size:100%;min-inline-size:16rem;will-change:translate,scale,opacity;block-size:var(--toast-frontmost-height,var(--toast-height,auto));transform-origin:bottom center;translate:var(--toast-swipe-movement-x,0) calc(var(--toast-swipe-movement-y, 0px) - (var(--toast-index, 0) * var(--peek)) - (var(--shrink) * var(--stack-height)));scale:var(--scale);transition:translate var(--duration-slow) var(--easing-elastic),scale var(--duration-slow) var(--easing-elastic),opacity var(--duration-slow) var(--easing-elastic);-webkit-user-select:none;user-select:none;&[data-expanded]{translate:var(--toast-swipe-movement-x,0) var(--offset-y);scale:1;block-size:var(--toast-height,auto)}&[data-starting-style]{translate:0 150%;scale:1}&[data-ending-style]{opacity:0;translate:0 150%;scale:1;&[data-swipe-direction=up]{translate:0 calc(var(--toast-swipe-movement-y, 0px) - 150%)}&[data-swipe-direction=down]{translate:0 calc(var(--toast-swipe-movement-y, 0px) + 150%)}&[data-swipe-direction=left]{translate:calc(var(--toast-swipe-movement-x, 0px) - 150%) var(--offset-y)}&[data-swipe-direction=right]{translate:calc(var(--toast-swipe-movement-x, 0px) + 150%) var(--offset-y)}}&[data-limited]{opacity:0}&:after{content:"";position:absolute;inset-block-start:100%;inset-inline-start:0;inline-size:100%;block-size:calc(var(--gap) + 1px)}@media (prefers-reduced-motion:reduce){transition:none}}:is(.viraui__toast-module__Viewport_oSF5e[data-position=bottom-left],.viraui__toast-module__Viewport_oSF5e[data-position=top-left]) .viraui__toast-module__Banner_QkOlo{inset-inline-end:auto;inset-inline-start:0}:is(.viraui__toast-module__Viewport_oSF5e[data-position=bottom-center],.viraui__toast-module__Viewport_oSF5e[data-position=top-center]) .viraui__toast-module__Banner_QkOlo{inset-inline:0;margin-inline:auto}.viraui__toast-module__Viewport_oSF5e[data-position^=top-] .viraui__toast-module__Banner_QkOlo{inset-block-end:auto;inset-block-start:0;transform-origin:top center;--offset-y:calc(var(--toast-offset-y, 0px) + (var(--toast-index, 0) * var(--gap)) + var(--toast-swipe-movement-y, 0px));translate:var(--toast-swipe-movement-x,0) calc(var(--toast-swipe-movement-y, 0px) + (var(--toast-index, 0) * var(--peek)) + (var(--shrink) * var(--stack-height)));scale:var(--scale);&:after{inset-block-start:auto;inset-block-end:100%}&[data-expanded]{translate:var(--toast-swipe-movement-x,0) var(--offset-y);scale:1}&[data-ending-style]:not([data-swipe-direction]),&[data-starting-style]{translate:0 -150%;scale:1}}.viraui__toast-module__Viewport_oSF5e[data-position=anchored] .viraui__toast-module__Banner_QkOlo{position:static;z-index:auto;min-inline-size:auto;block-size:auto;translate:0;scale:1;&:after{content:none}transition:translate var(--duration-slow) var(--easing-elastic),scale var(--duration-slow) var(--easing-elastic),opacity var(--duration-slow) var(--easing-elastic);&[data-ending-style],&[data-starting-style]{opacity:0;translate:0 var(--space-2x-small);scale:1}&[data-expanded]{translate:0;scale:1}}.viraui__toast-module__Content_5ODZr{overflow:hidden;transition:opacity .25s ease;&[data-behind]{opacity:0}&[data-expanded]{opacity:1}@media (prefers-reduced-motion:reduce){transition:none}}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ToastObject, Toast as PrimitiveToast } from '@base-ui/react/toast';
|
|
2
|
+
import { ToastActionProps } from './toast-action';
|
|
3
|
+
import { ToastBannerProps } from './toast-banner';
|
|
4
|
+
import { ToastViewportProps } from './toast-viewport';
|
|
5
|
+
import type * as React from 'react';
|
|
6
|
+
export type { ToastActionProps, ToastBannerProps, ToastObject, ToastViewportProps };
|
|
7
|
+
type ToastComponent = Omit<typeof PrimitiveToast, 'Viewport' | 'Action' | 'Arrow'> & {
|
|
8
|
+
Viewport: React.FC<ToastViewportProps>;
|
|
9
|
+
Banner: React.FC<ToastBannerProps>;
|
|
10
|
+
Action: React.FC<ToastActionProps>;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Compound toast namespace built on Base UI Toast primitives.
|
|
14
|
+
*
|
|
15
|
+
* Compose `Toast.Provider`, `Toast.Portal`, and `Toast.Viewport` with `Toast.Banner`
|
|
16
|
+
* for stacked notifications, or wrap anchored toasts in `Toast.Positioner`.
|
|
17
|
+
*/
|
|
18
|
+
export declare const Toast: ToastComponent;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Toast",
|
|
3
|
+
"summary": "Transient notification surface with stacked or anchored placement, Banner high-level API, and optional action buttons.",
|
|
4
|
+
"whenToUse": [
|
|
5
|
+
"Confirming a completed action such as save or delete",
|
|
6
|
+
"Offering a short undo window after a reversible change",
|
|
7
|
+
"Showing contextual feedback anchored to the control that triggered it"
|
|
8
|
+
],
|
|
9
|
+
"whenNotToUse": [
|
|
10
|
+
"Blocking errors that need immediate correction — use inline field errors or a dialog",
|
|
11
|
+
"Persistent status that should stay visible — use inline status text or a banner pattern",
|
|
12
|
+
"Long-form content that needs reading time — use a dialog or dedicated panel"
|
|
13
|
+
],
|
|
14
|
+
"accessibility": [
|
|
15
|
+
"Pass title and description strings to toastManager.add for screen reader announcements on high-priority toasts",
|
|
16
|
+
"Keep toast copy concise; users can navigate the toast viewport landmark with F6",
|
|
17
|
+
"Ensure action and dismiss controls have visible labels",
|
|
18
|
+
"Use anchored toasts for contextual feedback tied to a specific trigger"
|
|
19
|
+
],
|
|
20
|
+
"antiPatterns": [
|
|
21
|
+
"Nesting arbitrary components inside Toast.Banner — children must be Toast.Action only",
|
|
22
|
+
"Stacking many simultaneous toasts without a clear limit",
|
|
23
|
+
"Using toasts for critical validation errors that block task completion"
|
|
24
|
+
],
|
|
25
|
+
"related": ["Button", "Surface", "Stack", "Dialog"]
|
|
26
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import './toast.css';
|
|
3
|
+
import { ToastAction } from "./toast-action.js";
|
|
4
|
+
import { ToastBanner } from "./toast-banner.js";
|
|
5
|
+
import { ToastViewport } from "./toast-viewport.js";
|
|
6
|
+
import { Toast } from "@base-ui/react/toast";
|
|
7
|
+
//#region src/components/toast/toast.tsx
|
|
8
|
+
var { Arrow: _PrimitiveToastArrow, Viewport: _PrimitiveToastViewport, Action: _PrimitiveToastAction, ...primitiveToast } = Toast;
|
|
9
|
+
/**
|
|
10
|
+
* Compound toast namespace built on Base UI Toast primitives.
|
|
11
|
+
*
|
|
12
|
+
* Compose `Toast.Provider`, `Toast.Portal`, and `Toast.Viewport` with `Toast.Banner`
|
|
13
|
+
* for stacked notifications, or wrap anchored toasts in `Toast.Positioner`.
|
|
14
|
+
*/
|
|
15
|
+
var Toast$1 = {
|
|
16
|
+
...primitiveToast,
|
|
17
|
+
Viewport: ToastViewport,
|
|
18
|
+
Banner: ToastBanner,
|
|
19
|
+
Action: ToastAction
|
|
20
|
+
};
|
|
21
|
+
//#endregion
|
|
22
|
+
export { Toast$1 as Toast };
|
|
@@ -4,9 +4,9 @@ var extractIntrinsicViraProps = (props) => {
|
|
|
4
4
|
return {
|
|
5
5
|
componentProps,
|
|
6
6
|
intrinsicAttributes: {
|
|
7
|
-
...grow === false
|
|
8
|
-
...shrink === false
|
|
9
|
-
...vibrant
|
|
7
|
+
...grow === false && { "data-grow": "false" },
|
|
8
|
+
...shrink === false && { "data-shrink": "false" },
|
|
9
|
+
...vibrant && { "data-vibrant": "" }
|
|
10
10
|
}
|
|
11
11
|
};
|
|
12
12
|
};
|
package/dist/index.js
CHANGED
|
@@ -29,11 +29,13 @@ import { Radio } from "./components/radio/radio.js";
|
|
|
29
29
|
import { RadioGroup } from "./components/radio/radio-group.js";
|
|
30
30
|
import { Select } from "./components/select/select.js";
|
|
31
31
|
import { Separator } from "./components/separator/separator.js";
|
|
32
|
+
import { Shimmer } from "./components/shimmer/shimmer.js";
|
|
32
33
|
import { Icon } from "./components/icon/icon.js";
|
|
33
34
|
import { Skeleton } from "./components/skeleton/skeleton.js";
|
|
34
35
|
import { Surface } from "./components/surface/surface.js";
|
|
35
36
|
import { Tabs } from "./components/tabs/tabs.js";
|
|
37
|
+
import { Toast } from "./components/toast/toast.js";
|
|
36
38
|
import { StaticNoise } from "./components/static-noise/static-noise.js";
|
|
37
39
|
import { ProgressiveBlur } from "./components/progressive-blur/progressive-blur.js";
|
|
38
40
|
import { Title } from "./components/title/title.js";
|
|
39
|
-
export { Avatar, AvatarGroup, Button, Checkbox, CheckboxGroup, Chip, ClampText, Dialog, DialogClose, DialogIndent, DialogIndentBackground, DialogSheet, DialogTrigger, ELEVATION_DEFAULTS, Elevator, Fieldset, Icon, IconButton, LinearProgress, Masonry, ProgressiveBlur, Radio, RadioGroup, Select, Separator, Skeleton, Slider, Spinner, Stack, StaticNoise, Surface, Switch, Tabs, Text, Textarea, Textfield, Title, getElevationProps };
|
|
41
|
+
export { Avatar, AvatarGroup, Button, Checkbox, CheckboxGroup, Chip, ClampText, Dialog, DialogClose, DialogIndent, DialogIndentBackground, DialogSheet, DialogTrigger, ELEVATION_DEFAULTS, Elevator, Fieldset, Icon, IconButton, LinearProgress, Masonry, ProgressiveBlur, Radio, RadioGroup, Select, Separator, Shimmer, Skeleton, Slider, Spinner, Stack, StaticNoise, Surface, Switch, Tabs, Text, Textarea, Textfield, Title, Toast, getElevationProps };
|
package/dist/preflight.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer viraui.preflight;@layer viraui.preflight{html{--scrollbar-thumb:light-dark(var(--base-4),var(--base-3));--scrollbar-track
|
|
1
|
+
@layer viraui.preflight;@layer viraui.preflight{html{--scrollbar-thumb:light-dark(var(--base-4),var(--base-3));--scrollbar-track:#0000;--outline-offset:2px;--outline-color:var(--global-outline);--outline:2px solid var(--outline-color);font-size:100%;box-sizing:border-box;line-height:1.5;background-color:var(--global-background);color:var(--global-foreground);container:root/normal}*{@container root not style(--corner-shape-enable: initial){corner-shape:var(--corner-shape-squircle)}}*,:after,:before{margin:0;box-sizing:inherit;scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb) var(--scrollbar-track)}:focus-visible{outline:var(--outline);outline-offset:var(--outline-offset)}body{color:var(--global-foreground);margin:0;font-size:var(--font-scale-body-medium);font-optical-sizing:auto;font-family:var(--font-family-body),sans-serif;font-variation-settings:"wght" 400;font-variant-numeric:tabular-nums}::selection{background-color:var(--global-primary);color:contrast-color(var(--global-primary));text-shadow:none}img{display:block;inline-size:100%;max-inline-size:100%}svg:not([fill]){fill:currentcolor}ol ul,ul ol{font-size:medium}table{border-spacing:0;inline-size:100%;border-collapse:collapse}table[data-layout-fixed]{table-layout:fixed}table thead{box-shadow:inset 0 -3px 0 var(--base-2)}table[data-table-separators] tr+tr{border-top:1px solid var(--base-2)}table th{white-space:nowrap;font-variation-settings:"wght" 800}table :is(td,th){border:none;text-align:left;font-size:medium;padding:calc(var(--space-x-small) + var(--space-2x-small)) var(--space-small)}fieldset{padding:0;margin:0;border:0}[data-elevation]{--shadow-direction:1;--shadow-opacity-factor:0.16;--extra-shadow:0 0 0 1px #0000;--shadow-color:oklab(0 0 0);transition-property:box-shadow;transition-duration:var(--elevation-transition-duration,.16s);transition-timing-function:var(--elevation-transition-easing,ease)}}@layer viraui.preflight{[data-elevation]:where([data-elevation-direction=bottom],[data-elevation-direction=right]){--shadow-direction:1}[data-elevation]:where([data-elevation-direction=top],[data-elevation-direction=left]){--shadow-direction:-1}[data-elevation-hover="0"]:hover,[data-elevation="0"]{--y1:0px;--x1:0px;box-shadow:calc(var(--x1) * var(--shadow-direction)) calc(var(--y1) * var(--shadow-direction)) 0 oklch(from var(--shadow-color) l c h/var(--shadow-opacity-factor)),0 0 0 color-mix(in oklch,var(--shadow-color),#0000 calc(94% - var(--shadow-opacity-factor))),0 0 0 oklch(from var(--shadow-color) l c h/var(--shadow-opacity-factor)),var(--extra-shadow)}[data-elevation-hover="1"]:hover,[data-elevation-hover="2"]:hover,[data-elevation-hover="3"]:hover,[data-elevation-hover="4"]:hover,[data-elevation="1"],[data-elevation="2"],[data-elevation="3"],[data-elevation="4"]{box-shadow:calc(var(--x1) * var(--shadow-direction)) calc(var(--y1) * var(--shadow-direction)) var(--shadow-blur-1) oklab(from var(--shadow-color) l a b/.1),calc(var(--x2) * var(--shadow-direction)) calc(var(--y2) * var(--shadow-direction)) var(--shadow-blur-2) oklab(from var(--shadow-color) l a b/.09),calc(var(--x3) * var(--shadow-direction)) calc(var(--y3) * var(--shadow-direction)) var(--shadow-blur-3) oklab(from var(--shadow-color) l a b/.05),calc(var(--x4) * var(--shadow-direction)) calc(var(--y4) * var(--shadow-direction)) var(--shadow-blur-4) oklab(from var(--shadow-color) l a b/.01),var(--extra-shadow)}[data-elevation-hover="1"]:hover,[data-elevation="1"]{--y1:0px;--y2:2px;--y3:4px;--y4:7px;--x1:0px;--x2:0px;--x3:0px;--x4:0px;--shadow-blur-1:1px;--shadow-blur-2:2px;--shadow-blur-3:2px;--shadow-blur-4:3px}[data-elevation-hover="1"]:where([data-elevation-direction=left],[data-elevation-direction=right]):hover,[data-elevation="1"]:where([data-elevation-direction=left],[data-elevation-direction=right]){--y1:0px;--y2:0px;--y3:0px;--y4:0px;--x1:0px;--x2:2px;--x3:4px;--x4:7px}[data-elevation-hover="2"]:hover,[data-elevation="2"]{--y1:1px;--y2:5px;--y3:11px;--y4:19px;--x1:0px;--x2:0px;--x3:0px;--x4:0px;--shadow-blur-1:3px;--shadow-blur-2:5px;--shadow-blur-3:6px;--shadow-blur-4:8px}[data-elevation-hover="2"]:where([data-elevation-direction=top],[data-elevation-direction=left]):hover,[data-elevation="2"]:where([data-elevation-direction=top],[data-elevation-direction=left]){--shadow-blur-3:7px}[data-elevation-hover="2"]:where([data-elevation-direction=left],[data-elevation-direction=right]):hover,[data-elevation="2"]:where([data-elevation-direction=left],[data-elevation-direction=right]){--y1:0px;--y2:0px;--y3:0px;--y4:0px;--x1:1px;--x2:5px;--x3:11px;--x4:19px}[data-elevation-hover="2"]:where([data-elevation-direction=right]):hover,[data-elevation="2"]:where([data-elevation-direction=right]){--shadow-blur-3:6px}[data-elevation-hover="3"]:hover,[data-elevation="3"]{--y1:2px;--y2:7px;--y3:16px;--y4:29px;--x1:0px;--x2:0px;--x3:0px;--x4:0px;--shadow-blur-1:4px;--shadow-blur-2:7px;--shadow-blur-3:10px;--shadow-blur-4:12px}[data-elevation-hover="3"]:where([data-elevation-direction=left],[data-elevation-direction=right]):hover,[data-elevation="3"]:where([data-elevation-direction=left],[data-elevation-direction=right]){--y1:0px;--y2:0px;--y3:0px;--y4:0px;--x1:2px;--x2:7px;--x3:16px;--x4:29px}[data-elevation-hover="3"]:where([data-elevation-direction=right]):hover,[data-elevation="3"]:where([data-elevation-direction=right]){--x2:10px;--x3:22px;--x4:39px;--shadow-blur-1:5px;--shadow-blur-2:10px;--shadow-blur-3:13px;--shadow-blur-4:15px}[data-elevation-hover="4"]:hover,[data-elevation="4"]{--y1:4px;--y2:14px;--y3:33px;--y4:58px;--x1:0px;--x2:0px;--x3:0px;--x4:0px;--shadow-blur-1:8px;--shadow-blur-2:14px;--shadow-blur-3:20px;--shadow-blur-4:23px}[data-elevation-hover="4"]:where([data-elevation-direction=top]):hover,[data-elevation="4"]:where([data-elevation-direction=top]){--y2:15px;--shadow-blur-2:15px}[data-elevation-hover="4"]:where([data-elevation-direction=left]):hover,[data-elevation="4"]:where([data-elevation-direction=left]){--y1:0px;--y2:0px;--y3:0px;--y4:0px;--x1:4px;--x2:15px;--x3:33px;--x4:58px;--shadow-blur-2:15px}[data-elevation-hover="4"]:where([data-elevation-direction=right]):hover,[data-elevation="4"]:where([data-elevation-direction=right]){--y1:0px;--y2:0px;--y3:0px;--y4:0px;--x1:4px;--x2:14px;--x3:33px;--x4:58px}}@layer viraui.preflight{[data-grow=false]{--vira-flex-grow:0;flex-grow:0}[data-shrink=false]{--vira-flex-shrink:0;flex-shrink:0}}@layer viraui.preflight{:where(p){line-height:1.5;min-block-size:.01vh;font-size:var(--font-scale-body-medium)}small{font-size:.7em}b,strong{font-variation-settings:"wght" 700}:where(a:any-link):not([data-no-link-style]){text-decoration:none;color:var(--global-interactive-text);word-break:break-word;&:not([class]){background:linear-gradient(currentcolor,currentcolor) no-repeat 0 100%;background-size:0 1px;transition:background-size var(--duration-fast) var(--easing-entrance);&:focus,&:hover{background-size:100% 1px}}}del{padding:0 .4em;margin:0 .2em;background-color:oklab(from var(--highlight-red) l a b/12%);color:var(--highlight-red);box-shadow:0 0 0 1px oklab(from var(--highlight-red) l a b/50%);border-radius:var(--radius-small)}ins{background-color:oklab(from var(--highlight-green) l a b/15%);color:var(--highlight-green);box-shadow:0 0 0 1px oklab(from var(--highlight-green) l a b/50%)}ins,mark{padding:0 .4em;margin:0 .2em;text-decoration:none;border-radius:var(--radius-small)}mark{background-color:oklab(from var(--highlight-yellow) l a b/15%);color:var(--highlight-yellow);box-shadow:0 0 0 1px oklab(from var(--highlight-yellow) l a b/50%)}address{font-style:normal;line-height:inherit}dt{font-variation-settings:"wght" 600}dd{margin:0;padding:0}ul{font-size:medium;padding-left:1rem;& li::marker{font-size:inherit;text-align:right;font-variation-settings:"wght" 400;min-inline-size:var(--space-x-large);color:oklab(from currentColor l a b/80%)}}ol{font-size:medium;& li::marker{font-size:inherit;font-variation-settings:"wght" 400;min-inline-size:var(--space-x-large);font-variant-numeric:tabular-nums;white-space:nowrap;color:oklab(from currentColor l a b/80%)}}kbd{padding:.2em .4em;border-radius:var(--radius-small);font-variation-settings:"wght" 600;box-shadow:var(--global-contrast);background:var(--global-contrast)}abbr{text-decoration:underline dashed var(--global-primary)}label,legend{font-size:inherit}code{background-color:var(--global-contrast);border-radius:var(--radius-small);box-shadow:var(--global-contrast);padding:.2em .4em;font-size:1em;font-family:var(--font-family-mono);vertical-align:top}pre code{box-shadow:none}s{text-decoration:line-through;color:var(--global-disabled-foreground);text-decoration-color:oklab(from var(--global-foreground) l a b/50%)}:root{color-scheme:light dark}[data-theme=dark]{color-scheme:dark}[data-theme=light]{color-scheme:light}}@layer viraui.preflight{}@layer viraui.preflight{@container root not style(--vibrancy-enable: initial){[data-vibrant]{backdrop-filter:brightness(var(--vibrancy-brightness)) blur(calc(var(--vibrancy-blur) * 1px))}}}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@viraui/react",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.25",
|
|
4
4
|
"private": false,
|
|
5
5
|
"files": [
|
|
6
6
|
"dist"
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"registry": "https://registry.npmjs.org/"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@base-ui/react": "1.
|
|
36
|
+
"@base-ui/react": "1.6.0",
|
|
37
37
|
"postcss": "8.5.6",
|
|
38
38
|
"postcss-cli": "11.0.1",
|
|
39
39
|
"react": ">=19.2.7",
|
|
@@ -42,16 +42,24 @@
|
|
|
42
42
|
"vite": "8.0.16",
|
|
43
43
|
"vite-plugin-dts": "4.5.4",
|
|
44
44
|
"vite-plugin-static-copy": "2.3.0",
|
|
45
|
-
"@viraui/foundation": "0.0.
|
|
46
|
-
"@viraui/postcss-config": "0.0.16",
|
|
45
|
+
"@viraui/foundation": "0.0.25",
|
|
47
46
|
"@viraui/icons": "0.0.15",
|
|
47
|
+
"@viraui/postcss-config": "0.0.17",
|
|
48
48
|
"@viraui/tsconfig": "0.0.17"
|
|
49
49
|
},
|
|
50
50
|
"peerDependencies": {
|
|
51
|
-
"@base-ui/react": ">=1.
|
|
51
|
+
"@base-ui/react": ">=1.6.0",
|
|
52
52
|
"react": ">=19.0.0",
|
|
53
53
|
"react-dom": ">=19.0.0"
|
|
54
54
|
},
|
|
55
|
+
"browserslist": [
|
|
56
|
+
"last 2 Chrome versions",
|
|
57
|
+
"last 2 Firefox versions",
|
|
58
|
+
"last 2 Safari versions",
|
|
59
|
+
"last 2 Edge versions",
|
|
60
|
+
"not dead",
|
|
61
|
+
"not op_mini all"
|
|
62
|
+
],
|
|
55
63
|
"scripts": {
|
|
56
64
|
"clean": "rimraf dist",
|
|
57
65
|
"build": "run-s clean build:icons build:lib build:preflight build:catalog",
|