@-reddacted-/react-ui 0.3.1 → 0.4.0

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 (136) hide show
  1. package/dist/components/Accordion.d.ts +27 -0
  2. package/dist/components/Accordion.d.ts.map +1 -0
  3. package/dist/components/Accordion.js +35 -0
  4. package/dist/components/Badge.d.ts +15 -0
  5. package/dist/components/Badge.d.ts.map +1 -0
  6. package/dist/components/Badge.js +7 -0
  7. package/dist/components/Button.d.ts +15 -2
  8. package/dist/components/Button.d.ts.map +1 -1
  9. package/dist/components/Button.js +76 -44
  10. package/dist/components/Card.d.ts +21 -0
  11. package/dist/components/Card.d.ts.map +1 -0
  12. package/dist/components/Card.js +17 -0
  13. package/dist/components/ColorField.d.ts.map +1 -1
  14. package/dist/components/ColorField.js +1 -1
  15. package/dist/components/ConfirmDeleteButton.d.ts +4 -1
  16. package/dist/components/ConfirmDeleteButton.d.ts.map +1 -1
  17. package/dist/components/ConfirmDeleteButton.js +6 -7
  18. package/dist/components/Drawer.d.ts +33 -0
  19. package/dist/components/Drawer.d.ts.map +1 -0
  20. package/dist/components/Drawer.js +123 -0
  21. package/dist/components/DropdownMenu.d.ts +61 -0
  22. package/dist/components/DropdownMenu.d.ts.map +1 -0
  23. package/dist/components/DropdownMenu.js +302 -0
  24. package/dist/components/Modal.d.ts.map +1 -1
  25. package/dist/components/Modal.js +102 -134
  26. package/dist/components/NavBar.d.ts.map +1 -1
  27. package/dist/components/NavBar.js +4 -2
  28. package/dist/components/PageStatus.d.ts +12 -12
  29. package/dist/components/PageStatus.d.ts.map +1 -1
  30. package/dist/components/PageStatus.js +9 -29
  31. package/dist/components/Pagination.d.ts +44 -0
  32. package/dist/components/Pagination.d.ts.map +1 -0
  33. package/dist/components/Pagination.js +57 -0
  34. package/dist/components/Skeleton.d.ts +13 -0
  35. package/dist/components/Skeleton.d.ts.map +1 -0
  36. package/dist/components/Skeleton.js +15 -0
  37. package/dist/components/Spinner.d.ts +14 -0
  38. package/dist/components/Spinner.d.ts.map +1 -0
  39. package/dist/components/Spinner.js +14 -0
  40. package/dist/components/Stack.d.ts +13 -0
  41. package/dist/components/Stack.d.ts.map +1 -0
  42. package/dist/components/Stack.js +15 -0
  43. package/dist/components/Table.d.ts +54 -0
  44. package/dist/components/Table.d.ts.map +1 -0
  45. package/dist/components/Table.js +101 -0
  46. package/dist/components/Tabs.d.ts +34 -0
  47. package/dist/components/Tabs.d.ts.map +1 -0
  48. package/dist/components/Tabs.js +82 -0
  49. package/dist/components/Tag.d.ts +10 -0
  50. package/dist/components/Tag.d.ts.map +1 -0
  51. package/dist/components/Tag.js +7 -0
  52. package/dist/components/Tooltip.d.ts +22 -0
  53. package/dist/components/Tooltip.d.ts.map +1 -0
  54. package/dist/components/Tooltip.js +76 -0
  55. package/dist/components/drawerStore.d.ts +11 -0
  56. package/dist/components/drawerStore.d.ts.map +1 -0
  57. package/dist/components/drawerStore.js +40 -0
  58. package/dist/components/paginationItems.d.ts +18 -0
  59. package/dist/components/paginationItems.d.ts.map +1 -0
  60. package/dist/components/paginationItems.js +32 -0
  61. package/dist/index.d.ts +22 -6
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +16 -2
  64. package/dist/popup/PopupHost.d.ts +19 -3
  65. package/dist/popup/PopupHost.d.ts.map +1 -1
  66. package/dist/popup/PopupHost.js +65 -44
  67. package/dist/popup/PopupProvider.d.ts +19 -2
  68. package/dist/popup/PopupProvider.d.ts.map +1 -1
  69. package/dist/popup/PopupProvider.js +69 -17
  70. package/dist/popup/usePopup.d.ts +11 -4
  71. package/dist/popup/usePopup.d.ts.map +1 -1
  72. package/dist/style/accordionCss.d.ts +2 -0
  73. package/dist/style/accordionCss.d.ts.map +1 -0
  74. package/dist/style/accordionCss.js +101 -0
  75. package/dist/style/badgeCss.d.ts +5 -0
  76. package/dist/style/badgeCss.d.ts.map +1 -0
  77. package/dist/style/badgeCss.js +68 -0
  78. package/dist/style/breadcrumbCss.d.ts +2 -0
  79. package/dist/style/breadcrumbCss.d.ts.map +1 -0
  80. package/dist/style/breadcrumbCss.js +53 -0
  81. package/dist/style/cardCss.d.ts +2 -0
  82. package/dist/style/cardCss.d.ts.map +1 -0
  83. package/dist/style/cardCss.js +49 -0
  84. package/dist/style/inputCss.d.ts +2 -0
  85. package/dist/style/inputCss.d.ts.map +1 -0
  86. package/dist/style/inputCss.js +107 -0
  87. package/dist/style/loaderCss.d.ts +2 -0
  88. package/dist/style/loaderCss.d.ts.map +1 -0
  89. package/dist/style/loaderCss.js +39 -0
  90. package/dist/style/menuCss.d.ts +2 -0
  91. package/dist/style/menuCss.d.ts.map +1 -0
  92. package/dist/style/menuCss.js +71 -0
  93. package/dist/style/paginationCss.d.ts +2 -0
  94. package/dist/style/paginationCss.d.ts.map +1 -0
  95. package/dist/style/paginationCss.js +57 -0
  96. package/dist/style/resolveColor.d.ts +8 -0
  97. package/dist/style/resolveColor.d.ts.map +1 -0
  98. package/dist/style/resolveColor.js +13 -0
  99. package/dist/style/stackCss.d.ts +2 -0
  100. package/dist/style/stackCss.d.ts.map +1 -0
  101. package/dist/style/stackCss.js +21 -0
  102. package/dist/style/statusCss.d.ts +2 -0
  103. package/dist/style/statusCss.d.ts.map +1 -0
  104. package/dist/style/statusCss.js +38 -0
  105. package/dist/style/tableCss.d.ts +2 -0
  106. package/dist/style/tableCss.d.ts.map +1 -0
  107. package/dist/style/tableCss.js +92 -0
  108. package/dist/style/tabsCss.d.ts +2 -0
  109. package/dist/style/tabsCss.d.ts.map +1 -0
  110. package/dist/style/tabsCss.js +72 -0
  111. package/dist/style/toLength.d.ts +4 -0
  112. package/dist/style/toLength.d.ts.map +1 -0
  113. package/dist/style/toLength.js +3 -0
  114. package/dist/style/tooltipCss.d.ts +2 -0
  115. package/dist/style/tooltipCss.d.ts.map +1 -0
  116. package/dist/style/tooltipCss.js +44 -0
  117. package/dist/style/useStyle.d.ts +7 -0
  118. package/dist/style/useStyle.d.ts.map +1 -0
  119. package/dist/style/useStyle.js +16 -0
  120. package/dist/theme/ThemeProvider.d.ts.map +1 -1
  121. package/dist/theme/ThemeProvider.js +32 -0
  122. package/dist/theme/palette.d.ts.map +1 -1
  123. package/dist/theme/palette.js +0 -2
  124. package/dist/tooltip/attributeTooltips.d.ts +7 -0
  125. package/dist/tooltip/attributeTooltips.d.ts.map +1 -0
  126. package/dist/tooltip/attributeTooltips.js +76 -0
  127. package/dist/tooltip/tooltipEngine.d.ts +41 -0
  128. package/dist/tooltip/tooltipEngine.d.ts.map +1 -0
  129. package/dist/tooltip/tooltipEngine.js +128 -0
  130. package/dist/utils/childRef.d.ts +5 -0
  131. package/dist/utils/childRef.d.ts.map +1 -0
  132. package/dist/utils/childRef.js +14 -0
  133. package/dist/utils/isDev.d.ts +3 -0
  134. package/dist/utils/isDev.d.ts.map +1 -0
  135. package/dist/utils/isDev.js +4 -0
  136. package/package.json +5 -4
@@ -0,0 +1,101 @@
1
+ // Accordion on native <details> / <summary>: `rui-accordion` on the container,
2
+ // `data-variant="separated|joined"` (default joined), `data-chevron="start|end|none"` (default end).
3
+ // Every selector is wrapped in :where() so it has zero specificity:
4
+ // any class or style set by the consuming project wins without !important.
5
+ const border = "1px solid var(--rui-accordion-border, var(--color-border))";
6
+ const bg = "var(--rui-accordion-bg, var(--color-surface))";
7
+ const padding = "var(--rui-accordion-padding, 0.875rem 1rem)";
8
+ const chevron = `
9
+ content: "";
10
+ flex-shrink: 0;
11
+ width: 0.45em;
12
+ height: 0.45em;
13
+ border-right: 2px solid var(--color-text-muted);
14
+ border-bottom: 2px solid var(--color-text-muted);
15
+ transform: translateY(-25%) rotate(45deg);
16
+ transition: transform 150ms ease-out;
17
+ `;
18
+ const chevronOpen = "transform: translateY(25%) rotate(-135deg);";
19
+ export const accordionCss = `
20
+ :where(.rui-accordion:not([data-variant="separated"])) {
21
+ border: ${border};
22
+ border-radius: 12px;
23
+ background-color: ${bg};
24
+ overflow: hidden;
25
+ }
26
+ :where(.rui-accordion:not([data-variant="separated"])) > :where(details + details) {
27
+ border-top: ${border};
28
+ }
29
+ :where(.rui-accordion[data-variant="separated"]) {
30
+ display: flex;
31
+ flex-direction: column;
32
+ gap: var(--rui-accordion-gap, 0.5rem);
33
+ }
34
+ :where(.rui-accordion[data-variant="separated"]) > :where(details) {
35
+ border: ${border};
36
+ border-radius: 12px;
37
+ background-color: ${bg};
38
+ overflow: hidden;
39
+ }
40
+
41
+ :where(.rui-accordion) :where(summary) {
42
+ display: flex;
43
+ align-items: center;
44
+ gap: 0.75rem;
45
+ padding: ${padding};
46
+ color: var(--color-text);
47
+ font-weight: 500;
48
+ list-style: none;
49
+ cursor: pointer;
50
+ }
51
+ :where(.rui-accordion) :where(summary)::-webkit-details-marker {
52
+ display: none;
53
+ }
54
+ :where(.rui-accordion) :where(summary:hover) {
55
+ background-color: color-mix(in srgb, var(--color-text) 4%, transparent);
56
+ }
57
+ :where(.rui-accordion) :where(summary:focus-visible) {
58
+ outline: 2px solid var(--color-primary);
59
+ outline-offset: -2px;
60
+ }
61
+ :where(.rui-accordion) :where(details) > :where(:not(summary)) {
62
+ padding: ${padding};
63
+ color: var(--color-text);
64
+ }
65
+
66
+ :where(.rui-accordion:not([data-chevron="start"], [data-chevron="none"])) :where(summary)::after {
67
+ ${chevron}
68
+ margin-left: auto;
69
+ }
70
+ :where(.rui-accordion:not([data-chevron="start"], [data-chevron="none"])) :where(details[open] > summary)::after {
71
+ ${chevronOpen}
72
+ }
73
+ :where(.rui-accordion[data-chevron="start"]) :where(summary)::before {
74
+ ${chevron}
75
+ }
76
+ :where(.rui-accordion[data-chevron="start"]) :where(details[open] > summary)::before {
77
+ ${chevronOpen}
78
+ }
79
+
80
+ /* Progressive enhancement: animated where the browser can transition to height: auto. */
81
+ @supports (interpolate-size: allow-keywords) {
82
+ :where(.rui-accordion) {
83
+ interpolate-size: allow-keywords;
84
+ }
85
+ :where(.rui-accordion details)::details-content {
86
+ height: 0;
87
+ overflow: hidden;
88
+ transition: height 200ms ease-out, content-visibility 200ms allow-discrete;
89
+ }
90
+ :where(.rui-accordion details[open])::details-content {
91
+ height: auto;
92
+ }
93
+ }
94
+ @media (prefers-reduced-motion: reduce) {
95
+ :where(.rui-accordion) :where(summary)::before,
96
+ :where(.rui-accordion) :where(summary)::after,
97
+ :where(.rui-accordion details)::details-content {
98
+ transition: none;
99
+ }
100
+ }
101
+ `;
@@ -0,0 +1,5 @@
1
+ import type { CSSProperties } from "react";
2
+ /** CSS variables shared by Badge and Tag. */
3
+ export declare function badgeVars(color: string, size: string | number | undefined): CSSProperties;
4
+ export declare const badgeCss = "\n:where(.rui-badge, .rui-tag) {\n display: inline-flex;\n align-items: center;\n gap: 0.35em;\n box-sizing: border-box;\n padding: 0.2em 0.6em;\n border: 1px solid var(--rui-badge-color, var(--color-primary));\n border-radius: 999px;\n background-color: var(--rui-badge-color, var(--color-primary));\n color: var(--rui-badge-on, var(--color-bg));\n font-size: var(--rui-badge-size, 0.75em);\n font-weight: 500;\n line-height: 1.2;\n white-space: nowrap;\n vertical-align: middle;\n}\n:where(.rui-badge[data-variant=\"outline\"], .rui-tag[data-variant=\"outline\"]) {\n background-color: transparent;\n color: var(--rui-badge-color, var(--color-primary));\n}\n:where(.rui-badge[data-variant=\"soft\"], .rui-tag[data-variant=\"soft\"]) {\n border-color: transparent;\n background-color: color-mix(in srgb, var(--rui-badge-color, var(--color-primary)) 15%, transparent);\n color: var(--rui-badge-color, var(--color-primary));\n}\n:where(.rui-tag-remove) {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1.2em;\n height: 1.2em;\n margin-right: -0.3em;\n padding: 0;\n border: none;\n border-radius: 50%;\n background: none;\n color: inherit;\n font: inherit;\n line-height: 1;\n cursor: pointer;\n opacity: 0.75;\n}\n:where(.rui-tag-remove:hover) {\n opacity: 1;\n background-color: color-mix(in srgb, currentColor 20%, transparent);\n}\n:where(.rui-tag-remove:focus-visible) {\n opacity: 1;\n outline: 2px solid currentColor;\n outline-offset: 1px;\n}\n";
5
+ //# sourceMappingURL=badgeCss.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badgeCss.d.ts","sourceRoot":"","sources":["../../src/style/badgeCss.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAI1C,6CAA6C;AAC7C,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,CAMzF;AAOD,eAAO,MAAM,QAAQ,2/CAoDpB,CAAA"}
@@ -0,0 +1,68 @@
1
+ import { resolveColor, resolveOnColor } from "./resolveColor.js";
2
+ import { toLength } from "./toLength.js";
3
+ /** CSS variables shared by Badge and Tag. */
4
+ export function badgeVars(color, size) {
5
+ return {
6
+ "--rui-badge-color": resolveColor(color),
7
+ "--rui-badge-on": resolveOnColor(color),
8
+ "--rui-badge-size": toLength(size),
9
+ };
10
+ }
11
+ // Badge and Tag labels, usable as bare classes (`rui-badge`, `rui-tag` + `rui-tag-remove`)
12
+ // or through the Badge / Tag components. Variant through `data-variant="outline|soft"`.
13
+ // Every selector is wrapped in :where() so it has zero specificity:
14
+ // any class or style set by the consuming project wins without !important.
15
+ // Sizes are in em: padding and radius follow the font size.
16
+ export const badgeCss = `
17
+ :where(.rui-badge, .rui-tag) {
18
+ display: inline-flex;
19
+ align-items: center;
20
+ gap: 0.35em;
21
+ box-sizing: border-box;
22
+ padding: 0.2em 0.6em;
23
+ border: 1px solid var(--rui-badge-color, var(--color-primary));
24
+ border-radius: 999px;
25
+ background-color: var(--rui-badge-color, var(--color-primary));
26
+ color: var(--rui-badge-on, var(--color-bg));
27
+ font-size: var(--rui-badge-size, 0.75em);
28
+ font-weight: 500;
29
+ line-height: 1.2;
30
+ white-space: nowrap;
31
+ vertical-align: middle;
32
+ }
33
+ :where(.rui-badge[data-variant="outline"], .rui-tag[data-variant="outline"]) {
34
+ background-color: transparent;
35
+ color: var(--rui-badge-color, var(--color-primary));
36
+ }
37
+ :where(.rui-badge[data-variant="soft"], .rui-tag[data-variant="soft"]) {
38
+ border-color: transparent;
39
+ background-color: color-mix(in srgb, var(--rui-badge-color, var(--color-primary)) 15%, transparent);
40
+ color: var(--rui-badge-color, var(--color-primary));
41
+ }
42
+ :where(.rui-tag-remove) {
43
+ display: inline-flex;
44
+ align-items: center;
45
+ justify-content: center;
46
+ width: 1.2em;
47
+ height: 1.2em;
48
+ margin-right: -0.3em;
49
+ padding: 0;
50
+ border: none;
51
+ border-radius: 50%;
52
+ background: none;
53
+ color: inherit;
54
+ font: inherit;
55
+ line-height: 1;
56
+ cursor: pointer;
57
+ opacity: 0.75;
58
+ }
59
+ :where(.rui-tag-remove:hover) {
60
+ opacity: 1;
61
+ background-color: color-mix(in srgb, currentColor 20%, transparent);
62
+ }
63
+ :where(.rui-tag-remove:focus-visible) {
64
+ opacity: 1;
65
+ outline: 2px solid currentColor;
66
+ outline-offset: 1px;
67
+ }
68
+ `;
@@ -0,0 +1,2 @@
1
+ export declare const breadcrumbCss = "\n:where(.rui-breadcrumb) :where(ol) {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--rui-breadcrumb-gap, 0.5rem);\n margin: 0;\n padding: 0;\n list-style: none;\n font-size: 0.875rem;\n}\n:where(.rui-breadcrumb) :where(li) {\n display: inline-flex;\n align-items: center;\n gap: var(--rui-breadcrumb-gap, 0.5rem);\n color: var(--color-text-muted);\n}\n:where(.rui-breadcrumb) :where(li + li)::before {\n content: var(--rui-breadcrumb-separator, \"/\");\n color: var(--color-text-muted);\n}\n:where(.rui-breadcrumb) :where(a) {\n color: var(--color-text-muted);\n text-decoration: none;\n}\n:where(.rui-breadcrumb) :where(a:hover) {\n color: var(--color-text);\n}\n:where(.rui-breadcrumb) :where(a:focus-visible) {\n outline: 2px solid var(--color-primary);\n outline-offset: 2px;\n border-radius: 2px;\n}\n:where(.rui-breadcrumb) :where([aria-current=\"page\"]) {\n color: var(--color-text);\n text-decoration: none;\n}\n:where(.rui-breadcrumb) :where(ol[data-collapse] > li:not(:first-child, :nth-last-child(-n + 2))) {\n display: none;\n}\n/* Items were hidden (4 or more): mark the gap after the first one. */\n:where(.rui-breadcrumb) :where(ol[data-collapse] > li:first-child:not(:nth-last-child(-n + 3)))::after {\n content: var(--rui-breadcrumb-separator, \"/\") \" \u2026\";\n color: var(--color-text-muted);\n}\n";
2
+ //# sourceMappingURL=breadcrumbCss.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breadcrumbCss.d.ts","sourceRoot":"","sources":["../../src/style/breadcrumbCss.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,aAAa,g2CA6CzB,CAAA"}
@@ -0,0 +1,53 @@
1
+ // Breadcrumb, class only: `<nav class="rui-breadcrumb" aria-label="…"><ol><li>…</li></ol></nav>`,
2
+ // the last item with `aria-current="page"`. `data-collapse` on the <ol> keeps the first and
3
+ // the last two items, replacing the others with "…" (hidden items are not reachable).
4
+ // `--rui-breadcrumb-separator` is a CSS string, e.g. `"›"`.
5
+ // Every selector is wrapped in :where() so it has zero specificity:
6
+ // any class or style set by the consuming project wins without !important.
7
+ const separator = `var(--rui-breadcrumb-separator, "/")`;
8
+ export const breadcrumbCss = `
9
+ :where(.rui-breadcrumb) :where(ol) {
10
+ display: flex;
11
+ flex-wrap: wrap;
12
+ align-items: center;
13
+ gap: var(--rui-breadcrumb-gap, 0.5rem);
14
+ margin: 0;
15
+ padding: 0;
16
+ list-style: none;
17
+ font-size: 0.875rem;
18
+ }
19
+ :where(.rui-breadcrumb) :where(li) {
20
+ display: inline-flex;
21
+ align-items: center;
22
+ gap: var(--rui-breadcrumb-gap, 0.5rem);
23
+ color: var(--color-text-muted);
24
+ }
25
+ :where(.rui-breadcrumb) :where(li + li)::before {
26
+ content: ${separator};
27
+ color: var(--color-text-muted);
28
+ }
29
+ :where(.rui-breadcrumb) :where(a) {
30
+ color: var(--color-text-muted);
31
+ text-decoration: none;
32
+ }
33
+ :where(.rui-breadcrumb) :where(a:hover) {
34
+ color: var(--color-text);
35
+ }
36
+ :where(.rui-breadcrumb) :where(a:focus-visible) {
37
+ outline: 2px solid var(--color-primary);
38
+ outline-offset: 2px;
39
+ border-radius: 2px;
40
+ }
41
+ :where(.rui-breadcrumb) :where([aria-current="page"]) {
42
+ color: var(--color-text);
43
+ text-decoration: none;
44
+ }
45
+ :where(.rui-breadcrumb) :where(ol[data-collapse] > li:not(:first-child, :nth-last-child(-n + 2))) {
46
+ display: none;
47
+ }
48
+ /* Items were hidden (4 or more): mark the gap after the first one. */
49
+ :where(.rui-breadcrumb) :where(ol[data-collapse] > li:first-child:not(:nth-last-child(-n + 3)))::after {
50
+ content: ${separator} " …";
51
+ color: var(--color-text-muted);
52
+ }
53
+ `;
@@ -0,0 +1,2 @@
1
+ export declare const cardCss = "\n:where(.rui-card) {\n display: block;\n box-sizing: border-box;\n padding: var(--rui-card-padding, 1.25rem);\n border: 1px solid var(--rui-card-border, var(--color-border));\n border-radius: var(--rui-card-radius, 12px);\n background-color: var(--rui-card-bg, var(--color-surface));\n box-shadow: var(--rui-card-shadow, none);\n color: var(--color-text);\n}\n/* Custom properties inherit: a nested card must not take its parent's settings. */\n:where(.rui-card) > * {\n --rui-card-bg: initial;\n --rui-card-border: initial;\n --rui-card-shadow: initial;\n --rui-card-padding: initial;\n --rui-card-radius: initial;\n --rui-card-accent: initial;\n}\n:where(button.rui-card) {\n font: inherit;\n text-align: left;\n}\n:where(a.rui-card) {\n color: inherit;\n text-decoration: none;\n}\n:where(a.rui-card, button.rui-card, .rui-card[data-interactive]) {\n cursor: pointer;\n transition: border-color 120ms, box-shadow 120ms;\n}\n:where(a.rui-card, button.rui-card, .rui-card[data-interactive]):where(:hover) {\n border-color: color-mix(in srgb, var(--rui-card-border, var(--color-border)) 70%, var(--color-text));\n box-shadow: 0 4px 12px color-mix(in srgb, var(--color-text) 10%, transparent);\n}\n:where(a.rui-card, button.rui-card, .rui-card[data-interactive]):where(:focus-visible) {\n outline: 2px solid var(--rui-card-accent, var(--color-primary));\n outline-offset: 2px;\n}\n@media (prefers-reduced-motion: reduce) {\n :where(.rui-card) {\n transition: none;\n }\n}\n";
2
+ //# sourceMappingURL=cardCss.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cardCss.d.ts","sourceRoot":"","sources":["../../src/style/cardCss.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,m+CA6CnB,CAAA"}
@@ -0,0 +1,49 @@
1
+ // Card surface, usable as a bare class (`rui-card`) or through the Card component.
2
+ // Every selector is wrapped in :where() so it has zero specificity:
3
+ // any class or style set by the consuming project wins without !important.
4
+ export const cardCss = `
5
+ :where(.rui-card) {
6
+ display: block;
7
+ box-sizing: border-box;
8
+ padding: var(--rui-card-padding, 1.25rem);
9
+ border: 1px solid var(--rui-card-border, var(--color-border));
10
+ border-radius: var(--rui-card-radius, 12px);
11
+ background-color: var(--rui-card-bg, var(--color-surface));
12
+ box-shadow: var(--rui-card-shadow, none);
13
+ color: var(--color-text);
14
+ }
15
+ /* Custom properties inherit: a nested card must not take its parent's settings. */
16
+ :where(.rui-card) > * {
17
+ --rui-card-bg: initial;
18
+ --rui-card-border: initial;
19
+ --rui-card-shadow: initial;
20
+ --rui-card-padding: initial;
21
+ --rui-card-radius: initial;
22
+ --rui-card-accent: initial;
23
+ }
24
+ :where(button.rui-card) {
25
+ font: inherit;
26
+ text-align: left;
27
+ }
28
+ :where(a.rui-card) {
29
+ color: inherit;
30
+ text-decoration: none;
31
+ }
32
+ :where(a.rui-card, button.rui-card, .rui-card[data-interactive]) {
33
+ cursor: pointer;
34
+ transition: border-color 120ms, box-shadow 120ms;
35
+ }
36
+ :where(a.rui-card, button.rui-card, .rui-card[data-interactive]):where(:hover) {
37
+ border-color: color-mix(in srgb, var(--rui-card-border, var(--color-border)) 70%, var(--color-text));
38
+ box-shadow: 0 4px 12px color-mix(in srgb, var(--color-text) 10%, transparent);
39
+ }
40
+ :where(a.rui-card, button.rui-card, .rui-card[data-interactive]):where(:focus-visible) {
41
+ outline: 2px solid var(--rui-card-accent, var(--color-primary));
42
+ outline-offset: 2px;
43
+ }
44
+ @media (prefers-reduced-motion: reduce) {
45
+ :where(.rui-card) {
46
+ transition: none;
47
+ }
48
+ }
49
+ `;
@@ -0,0 +1,2 @@
1
+ export declare const inputCss = "\n:where(.rui-input) {\n --rui-input-accent-color: var(--rui-input-accent, var(--color-primary));\n --rui-input-invalid-color: var(--rui-input-invalid, var(--color-text));\n}\n\n:where(.rui-input:not([type=\"checkbox\"], [type=\"radio\"])) {\n box-sizing: border-box;\n width: 100%;\n padding: 0.5rem 0.75rem;\n border: 1px solid var(--color-border);\n border-radius: 6px;\n background-color: var(--color-bg);\n color: var(--color-text);\n font: inherit;\n font-size: 0.875rem;\n line-height: 1;\n transition: border-color 120ms, box-shadow 120ms;\n}\n:where(.rui-input:not([type=\"checkbox\"], [type=\"radio\"]))::placeholder {\n color: var(--color-text-muted);\n opacity: 1;\n}\n:where(.rui-input:not([type=\"checkbox\"], [type=\"radio\"]):hover:not(:disabled)) {\n border-color: color-mix(in srgb, var(--color-border) 70%, var(--color-text));\n}\n:where(.rui-input:not([type=\"checkbox\"], [type=\"radio\"]):focus-visible) {\n outline: none;\n border-color: var(--rui-input-accent-color);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--rui-input-accent-color) 25%, transparent);\n}\n:where(.rui-input.rui-invalid:not([type=\"checkbox\"], [type=\"radio\"])) {\n border-color: var(--rui-input-invalid-color);\n}\n:where(.rui-input.rui-invalid:not([type=\"checkbox\"], [type=\"radio\"]):focus-visible) {\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--rui-input-invalid-color) 25%, transparent);\n}\n:where(textarea.rui-input) {\n min-height: calc(1em + 1rem + 2px);\n line-height: 1.4;\n resize: vertical;\n}\n:where(select.rui-input) option {\n background-color: var(--color-bg);\n color: var(--color-text);\n}\n:where(.rui-input:disabled) {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n:where(input.rui-input[type=\"checkbox\"], input.rui-input[type=\"radio\"]) {\n accent-color: var(--rui-input-accent-color);\n}\n\n:where(input.rui-input[type=\"checkbox\"][role=\"switch\"]) {\n appearance: none;\n position: relative;\n box-sizing: border-box;\n width: 2.25rem;\n height: 1.25rem;\n margin: 0;\n border: none;\n border-radius: 999px;\n background-color: var(--color-border);\n vertical-align: middle;\n cursor: pointer;\n transition: background-color 120ms;\n}\n:where(input.rui-input[type=\"checkbox\"][role=\"switch\"])::before {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: calc(1.25rem - 4px);\n height: calc(1.25rem - 4px);\n border-radius: 50%;\n background-color: var(--color-surface);\n box-shadow: 0 1px 2px color-mix(in srgb, var(--color-text) 25%, transparent);\n transition: transform 120ms;\n}\n:where(input.rui-input[type=\"checkbox\"][role=\"switch\"]:checked) {\n background-color: var(--rui-input-accent-color);\n}\n:where(input.rui-input[type=\"checkbox\"][role=\"switch\"]:checked)::before {\n transform: translateX(1rem);\n}\n:where(input.rui-input[type=\"checkbox\"][role=\"switch\"]:focus-visible) {\n outline: 2px solid var(--rui-input-accent-color);\n outline-offset: 2px;\n}\n:where(input.rui-input[type=\"checkbox\"][role=\"switch\"]:disabled) {\n cursor: not-allowed;\n}\n\n@media (prefers-reduced-motion: reduce) {\n :where(.rui-input),\n :where(input.rui-input[type=\"checkbox\"][role=\"switch\"])::before {\n transition: none;\n }\n}\n";
2
+ //# sourceMappingURL=inputCss.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputCss.d.ts","sourceRoot":"","sources":["../../src/style/inputCss.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,QAAQ,qsGAqGpB,CAAA"}
@@ -0,0 +1,107 @@
1
+ // Themed look for native fields: the project puts `rui-input` on its own elements
2
+ // (`rui-input rui-invalid` for the error state). Injected by ThemeProvider.
3
+ // Every selector is wrapped in :where() so it has zero specificity:
4
+ // any class or style set by the consuming project wins without !important.
5
+ // Text fields match Button: same vertical padding, font size, line height, border and radius.
6
+ export const inputCss = `
7
+ :where(.rui-input) {
8
+ --rui-input-accent-color: var(--rui-input-accent, var(--color-primary));
9
+ --rui-input-invalid-color: var(--rui-input-invalid, var(--color-text));
10
+ }
11
+
12
+ :where(.rui-input:not([type="checkbox"], [type="radio"])) {
13
+ box-sizing: border-box;
14
+ width: 100%;
15
+ padding: 0.5rem 0.75rem;
16
+ border: 1px solid var(--color-border);
17
+ border-radius: 6px;
18
+ background-color: var(--color-bg);
19
+ color: var(--color-text);
20
+ font: inherit;
21
+ font-size: 0.875rem;
22
+ line-height: 1;
23
+ transition: border-color 120ms, box-shadow 120ms;
24
+ }
25
+ :where(.rui-input:not([type="checkbox"], [type="radio"]))::placeholder {
26
+ color: var(--color-text-muted);
27
+ opacity: 1;
28
+ }
29
+ :where(.rui-input:not([type="checkbox"], [type="radio"]):hover:not(:disabled)) {
30
+ border-color: color-mix(in srgb, var(--color-border) 70%, var(--color-text));
31
+ }
32
+ :where(.rui-input:not([type="checkbox"], [type="radio"]):focus-visible) {
33
+ outline: none;
34
+ border-color: var(--rui-input-accent-color);
35
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--rui-input-accent-color) 25%, transparent);
36
+ }
37
+ :where(.rui-input.rui-invalid:not([type="checkbox"], [type="radio"])) {
38
+ border-color: var(--rui-input-invalid-color);
39
+ }
40
+ :where(.rui-input.rui-invalid:not([type="checkbox"], [type="radio"]):focus-visible) {
41
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--rui-input-invalid-color) 25%, transparent);
42
+ }
43
+ :where(textarea.rui-input) {
44
+ min-height: calc(1em + 1rem + 2px);
45
+ line-height: 1.4;
46
+ resize: vertical;
47
+ }
48
+ :where(select.rui-input) option {
49
+ background-color: var(--color-bg);
50
+ color: var(--color-text);
51
+ }
52
+ :where(.rui-input:disabled) {
53
+ opacity: 0.4;
54
+ cursor: not-allowed;
55
+ }
56
+
57
+ :where(input.rui-input[type="checkbox"], input.rui-input[type="radio"]) {
58
+ accent-color: var(--rui-input-accent-color);
59
+ }
60
+
61
+ :where(input.rui-input[type="checkbox"][role="switch"]) {
62
+ appearance: none;
63
+ position: relative;
64
+ box-sizing: border-box;
65
+ width: 2.25rem;
66
+ height: 1.25rem;
67
+ margin: 0;
68
+ border: none;
69
+ border-radius: 999px;
70
+ background-color: var(--color-border);
71
+ vertical-align: middle;
72
+ cursor: pointer;
73
+ transition: background-color 120ms;
74
+ }
75
+ :where(input.rui-input[type="checkbox"][role="switch"])::before {
76
+ content: "";
77
+ position: absolute;
78
+ top: 2px;
79
+ left: 2px;
80
+ width: calc(1.25rem - 4px);
81
+ height: calc(1.25rem - 4px);
82
+ border-radius: 50%;
83
+ background-color: var(--color-surface);
84
+ box-shadow: 0 1px 2px color-mix(in srgb, var(--color-text) 25%, transparent);
85
+ transition: transform 120ms;
86
+ }
87
+ :where(input.rui-input[type="checkbox"][role="switch"]:checked) {
88
+ background-color: var(--rui-input-accent-color);
89
+ }
90
+ :where(input.rui-input[type="checkbox"][role="switch"]:checked)::before {
91
+ transform: translateX(1rem);
92
+ }
93
+ :where(input.rui-input[type="checkbox"][role="switch"]:focus-visible) {
94
+ outline: 2px solid var(--rui-input-accent-color);
95
+ outline-offset: 2px;
96
+ }
97
+ :where(input.rui-input[type="checkbox"][role="switch"]:disabled) {
98
+ cursor: not-allowed;
99
+ }
100
+
101
+ @media (prefers-reduced-motion: reduce) {
102
+ :where(.rui-input),
103
+ :where(input.rui-input[type="checkbox"][role="switch"])::before {
104
+ transition: none;
105
+ }
106
+ }
107
+ `;
@@ -0,0 +1,2 @@
1
+ export declare const loaderCss = "\n:where(.rui-spinner) {\n display: inline-block;\n box-sizing: border-box;\n flex-shrink: 0;\n width: var(--rui-spinner-size, 1em);\n height: var(--rui-spinner-size, 1em);\n border: var(--rui-spinner-thickness, 0.15em) solid var(--rui-spinner-color, currentColor);\n border-top-color: transparent;\n border-radius: 50%;\n vertical-align: middle;\n animation: rui-spin 0.8s linear infinite;\n}\n:where(.rui-skeleton) {\n display: block;\n border-radius: 4px;\n background-color: var(--rui-skeleton-color, var(--color-border));\n animation: rui-pulse 1.5s ease-in-out infinite;\n}\n@media (prefers-reduced-motion: reduce) {\n /* The spinner is the only loading signal: slowed down, not stopped. */\n :where(.rui-spinner) {\n animation-duration: 2s;\n }\n :where(.rui-skeleton) {\n animation: none;\n }\n}\n@keyframes rui-spin {\n to { transform: rotate(360deg); }\n}\n@keyframes rui-pulse {\n 50% { opacity: 0.5; }\n}\n";
2
+ //# sourceMappingURL=loaderCss.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loaderCss.d.ts","sourceRoot":"","sources":["../../src/style/loaderCss.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,SAAS,s7BAkCrB,CAAA"}
@@ -0,0 +1,39 @@
1
+ // Loading indicators, usable as bare classes (`rui-spinner`, `rui-skeleton`) or through
2
+ // the Spinner / Skeleton components. Injected by ThemeProvider and by the components.
3
+ // Every selector is wrapped in :where() so it has zero specificity:
4
+ // any class or style set by the consuming project wins without !important.
5
+ export const loaderCss = `
6
+ :where(.rui-spinner) {
7
+ display: inline-block;
8
+ box-sizing: border-box;
9
+ flex-shrink: 0;
10
+ width: var(--rui-spinner-size, 1em);
11
+ height: var(--rui-spinner-size, 1em);
12
+ border: var(--rui-spinner-thickness, 0.15em) solid var(--rui-spinner-color, currentColor);
13
+ border-top-color: transparent;
14
+ border-radius: 50%;
15
+ vertical-align: middle;
16
+ animation: rui-spin 0.8s linear infinite;
17
+ }
18
+ :where(.rui-skeleton) {
19
+ display: block;
20
+ border-radius: 4px;
21
+ background-color: var(--rui-skeleton-color, var(--color-border));
22
+ animation: rui-pulse 1.5s ease-in-out infinite;
23
+ }
24
+ @media (prefers-reduced-motion: reduce) {
25
+ /* The spinner is the only loading signal: slowed down, not stopped. */
26
+ :where(.rui-spinner) {
27
+ animation-duration: 2s;
28
+ }
29
+ :where(.rui-skeleton) {
30
+ animation: none;
31
+ }
32
+ }
33
+ @keyframes rui-spin {
34
+ to { transform: rotate(360deg); }
35
+ }
36
+ @keyframes rui-pulse {
37
+ 50% { opacity: 0.5; }
38
+ }
39
+ `;
@@ -0,0 +1,2 @@
1
+ export declare const menuCss = "\n:where(.rui-menu) {\n position: fixed;\n top: 0;\n left: 0;\n box-sizing: border-box;\n min-width: 8rem;\n padding: 0.25rem;\n border: 1px solid var(--rui-menu-border, var(--color-border));\n border-radius: 8px;\n background-color: var(--rui-menu-bg, var(--color-surface));\n box-shadow: var(--rui-menu-shadow, 0 4px 16px color-mix(in srgb, var(--color-text) 15%, transparent));\n color: var(--color-text);\n font-size: 0.875rem;\n outline: none;\n animation: rui-menu-in 120ms ease-out;\n}\n/* Not positioned yet: invisible but focusable, so the first item can take the focus. */\n:where(.rui-menu:not([data-placement])) {\n opacity: 0;\n animation: none;\n}\n:where(.rui-menu-item) {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.375rem 0.625rem;\n border-radius: 4px;\n color: inherit;\n text-decoration: none;\n cursor: pointer;\n outline: none;\n user-select: none;\n}\n:where(.rui-menu-item:not([aria-disabled=\"true\"]):hover, .rui-menu-item:not([aria-disabled=\"true\"]):focus) {\n background-color: color-mix(in srgb, var(--rui-menu-accent, var(--color-primary)) 12%, transparent);\n}\n:where(.rui-menu-item[aria-disabled=\"true\"]) {\n opacity: 0.4;\n cursor: not-allowed;\n}\n:where(.rui-menu-indicator) {\n display: inline-flex;\n justify-content: center;\n width: 1em;\n color: var(--rui-menu-accent, var(--color-primary));\n}\n:where(.rui-menu-label) {\n padding: 0.375rem 0.625rem 0.25rem;\n color: var(--color-text-muted);\n font-size: 0.75rem;\n font-weight: 600;\n}\n:where(.rui-menu-separator) {\n height: 1px;\n margin: 0.25rem 0;\n background-color: var(--color-border);\n}\n@media (prefers-reduced-motion: reduce) {\n :where(.rui-menu) {\n animation: none;\n }\n}\n@keyframes rui-menu-in {\n from { opacity: 0; transform: translateY(-2px); }\n}\n";
2
+ //# sourceMappingURL=menuCss.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menuCss.d.ts","sourceRoot":"","sources":["../../src/style/menuCss.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,OAAO,mzDAkEnB,CAAA"}
@@ -0,0 +1,71 @@
1
+ // DropdownMenu card and items.
2
+ // Every selector is wrapped in :where() so it has zero specificity:
3
+ // any class or style set by the consuming project wins without !important.
4
+ const accent = "var(--rui-menu-accent, var(--color-primary))";
5
+ export const menuCss = `
6
+ :where(.rui-menu) {
7
+ position: fixed;
8
+ top: 0;
9
+ left: 0;
10
+ box-sizing: border-box;
11
+ min-width: 8rem;
12
+ padding: 0.25rem;
13
+ border: 1px solid var(--rui-menu-border, var(--color-border));
14
+ border-radius: 8px;
15
+ background-color: var(--rui-menu-bg, var(--color-surface));
16
+ box-shadow: var(--rui-menu-shadow, 0 4px 16px color-mix(in srgb, var(--color-text) 15%, transparent));
17
+ color: var(--color-text);
18
+ font-size: 0.875rem;
19
+ outline: none;
20
+ animation: rui-menu-in 120ms ease-out;
21
+ }
22
+ /* Not positioned yet: invisible but focusable, so the first item can take the focus. */
23
+ :where(.rui-menu:not([data-placement])) {
24
+ opacity: 0;
25
+ animation: none;
26
+ }
27
+ :where(.rui-menu-item) {
28
+ display: flex;
29
+ align-items: center;
30
+ gap: 0.5rem;
31
+ padding: 0.375rem 0.625rem;
32
+ border-radius: 4px;
33
+ color: inherit;
34
+ text-decoration: none;
35
+ cursor: pointer;
36
+ outline: none;
37
+ user-select: none;
38
+ }
39
+ :where(.rui-menu-item:not([aria-disabled="true"]):hover, .rui-menu-item:not([aria-disabled="true"]):focus) {
40
+ background-color: color-mix(in srgb, ${accent} 12%, transparent);
41
+ }
42
+ :where(.rui-menu-item[aria-disabled="true"]) {
43
+ opacity: 0.4;
44
+ cursor: not-allowed;
45
+ }
46
+ :where(.rui-menu-indicator) {
47
+ display: inline-flex;
48
+ justify-content: center;
49
+ width: 1em;
50
+ color: ${accent};
51
+ }
52
+ :where(.rui-menu-label) {
53
+ padding: 0.375rem 0.625rem 0.25rem;
54
+ color: var(--color-text-muted);
55
+ font-size: 0.75rem;
56
+ font-weight: 600;
57
+ }
58
+ :where(.rui-menu-separator) {
59
+ height: 1px;
60
+ margin: 0.25rem 0;
61
+ background-color: var(--color-border);
62
+ }
63
+ @media (prefers-reduced-motion: reduce) {
64
+ :where(.rui-menu) {
65
+ animation: none;
66
+ }
67
+ }
68
+ @keyframes rui-menu-in {
69
+ from { opacity: 0; transform: translateY(-2px); }
70
+ }
71
+ `;
@@ -0,0 +1,2 @@
1
+ export declare const paginationCss = "\n:where(.rui-pagination) :where(ul, ol) {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 0.25rem;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n:where(.rui-pagination) :where(button, a) {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n min-width: var(--rui-pagination-size, 2rem);\n height: var(--rui-pagination-size, 2rem);\n padding: 0 0.5rem;\n border: 1px solid transparent;\n border-radius: 6px;\n background-color: transparent;\n color: var(--color-text);\n font: inherit;\n font-size: 0.875rem;\n text-decoration: none;\n cursor: pointer;\n}\n:where(.rui-pagination) :where(button, a):where(:hover:not(:disabled, [aria-disabled=\"true\"], [aria-current=\"page\"])) {\n background-color: color-mix(in srgb, var(--color-text) 8%, transparent);\n}\n:where(.rui-pagination) :where(button, a):where(:focus-visible) {\n outline: 2px solid var(--rui-pagination-accent, var(--color-primary));\n outline-offset: 2px;\n}\n:where(.rui-pagination) :where(button, a):where([aria-current=\"page\"]) {\n border-color: var(--rui-pagination-accent, var(--color-primary));\n background-color: var(--rui-pagination-accent, var(--color-primary));\n color: var(--rui-pagination-on, var(--color-bg));\n}\n:where(.rui-pagination) :where(button, a):where(:disabled, [aria-disabled=\"true\"]) {\n opacity: 0.4;\n cursor: not-allowed;\n}\n:where(.rui-pagination-ellipsis) {\n display: inline-flex;\n justify-content: center;\n min-width: var(--rui-pagination-size, 2rem);\n color: var(--color-text-muted);\n}\n";
2
+ //# sourceMappingURL=paginationCss.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paginationCss.d.ts","sourceRoot":"","sources":["../../src/style/paginationCss.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,aAAa,ykDAiDzB,CAAA"}
@@ -0,0 +1,57 @@
1
+ // Pagination: `rui-pagination` on a <nav> holding a list of `button` / `a` items;
2
+ // the current page has `aria-current="page"`.
3
+ // Every selector is wrapped in :where() so it has zero specificity:
4
+ // any class or style set by the consuming project wins without !important.
5
+ const accent = "var(--rui-pagination-accent, var(--color-primary))";
6
+ const size = "var(--rui-pagination-size, 2rem)";
7
+ const item = ":where(.rui-pagination) :where(button, a)";
8
+ export const paginationCss = `
9
+ :where(.rui-pagination) :where(ul, ol) {
10
+ display: flex;
11
+ flex-wrap: wrap;
12
+ align-items: center;
13
+ gap: 0.25rem;
14
+ margin: 0;
15
+ padding: 0;
16
+ list-style: none;
17
+ }
18
+ ${item} {
19
+ display: inline-flex;
20
+ align-items: center;
21
+ justify-content: center;
22
+ box-sizing: border-box;
23
+ min-width: ${size};
24
+ height: ${size};
25
+ padding: 0 0.5rem;
26
+ border: 1px solid transparent;
27
+ border-radius: 6px;
28
+ background-color: transparent;
29
+ color: var(--color-text);
30
+ font: inherit;
31
+ font-size: 0.875rem;
32
+ text-decoration: none;
33
+ cursor: pointer;
34
+ }
35
+ ${item}:where(:hover:not(:disabled, [aria-disabled="true"], [aria-current="page"])) {
36
+ background-color: color-mix(in srgb, var(--color-text) 8%, transparent);
37
+ }
38
+ ${item}:where(:focus-visible) {
39
+ outline: 2px solid ${accent};
40
+ outline-offset: 2px;
41
+ }
42
+ ${item}:where([aria-current="page"]) {
43
+ border-color: ${accent};
44
+ background-color: ${accent};
45
+ color: var(--rui-pagination-on, var(--color-bg));
46
+ }
47
+ ${item}:where(:disabled, [aria-disabled="true"]) {
48
+ opacity: 0.4;
49
+ cursor: not-allowed;
50
+ }
51
+ :where(.rui-pagination-ellipsis) {
52
+ display: inline-flex;
53
+ justify-content: center;
54
+ min-width: ${size};
55
+ color: var(--color-text-muted);
56
+ }
57
+ `;
@@ -0,0 +1,8 @@
1
+ /** `"--x"` → `"var(--x)"` (theme variable); anything else is kept as a raw CSS color. */
2
+ export declare function resolveColor(color: string): string;
3
+ /**
4
+ * Text color on a solid `color` background: `"--color-x"` reads `--color-on-x`,
5
+ * falling back to `--color-bg` (also used for raw colors).
6
+ */
7
+ export declare function resolveOnColor(color: string): string;
8
+ //# sourceMappingURL=resolveColor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveColor.d.ts","sourceRoot":"","sources":["../../src/style/resolveColor.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIpD"}
@@ -0,0 +1,13 @@
1
+ /** `"--x"` → `"var(--x)"` (theme variable); anything else is kept as a raw CSS color. */
2
+ export function resolveColor(color) {
3
+ return color.startsWith("--") ? `var(${color})` : color;
4
+ }
5
+ /**
6
+ * Text color on a solid `color` background: `"--color-x"` reads `--color-on-x`,
7
+ * falling back to `--color-bg` (also used for raw colors).
8
+ */
9
+ export function resolveOnColor(color) {
10
+ return color.startsWith("--color-")
11
+ ? `var(${color.replace(/^--color-/, "--color-on-")}, var(--color-bg))`
12
+ : "var(--color-bg)";
13
+ }
@@ -0,0 +1,2 @@
1
+ export declare const stackCss = "\n:where(.rui-stack) {\n display: flex;\n flex-direction: var(--rui-stack-direction, column);\n flex-wrap: var(--rui-stack-wrap, nowrap);\n gap: var(--rui-stack-gap, 0.75rem);\n align-items: var(--rui-stack-align, stretch);\n justify-content: var(--rui-stack-justify, flex-start);\n}\n/* Custom properties inherit: a nested stack must not take its parent's settings. */\n:where(.rui-stack) > * {\n --rui-stack-direction: initial;\n --rui-stack-wrap: initial;\n --rui-stack-gap: initial;\n --rui-stack-align: initial;\n --rui-stack-justify: initial;\n}\n";
2
+ //# sourceMappingURL=stackCss.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stackCss.d.ts","sourceRoot":"","sources":["../../src/style/stackCss.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,QAAQ,yjBAiBpB,CAAA"}