@tomny-dev/uzi 0.2.5 → 0.2.6

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 (182) hide show
  1. package/dist/index.cjs +65 -1925
  2. package/dist/index.js +24 -1857
  3. package/dist/index10.cjs +26 -0
  4. package/dist/index10.cjs.map +1 -0
  5. package/dist/index10.js +19 -0
  6. package/dist/index10.js.map +1 -0
  7. package/dist/index11.cjs +22 -0
  8. package/dist/index11.cjs.map +1 -0
  9. package/dist/index11.js +22 -0
  10. package/dist/index11.js.map +1 -0
  11. package/dist/index12.cjs +22 -0
  12. package/dist/index12.cjs.map +1 -0
  13. package/dist/index12.js +41 -0
  14. package/dist/index12.js.map +1 -0
  15. package/dist/index13.cjs +56 -0
  16. package/dist/index13.cjs.map +1 -0
  17. package/dist/index13.js +84 -0
  18. package/dist/index13.js.map +1 -0
  19. package/dist/index14.cjs +87 -0
  20. package/dist/index14.cjs.map +1 -0
  21. package/dist/index14.js +17 -0
  22. package/dist/index14.js.map +1 -0
  23. package/dist/index15.cjs +22 -0
  24. package/dist/index15.cjs.map +1 -0
  25. package/dist/index15.js +16 -0
  26. package/dist/index15.js.map +1 -0
  27. package/dist/index16.cjs +16 -0
  28. package/dist/index16.cjs.map +1 -0
  29. package/dist/index16.js +45 -0
  30. package/dist/index16.js.map +1 -0
  31. package/dist/index17.cjs +64 -0
  32. package/dist/index17.cjs.map +1 -0
  33. package/dist/index17.js +435 -0
  34. package/dist/index17.js.map +1 -0
  35. package/dist/index18.cjs +438 -0
  36. package/dist/index18.cjs.map +1 -0
  37. package/dist/index18.js +7 -0
  38. package/dist/index18.js.map +1 -0
  39. package/dist/index19.cjs +8 -0
  40. package/dist/index19.cjs.map +1 -0
  41. package/dist/index19.js +18 -0
  42. package/dist/index19.js.map +1 -0
  43. package/dist/index2.cjs +23 -0
  44. package/dist/index20.cjs +20 -0
  45. package/dist/index20.cjs.map +1 -0
  46. package/dist/index20.js +7 -0
  47. package/dist/index20.js.map +1 -0
  48. package/dist/index21.cjs +8 -0
  49. package/dist/index21.cjs.map +1 -0
  50. package/dist/index21.js +15 -0
  51. package/dist/index21.js.map +1 -0
  52. package/dist/index22.cjs +17 -0
  53. package/dist/index22.cjs.map +1 -0
  54. package/dist/index22.js +7 -0
  55. package/dist/index22.js.map +1 -0
  56. package/dist/index23.cjs +8 -0
  57. package/dist/index23.cjs.map +1 -0
  58. package/dist/index23.js +18 -0
  59. package/dist/index23.js.map +1 -0
  60. package/dist/index24.cjs +20 -0
  61. package/dist/index24.cjs.map +1 -0
  62. package/dist/index24.js +41 -0
  63. package/dist/index24.js.map +1 -0
  64. package/dist/index25.cjs +58 -0
  65. package/dist/index25.cjs.map +1 -0
  66. package/dist/index25.js +123 -0
  67. package/dist/index25.js.map +1 -0
  68. package/dist/index26.cjs +126 -0
  69. package/dist/index26.cjs.map +1 -0
  70. package/dist/index26.js +29 -0
  71. package/dist/index26.js.map +1 -0
  72. package/dist/index27.cjs +40 -0
  73. package/dist/index27.cjs.map +1 -0
  74. package/dist/index27.js +110 -0
  75. package/dist/index27.js.map +1 -0
  76. package/dist/index28.cjs +113 -0
  77. package/dist/index28.cjs.map +1 -0
  78. package/dist/index28.js +26 -0
  79. package/dist/index28.js.map +1 -0
  80. package/dist/index29.cjs +28 -0
  81. package/dist/index29.cjs.map +1 -0
  82. package/dist/index29.js +29 -0
  83. package/dist/index29.js.map +1 -0
  84. package/dist/index3.js +8 -0
  85. package/dist/index3.js.map +1 -0
  86. package/dist/index30.cjs +40 -0
  87. package/dist/index30.cjs.map +1 -0
  88. package/dist/index30.js +118 -0
  89. package/dist/index30.js.map +1 -0
  90. package/dist/index31.cjs +134 -0
  91. package/dist/index31.cjs.map +1 -0
  92. package/dist/index31.js +20 -0
  93. package/dist/index31.js.map +1 -0
  94. package/dist/index32.cjs +23 -0
  95. package/dist/index32.cjs.map +1 -0
  96. package/dist/index32.js +114 -0
  97. package/dist/index32.js.map +1 -0
  98. package/dist/index33.cjs +115 -0
  99. package/dist/index33.cjs.map +1 -0
  100. package/dist/index33.js +7 -0
  101. package/dist/index33.js.map +1 -0
  102. package/dist/index34.cjs +8 -0
  103. package/dist/index34.cjs.map +1 -0
  104. package/dist/index34.js +66 -0
  105. package/dist/index34.js.map +1 -0
  106. package/dist/index35.cjs +66 -0
  107. package/dist/index35.cjs.map +1 -0
  108. package/dist/index35.js +25 -0
  109. package/dist/index35.js.map +1 -0
  110. package/dist/index36.cjs +34 -0
  111. package/dist/index36.cjs.map +1 -0
  112. package/dist/index36.js +55 -0
  113. package/dist/index36.js.map +1 -0
  114. package/dist/index37.cjs +55 -0
  115. package/dist/index37.cjs.map +1 -0
  116. package/dist/index37.js +35 -0
  117. package/dist/index37.js.map +1 -0
  118. package/dist/index38.cjs +49 -0
  119. package/dist/index38.cjs.map +1 -0
  120. package/dist/index38.js +150 -0
  121. package/dist/index38.js.map +1 -0
  122. package/dist/index39.cjs +150 -0
  123. package/dist/index39.cjs.map +1 -0
  124. package/dist/index39.js +43 -0
  125. package/dist/index39.js.map +1 -0
  126. package/dist/index4.cjs +8 -0
  127. package/dist/index4.cjs.map +1 -0
  128. package/dist/index4.js +29 -0
  129. package/dist/index4.js.map +1 -0
  130. package/dist/index40.cjs +61 -0
  131. package/dist/index40.cjs.map +1 -0
  132. package/dist/index40.js +173 -0
  133. package/dist/index40.js.map +1 -0
  134. package/dist/index41.cjs +173 -0
  135. package/dist/index41.cjs.map +1 -0
  136. package/dist/index41.js +14 -0
  137. package/dist/index41.js.map +1 -0
  138. package/dist/index42.cjs +15 -0
  139. package/dist/index42.cjs.map +1 -0
  140. package/dist/index42.js +21 -0
  141. package/dist/index42.js.map +1 -0
  142. package/dist/index43.cjs +21 -0
  143. package/dist/index43.cjs.map +1 -0
  144. package/dist/index43.js +15 -0
  145. package/dist/index43.js.map +1 -0
  146. package/dist/index44.cjs +17 -0
  147. package/dist/index44.cjs.map +1 -0
  148. package/dist/index44.js +24 -0
  149. package/dist/index44.js.map +1 -0
  150. package/dist/index45.cjs +24 -0
  151. package/dist/index45.cjs.map +1 -0
  152. package/dist/index45.js +13 -0
  153. package/dist/index45.js.map +1 -0
  154. package/dist/index46.cjs +16 -0
  155. package/dist/index46.cjs.map +1 -0
  156. package/dist/index46.js +96 -0
  157. package/dist/index46.js.map +1 -0
  158. package/dist/index47.cjs +98 -0
  159. package/dist/index47.cjs.map +1 -0
  160. package/dist/index5.cjs +40 -0
  161. package/dist/index5.cjs.map +1 -0
  162. package/dist/index5.js +45 -0
  163. package/dist/index5.js.map +1 -0
  164. package/dist/index6.cjs +47 -0
  165. package/dist/index6.cjs.map +1 -0
  166. package/dist/index6.js +17 -0
  167. package/dist/index6.js.map +1 -0
  168. package/dist/index7.cjs +20 -0
  169. package/dist/index7.cjs.map +1 -0
  170. package/dist/index7.js +30 -0
  171. package/dist/index7.js.map +1 -0
  172. package/dist/index8.cjs +35 -0
  173. package/dist/index8.cjs.map +1 -0
  174. package/dist/index8.js +18 -0
  175. package/dist/index8.js.map +1 -0
  176. package/dist/index9.cjs +20 -0
  177. package/dist/index9.cjs.map +1 -0
  178. package/dist/index9.js +26 -0
  179. package/dist/index9.js.map +1 -0
  180. package/package.json +1 -1
  181. package/dist/index.cjs.map +0 -1
  182. package/dist/index.js.map +0 -1
@@ -0,0 +1,26 @@
1
+ const require_cx = require("./index4.cjs");
2
+ const require_card_module = require("./index9.cjs");
3
+ let react_jsx_runtime = require("react/jsx-runtime");
4
+ //#region src/components/card/Card.tsx
5
+ function Card({ as, tone = "default", padding = "md", interactive = false, className, children, ...rest }) {
6
+ const Component = as ?? "div";
7
+ const TONE_CLASS = {
8
+ default: null,
9
+ muted: "tone-muted",
10
+ contrast: "tone-contrast"
11
+ };
12
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Component, {
13
+ className: require_cx.cx(require_card_module.default.card, TONE_CLASS[tone] ? require_card_module.default[TONE_CLASS[tone]] : null, require_card_module.default[{
14
+ none: "padding-none",
15
+ sm: "padding-sm",
16
+ md: "padding-md",
17
+ lg: "padding-lg"
18
+ }[padding]], interactive && require_card_module.default.interactive, className),
19
+ ...rest,
20
+ children
21
+ });
22
+ }
23
+ //#endregion
24
+ exports.Card = Card;
25
+
26
+ //# sourceMappingURL=index10.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index10.cjs","names":[],"sources":["../src/components/card/Card.tsx"],"sourcesContent":["/**\n * Lightweight container component used for panels across the app.\n *\n * @remarks\n * Supports tone variants, padding presets, and an optional interactive affordance.\n *\n * @param props.as - Semantic element to render (defaults to `div`).\n * @param props.tone - Visual tone variant.\n * @param props.padding - Padding preset.\n * @param props.interactive - Enables hover/focus affordance.\n */\nimport type { HTMLAttributes } from \"react\";\nimport { cx } from \"../../utils/cx\";\nimport styles from \"./card.module.css\";\n\nexport type CardTone = \"default\" | \"muted\" | \"contrast\";\nexport type CardPadding = \"none\" | \"sm\" | \"md\" | \"lg\";\n\ntype CardElement = \"div\" | \"section\" | \"article\";\n\nexport type CardProps = HTMLAttributes<HTMLElement> & {\n /** Optional semantic element type. Defaults to `div`. */\n as?: CardElement;\n /** Visual tone; drives background/border CSS vars. */\n tone?: CardTone;\n /** Padding preset; maps to CSS variables so consumers can override globally. */\n padding?: CardPadding;\n /** Adds hover/focus affordance (lift + outline). */\n interactive?: boolean;\n};\n\nexport function Card({\n as,\n tone = \"default\",\n padding = \"md\",\n interactive = false,\n className,\n children,\n ...rest\n}: CardProps) {\n const Component: CardElement = as ?? \"div\";\n const TONE_CLASS: Record<CardTone, string | null> = { default: null, muted: \"tone-muted\", contrast: \"tone-contrast\" };\n const PADDING_CLASS: Record<CardPadding, string> = { none: \"padding-none\", sm: \"padding-sm\", md: \"padding-md\", lg: \"padding-lg\" };\n const classes = cx(\n styles.card,\n TONE_CLASS[tone] ? styles[TONE_CLASS[tone]] : null,\n styles[PADDING_CLASS[padding]],\n interactive && styles.interactive,\n className,\n );\n\n return (\n <Component className={classes} {...rest}>\n {children}\n </Component>\n );\n}\n"],"mappings":";;;;AA+BA,SAAgB,KAAK,EACnB,IACA,OAAO,WACP,UAAU,MACV,cAAc,OACd,WACA,UACA,GAAG,QACS;CACZ,MAAM,YAAyB,MAAM;CACrC,MAAM,aAA8C;EAAE,SAAS;EAAM,OAAO;EAAc,UAAU;CAAgB;CAUpH,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD;EAAW,WATG,WAAA,GACd,oBAAA,QAAO,MACP,WAAW,QAAQ,oBAAA,QAAO,WAAW,SAAS,MAC9C,oBAAA,QAAO;GAJ4C,MAAM;GAAgB,IAAI;GAAc,IAAI;GAAc,IAAI;EAI1G,EAAc,WACrB,eAAe,oBAAA,QAAO,aACtB,SAIsB;EAAS,GAAI;EAChC;CACQ,CAAA;AAEf"}
@@ -0,0 +1,19 @@
1
+ //#region src/components/pill/pill.module.css
2
+ var pill = "uzi-pill-module__pill__uCKcP";
3
+ var icon = "uzi-pill-module__icon__KQ8zg";
4
+ var content = "uzi-pill-module__content__T7AG1";
5
+ var pill_module_default = {
6
+ pill,
7
+ "size-sm": "uzi-pill-module__size-sm__JANOQ",
8
+ "size-md": "uzi-pill-module__size-md__fdsqR",
9
+ "tone-success": "uzi-pill-module__tone-success__kW2Kf",
10
+ "tone-warning": "uzi-pill-module__tone-warning__Rc5-s",
11
+ "tone-info": "uzi-pill-module__tone-info__0vQrj",
12
+ "tone-danger": "uzi-pill-module__tone-danger__gzNOa",
13
+ icon,
14
+ content
15
+ };
16
+ //#endregion
17
+ export { content, pill_module_default as default, icon, pill };
18
+
19
+ //# sourceMappingURL=index10.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index10.js","names":[],"sources":["../src/components/pill/pill.module.css"],"sourcesContent":[".pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 999px;\n border: 1px solid var(--ts-pill-border, var(--border));\n background: var(--ts-pill-bg, color-mix(in srgb, var(--foreground) 4%, transparent));\n color: var(--ts-pill-fg, var(--muted-foreground));\n font-size: 12px;\n font-weight: 700;\n letter-spacing: 0.05em;\n text-transform: uppercase;\n line-height: 1.2;\n white-space: nowrap;\n}\n\n.size-sm {\n padding: 3px 8px;\n font-size: 11px;\n}\n\n.size-md {\n padding: 4px 10px;\n}\n\n.tone-success {\n color: var(--success);\n border-color: color-mix(in srgb, var(--success) 45%, transparent);\n background: color-mix(in srgb, var(--success) 12%, transparent);\n}\n\n.tone-warning {\n color: var(--warning);\n border-color: color-mix(in srgb, var(--warning) 45%, transparent);\n background: color-mix(in srgb, var(--warning) 12%, transparent);\n}\n\n.tone-info {\n color: var(--primary);\n border-color: color-mix(in srgb, var(--primary) 50%, transparent);\n background: color-mix(in srgb, var(--primary) 12%, transparent);\n}\n\n.tone-danger {\n color: var(--destructive);\n border-color: color-mix(in srgb, var(--destructive) 45%, transparent);\n background: color-mix(in srgb, var(--destructive) 12%, transparent);\n}\n\n.icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 12px;\n height: 12px;\n}\n\n.content {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n"],"mappings":""}
@@ -0,0 +1,22 @@
1
+ //#region src/components/pill/pill.module.css
2
+ var pill = "uzi-pill-module__pill__uCKcP";
3
+ var icon = "uzi-pill-module__icon__KQ8zg";
4
+ var content = "uzi-pill-module__content__T7AG1";
5
+ var pill_module_default = {
6
+ pill,
7
+ "size-sm": "uzi-pill-module__size-sm__JANOQ",
8
+ "size-md": "uzi-pill-module__size-md__fdsqR",
9
+ "tone-success": "uzi-pill-module__tone-success__kW2Kf",
10
+ "tone-warning": "uzi-pill-module__tone-warning__Rc5-s",
11
+ "tone-info": "uzi-pill-module__tone-info__0vQrj",
12
+ "tone-danger": "uzi-pill-module__tone-danger__gzNOa",
13
+ icon,
14
+ content
15
+ };
16
+ //#endregion
17
+ exports.content = content;
18
+ exports.default = pill_module_default;
19
+ exports.icon = icon;
20
+ exports.pill = pill;
21
+
22
+ //# sourceMappingURL=index11.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index11.cjs","names":[],"sources":["../src/components/pill/pill.module.css"],"sourcesContent":[".pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 999px;\n border: 1px solid var(--ts-pill-border, var(--border));\n background: var(--ts-pill-bg, color-mix(in srgb, var(--foreground) 4%, transparent));\n color: var(--ts-pill-fg, var(--muted-foreground));\n font-size: 12px;\n font-weight: 700;\n letter-spacing: 0.05em;\n text-transform: uppercase;\n line-height: 1.2;\n white-space: nowrap;\n}\n\n.size-sm {\n padding: 3px 8px;\n font-size: 11px;\n}\n\n.size-md {\n padding: 4px 10px;\n}\n\n.tone-success {\n color: var(--success);\n border-color: color-mix(in srgb, var(--success) 45%, transparent);\n background: color-mix(in srgb, var(--success) 12%, transparent);\n}\n\n.tone-warning {\n color: var(--warning);\n border-color: color-mix(in srgb, var(--warning) 45%, transparent);\n background: color-mix(in srgb, var(--warning) 12%, transparent);\n}\n\n.tone-info {\n color: var(--primary);\n border-color: color-mix(in srgb, var(--primary) 50%, transparent);\n background: color-mix(in srgb, var(--primary) 12%, transparent);\n}\n\n.tone-danger {\n color: var(--destructive);\n border-color: color-mix(in srgb, var(--destructive) 45%, transparent);\n background: color-mix(in srgb, var(--destructive) 12%, transparent);\n}\n\n.icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 12px;\n height: 12px;\n}\n\n.content {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n"],"mappings":""}
@@ -0,0 +1,22 @@
1
+ import { cx } from "./index3.js";
2
+ import pill_module_default from "./index10.js";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ //#region src/components/pill/Pill.tsx
5
+ function Pill({ as, tone = "neutral", size = "md", icon, className, children, ...rest }) {
6
+ return /* @__PURE__ */ jsxs(as ?? "span", {
7
+ className: cx(pill_module_default.pill, pill_module_default[`tone-${tone}`], pill_module_default[`size-${size}`], className),
8
+ ...rest,
9
+ children: [icon ? /* @__PURE__ */ jsx("span", {
10
+ className: pill_module_default.icon,
11
+ "aria-hidden": "true",
12
+ children: icon
13
+ }) : null, /* @__PURE__ */ jsx("span", {
14
+ className: pill_module_default.content,
15
+ children
16
+ })]
17
+ });
18
+ }
19
+ //#endregion
20
+ export { Pill };
21
+
22
+ //# sourceMappingURL=index11.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index11.js","names":[],"sources":["../src/components/pill/Pill.tsx"],"sourcesContent":["/**\n * Compact label component for status chips and tags.\n *\n * @remarks\n * Supports tone and size presets, and can render any inline element.\n *\n * @param props.as - Element to render (defaults to `span`).\n * @param props.tone - Visual tone variant.\n * @param props.size - Size preset.\n * @param props.icon - Optional leading icon.\n */\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cx } from \"../../utils/cx\";\nimport styles from \"./pill.module.css\";\n\nexport type PillTone = \"neutral\" | \"success\" | \"warning\" | \"info\" | \"danger\";\nexport type PillSize = \"sm\" | \"md\";\n\ntype PillElement = \"span\" | \"div\" | \"button\";\n\nexport type PillProps = HTMLAttributes<HTMLElement> & {\n /** Optional rendered element; defaults to `span`. */\n as?: PillElement;\n /** Visual tone; adjusts color and border. */\n tone?: PillTone;\n /** Size preset. */\n size?: PillSize;\n /** Leading icon node (not focusable). */\n icon?: ReactNode;\n};\n\nexport function Pill({\n as,\n tone = \"neutral\",\n size = \"md\",\n icon,\n className,\n children,\n ...rest\n}: PillProps) {\n const Component: PillElement = as ?? \"span\";\n const classes = cx(styles.pill, styles[`tone-${tone}`], styles[`size-${size}`], className);\n\n return (\n <Component className={classes} {...rest}>\n {icon ? (\n <span className={styles.icon} aria-hidden=\"true\">\n {icon}\n </span>\n ) : null}\n <span className={styles.content}>{children}</span>\n </Component>\n );\n}\n"],"mappings":";;;;AA+BA,SAAgB,KAAK,EACnB,IACA,OAAO,WACP,OAAO,MACP,MACA,WACA,UACA,GAAG,QACS;CAIZ,OACE,qBAJ6B,MAAM,QAInC;EAAW,WAHG,GAAG,oBAAO,MAAM,oBAAO,QAAQ,SAAS,oBAAO,QAAQ,SAAS,SAGxD;EAAS,GAAI;YAAnC,CACG,OACC,oBAAC,QAAD;GAAM,WAAW,oBAAO;GAAM,eAAY;aACvC;EACG,CAAA,IACJ,MACJ,oBAAC,QAAD;GAAM,WAAW,oBAAO;GAAU;EAAe,CAAA,CACxC;;AAEf"}
@@ -0,0 +1,22 @@
1
+ const require_cx = require("./index4.cjs");
2
+ const require_pill_module = require("./index11.cjs");
3
+ let react_jsx_runtime = require("react/jsx-runtime");
4
+ //#region src/components/pill/Pill.tsx
5
+ function Pill({ as, tone = "neutral", size = "md", icon, className, children, ...rest }) {
6
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(as ?? "span", {
7
+ className: require_cx.cx(require_pill_module.default.pill, require_pill_module.default[`tone-${tone}`], require_pill_module.default[`size-${size}`], className),
8
+ ...rest,
9
+ children: [icon ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
10
+ className: require_pill_module.default.icon,
11
+ "aria-hidden": "true",
12
+ children: icon
13
+ }) : null, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
14
+ className: require_pill_module.default.content,
15
+ children
16
+ })]
17
+ });
18
+ }
19
+ //#endregion
20
+ exports.Pill = Pill;
21
+
22
+ //# sourceMappingURL=index12.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index12.cjs","names":[],"sources":["../src/components/pill/Pill.tsx"],"sourcesContent":["/**\n * Compact label component for status chips and tags.\n *\n * @remarks\n * Supports tone and size presets, and can render any inline element.\n *\n * @param props.as - Element to render (defaults to `span`).\n * @param props.tone - Visual tone variant.\n * @param props.size - Size preset.\n * @param props.icon - Optional leading icon.\n */\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cx } from \"../../utils/cx\";\nimport styles from \"./pill.module.css\";\n\nexport type PillTone = \"neutral\" | \"success\" | \"warning\" | \"info\" | \"danger\";\nexport type PillSize = \"sm\" | \"md\";\n\ntype PillElement = \"span\" | \"div\" | \"button\";\n\nexport type PillProps = HTMLAttributes<HTMLElement> & {\n /** Optional rendered element; defaults to `span`. */\n as?: PillElement;\n /** Visual tone; adjusts color and border. */\n tone?: PillTone;\n /** Size preset. */\n size?: PillSize;\n /** Leading icon node (not focusable). */\n icon?: ReactNode;\n};\n\nexport function Pill({\n as,\n tone = \"neutral\",\n size = \"md\",\n icon,\n className,\n children,\n ...rest\n}: PillProps) {\n const Component: PillElement = as ?? \"span\";\n const classes = cx(styles.pill, styles[`tone-${tone}`], styles[`size-${size}`], className);\n\n return (\n <Component className={classes} {...rest}>\n {icon ? (\n <span className={styles.icon} aria-hidden=\"true\">\n {icon}\n </span>\n ) : null}\n <span className={styles.content}>{children}</span>\n </Component>\n );\n}\n"],"mappings":";;;;AA+BA,SAAgB,KAAK,EACnB,IACA,OAAO,WACP,OAAO,MACP,MACA,WACA,UACA,GAAG,QACS;CAIZ,OACE,iBAAA,GAAA,kBAAA,KAAA,CAJ6B,MAAM,QAInC;EAAW,WAHG,WAAA,GAAG,oBAAA,QAAO,MAAM,oBAAA,QAAO,QAAQ,SAAS,oBAAA,QAAO,QAAQ,SAAS,SAGxD;EAAS,GAAI;YAAnC,CACG,OACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAW,oBAAA,QAAO;GAAM,eAAY;aACvC;EACG,CAAA,IACJ,MACJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAW,oBAAA,QAAO;GAAU;EAAe,CAAA,CACxC;;AAEf"}
@@ -0,0 +1,41 @@
1
+ //#region src/components/modal/modal.module.css
2
+ var portalLayer = "uzi-modal-module__portalLayer__t7blc";
3
+ var backdrop = "uzi-modal-module__backdrop__IMd3b";
4
+ var backdropFadeIn = "uzi-modal-module__backdropFadeIn__GNJdx";
5
+ var backdropFadeOut = "uzi-modal-module__backdropFadeOut__R-3K5";
6
+ var overlayContent = "uzi-modal-module__overlayContent__0DtbP";
7
+ var modalContentIn = "uzi-modal-module__modalContentIn__fub8M";
8
+ var modalContentOut = "uzi-modal-module__modalContentOut__elTJ3";
9
+ var modal = "uzi-modal-module__modal__Mao59";
10
+ var header = "uzi-modal-module__header__PmCaO";
11
+ var titles = "uzi-modal-module__titles__IboyQ";
12
+ var title = "uzi-modal-module__title__Zd7pL";
13
+ var subtitle = "uzi-modal-module__subtitle__t-LRK";
14
+ var closeButton = "uzi-modal-module__closeButton__GTiZr";
15
+ var body = "uzi-modal-module__body__km6FQ";
16
+ var footer = "uzi-modal-module__footer__jWLTv";
17
+ var modal_module_default = {
18
+ portalLayer,
19
+ backdrop,
20
+ backdropFadeIn,
21
+ backdropFadeOut,
22
+ overlayContent,
23
+ modalContentIn,
24
+ modalContentOut,
25
+ modal,
26
+ "size-sm": "uzi-modal-module__size-sm__Uu9je",
27
+ "size-md": "uzi-modal-module__size-md__TiiWy",
28
+ "size-lg": "uzi-modal-module__size-lg__BrTIO",
29
+ "size-xl": "uzi-modal-module__size-xl__sj0mh",
30
+ header,
31
+ titles,
32
+ title,
33
+ subtitle,
34
+ closeButton,
35
+ body,
36
+ footer
37
+ };
38
+ //#endregion
39
+ export { backdrop, backdropFadeIn, backdropFadeOut, body, closeButton, modal_module_default as default, footer, header, modal, modalContentIn, modalContentOut, overlayContent, portalLayer, subtitle, title, titles };
40
+
41
+ //# sourceMappingURL=index12.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index12.js","names":[],"sources":["../src/components/modal/modal.module.css"],"sourcesContent":[".portalLayer {\n position: fixed;\n inset: 0;\n z-index: 100;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 16px;\n}\n\n.backdrop {\n position: absolute;\n inset: 0;\n background: rgba(0, 0, 0, 0.55);\n}\n\n.backdrop[data-state=\"open\"] {\n animation: backdropFadeIn 160ms ease;\n}\n\n.backdrop[data-state=\"closed\"] {\n animation: backdropFadeOut 140ms ease;\n}\n\n.overlayContent {\n position: relative;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n max-width: 100%;\n max-height: 100%;\n outline: none;\n}\n\n.overlayContent[data-state=\"open\"] {\n animation: modalContentIn 180ms ease;\n}\n\n.overlayContent[data-state=\"closed\"] {\n animation: modalContentOut 140ms ease;\n}\n\n.modal {\n background: var(--background);\n border: 1px solid var(--border);\n border-radius: 14px;\n padding: 24px;\n width: min(500px, 100%);\n box-shadow: 0 24px 64px rgba(0, 0, 0, 0.55);\n display: flex;\n flex-direction: column;\n gap: 0;\n}\n\n/* Size variants */\n.size-sm { width: min(380px, 100%); }\n.size-md { width: min(500px, 100%); }\n.size-lg { width: min(640px, 100%); }\n.size-xl { width: min(900px, 100%); }\n\n.header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 16px;\n}\n\n.titles {\n display: flex;\n flex-direction: column;\n gap: 3px;\n}\n\n.title {\n font-weight: 700;\n font-size: 16px;\n color: var(--foreground);\n line-height: 1.3;\n}\n\n.subtitle {\n font-size: 13px;\n color: var(--muted-foreground);\n line-height: 1.4;\n}\n\n.closeButton {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n flex-shrink: 0;\n background: transparent;\n border: 1px solid transparent;\n border-radius: 6px;\n color: var(--muted-foreground);\n cursor: pointer;\n transition: background 0.12s, color 0.12s;\n padding: 0;\n}\n\n.closeButton:hover {\n background: color-mix(in srgb, var(--foreground) 7%, transparent);\n color: var(--foreground);\n}\n\n.closeButton:focus-visible {\n outline: var(--focus-ring);\n outline-offset: var(--focus-ring-offset);\n}\n\n.body {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.footer {\n display: flex;\n gap: 8px;\n margin-top: 20px;\n}\n\n@keyframes backdropFadeIn {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n@keyframes backdropFadeOut {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n }\n}\n\n@keyframes modalContentIn {\n from {\n opacity: 0;\n transform: translateY(6px) scale(0.98);\n }\n\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n\n@keyframes modalContentOut {\n from {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n\n to {\n opacity: 0;\n transform: translateY(4px) scale(0.98);\n }\n}\n"],"mappings":""}
@@ -0,0 +1,56 @@
1
+ //#region src/components/modal/modal.module.css
2
+ var portalLayer = "uzi-modal-module__portalLayer__t7blc";
3
+ var backdrop = "uzi-modal-module__backdrop__IMd3b";
4
+ var backdropFadeIn = "uzi-modal-module__backdropFadeIn__GNJdx";
5
+ var backdropFadeOut = "uzi-modal-module__backdropFadeOut__R-3K5";
6
+ var overlayContent = "uzi-modal-module__overlayContent__0DtbP";
7
+ var modalContentIn = "uzi-modal-module__modalContentIn__fub8M";
8
+ var modalContentOut = "uzi-modal-module__modalContentOut__elTJ3";
9
+ var modal = "uzi-modal-module__modal__Mao59";
10
+ var header = "uzi-modal-module__header__PmCaO";
11
+ var titles = "uzi-modal-module__titles__IboyQ";
12
+ var title = "uzi-modal-module__title__Zd7pL";
13
+ var subtitle = "uzi-modal-module__subtitle__t-LRK";
14
+ var closeButton = "uzi-modal-module__closeButton__GTiZr";
15
+ var body = "uzi-modal-module__body__km6FQ";
16
+ var footer = "uzi-modal-module__footer__jWLTv";
17
+ var modal_module_default = {
18
+ portalLayer,
19
+ backdrop,
20
+ backdropFadeIn,
21
+ backdropFadeOut,
22
+ overlayContent,
23
+ modalContentIn,
24
+ modalContentOut,
25
+ modal,
26
+ "size-sm": "uzi-modal-module__size-sm__Uu9je",
27
+ "size-md": "uzi-modal-module__size-md__TiiWy",
28
+ "size-lg": "uzi-modal-module__size-lg__BrTIO",
29
+ "size-xl": "uzi-modal-module__size-xl__sj0mh",
30
+ header,
31
+ titles,
32
+ title,
33
+ subtitle,
34
+ closeButton,
35
+ body,
36
+ footer
37
+ };
38
+ //#endregion
39
+ exports.backdrop = backdrop;
40
+ exports.backdropFadeIn = backdropFadeIn;
41
+ exports.backdropFadeOut = backdropFadeOut;
42
+ exports.body = body;
43
+ exports.closeButton = closeButton;
44
+ exports.default = modal_module_default;
45
+ exports.footer = footer;
46
+ exports.header = header;
47
+ exports.modal = modal;
48
+ exports.modalContentIn = modalContentIn;
49
+ exports.modalContentOut = modalContentOut;
50
+ exports.overlayContent = overlayContent;
51
+ exports.portalLayer = portalLayer;
52
+ exports.subtitle = subtitle;
53
+ exports.title = title;
54
+ exports.titles = titles;
55
+
56
+ //# sourceMappingURL=index13.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index13.cjs","names":[],"sources":["../src/components/modal/modal.module.css"],"sourcesContent":[".portalLayer {\n position: fixed;\n inset: 0;\n z-index: 100;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 16px;\n}\n\n.backdrop {\n position: absolute;\n inset: 0;\n background: rgba(0, 0, 0, 0.55);\n}\n\n.backdrop[data-state=\"open\"] {\n animation: backdropFadeIn 160ms ease;\n}\n\n.backdrop[data-state=\"closed\"] {\n animation: backdropFadeOut 140ms ease;\n}\n\n.overlayContent {\n position: relative;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n max-width: 100%;\n max-height: 100%;\n outline: none;\n}\n\n.overlayContent[data-state=\"open\"] {\n animation: modalContentIn 180ms ease;\n}\n\n.overlayContent[data-state=\"closed\"] {\n animation: modalContentOut 140ms ease;\n}\n\n.modal {\n background: var(--background);\n border: 1px solid var(--border);\n border-radius: 14px;\n padding: 24px;\n width: min(500px, 100%);\n box-shadow: 0 24px 64px rgba(0, 0, 0, 0.55);\n display: flex;\n flex-direction: column;\n gap: 0;\n}\n\n/* Size variants */\n.size-sm { width: min(380px, 100%); }\n.size-md { width: min(500px, 100%); }\n.size-lg { width: min(640px, 100%); }\n.size-xl { width: min(900px, 100%); }\n\n.header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 16px;\n}\n\n.titles {\n display: flex;\n flex-direction: column;\n gap: 3px;\n}\n\n.title {\n font-weight: 700;\n font-size: 16px;\n color: var(--foreground);\n line-height: 1.3;\n}\n\n.subtitle {\n font-size: 13px;\n color: var(--muted-foreground);\n line-height: 1.4;\n}\n\n.closeButton {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n flex-shrink: 0;\n background: transparent;\n border: 1px solid transparent;\n border-radius: 6px;\n color: var(--muted-foreground);\n cursor: pointer;\n transition: background 0.12s, color 0.12s;\n padding: 0;\n}\n\n.closeButton:hover {\n background: color-mix(in srgb, var(--foreground) 7%, transparent);\n color: var(--foreground);\n}\n\n.closeButton:focus-visible {\n outline: var(--focus-ring);\n outline-offset: var(--focus-ring-offset);\n}\n\n.body {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.footer {\n display: flex;\n gap: 8px;\n margin-top: 20px;\n}\n\n@keyframes backdropFadeIn {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n@keyframes backdropFadeOut {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n }\n}\n\n@keyframes modalContentIn {\n from {\n opacity: 0;\n transform: translateY(6px) scale(0.98);\n }\n\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n\n@keyframes modalContentOut {\n from {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n\n to {\n opacity: 0;\n transform: translateY(4px) scale(0.98);\n }\n}\n"],"mappings":""}
@@ -0,0 +1,84 @@
1
+ "use client";
2
+ import { cx } from "./index3.js";
3
+ import modal_module_default from "./index12.js";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import * as DialogPrimitive from "@radix-ui/react-dialog";
6
+ //#region src/components/modal/Modal.tsx
7
+ function ModalOverlay({ open, onClose, className, children }) {
8
+ return /* @__PURE__ */ jsx(DialogPrimitive.Root, {
9
+ open,
10
+ onOpenChange: (nextOpen) => {
11
+ if (!nextOpen) onClose();
12
+ },
13
+ children: /* @__PURE__ */ jsx(DialogPrimitive.Portal, { children: /* @__PURE__ */ jsxs("div", {
14
+ className: modal_module_default.portalLayer,
15
+ children: [/* @__PURE__ */ jsx(DialogPrimitive.Overlay, { className: cx(modal_module_default.backdrop, className) }), /* @__PURE__ */ jsx(DialogPrimitive.Content, {
16
+ className: modal_module_default.overlayContent,
17
+ children
18
+ })]
19
+ }) })
20
+ });
21
+ }
22
+ function Modal({ open, onClose, title, subtitle, size = "md", children, footer }) {
23
+ return /* @__PURE__ */ jsx(ModalOverlay, {
24
+ open,
25
+ onClose,
26
+ children: /* @__PURE__ */ jsxs("div", {
27
+ className: cx(modal_module_default.modal, modal_module_default[`size-${size}`]),
28
+ children: [
29
+ /* @__PURE__ */ jsxs("div", {
30
+ className: modal_module_default.header,
31
+ children: [/* @__PURE__ */ jsxs("div", {
32
+ className: modal_module_default.titles,
33
+ children: [/* @__PURE__ */ jsx(DialogPrimitive.Title, {
34
+ className: modal_module_default.title,
35
+ children: title
36
+ }), subtitle ? /* @__PURE__ */ jsx(DialogPrimitive.Description, {
37
+ className: modal_module_default.subtitle,
38
+ children: subtitle
39
+ }) : null]
40
+ }), /* @__PURE__ */ jsx(DialogPrimitive.Close, {
41
+ asChild: true,
42
+ children: /* @__PURE__ */ jsx("button", {
43
+ className: modal_module_default.closeButton,
44
+ "aria-label": "Close",
45
+ children: /* @__PURE__ */ jsxs("svg", {
46
+ width: "14",
47
+ height: "14",
48
+ viewBox: "0 0 24 24",
49
+ fill: "none",
50
+ stroke: "currentColor",
51
+ strokeWidth: "2.5",
52
+ strokeLinecap: "round",
53
+ strokeLinejoin: "round",
54
+ children: [/* @__PURE__ */ jsx("line", {
55
+ x1: "18",
56
+ y1: "6",
57
+ x2: "6",
58
+ y2: "18"
59
+ }), /* @__PURE__ */ jsx("line", {
60
+ x1: "6",
61
+ y1: "6",
62
+ x2: "18",
63
+ y2: "18"
64
+ })]
65
+ })
66
+ })
67
+ })]
68
+ }),
69
+ /* @__PURE__ */ jsx("div", {
70
+ className: modal_module_default.body,
71
+ children
72
+ }),
73
+ footer && /* @__PURE__ */ jsx("div", {
74
+ className: modal_module_default.footer,
75
+ children: footer
76
+ })
77
+ ]
78
+ })
79
+ });
80
+ }
81
+ //#endregion
82
+ export { Modal, ModalOverlay };
83
+
84
+ //# sourceMappingURL=index13.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index13.js","names":[],"sources":["../src/components/modal/Modal.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { cx } from \"../../utils/cx\";\nimport styles from \"./modal.module.css\";\n\n// ── ModalOverlay ─────────────────────────────────────────────────────────────\n// Bare backdrop + container. No opinions on layout inside.\n// Use this when you need a full-custom layout (e.g. wide media modals).\n\nexport type ModalOverlayProps = {\n open: boolean;\n onClose: () => void;\n /** Extra class applied to the backdrop */\n className?: string;\n children: ReactNode;\n};\n\nexport function ModalOverlay({ open, onClose, className, children }: ModalOverlayProps) {\n return (\n <DialogPrimitive.Root\n open={open}\n onOpenChange={(nextOpen: boolean) => {\n if (!nextOpen) onClose();\n }}\n >\n <DialogPrimitive.Portal>\n <div className={styles.portalLayer}>\n <DialogPrimitive.Overlay className={cx(styles.backdrop, className)} />\n <DialogPrimitive.Content className={styles.overlayContent}>\n {children}\n </DialogPrimitive.Content>\n </div>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n}\n\n// ── Modal ─────────────────────────────────────────────────────────────────────\n// Opinionated dialog: header (title + close button), scrollable body, footer.\n\nexport type ModalSize = \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport type ModalProps = {\n open: boolean;\n onClose: () => void;\n title: string;\n subtitle?: string;\n size?: ModalSize;\n children: ReactNode;\n footer?: ReactNode;\n};\n\nexport function Modal({ open, onClose, title, subtitle, size = \"md\", children, footer }: ModalProps) {\n return (\n <ModalOverlay open={open} onClose={onClose}>\n <div className={cx(styles.modal, styles[`size-${size}`])}>\n <div className={styles.header}>\n <div className={styles.titles}>\n <DialogPrimitive.Title className={styles.title}>{title}</DialogPrimitive.Title>\n {subtitle ? (\n <DialogPrimitive.Description className={styles.subtitle}>\n {subtitle}\n </DialogPrimitive.Description>\n ) : null}\n </div>\n <DialogPrimitive.Close asChild>\n <button className={styles.closeButton} aria-label=\"Close\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </DialogPrimitive.Close>\n </div>\n\n <div className={styles.body}>{children}</div>\n\n {footer && <div className={styles.footer}>{footer}</div>}\n </div>\n </ModalOverlay>\n );\n}\n"],"mappings":";;;;;;AAmBA,SAAgB,aAAa,EAAE,MAAM,SAAS,WAAW,YAA+B;CACtF,OACE,oBAAC,gBAAgB,MAAjB;EACQ;EACN,eAAe,aAAsB;GACnC,IAAI,CAAC,UAAU,QAAQ;EACzB;YAEA,oBAAC,gBAAgB,QAAjB,EAAA,UACE,qBAAC,OAAD;GAAK,WAAW,qBAAO;aAAvB,CACE,oBAAC,gBAAgB,SAAjB,EAAyB,WAAW,GAAG,qBAAO,UAAU,SAAS,EAAI,CAAA,GACrE,oBAAC,gBAAgB,SAAjB;IAAyB,WAAW,qBAAO;IACxC;GACsB,CAAA,CACtB;KACiB,CAAA;CACJ,CAAA;AAE1B;AAiBA,SAAgB,MAAM,EAAE,MAAM,SAAS,OAAO,UAAU,OAAO,MAAM,UAAU,UAAsB;CACnG,OACE,oBAAC,cAAD;EAAoB;EAAe;YACjC,qBAAC,OAAD;GAAK,WAAW,GAAG,qBAAO,OAAO,qBAAO,QAAQ,OAAO;aAAvD;IACE,qBAAC,OAAD;KAAK,WAAW,qBAAO;eAAvB,CACE,qBAAC,OAAD;MAAK,WAAW,qBAAO;gBAAvB,CACE,oBAAC,gBAAgB,OAAjB;OAAuB,WAAW,qBAAO;iBAAQ;MAA6B,CAAA,GAC7E,WACC,oBAAC,gBAAgB,aAAjB;OAA6B,WAAW,qBAAO;iBAC5C;MAC0B,CAAA,IAC3B,IACD;SACL,oBAAC,gBAAgB,OAAjB;MAAuB,SAAA;gBACrB,oBAAC,UAAD;OAAQ,WAAW,qBAAO;OAAa,cAAW;iBAChD,qBAAC,OAAD;QAAK,OAAM;QAAK,QAAO;QAAK,SAAQ;QAAY,MAAK;QAAO,QAAO;QAAe,aAAY;QAAM,eAAc;QAAQ,gBAAe;kBAAzI,CACE,oBAAC,QAAD;SAAM,IAAG;SAAK,IAAG;SAAI,IAAG;SAAI,IAAG;QAAM,CAAA,GACrC,oBAAC,QAAD;SAAM,IAAG;SAAI,IAAG;SAAI,IAAG;SAAK,IAAG;QAAM,CAAA,CAClC;;MACC,CAAA;KACa,CAAA,CACpB;;IAEL,oBAAC,OAAD;KAAK,WAAW,qBAAO;KAAO;IAAc,CAAA;IAE3C,UAAU,oBAAC,OAAD;KAAK,WAAW,qBAAO;eAAS;IAAY,CAAA;GACpD;;CACO,CAAA;AAElB"}
@@ -0,0 +1,87 @@
1
+ "use client";
2
+ const require_runtime = require("./index2.cjs");
3
+ const require_cx = require("./index4.cjs");
4
+ const require_modal_module = require("./index13.cjs");
5
+ let react_jsx_runtime = require("react/jsx-runtime");
6
+ let _radix_ui_react_dialog = require("@radix-ui/react-dialog");
7
+ _radix_ui_react_dialog = require_runtime.__toESM(_radix_ui_react_dialog, 1);
8
+ //#region src/components/modal/Modal.tsx
9
+ function ModalOverlay({ open, onClose, className, children }) {
10
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dialog.Root, {
11
+ open,
12
+ onOpenChange: (nextOpen) => {
13
+ if (!nextOpen) onClose();
14
+ },
15
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dialog.Portal, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
16
+ className: require_modal_module.default.portalLayer,
17
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dialog.Overlay, { className: require_cx.cx(require_modal_module.default.backdrop, className) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dialog.Content, {
18
+ className: require_modal_module.default.overlayContent,
19
+ children
20
+ })]
21
+ }) })
22
+ });
23
+ }
24
+ function Modal({ open, onClose, title, subtitle, size = "md", children, footer }) {
25
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ModalOverlay, {
26
+ open,
27
+ onClose,
28
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
29
+ className: require_cx.cx(require_modal_module.default.modal, require_modal_module.default[`size-${size}`]),
30
+ children: [
31
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
32
+ className: require_modal_module.default.header,
33
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
34
+ className: require_modal_module.default.titles,
35
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dialog.Title, {
36
+ className: require_modal_module.default.title,
37
+ children: title
38
+ }), subtitle ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dialog.Description, {
39
+ className: require_modal_module.default.subtitle,
40
+ children: subtitle
41
+ }) : null]
42
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dialog.Close, {
43
+ asChild: true,
44
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
45
+ className: require_modal_module.default.closeButton,
46
+ "aria-label": "Close",
47
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
48
+ width: "14",
49
+ height: "14",
50
+ viewBox: "0 0 24 24",
51
+ fill: "none",
52
+ stroke: "currentColor",
53
+ strokeWidth: "2.5",
54
+ strokeLinecap: "round",
55
+ strokeLinejoin: "round",
56
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("line", {
57
+ x1: "18",
58
+ y1: "6",
59
+ x2: "6",
60
+ y2: "18"
61
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("line", {
62
+ x1: "6",
63
+ y1: "6",
64
+ x2: "18",
65
+ y2: "18"
66
+ })]
67
+ })
68
+ })
69
+ })]
70
+ }),
71
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
72
+ className: require_modal_module.default.body,
73
+ children
74
+ }),
75
+ footer && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
76
+ className: require_modal_module.default.footer,
77
+ children: footer
78
+ })
79
+ ]
80
+ })
81
+ });
82
+ }
83
+ //#endregion
84
+ exports.Modal = Modal;
85
+ exports.ModalOverlay = ModalOverlay;
86
+
87
+ //# sourceMappingURL=index14.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index14.cjs","names":[],"sources":["../src/components/modal/Modal.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { cx } from \"../../utils/cx\";\nimport styles from \"./modal.module.css\";\n\n// ── ModalOverlay ─────────────────────────────────────────────────────────────\n// Bare backdrop + container. No opinions on layout inside.\n// Use this when you need a full-custom layout (e.g. wide media modals).\n\nexport type ModalOverlayProps = {\n open: boolean;\n onClose: () => void;\n /** Extra class applied to the backdrop */\n className?: string;\n children: ReactNode;\n};\n\nexport function ModalOverlay({ open, onClose, className, children }: ModalOverlayProps) {\n return (\n <DialogPrimitive.Root\n open={open}\n onOpenChange={(nextOpen: boolean) => {\n if (!nextOpen) onClose();\n }}\n >\n <DialogPrimitive.Portal>\n <div className={styles.portalLayer}>\n <DialogPrimitive.Overlay className={cx(styles.backdrop, className)} />\n <DialogPrimitive.Content className={styles.overlayContent}>\n {children}\n </DialogPrimitive.Content>\n </div>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n}\n\n// ── Modal ─────────────────────────────────────────────────────────────────────\n// Opinionated dialog: header (title + close button), scrollable body, footer.\n\nexport type ModalSize = \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport type ModalProps = {\n open: boolean;\n onClose: () => void;\n title: string;\n subtitle?: string;\n size?: ModalSize;\n children: ReactNode;\n footer?: ReactNode;\n};\n\nexport function Modal({ open, onClose, title, subtitle, size = \"md\", children, footer }: ModalProps) {\n return (\n <ModalOverlay open={open} onClose={onClose}>\n <div className={cx(styles.modal, styles[`size-${size}`])}>\n <div className={styles.header}>\n <div className={styles.titles}>\n <DialogPrimitive.Title className={styles.title}>{title}</DialogPrimitive.Title>\n {subtitle ? (\n <DialogPrimitive.Description className={styles.subtitle}>\n {subtitle}\n </DialogPrimitive.Description>\n ) : null}\n </div>\n <DialogPrimitive.Close asChild>\n <button className={styles.closeButton} aria-label=\"Close\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </DialogPrimitive.Close>\n </div>\n\n <div className={styles.body}>{children}</div>\n\n {footer && <div className={styles.footer}>{footer}</div>}\n </div>\n </ModalOverlay>\n );\n}\n"],"mappings":";;;;;;;;AAmBA,SAAgB,aAAa,EAAE,MAAM,SAAS,WAAW,YAA+B;CACtF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,uBAAgB,MAAjB;EACQ;EACN,eAAe,aAAsB;GACnC,IAAI,CAAC,UAAU,QAAQ;EACzB;YAEA,iBAAA,GAAA,kBAAA,IAAA,CAAC,uBAAgB,QAAjB,EAAA,UACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAW,qBAAA,QAAO;aAAvB,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,uBAAgB,SAAjB,EAAyB,WAAW,WAAA,GAAG,qBAAA,QAAO,UAAU,SAAS,EAAI,CAAA,GACrE,iBAAA,GAAA,kBAAA,IAAA,CAAC,uBAAgB,SAAjB;IAAyB,WAAW,qBAAA,QAAO;IACxC;GACsB,CAAA,CACtB;KACiB,CAAA;CACJ,CAAA;AAE1B;AAiBA,SAAgB,MAAM,EAAE,MAAM,SAAS,OAAO,UAAU,OAAO,MAAM,UAAU,UAAsB;CACnG,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;EAAoB;EAAe;YACjC,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAW,WAAA,GAAG,qBAAA,QAAO,OAAO,qBAAA,QAAO,QAAQ,OAAO;aAAvD;IACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;KAAK,WAAW,qBAAA,QAAO;eAAvB,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAW,qBAAA,QAAO;gBAAvB,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,uBAAgB,OAAjB;OAAuB,WAAW,qBAAA,QAAO;iBAAQ;MAA6B,CAAA,GAC7E,WACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,uBAAgB,aAAjB;OAA6B,WAAW,qBAAA,QAAO;iBAC5C;MAC0B,CAAA,IAC3B,IACD;SACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,uBAAgB,OAAjB;MAAuB,SAAA;gBACrB,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;OAAQ,WAAW,qBAAA,QAAO;OAAa,cAAW;iBAChD,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;QAAK,OAAM;QAAK,QAAO;QAAK,SAAQ;QAAY,MAAK;QAAO,QAAO;QAAe,aAAY;QAAM,eAAc;QAAQ,gBAAe;kBAAzI,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;SAAM,IAAG;SAAK,IAAG;SAAI,IAAG;SAAI,IAAG;QAAM,CAAA,GACrC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;SAAM,IAAG;SAAI,IAAG;SAAI,IAAG;SAAK,IAAG;QAAM,CAAA,CAClC;;MACC,CAAA;KACa,CAAA,CACpB;;IAEL,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAW,qBAAA,QAAO;KAAO;IAAc,CAAA;IAE3C,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAW,qBAAA,QAAO;eAAS;IAAY,CAAA;GACpD;;CACO,CAAA;AAElB"}
@@ -0,0 +1,17 @@
1
+ //#region src/components/alert/alert.module.css
2
+ var alert = "uzi-alert-module__alert__7Bt6c";
3
+ var success = "uzi-alert-module__success__apdFG";
4
+ var error = "uzi-alert-module__error__KLgi1";
5
+ var warning = "uzi-alert-module__warning__F4fpk";
6
+ var info = "uzi-alert-module__info__1IKHt";
7
+ var alert_module_default = {
8
+ alert,
9
+ success,
10
+ error,
11
+ warning,
12
+ info
13
+ };
14
+ //#endregion
15
+ export { alert, alert_module_default as default, error, info, success, warning };
16
+
17
+ //# sourceMappingURL=index14.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index14.js","names":[],"sources":["../src/components/alert/alert.module.css"],"sourcesContent":[".alert {\n display: flex;\n align-items: flex-start;\n gap: 0.5rem;\n border-radius: 0.375rem;\n border: 1px solid;\n padding: 0.625rem 0.875rem;\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.success {\n border-color: color-mix(in srgb, var(--success) 35%, transparent);\n background: color-mix(in srgb, var(--success) 10%, transparent);\n color: color-mix(in srgb, var(--success) 90%, var(--foreground));\n}\n\n.error {\n border-color: color-mix(in srgb, var(--destructive) 35%, transparent);\n background: color-mix(in srgb, var(--destructive) 10%, transparent);\n color: color-mix(in srgb, var(--destructive) 90%, var(--foreground));\n}\n\n.warning {\n border-color: color-mix(in srgb, var(--warning) 35%, transparent);\n background: color-mix(in srgb, var(--warning) 10%, transparent);\n color: color-mix(in srgb, var(--warning) 90%, var(--foreground));\n}\n\n.info {\n border-color: color-mix(in srgb, var(--primary) 35%, transparent);\n background: color-mix(in srgb, var(--primary) 10%, transparent);\n color: color-mix(in srgb, var(--primary) 90%, var(--foreground));\n}\n"],"mappings":""}
@@ -0,0 +1,22 @@
1
+ //#region src/components/alert/alert.module.css
2
+ var alert = "uzi-alert-module__alert__7Bt6c";
3
+ var success = "uzi-alert-module__success__apdFG";
4
+ var error = "uzi-alert-module__error__KLgi1";
5
+ var warning = "uzi-alert-module__warning__F4fpk";
6
+ var info = "uzi-alert-module__info__1IKHt";
7
+ var alert_module_default = {
8
+ alert,
9
+ success,
10
+ error,
11
+ warning,
12
+ info
13
+ };
14
+ //#endregion
15
+ exports.alert = alert;
16
+ exports.default = alert_module_default;
17
+ exports.error = error;
18
+ exports.info = info;
19
+ exports.success = success;
20
+ exports.warning = warning;
21
+
22
+ //# sourceMappingURL=index15.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index15.cjs","names":[],"sources":["../src/components/alert/alert.module.css"],"sourcesContent":[".alert {\n display: flex;\n align-items: flex-start;\n gap: 0.5rem;\n border-radius: 0.375rem;\n border: 1px solid;\n padding: 0.625rem 0.875rem;\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.success {\n border-color: color-mix(in srgb, var(--success) 35%, transparent);\n background: color-mix(in srgb, var(--success) 10%, transparent);\n color: color-mix(in srgb, var(--success) 90%, var(--foreground));\n}\n\n.error {\n border-color: color-mix(in srgb, var(--destructive) 35%, transparent);\n background: color-mix(in srgb, var(--destructive) 10%, transparent);\n color: color-mix(in srgb, var(--destructive) 90%, var(--foreground));\n}\n\n.warning {\n border-color: color-mix(in srgb, var(--warning) 35%, transparent);\n background: color-mix(in srgb, var(--warning) 10%, transparent);\n color: color-mix(in srgb, var(--warning) 90%, var(--foreground));\n}\n\n.info {\n border-color: color-mix(in srgb, var(--primary) 35%, transparent);\n background: color-mix(in srgb, var(--primary) 10%, transparent);\n color: color-mix(in srgb, var(--primary) 90%, var(--foreground));\n}\n"],"mappings":""}
@@ -0,0 +1,16 @@
1
+ "use client";
2
+ import { cx } from "./index3.js";
3
+ import alert_module_default from "./index14.js";
4
+ import { jsx } from "react/jsx-runtime";
5
+ //#region src/components/alert/Alert.tsx
6
+ function Alert({ tone, children, className }) {
7
+ return /* @__PURE__ */ jsx("div", {
8
+ className: cx(alert_module_default.alert, alert_module_default[tone], className),
9
+ role: "alert",
10
+ children
11
+ });
12
+ }
13
+ //#endregion
14
+ export { Alert };
15
+
16
+ //# sourceMappingURL=index15.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index15.js","names":[],"sources":["../src/components/alert/Alert.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { cx } from \"../../utils/cx\";\nimport styles from \"./alert.module.css\";\n\nexport type AlertTone = \"success\" | \"error\" | \"warning\" | \"info\";\n\nexport type AlertProps = {\n tone: AlertTone;\n children: ReactNode;\n className?: string;\n};\n\nexport function Alert({ tone, children, className }: AlertProps) {\n return (\n <div className={cx(styles.alert, styles[tone], className)} role=\"alert\">\n {children}\n </div>\n );\n}\n"],"mappings":";;;;;AAcA,SAAgB,MAAM,EAAE,MAAM,UAAU,aAAyB;CAC/D,OACE,oBAAC,OAAD;EAAK,WAAW,GAAG,qBAAO,OAAO,qBAAO,OAAO,SAAS;EAAG,MAAK;EAC7D;CACE,CAAA;AAET"}
@@ -0,0 +1,16 @@
1
+ "use client";
2
+ const require_cx = require("./index4.cjs");
3
+ const require_alert_module = require("./index15.cjs");
4
+ let react_jsx_runtime = require("react/jsx-runtime");
5
+ //#region src/components/alert/Alert.tsx
6
+ function Alert({ tone, children, className }) {
7
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
8
+ className: require_cx.cx(require_alert_module.default.alert, require_alert_module.default[tone], className),
9
+ role: "alert",
10
+ children
11
+ });
12
+ }
13
+ //#endregion
14
+ exports.Alert = Alert;
15
+
16
+ //# sourceMappingURL=index16.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index16.cjs","names":[],"sources":["../src/components/alert/Alert.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { cx } from \"../../utils/cx\";\nimport styles from \"./alert.module.css\";\n\nexport type AlertTone = \"success\" | \"error\" | \"warning\" | \"info\";\n\nexport type AlertProps = {\n tone: AlertTone;\n children: ReactNode;\n className?: string;\n};\n\nexport function Alert({ tone, children, className }: AlertProps) {\n return (\n <div className={cx(styles.alert, styles[tone], className)} role=\"alert\">\n {children}\n </div>\n );\n}\n"],"mappings":";;;;;AAcA,SAAgB,MAAM,EAAE,MAAM,UAAU,aAAyB;CAC/D,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAW,WAAA,GAAG,qBAAA,QAAO,OAAO,qBAAA,QAAO,OAAO,SAAS;EAAG,MAAK;EAC7D;CACE,CAAA;AAET"}
@@ -0,0 +1,45 @@
1
+ //#region src/components/toast/toast.module.css
2
+ var stack = "uzi-toast-module__stack__SRrda";
3
+ var topRight = "uzi-toast-module__topRight__WiZzM";
4
+ var topLeft = "uzi-toast-module__topLeft__SzFS9";
5
+ var topCenter = "uzi-toast-module__topCenter__X5W-x";
6
+ var bottomRight = "uzi-toast-module__bottomRight__DMtoS";
7
+ var bottomLeft = "uzi-toast-module__bottomLeft__ZZ7VF";
8
+ var bottomCenter = "uzi-toast-module__bottomCenter__QNJrM";
9
+ var toast = "uzi-toast-module__toast__HNUcj";
10
+ var toastSlideIn = "uzi-toast-module__toastSlideIn__BTXfm";
11
+ var toastSlideOut = "uzi-toast-module__toastSlideOut__mBX-G";
12
+ var toastSwipeOut = "uzi-toast-module__toastSwipeOut__R-jk2";
13
+ var icon = "uzi-toast-module__icon__LIAqr";
14
+ var body = "uzi-toast-module__body__9vzs7";
15
+ var message = "uzi-toast-module__message__TBY65";
16
+ var actions = "uzi-toast-module__actions__Iykd9";
17
+ var actionButton = "uzi-toast-module__actionButton__cvUr0";
18
+ var controls = "uzi-toast-module__controls__LqA4Q";
19
+ var iconButton = "uzi-toast-module__iconButton__FOsOp";
20
+ var iconButtonError = "uzi-toast-module__iconButtonError__NJsLX";
21
+ var toast_module_default = {
22
+ stack,
23
+ topRight,
24
+ topLeft,
25
+ topCenter,
26
+ bottomRight,
27
+ bottomLeft,
28
+ bottomCenter,
29
+ toast,
30
+ toastSlideIn,
31
+ toastSlideOut,
32
+ toastSwipeOut,
33
+ icon,
34
+ body,
35
+ message,
36
+ actions,
37
+ actionButton,
38
+ controls,
39
+ iconButton,
40
+ iconButtonError
41
+ };
42
+ //#endregion
43
+ export { actionButton, actions, body, bottomCenter, bottomLeft, bottomRight, controls, toast_module_default as default, icon, iconButton, iconButtonError, message, stack, toast, toastSlideIn, toastSlideOut, toastSwipeOut, topCenter, topLeft, topRight };
44
+
45
+ //# sourceMappingURL=index16.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index16.js","names":[],"sources":["../src/components/toast/toast.module.css"],"sourcesContent":[".stack {\n position: fixed;\n z-index: 2147483000;\n display: flex;\n flex-direction: column;\n gap: 10px;\n pointer-events: none;\n}\n\n.topRight {\n top: 16px;\n right: 16px;\n align-items: flex-end;\n}\n\n.topLeft {\n top: 16px;\n left: 16px;\n align-items: flex-start;\n}\n\n.topCenter {\n top: 16px;\n left: 50%;\n transform: translateX(-50%);\n align-items: center;\n}\n\n.bottomRight {\n bottom: 16px;\n right: 16px;\n align-items: flex-end;\n}\n\n.bottomLeft {\n bottom: 16px;\n left: 16px;\n align-items: flex-start;\n}\n\n.bottomCenter {\n bottom: 16px;\n left: 50%;\n transform: translateX(-50%);\n align-items: center;\n}\n\n.toast {\n pointer-events: auto;\n position: relative;\n display: flex;\n align-items: flex-start;\n gap: 10px;\n min-width: 280px;\n max-width: min(420px, calc(100vw - 32px));\n padding: 12px 12px 12px 14px;\n border-radius: 10px;\n border: 1px solid var(--toast-border, var(--border));\n background: var(--toast-bg, var(--popover));\n color: var(--toast-text, var(--popover-foreground));\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.10), 0 2px 6px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n animation: toastSlideIn 180ms ease-out;\n}\n\n/* Left accent strip */\n.toast::before {\n content: \"\";\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 3px;\n background: var(--toast-accent, transparent);\n border-radius: 10px 0 0 10px;\n}\n\n.toast[data-state=\"closed\"] {\n animation: toastSlideOut 160ms ease-in forwards;\n}\n\n.toast[data-swipe=\"move\"] {\n transform: translateX(var(--radix-toast-swipe-move-x));\n}\n\n.toast[data-swipe=\"cancel\"] {\n transform: translateX(0);\n transition: transform 180ms ease-out;\n}\n\n.toast[data-swipe=\"end\"] {\n animation: toastSwipeOut 160ms ease-out forwards;\n}\n\n.icon {\n width: 18px;\n height: 18px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--toast-accent, var(--foreground));\n margin-top: 1px;\n}\n\n.body {\n flex: 1;\n min-width: 0;\n display: grid;\n gap: 6px;\n}\n\n.message {\n word-break: break-word;\n font-size: 14px;\n line-height: 1.4;\n}\n\n.actions {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.actionButton {\n padding: 5px 10px;\n font-size: 12px;\n font-weight: 600;\n border-radius: 6px;\n border: 1px solid var(--toast-action-border, var(--border));\n background: var(--toast-action-bg, color-mix(in srgb, var(--foreground) 8%, transparent));\n color: var(--toast-text, var(--popover-foreground));\n cursor: pointer;\n transition: background 120ms ease;\n}\n\n.actionButton:hover {\n background: color-mix(in srgb, var(--toast-action-bg, var(--foreground)), var(--foreground) 10%);\n}\n\n.controls {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n gap: 2px;\n margin: -2px -2px -2px 0;\n}\n\n.iconButton {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n padding: 0;\n border: none;\n border-radius: 5px;\n background: transparent;\n color: var(--toast-text, var(--popover-foreground));\n opacity: 0.5;\n cursor: pointer;\n transition: opacity 120ms ease, background 120ms ease;\n}\n\n.iconButton:hover {\n opacity: 1;\n background: color-mix(in srgb, var(--foreground) 8%, transparent);\n}\n\n.iconButtonError {\n opacity: 1;\n color: var(--destructive);\n}\n\n.iconButton:focus-visible,\n.actionButton:focus-visible {\n outline: var(--focus-ring);\n outline-offset: var(--focus-ring-offset);\n}\n\n@keyframes toastSlideIn {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes toastSlideOut {\n from {\n opacity: 1;\n transform: translateY(0);\n }\n to {\n opacity: 0;\n transform: translateY(-6px);\n }\n}\n\n@keyframes toastSwipeOut {\n from {\n opacity: 1;\n transform: translateX(var(--radix-toast-swipe-end-x));\n }\n\n to {\n opacity: 0;\n transform: translateX(calc(var(--radix-toast-swipe-end-x) * 1.05));\n }\n}\n"],"mappings":""}