@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
@@ -0,0 +1,100 @@
1
+ var resolveTextsKey = (texts, children) => {
2
+ if (texts?.length) return texts.join("\0");
3
+ if (typeof children === "string") return children;
4
+ return "";
5
+ };
6
+ var splitTextsKey = (textsKey) => textsKey ? textsKey.split("\0") : [];
7
+ var graphemeSegmenterCache;
8
+ var getGraphemeSegmenter = () => {
9
+ if (graphemeSegmenterCache !== void 0) return graphemeSegmenterCache;
10
+ graphemeSegmenterCache = typeof Intl !== "undefined" && typeof Intl.Segmenter === "function" ? new Intl.Segmenter(void 0, { granularity: "grapheme" }) : null;
11
+ return graphemeSegmenterCache;
12
+ };
13
+ var splitGraphemes = (text) => {
14
+ if (!text) return [];
15
+ const segmenter = getGraphemeSegmenter();
16
+ if (segmenter) return [...segmenter.segment(text)].map((segment) => segment.segment);
17
+ return [...text];
18
+ };
19
+ var commonPrefixLength = (previous, next) => {
20
+ const limit = Math.min(previous.length, next.length);
21
+ let index = 0;
22
+ while (index < limit && previous[index] === next[index]) index += 1;
23
+ return index;
24
+ };
25
+ var joinGraphemes = (graphemes, count) => graphemes.slice(0, count).join("");
26
+ var delay = (milliseconds, signal) => new Promise((resolve, reject) => {
27
+ if (signal.aborted) {
28
+ reject(new DOMException("Aborted", "AbortError"));
29
+ return;
30
+ }
31
+ let timeoutId;
32
+ const onAbort = () => {
33
+ window.clearTimeout(timeoutId);
34
+ reject(new DOMException("Aborted", "AbortError"));
35
+ };
36
+ timeoutId = window.setTimeout(() => {
37
+ signal.removeEventListener("abort", onAbort);
38
+ resolve();
39
+ }, milliseconds);
40
+ signal.addEventListener("abort", onAbort, { once: true });
41
+ });
42
+ var runTypewriterAnimation = async ({ texts, loop, typeDelay, deleteDelay, pause, delay: initialDelay, reducedMotion, onPhraseComplete, signal, ...nodes }) => {
43
+ if (texts.length === 0) return;
44
+ const display = { node: nodes.textNode };
45
+ const ghost = nodes.ghostTextNode ? { node: nodes.ghostTextNode } : null;
46
+ const writeDisplayText = (value) => {
47
+ display.node.data = value;
48
+ };
49
+ const writeGhostText = (value) => {
50
+ if (ghost) ghost.node.data = value;
51
+ };
52
+ const setGhostText = (text) => {
53
+ writeGhostText(text);
54
+ };
55
+ const typeSuffix = async (graphemes, fromIndex) => {
56
+ for (let graphemeIndex = fromIndex + 1; graphemeIndex <= graphemes.length; graphemeIndex += 1) {
57
+ await delay(typeDelay, signal);
58
+ writeDisplayText(joinGraphemes(graphemes, graphemeIndex));
59
+ }
60
+ };
61
+ const deleteSuffix = async (graphemes, keepCount) => {
62
+ for (let graphemeIndex = graphemes.length - 1; graphemeIndex >= keepCount; graphemeIndex -= 1) {
63
+ await delay(deleteDelay, signal);
64
+ writeDisplayText(joinGraphemes(graphemes, graphemeIndex));
65
+ }
66
+ };
67
+ const getUpcomingGraphemes = (phraseIndex) => {
68
+ return splitGraphemes(texts[loop ? (phraseIndex + 1) % texts.length : phraseIndex + 1] ?? "");
69
+ };
70
+ try {
71
+ if (reducedMotion) {
72
+ const finalText = texts.at(-1) ?? "";
73
+ setGhostText(finalText);
74
+ writeDisplayText(finalText);
75
+ onPhraseComplete(finalText);
76
+ return;
77
+ }
78
+ await delay(initialDelay, signal);
79
+ let currentGraphemes = [];
80
+ do
81
+ for (let phraseIndex = 0; phraseIndex < texts.length; phraseIndex += 1) {
82
+ const text = texts[phraseIndex] ?? "";
83
+ const phraseGraphemes = splitGraphemes(text);
84
+ const isLastPhrase = phraseIndex === texts.length - 1;
85
+ setGhostText(text);
86
+ await typeSuffix(phraseGraphemes, commonPrefixLength(currentGraphemes, phraseGraphemes) - 1);
87
+ currentGraphemes = phraseGraphemes;
88
+ onPhraseComplete(text);
89
+ if (!loop && isLastPhrase) return;
90
+ await delay(pause, signal);
91
+ const upcomingGraphemes = getUpcomingGraphemes(phraseIndex);
92
+ const keepCount = commonPrefixLength(currentGraphemes, upcomingGraphemes);
93
+ await deleteSuffix(currentGraphemes, keepCount);
94
+ currentGraphemes = currentGraphemes.slice(0, keepCount);
95
+ }
96
+ while (loop);
97
+ } catch {}
98
+ };
99
+ //#endregion
100
+ export { commonPrefixLength, resolveTextsKey, runTypewriterAnimation, splitGraphemes, splitTextsKey };
package/dist/index.js CHANGED
@@ -1,41 +1,51 @@
1
+ import { Accordion } from "./components/accordion/accordion.js";
1
2
  import { Avatar } from "./components/avatar/avatar.js";
2
3
  import { AvatarGroup } from "./components/avatar-group/avatar-group.js";
4
+ import { Bleed } from "./components/bleed/bleed.js";
5
+ import { Spinner } from "./components/spinner/spinner.js";
6
+ import { Button } from "./components/button/button.js";
7
+ import { Text } from "./components/text/text.js";
8
+ import { Checkbox } from "./components/checkbox/checkbox.js";
9
+ import { CheckboxGroup } from "./components/checkbox/checkbox-group.js";
3
10
  import { Stack } from "./components/stack/stack.js";
4
11
  import { Chip } from "./components/chip/chip.js";
12
+ import { ClampText } from "./components/clamp-text/clamp-text.js";
5
13
  import { DialogClose } from "./components/dialog/dialog-close.js";
6
14
  import { DialogIndent } from "./components/dialog/dialog-indent.js";
7
15
  import { DialogIndentBackground } from "./components/dialog/dialog-indent-background.js";
8
16
  import { DialogSheet } from "./components/dialog/dialog-sheet.js";
9
17
  import { DialogTrigger } from "./components/dialog/dialog-trigger.js";
10
18
  import { Dialog } from "./components/dialog/dialog.js";
11
- import { ClampText } from "./components/clamp-text/clamp-text.js";
12
19
  import { ELEVATION_DEFAULTS } from "./core/elevation/elevation-types.js";
13
20
  import { getElevationProps } from "./core/elevation/get-elevation-props.js";
14
21
  import { Elevator } from "./components/elevator/elevator.js";
15
- import { Spinner } from "./components/spinner/spinner.js";
16
- import { Button } from "./components/button/button.js";
22
+ import { Fieldset } from "./components/fieldset/fieldset.js";
23
+ import { Icon } from "./components/icon/icon.js";
17
24
  import { IconButton } from "./components/icon-button/icon-button.js";
18
- import { Text } from "./components/text/text.js";
19
25
  import { LinearProgress } from "./components/linear-progress/linear-progress.js";
20
26
  import { Masonry } from "./components/masonry/masonry.js";
21
- import { Textfield } from "./components/textfield/textfield.js";
22
- import { Textarea } from "./components/textarea/textarea.js";
23
- import { Slider } from "./components/slider/slider.js";
24
- import { Switch } from "./components/switch/switch.js";
25
- import { Checkbox } from "./components/checkbox/checkbox.js";
26
- import { CheckboxGroup } from "./components/checkbox/checkbox-group.js";
27
- import { Fieldset } from "./components/fieldset/fieldset.js";
27
+ import { Meter } from "./components/meter/meter.js";
28
+ import { PopoverSheet } from "./components/popover/popover-sheet.js";
29
+ import { Popover, PopoverClose, PopoverDescription, PopoverTitle, PopoverTrigger } from "./components/popover/popover.js";
30
+ import { ProgressiveBlur } from "./components/progressive-blur/progressive-blur.js";
28
31
  import { Radio } from "./components/radio/radio.js";
29
32
  import { RadioGroup } from "./components/radio/radio-group.js";
30
33
  import { Select } from "./components/select/select.js";
31
34
  import { Separator } from "./components/separator/separator.js";
32
35
  import { Shimmer } from "./components/shimmer/shimmer.js";
33
- import { Icon } from "./components/icon/icon.js";
34
36
  import { Skeleton } from "./components/skeleton/skeleton.js";
37
+ import { Slider } from "./components/slider/slider.js";
38
+ import { StaticNoise } from "./components/static-noise/static-noise.js";
35
39
  import { Surface } from "./components/surface/surface.js";
40
+ import { Switch } from "./components/switch/switch.js";
36
41
  import { Tabs } from "./components/tabs/tabs.js";
37
- import { Toast } from "./components/toast/toast.js";
38
- import { StaticNoise } from "./components/static-noise/static-noise.js";
39
- import { ProgressiveBlur } from "./components/progressive-blur/progressive-blur.js";
42
+ import { Textarea } from "./components/textarea/textarea.js";
43
+ import { Textfield } from "./components/textfield/textfield.js";
40
44
  import { Title } from "./components/title/title.js";
41
- export { Avatar, AvatarGroup, Button, Checkbox, CheckboxGroup, Chip, ClampText, Dialog, DialogClose, DialogIndent, DialogIndentBackground, DialogSheet, DialogTrigger, ELEVATION_DEFAULTS, Elevator, Fieldset, Icon, IconButton, LinearProgress, Masonry, ProgressiveBlur, Radio, RadioGroup, Select, Separator, Shimmer, Skeleton, Slider, Spinner, Stack, StaticNoise, Surface, Switch, Tabs, Text, Textarea, Textfield, Title, Toast, getElevationProps };
45
+ import { Toast } from "./components/toast/toast.js";
46
+ import { ToggleButton } from "./components/toggle-button/toggle-button.js";
47
+ import { ToggleGroup } from "./components/toggle-group/toggle-group.js";
48
+ import { Typewriter } from "./components/typewriter/typewriter.js";
49
+ import { TooltipContent } from "./components/tooltip/tooltip-content.js";
50
+ import { Tooltip, TooltipProvider, TooltipTrigger } from "./components/tooltip/tooltip.js";
51
+ export { Accordion, Avatar, AvatarGroup, Bleed, Button, Checkbox, CheckboxGroup, Chip, ClampText, Dialog, DialogClose, DialogIndent, DialogIndentBackground, DialogSheet, DialogTrigger, ELEVATION_DEFAULTS, Elevator, Fieldset, Icon, IconButton, LinearProgress, Masonry, Meter, Popover, PopoverClose, PopoverDescription, PopoverSheet, PopoverTitle, PopoverTrigger, ProgressiveBlur, Radio, RadioGroup, Select, Separator, Shimmer, Skeleton, Slider, Spinner, Stack, StaticNoise, Surface, Switch, Tabs, Text, Textarea, Textfield, Title, Toast, ToggleButton, ToggleGroup, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, Typewriter, getElevationProps };
@@ -5,7 +5,12 @@
5
5
  {
6
6
  "id": "themes",
7
7
  "file": "themes.css",
8
- "purpose": "Runtime color-scheme hints for light and dark mode."
8
+ "purpose": "Runtime color-scheme hints for light, dark, and inverted mode."
9
+ },
10
+ {
11
+ "id": "core",
12
+ "file": "core.css",
13
+ "purpose": "Root baseline, --is-light-theme registration, and global element defaults."
9
14
  },
10
15
  {
11
16
  "id": "typography",
@@ -27,12 +32,13 @@
27
32
  {
28
33
  "name": "data-theme",
29
34
  "module": "themes",
30
- "values": ["light", "dark"],
35
+ "values": ["light", "dark", "inverted"],
31
36
  "presence": "value required",
32
- "effect": "Narrows color-scheme on the element subtree: light forces light, dark forces dark.",
37
+ "effect": "Narrows color-scheme on the element subtree: light forces light, dark forces dark, inverted flips color-scheme relative to the active theme using --is-light-theme on the root container.",
33
38
  "whenToUse": [
34
39
  "Toggle runtime light or dark mode on html, body, or a layout wrapper",
35
- "Scope a subtree to one mode while the rest of the page stays unchanged"
40
+ "Scope a subtree to one mode while the rest of the page stays unchanged",
41
+ "Invert color-scheme on a nested surface that must contrast the active theme, for example a primary Chip addon inside a primary Button"
36
42
  ],
37
43
  "whenNotToUse": [
38
44
  "As a substitute for loading compatible theme CSS",
@@ -117,6 +123,13 @@
117
123
  }
118
124
  ],
119
125
  "customProperties": [
126
+ {
127
+ "name": "--is-light-theme",
128
+ "module": "themes",
129
+ "setBy": "html root in core.css from contrast-color(var(--global-background))",
130
+ "default": "black",
131
+ "purpose": "Registers the active theme polarity for @container root queries; data-theme=\"inverted\" flips color-scheme against this value."
132
+ },
120
133
  {
121
134
  "name": "--shadow-color",
122
135
  "module": "elevations",
@@ -1 +1 @@
1
- @layer viraui.preflight;@layer viraui.preflight{html{--scrollbar-thumb:light-dark(var(--base-4),var(--base-3));--scrollbar-track:#0000;--outline-offset:2px;--outline-color:var(--global-outline);--outline:2px solid var(--outline-color);font-size:100%;box-sizing:border-box;line-height:1.5;background-color:var(--global-background);color:var(--global-foreground);container:root/normal}*{@container root not style(--corner-shape-enable: initial){corner-shape:var(--corner-shape-squircle)}}*,:after,:before{margin:0;box-sizing:inherit;scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb) var(--scrollbar-track)}:focus-visible{outline:var(--outline);outline-offset:var(--outline-offset)}body{color:var(--global-foreground);margin:0;font-size:var(--font-scale-body-medium);font-optical-sizing:auto;font-family:var(--font-family-body),sans-serif;font-variation-settings:"wght" 400;font-variant-numeric:tabular-nums}::selection{background-color:var(--global-primary);color:contrast-color(var(--global-primary));text-shadow:none}img{display:block;inline-size:100%;max-inline-size:100%}svg:not([fill]){fill:currentcolor}ol ul,ul ol{font-size:medium}table{border-spacing:0;inline-size:100%;border-collapse:collapse}table[data-layout-fixed]{table-layout:fixed}table thead{box-shadow:inset 0 -3px 0 var(--base-2)}table[data-table-separators] tr+tr{border-top:1px solid var(--base-2)}table th{white-space:nowrap;font-variation-settings:"wght" 800}table :is(td,th){border:none;text-align:left;font-size:medium;padding:calc(var(--space-x-small) + var(--space-2x-small)) var(--space-small)}fieldset{padding:0;margin:0;border:0}[data-elevation]{--shadow-direction:1;--shadow-opacity-factor:0.16;--extra-shadow:0 0 0 1px #0000;--shadow-color:oklab(0 0 0);transition-property:box-shadow;transition-duration:var(--elevation-transition-duration,.16s);transition-timing-function:var(--elevation-transition-easing,ease)}}@layer viraui.preflight{[data-elevation]:where([data-elevation-direction=bottom],[data-elevation-direction=right]){--shadow-direction:1}[data-elevation]:where([data-elevation-direction=top],[data-elevation-direction=left]){--shadow-direction:-1}[data-elevation-hover="0"]:hover,[data-elevation="0"]{--y1:0px;--x1:0px;box-shadow:calc(var(--x1) * var(--shadow-direction)) calc(var(--y1) * var(--shadow-direction)) 0 oklch(from var(--shadow-color) l c h/var(--shadow-opacity-factor)),0 0 0 color-mix(in oklch,var(--shadow-color),#0000 calc(94% - var(--shadow-opacity-factor))),0 0 0 oklch(from var(--shadow-color) l c h/var(--shadow-opacity-factor)),var(--extra-shadow)}[data-elevation-hover="1"]:hover,[data-elevation-hover="2"]:hover,[data-elevation-hover="3"]:hover,[data-elevation-hover="4"]:hover,[data-elevation="1"],[data-elevation="2"],[data-elevation="3"],[data-elevation="4"]{box-shadow:calc(var(--x1) * var(--shadow-direction)) calc(var(--y1) * var(--shadow-direction)) var(--shadow-blur-1) oklab(from var(--shadow-color) l a b/.1),calc(var(--x2) * var(--shadow-direction)) calc(var(--y2) * var(--shadow-direction)) var(--shadow-blur-2) oklab(from var(--shadow-color) l a b/.09),calc(var(--x3) * var(--shadow-direction)) calc(var(--y3) * var(--shadow-direction)) var(--shadow-blur-3) oklab(from var(--shadow-color) l a b/.05),calc(var(--x4) * var(--shadow-direction)) calc(var(--y4) * var(--shadow-direction)) var(--shadow-blur-4) oklab(from var(--shadow-color) l a b/.01),var(--extra-shadow)}[data-elevation-hover="1"]:hover,[data-elevation="1"]{--y1:0px;--y2:2px;--y3:4px;--y4:7px;--x1:0px;--x2:0px;--x3:0px;--x4:0px;--shadow-blur-1:1px;--shadow-blur-2:2px;--shadow-blur-3:2px;--shadow-blur-4:3px}[data-elevation-hover="1"]:where([data-elevation-direction=left],[data-elevation-direction=right]):hover,[data-elevation="1"]:where([data-elevation-direction=left],[data-elevation-direction=right]){--y1:0px;--y2:0px;--y3:0px;--y4:0px;--x1:0px;--x2:2px;--x3:4px;--x4:7px}[data-elevation-hover="2"]:hover,[data-elevation="2"]{--y1:1px;--y2:5px;--y3:11px;--y4:19px;--x1:0px;--x2:0px;--x3:0px;--x4:0px;--shadow-blur-1:3px;--shadow-blur-2:5px;--shadow-blur-3:6px;--shadow-blur-4:8px}[data-elevation-hover="2"]:where([data-elevation-direction=top],[data-elevation-direction=left]):hover,[data-elevation="2"]:where([data-elevation-direction=top],[data-elevation-direction=left]){--shadow-blur-3:7px}[data-elevation-hover="2"]:where([data-elevation-direction=left],[data-elevation-direction=right]):hover,[data-elevation="2"]:where([data-elevation-direction=left],[data-elevation-direction=right]){--y1:0px;--y2:0px;--y3:0px;--y4:0px;--x1:1px;--x2:5px;--x3:11px;--x4:19px}[data-elevation-hover="2"]:where([data-elevation-direction=right]):hover,[data-elevation="2"]:where([data-elevation-direction=right]){--shadow-blur-3:6px}[data-elevation-hover="3"]:hover,[data-elevation="3"]{--y1:2px;--y2:7px;--y3:16px;--y4:29px;--x1:0px;--x2:0px;--x3:0px;--x4:0px;--shadow-blur-1:4px;--shadow-blur-2:7px;--shadow-blur-3:10px;--shadow-blur-4:12px}[data-elevation-hover="3"]:where([data-elevation-direction=left],[data-elevation-direction=right]):hover,[data-elevation="3"]:where([data-elevation-direction=left],[data-elevation-direction=right]){--y1:0px;--y2:0px;--y3:0px;--y4:0px;--x1:2px;--x2:7px;--x3:16px;--x4:29px}[data-elevation-hover="3"]:where([data-elevation-direction=right]):hover,[data-elevation="3"]:where([data-elevation-direction=right]){--x2:10px;--x3:22px;--x4:39px;--shadow-blur-1:5px;--shadow-blur-2:10px;--shadow-blur-3:13px;--shadow-blur-4:15px}[data-elevation-hover="4"]:hover,[data-elevation="4"]{--y1:4px;--y2:14px;--y3:33px;--y4:58px;--x1:0px;--x2:0px;--x3:0px;--x4:0px;--shadow-blur-1:8px;--shadow-blur-2:14px;--shadow-blur-3:20px;--shadow-blur-4:23px}[data-elevation-hover="4"]:where([data-elevation-direction=top]):hover,[data-elevation="4"]:where([data-elevation-direction=top]){--y2:15px;--shadow-blur-2:15px}[data-elevation-hover="4"]:where([data-elevation-direction=left]):hover,[data-elevation="4"]:where([data-elevation-direction=left]){--y1:0px;--y2:0px;--y3:0px;--y4:0px;--x1:4px;--x2:15px;--x3:33px;--x4:58px;--shadow-blur-2:15px}[data-elevation-hover="4"]:where([data-elevation-direction=right]):hover,[data-elevation="4"]:where([data-elevation-direction=right]){--y1:0px;--y2:0px;--y3:0px;--y4:0px;--x1:4px;--x2:14px;--x3:33px;--x4:58px}}@layer viraui.preflight{[data-grow=false]{--vira-flex-grow:0;flex-grow:0}[data-shrink=false]{--vira-flex-shrink:0;flex-shrink:0}}@layer viraui.preflight{:where(p){line-height:1.5;min-block-size:.01vh;font-size:var(--font-scale-body-medium)}small{font-size:.7em}b,strong{font-variation-settings:"wght" 700}:where(a:any-link):not([data-no-link-style]){text-decoration:none;color:var(--global-interactive-text);word-break:break-word;&:not([class]){background:linear-gradient(currentcolor,currentcolor) no-repeat 0 100%;background-size:0 1px;transition:background-size var(--duration-fast) var(--easing-entrance);&:focus,&:hover{background-size:100% 1px}}}del{padding:0 .4em;margin:0 .2em;background-color:oklab(from var(--highlight-red) l a b/12%);color:var(--highlight-red);box-shadow:0 0 0 1px oklab(from var(--highlight-red) l a b/50%);border-radius:var(--radius-small)}ins{background-color:oklab(from var(--highlight-green) l a b/15%);color:var(--highlight-green);box-shadow:0 0 0 1px oklab(from var(--highlight-green) l a b/50%)}ins,mark{padding:0 .4em;margin:0 .2em;text-decoration:none;border-radius:var(--radius-small)}mark{background-color:oklab(from var(--highlight-yellow) l a b/15%);color:var(--highlight-yellow);box-shadow:0 0 0 1px oklab(from var(--highlight-yellow) l a b/50%)}address{font-style:normal;line-height:inherit}dt{font-variation-settings:"wght" 600}dd{margin:0;padding:0}ul{font-size:medium;padding-left:1rem;& li::marker{font-size:inherit;text-align:right;font-variation-settings:"wght" 400;min-inline-size:var(--space-x-large);color:oklab(from currentColor l a b/80%)}}ol{font-size:medium;& li::marker{font-size:inherit;font-variation-settings:"wght" 400;min-inline-size:var(--space-x-large);font-variant-numeric:tabular-nums;white-space:nowrap;color:oklab(from currentColor l a b/80%)}}kbd{padding:.2em .4em;border-radius:var(--radius-small);font-variation-settings:"wght" 600;box-shadow:var(--global-contrast);background:var(--global-contrast)}abbr{text-decoration:underline dashed var(--global-primary)}label,legend{font-size:inherit}code{background-color:var(--global-contrast);border-radius:var(--radius-small);box-shadow:var(--global-contrast);padding:.2em .4em;font-size:1em;font-family:var(--font-family-mono);vertical-align:top}pre code{box-shadow:none}s{text-decoration:line-through;color:var(--global-disabled-foreground);text-decoration-color:oklab(from var(--global-foreground) l a b/50%)}:root{color-scheme:light dark}[data-theme=dark]{color-scheme:dark}[data-theme=light]{color-scheme:light}}@layer viraui.preflight{}@layer viraui.preflight{@container root not style(--vibrancy-enable: initial){[data-vibrant]{backdrop-filter:brightness(var(--vibrancy-brightness)) blur(calc(var(--vibrancy-blur) * 1px))}}}
1
+ @layer viraui.preflight;@layer viraui.preflight{@property --scrollbar-thumb{syntax:"<color>";initial-value:#0000;inherits:true}@property --scrollbar-track{syntax:"<color>";initial-value:#0000;inherits:true}@property --outline-offset{syntax:"<length>";initial-value:2px;inherits:true}@property --outline-color{syntax:"<color>";initial-value:currentcolor;inherits:true}@property --outline{syntax:"*";initial-value:2px solid currentcolor;inherits:true}@property --is-light-theme{syntax:"<color>";initial-value:#000;inherits:true}}@layer viraui.preflight{html{--scrollbar-thumb:oklab(from var(--global-contrast) l a b/0.3);--scrollbar-track:#0000;--outline-offset:2px;--outline-color:var(--global-outline);--outline:2px solid var(--outline-color);--is-light-theme:contrast-color(var(--global-background));font-size:100%;box-sizing:border-box;line-height:1.5;background-color:var(--global-background);color:var(--global-foreground);container:root/normal}*{@container root not style(--corner-shape-enable: initial){corner-shape:var(--corner-shape-squircle)}}*,:after,:before{margin:0;box-sizing:inherit;scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb) var(--scrollbar-track)}:focus-visible{outline:var(--outline);outline-offset:var(--outline-offset)}body{color:var(--global-foreground);margin:0;font-size:var(--font-scale-body-medium);font-optical-sizing:auto;font-family:var(--font-family-body),system-ui,sans-serif;font-variation-settings:"wght" 400;font-variant-numeric:tabular-nums}::selection{background-color:var(--global-primary);color:contrast-color(var(--global-primary));text-shadow:none}img{display:block;inline-size:100%;max-inline-size:100%}svg:not([fill]){fill:currentcolor}ol ul,ul ol{font-size:medium}table{border-spacing:0;inline-size:100%;border-collapse:collapse}table[data-layout-fixed]{table-layout:fixed}table thead{box-shadow:inset 0 -3px 0 var(--base-2)}table[data-table-separators] tr+tr{border-top:1px solid var(--base-2)}table th{white-space:nowrap;font-variation-settings:"wght" 800}table :is(td,th){border:none;text-align:left;font-size:medium;padding:calc(var(--space-x-small) + var(--space-2x-small)) var(--space-small)}button,fieldset{padding:0;margin:0;border:0}button{appearance:none;background:none;font-size:inherit;font-family:inherit;display:inline-flex;cursor:pointer;color:inherit}[data-elevation]{--shadow-direction:1;--shadow-opacity-factor:0.16;--extra-shadow:0 0 0 1px #0000;--shadow-color:oklab(0 0 0);transition-property:box-shadow;transition-duration:var(--elevation-transition-duration,.16s);transition-timing-function:var(--elevation-transition-easing,ease)}}@layer viraui.preflight{[data-elevation]:where([data-elevation-direction=bottom],[data-elevation-direction=right]){--shadow-direction:1}[data-elevation]:where([data-elevation-direction=top],[data-elevation-direction=left]){--shadow-direction:-1}[data-elevation-hover="0"]:hover,[data-elevation="0"]{--y1:0px;--x1:0px;box-shadow:calc(var(--x1) * var(--shadow-direction)) calc(var(--y1) * var(--shadow-direction)) 0 oklch(from var(--shadow-color) l c h/var(--shadow-opacity-factor)),0 0 0 color-mix(in oklch,var(--shadow-color),#0000 calc(94% - var(--shadow-opacity-factor))),0 0 0 oklch(from var(--shadow-color) l c h/var(--shadow-opacity-factor)),var(--extra-shadow)}[data-elevation-hover="1"]:hover,[data-elevation-hover="2"]:hover,[data-elevation-hover="3"]:hover,[data-elevation-hover="4"]:hover,[data-elevation="1"],[data-elevation="2"],[data-elevation="3"],[data-elevation="4"]{box-shadow:calc(var(--x1) * var(--shadow-direction)) calc(var(--y1) * var(--shadow-direction)) var(--shadow-blur-1) oklab(from var(--shadow-color) l a b/.1),calc(var(--x2) * var(--shadow-direction)) calc(var(--y2) * var(--shadow-direction)) var(--shadow-blur-2) oklab(from var(--shadow-color) l a b/.09),calc(var(--x3) * var(--shadow-direction)) calc(var(--y3) * var(--shadow-direction)) var(--shadow-blur-3) oklab(from var(--shadow-color) l a b/.05),calc(var(--x4) * var(--shadow-direction)) calc(var(--y4) * var(--shadow-direction)) var(--shadow-blur-4) oklab(from var(--shadow-color) l a b/.01),var(--extra-shadow)}[data-elevation-hover="1"]:hover,[data-elevation="1"]{--y1:0px;--y2:2px;--y3:4px;--y4:7px;--x1:0px;--x2:0px;--x3:0px;--x4:0px;--shadow-blur-1:1px;--shadow-blur-2:2px;--shadow-blur-3:2px;--shadow-blur-4:3px}[data-elevation-hover="1"]:where([data-elevation-direction=left],[data-elevation-direction=right]):hover,[data-elevation="1"]:where([data-elevation-direction=left],[data-elevation-direction=right]){--y1:0px;--y2:0px;--y3:0px;--y4:0px;--x1:0px;--x2:2px;--x3:4px;--x4:7px}[data-elevation-hover="2"]:hover,[data-elevation="2"]{--y1:1px;--y2:5px;--y3:11px;--y4:19px;--x1:0px;--x2:0px;--x3:0px;--x4:0px;--shadow-blur-1:3px;--shadow-blur-2:5px;--shadow-blur-3:6px;--shadow-blur-4:8px}[data-elevation-hover="2"]:where([data-elevation-direction=top],[data-elevation-direction=left]):hover,[data-elevation="2"]:where([data-elevation-direction=top],[data-elevation-direction=left]){--shadow-blur-3:7px}[data-elevation-hover="2"]:where([data-elevation-direction=left],[data-elevation-direction=right]):hover,[data-elevation="2"]:where([data-elevation-direction=left],[data-elevation-direction=right]){--y1:0px;--y2:0px;--y3:0px;--y4:0px;--x1:1px;--x2:5px;--x3:11px;--x4:19px}[data-elevation-hover="2"]:where([data-elevation-direction=right]):hover,[data-elevation="2"]:where([data-elevation-direction=right]){--shadow-blur-3:6px}[data-elevation-hover="3"]:hover,[data-elevation="3"]{--y1:2px;--y2:7px;--y3:16px;--y4:29px;--x1:0px;--x2:0px;--x3:0px;--x4:0px;--shadow-blur-1:4px;--shadow-blur-2:7px;--shadow-blur-3:10px;--shadow-blur-4:12px}[data-elevation-hover="3"]:where([data-elevation-direction=left],[data-elevation-direction=right]):hover,[data-elevation="3"]:where([data-elevation-direction=left],[data-elevation-direction=right]){--y1:0px;--y2:0px;--y3:0px;--y4:0px;--x1:2px;--x2:7px;--x3:16px;--x4:29px}[data-elevation-hover="3"]:where([data-elevation-direction=right]):hover,[data-elevation="3"]:where([data-elevation-direction=right]){--x2:10px;--x3:22px;--x4:39px;--shadow-blur-1:5px;--shadow-blur-2:10px;--shadow-blur-3:13px;--shadow-blur-4:15px}[data-elevation-hover="4"]:hover,[data-elevation="4"]{--y1:4px;--y2:14px;--y3:33px;--y4:58px;--x1:0px;--x2:0px;--x3:0px;--x4:0px;--shadow-blur-1:8px;--shadow-blur-2:14px;--shadow-blur-3:20px;--shadow-blur-4:23px}[data-elevation-hover="4"]:where([data-elevation-direction=top]):hover,[data-elevation="4"]:where([data-elevation-direction=top]){--y2:15px;--shadow-blur-2:15px}[data-elevation-hover="4"]:where([data-elevation-direction=left]):hover,[data-elevation="4"]:where([data-elevation-direction=left]){--y1:0px;--y2:0px;--y3:0px;--y4:0px;--x1:4px;--x2:15px;--x3:33px;--x4:58px;--shadow-blur-2:15px}[data-elevation-hover="4"]:where([data-elevation-direction=right]):hover,[data-elevation="4"]:where([data-elevation-direction=right]){--y1:0px;--y2:0px;--y3:0px;--y4:0px;--x1:4px;--x2:14px;--x3:33px;--x4:58px}}@layer viraui.preflight{[data-grow=false]{--vira-flex-grow:0;flex-grow:0}[data-shrink=false]{--vira-flex-shrink:0;flex-shrink:0}}@layer viraui.preflight{:where(p){line-height:1.5;min-block-size:.01vh;font-size:var(--font-scale-body-medium)}small{font-size:.7em}b,strong{font-variation-settings:"wght" 700}:where(a:any-link):not([data-no-link-style]){text-decoration:none;color:var(--global-interactive-text);word-break:break-word;&:not([class]){background:linear-gradient(currentcolor,currentcolor) no-repeat 0 100%;background-size:0 1px;transition:background-size var(--duration-fast) var(--easing-entrance);&:focus,&:hover{background-size:100% 1px}}}del{padding:0 .4em;margin:0 .2em;background-color:oklab(from var(--highlight-red) l a b/12%);color:var(--highlight-red);box-shadow:0 0 0 1px oklab(from var(--highlight-red) l a b/50%);border-radius:var(--radius-small)}ins{background-color:oklab(from var(--highlight-green) l a b/15%);color:var(--highlight-green);box-shadow:0 0 0 1px oklab(from var(--highlight-green) l a b/50%)}ins,mark{padding:0 .4em;margin:0 .2em;text-decoration:none;border-radius:var(--radius-small)}mark{background-color:oklab(from var(--highlight-yellow) l a b/15%);color:var(--highlight-yellow);box-shadow:0 0 0 1px oklab(from var(--highlight-yellow) l a b/50%)}address{font-style:normal;line-height:inherit}dt{font-variation-settings:"wght" 600}dd{margin:0;padding:0}ul{font-size:medium;padding-left:1rem;& li::marker{font-size:inherit;text-align:right;font-variation-settings:"wght" 400;min-inline-size:var(--space-x-large);color:oklab(from currentColor l a b/80%)}}ol{font-size:medium;& li::marker{font-size:inherit;font-variation-settings:"wght" 400;min-inline-size:var(--space-x-large);font-variant-numeric:tabular-nums;white-space:nowrap;color:oklab(from currentColor l a b/80%)}}kbd{padding:.2em .4em;border-radius:var(--radius-small);font-variation-settings:"wght" 600;box-shadow:var(--global-contrast);background:var(--global-contrast)}abbr{text-decoration:underline dashed var(--global-primary)}label,legend{font-size:inherit}code{background-color:var(--global-contrast);border-radius:var(--radius-small);box-shadow:var(--global-contrast);padding:.2em .4em;font-size:1em;font-family:var(--font-family-mono);vertical-align:top}pre code{box-shadow:none}s{text-decoration:line-through;color:var(--global-disabled-foreground);text-decoration-color:oklab(from var(--global-foreground) l a b/50%)}:root{color-scheme:light dark}[data-theme=dark]{color-scheme:dark}[data-theme=light]{color-scheme:light}}@layer viraui.preflight{[data-theme=inverted]{@container root style(--is-light-theme: black){color-scheme:dark}@container root style(--is-light-theme: white){color-scheme:light}}}@layer viraui.preflight{@container root not style(--vibrancy-enable: initial){[data-vibrant]{backdrop-filter:brightness(var(--vibrancy-brightness)) blur(calc(var(--vibrancy-blur) * 1px)) saturate(150%);@container root style(--is-light-theme: black){backdrop-filter:brightness(100%) blur(calc(var(--vibrancy-blur) * 1px)) saturate(150%)}}}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@viraui/react",
3
- "version": "0.0.25",
3
+ "version": "0.0.27",
4
4
  "private": false,
5
5
  "files": [
6
6
  "dist"
@@ -34,15 +34,15 @@
34
34
  },
35
35
  "devDependencies": {
36
36
  "@base-ui/react": "1.6.0",
37
- "postcss": "8.5.6",
37
+ "postcss": "8.5.19",
38
38
  "postcss-cli": "11.0.1",
39
39
  "react": ">=19.2.7",
40
40
  "react-dom": ">=19.2.7",
41
41
  "svger-cli": "4.0.8",
42
- "vite": "8.0.16",
43
- "vite-plugin-dts": "4.5.4",
44
- "vite-plugin-static-copy": "2.3.0",
45
- "@viraui/foundation": "0.0.25",
42
+ "unplugin-dts": "1.0.3",
43
+ "vite": "8.1.4",
44
+ "vite-plugin-static-copy": "4.1.1",
45
+ "@viraui/foundation": "0.0.27",
46
46
  "@viraui/icons": "0.0.15",
47
47
  "@viraui/postcss-config": "0.0.17",
48
48
  "@viraui/tsconfig": "0.0.17"