@jonmilner/ui 0.0.0-stage → 0.1.1

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 (215) hide show
  1. package/THIRD_PARTY_NOTICES.md +51 -0
  2. package/dist/AlertDialog/index.d.mts +21 -0
  3. package/dist/AlertDialog/index.mjs +29 -0
  4. package/dist/Badge/Badge.css +2 -0
  5. package/dist/Badge/Badge.css.mjs +24 -0
  6. package/dist/Badge/index.d.mts +11 -0
  7. package/dist/Badge/index.mjs +54 -0
  8. package/dist/Box/Box.css +2 -0
  9. package/dist/Box/Box.css.mjs +8 -0
  10. package/dist/Box/index.d.mts +8 -0
  11. package/dist/Box/index.mjs +15 -0
  12. package/dist/Button/Button.css +2 -0
  13. package/dist/Button/Button.css.mjs +25 -0
  14. package/dist/Button/index.d.mts +18 -0
  15. package/dist/Button/index.mjs +97 -0
  16. package/dist/Checkbox/Checkbox.css +2 -0
  17. package/dist/Checkbox/Checkbox.css.mjs +8 -0
  18. package/dist/Checkbox/index.d.mts +6 -0
  19. package/dist/Checkbox/index.mjs +45 -0
  20. package/dist/Chip/Chip.css +2 -0
  21. package/dist/Chip/Chip.css.mjs +17 -0
  22. package/dist/Chip/index.d.mts +13 -0
  23. package/dist/Chip/index.mjs +73 -0
  24. package/dist/Clickable/Clickable.css +2 -0
  25. package/dist/Clickable/Clickable.css.mjs +8 -0
  26. package/dist/Clickable/index.d.mts +11 -0
  27. package/dist/Clickable/index.mjs +28 -0
  28. package/dist/Dialog/Dialog.css +2 -0
  29. package/dist/Dialog/Dialog.css.d.mts +3 -0
  30. package/dist/Dialog/Dialog.css.mjs +12 -0
  31. package/dist/Dialog/client.d.mts +12 -0
  32. package/dist/Dialog/client.mjs +31 -0
  33. package/dist/Dialog/index.d.mts +30 -0
  34. package/dist/Dialog/index.mjs +85 -0
  35. package/dist/Field/Field.css +2 -0
  36. package/dist/Field/Field.css.mjs +8 -0
  37. package/dist/Field/client.mjs +26 -0
  38. package/dist/Field/index.d.mts +20 -0
  39. package/dist/Field/index.mjs +88 -0
  40. package/dist/Heading/Heading.css +2 -0
  41. package/dist/Heading/Heading.css.mjs +8 -0
  42. package/dist/Heading/index.d.mts +9 -0
  43. package/dist/Heading/index.mjs +27 -0
  44. package/dist/Icon/Icon.css +2 -0
  45. package/dist/Icon/Icon.css.mjs +17 -0
  46. package/dist/Icon/index.d.mts +12 -0
  47. package/dist/Icon/index.mjs +24 -0
  48. package/dist/IconButton/IconButton.css +2 -0
  49. package/dist/IconButton/IconButton.css.mjs +24 -0
  50. package/dist/IconButton/index.d.mts +15 -0
  51. package/dist/IconButton/index.mjs +25 -0
  52. package/dist/Inline/Inline.css +2 -0
  53. package/dist/Inline/Inline.css.mjs +8 -0
  54. package/dist/Inline/index.d.mts +14 -0
  55. package/dist/Inline/index.mjs +17 -0
  56. package/dist/Menu/Menu.css +2 -0
  57. package/dist/Menu/Menu.css.mjs +8 -0
  58. package/dist/Menu/client.d.mts +9 -0
  59. package/dist/Menu/client.mjs +27 -0
  60. package/dist/Menu/index.d.mts +34 -0
  61. package/dist/Menu/index.mjs +107 -0
  62. package/dist/MultiSelect/MultiSelect.css +2 -0
  63. package/dist/MultiSelect/MultiSelect.css.mjs +8 -0
  64. package/dist/MultiSelect/client.d.mts +8 -0
  65. package/dist/MultiSelect/client.mjs +93 -0
  66. package/dist/MultiSelect/index.d.mts +23 -0
  67. package/dist/MultiSelect/index.mjs +75 -0
  68. package/dist/SearchField/SearchField.css +2 -0
  69. package/dist/SearchField/SearchField.css.mjs +27 -0
  70. package/dist/SearchField/client.d.mts +5 -0
  71. package/dist/SearchField/client.mjs +74 -0
  72. package/dist/SearchField/index.d.mts +25 -0
  73. package/dist/SearchField/index.mjs +36 -0
  74. package/dist/Stack/Stack.css +2 -0
  75. package/dist/Stack/Stack.css.mjs +8 -0
  76. package/dist/Stack/index.d.mts +14 -0
  77. package/dist/Stack/index.mjs +15 -0
  78. package/dist/Tabs/Tabs.css +2 -0
  79. package/dist/Tabs/Tabs.css.mjs +8 -0
  80. package/dist/Tabs/index.d.mts +20 -0
  81. package/dist/Tabs/index.mjs +88 -0
  82. package/dist/Tag/Tag.css +2 -0
  83. package/dist/Tag/Tag.css.mjs +17 -0
  84. package/dist/Tag/index.d.mts +13 -0
  85. package/dist/Tag/index.mjs +82 -0
  86. package/dist/Text/Text.css +2 -0
  87. package/dist/Text/Text.css.mjs +32 -0
  88. package/dist/Text/index.d.mts +16 -0
  89. package/dist/Text/index.mjs +25 -0
  90. package/dist/Toast/Toast.css +2 -0
  91. package/dist/Toast/Toast.css.mjs +18 -0
  92. package/dist/Toast/client.d.mts +46 -0
  93. package/dist/Toast/client.mjs +219 -0
  94. package/dist/Toast/index.d.mts +7 -0
  95. package/dist/Toast/index.mjs +5 -0
  96. package/dist/base.css +6 -0
  97. package/dist/brands/brand.d.mts +9 -0
  98. package/dist/brands/brand.mjs +4 -0
  99. package/dist/brands/check-fonts.mjs +15 -0
  100. package/dist/brands/default.d.mts +4 -0
  101. package/dist/brands/default.mjs +74 -0
  102. package/dist/brands/font.d.mts +17 -0
  103. package/dist/brands/font.mjs +35 -0
  104. package/dist/brands/forced-colors.mjs +18 -0
  105. package/dist/brands/index.d.mts +8 -0
  106. package/dist/brands/index.mjs +5 -0
  107. package/dist/brands/metrics.mjs +40 -0
  108. package/dist/contrast/color.d.mts +3 -0
  109. package/dist/contrast/color.mjs +222 -0
  110. package/dist/contrast/contrast.d.mts +18 -0
  111. package/dist/contrast/contrast.mjs +52 -0
  112. package/dist/contrast/mixes.mjs +33 -0
  113. package/dist/docs/AlertDialog.md +113 -0
  114. package/dist/docs/Badge.md +76 -0
  115. package/dist/docs/Box.md +87 -0
  116. package/dist/docs/Button.md +98 -0
  117. package/dist/docs/Checkbox.md +107 -0
  118. package/dist/docs/Chip.md +92 -0
  119. package/dist/docs/Clickable.md +82 -0
  120. package/dist/docs/Dialog.md +166 -0
  121. package/dist/docs/Field.md +143 -0
  122. package/dist/docs/Heading.md +69 -0
  123. package/dist/docs/Icon.md +116 -0
  124. package/dist/docs/IconButton.md +83 -0
  125. package/dist/docs/Inline.md +79 -0
  126. package/dist/docs/Menu.md +181 -0
  127. package/dist/docs/MultiSelect.md +120 -0
  128. package/dist/docs/SearchField.md +127 -0
  129. package/dist/docs/Stack.md +79 -0
  130. package/dist/docs/Tabs.md +130 -0
  131. package/dist/docs/Tag.md +97 -0
  132. package/dist/docs/Text.md +90 -0
  133. package/dist/docs/Toast.md +115 -0
  134. package/dist/docs/llms.txt +33 -0
  135. package/dist/docs/manifest.json +2649 -0
  136. package/dist/docs/manifest.schema.json +96 -0
  137. package/dist/docs/migrations/README.md +27 -0
  138. package/dist/docs/theming.md +59 -0
  139. package/dist/icons/ArrowLeftIcon.d.mts +4 -0
  140. package/dist/icons/ArrowLeftIcon.mjs +11 -0
  141. package/dist/icons/ArrowRightIcon.d.mts +4 -0
  142. package/dist/icons/ArrowRightIcon.mjs +11 -0
  143. package/dist/icons/CheckIcon.d.mts +4 -0
  144. package/dist/icons/CheckIcon.mjs +11 -0
  145. package/dist/icons/ChevronDownIcon.d.mts +4 -0
  146. package/dist/icons/ChevronDownIcon.mjs +11 -0
  147. package/dist/icons/ChevronRightIcon.d.mts +4 -0
  148. package/dist/icons/ChevronRightIcon.mjs +11 -0
  149. package/dist/icons/CircleAlertIcon.d.mts +4 -0
  150. package/dist/icons/CircleAlertIcon.mjs +15 -0
  151. package/dist/icons/CircleCheckIcon.d.mts +4 -0
  152. package/dist/icons/CircleCheckIcon.mjs +15 -0
  153. package/dist/icons/CircleDotIcon.d.mts +4 -0
  154. package/dist/icons/CircleDotIcon.mjs +19 -0
  155. package/dist/icons/CircleSlashIcon.d.mts +4 -0
  156. package/dist/icons/CircleSlashIcon.mjs +15 -0
  157. package/dist/icons/GitMergeIcon.d.mts +4 -0
  158. package/dist/icons/GitMergeIcon.mjs +23 -0
  159. package/dist/icons/GitPullRequestClosedIcon.d.mts +4 -0
  160. package/dist/icons/GitPullRequestClosedIcon.mjs +23 -0
  161. package/dist/icons/GitPullRequestDraftIcon.d.mts +4 -0
  162. package/dist/icons/GitPullRequestDraftIcon.mjs +23 -0
  163. package/dist/icons/GitPullRequestIcon.d.mts +4 -0
  164. package/dist/icons/GitPullRequestIcon.mjs +23 -0
  165. package/dist/icons/InboxIcon.d.mts +4 -0
  166. package/dist/icons/InboxIcon.mjs +11 -0
  167. package/dist/icons/InfoIcon.d.mts +4 -0
  168. package/dist/icons/InfoIcon.mjs +15 -0
  169. package/dist/icons/LoaderCircleIcon.d.mts +4 -0
  170. package/dist/icons/LoaderCircleIcon.mjs +11 -0
  171. package/dist/icons/RefreshCwIcon.d.mts +4 -0
  172. package/dist/icons/RefreshCwIcon.mjs +15 -0
  173. package/dist/icons/SearchIcon.d.mts +4 -0
  174. package/dist/icons/SearchIcon.mjs +15 -0
  175. package/dist/icons/SettingsIcon.d.mts +4 -0
  176. package/dist/icons/SettingsIcon.mjs +15 -0
  177. package/dist/icons/XIcon.d.mts +4 -0
  178. package/dist/icons/XIcon.mjs +11 -0
  179. package/dist/icons/index.d.mts +25 -0
  180. package/dist/icons/index.mjs +45 -0
  181. package/dist/index.d.mts +28 -0
  182. package/dist/index.mjs +25 -0
  183. package/dist/popup/client.d.mts +9 -0
  184. package/dist/popup/client.mjs +31 -0
  185. package/dist/styles/atoms.css +2 -0
  186. package/dist/styles/atoms.css.d.mts +219 -0
  187. package/dist/styles/atoms.css.mjs +2669 -0
  188. package/dist/styles/button-fills.mjs +17 -0
  189. package/dist/styles/highlight.mjs +8 -0
  190. package/dist/styles/hover-tint.mjs +4 -0
  191. package/dist/styles/join.mjs +4 -0
  192. package/dist/styles/layers.css +2 -0
  193. package/dist/styles/part-props.d.mts +8 -0
  194. package/dist/styles/split-style-props.mjs +9 -0
  195. package/dist/testing/index.d.mts +4 -0
  196. package/dist/testing/index.mjs +3 -0
  197. package/dist/testing/motion.d.mts +22 -0
  198. package/dist/testing/motion.mjs +49 -0
  199. package/dist/theme/FontCheck.mjs +11 -0
  200. package/dist/theme/ThemeProvider.d.mts +15 -0
  201. package/dist/theme/ThemeProvider.mjs +23 -0
  202. package/dist/theme/define-theme.d.mts +9 -0
  203. package/dist/theme/define-theme.mjs +84 -0
  204. package/dist/theme/use-theme-container.mjs +15 -0
  205. package/dist/tokens/contract.d.mts +110 -0
  206. package/dist/tokens/contract.mjs +17 -0
  207. package/dist/tokens/index.d.mts +2 -0
  208. package/dist/tokens/index.mjs +1 -0
  209. package/dist/tokens/roles.d.mts +6 -0
  210. package/dist/tokens/roles.mjs +24 -0
  211. package/dist/tokens/scales.d.mts +100 -0
  212. package/dist/tokens/scales.mjs +103 -0
  213. package/dist/types.d.mts +7 -0
  214. package/package.json +159 -3
  215. package/README.md +0 -3
@@ -0,0 +1,88 @@
1
+ import { join as e } from "../styles/join.mjs";
2
+ import { splitStyleProps as t } from "../styles/split-style-props.mjs";
3
+ import { Box as n } from "../Box/index.mjs";
4
+ import { Clickable as r } from "../Clickable/index.mjs";
5
+ import { Text as i } from "../Text/index.mjs";
6
+ import { indicator as a, list as o, panel as s, tab as c } from "./Tabs.css.mjs";
7
+ import { jsx as l, jsxs as u } from "react/jsx-runtime";
8
+ import { Tabs as d } from "@base-ui/react/tabs";
9
+ //#region src/Tabs/index.tsx
10
+ function f({ orientation: e = "horizontal", display: r = "flex", flexDirection: i = e === "vertical" ? "row" : "column", flexWrap: a = e === "vertical" ? "wrap" : "nowrap", gap: o = "16", className: s, style: c, ...u }) {
11
+ let [f, p] = t(u);
12
+ return /* @__PURE__ */ l(d.Root, {
13
+ ...p,
14
+ orientation: e,
15
+ render: /* @__PURE__ */ l(n, {
16
+ display: r,
17
+ flexDirection: i,
18
+ flexWrap: a,
19
+ gap: o,
20
+ ...f,
21
+ className: s,
22
+ style: c
23
+ })
24
+ });
25
+ }
26
+ function p({ display: r = "flex", flexWrap: i = "wrap", gap: a = "4", position: s = "relative", className: c, style: u, ...f }) {
27
+ let [p, m] = t(f);
28
+ return /* @__PURE__ */ l(d.List, {
29
+ ...m,
30
+ render: /* @__PURE__ */ l(n, {
31
+ display: r,
32
+ flexWrap: i,
33
+ gap: a,
34
+ position: s,
35
+ ...p,
36
+ className: e(o, c),
37
+ style: u
38
+ })
39
+ });
40
+ }
41
+ function m({ children: o, size: s = "sm", font: f = "label", weight: p = "medium", leading: m, paddingInline: h = "12", justifyContent: g = "start", minBlockSize: _ = "med", position: v = "relative", color: y = "fgMuted", className: b, style: x, ...S }) {
42
+ let [C, w] = t(S);
43
+ return /* @__PURE__ */ u(d.Tab, {
44
+ ...w,
45
+ render: /* @__PURE__ */ l(r, {
46
+ color: y,
47
+ justifyContent: g,
48
+ minBlockSize: _,
49
+ paddingInline: h,
50
+ position: v,
51
+ ...C,
52
+ className: e(c, b),
53
+ style: x
54
+ }),
55
+ children: [/* @__PURE__ */ l(i, {
56
+ as: "span",
57
+ size: s,
58
+ font: f,
59
+ weight: p,
60
+ leading: m,
61
+ children: o
62
+ }), /* @__PURE__ */ l(n, {
63
+ "aria-hidden": !0,
64
+ as: "span",
65
+ className: a,
66
+ position: "absolute"
67
+ })]
68
+ });
69
+ }
70
+ function h({ flexGrow: r = 1, className: i, style: a, ...o }) {
71
+ let [c, u] = t(o);
72
+ return /* @__PURE__ */ l(d.Panel, {
73
+ ...u,
74
+ render: /* @__PURE__ */ l(n, {
75
+ flexGrow: r,
76
+ ...c,
77
+ className: e(s, i),
78
+ style: a
79
+ })
80
+ });
81
+ }
82
+ var g = Object.assign(f, {
83
+ List: p,
84
+ Tab: m,
85
+ Panel: h
86
+ });
87
+ //#endregion
88
+ export { g as Tabs };
@@ -0,0 +1,2 @@
1
+ @layer tokens, reset, atoms, components.box, components.checkbox, components.clickable, components.icon, components.icon-button, components.inline, components.stack, components.text, components.badge, components.button, components.chip, components.field, components.heading, components.dialog, components.alert-dialog, components.menu, components.multiselect, components.search-field, components.tabs, components.tag, components.toast;
2
+ @layer components.tag{._1jsyd8s0{border-width:var(--space-1);border-style:solid;border-color:#0000}._1jsyd8s1{overflow-wrap:anywhere}._1jsyd8s0:hover ._1jsyd8s1,._1jsyd8s0:focus-within ._1jsyd8s1{white-space:normal;text-overflow:clip;padding-block:var(--space-4);margin-block:0}._1jsyd8s2{text-decoration:underline}._1jsyd8s3:hover{background-color:var(--color-bg)}@media (forced-colors:active){._1jsyd8s0{color:canvastext;background-color:canvas;border-color:canvastext}}}
@@ -0,0 +1,17 @@
1
+ import "../styles/layers.css";
2
+ import "./Tag.css";
3
+ /* empty css */
4
+ /* empty css */
5
+ import { createRuntimeFn as e } from "@vanilla-extract/recipes/createRuntimeFn";
6
+ //#region src/Tag/Tag.css.ts
7
+ var t = "_1jsyd8s0", n = "_1jsyd8s1", r = "_1jsyd8s2", i = "_1jsyd8s3", a = e({
8
+ defaultClassName: "_1jsyd8s4",
9
+ variantClassNames: { size: {
10
+ sm: "_1jsyd8s5",
11
+ med: "_1jsyd8s6"
12
+ } },
13
+ defaultVariants: {},
14
+ compoundVariants: []
15
+ });
16
+ //#endregion
17
+ export { n as label, r as link, i as remove, t as root, a as tag };
@@ -0,0 +1,13 @@
1
+ import { OmitEach } from "../types.mjs";
2
+ import { StyleProps } from "../Box/index.mjs";
3
+ import { ComponentPropsWithRef } from "react";
4
+ //#region src/Tag/index.d.ts
5
+ export type TagOwnProps = {
6
+ href?: string;
7
+ onRemove?: () => void;
8
+ removeLabel?: string;
9
+ size?: "sm" | "med";
10
+ };
11
+ export type TagProps = StyleProps & TagOwnProps & OmitEach<ComponentPropsWithRef<"span">, keyof StyleProps | keyof TagOwnProps>;
12
+ export declare function Tag({ size, href, onRemove, removeLabel, display, alignItems, gap, minBlockSize, paddingInlineStart, paddingInlineEnd, borderRadius, backgroundColor, color, maxInlineSize, className, style, children, ...props }: TagProps): import("react").JSX.Element | null;
13
+ //#endregion
@@ -0,0 +1,82 @@
1
+ import { join as e } from "../styles/join.mjs";
2
+ import { Box as t } from "../Box/index.mjs";
3
+ import { Clickable as n } from "../Clickable/index.mjs";
4
+ import { Text as r } from "../Text/index.mjs";
5
+ import { XIcon as i } from "../icons/XIcon.mjs";
6
+ import { size as a } from "../tokens/scales.mjs";
7
+ import { label as o, link as s, root as c, tag as l } from "./Tag.css.mjs";
8
+ import { jsx as u, jsxs as d } from "react/jsx-runtime";
9
+ //#region src/Tag/index.tsx
10
+ function f(e) {
11
+ if (typeof e == "string" || typeof e == "number") return String(e);
12
+ if (!Array.isArray(e)) return;
13
+ let t = e.map(f);
14
+ return t.every((e) => e !== void 0) ? t.join("") : void 0;
15
+ }
16
+ var p = /* @__PURE__ */ new Set([...Object.keys(a), "full"]), m = /* @__PURE__ */ new Set([
17
+ "",
18
+ "none",
19
+ "auto",
20
+ "initial",
21
+ "unset"
22
+ ]);
23
+ function h(e, t) {
24
+ let n = t?.maxInlineSize ?? t?.maxWidth;
25
+ return n == null ? typeof e != "object" || !e ? p.has(e) : e.base != null && Object.values(e).every((e) => e == null || p.has(e)) : !m.has(String(n).trim()) && !/-content\b/.test(String(n));
26
+ }
27
+ var g = {
28
+ sm: {
29
+ paddingInlineStart: "6",
30
+ paddingInlineEnd: "6"
31
+ },
32
+ med: {
33
+ paddingInlineStart: "8",
34
+ paddingInlineEnd: "8"
35
+ }
36
+ };
37
+ function _({ size: a = "med", href: p, onRemove: m, removeLabel: _, display: v = "inline-flex", alignItems: y = "center", gap: b = "2", minBlockSize: x = "xs", paddingInlineStart: S = g[a].paddingInlineStart, paddingInlineEnd: C = m ? "2" : g[a].paddingInlineEnd, borderRadius: w = "lg", backgroundColor: T = "bgMuted", color: E = "fg", maxInlineSize: D, className: O, style: k, children: A, ...j }) {
38
+ if (A == null || typeof A == "boolean" || A === "" || f(A) === "") return null;
39
+ let M = h(D, k), N = /* @__PURE__ */ u(r, {
40
+ as: "span",
41
+ className: o,
42
+ font: "label",
43
+ paddingBlock: M ? void 0 : "4",
44
+ size: a,
45
+ truncate: M,
46
+ weight: "medium",
47
+ children: A
48
+ }), P = f(A), F = _ ?? (P === void 0 ? void 0 : `Remove ${P}`);
49
+ return /* @__PURE__ */ d(t, {
50
+ ...j,
51
+ alignItems: y,
52
+ as: "span",
53
+ backgroundColor: T,
54
+ borderRadius: w,
55
+ className: e(c, l({ size: a }), O),
56
+ color: E,
57
+ display: v,
58
+ gap: b,
59
+ maxInlineSize: D,
60
+ minBlockSize: x,
61
+ paddingInlineEnd: C,
62
+ paddingInlineStart: S,
63
+ style: k,
64
+ children: [p ? /* @__PURE__ */ u(n, {
65
+ as: "a",
66
+ className: s,
67
+ href: p,
68
+ overflow: "hidden",
69
+ children: N
70
+ }) : N, m && /* @__PURE__ */ u(n, {
71
+ alignSelf: "start",
72
+ "aria-label": F ?? "Remove",
73
+ borderRadius: "full",
74
+ className: "_1jsyd8s3",
75
+ flexShrink: 0,
76
+ onClick: m,
77
+ children: /* @__PURE__ */ u(i, { size: a })
78
+ })]
79
+ });
80
+ }
81
+ //#endregion
82
+ export { _ as Tag };
@@ -0,0 +1,2 @@
1
+ @layer tokens, reset, atoms, components.box, components.checkbox, components.clickable, components.icon, components.icon-button, components.inline, components.stack, components.text, components.badge, components.button, components.chip, components.field, components.heading, components.dialog, components.alert-dialog, components.menu, components.multiselect, components.search-field, components.tabs, components.tag, components.toast;
2
+ @layer components.text{._1mgdisq3{--_1mgdisq0:var(--line-height-med);--_1mgdisq1:calc((var(--font-trim-body-cap) - var(--_1mgdisq0) / 2) * 1em);--_1mgdisq2:calc((var(--font-trim-body-baseline) - var(--_1mgdisq0) / 2) * 1em);font-family:var(--font-body);font-size:var(--font-size-med);font-weight:var(--font-weight-regular);line-height:var(--_1mgdisq0)}._1mgdisq3:before{content:"";margin-block-end:var(--_1mgdisq1);display:table}._1mgdisq3:after{content:"";margin-block-start:var(--_1mgdisq2);display:table}:where(._1mgdisq3)>._1mgdisq3:where(a,abbr,b,bdi,bdo,cite,code,data,del,dfn,em,i,ins,kbd,label,mark,output,q,s,samp,small,span,strong,sub,sup,time,u,var){--_1mgdisq0:inherit;--_1mgdisq1:inherit;--_1mgdisq2:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;display:inline}:where(._1mgdisq3)>._1mgdisq3:where(a,abbr,b,bdi,bdo,cite,code,data,del,dfn,em,i,ins,kbd,label,mark,output,q,s,samp,small,span,strong,sub,sup,time,u,var):before,:where(._1mgdisq3)>._1mgdisq3:where(a,abbr,b,bdi,bdo,cite,code,data,del,dfn,em,i,ins,kbd,label,mark,output,q,s,samp,small,span,strong,sub,sup,time,u,var):after{content:none}._1mgdisq4{--_1mgdisq1:calc((var(--font-trim-body-cap) - var(--_1mgdisq0) / 2) * 1em);--_1mgdisq2:calc((var(--font-trim-body-baseline) - var(--_1mgdisq0) / 2) * 1em);font-family:var(--font-body)}._1mgdisq5{--_1mgdisq1:calc((var(--font-trim-heading-cap) - var(--_1mgdisq0) / 2) * 1em);--_1mgdisq2:calc((var(--font-trim-heading-baseline) - var(--_1mgdisq0) / 2) * 1em);font-family:var(--font-heading)}._1mgdisq6{--_1mgdisq1:calc((var(--font-trim-display-cap) - var(--_1mgdisq0) / 2) * 1em);--_1mgdisq2:calc((var(--font-trim-display-baseline) - var(--_1mgdisq0) / 2) * 1em);font-family:var(--font-display)}._1mgdisq7{--_1mgdisq1:calc((var(--font-trim-label-cap) - var(--_1mgdisq0) / 2) * 1em);--_1mgdisq2:calc((var(--font-trim-label-baseline) - var(--_1mgdisq0) / 2) * 1em);font-family:var(--font-label)}._1mgdisq8{--_1mgdisq1:calc((var(--font-trim-mono-cap) - var(--_1mgdisq0) / 2) * 1em);--_1mgdisq2:calc((var(--font-trim-mono-baseline) - var(--_1mgdisq0) / 2) * 1em);font-family:var(--font-mono)}._1mgdisq9{font-size:var(--font-size-xs)}._1mgdisqa{font-size:var(--font-size-sm)}._1mgdisqb{font-size:var(--font-size-med)}._1mgdisqc{font-size:var(--font-size-lg)}._1mgdisqd{font-size:var(--font-size-xl)}._1mgdisqe{font-size:var(--font-size-2xl)}._1mgdisqf{font-size:var(--font-size-3xl)}._1mgdisqg{font-size:var(--font-size-4xl)}._1mgdisqh{font-weight:var(--font-weight-regular)}._1mgdisqi{font-weight:var(--font-weight-medium)}._1mgdisqj{font-weight:var(--font-weight-semibold)}._1mgdisqk{font-weight:var(--font-weight-bold)}._1mgdisql{--_1mgdisq0:var(--line-height-sm);line-height:var(--_1mgdisq0)}._1mgdisqm{--_1mgdisq0:var(--line-height-med);line-height:var(--_1mgdisq0)}._1mgdisqn{--_1mgdisq0:var(--line-height-lg);line-height:var(--_1mgdisq0)}._1mgdisqo{text-overflow:ellipsis;white-space:nowrap;margin-block-start:var(--_1mgdisq1);margin-block-end:var(--_1mgdisq2);padding-block-start:calc(-1 * var(--_1mgdisq1));padding-block-end:calc(-1 * var(--_1mgdisq2))}}
@@ -0,0 +1,32 @@
1
+ import "../styles/layers.css";
2
+ import "./Text.css";
3
+ /* empty css */
4
+ /* empty css */
5
+ //#region src/Text/Text.css.ts
6
+ var e = "_1mgdisq3", t = {
7
+ body: "_1mgdisq4",
8
+ heading: "_1mgdisq5",
9
+ display: "_1mgdisq6",
10
+ label: "_1mgdisq7",
11
+ mono: "_1mgdisq8"
12
+ }, n = {
13
+ xs: "_1mgdisq9",
14
+ sm: "_1mgdisqa",
15
+ med: "_1mgdisqb",
16
+ lg: "_1mgdisqc",
17
+ xl: "_1mgdisqd",
18
+ "2xl": "_1mgdisqe",
19
+ "3xl": "_1mgdisqf",
20
+ "4xl": "_1mgdisqg"
21
+ }, r = {
22
+ regular: "_1mgdisqh",
23
+ medium: "_1mgdisqi",
24
+ semibold: "_1mgdisqj",
25
+ bold: "_1mgdisqk"
26
+ }, i = {
27
+ sm: "_1mgdisql",
28
+ med: "_1mgdisqm",
29
+ lg: "_1mgdisqn"
30
+ }, a = "_1mgdisqo";
31
+ //#endregion
32
+ export { t as font, i as leading, e as root, n as size, a as truncate, r as weight };
@@ -0,0 +1,16 @@
1
+ import { PolymorphicProps } from "../types.mjs";
2
+ import { StyleProps } from "../Box/index.mjs";
3
+ import { tokens } from "../tokens/scales.mjs";
4
+ import { FontRole } from "../tokens/roles.mjs";
5
+ import { ElementType } from "react";
6
+ //#region src/Text/index.d.ts
7
+ export type TextOwnProps = {
8
+ font?: FontRole;
9
+ leading?: keyof typeof tokens.lineHeight;
10
+ size?: keyof typeof tokens.fontSize;
11
+ truncate?: boolean;
12
+ weight?: keyof typeof tokens.fontWeight;
13
+ };
14
+ export type TextProps<T extends ElementType = "p"> = PolymorphicProps<T, StyleProps & TextOwnProps>;
15
+ export declare function Text<T extends ElementType = "p">({ as, size, font, weight, leading, truncate, display, overflow, className, ...props }: TextProps<T>): import("react").JSX.Element;
16
+ //#endregion
@@ -0,0 +1,25 @@
1
+ import { join as e } from "../styles/join.mjs";
2
+ import { Box as t } from "../Box/index.mjs";
3
+ import { font as n, leading as r, root as i, size as a, weight as o } from "./Text.css.mjs";
4
+ import { jsx as s } from "react/jsx-runtime";
5
+ //#region src/Text/index.tsx
6
+ function c({ as: c, size: l, font: u, weight: d, leading: f, truncate: p, display: m = "block", overflow: h = p ? "hidden" : void 0, className: g, ..._ }) {
7
+ let v = [
8
+ i,
9
+ u && n[u],
10
+ l && a[l],
11
+ d && o[d],
12
+ f && r[f],
13
+ p && "_1mgdisqo",
14
+ g
15
+ ];
16
+ return /* @__PURE__ */ s(t, {
17
+ as: c ?? "p",
18
+ display: m,
19
+ overflow: h,
20
+ ..._,
21
+ className: e(...v)
22
+ });
23
+ }
24
+ //#endregion
25
+ export { c as Text };
@@ -0,0 +1,2 @@
1
+ @layer tokens, reset, atoms, components.box, components.checkbox, components.clickable, components.icon, components.icon-button, components.inline, components.stack, components.text, components.badge, components.button, components.chip, components.field, components.heading, components.dialog, components.alert-dialog, components.menu, components.multiselect, components.search-field, components.tabs, components.tag, components.toast;
2
+ @layer components.toast{.hcnvsc1{inline-size:min(100% - 2 * var(--space-16), 6 * var(--space-64));inset-block-end:var(--space-16);inset-inline-end:var(--space-16);container:hcnvsc0/inline-size}.hcnvsc1:focus-visible{outline:var(--space-2) solid var(--color-focus);outline-offset:var(--space-2)}.hcnvsc2{gap:var(--space-8);margin:calc(-1 * var(--space-16));padding:var(--space-16);overscroll-behavior:contain;flex-direction:column;max-block-size:100dvh;margin-inline-start:calc(-1 * var(--space-24));padding-inline-start:var(--space-24);display:flex;overflow:hidden auto}.hcnvsc2:empty{padding:0}.hcnvsc2:has([data-swiping],[data-swipe-direction=down]){overflow-y:hidden}.hcnvsc3{border:var(--space-1) solid var(--color-border);transform:translate(var(--toast-swipe-movement-x,0), var(--toast-swipe-movement-y,0));transition:opacity var(--duration-med) var(--easing-standard), translate var(--duration-med) var(--easing-enter), transform var(--duration-med) var(--easing-enter)}.hcnvsc3:focus-visible{outline:var(--space-2) solid var(--color-focus);outline-offset:var(--space-2)}.hcnvsc3[data-starting-style],.hcnvsc3[data-ending-style]{opacity:0;translate:0 var(--distance-med)}.hcnvsc3[data-swiping]{transition:none}.hcnvsc3[data-limited]{display:none}.hcnvsc4{overflow-wrap:anywhere}.hcnvsca{clip-path:inset(50%);white-space:nowrap;border:0;block-size:1px;inline-size:1px;margin:0;padding:0;position:absolute;inset-block-start:0;inset-inline-start:0;overflow:hidden}@container hcnvsc0 (inline-size<16rem){.hcnvsc3{flex-wrap:wrap}.hcnvsc4{flex-basis:100%;order:1}.hcnvsc5{margin-inline-start:auto}}}
@@ -0,0 +1,18 @@
1
+ import "../styles/layers.css";
2
+ import "./Toast.css";
3
+ /* empty css */
4
+ /* empty css */
5
+ import { createRuntimeFn as e } from "@vanilla-extract/recipes/createRuntimeFn";
6
+ //#region src/Toast/Toast.css.ts
7
+ var t = "hcnvsc1", n = "hcnvsc2", r = "hcnvsc3", i = "hcnvsc4", a = "hcnvsc5", o = e({
8
+ defaultClassName: "hcnvsc6",
9
+ variantClassNames: { variant: {
10
+ info: "hcnvsc7",
11
+ success: "hcnvsc8",
12
+ error: "hcnvsc9"
13
+ } },
14
+ defaultVariants: {},
15
+ compoundVariants: []
16
+ }), s = "hcnvsca";
17
+ //#endregion
18
+ export { s as announcer, a as close, i as content, n as list, r as root, o as toast, t as viewport };
@@ -0,0 +1,46 @@
1
+ import { CircleAlertIcon } from "../icons/CircleAlertIcon.mjs";
2
+ import { CircleCheckIcon } from "../icons/CircleCheckIcon.mjs";
3
+ import { InfoIcon } from "../icons/InfoIcon.mjs";
4
+ import { CSSProperties, ReactNode } from "react";
5
+ import "@base-ui/react/toast";
6
+ //#region src/Toast/client.d.ts
7
+ export type ToastVariant = keyof typeof icons;
8
+ export type ToastOptions = {
9
+ action?: {
10
+ label: string;
11
+ onClick: () => void;
12
+ };
13
+ description?: string;
14
+ duration?: number;
15
+ title: string;
16
+ variant?: ToastVariant;
17
+ };
18
+ export type ToastProviderProps = {
19
+ children?: ReactNode;
20
+ className?: string;
21
+ closeLabel?: string;
22
+ limit?: number;
23
+ regionLabel?: string;
24
+ style?: CSSProperties;
25
+ };
26
+ declare const icons: {
27
+ readonly info: {
28
+ readonly Icon: typeof InfoIcon;
29
+ readonly color: "fgMuted";
30
+ };
31
+ readonly success: {
32
+ readonly Icon: typeof CircleCheckIcon;
33
+ readonly color: "accent";
34
+ };
35
+ readonly error: {
36
+ readonly Icon: typeof CircleAlertIcon;
37
+ readonly color: "danger";
38
+ };
39
+ };
40
+ declare function ToastProvider({ limit, closeLabel, regionLabel, className, style, children }: ToastProviderProps): import("react").JSX.Element;
41
+ export declare function useToast(): {
42
+ add: ({ title, description, variant, duration, action }: ToastOptions) => string;
43
+ close: (id: string) => void;
44
+ };
45
+ //#endregion
46
+ export { ToastProvider };
@@ -0,0 +1,219 @@
1
+ "use client";
2
+ import { join as e } from "../styles/join.mjs";
3
+ import { Box as t } from "../Box/index.mjs";
4
+ import { Clickable as n } from "../Clickable/index.mjs";
5
+ import { Text as r } from "../Text/index.mjs";
6
+ import { Button as i } from "../Button/index.mjs";
7
+ import { useThemeContainer as a } from "../theme/use-theme-container.mjs";
8
+ import { CircleAlertIcon as o } from "../icons/CircleAlertIcon.mjs";
9
+ import { XIcon as s } from "../icons/XIcon.mjs";
10
+ import { CircleCheckIcon as c } from "../icons/CircleCheckIcon.mjs";
11
+ import { InfoIcon as l } from "../icons/InfoIcon.mjs";
12
+ import { announcer as u, close as d, content as f, list as p, root as m, toast as h, viewport as g } from "./Toast.css.mjs";
13
+ import { jsx as _, jsxs as v } from "react/jsx-runtime";
14
+ import { createContext as y, use as b, useCallback as x, useMemo as S, useRef as C, useState as w } from "react";
15
+ import { Toast as T } from "@base-ui/react/toast";
16
+ //#region src/Toast/client.tsx
17
+ var E = {
18
+ info: {
19
+ Icon: l,
20
+ color: "fgMuted"
21
+ },
22
+ success: {
23
+ Icon: c,
24
+ color: "accent"
25
+ },
26
+ error: {
27
+ Icon: o,
28
+ color: "danger"
29
+ }
30
+ }, D = y(null), O = y(null), k = (e) => e !== void 0 && Object.hasOwn(E, e);
31
+ function A({ limit: e = 3, closeLabel: n = "Dismiss", regionLabel: r = "Notifications", className: i, style: o, children: s }) {
32
+ let { container: c, ref: l } = a(), [u] = w(T.createToastManager);
33
+ return /* @__PURE__ */ _(T.Provider, {
34
+ limit: e,
35
+ toastManager: u,
36
+ children: /* @__PURE__ */ v(D, {
37
+ value: u,
38
+ children: [
39
+ /* @__PURE__ */ _(t, {
40
+ as: "span",
41
+ hidden: !0,
42
+ ref: l
43
+ }),
44
+ s,
45
+ /* @__PURE__ */ _(M, {}),
46
+ /* @__PURE__ */ _(T.Portal, {
47
+ container: c,
48
+ children: /* @__PURE__ */ _(j, {
49
+ className: i,
50
+ regionLabel: r,
51
+ style: o,
52
+ children: /* @__PURE__ */ _(N, { closeLabel: n })
53
+ })
54
+ })
55
+ ]
56
+ })
57
+ });
58
+ }
59
+ function j({ regionLabel: n, className: r, style: i, children: a }) {
60
+ let o = C(null);
61
+ return /* @__PURE__ */ _(T.Viewport, {
62
+ "aria-atomic": void 0,
63
+ "aria-label": n,
64
+ "aria-live": "off",
65
+ "aria-relevant": void 0,
66
+ onFocus: (e) => {
67
+ let t = e.relatedTarget;
68
+ t && !e.currentTarget.contains(t) && (o.current = t);
69
+ },
70
+ render: /* @__PURE__ */ _(t, {
71
+ className: e(g, r),
72
+ position: "fixed",
73
+ style: i,
74
+ zIndex: "toast"
75
+ }),
76
+ children: /* @__PURE__ */ _("div", {
77
+ className: p,
78
+ children: /* @__PURE__ */ _(O, {
79
+ value: o,
80
+ children: a
81
+ })
82
+ })
83
+ });
84
+ }
85
+ function M() {
86
+ let { toasts: e } = T.useToastManager(), t = (t) => e.filter((e) => e.type === "error" === t).map((e) => /* @__PURE__ */ v("div", { children: [
87
+ e.title,
88
+ " ",
89
+ e.description
90
+ ] }, e.id));
91
+ return /* @__PURE__ */ v("div", {
92
+ className: u,
93
+ children: [/* @__PURE__ */ _("div", {
94
+ "aria-atomic": !1,
95
+ "aria-live": "polite",
96
+ role: "status",
97
+ children: t(!1)
98
+ }), /* @__PURE__ */ _("div", {
99
+ "aria-atomic": !1,
100
+ "aria-live": "assertive",
101
+ role: "alert",
102
+ children: t(!0)
103
+ })]
104
+ });
105
+ }
106
+ function N({ closeLabel: e }) {
107
+ let { toasts: t } = T.useToastManager();
108
+ return t.map((t) => /* @__PURE__ */ _(P, {
109
+ closeLabel: e,
110
+ toast: t
111
+ }, t.id));
112
+ }
113
+ function P({ toast: a, closeLabel: o }) {
114
+ let c = k(a.type) ? a.type : "info", { Icon: l, color: u } = E[c], p = b(D), g = b(O), [y, S] = w(!1), C = x((e) => {
115
+ e && S(getComputedStyle(e).direction === "rtl");
116
+ }, []);
117
+ return /* @__PURE__ */ v(T.Root, {
118
+ "aria-modal": void 0,
119
+ ref: C,
120
+ render: /* @__PURE__ */ _(t, {
121
+ alignItems: "start",
122
+ backgroundColor: "bgRaised",
123
+ borderRadius: "med",
124
+ boxShadow: "lg",
125
+ className: e(m, h({ variant: c })),
126
+ display: "flex",
127
+ gap: "12",
128
+ padding: "12"
129
+ }),
130
+ role: "group",
131
+ swipeDirection: ["down", y ? "left" : "right"],
132
+ toast: a,
133
+ children: [
134
+ /* @__PURE__ */ _(t, {
135
+ display: "flex",
136
+ flexShrink: 0,
137
+ paddingBlock: "2",
138
+ children: /* @__PURE__ */ _(l, { color: u })
139
+ }),
140
+ /* @__PURE__ */ v(t, {
141
+ alignItems: "start",
142
+ className: f,
143
+ display: "flex",
144
+ flexDirection: "column",
145
+ flexGrow: 1,
146
+ gap: "8",
147
+ children: [
148
+ /* @__PURE__ */ _(T.Title, { render: /* @__PURE__ */ _(r, {
149
+ as: "div",
150
+ weight: "medium"
151
+ }) }),
152
+ /* @__PURE__ */ _(T.Description, { render: /* @__PURE__ */ _(r, {
153
+ as: "div",
154
+ color: "fgMuted",
155
+ size: "sm"
156
+ }) }),
157
+ /* @__PURE__ */ _(T.Action, { render: /* @__PURE__ */ _(i, {
158
+ size: "sm",
159
+ variant: "secondary"
160
+ }) })
161
+ ]
162
+ }),
163
+ /* @__PURE__ */ _(T.Close, {
164
+ "aria-hidden": !1,
165
+ "aria-label": o,
166
+ onClick: (e) => {
167
+ if (e.detail !== 0 || !p) return;
168
+ let t = a.ref?.current, n = (t && F(t)) ?? g?.current;
169
+ n instanceof HTMLElement && (e.preventBaseUIHandler(), p.close(a.id), requestAnimationFrame(() => {
170
+ n.isConnected && n.focus();
171
+ }));
172
+ },
173
+ render: /* @__PURE__ */ _(n, {
174
+ borderRadius: "sm",
175
+ className: d,
176
+ flexShrink: 0,
177
+ padding: "4"
178
+ }),
179
+ children: /* @__PURE__ */ _(s, {})
180
+ })
181
+ ]
182
+ });
183
+ }
184
+ function F(e) {
185
+ let t = (e, n) => !e || !e.matches("[data-ending-style]") ? e : t(n ? e.nextElementSibling : e.previousElementSibling, n);
186
+ return (t(e.nextElementSibling, !0) ?? t(e.previousElementSibling, !1))?.querySelector(`.${d}`);
187
+ }
188
+ function I() {
189
+ let e = b(D);
190
+ if (!e) throw Error("useToast must be called under Toast.Provider.");
191
+ return S(() => {
192
+ let t = (t) => e.close(t);
193
+ return {
194
+ add: ({ title: n, description: r, variant: i = "info", duration: a = i === "error" ? 0 : 5e3, action: o }) => {
195
+ let s = e.add({
196
+ title: n,
197
+ description: r,
198
+ type: i,
199
+ timeout: a,
200
+ priority: "low",
201
+ actionProps: o && {
202
+ children: o.label,
203
+ onClick: () => {
204
+ try {
205
+ o.onClick();
206
+ } finally {
207
+ t(s);
208
+ }
209
+ }
210
+ }
211
+ });
212
+ return s;
213
+ },
214
+ close: t
215
+ };
216
+ }, [e]);
217
+ }
218
+ //#endregion
219
+ export { M as ToastAnnouncer, P as ToastItem, A as ToastProvider, j as ToastStack, I as useToast };
@@ -0,0 +1,7 @@
1
+ import { ToastOptions, ToastProvider, ToastProviderProps, ToastVariant, useToast } from "./client.mjs";
2
+ //#region src/Toast/index.d.ts
3
+ export declare const Toast: {
4
+ Provider: typeof ToastProvider;
5
+ };
6
+ //#endregion
7
+ export { type ToastOptions, type ToastProviderProps, type ToastVariant, useToast };
@@ -0,0 +1,5 @@
1
+ import { ToastProvider as e, useToast as t } from "./client.mjs";
2
+ //#region src/Toast/index.tsx
3
+ var n = { Provider: e };
4
+ //#endregion
5
+ export { n as Toast, t as useToast };
package/dist/base.css ADDED
@@ -0,0 +1,6 @@
1
+ @layer tokens, reset, atoms, components.box, components.checkbox, components.clickable, components.icon, components.icon-button, components.inline, components.stack, components.text, components.badge, components.button, components.chip, components.field, components.heading, components.dialog, components.alert-dialog, components.menu, components.multiselect, components.search-field, components.tabs, components.tag, components.toast;
2
+ @layer tokens{:root{--space-0:0rem;--space-1:.0625rem;--space-2:.125rem;--space-4:.25rem;--space-6:.375rem;--space-8:.5rem;--space-12:.75rem;--space-16:1rem;--space-20:1.25rem;--space-24:1.5rem;--space-32:2rem;--space-40:2.5rem;--space-48:3rem;--space-64:4rem;--space-80:5rem;--space-96:6rem;--size-xs:1.5rem;--size-sm:2rem;--size-med:2.5rem;--size-lg:3rem;--size-xl:3.5rem;--container-prose:40rem;--container-page:64rem;--container-wide:80rem;--radius-none:0;--radius-sm:.25rem;--radius-med:.5rem;--radius-lg:.75rem;--radius-xl:1rem;--radius-full:9999px;--font-size-xs:.75rem;--font-size-sm:.875rem;--font-size-med:1rem;--font-size-lg:1.125rem;--font-size-xl:1.25rem;--font-size-2xl:1.5rem;--font-size-3xl:1.875rem;--font-size-4xl:2.25rem;--font-weight-regular:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--line-height-sm:1.25;--line-height-med:1.5;--line-height-lg:1.75;--z-index-base:0;--z-index-raised:1;--z-index-dropdown:1000;--z-index-sticky:1100;--z-index-overlay:1200;--z-index-modal:1300;--z-index-popover:1400;--z-index-toast:1500;--z-index-tooltip:1600;--duration-fast:.12s;--duration-med:.2s;--duration-slow:.32s;--easing-standard:cubic-bezier(.2, 0, 0, 1);--easing-enter:cubic-bezier(0, 0, 0, 1);--easing-exit:cubic-bezier(.3, 0, 1, 1);--distance-sm:.25rem;--distance-med:.5rem;--distance-lg:1rem;--scale-sm:.02;--scale-med:.05;--scale-lg:.1}[data-brand]{--shadow-sm:0 1px 2px color-mix(in srgb, var(--color-shadow) 12%, transparent);--shadow-med:0 2px 8px color-mix(in srgb, var(--color-shadow) 14%, transparent), 0 1px 2px color-mix(in srgb, var(--color-shadow) 8%, transparent);--shadow-lg:0 8px 24px color-mix(in srgb, var(--color-shadow) 16%, transparent), 0 2px 6px color-mix(in srgb, var(--color-shadow) 8%, transparent)}[data-brand][data-mode=light]{color-scheme:light}[data-brand][data-mode=dark]{--shadow-sm:0 0 0 1px color-mix(in srgb, var(--color-fg) 10%, transparent), 0 1px 2px color-mix(in srgb, var(--color-shadow) 40%, transparent);--shadow-med:0 0 0 1px color-mix(in srgb, var(--color-fg) 10%, transparent), 0 2px 8px color-mix(in srgb, var(--color-shadow) 48%, transparent), 0 1px 2px color-mix(in srgb, var(--color-shadow) 32%, transparent);--shadow-lg:0 0 0 1px color-mix(in srgb, var(--color-fg) 10%, transparent), 0 8px 24px color-mix(in srgb, var(--color-shadow) 56%, transparent), 0 2px 6px color-mix(in srgb, var(--color-shadow) 32%, transparent);color-scheme:dark}[data-brand][data-mode=system]{color-scheme:light dark}:dir(ltr){--dir:1}:dir(rtl){--dir:-1}@media (prefers-color-scheme:dark){[data-brand][data-mode=system]{--shadow-sm:0 0 0 1px color-mix(in srgb, var(--color-fg) 10%, transparent), 0 1px 2px color-mix(in srgb, var(--color-shadow) 40%, transparent);--shadow-med:0 0 0 1px color-mix(in srgb, var(--color-fg) 10%, transparent), 0 2px 8px color-mix(in srgb, var(--color-shadow) 48%, transparent), 0 1px 2px color-mix(in srgb, var(--color-shadow) 32%, transparent);--shadow-lg:0 0 0 1px color-mix(in srgb, var(--color-fg) 10%, transparent), 0 8px 24px color-mix(in srgb, var(--color-shadow) 56%, transparent), 0 2px 6px color-mix(in srgb, var(--color-shadow) 32%, transparent)}}@media (prefers-reduced-motion:reduce){:root{--distance-sm:0rem;--distance-med:0rem;--distance-lg:0rem;--scale-sm:0;--scale-med:0;--scale-lg:0;--duration-fast:.12s;--duration-med:.12s;--duration-slow:.12s}}}
3
+
4
+ @font-face{src:local(Arial),local(ArialMT);size-adjust:101.568%;ascent-override:95.3892%;descent-override:23.7511%;line-gap-override:0%;font-family:Inter Fallback}@font-face{src:local(Courier New),local(CourierNewPSMT);size-adjust:127.781%;ascent-override:79.8319%;descent-override:23.48%;line-gap-override:0%;font-family:JetBrains Mono Fallback}@layer tokens{[data-brand=default]{--color-bg:light-dark(oklch(100% 0 0),oklch(14.5% .006 265));--color-bg-muted:light-dark(oklch(96.8% .004 265),oklch(27% .01 265));--color-bg-raised:light-dark(oklch(100% 0 0),oklch(20.5% .008 265));--color-fg:light-dark(oklch(14.5% .006 265),oklch(98.5% .002 265));--color-fg-muted:light-dark(oklch(44.5% .014 265),oklch(71% .012 265));--color-border:light-dark(oklch(92.5% .006 265),oklch(27% .01 265));--color-border-strong:oklch(55.5% .014 265);--color-accent:light-dark(oklch(54.6% .19 258),oklch(70.7% .14 258));--color-accent-fg:light-dark(oklch(100% 0 0),oklch(14.5% .006 265));--color-danger:light-dark(oklch(56% .2 25),oklch(70.4% .17 25));--color-danger-fg:light-dark(oklch(100% 0 0),oklch(14.5% .006 265));--color-focus:light-dark(oklch(54.6% .19 258),oklch(70.7% .14 258));--color-shadow:light-dark(oklch(14.5% .006 265),oklch(0% 0 0));--font-body:"Inter", "Inter Fallback", sans-serif;--font-heading:"Inter", "Inter Fallback", sans-serif;--font-display:"Inter", "Inter Fallback", sans-serif;--font-label:"Inter", "Inter Fallback", sans-serif;--font-mono:"JetBrains Mono", "JetBrains Mono Fallback", monospace;--font-trim-body-cap:.36377;--font-trim-body-baseline:.36377;--font-trim-heading-cap:.36377;--font-trim-heading-baseline:.36377;--font-trim-display-cap:.36377;--font-trim-display-baseline:.36377;--font-trim-label-cap:.36377;--font-trim-label-baseline:.36377;--font-trim-mono-cap:.37;--font-trim-mono-baseline:.36}@media (forced-colors:active){[data-brand][data-brand]{--color-bg:Canvas;--color-bg-muted:Canvas;--color-bg-raised:Canvas;--color-fg:CanvasText;--color-fg-muted:CanvasText;--color-border:CanvasText;--color-border-strong:CanvasText;--color-accent:LinkText;--color-accent-fg:Canvas;--color-danger:CanvasText;--color-danger-fg:Canvas;--color-focus:Highlight;--color-shadow:CanvasText}}}
5
+
6
+ @layer reset{*,:before,:after{box-sizing:border-box}*{margin:0}html{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;min-block-size:100dvb;line-height:1.5}img,picture,video,canvas,svg{max-inline-size:100%;display:block}input,button,textarea,select{font:inherit;color:inherit}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}h1,h2,h3,h4,h5,h6{text-wrap:balance}}
@@ -0,0 +1,9 @@
1
+ import { ColorRole, FontRole } from "../tokens/roles.mjs";
2
+ import { BrandFont } from "./font.mjs";
3
+ //#region src/brands/brand.d.ts
4
+ export interface Brand {
5
+ readonly name: string;
6
+ readonly color: Readonly<Record<ColorRole, string>>;
7
+ readonly font: Readonly<Record<FontRole, BrandFont>>;
8
+ }
9
+ //#endregion
@@ -0,0 +1,4 @@
1
+ //#region src/brands/brand.ts
2
+ var e = (e, t) => `light-dark(${e}, ${t})`;
3
+ //#endregion
4
+ export { e as lightDark };
@@ -0,0 +1,15 @@
1
+ //#region src/brands/check-fonts.ts
2
+ var e = /* @__PURE__ */ new Set();
3
+ async function t(t, n = 5e3) {
4
+ if (process.env.NODE_ENV === "production" || typeof document > "u") return;
5
+ await new Promise((e) => setTimeout(e, n)), await document.fonts.ready;
6
+ let r = [...document.fonts];
7
+ for (let n of Object.values(t.font)) {
8
+ let t = n.metrics.familyName;
9
+ if (e.has(t)) continue;
10
+ let i = r.filter((e) => e.family.replace(/^["']|["']$/g, "").toLowerCase() === t.toLowerCase()), a = i.length === 0 ? "has no @font-face" : i.some((e) => e.status === "error") ? "has a face that failed to load" : void 0;
11
+ a && (e.add(t), console.warn(`@jonmilner/ui: font "${t}" ${a}, so text uses its fallback. Load the font files for this brand (see the brand docs).`));
12
+ }
13
+ }
14
+ //#endregion
15
+ export { t as checkFonts };
@@ -0,0 +1,4 @@
1
+ import { Brand } from "./brand.mjs";
2
+ //#region src/brands/default.d.ts
3
+ export declare const defaultBrand: Brand;
4
+ //#endregion