@viraui/react 0.0.25 → 0.0.27

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 (186) hide show
  1. package/dist/catalog.json +116 -68
  2. package/dist/components/accordion/accordion-item.d.ts +58 -0
  3. package/dist/components/accordion/accordion-item.js +65 -0
  4. package/dist/components/accordion/accordion.css +1 -0
  5. package/dist/components/accordion/accordion.d.ts +26 -0
  6. package/dist/components/accordion/accordion.guide.json +30 -0
  7. package/dist/components/accordion/accordion.js +22 -0
  8. package/dist/components/accordion/accordion.module.js +17 -0
  9. package/dist/components/accordion/index.d.ts +3 -0
  10. package/dist/components/avatar/avatar.css +1 -1
  11. package/dist/components/avatar/avatar.guide.json +25 -1
  12. package/dist/components/avatar/avatar.js +1 -1
  13. package/dist/components/avatar/avatar.module.js +8 -4
  14. package/dist/components/avatar-group/avatar-group.css +2 -2
  15. package/dist/components/avatar-group/avatar-group.guide.json +27 -1
  16. package/dist/components/avatar-group/avatar-group.js +2 -2
  17. package/dist/components/avatar-group/avatar-group.module.js +12 -6
  18. package/dist/components/basic-input/basic-input.css +1 -1
  19. package/dist/components/basic-input/basic-input.js +3 -3
  20. package/dist/components/basic-input/basic-input.module.js +4 -2
  21. package/dist/components/basic-input/field-label.css +1 -1
  22. package/dist/components/basic-input/field-label.module.js +4 -2
  23. package/dist/components/bleed/bleed.css +1 -0
  24. package/dist/components/bleed/bleed.d.ts +26 -0
  25. package/dist/components/bleed/bleed.guide.json +39 -0
  26. package/dist/components/bleed/bleed.js +24 -0
  27. package/dist/components/bleed/bleed.module.js +5 -0
  28. package/dist/components/bleed/index.d.ts +2 -0
  29. package/dist/components/button/button.css +1 -1
  30. package/dist/components/button/button.guide.json +33 -3
  31. package/dist/components/button/button.js +1 -1
  32. package/dist/components/button/button.module.js +8 -4
  33. package/dist/components/checkbox/checkbox-group.js +2 -2
  34. package/dist/components/checkbox/checkbox.css +1 -1
  35. package/dist/components/checkbox/checkbox.js +1 -1
  36. package/dist/components/checkbox/checkbox.module.js +16 -8
  37. package/dist/components/chip/chip.css +1 -1
  38. package/dist/components/chip/chip.guide.json +26 -1
  39. package/dist/components/chip/chip.module.js +10 -5
  40. package/dist/components/clamp-text/clamp-text.css +1 -1
  41. package/dist/components/clamp-text/clamp-text.guide.json +15 -1
  42. package/dist/components/clamp-text/clamp-text.js +1 -1
  43. package/dist/components/clamp-text/clamp-text.module.js +4 -2
  44. package/dist/components/dialog/dialog-close.js +2 -2
  45. package/dist/components/dialog/dialog-indent-background.js +2 -2
  46. package/dist/components/dialog/dialog-indent.js +2 -2
  47. package/dist/components/dialog/dialog-sheet.js +3 -3
  48. package/dist/components/dialog/dialog-trigger.js +2 -2
  49. package/dist/components/dialog/dialog.css +1 -1
  50. package/dist/components/dialog/dialog.d.ts +5 -4
  51. package/dist/components/dialog/dialog.guide.json +15 -1
  52. package/dist/components/dialog/dialog.js +4 -3
  53. package/dist/components/dialog/dialog.module.js +24 -12
  54. package/dist/components/elevator/elevator.js +2 -2
  55. package/dist/components/fieldset/fieldset.js +1 -1
  56. package/dist/components/icon/icon.module.js +4 -2
  57. package/dist/components/icon-button/icon-button.js +2 -2
  58. package/dist/components/index.d.ts +21 -13
  59. package/dist/components/linear-progress/linear-progress.css +1 -1
  60. package/dist/components/linear-progress/linear-progress.guide.json +14 -1
  61. package/dist/components/linear-progress/linear-progress.js +1 -1
  62. package/dist/components/linear-progress/linear-progress.module.js +8 -4
  63. package/dist/components/masonry/masonry.css +1 -1
  64. package/dist/components/masonry/masonry.guide.json +42 -1
  65. package/dist/components/masonry/masonry.js +3 -3
  66. package/dist/components/masonry/masonry.module.js +6 -3
  67. package/dist/components/meter/index.d.ts +2 -0
  68. package/dist/components/meter/meter.css +1 -0
  69. package/dist/components/meter/meter.d.ts +44 -0
  70. package/dist/components/meter/meter.guide.json +39 -0
  71. package/dist/components/meter/meter.js +59 -0
  72. package/dist/components/meter/meter.module.js +11 -0
  73. package/dist/components/popover/index.d.ts +4 -0
  74. package/dist/components/popover/popover-sheet.d.ts +65 -0
  75. package/dist/components/popover/popover-sheet.js +79 -0
  76. package/dist/components/popover/popover.css +1 -0
  77. package/dist/components/popover/popover.d.ts +74 -0
  78. package/dist/components/popover/popover.guide.json +28 -0
  79. package/dist/components/popover/popover.js +23 -0
  80. package/dist/components/popover/popover.module.js +13 -0
  81. package/dist/components/progressive-blur/progressive-blur.css +1 -1
  82. package/dist/components/progressive-blur/progressive-blur.guide.json +15 -1
  83. package/dist/components/progressive-blur/progressive-blur.js +1 -1
  84. package/dist/components/progressive-blur/progressive-blur.module.js +6 -3
  85. package/dist/components/radio/radio-group.d.ts +1 -1
  86. package/dist/components/radio/radio-group.js +2 -2
  87. package/dist/components/radio/radio.css +1 -1
  88. package/dist/components/radio/radio.js +1 -1
  89. package/dist/components/radio/radio.module.js +8 -4
  90. package/dist/components/select/select-group.js +1 -1
  91. package/dist/components/select/select-option.js +3 -3
  92. package/dist/components/select/select.css +1 -1
  93. package/dist/components/select/select.guide.json +26 -1
  94. package/dist/components/select/select.js +5 -4
  95. package/dist/components/select/select.module.js +36 -18
  96. package/dist/components/separator/separator.css +1 -1
  97. package/dist/components/separator/separator.js +1 -1
  98. package/dist/components/separator/separator.module.js +4 -2
  99. package/dist/components/shimmer/shimmer.css +1 -1
  100. package/dist/components/shimmer/shimmer.guide.json +39 -1
  101. package/dist/components/shimmer/shimmer.js +4 -4
  102. package/dist/components/shimmer/shimmer.module.js +4 -2
  103. package/dist/components/skeleton/skeleton.css +1 -1
  104. package/dist/components/skeleton/skeleton.guide.json +50 -1
  105. package/dist/components/skeleton/skeleton.js +5 -5
  106. package/dist/components/skeleton/skeleton.module.js +4 -2
  107. package/dist/components/slider/slider.css +1 -1
  108. package/dist/components/slider/slider.guide.json +20 -1
  109. package/dist/components/slider/slider.js +1 -1
  110. package/dist/components/slider/slider.module.js +20 -10
  111. package/dist/components/spinner/spinner.css +1 -1
  112. package/dist/components/spinner/spinner.guide.json +15 -1
  113. package/dist/components/spinner/spinner.module.js +6 -3
  114. package/dist/components/stack/stack.css +1 -1
  115. package/dist/components/stack/stack.guide.json +77 -1
  116. package/dist/components/stack/stack.js +8 -8
  117. package/dist/components/stack/stack.module.js +4 -2
  118. package/dist/components/static-noise/static-noise.module.js +6 -3
  119. package/dist/components/surface/surface-radius-context.js +7 -7
  120. package/dist/components/surface/surface.css +1 -1
  121. package/dist/components/surface/surface.d.ts +1 -1
  122. package/dist/components/surface/surface.guide.json +85 -1
  123. package/dist/components/surface/surface.js +6 -6
  124. package/dist/components/surface/surface.module.js +4 -2
  125. package/dist/components/switch/switch.css +1 -1
  126. package/dist/components/switch/switch.guide.json +32 -1
  127. package/dist/components/switch/switch.js +1 -1
  128. package/dist/components/switch/switch.module.js +10 -5
  129. package/dist/components/tabs/tabs-indicator.js +2 -2
  130. package/dist/components/tabs/tabs-list.js +2 -2
  131. package/dist/components/tabs/tabs-panel.js +2 -2
  132. package/dist/components/tabs/tabs-tab.js +2 -2
  133. package/dist/components/tabs/tabs-viewport.js +2 -2
  134. package/dist/components/tabs/tabs.css +1 -1
  135. package/dist/components/tabs/tabs.guide.json +8 -1
  136. package/dist/components/tabs/tabs.js +2 -2
  137. package/dist/components/tabs/tabs.module.js +16 -8
  138. package/dist/components/text/text.css +1 -1
  139. package/dist/components/text/text.guide.json +125 -1
  140. package/dist/components/text/text.js +11 -11
  141. package/dist/components/text/text.module.js +4 -2
  142. package/dist/components/textarea/textarea.css +1 -1
  143. package/dist/components/textarea/textarea.guide.json +14 -1
  144. package/dist/components/textarea/textarea.js +1 -1
  145. package/dist/components/textarea/textarea.module.js +10 -5
  146. package/dist/components/textfield/textfield.css +1 -1
  147. package/dist/components/textfield/textfield.guide.json +20 -1
  148. package/dist/components/textfield/textfield.js +1 -1
  149. package/dist/components/textfield/textfield.module.js +14 -7
  150. package/dist/components/title/title.css +1 -1
  151. package/dist/components/title/title.guide.json +123 -1
  152. package/dist/components/title/title.js +11 -11
  153. package/dist/components/title/title.module.js +4 -2
  154. package/dist/components/toast/toast-action.js +2 -2
  155. package/dist/components/toast/toast-banner.js +1 -1
  156. package/dist/components/toast/toast-viewport.js +2 -2
  157. package/dist/components/toast/toast.css +1 -1
  158. package/dist/components/toast/toast.module.js +8 -4
  159. package/dist/components/toggle-button/index.d.ts +2 -0
  160. package/dist/components/toggle-button/toggle-button.d.ts +39 -0
  161. package/dist/components/toggle-button/toggle-button.guide.json +25 -0
  162. package/dist/components/toggle-button/toggle-button.js +25 -0
  163. package/dist/components/toggle-group/index.d.ts +2 -0
  164. package/dist/components/toggle-group/toggle-group.d.ts +11 -0
  165. package/dist/components/toggle-group/toggle-group.guide.json +26 -0
  166. package/dist/components/toggle-group/toggle-group.js +15 -0
  167. package/dist/components/tooltip/index.d.ts +6 -0
  168. package/dist/components/tooltip/tooltip-content.d.ts +15 -0
  169. package/dist/components/tooltip/tooltip-content.js +32 -0
  170. package/dist/components/tooltip/tooltip.css +1 -0
  171. package/dist/components/tooltip/tooltip.d.ts +13 -0
  172. package/dist/components/tooltip/tooltip.guide.json +25 -0
  173. package/dist/components/tooltip/tooltip.js +20 -0
  174. package/dist/components/tooltip/tooltip.module.js +11 -0
  175. package/dist/components/typewriter/index.d.ts +3 -0
  176. package/dist/components/typewriter/typewriter.css +1 -0
  177. package/dist/components/typewriter/typewriter.d.ts +68 -0
  178. package/dist/components/typewriter/typewriter.guide.json +39 -0
  179. package/dist/components/typewriter/typewriter.js +105 -0
  180. package/dist/components/typewriter/typewriter.module.js +18 -0
  181. package/dist/components/typewriter/typewriter.utils.d.ts +23 -0
  182. package/dist/components/typewriter/typewriter.utils.js +100 -0
  183. package/dist/index.js +26 -16
  184. package/dist/preflight-surface.json +17 -4
  185. package/dist/preflight.css +1 -1
  186. package/package.json +6 -6
@@ -3,8 +3,8 @@ 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
5
  import avatar_group_module_default from "./avatar-group.module.js";
6
- import { Stack } from "../stack/stack.js";
7
6
  import { Text } from "../text/text.js";
7
+ import { Stack } from "../stack/stack.js";
8
8
  import { Surface } from "../surface/surface.js";
9
9
  import { jsx, jsxs } from "react/jsx-runtime";
10
10
  //#region src/components/avatar-group/avatar-group.tsx
@@ -42,7 +42,7 @@ var AvatarGroup = ({ avatars, className, direction = "horizontal", maxVisible, o
42
42
  vAlign: "center",
43
43
  hPadding: "medium"
44
44
  }),
45
- style: { "--surface-border-radius": "1e5px" },
45
+ style: { "--vui-surface-border-radius": "1e5px" },
46
46
  children: /* @__PURE__ */ jsx(Text, {
47
47
  whiteSpace: "nowrap",
48
48
  children: overflowText
@@ -1,9 +1,15 @@
1
+ //#region src/components/avatar-group/avatar-group.module.css
2
+ var AvatarGroup = "viraui__avatar-group-module__AvatarGroup_zOrR-";
3
+ var AvatarWrapper = "viraui__avatar-group-module__AvatarWrapper_0opqY";
4
+ var OverflowWrapper = "viraui__avatar-group-module__OverflowWrapper_bKv6I";
5
+ var AvatarGroupItem = "viraui__avatar-group-module__AvatarGroupItem_Vvlyh";
6
+ var OverflowPill = "viraui__avatar-group-module__OverflowPill_nMmTD";
1
7
  var avatar_group_module_default = {
2
- AvatarGroup: "viraui__avatar-group-module__AvatarGroup_zOrR-",
3
- AvatarWrapper: "viraui__avatar-group-module__AvatarWrapper_0opqY",
4
- OverflowWrapper: "viraui__avatar-group-module__OverflowWrapper_bKv6I",
5
- AvatarGroupItem: "viraui__avatar-group-module__AvatarGroupItem_Vvlyh",
6
- OverflowPill: "viraui__avatar-group-module__OverflowPill_nMmTD"
8
+ AvatarGroup,
9
+ AvatarWrapper,
10
+ OverflowWrapper,
11
+ AvatarGroupItem,
12
+ OverflowPill
7
13
  };
8
14
  //#endregion
9
- export { avatar_group_module_default as default };
15
+ export { AvatarGroup, AvatarGroupItem, AvatarWrapper, OverflowPill, OverflowWrapper, avatar_group_module_default as default };
@@ -1 +1 @@
1
- .viraui__basic-input-module__BasicInput_5uE64{--basic-input-background:var(--base-1);--basic-input-color:var(--global-foreground);--basic-input-placeholder-color:var(--global-disabled-foreground);--basic-input-padding-inline:var(--space-small);--basic-input-font-size:var(--font-scale-body-small);--basic-input-border-radius:var(--radius-medium);box-sizing:border-box;margin:0;inline-size:100%;min-inline-size:0;padding-inline:var(--basic-input-padding-inline);font-family:inherit;font-size:var(--basic-input-font-size);font-variation-settings:"wght" 400;color:var(--basic-input-color);background:var(--basic-input-background);border:none;border-radius:var(--basic-input-border-radius);appearance:none;&::-webkit-contacts-auto-fill-button{background-color:var(--basic-input-color)}&::placeholder{color:var(--basic-input-placeholder-color)}&:disabled{--basic-input-background:var(--global-disabled-background);--basic-input-color:var(--global-disabled-foreground);--basic-input-placeholder-color:var(--global-disabled-foreground);cursor:not-allowed}&[data-invalid]{outline-color:oklab(from var(--highlight-red) l a b/.3)}}
1
+ .viraui__basic-input-module__BasicInput_5uE64{--vui-basic-input-background:var(--base-1);--vui-basic-input-color:var(--global-foreground);--vui-basic-input-placeholder-color:var(--global-disabled-foreground);--vui-basic-input-padding-inline:var(--space-small);--vui-basic-input-font-size:var(--font-scale-body-small);--vui-basic-input-border-radius:var(--radius-medium);box-sizing:border-box;margin:0;inline-size:100%;min-inline-size:0;padding-inline:var(--vui-basic-input-padding-inline);font-family:inherit;font-size:var(--vui-basic-input-font-size);font-variation-settings:"wght" 400;color:var(--vui-basic-input-color);background:var(--vui-basic-input-background);border:none;border-radius:var(--vui-basic-input-border-radius);appearance:none;&::-webkit-contacts-auto-fill-button{background-color:var(--vui-basic-input-color)}&::placeholder{color:var(--vui-basic-input-placeholder-color)}&:disabled{--vui-basic-input-background:var(--global-disabled-background);--vui-basic-input-color:var(--global-disabled-foreground);--vui-basic-input-placeholder-color:var(--global-disabled-foreground);cursor:not-allowed}&[data-invalid]{outline-color:oklab(from var(--highlight-red) l a b/.3)}}
@@ -9,18 +9,18 @@ import { Input } from "@base-ui/react/input";
9
9
  function usesInputPrimitiveRender(render) {
10
10
  return React.isValidElement(render) && render.type === Input;
11
11
  }
12
- var BasicInput = React.forwardRef(function BasicInput({ className, render, ...props }, ref) {
12
+ var BasicInput = React.forwardRef(function BasicInput({ className, render, ...otherProps }, ref) {
13
13
  const mergedClassName = clsx(basic_input_module_default.BasicInput, className);
14
14
  if (usesInputPrimitiveRender(render)) return /* @__PURE__ */ jsx(Input, {
15
15
  ref,
16
16
  className: mergedClassName,
17
- ...props
17
+ ...otherProps
18
18
  });
19
19
  return /* @__PURE__ */ jsx(Field.Control, {
20
20
  ref,
21
21
  className: mergedClassName,
22
22
  render,
23
- ...props
23
+ ...otherProps
24
24
  });
25
25
  });
26
26
  //#endregion
@@ -1,3 +1,5 @@
1
- var basic_input_module_default = { BasicInput: "viraui__basic-input-module__BasicInput_5uE64" };
1
+ //#region src/components/basic-input/basic-input.module.css
2
+ var BasicInput = "viraui__basic-input-module__BasicInput_5uE64";
3
+ var basic_input_module_default = { BasicInput };
2
4
  //#endregion
3
- export { basic_input_module_default as default };
5
+ export { BasicInput, basic_input_module_default as default };
@@ -1 +1 @@
1
- .viraui__field-label-module__FieldLabel_R9SYf{display:inline;flex-direction:column;align-items:stretch;inline-size:100%;padding-inline:var(--field-label-padding-inline,0)}
1
+ .viraui__field-label-module__FieldLabel_R9SYf{display:inline;flex-direction:column;align-items:stretch;inline-size:100%;padding-inline:var(--vui-field-label-padding-inline,0)}
@@ -1,3 +1,5 @@
1
- var field_label_module_default = { FieldLabel: "viraui__field-label-module__FieldLabel_R9SYf" };
1
+ //#region src/components/basic-input/field-label.module.css
2
+ var FieldLabel = "viraui__field-label-module__FieldLabel_R9SYf";
3
+ var field_label_module_default = { FieldLabel };
2
4
  //#endregion
3
- export { field_label_module_default as default };
5
+ export { FieldLabel, field_label_module_default as default };
@@ -0,0 +1 @@
1
+ .viraui__bleed-module__Bleed_7rnR6{margin:0 calc(var(--vui-bleed-amount, 0) * -1);&[data-bleed-full=true]{width:100vw;margin-left:calc(50% - 50vw)}}
@@ -0,0 +1,26 @@
1
+ import { IntrinsicViraProps } from '../../core/props/intrinsic-vira-props';
2
+ import { ThemeTypes } from '@viraui/foundation/vira/types';
3
+ import type * as React from 'react';
4
+ /**
5
+ * Public Bleed props.
6
+ *
7
+ * Includes standard `div` attributes such as `children`, `id`, `className`, and event handlers,
8
+ * plus Vira-owned inline bleed controls.
9
+ *
10
+ * @default Native div pass-through props keep React defaults.
11
+ */
12
+ export type BleedProps = React.ComponentPropsWithRef<'div'> & IntrinsicViraProps & {
13
+ /**
14
+ * Sets the inline bleed amount using a Vira space token.
15
+ *
16
+ * @default No bleed is applied.
17
+ */
18
+ amount?: ThemeTypes['space'];
19
+ /**
20
+ * Bleeds content to the viewport edges and ignores `amount`.
21
+ *
22
+ * @default false
23
+ */
24
+ full?: boolean;
25
+ };
26
+ export declare const Bleed: React.FC<BleedProps>;
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "Bleed",
3
+ "summary": "Layout utility that pulls content past inline padding using negative margins or full viewport bleed.",
4
+ "whenToUse": [
5
+ "Edge-to-edge media or dividers inside padded Surface or Stack containers",
6
+ "Hero bands or callouts that should break out of card padding",
7
+ "Full-bleed sections that span the viewport width from a centered layout"
8
+ ],
9
+ "whenNotToUse": [
10
+ "Replacing Stack or Surface padding instead of composing with them",
11
+ "Interactive controls that need their own hit target sizing",
12
+ "Cases where overflow clipping on the parent should remain strict"
13
+ ],
14
+ "accessibility": [
15
+ "Bleed is a layout wrapper only — child content keeps native semantics",
16
+ "Parent containers should preserve readable line length for text content",
17
+ "Full bleed can introduce horizontal scroll when ancestors use overflow hidden incorrectly"
18
+ ],
19
+ "antiPatterns": [
20
+ "Nesting multiple full bleeds without checking ancestor overflow",
21
+ "Using Bleed to compensate for missing Stack padding instead of fixing layout composition",
22
+ "Applying full bleed inside narrow overflow-hidden cards without testing clipping"
23
+ ],
24
+ "related": ["Stack", "Surface", "Separator"],
25
+ "properties": {
26
+ "react": {
27
+ "amount": {
28
+ "description": "Sets the inline bleed amount using a Vira space token.",
29
+ "refCss": "amount"
30
+ }
31
+ },
32
+ "css": {
33
+ "amount": {
34
+ "description": "Negative inline margin bleed distance on the root.",
35
+ "refReact": "amount"
36
+ }
37
+ }
38
+ }
39
+ }
@@ -0,0 +1,24 @@
1
+ import './bleed.css';
2
+ import { clsx } from "../../core/clsx.js";
3
+ import { extractIntrinsicViraProps } from "../../core/props/intrinsic-vira-props.js";
4
+ import bleed_module_default from "./bleed.module.js";
5
+ import { jsx } from "react/jsx-runtime";
6
+ //#region src/components/bleed/bleed.tsx
7
+ var Bleed = ({ amount, children, className, full = false, ref, style, ...otherProps }) => {
8
+ const { componentProps, intrinsicAttributes } = extractIntrinsicViraProps(otherProps);
9
+ const dynamicStyle = {
10
+ ...amount && !full && { "--vui-bleed-amount": `var(--space-${amount})` },
11
+ ...style
12
+ };
13
+ return /* @__PURE__ */ jsx("div", {
14
+ ...componentProps,
15
+ ...intrinsicAttributes,
16
+ ref,
17
+ className: clsx(bleed_module_default.Bleed, className),
18
+ "data-bleed-full": full ? "true" : void 0,
19
+ style: dynamicStyle,
20
+ children
21
+ });
22
+ };
23
+ //#endregion
24
+ export { Bleed };
@@ -0,0 +1,5 @@
1
+ //#region src/components/bleed/bleed.module.css
2
+ var Bleed = "viraui__bleed-module__Bleed_7rnR6";
3
+ var bleed_module_default = { Bleed };
4
+ //#endregion
5
+ export { Bleed, bleed_module_default as default };
@@ -0,0 +1,2 @@
1
+ export { Bleed } from './bleed';
2
+ export type { BleedProps } from './bleed';
@@ -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-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
+ .viraui__button-module__Button_oPhrP{--vui-button-background:var(--global-primary);--vui-button-color:var(--base-1);--vui-button-height:var(--space-x-large);--vui-button-padding-inline:var(--space-small);--vui-button-padding-block:var(--space-small);--vui-button-spinner-color:currentColor;--vui-button-icon-size:1.125em;--vui-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(--vui-button-height);block-size:var(--vui-button-height);justify-content:center;text-decoration:none;white-space:nowrap;appearance:button;overflow:hidden;position:relative;padding:var(--vui-button-padding-block) var(--vui-button-padding-inline);font-weight:400;font-variation-settings:"wght" 400;gap:var(--space-small);border:1px solid #0000;background:var(--vui-button-background);color:var(--vui-button-color);font-size:var(--font-scale-body-medium);border-radius:var(--vui-button-radius);transition:translate var(--easing-elastic) var(--duration-instant);will-change:translate;&:not(:disabled){background-clip:padding-box}&:not(:disabled,[aria-disabled=true]):active{translate:0 1px}&[data-pill=true]{border-radius:var(--radius-infinite);&[data-addon-position=end]{padding-inline-end:calc(var(--vui-button-padding-inline) / 2)}&[data-addon-position=start]{padding-inline-start:calc(var(--vui-button-padding-inline) / 2)}}&[data-size=big]{--vui-button-height:var(--space-2x-large);--vui-button-padding-inline:var(--space-medium);--vui-button-padding-block:var(--space-small);--vui-button-icon-size:1.125em;--vui-button-radius:var(--radius-medium)}&[data-size=small]{--vui-button-height:var(--space-large);--vui-button-padding-inline:var(--space-small);--vui-button-padding-block:var(--space-x-small);--vui-button-icon-size:1em;--vui-button-radius:var(--radius-small);gap:var(--space-x-small);font-size:var(--font-scale-body-small)}&[data-variant=primary]{--vui-button-background:var(--global-primary);--vui-button-color:contrast-color(var(--global-primary));&:hover{--vui-button-background:oklab(from var(--global-primary) calc(l + 0.05) a b)}}&[data-variant=secondary]{--vui-button-background:var(--global-contrast);--vui-button-color:var(--base-6);background-clip:unset;&:hover{--vui-button-background:oklab(from var(--global-contrast) l a b/calc(alpha + 0.03))}@container root style(--is-light-theme: black){--vui-button-background:oklab(from var(--global-contrast) l a b/0.1)}}&[data-variant=flat]{--vui-button-background:#0000;--vui-button-color:var(--base-5);&:hover{--vui-button-background:var(--global-contrast);--vui-button-color:var(--base-7)}}&[data-variant=destructive]{--vui-button-background:oklab(from var(--highlight-red) l a b/12%);--vui-button-color:var(--highlight-red);&:hover{--vui-button-background:oklab(from var(--highlight-red) l a b/30%)}}&[data-addon-position=start]{flex-direction:row;padding-inline-end:calc(var(--vui-button-padding-inline) * 1.2)}&[data-addon-position=end]{flex-direction:row-reverse;padding-inline-start:calc(var(--vui-button-padding-inline) * 1.2)}&[data-icon-only=true]{gap:0;padding-block:var(--vui-button-padding-block);padding-inline:var(--vui-button-padding-block);inline-size:var(--vui-button-height);min-inline-size:var(--vui-button-height);max-inline-size:var(--vui-button-height);aspect-ratio:1/1}&:disabled,&:disabled:active,&:disabled:hover,&[aria-disabled=true],&[aria-disabled=true]:active,&[aria-disabled=true]:hover{--vui-button-background:var(--global-disabled-background);--vui-button-color:var(--global-disabled-foreground);cursor:not-allowed;box-shadow:none;translate:0}&[data-loading=true][data-disabled]{pointer-events:none;border:0;box-shadow:none;--vui-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(--vui-button-icon-size);inline-size:var(--vui-button-icon-size);flex-shrink:0}}.viraui__button-module__SpinnerOverlay_vKqw1{position:absolute;inset:0;display:grid;place-content:center;pointer-events:none}
@@ -5,7 +5,8 @@
5
5
  "Labeled actions with text and optional leading or trailing addon",
6
6
  "Primary, secondary, flat, or destructive visual treatments",
7
7
  "Capsule-shaped actions via pill when a fully rounded button fits the layout",
8
- "Async actions that need a stable width while loading"
8
+ "Async actions that need a stable width while loading",
9
+ "Primary Chip addons inside a primary Button — set data-theme=\"inverted\" on the Chip so its background contrasts the button fill"
9
10
  ],
10
11
  "whenNotToUse": ["Icon-only actions without a visible label — use IconButton", "Navigation or non-button semantics"],
11
12
  "accessibility": [
@@ -16,7 +17,36 @@
16
17
  "antiPatterns": [
17
18
  "Using Button without children as icon-only — prefer IconButton",
18
19
  "Duplicating icon size on every addon slot — Button CSS sizes SVG descendants",
19
- "Mixing pill with custom border-radius overrides that fight data-pill styling"
20
+ "Mixing pill with custom border-radius overrides that fight data-pill styling",
21
+ "Primary Chip addon inside a primary Button without data-theme=\"inverted\" — chip background matches the button fill and disappears"
20
22
  ],
21
- "related": ["IconButton", "Icon", "Spinner", "Chip"]
23
+ "related": ["IconButton", "Icon", "Spinner", "Chip"],
24
+ "properties": {
25
+ "css": {
26
+ "background": {
27
+ "description": "Button fill; variant and state selectors preset this."
28
+ },
29
+ "color": {
30
+ "description": "Button label and icon color."
31
+ },
32
+ "height": {
33
+ "description": "Button block size; size prop presets via data attributes."
34
+ },
35
+ "padding-inline": {
36
+ "description": "Horizontal padding inside the button."
37
+ },
38
+ "padding-block": {
39
+ "description": "Vertical padding inside the button."
40
+ },
41
+ "spinner-color": {
42
+ "description": "Loading spinner color on the root."
43
+ },
44
+ "icon-size": {
45
+ "description": "Addon icon size inside the button."
46
+ },
47
+ "radius": {
48
+ "description": "Corner radius; pill sets infinite radius via data-pill."
49
+ }
50
+ }
51
+ }
22
52
  }
@@ -4,9 +4,9 @@ import { extractIntrinsicViraProps } from "../../core/props/intrinsic-vira-props
4
4
  import { Spinner } from "../spinner/spinner.js";
5
5
  import button_module_default from "./button.module.js";
6
6
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
+ import { Button } from "@base-ui/react/button";
7
8
  import { useRender } from "@base-ui/react/use-render";
8
9
  import * as React from "react";
9
- import { Button } from "@base-ui/react/button";
10
10
  //#region src/components/button/button.tsx
11
11
  var spinnerDimensionsBySize = {
12
12
  small: "small",
@@ -1,7 +1,11 @@
1
+ //#region src/components/button/button.module.css
2
+ var Button = "viraui__button-module__Button_oPhrP";
3
+ var Content = "viraui__button-module__Content_w-pX-";
4
+ var SpinnerOverlay = "viraui__button-module__SpinnerOverlay_vKqw1";
1
5
  var button_module_default = {
2
- Button: "viraui__button-module__Button_oPhrP",
3
- Content: "viraui__button-module__Content_w-pX-",
4
- SpinnerOverlay: "viraui__button-module__SpinnerOverlay_vKqw1"
6
+ Button,
7
+ Content,
8
+ SpinnerOverlay
5
9
  };
6
10
  //#endregion
7
- export { button_module_default as default };
11
+ export { Button, Content, SpinnerOverlay, button_module_default as default };
@@ -2,8 +2,8 @@ import { Stack } from "../stack/stack.js";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  import { CheckboxGroup } from "@base-ui/react";
4
4
  //#region src/components/checkbox/checkbox-group.tsx
5
- var CheckboxGroup$1 = ({ children, className, ...props }) => /* @__PURE__ */ jsx(CheckboxGroup, {
6
- ...props,
5
+ var CheckboxGroup$1 = ({ children, className, ...otherProps }) => /* @__PURE__ */ jsx(CheckboxGroup, {
6
+ ...otherProps,
7
7
  className,
8
8
  render: /* @__PURE__ */ jsx(Stack, {
9
9
  fillChildren: false,
@@ -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:#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
+ .viraui__checkbox-module__Checkbox_3oGip{&:has([required]) .viraui__checkbox-module__Label_n9HL7:after{content:" *";color:var(--highlight-red)}}.viraui__checkbox-module__CheckboxRoot_PeyF5{--vui-checkbox-size:var(--space-medium);--vui-checkbox-radius:var(--radius-x-small);--vui-checkbox-background:var(--global-contrast);--vui-checkbox-border-color:#0000;--vui-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(--vui-checkbox-border-color);inline-size:var(--vui-checkbox-size);block-size:var(--vui-checkbox-size);background:var(--vui-checkbox-background);border-radius:var(--vui-checkbox-radius);&[data-size=regular]{--vui-checkbox-size:var(--space-large);--vui-checkbox-radius:var(--radius-small)}&[data-checked]:not([data-disabled]):not([data-invalid]),&[data-indeterminate]:not([data-disabled]):not([data-invalid]){--vui-checkbox-background:var(--global-primary);--vui-checkbox-border-color:var(--global-primary);box-shadow:none}&[data-invalid]:not([data-disabled]),[data-invalid] &:not([data-disabled]){--vui-checkbox-border-color:var(--highlight-red);--vui-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] &{--vui-checkbox-background:var(--global-disabled-background);--vui-checkbox-border-color:#0000;--vui-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(--vui-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,9 +1,9 @@
1
1
  import './checkbox.css';
2
2
  import { clsx } from "../../core/clsx.js";
3
- import { Stack } from "../stack/stack.js";
4
3
  import { FieldHelperCopy } from "../basic-input/field-helper-copy.js";
5
4
  import { FieldLabel } from "../basic-input/field-label.js";
6
5
  import checkbox_module_default from "./checkbox.module.js";
6
+ import { Stack } from "../stack/stack.js";
7
7
  import { Icon } from "../icon/icon.js";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
9
9
  import { Field } from "@base-ui/react/field";
@@ -1,11 +1,19 @@
1
+ //#region src/components/checkbox/checkbox.module.css
2
+ var Checkbox = "viraui__checkbox-module__Checkbox_3oGip";
3
+ var Label = "viraui__checkbox-module__Label_n9HL7";
4
+ var CheckboxRoot = "viraui__checkbox-module__CheckboxRoot_PeyF5";
5
+ var Indicator = "viraui__checkbox-module__Indicator_C-k-l";
6
+ var Icon = "viraui__checkbox-module__Icon_926Sa";
7
+ var MinusIcon = "viraui__checkbox-module__MinusIcon_Q57pY";
8
+ var CheckIcon = "viraui__checkbox-module__CheckIcon_XqUcs";
1
9
  var checkbox_module_default = {
2
- Checkbox: "viraui__checkbox-module__Checkbox_3oGip",
3
- Label: "viraui__checkbox-module__Label_n9HL7",
4
- CheckboxRoot: "viraui__checkbox-module__CheckboxRoot_PeyF5",
5
- Indicator: "viraui__checkbox-module__Indicator_C-k-l",
6
- Icon: "viraui__checkbox-module__Icon_926Sa",
7
- MinusIcon: "viraui__checkbox-module__MinusIcon_Q57pY",
8
- CheckIcon: "viraui__checkbox-module__CheckIcon_XqUcs"
10
+ Checkbox,
11
+ Label,
12
+ CheckboxRoot,
13
+ Indicator,
14
+ Icon,
15
+ MinusIcon,
16
+ CheckIcon
9
17
  };
10
18
  //#endregion
11
- export { checkbox_module_default as default };
19
+ export { CheckIcon, Checkbox, CheckboxRoot, Icon, Indicator, Label, MinusIcon, checkbox_module_default as default };
@@ -1 +1 @@
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}
1
+ .viraui__chip-module__Chip_2D18T{--vui-chip-background:var(--global-primary);--vui-chip-border-color:#0000;--vui-chip-color:contrast-color(var(--global-primary));--vui-chip-height:var(--space-large);--vui-chip-icon-size:0.9em;--vui-chip-color-bg-opacity:13%;--vui-chip-color-border-opacity:0%;min-block-size:var(--vui-chip-height);block-size:var(--vui-chip-height);border:1px solid var(--vui-chip-border-color);border-radius:var(--radius-infinite);background:var(--vui-chip-background);color:var(--vui-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]{--vui-chip-background:var(--global-primary);--vui-chip-color:contrast-color(var(--global-primary))}&[data-variant=secondary]{--vui-chip-background:var(--global-contrast);--vui-chip-color:var(--base-6)}&[data-variant=outline]{--vui-chip-background:#0000;--vui-chip-border-color:oklab(from var(--global-contrast) l a b/0.2);--vui-chip-color:var(--base-6)}&[data-variant=gray]{--vui-chip-background:oklab(from currentColor l a b/var(--vui-chip-color-bg-opacity));--vui-chip-border-color:oklab(from currentColor l a b/var(--vui-chip-color-border-opacity));--vui-chip-color:var(--highlight-gray)}&[data-variant=slate]{--vui-chip-background:oklab(from currentColor l a b/var(--vui-chip-color-bg-opacity));--vui-chip-border-color:oklab(from currentColor l a b/var(--vui-chip-color-border-opacity));--vui-chip-color:var(--highlight-slate)}&[data-variant=yellow]{--vui-chip-background:oklab(from currentColor l a b/var(--vui-chip-color-bg-opacity));--vui-chip-border-color:oklab(from currentColor l a b/var(--vui-chip-color-border-opacity));--vui-chip-color:var(--highlight-yellow)}&[data-variant=green]{--vui-chip-background:oklab(from currentColor l a b/var(--vui-chip-color-bg-opacity));--vui-chip-border-color:oklab(from currentColor l a b/var(--vui-chip-color-border-opacity));--vui-chip-color:var(--highlight-green)}&[data-variant=blue]{--vui-chip-color:var(--highlight-blue)}&[data-variant=blue],&[data-variant=red]{--vui-chip-background:oklab(from currentColor l a b/var(--vui-chip-color-bg-opacity));--vui-chip-border-color:oklab(from currentColor l a b/var(--vui-chip-color-border-opacity))}&[data-variant=red]{--vui-chip-color:var(--highlight-red)}&[data-variant=cyan]{--vui-chip-background:oklab(from currentColor l a b/var(--vui-chip-color-bg-opacity));--vui-chip-border-color:oklab(from currentColor l a b/var(--vui-chip-color-border-opacity));--vui-chip-color:var(--highlight-cyan)}&[data-variant=purple]{--vui-chip-background:oklab(from currentColor l a b/var(--vui-chip-color-bg-opacity));--vui-chip-border-color:oklab(from currentColor l a b/var(--vui-chip-color-border-opacity));--vui-chip-color:var(--highlight-purple)}&[data-variant=indigo]{--vui-chip-background:oklab(from currentColor l a b/var(--vui-chip-color-bg-opacity));--vui-chip-border-color:oklab(from currentColor l a b/var(--vui-chip-color-border-opacity));--vui-chip-color:var(--highlight-indigo)}&[data-variant=acid]{--vui-chip-background:oklab(from currentColor l a b/var(--vui-chip-color-bg-opacity));--vui-chip-border-color:oklab(from currentColor l a b/var(--vui-chip-color-border-opacity));--vui-chip-color:var(--highlight-acid)}&[data-variant=salmon]{--vui-chip-background:oklab(from currentColor l a b/var(--vui-chip-color-bg-opacity));--vui-chip-border-color:oklab(from currentColor l a b/var(--vui-chip-color-border-opacity));--vui-chip-color:var(--highlight-salmon)}&[data-variant=magenta]{--vui-chip-background:oklab(from currentColor l a b/var(--vui-chip-color-bg-opacity));--vui-chip-border-color:oklab(from currentColor l a b/var(--vui-chip-color-border-opacity));--vui-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(--vui-chip-icon-size);block-size:var(--vui-chip-icon-size)}}.viraui__chip-module__Label_Hdx7l{display:inline-block;min-inline-size:0;overflow:hidden;text-overflow:ellipsis}
@@ -22,5 +22,30 @@
22
22
  "Introducing custom size variants instead of the fixed compact height",
23
23
  "Re-adding a one-off destructive variant instead of using the red highlight color"
24
24
  ],
25
- "related": ["Button", "Icon", "IconButton", "Stack", "Text"]
25
+ "related": ["Button", "Icon", "IconButton", "Stack", "Text"],
26
+ "properties": {
27
+ "css": {
28
+ "background": {
29
+ "description": "Chip fill; variant presets via data attributes."
30
+ },
31
+ "border-color": {
32
+ "description": "Chip border color."
33
+ },
34
+ "color": {
35
+ "description": "Chip label and icon color."
36
+ },
37
+ "height": {
38
+ "description": "Fixed chip block size."
39
+ },
40
+ "icon-size": {
41
+ "description": "Decorative addon icon size."
42
+ },
43
+ "color-bg-opacity": {
44
+ "description": "Highlight variant background opacity mix."
45
+ },
46
+ "color-border-opacity": {
47
+ "description": "Highlight variant border opacity mix."
48
+ }
49
+ }
50
+ }
26
51
  }
@@ -1,8 +1,13 @@
1
+ //#region src/components/chip/chip.module.css
2
+ var Chip = "viraui__chip-module__Chip_2D18T";
3
+ var Content = "viraui__chip-module__Content_7mLuL";
4
+ var IconSlot = "viraui__chip-module__IconSlot_9N5vD";
5
+ var Label = "viraui__chip-module__Label_Hdx7l";
1
6
  var chip_module_default = {
2
- Chip: "viraui__chip-module__Chip_2D18T",
3
- Content: "viraui__chip-module__Content_7mLuL",
4
- IconSlot: "viraui__chip-module__IconSlot_9N5vD",
5
- Label: "viraui__chip-module__Label_Hdx7l"
7
+ Chip,
8
+ Content,
9
+ IconSlot,
10
+ Label
6
11
  };
7
12
  //#endregion
8
- export { chip_module_default as default };
13
+ export { Chip, Content, IconSlot, Label, chip_module_default as default };
@@ -1 +1 @@
1
- .viraui__clamp-text-module__ClampText_Whnkd{display:-webkit-box;-webkit-line-clamp:var(--clamp-text-rows,1);-webkit-box-orient:vertical;overflow:hidden;&[data-clamp-text-inline=true]{display:-webkit-inline-box}}
1
+ .viraui__clamp-text-module__ClampText_Whnkd{display:-webkit-box;-webkit-line-clamp:var(--vui-clamp-text-rows,1);-webkit-box-orient:vertical;overflow:hidden;&[data-clamp-text-inline=true]{display:-webkit-inline-box}}
@@ -19,5 +19,19 @@
19
19
  "Using ClampText as a heading primitive without Title render",
20
20
  "Expecting children-driven sizing instead of rows"
21
21
  ],
22
- "related": ["Text", "Title"]
22
+ "related": ["Text", "Title"],
23
+ "properties": {
24
+ "react": {
25
+ "rows": {
26
+ "description": "Sets how many lines of text remain visible before truncation.",
27
+ "refCss": "rows"
28
+ }
29
+ },
30
+ "css": {
31
+ "rows": {
32
+ "description": "WebKit line-clamp row count on the root.",
33
+ "refReact": "rows"
34
+ }
35
+ }
36
+ }
23
37
  }
@@ -8,7 +8,7 @@ import { useMemo } from "react";
8
8
  //#region src/components/clamp-text/clamp-text.tsx
9
9
  var ClampText = ({ className, inline = false, ref, render, rows = 1, style, ...otherProps }) => {
10
10
  const { componentProps, intrinsicAttributes } = extractIntrinsicViraProps(otherProps);
11
- const dynamicStyle = useMemo(() => ({ "--clamp-text-rows": rows }), [rows]);
11
+ const dynamicStyle = useMemo(() => ({ "--vui-clamp-text-rows": rows }), [rows]);
12
12
  return useRender({
13
13
  defaultTagName: "span",
14
14
  render,
@@ -1,3 +1,5 @@
1
- var clamp_text_module_default = { ClampText: "viraui__clamp-text-module__ClampText_Whnkd" };
1
+ //#region src/components/clamp-text/clamp-text.module.css
2
+ var ClampText = "viraui__clamp-text-module__ClampText_Whnkd";
3
+ var clamp_text_module_default = { ClampText };
2
4
  //#endregion
3
- export { clamp_text_module_default as default };
5
+ export { ClampText, clamp_text_module_default as default };
@@ -1,9 +1,9 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { Drawer } from "@base-ui/react";
3
3
  //#region src/components/dialog/dialog-close.tsx
4
- var DialogClose = ({ ref, ...props }) => /* @__PURE__ */ jsx(Drawer.Close, {
4
+ var DialogClose = ({ ref, ...otherProps }) => /* @__PURE__ */ jsx(Drawer.Close, {
5
5
  ref,
6
- ...props
6
+ ...otherProps
7
7
  });
8
8
  //#endregion
9
9
  export { DialogClose };
@@ -3,8 +3,8 @@ import dialog_module_default from "./dialog.module.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  import { Drawer } from "@base-ui/react";
5
5
  //#region src/components/dialog/dialog-indent-background.tsx
6
- var DialogIndentBackground = ({ className, ...props }) => /* @__PURE__ */ jsx(Drawer.IndentBackground, {
7
- ...props,
6
+ var DialogIndentBackground = ({ className, ...otherProps }) => /* @__PURE__ */ jsx(Drawer.IndentBackground, {
7
+ ...otherProps,
8
8
  className: clsx(dialog_module_default.IndentBackground, className)
9
9
  });
10
10
  //#endregion
@@ -3,8 +3,8 @@ import dialog_module_default from "./dialog.module.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  import { Drawer } from "@base-ui/react";
5
5
  //#region src/components/dialog/dialog-indent.tsx
6
- var DialogIndent = ({ className, ...props }) => /* @__PURE__ */ jsx(Drawer.Indent, {
7
- ...props,
6
+ var DialogIndent = ({ className, ...otherProps }) => /* @__PURE__ */ jsx(Drawer.Indent, {
7
+ ...otherProps,
8
8
  className: clsx(dialog_module_default.Indent, className)
9
9
  });
10
10
  //#endregion
@@ -1,8 +1,8 @@
1
+ import { Text } from "../text/text.js";
1
2
  import { Stack } from "../stack/stack.js";
2
3
  import dialog_module_default from "./dialog.module.js";
3
- import { IconButton } from "../icon-button/icon-button.js";
4
- import { Text } from "../text/text.js";
5
4
  import { Icon } from "../icon/icon.js";
5
+ import { IconButton } from "../icon-button/icon-button.js";
6
6
  import { Surface } from "../surface/surface.js";
7
7
  import { Title } from "../title/title.js";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -19,7 +19,7 @@ var DialogSheet = ({ children, description, title, showCloseButton = false, fitC
19
19
  className: dialog_module_default.Viewport,
20
20
  children: /* @__PURE__ */ jsxs(Drawer.Popup, {
21
21
  className: dialog_module_default.Popup,
22
- style: { "--dialog-max-block-size": maxHeight },
22
+ style: { "--vui-dialog-max-block-size": maxHeight },
23
23
  render: /* @__PURE__ */ jsx(Surface, {
24
24
  border: "top",
25
25
  render: /* @__PURE__ */ jsx(Stack, { hAlign: "center" }),
@@ -1,9 +1,9 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { Drawer } from "@base-ui/react";
3
3
  //#region src/components/dialog/dialog-trigger.tsx
4
- var DialogTrigger = ({ ref, ...props }) => /* @__PURE__ */ jsx(Drawer.Trigger, {
4
+ var DialogTrigger = ({ ref, ...otherProps }) => /* @__PURE__ */ jsx(Drawer.Trigger, {
5
5
  ref,
6
- ...props
6
+ ...otherProps
7
7
  });
8
8
  //#endregion
9
9
  export { DialogTrigger };
@@ -1 +1 @@
1
- .viraui__dialog-module__Backdrop_xgFhs{position:fixed;inset:0;z-index:0;transition:opacity var(--duration-fast) var(--easing-standard);backdrop-filter:brightness(90%) blur(5px);opacity:1;&[data-ending-style],&[data-starting-style]{opacity:0}&[data-swiping]{opacity:calc(1 - var(--drawer-swipe-progress, 0));transition-duration:0s}@media (prefers-reduced-motion:reduce){transition:none}}.viraui__dialog-module__Viewport_kmZN1{position:fixed;inset:0;z-index:4;pointer-events:none;touch-action:none}.viraui__dialog-module__Popup_5qIyj{--bleed:var(--space-wide);--peek:var(--space-medium);--stack-step:0.05;--stack-progress:clamp(0,var(--drawer-swipe-progress,0),1);--stack-peek-offset:max(0px,calc((var(--nested-drawers, 0) - var(--stack-progress)) * var(--peek)));--stack-scale-base:max(0,calc(1 - var(--nested-drawers, 0) * var(--stack-step)));--stack-scale:clamp(0,calc(var(--stack-scale-base) + var(--stack-step) * var(--stack-progress)),1);--stack-shrink:calc(1 - var(--stack-scale));--stack-height:max(0px,calc(var(--drawer-frontmost-height, var(--drawer-height, 0px)) - var(--bleed)));--translate-y:calc(var(--drawer-snap-point-offset, 0px) + var(--drawer-swipe-movement-y, 0px) - var(--stack-peek-offset) - var(--stack-shrink) * var(--stack-height));max-block-size:var(--dialog-max-block-size,97dvh);outline:none;pointer-events:auto;touch-action:none;height:var(--drawer-height,auto);transform-origin:50% calc(100% - var(--bleed));transition:opacity var(--duration-fast) var(--easing-entrance),transform var(--duration-fast) var(--easing-entrance),height var(--duration-fast) var(--easing-entrance);transform:translateY(var(--translate-y)) scale(var(--stack-scale));&[data-nested-drawer-open]{height:calc(var(--stack-height) + var(--bleed));overflow:hidden}&[data-starting-style]{opacity:0}&[data-ending-style][data-swipe-direction=down],&[data-starting-style]{transform:translateY(100%)}&[data-nested-drawer-swiping],&[data-swiping]{transition-duration:0s}@media (prefers-reduced-motion:reduce){transition:none;&[data-ending-style][data-swipe-direction=down],&[data-starting-style]{opacity:1;transform:translateY(0)}}}.viraui__dialog-module__Handle_nd9SN{margin:0 auto}.viraui__dialog-module__HandleShape_mEg8R{inline-size:var(--space-x-small);block-size:var(--space-x-small);background-color:oklab(from var(--global-contrast) l a b/.3);border-radius:var(--radius-infinite)}.viraui__dialog-module__Header_WnBly{flex-shrink:0;touch-action:none;-webkit-user-select:none;user-select:none}.viraui__dialog-module__Body_9-UgN{min-block-size:0}.viraui__dialog-module__Content_r8lJc{min-block-size:0;overflow:auto;overscroll-behavior:contain;touch-action:auto;padding-block-end:calc(env(safe-area-inset-bottom) + var(--space-medium));transition:opacity var(--duration-fast) var(--easing-standard);@media (prefers-reduced-motion:reduce){transition:none}.viraui__dialog-module__Popup_5qIyj[data-nested-drawer-open] &{opacity:0}.viraui__dialog-module__Popup_5qIyj[data-nested-drawer-open][data-nested-drawer-swiping] &{opacity:1}}.viraui__dialog-module__CloseButton_U-B1r.viraui__dialog-module__CloseButton_U-B1r{position:absolute;top:1rem;right:1rem}.viraui__dialog-module__IndentBackground_OEfbh{position:absolute;inset:0}.viraui__dialog-module__Indent_qfiNW{--indent-radius:calc(1rem * (1 - var(--drawer-swipe-progress)));--indent-transition:calc(1 - clamp(0, calc(var(--drawer-swipe-progress) * 100000), 1));transition:transform .4s cubic-bezier(.32,.72,0,1),border-radius .25s cubic-bezier(.32,.72,0,1);transition-duration:calc(.4s * var(--indent-transition)),calc(.25s * var(--indent-transition));transform-origin:center top;will-change:transform;&[data-active]{transform:scale(calc(.98 + (.02 * var(--drawer-swipe-progress)))) translateY(calc(.5rem * (1 - var(--drawer-swipe-progress))));border-top-left-radius:var(--indent-radius);border-top-right-radius:var(--indent-radius)}}
1
+ .viraui__dialog-module__Backdrop_xgFhs{position:fixed;inset:0;z-index:0;transition:opacity var(--duration-fast) var(--easing-standard);backdrop-filter:brightness(90%) blur(5px);opacity:1;&[data-ending-style],&[data-starting-style]{opacity:0}&[data-swiping]{opacity:calc(1 - var(--drawer-swipe-progress, 0));transition-duration:0s}@media (prefers-reduced-motion:reduce){transition:none}}.viraui__dialog-module__Viewport_kmZN1{position:fixed;inset:0;z-index:4;pointer-events:none;touch-action:none}.viraui__dialog-module__Popup_5qIyj{--bleed:var(--space-wide);--peek:var(--space-medium);--stack-step:0.05;--stack-progress:clamp(0,var(--drawer-swipe-progress,0),1);--stack-peek-offset:max(0px,calc((var(--nested-drawers, 0) - var(--stack-progress)) * var(--peek)));--stack-scale-base:max(0,calc(1 - var(--nested-drawers, 0) * var(--stack-step)));--stack-scale:clamp(0,calc(var(--stack-scale-base) + var(--stack-step) * var(--stack-progress)),1);--stack-shrink:calc(1 - var(--stack-scale));--stack-height:max(0px,calc(var(--drawer-frontmost-height, var(--drawer-height, 0px)) - var(--bleed)));--translate-y:calc(var(--drawer-snap-point-offset, 0px) + var(--drawer-swipe-movement-y, 0px) - var(--stack-peek-offset) - var(--stack-shrink) * var(--stack-height));max-block-size:var(--vui-dialog-max-block-size,97dvh);outline:none;pointer-events:auto;touch-action:none;height:var(--drawer-height,auto);transform-origin:50% calc(100% - var(--bleed));transition:opacity var(--duration-fast) var(--easing-entrance),transform var(--duration-fast) var(--easing-entrance),height var(--duration-fast) var(--easing-entrance);transform:translateY(var(--translate-y)) scale(var(--stack-scale));&[data-nested-drawer-open]{height:calc(var(--stack-height) + var(--bleed));overflow:hidden}&[data-starting-style]{opacity:0}&[data-ending-style][data-swipe-direction=down],&[data-starting-style]{transform:translateY(100%)}&[data-nested-drawer-swiping],&[data-swiping]{transition-duration:0s}@media (prefers-reduced-motion:reduce){transition:none;&[data-ending-style][data-swipe-direction=down],&[data-starting-style]{opacity:1;transform:translateY(0)}}}.viraui__dialog-module__Handle_nd9SN{margin:0 auto}.viraui__dialog-module__HandleShape_mEg8R{inline-size:var(--space-x-small);block-size:var(--space-x-small);background-color:oklab(from var(--global-contrast) l a b/.3);border-radius:var(--radius-infinite)}.viraui__dialog-module__Header_WnBly{flex-shrink:0;touch-action:none;-webkit-user-select:none;user-select:none}.viraui__dialog-module__Body_9-UgN{min-block-size:0}.viraui__dialog-module__Content_r8lJc{min-block-size:0;overflow:auto;overscroll-behavior:contain;touch-action:auto;padding-block-end:calc(env(safe-area-inset-bottom) + var(--space-medium));transition:opacity var(--duration-fast) var(--easing-standard);@media (prefers-reduced-motion:reduce){transition:none}.viraui__dialog-module__Popup_5qIyj[data-nested-drawer-open] &{opacity:0}.viraui__dialog-module__Popup_5qIyj[data-nested-drawer-open][data-nested-drawer-swiping] &{opacity:1}}.viraui__dialog-module__CloseButton_U-B1r.viraui__dialog-module__CloseButton_U-B1r{position:absolute;top:1rem;right:1rem}.viraui__dialog-module__IndentBackground_OEfbh{position:absolute;inset:0}.viraui__dialog-module__Indent_qfiNW{--indent-radius:calc(1rem * (1 - var(--drawer-swipe-progress)));--indent-transition:calc(1 - clamp(0, calc(var(--drawer-swipe-progress) * 100000), 1));transition:transform .4s cubic-bezier(.32,.72,0,1),border-radius .25s cubic-bezier(.32,.72,0,1);transition-duration:calc(.4s * var(--indent-transition)),calc(.25s * var(--indent-transition));transform-origin:center top;will-change:transform;&[data-active]{transform:scale(calc(.98 + (.02 * var(--drawer-swipe-progress)))) translateY(calc(.5rem * (1 - var(--drawer-swipe-progress))));border-top-left-radius:var(--indent-radius);border-top-right-radius:var(--indent-radius)}}
@@ -10,19 +10,20 @@ import type * as React from 'react';
10
10
  *
11
11
  * Groups `Dialog.Trigger`, `Dialog.Sheet`, `Dialog.Close`, `Dialog.Provider`,
12
12
  * `Dialog.Indent`, and `Dialog.IndentBackground` under Base UI Drawer parts.
13
+ * Portal, backdrop, viewport, popup, title, description, and content parts are
14
+ * internal to `Dialog.Sheet` and are not exposed on `Dialog`.
13
15
  *
14
16
  * @default Base UI pass-through props keep upstream defaults.
15
17
  */
16
18
  export type DialogProps = DrawerRoot.Props;
17
19
  export type DialogSnapPoint = DrawerRoot.SnapPoint;
18
20
  export type DialogProviderProps = DrawerProvider.Props;
19
- type DialogComponent = React.FC<DialogProps> & {
20
- Trigger: React.FC<DialogTriggerProps>;
21
+ type DialogComponent = React.FC<DialogProps> & Omit<typeof PrimitiveDrawer, 'Portal' | 'Backdrop' | 'Viewport' | 'Popup' | 'Title' | 'Description' | 'Content' | 'SwipeArea' | 'VirtualKeyboardProvider' | 'createHandle' | 'Handle' | 'Root'> & {
21
22
  Sheet: React.FC<DialogSheetProps>;
22
- Close: React.FC<DialogCloseProps>;
23
- Provider: typeof PrimitiveDrawer.Provider;
24
23
  Indent: React.FC<DialogIndentProps>;
25
24
  IndentBackground: React.FC<DialogIndentBackgroundProps>;
25
+ Trigger: React.FC<DialogTriggerProps>;
26
+ Close: React.FC<DialogCloseProps>;
26
27
  };
27
28
  export declare const Dialog: DialogComponent;
28
29
  export {};