@viraui/react 0.0.21 → 0.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/dist/catalog.json +33 -3
  2. package/dist/components/avatar/avatar.css +1 -1
  3. package/dist/components/avatar/avatar.js +1 -1
  4. package/dist/components/avatar/avatar.module.js +3 -3
  5. package/dist/components/avatar-group/avatar-group.css +1 -1
  6. package/dist/components/avatar-group/avatar-group.js +3 -2
  7. package/dist/components/avatar-group/avatar-group.module.js +5 -5
  8. package/dist/components/basic-input/basic-input.css +1 -1
  9. package/dist/components/basic-input/basic-input.js +1 -2
  10. package/dist/components/basic-input/basic-input.module.js +1 -1
  11. package/dist/components/basic-input/field-helper-copy.d.ts +1 -1
  12. package/dist/components/basic-input/field-helper-copy.js +0 -1
  13. package/dist/components/basic-input/field-label.css +1 -1
  14. package/dist/components/basic-input/field-label.js +1 -2
  15. package/dist/components/basic-input/field-label.module.js +1 -1
  16. package/dist/components/basic-input/input-control-group.js +0 -1
  17. package/dist/components/button/button.css +1 -1
  18. package/dist/components/button/button.d.ts +13 -7
  19. package/dist/components/button/button.guide.json +7 -5
  20. package/dist/components/button/button.js +12 -11
  21. package/dist/components/button/button.module.js +3 -3
  22. package/dist/components/checkbox/checkbox-group.d.ts +12 -0
  23. package/dist/components/checkbox/checkbox-group.js +15 -0
  24. package/dist/components/checkbox/checkbox.css +1 -1
  25. package/dist/components/checkbox/checkbox.d.ts +6 -21
  26. package/dist/components/checkbox/checkbox.guide.json +10 -5
  27. package/dist/components/checkbox/checkbox.js +46 -60
  28. package/dist/components/checkbox/checkbox.module.js +7 -6
  29. package/dist/components/checkbox/index.d.ts +2 -0
  30. package/dist/components/chip/chip.css +1 -1
  31. package/dist/components/chip/chip.js +1 -3
  32. package/dist/components/chip/chip.module.js +4 -4
  33. package/dist/components/clamp-text/clamp-text.css +1 -1
  34. package/dist/components/clamp-text/clamp-text.js +1 -1
  35. package/dist/components/clamp-text/clamp-text.module.js +1 -1
  36. package/dist/components/dialog/dialog-close.d.ts +15 -0
  37. package/dist/components/dialog/dialog-close.js +9 -0
  38. package/dist/components/dialog/dialog-sheet.d.ts +66 -0
  39. package/dist/components/dialog/dialog-sheet.js +80 -0
  40. package/dist/components/dialog/dialog-trigger.d.ts +13 -0
  41. package/dist/components/dialog/dialog-trigger.js +9 -0
  42. package/dist/components/dialog/dialog.css +1 -0
  43. package/dist/components/dialog/dialog.d.ts +21 -0
  44. package/dist/components/dialog/dialog.guide.json +26 -0
  45. package/dist/components/dialog/dialog.js +18 -0
  46. package/dist/components/dialog/dialog.module.js +13 -0
  47. package/dist/components/dialog/index.d.ts +8 -0
  48. package/dist/components/elevator/elevator.js +4 -4
  49. package/dist/components/fieldset/fieldset.d.ts +35 -0
  50. package/dist/components/fieldset/fieldset.guide.json +28 -0
  51. package/dist/components/fieldset/fieldset.js +30 -0
  52. package/dist/components/fieldset/index.d.ts +2 -0
  53. package/dist/components/icon/icon.css +1 -1
  54. package/dist/components/icon/icon.js +1 -1
  55. package/dist/components/icon/icon.module.js +1 -1
  56. package/dist/components/icon-button/icon-button.d.ts +1 -1
  57. package/dist/components/icon-button/icon-button.guide.json +1 -1
  58. package/dist/components/icon-button/icon-button.js +1 -1
  59. package/dist/components/index.d.ts +5 -0
  60. package/dist/components/linear-progress/linear-progress.css +1 -1
  61. package/dist/components/linear-progress/linear-progress.js +1 -2
  62. package/dist/components/linear-progress/linear-progress.module.js +4 -4
  63. package/dist/components/masonry/masonry-item.js +1 -2
  64. package/dist/components/masonry/masonry.css +1 -1
  65. package/dist/components/masonry/masonry.js +3 -4
  66. package/dist/components/masonry/masonry.module.js +2 -2
  67. package/dist/components/progressive-blur/index.d.ts +2 -0
  68. package/dist/components/progressive-blur/progressive-blur.css +1 -0
  69. package/dist/components/progressive-blur/progressive-blur.d.ts +38 -0
  70. package/dist/components/progressive-blur/progressive-blur.guide.json +25 -0
  71. package/dist/components/progressive-blur/progressive-blur.js +39 -0
  72. package/dist/components/progressive-blur/progressive-blur.module.js +6 -0
  73. package/dist/components/progressive-blur/progressive-blur.utils.d.ts +14 -0
  74. package/dist/components/progressive-blur/progressive-blur.utils.js +40 -0
  75. package/dist/components/radio/radio-group.d.ts +5 -38
  76. package/dist/components/radio/radio-group.js +12 -50
  77. package/dist/components/radio/radio.css +1 -1
  78. package/dist/components/radio/radio.d.ts +1 -1
  79. package/dist/components/radio/radio.guide.json +12 -8
  80. package/dist/components/radio/radio.js +32 -30
  81. package/dist/components/radio/radio.module.js +3 -5
  82. package/dist/components/select/select-group.js +2 -2
  83. package/dist/components/select/select-indicator-slot.js +0 -1
  84. package/dist/components/select/select-option.d.ts +15 -2
  85. package/dist/components/select/select-option.js +34 -21
  86. package/dist/components/select/select-separator.js +1 -2
  87. package/dist/components/select/select.css +1 -1
  88. package/dist/components/select/select.d.ts +7 -1
  89. package/dist/components/select/select.guide.json +9 -3
  90. package/dist/components/select/select.js +6 -5
  91. package/dist/components/select/select.module.js +17 -15
  92. package/dist/components/skeleton/skeleton.css +1 -1
  93. package/dist/components/skeleton/skeleton.js +2 -2
  94. package/dist/components/skeleton/skeleton.module.js +2 -2
  95. package/dist/components/slider/slider-control.js +0 -1
  96. package/dist/components/slider/slider.css +1 -1
  97. package/dist/components/slider/slider.js +2 -4
  98. package/dist/components/slider/slider.module.js +9 -8
  99. package/dist/components/spinner/spinner.css +1 -1
  100. package/dist/components/spinner/spinner.js +4 -4
  101. package/dist/components/spinner/spinner.module.js +3 -3
  102. package/dist/components/stack/stack.css +1 -1
  103. package/dist/components/stack/stack.d.ts +2 -2
  104. package/dist/components/stack/stack.js +1 -2
  105. package/dist/components/stack/stack.module.js +1 -1
  106. package/dist/components/static-noise/index.d.ts +2 -0
  107. package/dist/components/static-noise/static-noise.css +1 -0
  108. package/dist/components/static-noise/static-noise.d.ts +37 -0
  109. package/dist/components/static-noise/static-noise.guide.json +25 -0
  110. package/dist/components/static-noise/static-noise.js +46 -0
  111. package/dist/components/static-noise/static-noise.module.js +6 -0
  112. package/dist/components/surface/surface-radius-context.d.ts +45 -0
  113. package/dist/components/surface/surface-radius-context.js +81 -0
  114. package/dist/components/surface/surface.css +1 -1
  115. package/dist/components/surface/surface.d.ts +11 -5
  116. package/dist/components/surface/surface.guide.json +12 -4
  117. package/dist/components/surface/surface.js +26 -7
  118. package/dist/components/surface/surface.module.js +1 -4
  119. package/dist/components/switch/switch.css +1 -1
  120. package/dist/components/switch/switch.js +32 -30
  121. package/dist/components/switch/switch.module.js +4 -3
  122. package/dist/components/tabs/index.d.ts +6 -0
  123. package/dist/components/tabs/tabs-indicator.d.ts +9 -0
  124. package/dist/components/tabs/tabs-indicator.js +16 -0
  125. package/dist/components/tabs/tabs-list.d.ts +12 -0
  126. package/dist/components/tabs/tabs-list.js +29 -0
  127. package/dist/components/tabs/tabs-panel.d.ts +11 -0
  128. package/dist/components/tabs/tabs-panel.js +13 -0
  129. package/dist/components/tabs/tabs-tab.d.ts +24 -0
  130. package/dist/components/tabs/tabs-tab.js +24 -0
  131. package/dist/components/tabs/tabs-viewport.d.ts +8 -0
  132. package/dist/components/tabs/tabs-viewport.js +11 -0
  133. package/dist/components/tabs/tabs.css +1 -0
  134. package/dist/components/tabs/tabs.d.ts +31 -0
  135. package/dist/components/tabs/tabs.guide.json +23 -0
  136. package/dist/components/tabs/tabs.js +30 -0
  137. package/dist/components/tabs/tabs.module.js +11 -0
  138. package/dist/components/text/text.css +1 -1
  139. package/dist/components/text/text.d.ts +2 -2
  140. package/dist/components/text/text.js +3 -4
  141. package/dist/components/text/text.module.js +1 -1
  142. package/dist/components/textarea/textarea.css +1 -1
  143. package/dist/components/textarea/textarea.guide.json +8 -3
  144. package/dist/components/textarea/textarea.js +2 -4
  145. package/dist/components/textarea/textarea.module.js +4 -3
  146. package/dist/components/textfield/textfield.css +1 -1
  147. package/dist/components/textfield/textfield.guide.json +9 -3
  148. package/dist/components/textfield/textfield.js +2 -4
  149. package/dist/components/textfield/textfield.module.js +6 -5
  150. package/dist/components/title/title.css +1 -1
  151. package/dist/components/title/title.js +3 -4
  152. package/dist/components/title/title.module.js +1 -1
  153. package/dist/core/clsx.d.ts +1 -0
  154. package/dist/core/clsx.js +36 -0
  155. package/dist/core/elevation/get-elevation-props.js +2 -2
  156. package/dist/core/props/intrinsic-vira-props.d.ts +3 -3
  157. package/dist/index.js +10 -1
  158. package/dist/internal-icons/icon-registry.d.ts +4 -1
  159. package/dist/internal-icons/icon-registry.js +9 -0
  160. package/dist/internal-icons/icons/duo/ArrowDown.js +1 -1
  161. package/dist/internal-icons/icons/duo/ArrowDownLeft.js +1 -1
  162. package/dist/internal-icons/icons/duo/ArrowDownRight.js +1 -1
  163. package/dist/internal-icons/icons/duo/ArrowLeft.js +1 -1
  164. package/dist/internal-icons/icons/duo/ArrowRight.js +1 -1
  165. package/dist/internal-icons/icons/duo/ArrowUp.js +1 -1
  166. package/dist/internal-icons/icons/duo/ArrowUpLeft.js +1 -1
  167. package/dist/internal-icons/icons/duo/ArrowUpRight.js +1 -1
  168. package/dist/internal-icons/icons/duo/ChevronExpandY.js +2 -2
  169. package/dist/internal-icons/icons/duo/CircleCheck.d.ts +7 -0
  170. package/dist/internal-icons/icons/duo/CircleCheck.js +13 -0
  171. package/dist/internal-icons/icons/duo/Duplicate.d.ts +7 -0
  172. package/dist/internal-icons/icons/duo/Duplicate.js +13 -0
  173. package/dist/internal-icons/icons/duo/RefreshAnticlockwise.js +1 -1
  174. package/dist/internal-icons/icons/duo/ShieldCheck.d.ts +7 -0
  175. package/dist/internal-icons/icons/duo/ShieldCheck.js +13 -0
  176. package/dist/internal-icons/icons/duo/index.d.ts +3 -0
  177. package/dist/internal-icons/icons/duo/index.js +3 -0
  178. package/dist/preflight-surface.json +15 -1
  179. package/dist/preflight.css +1 -1
  180. package/dist/theme-surface.json +0 -5
  181. package/package.json +4 -7
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { Stack } from "../stack/stack.js";
3
2
  import select_module_default from "./select.module.js";
4
3
  import { jsx } from "react/jsx-runtime";
@@ -1,4 +1,5 @@
1
1
  import { SelectItem } from '@base-ui/react/select';
2
+ import { StackProps } from '..';
2
3
  import type * as React from 'react';
3
4
  /**
4
5
  * Public Select.Option props.
@@ -6,11 +7,23 @@ import type * as React from 'react';
6
7
  * @default Base UI pass-through props keep upstream defaults.
7
8
  */
8
9
  export type SelectOptionProps = SelectItem.Props & {
10
+ /**
11
+ * Decorative leading node rendered before the option label.
12
+ *
13
+ * @default No addon is rendered.
14
+ */
15
+ addon?: React.ReactNode;
16
+ /**
17
+ * Vertical alignment of the addon relative to the option label row.
18
+ *
19
+ * @default 'center'
20
+ */
21
+ addonAlign?: StackProps['vAlign'];
9
22
  /**
10
23
  * Custom indicator node rendered when the option is selected.
11
24
  *
12
- * @default `CheckBoxArrow` icon.
25
+ * @default `<Icon name="Check" size={16} />`
13
26
  */
14
27
  indicator?: React.ReactNode;
15
28
  };
16
- export declare function SelectOption({ children, className, disabled, indicator, label, value, ...itemProps }: SelectOptionProps): React.JSX.Element;
29
+ export declare function SelectOption({ addon, addonAlign, children, className, disabled, indicator, label, value, ...itemProps }: SelectOptionProps): React.JSX.Element;
@@ -1,40 +1,53 @@
1
- "use client";
1
+ import { clsx } from "../../core/clsx.js";
2
2
  import { Stack } from "../stack/stack.js";
3
3
  import { Text } from "../text/text.js";
4
4
  import select_module_default from "./select.module.js";
5
5
  import { SelectIndicatorSlot } from "./select-indicator-slot.js";
6
6
  import { Icon } from "../icon/icon.js";
7
- import { clsx } from "clsx";
7
+ import { Surface } from "../surface/surface.js";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
9
- import { Select } from "@base-ui/react/select";
9
+ import { Select } from "@base-ui/react";
10
10
  //#region src/components/select/select-option.tsx
11
- function SelectOption({ children, className, disabled, indicator, label, value, ...itemProps }) {
12
- return /* @__PURE__ */ jsxs(Select.Item, {
11
+ function SelectOption({ addon, addonAlign = "center", children, className, disabled, indicator, label, value, ...itemProps }) {
12
+ return /* @__PURE__ */ jsx(Select.Item, {
13
13
  ...itemProps,
14
14
  "aria-label": label,
15
15
  label,
16
16
  className: clsx(select_module_default.Option, className),
17
17
  disabled,
18
- render: /* @__PURE__ */ jsx(Stack, {
18
+ render: /* @__PURE__ */ jsx(Surface, { radius: "auto" }),
19
+ value,
20
+ children: /* @__PURE__ */ jsxs(Stack, {
19
21
  columnGap: "small",
20
22
  direction: "row",
21
23
  hPadding: "small",
22
24
  vPadding: "small",
23
- vAlign: "center"
24
- }),
25
- value,
26
- children: [/* @__PURE__ */ jsx(Text, {
27
- lineHeight: "small",
28
- render: /* @__PURE__ */ jsx(Select.ItemText, {}),
29
- size: "small",
30
- children
31
- }), /* @__PURE__ */ jsx(SelectIndicatorSlot, {
32
- interactive: true,
33
- children: indicator ?? /* @__PURE__ */ jsx(Icon, {
34
- name: "Check",
35
- size: 16
36
- })
37
- })]
25
+ vAlign: "center",
26
+ children: [/* @__PURE__ */ jsxs(Stack, {
27
+ direction: "row",
28
+ columnGap: "small",
29
+ vAlign: addonAlign,
30
+ fillChildren: false,
31
+ children: [addon && /* @__PURE__ */ jsx(Stack, {
32
+ vPadding: "2x-small",
33
+ "aria-hidden": "true",
34
+ grow: false,
35
+ shrink: false,
36
+ children: addon
37
+ }), /* @__PURE__ */ jsx(Text, {
38
+ lineHeight: "small",
39
+ render: /* @__PURE__ */ jsx(Select.ItemText, {}),
40
+ size: "small",
41
+ children
42
+ })]
43
+ }), /* @__PURE__ */ jsx(SelectIndicatorSlot, {
44
+ interactive: true,
45
+ children: indicator ?? /* @__PURE__ */ jsx(Icon, {
46
+ name: "Check",
47
+ size: 16
48
+ })
49
+ })]
50
+ })
38
51
  });
39
52
  }
40
53
  //#endregion
@@ -1,6 +1,5 @@
1
- "use client";
1
+ import { clsx } from "../../core/clsx.js";
2
2
  import select_module_default from "./select.module.js";
3
- import { clsx } from "clsx";
4
3
  import { jsx } from "react/jsx-runtime";
5
4
  import { Select } from "@base-ui/react/select";
6
5
  //#region src/components/select/select-separator.tsx
@@ -1 +1 @@
1
- .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-small);--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);z-index:0;&:has([required]) [data-field-label]:after{content:" *";color:var(--highlight-red)}&[data-invalid]>.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)}}.select-module_Trigger_-wBsg{box-sizing:border-box;inline-size:100%;min-inline-size:0;block-size:var(--input-height);padding-inline:calc(var(--select-trigger-padding-inline-start) + ((var(--control-group-border-radius) + 0px) / 4)) 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;&:focus-visible{outline:2px solid var(--global-foreground);outline-offset:2px}&[data-popup-open]{outline:none}&:disabled,&[data-disabled]{--control-group-background:var(--global-disabled-background);--control-group-border-color:transparent;--control-group-color:var(--global-disabled-foreground);box-shadow:none;cursor:not-allowed}}.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)}}.select-module_Icon_EOwki{font-size:var(--font-scale-body-small);pointer-events:none}.select-module_Description_OmwmV{padding-inline:calc((var(--control-group-border-radius) + 0px) / 2)}.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}.select-module_ScrollArrow_kHlEi{--scroll-arrow-background:var(--is-vibrancy-active) oklab(from var(--base-1) l a b/80%);position:absolute;inset-inline:0;z-index:1;inline-size:100%;block-size:var(--space-large);cursor:default;background:var(--scroll-arrow-background,var(--base-1));backdrop-filter:var(--vibrancy-filter,none);border:1px solid var(--global-contrast)}.select-module_ScrollButton_sHBOa{pointer-events:none}.select-module_ScrollArrowUp_DGXS-{inset-block-start:0;border-radius:var(--select-list-border-radius) var(--select-list-border-radius) 0 0}.select-module_ScrollArrowDown_vhJy0{inset-block-end:0;border-radius:0 0 var(--select-list-border-radius) var(--select-list-border-radius)}.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}}.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:2px solid var(--global-foreground);outline-offset:0}&:not([data-disabled]):hover,&:not([data-disabled])[data-highlighted]{--option-hover-background:var(--is-vibrancy-active) oklab(from var(--global-contrast) l a b/14%);background:var(--option-hover-background,var(--global-contrast))}&[data-disabled]{color:var(--global-disabled-foreground);cursor:not-allowed}}.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}}.select-module_Group_xzkuA+.select-module_Group_xzkuA{margin-block-start:var(--space-medium)}.select-module_Separator_Q-ri9{block-size:1px;margin-block:var(--space-small);margin-inline:var(--space-small);background:var(--base-3)}
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:transparent;--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{--scroll-arrow-background:var(--is-vibrancy-active) oklab(from var(--base-1) l a b/80%);position:absolute;inset-inline:0;z-index:1;inline-size:100%;block-size:var(--space-large);cursor:default;background:var(--scroll-arrow-background,var(--base-1));backdrop-filter:var(--vibrancy-filter,none);border:1px solid var(--global-contrast)}.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]{--option-hover-background:var(--is-vibrancy-active) oklab(from var(--global-contrast) l a b/12%);background:var(--option-hover-background,var(--global-contrast))}&[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)}
@@ -53,8 +53,14 @@ export type SelectProps = SelectRoot.Props<string> & Omit<FieldRoot.Props, 'ref'
53
53
  * @default No ref is attached.
54
54
  */
55
55
  ref?: React.Ref<HTMLButtonElement>;
56
+ /**
57
+ * When `true`, aligns the list popup width with the trigger via Base UI `alignItemWithTrigger`.
58
+ *
59
+ * @default false
60
+ */
61
+ alignListWithTrigger?: boolean;
56
62
  };
57
- declare function SelectRootComponent({ children, className, description, dirty, disabled, error, icon, invalid, label, name, placeholder, ref, touched, validate, validationDebounceTime, validationMode, ...selectRootProps }: SelectProps): React.JSX.Element;
63
+ declare function SelectRootComponent({ alignListWithTrigger, children, className, description, dirty, disabled, error, icon, invalid, label, name, placeholder, ref, touched, validate, validationDebounceTime, validationMode, ...selectRootProps }: SelectProps): React.JSX.Element;
58
64
  export declare const Select: typeof SelectRootComponent & {
59
65
  Option: typeof SelectOption;
60
66
  Group: typeof SelectGroup;
@@ -4,9 +4,15 @@
4
4
  "whenToUse": [
5
5
  "Choose one value from a predefined list with label and helper copy",
6
6
  "Grouped or separated option lists",
7
- "Trigger chrome aligned with Textfield control shell"
7
+ "Rich option rows with a leading decorative addon and multi-line label content",
8
+ "Trigger chrome aligned with Textfield control shell",
9
+ "Select fields inside Fieldset when they share a section legend with other inputs"
10
+ ],
11
+ "whenNotToUse": [
12
+ "Multiple selection",
13
+ "Combobox, filterable search, or custom anchor positioning",
14
+ "Wrapping a lone Select in Fieldset when its own label is sufficient"
8
15
  ],
9
- "whenNotToUse": ["Multiple selection", "Combobox, filterable search, or custom anchor positioning"],
10
16
  "accessibility": [
11
17
  "Provide label or aria-label on the trigger so the field has an accessible name",
12
18
  "Wire description and error copy through the field pattern so assistive tech gets helper text",
@@ -17,5 +23,5 @@
17
23
  "Leaving the trigger without label or aria-label",
18
24
  "Never set the size prop (if present) of Buttons, IconButtons or other interactive elements passed as addon other than small"
19
25
  ],
20
- "related": ["Textfield", "Stack", "Surface", "Icon"]
26
+ "related": ["Fieldset", "Textfield", "Stack", "Surface", "Icon"]
21
27
  }
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import './select.css';
3
+ import { clsx } from "../../core/clsx.js";
3
4
  import { extractIntrinsicViraProps } from "../../core/props/intrinsic-vira-props.js";
4
5
  import { Stack } from "../stack/stack.js";
5
6
  import { Elevator } from "../elevator/elevator.js";
@@ -13,13 +14,12 @@ import { SelectOption } from "./select-option.js";
13
14
  import { SelectSeparator } from "./select-separator.js";
14
15
  import { Icon } from "../icon/icon.js";
15
16
  import { Surface } from "../surface/surface.js";
16
- import { clsx } from "clsx";
17
17
  import { jsx, jsxs } from "react/jsx-runtime";
18
18
  import { useId } from "react";
19
19
  import { Field } from "@base-ui/react/field";
20
20
  import { Select } from "@base-ui/react/select";
21
21
  //#region src/components/select/select.tsx
22
- function SelectRootComponent({ children, className, description, dirty, disabled, error, icon = /* @__PURE__ */ jsx(Icon, {
22
+ function SelectRootComponent({ alignListWithTrigger = false, children, className, description, dirty, disabled, error, icon = /* @__PURE__ */ jsx(Icon, {
23
23
  name: "ChevronExpandY",
24
24
  size: 16
25
25
  }), invalid, label, name, placeholder, ref, touched, validate, validationDebounceTime, validationMode, ...selectRootProps }) {
@@ -43,12 +43,11 @@ function SelectRootComponent({ children, className, description, dirty, disabled
43
43
  validationMode,
44
44
  render: /* @__PURE__ */ jsx(Stack, {
45
45
  direction: "column",
46
- fillChildren: false,
47
46
  rowGap: "small"
48
47
  }),
49
48
  children: [
50
49
  label && /* @__PURE__ */ jsx(Field.Label, {
51
- "data-field-label": "",
50
+ className: select_module_default.Label,
52
51
  id: fieldLabelId,
53
52
  children: /* @__PURE__ */ jsx(FieldLabel, { children: label })
54
53
  }),
@@ -65,6 +64,7 @@ function SelectRootComponent({ children, className, description, dirty, disabled
65
64
  render: /* @__PURE__ */ jsx(Stack, {
66
65
  direction: "row",
67
66
  render: /* @__PURE__ */ jsx("button", { type: "button" }),
67
+ columnGap: "x-small",
68
68
  vAlign: "center"
69
69
  }),
70
70
  children: [/* @__PURE__ */ jsx(Text, {
@@ -87,7 +87,8 @@ function SelectRootComponent({ children, className, description, dirty, disabled
87
87
  children: icon
88
88
  })]
89
89
  }), /* @__PURE__ */ jsx(Select.Portal, { children: /* @__PURE__ */ jsx(Select.Positioner, {
90
- alignItemWithTrigger: true,
90
+ alignItemWithTrigger: alignListWithTrigger,
91
+ sideOffset: 2,
91
92
  children: /* @__PURE__ */ jsxs(Select.Popup, {
92
93
  className: select_module_default.SelectPopup,
93
94
  children: [
@@ -1,19 +1,21 @@
1
1
  var select_module_default = {
2
- Select: "select-module_Select_eXv4Y",
3
- Trigger: "select-module_Trigger_-wBsg",
4
- Value: "select-module_Value_uWHPX",
5
- Icon: "select-module_Icon_EOwki",
6
- Description: "select-module_Description_OmwmV",
7
- SelectPopup: "select-module_SelectPopup_UzGXL",
8
- ScrollArrow: "select-module_ScrollArrow_kHlEi",
9
- ScrollButton: "select-module_ScrollButton_sHBOa",
10
- ScrollArrowUp: "select-module_ScrollArrowUp_DGXS-",
11
- ScrollArrowDown: "select-module_ScrollArrowDown_vhJy0",
12
- List: "select-module_List_jdUWx",
13
- Option: "select-module_Option_KgYqz",
14
- Indicator: "select-module_Indicator_YNUuz",
15
- Group: "select-module_Group_xzkuA",
16
- Separator: "select-module_Separator_Q-ri9"
2
+ Select: "viraui__select-module__Select_eXv4Y",
3
+ Label: "viraui__select-module__Label_-Y1fR",
4
+ Trigger: "viraui__select-module__Trigger_-wBsg",
5
+ Value: "viraui__select-module__Value_uWHPX",
6
+ Icon: "viraui__select-module__Icon_EOwki",
7
+ Description: "viraui__select-module__Description_OmwmV",
8
+ SelectPopup: "viraui__select-module__SelectPopup_UzGXL",
9
+ ScrollArrow: "viraui__select-module__ScrollArrow_kHlEi",
10
+ ScrollButton: "viraui__select-module__ScrollButton_sHBOa",
11
+ ScrollArrowUp: "viraui__select-module__ScrollArrowUp_DGXS-",
12
+ ScrollArrowDown: "viraui__select-module__ScrollArrowDown_vhJy0",
13
+ List: "viraui__select-module__List_jdUWx",
14
+ OptionText: "viraui__select-module__OptionText_UynBD",
15
+ Option: "viraui__select-module__Option_KgYqz",
16
+ Indicator: "viraui__select-module__Indicator_YNUuz",
17
+ Group: "viraui__select-module__Group_xzkuA",
18
+ Separator: "viraui__select-module__Separator_Q-ri9"
17
19
  };
18
20
  //#endregion
19
21
  export { select_module_default as default };
@@ -1 +1 @@
1
- .skeleton-module_Skeleton_pn7Xk{--skeleton-background:var(--global-contrast);--skeleton-border-radius:var(--radius-small);--skeleton-inline-size:auto;--skeleton-block-size:auto;--skeleton-min-inline-size:var(--space-x-large);--skeleton-min-block-size:var(--space-medium);display:inline-block;box-sizing:border-box;inline-size:var(--skeleton-inline-size);block-size:var(--skeleton-block-size);min-inline-size:var(--skeleton-min-inline-size);min-block-size:var(--skeleton-min-block-size);max-inline-size:100%;background:var(--skeleton-background);border-radius:var(--skeleton-border-radius);vertical-align:middle;animation:skeleton-module_skeleton-fade_XHkG4 var(--duration-slow) var(--easing-standard) infinite alternate;@media (prefers-reduced-motion:reduce){animation:none}}@keyframes skeleton-module_skeleton-fade_XHkG4{0%{opacity:.52}to{opacity:1}}
1
+ .viraui__skeleton-module__Skeleton_pn7Xk{--skeleton-background:var(--global-contrast);--skeleton-border-radius:var(--radius-small);--skeleton-inline-size:auto;--skeleton-block-size:auto;--skeleton-min-inline-size:var(--space-x-large);--skeleton-min-block-size:var(--space-medium);display:inline-block;box-sizing:border-box;inline-size:var(--skeleton-inline-size);block-size:var(--skeleton-block-size);min-inline-size:var(--skeleton-min-inline-size);min-block-size:var(--skeleton-min-block-size);max-inline-size:100%;background:var(--skeleton-background);border-radius:var(--skeleton-border-radius);vertical-align:middle;animation:viraui__skeleton-module__skeleton-fade_XHkG4 var(--duration-slow) var(--easing-standard) infinite alternate;@media (prefers-reduced-motion:reduce){animation:none}}@keyframes viraui__skeleton-module__skeleton-fade_XHkG4{0%{opacity:.52}to{opacity:1}}
@@ -1,8 +1,8 @@
1
1
  import './skeleton.css';
2
+ import { clsx } from "../../core/clsx.js";
2
3
  import { extractIntrinsicViraProps } from "../../core/props/intrinsic-vira-props.js";
3
4
  import { resolveThemeValue } from "../../core/theme/resolve-theme-value.js";
4
5
  import skeleton_module_default from "./skeleton.module.js";
5
- import clsx$1 from "clsx";
6
6
  import { jsx } from "react/jsx-runtime";
7
7
  //#region src/components/skeleton/skeleton.tsx
8
8
  var Skeleton = ({ className, height, minHeight, minWidth, radius, ref, style, width, ...otherProps }) => {
@@ -20,7 +20,7 @@ var Skeleton = ({ className, height, minHeight, minWidth, radius, ref, style, wi
20
20
  ...intrinsicAttributes,
21
21
  ref,
22
22
  "aria-hidden": "true",
23
- className: clsx$1(skeleton_module_default.Skeleton, className),
23
+ className: clsx(skeleton_module_default.Skeleton, className),
24
24
  style: dynamicStyle
25
25
  });
26
26
  };
@@ -1,6 +1,6 @@
1
1
  var skeleton_module_default = {
2
- Skeleton: "skeleton-module_Skeleton_pn7Xk",
3
- "skeleton-fade": "skeleton-module_skeleton-fade_XHkG4"
2
+ Skeleton: "viraui__skeleton-module__Skeleton_pn7Xk",
3
+ "skeleton-fade": "viraui__skeleton-module__skeleton-fade_XHkG4"
4
4
  };
5
5
  //#endregion
6
6
  export { skeleton_module_default as default };
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { Stack } from "../stack/stack.js";
3
2
  import slider_module_default from "./slider.module.js";
4
3
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -1 +1 @@
1
- .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:var(--base-1);inline-size:100%;block-size:100%;min-inline-size:0;min-block-size:0;&:has([required]) [data-field-label]:after{content:" *";color:var(--highlight-red)}&[data-invalid]{--slider-progress-background:var(--highlight-red)}&:has(.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}}.slider-module_SliderRoot_4JScw{block-size:100%;min-block-size:0}.slider-module_SliderHeader_gOy9k,.slider-module_SliderRoot_4JScw{inline-size:100%;min-inline-size:0}.slider-module_Value_FaY9i{flex-shrink:0}.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%;>.slider-module_Track_wvLEH{inline-size:var(--slider-track-size);block-size:100%}}}.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)}.slider-module_Indicator_y3JyJ{background:var(--slider-progress-background);border-radius:inherit}.slider-module_Thumb_S-uLF{box-sizing:border-box;inline-size:var(--slider-thumb-size);block-size:calc(var(--slider-thumb-size) / 1.5);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:2px solid var(--global-foreground);outline-offset:2px;z-index:1}>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;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,5 +1,5 @@
1
- "use client";
2
1
  import './slider.css';
2
+ import { clsx } from "../../core/clsx.js";
3
3
  import { extractIntrinsicViraProps } from "../../core/props/intrinsic-vira-props.js";
4
4
  import { Stack } from "../stack/stack.js";
5
5
  import { Text } from "../text/text.js";
@@ -8,7 +8,6 @@ import { FieldLabel } from "../basic-input/field-label.js";
8
8
  import slider_module_default from "./slider.module.js";
9
9
  import { SliderControl } from "./slider-control.js";
10
10
  import { isRangeSlider } from "./slider-utils.js";
11
- import { clsx } from "clsx";
12
11
  import { jsx, jsxs } from "react/jsx-runtime";
13
12
  import { Field } from "@base-ui/react/field";
14
13
  import { Slider } from "@base-ui/react/slider";
@@ -53,12 +52,11 @@ var Slider$1 = ({ className, defaultValue, description, dirty, disabled, error,
53
52
  children: [(label || showValue) && /* @__PURE__ */ jsxs(Stack, {
54
53
  className: slider_module_default.SliderHeader,
55
54
  direction: isVertical ? "column" : "row",
56
- fillChildren: false,
57
55
  columnGap: "small",
58
56
  vAlign: "end",
59
57
  hAlign: isVertical ? "center" : "space-between",
60
58
  children: [label && /* @__PURE__ */ jsx(Field.Label, {
61
- "data-field-label": "",
59
+ className: slider_module_default.Label,
62
60
  children: /* @__PURE__ */ jsx(FieldLabel, { children: label })
63
61
  }), showValue && /* @__PURE__ */ jsx(Text, {
64
62
  className: slider_module_default.Value,
@@ -1,12 +1,13 @@
1
1
  var slider_module_default = {
2
- Slider: "slider-module_Slider_vDNlm",
3
- SliderRoot: "slider-module_SliderRoot_4JScw",
4
- SliderHeader: "slider-module_SliderHeader_gOy9k",
5
- Value: "slider-module_Value_FaY9i",
6
- SliderControl: "slider-module_SliderControl_FQd5-",
7
- Track: "slider-module_Track_wvLEH",
8
- Indicator: "slider-module_Indicator_y3JyJ",
9
- Thumb: "slider-module_Thumb_S-uLF"
2
+ Slider: "viraui__slider-module__Slider_vDNlm",
3
+ Label: "viraui__slider-module__Label_eQQHf",
4
+ SliderRoot: "viraui__slider-module__SliderRoot_4JScw",
5
+ SliderHeader: "viraui__slider-module__SliderHeader_gOy9k",
6
+ Value: "viraui__slider-module__Value_FaY9i",
7
+ SliderControl: "viraui__slider-module__SliderControl_FQd5-",
8
+ Track: "viraui__slider-module__Track_wvLEH",
9
+ Indicator: "viraui__slider-module__Indicator_y3JyJ",
10
+ Thumb: "viraui__slider-module__Thumb_S-uLF"
10
11
  };
11
12
  //#endregion
12
13
  export { slider_module_default as default };
@@ -1 +1 @@
1
- .spinner-module_Spinner_qCQzj{--spinner-size:var(--space-x-large);display:inline-block;inline-size:var(--spinner-size);block-size:var(--spinner-size);flex:none;vertical-align:middle;color:currentColor;&[data-dimension=small]{--spinner-size:var(--space-medium)}&[data-dimension=regular]{--spinner-size:var(--space-large)}}.spinner-module_Glyph_OV-cy>path{transform-origin:8px 8px;animation:spinner-module_spinner-bars_jDmaB var(--duration-slowest) infinite}.spinner-module_Glyph_OV-cy>path:first-child,.spinner-module_Glyph_OV-cy>path:nth-child(3){opacity:.3;transform:scaleY(.5);animation-delay:calc(var(--duration-slowest) / -2)}@keyframes spinner-module_spinner-bars_jDmaB{0%,to{opacity:1;transform:scaleY(1)}50%{opacity:.3;transform:scaleY(.5)}}
1
+ .viraui__spinner-module__Spinner_qCQzj{--spinner-size:var(--space-x-large);display:inline-block;inline-size:var(--spinner-size);block-size:var(--spinner-size);flex:none;vertical-align:middle;color:currentColor;&[data-dimension=small]{--spinner-size:var(--space-medium)}&[data-dimension=regular]{--spinner-size:var(--space-large)}}.viraui__spinner-module__Glyph_OV-cy>path{transform-origin:8px 8px;animation:viraui__spinner-module__spinner-bars_jDmaB var(--duration-slowest) infinite}.viraui__spinner-module__Glyph_OV-cy>path:first-child,.viraui__spinner-module__Glyph_OV-cy>path:nth-child(3){opacity:.3;transform:scaleY(.5);animation-delay:calc(var(--duration-slowest) / -2)}@keyframes viraui__spinner-module__spinner-bars_jDmaB{0%,to{opacity:1;transform:scaleY(1)}50%{opacity:.3;transform:scaleY(.5)}}
@@ -1,7 +1,7 @@
1
1
  import './spinner.css';
2
+ import { clsx } from "../../core/clsx.js";
2
3
  import { extractIntrinsicViraProps } from "../../core/props/intrinsic-vira-props.js";
3
4
  import spinner_module_default from "./spinner.module.js";
4
- import clsx$1 from "clsx";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
  //#region src/components/spinner/spinner.tsx
7
7
  var Spinner = ({ className, color, size = "big", ref, style, ...otherProps }) => {
@@ -10,12 +10,12 @@ var Spinner = ({ className, color, size = "big", ref, style, ...otherProps }) =>
10
10
  ...componentProps,
11
11
  ...intrinsicAttributes,
12
12
  ref,
13
- className: clsx$1(spinner_module_default.Spinner, className),
13
+ className: clsx(spinner_module_default.Spinner, className),
14
14
  "data-dimension": size,
15
15
  viewBox: "0 0 16 16",
16
16
  xmlns: "http://www.w3.org/2000/svg",
17
- ...color ? { color } : {},
18
- ...style ? { style } : {},
17
+ color,
18
+ style,
19
19
  children: /* @__PURE__ */ jsxs("g", {
20
20
  className: spinner_module_default.Glyph,
21
21
  fill: "currentColor",
@@ -1,7 +1,7 @@
1
1
  var spinner_module_default = {
2
- Spinner: "spinner-module_Spinner_qCQzj",
3
- Glyph: "spinner-module_Glyph_OV-cy",
4
- "spinner-bars": "spinner-module_spinner-bars_jDmaB"
2
+ Spinner: "viraui__spinner-module__Spinner_qCQzj",
3
+ Glyph: "viraui__spinner-module__Glyph_OV-cy",
4
+ "spinner-bars": "viraui__spinner-module__spinner-bars_jDmaB"
5
5
  };
6
6
  //#endregion
7
7
  export { spinner_module_default as default };
@@ -1 +1 @@
1
- .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;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)}}
@@ -53,13 +53,13 @@ export type StackProps = React.ComponentPropsWithoutRef<'div'> & IntrinsicViraPr
53
53
  /**
54
54
  * Sets the gap between flex rows using the Vira space token scale.
55
55
  *
56
- * @default 'medium'
56
+ * @default No row gap.
57
57
  */
58
58
  rowGap?: StackSpace;
59
59
  /**
60
60
  * Sets the gap between flex columns using the Vira space token scale.
61
61
  *
62
- * @default 'medium'
62
+ * @default No column gap.
63
63
  */
64
64
  columnGap?: StackSpace;
65
65
  /**
@@ -1,10 +1,9 @@
1
- "use client";
2
1
  import './stack.css';
2
+ import { clsx } from "../../core/clsx.js";
3
3
  import { extractIntrinsicViraProps } from "../../core/props/intrinsic-vira-props.js";
4
4
  import { resolveThemeValue } from "../../core/theme/resolve-theme-value.js";
5
5
  import { resolveAxisPadding } from "../../core/styles/resolve-axis-padding.js";
6
6
  import stack_module_default from "./stack.module.js";
7
- import { clsx } from "clsx";
8
7
  import { useRender } from "@base-ui/react/use-render";
9
8
  //#region src/components/stack/stack.tsx
10
9
  var Stack = ({ className, direction = "column", fillChildren = true, hAlign = "initial", hPadding, inline = false, maxWidth, minWidth, ref, render, rowGap, columnGap, style, vAlign = "initial", vPadding, wrap = false, ...otherProps }) => {
@@ -1,3 +1,3 @@
1
- var stack_module_default = { Stack: "stack-module_Stack_NR-Ey" };
1
+ var stack_module_default = { Stack: "viraui__stack-module__Stack_NR-Ey" };
2
2
  //#endregion
3
3
  export { stack_module_default as default };
@@ -0,0 +1,2 @@
1
+ export { StaticNoise } from './static-noise';
2
+ export type { StaticNoiseProps } from './static-noise';
@@ -0,0 +1 @@
1
+ .viraui__static-noise-module__StaticNoise_ZhNxO{pointer-events:none;margin:0}.viraui__static-noise-module__FilterSvg_0CP2y{display:block}
@@ -0,0 +1,37 @@
1
+ import { IntrinsicViraProps } from '../../core/props/intrinsic-vira-props';
2
+ import type * as React from 'react';
3
+ /**
4
+ * Public StaticNoise props.
5
+ *
6
+ * Includes standard `figure` attributes such as `id`, `className`, and event handlers,
7
+ * plus Vira-owned turbulence tuning controls.
8
+ *
9
+ * @default Native figure pass-through props keep React defaults.
10
+ */
11
+ export type StaticNoiseProps = React.ComponentPropsWithRef<'figure'> & IntrinsicViraProps & {
12
+ /**
13
+ * Sets the SVG turbulence `baseFrequency` for the internal noise filter.
14
+ *
15
+ * @default 0.5
16
+ */
17
+ baseFrequency?: number | string;
18
+ /**
19
+ * Sets the rendered overlay opacity.
20
+ *
21
+ * @default 0.2
22
+ */
23
+ opacity?: number;
24
+ /**
25
+ * Sets the rendered overlay mix blend mode.
26
+ *
27
+ * @default 'difference'
28
+ */
29
+ mixBlendMode?: React.CSSProperties['mixBlendMode'];
30
+ /**
31
+ * Animates the internal turbulence filter by cycling `feTurbulence` seed values.
32
+ *
33
+ * @default false
34
+ */
35
+ animate?: boolean;
36
+ };
37
+ export declare const StaticNoise: React.FC<StaticNoiseProps>;
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "StaticNoise",
3
+ "summary": "Decorative SVG turbulence noise overlay for textured surfaces and hero sections.",
4
+ "whenToUse": [
5
+ "Subtle grain or texture overlay on cards, panels, or hero sections",
6
+ "Glass or vibrant surfaces that need visual depth without extra content",
7
+ "Decorative atmosphere where the parent owns semantics and layout positioning"
8
+ ],
9
+ "whenNotToUse": [
10
+ "Standalone loading or status feedback without a labeled parent region",
11
+ "Critical readable content where contrast has not been verified",
12
+ "Large numbers of simultaneous full-viewport overlays on the same page"
13
+ ],
14
+ "accessibility": [
15
+ "StaticNoise is decorative — the root renders with aria-hidden by default",
16
+ "Parent surface or region must expose any meaningful label or busy state",
17
+ "Consumer owns position, inset, z-index, and sizing for the overlay placement"
18
+ ],
19
+ "antiPatterns": [
20
+ "Stacking many full-viewport StaticNoise instances on one screen",
21
+ "Using StaticNoise as the only loading announcement for a page",
22
+ "Embedding layout positioning rules inside the component stylesheet"
23
+ ],
24
+ "related": ["Surface", "Skeleton"]
25
+ }
@@ -0,0 +1,46 @@
1
+ "use client";
2
+ import './static-noise.css';
3
+ import { clsx } from "../../core/clsx.js";
4
+ import { extractIntrinsicViraProps } from "../../core/props/intrinsic-vira-props.js";
5
+ import static_noise_module_default from "./static-noise.module.js";
6
+ import { jsx } from "react/jsx-runtime";
7
+ import { useId } from "react";
8
+ //#region src/components/static-noise/static-noise.tsx
9
+ var STATIC_NOISE_SEED_FRAMES = "1;5;2;9;3;7;4;11;6;13;8;15;10;17;12;19;14;16;18;20;3;8;1;13";
10
+ var StaticNoise = ({ animate = false, baseFrequency = .5, className, mixBlendMode = "difference", opacity = .2, ref, style, ...otherProps }) => {
11
+ const { componentProps, intrinsicAttributes } = extractIntrinsicViraProps(otherProps);
12
+ const reactId = useId();
13
+ const dynamicStyle = {
14
+ filter: `url(#${reactId}) grayscale(100%)`,
15
+ opacity,
16
+ mixBlendMode,
17
+ ...style
18
+ };
19
+ return /* @__PURE__ */ jsx("figure", {
20
+ ...componentProps,
21
+ ...intrinsicAttributes,
22
+ ref,
23
+ "aria-hidden": "true",
24
+ className: clsx(static_noise_module_default.StaticNoise, className),
25
+ style: dynamicStyle,
26
+ children: /* @__PURE__ */ jsx("svg", {
27
+ "aria-hidden": "true",
28
+ className: static_noise_module_default.FilterSvg,
29
+ children: /* @__PURE__ */ jsx("filter", {
30
+ id: reactId,
31
+ children: /* @__PURE__ */ jsx("feTurbulence", {
32
+ baseFrequency: String(baseFrequency),
33
+ children: animate ? /* @__PURE__ */ jsx("animate", {
34
+ attributeName: "seed",
35
+ calcMode: "discrete",
36
+ dur: "1s",
37
+ repeatCount: "indefinite",
38
+ values: STATIC_NOISE_SEED_FRAMES
39
+ }) : null
40
+ })
41
+ })
42
+ })
43
+ });
44
+ };
45
+ //#endregion
46
+ export { StaticNoise };
@@ -0,0 +1,6 @@
1
+ var static_noise_module_default = {
2
+ StaticNoise: "viraui__static-noise-module__StaticNoise_ZhNxO",
3
+ FilterSvg: "viraui__static-noise-module__FilterSvg_0CP2y"
4
+ };
5
+ //#endregion
6
+ export { static_noise_module_default as default };