@tomny-dev/uzi 0.2.5 → 0.2.6-pr.22.68.1.a53abf5

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 (209) hide show
  1. package/dist/components/auth-card/AuthCard.d.ts +24 -0
  2. package/dist/components/auth-card/AuthCard.d.ts.map +1 -0
  3. package/dist/components/auth-card/AuthCard.test.d.ts +2 -0
  4. package/dist/components/auth-card/AuthCard.test.d.ts.map +1 -0
  5. package/dist/components/auth-pages/AuthPages.d.ts +58 -0
  6. package/dist/components/auth-pages/AuthPages.d.ts.map +1 -0
  7. package/dist/components/auth-pages/AuthPages.test.d.ts +2 -0
  8. package/dist/components/auth-pages/AuthPages.test.d.ts.map +1 -0
  9. package/dist/index.cjs +71 -1925
  10. package/dist/index.d.ts +4 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +27 -1858
  13. package/dist/index10.cjs +26 -0
  14. package/dist/index10.cjs.map +1 -0
  15. package/dist/index10.js +19 -0
  16. package/dist/index10.js.map +1 -0
  17. package/dist/index11.cjs +22 -0
  18. package/dist/index11.cjs.map +1 -0
  19. package/dist/index11.js +22 -0
  20. package/dist/index11.js.map +1 -0
  21. package/dist/index12.cjs +22 -0
  22. package/dist/index12.cjs.map +1 -0
  23. package/dist/index12.js +41 -0
  24. package/dist/index12.js.map +1 -0
  25. package/dist/index13.cjs +56 -0
  26. package/dist/index13.cjs.map +1 -0
  27. package/dist/index13.js +84 -0
  28. package/dist/index13.js.map +1 -0
  29. package/dist/index14.cjs +87 -0
  30. package/dist/index14.cjs.map +1 -0
  31. package/dist/index14.js +17 -0
  32. package/dist/index14.js.map +1 -0
  33. package/dist/index15.cjs +22 -0
  34. package/dist/index15.cjs.map +1 -0
  35. package/dist/index15.js +16 -0
  36. package/dist/index15.js.map +1 -0
  37. package/dist/index16.cjs +16 -0
  38. package/dist/index16.cjs.map +1 -0
  39. package/dist/index16.js +45 -0
  40. package/dist/index16.js.map +1 -0
  41. package/dist/index17.cjs +64 -0
  42. package/dist/index17.cjs.map +1 -0
  43. package/dist/index17.js +435 -0
  44. package/dist/index17.js.map +1 -0
  45. package/dist/index18.cjs +438 -0
  46. package/dist/index18.cjs.map +1 -0
  47. package/dist/index18.js +7 -0
  48. package/dist/index18.js.map +1 -0
  49. package/dist/index19.cjs +8 -0
  50. package/dist/index19.cjs.map +1 -0
  51. package/dist/index19.js +18 -0
  52. package/dist/index19.js.map +1 -0
  53. package/dist/index2.cjs +23 -0
  54. package/dist/index20.cjs +20 -0
  55. package/dist/index20.cjs.map +1 -0
  56. package/dist/index20.js +7 -0
  57. package/dist/index20.js.map +1 -0
  58. package/dist/index21.cjs +8 -0
  59. package/dist/index21.cjs.map +1 -0
  60. package/dist/index21.js +15 -0
  61. package/dist/index21.js.map +1 -0
  62. package/dist/index22.cjs +17 -0
  63. package/dist/index22.cjs.map +1 -0
  64. package/dist/index22.js +7 -0
  65. package/dist/index22.js.map +1 -0
  66. package/dist/index23.cjs +8 -0
  67. package/dist/index23.cjs.map +1 -0
  68. package/dist/index23.js +18 -0
  69. package/dist/index23.js.map +1 -0
  70. package/dist/index24.cjs +20 -0
  71. package/dist/index24.cjs.map +1 -0
  72. package/dist/index24.js +41 -0
  73. package/dist/index24.js.map +1 -0
  74. package/dist/index25.cjs +58 -0
  75. package/dist/index25.cjs.map +1 -0
  76. package/dist/index25.js +123 -0
  77. package/dist/index25.js.map +1 -0
  78. package/dist/index26.cjs +126 -0
  79. package/dist/index26.cjs.map +1 -0
  80. package/dist/index26.js +29 -0
  81. package/dist/index26.js.map +1 -0
  82. package/dist/index27.cjs +40 -0
  83. package/dist/index27.cjs.map +1 -0
  84. package/dist/index27.js +110 -0
  85. package/dist/index27.js.map +1 -0
  86. package/dist/index28.cjs +113 -0
  87. package/dist/index28.cjs.map +1 -0
  88. package/dist/index28.js +26 -0
  89. package/dist/index28.js.map +1 -0
  90. package/dist/index29.cjs +28 -0
  91. package/dist/index29.cjs.map +1 -0
  92. package/dist/index29.js +29 -0
  93. package/dist/index29.js.map +1 -0
  94. package/dist/index3.js +8 -0
  95. package/dist/index3.js.map +1 -0
  96. package/dist/index30.cjs +40 -0
  97. package/dist/index30.cjs.map +1 -0
  98. package/dist/index30.js +118 -0
  99. package/dist/index30.js.map +1 -0
  100. package/dist/index31.cjs +134 -0
  101. package/dist/index31.cjs.map +1 -0
  102. package/dist/index31.js +20 -0
  103. package/dist/index31.js.map +1 -0
  104. package/dist/index32.cjs +23 -0
  105. package/dist/index32.cjs.map +1 -0
  106. package/dist/index32.js +114 -0
  107. package/dist/index32.js.map +1 -0
  108. package/dist/index33.cjs +115 -0
  109. package/dist/index33.cjs.map +1 -0
  110. package/dist/index33.js +7 -0
  111. package/dist/index33.js.map +1 -0
  112. package/dist/index34.cjs +8 -0
  113. package/dist/index34.cjs.map +1 -0
  114. package/dist/index34.js +66 -0
  115. package/dist/index34.js.map +1 -0
  116. package/dist/index35.cjs +66 -0
  117. package/dist/index35.cjs.map +1 -0
  118. package/dist/index35.js +25 -0
  119. package/dist/index35.js.map +1 -0
  120. package/dist/index36.cjs +34 -0
  121. package/dist/index36.cjs.map +1 -0
  122. package/dist/index36.js +55 -0
  123. package/dist/index36.js.map +1 -0
  124. package/dist/index37.cjs +55 -0
  125. package/dist/index37.cjs.map +1 -0
  126. package/dist/index37.js +35 -0
  127. package/dist/index37.js.map +1 -0
  128. package/dist/index38.cjs +49 -0
  129. package/dist/index38.cjs.map +1 -0
  130. package/dist/index38.js +150 -0
  131. package/dist/index38.js.map +1 -0
  132. package/dist/index39.cjs +150 -0
  133. package/dist/index39.cjs.map +1 -0
  134. package/dist/index39.js +43 -0
  135. package/dist/index39.js.map +1 -0
  136. package/dist/index4.cjs +8 -0
  137. package/dist/index4.cjs.map +1 -0
  138. package/dist/index4.js +29 -0
  139. package/dist/index4.js.map +1 -0
  140. package/dist/index40.cjs +61 -0
  141. package/dist/index40.cjs.map +1 -0
  142. package/dist/index40.js +173 -0
  143. package/dist/index40.js.map +1 -0
  144. package/dist/index41.cjs +173 -0
  145. package/dist/index41.cjs.map +1 -0
  146. package/dist/index41.js +14 -0
  147. package/dist/index41.js.map +1 -0
  148. package/dist/index42.cjs +15 -0
  149. package/dist/index42.cjs.map +1 -0
  150. package/dist/index42.js +21 -0
  151. package/dist/index42.js.map +1 -0
  152. package/dist/index43.cjs +21 -0
  153. package/dist/index43.cjs.map +1 -0
  154. package/dist/index43.js +15 -0
  155. package/dist/index43.js.map +1 -0
  156. package/dist/index44.cjs +17 -0
  157. package/dist/index44.cjs.map +1 -0
  158. package/dist/index44.js +24 -0
  159. package/dist/index44.js.map +1 -0
  160. package/dist/index45.cjs +24 -0
  161. package/dist/index45.cjs.map +1 -0
  162. package/dist/index45.js +13 -0
  163. package/dist/index45.js.map +1 -0
  164. package/dist/index46.cjs +16 -0
  165. package/dist/index46.cjs.map +1 -0
  166. package/dist/index46.js +96 -0
  167. package/dist/index46.js.map +1 -0
  168. package/dist/index47.cjs +98 -0
  169. package/dist/index47.cjs.map +1 -0
  170. package/dist/index47.js +25 -0
  171. package/dist/index47.js.map +1 -0
  172. package/dist/index48.cjs +34 -0
  173. package/dist/index48.cjs.map +1 -0
  174. package/dist/index48.js +50 -0
  175. package/dist/index48.js.map +1 -0
  176. package/dist/index49.cjs +52 -0
  177. package/dist/index49.cjs.map +1 -0
  178. package/dist/index49.js +61 -0
  179. package/dist/index49.js.map +1 -0
  180. package/dist/index5.cjs +40 -0
  181. package/dist/index5.cjs.map +1 -0
  182. package/dist/index5.js +45 -0
  183. package/dist/index5.js.map +1 -0
  184. package/dist/index50.cjs +88 -0
  185. package/dist/index50.cjs.map +1 -0
  186. package/dist/index50.js +436 -0
  187. package/dist/index50.js.map +1 -0
  188. package/dist/index51.cjs +440 -0
  189. package/dist/index51.cjs.map +1 -0
  190. package/dist/index6.cjs +47 -0
  191. package/dist/index6.cjs.map +1 -0
  192. package/dist/index6.js +17 -0
  193. package/dist/index6.js.map +1 -0
  194. package/dist/index7.cjs +20 -0
  195. package/dist/index7.cjs.map +1 -0
  196. package/dist/index7.js +30 -0
  197. package/dist/index7.js.map +1 -0
  198. package/dist/index8.cjs +35 -0
  199. package/dist/index8.cjs.map +1 -0
  200. package/dist/index8.js +18 -0
  201. package/dist/index8.js.map +1 -0
  202. package/dist/index9.cjs +20 -0
  203. package/dist/index9.cjs.map +1 -0
  204. package/dist/index9.js +26 -0
  205. package/dist/index9.js.map +1 -0
  206. package/dist/style.css +395 -0
  207. package/package.json +1 -1
  208. package/dist/index.cjs.map +0 -1
  209. package/dist/index.js.map +0 -1
@@ -0,0 +1,98 @@
1
+ "use client";
2
+ const require_runtime = require("./index2.cjs");
3
+ const require_cx = require("./index4.cjs");
4
+ const require_segmented_toggle_module = require("./index46.cjs");
5
+ let react = require("react");
6
+ react = require_runtime.__toESM(react, 1);
7
+ let react_jsx_runtime = require("react/jsx-runtime");
8
+ //#region src/components/segmented-toggle/SegmentedToggle.tsx
9
+ function SegmentedToggle({ options, value, onChange, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, className }) {
10
+ const itemRefs = react.useRef([]);
11
+ const selectedIndex = options.findIndex((opt) => opt.value === value);
12
+ const fallbackIndex = options.findIndex((opt) => !opt.disabled);
13
+ let lastEnabledIndex = -1;
14
+ for (let index = options.length - 1; index >= 0; index -= 1) if (!options[index]?.disabled) {
15
+ lastEnabledIndex = index;
16
+ break;
17
+ }
18
+ const tabbableIndex = selectedIndex >= 0 && !options[selectedIndex]?.disabled ? selectedIndex : fallbackIndex;
19
+ const focusItem = (index) => {
20
+ itemRefs.current[index]?.focus();
21
+ };
22
+ const findEnabledIndex = (startIndex, direction) => {
23
+ if (options.length === 0) return -1;
24
+ let nextIndex = startIndex;
25
+ for (let i = 0; i < options.length; i += 1) {
26
+ nextIndex = (nextIndex + direction + options.length) % options.length;
27
+ if (!options[nextIndex]?.disabled) return nextIndex;
28
+ }
29
+ return startIndex;
30
+ };
31
+ const selectIndex = (index) => {
32
+ const nextOption = options[index];
33
+ if (!nextOption || nextOption.disabled || nextOption.value === value) return;
34
+ onChange(nextOption.value);
35
+ };
36
+ const handleKeyDown = (event, index) => {
37
+ switch (event.key) {
38
+ case "ArrowRight":
39
+ case "ArrowDown": {
40
+ event.preventDefault();
41
+ const nextIndex = findEnabledIndex(index, 1);
42
+ focusItem(nextIndex);
43
+ selectIndex(nextIndex);
44
+ break;
45
+ }
46
+ case "ArrowLeft":
47
+ case "ArrowUp": {
48
+ event.preventDefault();
49
+ const nextIndex = findEnabledIndex(index, -1);
50
+ focusItem(nextIndex);
51
+ selectIndex(nextIndex);
52
+ break;
53
+ }
54
+ case "Home":
55
+ event.preventDefault();
56
+ focusItem(fallbackIndex);
57
+ if (fallbackIndex >= 0) selectIndex(fallbackIndex);
58
+ break;
59
+ case "End":
60
+ event.preventDefault();
61
+ if (lastEnabledIndex >= 0) {
62
+ focusItem(lastEnabledIndex);
63
+ selectIndex(lastEnabledIndex);
64
+ }
65
+ break;
66
+ default: break;
67
+ }
68
+ };
69
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
70
+ className: require_cx.cx(require_segmented_toggle_module.default.track, className),
71
+ role: "radiogroup",
72
+ "aria-label": ariaLabel,
73
+ "aria-labelledby": ariaLabelledBy,
74
+ children: options.map((opt, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
75
+ ref: (node) => {
76
+ itemRefs.current[index] = node;
77
+ },
78
+ type: "button",
79
+ role: "radio",
80
+ "aria-checked": opt.value === value,
81
+ disabled: opt.disabled,
82
+ tabIndex: opt.disabled ? -1 : index === tabbableIndex ? 0 : -1,
83
+ onClick: () => {
84
+ if (opt.value !== value) onChange(opt.value);
85
+ },
86
+ onKeyDown: (event) => handleKeyDown(event, index),
87
+ className: require_cx.cx(require_segmented_toggle_module.default.option),
88
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
89
+ className: require_segmented_toggle_module.default.label,
90
+ children: opt.label
91
+ })
92
+ }, opt.value))
93
+ });
94
+ }
95
+ //#endregion
96
+ exports.SegmentedToggle = SegmentedToggle;
97
+
98
+ //# sourceMappingURL=index47.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index47.cjs","names":[],"sources":["../src/components/segmented-toggle/SegmentedToggle.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport type { ReactNode } from \"react\";\nimport { cx } from \"../../utils/cx\";\nimport styles from \"./segmented-toggle.module.css\";\n\nexport type SegmentedToggleOption<T extends string = string> = {\n label: ReactNode;\n value: T;\n disabled?: boolean;\n};\n\nexport type SegmentedToggleProps<T extends string = string> = {\n options: SegmentedToggleOption<T>[];\n value: T;\n onChange: (value: T) => void;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n className?: string;\n};\n\nexport function SegmentedToggle<T extends string = string>({\n options,\n value,\n onChange,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n className,\n}: SegmentedToggleProps<T>) {\n const itemRefs = React.useRef<Array<HTMLButtonElement | null>>([]);\n const selectedIndex = options.findIndex((opt) => opt.value === value);\n const fallbackIndex = options.findIndex((opt) => !opt.disabled);\n let lastEnabledIndex = -1;\n for (let index = options.length - 1; index >= 0; index -= 1) {\n if (!options[index]?.disabled) {\n lastEnabledIndex = index;\n break;\n }\n }\n const tabbableIndex =\n selectedIndex >= 0 && !options[selectedIndex]?.disabled\n ? selectedIndex\n : fallbackIndex;\n\n const focusItem = (index: number) => {\n itemRefs.current[index]?.focus();\n };\n\n const findEnabledIndex = (\n startIndex: number,\n direction: 1 | -1,\n ): number => {\n if (options.length === 0) return -1;\n\n let nextIndex = startIndex;\n for (let i = 0; i < options.length; i += 1) {\n nextIndex = (nextIndex + direction + options.length) % options.length;\n if (!options[nextIndex]?.disabled) {\n return nextIndex;\n }\n }\n\n return startIndex;\n };\n\n const selectIndex = (index: number) => {\n const nextOption = options[index];\n if (!nextOption || nextOption.disabled || nextOption.value === value) {\n return;\n }\n onChange(nextOption.value);\n };\n\n const handleKeyDown = (\n event: React.KeyboardEvent<HTMLButtonElement>,\n index: number,\n ) => {\n switch (event.key) {\n case \"ArrowRight\":\n case \"ArrowDown\": {\n event.preventDefault();\n const nextIndex = findEnabledIndex(index, 1);\n focusItem(nextIndex);\n selectIndex(nextIndex);\n break;\n }\n case \"ArrowLeft\":\n case \"ArrowUp\": {\n event.preventDefault();\n const nextIndex = findEnabledIndex(index, -1);\n focusItem(nextIndex);\n selectIndex(nextIndex);\n break;\n }\n case \"Home\": {\n event.preventDefault();\n focusItem(fallbackIndex);\n if (fallbackIndex >= 0) {\n selectIndex(fallbackIndex);\n }\n break;\n }\n case \"End\": {\n event.preventDefault();\n if (lastEnabledIndex >= 0) {\n focusItem(lastEnabledIndex);\n selectIndex(lastEnabledIndex);\n }\n break;\n }\n default:\n break;\n }\n };\n\n return (\n <div\n className={cx(styles.track, className)}\n role=\"radiogroup\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n >\n {options.map((opt, index) => (\n <button\n key={opt.value}\n ref={(node) => {\n itemRefs.current[index] = node;\n }}\n type=\"button\"\n role=\"radio\"\n aria-checked={opt.value === value}\n disabled={opt.disabled}\n tabIndex={\n opt.disabled\n ? -1\n : index === tabbableIndex\n ? 0\n : -1\n }\n onClick={() => {\n if (opt.value !== value) {\n onChange(opt.value);\n }\n }}\n onKeyDown={(event) => handleKeyDown(event, index)}\n className={cx(styles.option)}\n >\n <span className={styles.label}>{opt.label}</span>\n </button>\n ))}\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAsBA,SAAgB,gBAA2C,EACzD,SACA,OACA,UACA,cAAc,WACd,mBAAmB,gBACnB,aAC0B;CAC1B,MAAM,WAAW,MAAM,OAAwC,CAAC,CAAC;CACjE,MAAM,gBAAgB,QAAQ,WAAW,QAAQ,IAAI,UAAU,KAAK;CACpE,MAAM,gBAAgB,QAAQ,WAAW,QAAQ,CAAC,IAAI,QAAQ;CAC9D,IAAI,mBAAmB;CACvB,KAAK,IAAI,QAAQ,QAAQ,SAAS,GAAG,SAAS,GAAG,SAAS,GACxD,IAAI,CAAC,QAAQ,MAAM,EAAE,UAAU;EAC7B,mBAAmB;EACnB;CACF;CAEF,MAAM,gBACJ,iBAAiB,KAAK,CAAC,QAAQ,cAAc,EAAE,WAC3C,gBACA;CAEN,MAAM,aAAa,UAAkB;EACnC,SAAS,QAAQ,MAAM,EAAE,MAAM;CACjC;CAEA,MAAM,oBACJ,YACA,cACW;EACX,IAAI,QAAQ,WAAW,GAAG,OAAO;EAEjC,IAAI,YAAY;EAChB,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK,GAAG;GAC1C,aAAa,YAAY,YAAY,QAAQ,UAAU,QAAQ;GAC/D,IAAI,CAAC,QAAQ,UAAU,EAAE,UACvB,OAAO;EAEX;EAEA,OAAO;CACT;CAEA,MAAM,eAAe,UAAkB;EACrC,MAAM,aAAa,QAAQ;EAC3B,IAAI,CAAC,cAAc,WAAW,YAAY,WAAW,UAAU,OAC7D;EAEF,SAAS,WAAW,KAAK;CAC3B;CAEA,MAAM,iBACJ,OACA,UACG;EACH,QAAQ,MAAM,KAAd;GACE,KAAK;GACL,KAAK,aAAa;IAChB,MAAM,eAAe;IACrB,MAAM,YAAY,iBAAiB,OAAO,CAAC;IAC3C,UAAU,SAAS;IACnB,YAAY,SAAS;IACrB;GACF;GACA,KAAK;GACL,KAAK,WAAW;IACd,MAAM,eAAe;IACrB,MAAM,YAAY,iBAAiB,OAAO,EAAE;IAC5C,UAAU,SAAS;IACnB,YAAY,SAAS;IACrB;GACF;GACA,KAAK;IACH,MAAM,eAAe;IACrB,UAAU,aAAa;IACvB,IAAI,iBAAiB,GACnB,YAAY,aAAa;IAE3B;GAEF,KAAK;IACH,MAAM,eAAe;IACrB,IAAI,oBAAoB,GAAG;KACzB,UAAU,gBAAgB;KAC1B,YAAY,gBAAgB;IAC9B;IACA;GAEF,SACE;EACJ;CACF;CAEA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EACE,WAAW,WAAA,GAAG,gCAAA,QAAO,OAAO,SAAS;EACrC,MAAK;EACL,cAAY;EACZ,mBAAiB;YAEhB,QAAQ,KAAK,KAAK,UACjB,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;GAEE,MAAM,SAAS;IACb,SAAS,QAAQ,SAAS;GAC5B;GACA,MAAK;GACL,MAAK;GACL,gBAAc,IAAI,UAAU;GAC5B,UAAU,IAAI;GACd,UACE,IAAI,WACA,KACA,UAAU,gBACR,IACA;GAER,eAAe;IACb,IAAI,IAAI,UAAU,OAChB,SAAS,IAAI,KAAK;GAEtB;GACA,YAAY,UAAU,cAAc,OAAO,KAAK;GAChD,WAAW,WAAA,GAAG,gCAAA,QAAO,MAAM;aAE3B,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAW,gCAAA,QAAO;cAAQ,IAAI;GAAY,CAAA;EAC1C,GAxBD,IAAI,KAwBH,CACT;CACE,CAAA;AAET"}
@@ -0,0 +1,25 @@
1
+ //#region src/components/auth-card/auth-card.module.css
2
+ var authLayout = "uzi-auth-card-module__authLayout__GHr1j";
3
+ var authCard = "uzi-auth-card-module__authCard__ZYYit";
4
+ var authBrand = "uzi-auth-card-module__authBrand__ZCDVm";
5
+ var authHeader = "uzi-auth-card-module__authHeader__NB6UQ";
6
+ var authTitle = "uzi-auth-card-module__authTitle__VtHLn";
7
+ var authSubtitle = "uzi-auth-card-module__authSubtitle__ZupId";
8
+ var authBody = "uzi-auth-card-module__authBody__PTyaL";
9
+ var divider = "uzi-auth-card-module__divider__D8r12";
10
+ var authFooter = "uzi-auth-card-module__authFooter__C5s--";
11
+ var auth_card_module_default = {
12
+ authLayout,
13
+ authCard,
14
+ authBrand,
15
+ authHeader,
16
+ authTitle,
17
+ authSubtitle,
18
+ authBody,
19
+ divider,
20
+ authFooter
21
+ };
22
+ //#endregion
23
+ export { authBody, authBrand, authCard, authFooter, authHeader, authLayout, authSubtitle, authTitle, auth_card_module_default as default, divider };
24
+
25
+ //# sourceMappingURL=index47.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index47.js","names":[],"sources":["../src/components/auth-card/auth-card.module.css"],"sourcesContent":[".authLayout {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n min-height: 100dvh;\n padding: 24px;\n background: var(--background);\n}\n\n.authCard {\n width: 100%;\n max-width: 400px;\n border-radius: var(--ts-card-radius, 12px);\n border: 1px solid var(--ts-card-border, var(--border));\n background: var(--ts-card-bg, var(--panel));\n color: var(--ts-card-fg, var(--foreground));\n box-shadow: var(--ts-card-shadow, 0 16px 36px rgba(0, 0, 0, 0.28));\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.authBrand {\n display: flex;\n justify-content: center;\n margin-bottom: 4px;\n}\n\n.authBrand svg {\n width: 40px;\n height: 40px;\n color: var(--primary);\n}\n\n.authHeader {\n text-align: center;\n}\n\n.authTitle {\n font-size: 1.25rem;\n font-weight: 600;\n line-height: 1.4;\n margin: 0;\n color: var(--foreground);\n}\n\n.authSubtitle {\n font-size: 0.875rem;\n color: var(--muted-foreground);\n margin-top: 4px;\n margin-bottom: 0;\n line-height: 1.4;\n}\n\n.authBody {\n display: flex;\n flex-direction: column;\n gap: 14px;\n}\n\n.divider {\n border: none;\n border-top: 1px solid var(--border);\n margin: 0;\n}\n\n.authFooter {\n text-align: center;\n font-size: 0.875rem;\n color: var(--muted-foreground);\n margin: 0;\n}\n\n.authFooter a {\n color: var(--primary);\n text-decoration: none;\n font-weight: 500;\n}\n\n.authFooter a:hover {\n text-decoration: underline;\n}\n"],"mappings":""}
@@ -0,0 +1,34 @@
1
+ //#region src/components/auth-card/auth-card.module.css
2
+ var authLayout = "uzi-auth-card-module__authLayout__GHr1j";
3
+ var authCard = "uzi-auth-card-module__authCard__ZYYit";
4
+ var authBrand = "uzi-auth-card-module__authBrand__ZCDVm";
5
+ var authHeader = "uzi-auth-card-module__authHeader__NB6UQ";
6
+ var authTitle = "uzi-auth-card-module__authTitle__VtHLn";
7
+ var authSubtitle = "uzi-auth-card-module__authSubtitle__ZupId";
8
+ var authBody = "uzi-auth-card-module__authBody__PTyaL";
9
+ var divider = "uzi-auth-card-module__divider__D8r12";
10
+ var authFooter = "uzi-auth-card-module__authFooter__C5s--";
11
+ var auth_card_module_default = {
12
+ authLayout,
13
+ authCard,
14
+ authBrand,
15
+ authHeader,
16
+ authTitle,
17
+ authSubtitle,
18
+ authBody,
19
+ divider,
20
+ authFooter
21
+ };
22
+ //#endregion
23
+ exports.authBody = authBody;
24
+ exports.authBrand = authBrand;
25
+ exports.authCard = authCard;
26
+ exports.authFooter = authFooter;
27
+ exports.authHeader = authHeader;
28
+ exports.authLayout = authLayout;
29
+ exports.authSubtitle = authSubtitle;
30
+ exports.authTitle = authTitle;
31
+ exports.default = auth_card_module_default;
32
+ exports.divider = divider;
33
+
34
+ //# sourceMappingURL=index48.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index48.cjs","names":[],"sources":["../src/components/auth-card/auth-card.module.css"],"sourcesContent":[".authLayout {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n min-height: 100dvh;\n padding: 24px;\n background: var(--background);\n}\n\n.authCard {\n width: 100%;\n max-width: 400px;\n border-radius: var(--ts-card-radius, 12px);\n border: 1px solid var(--ts-card-border, var(--border));\n background: var(--ts-card-bg, var(--panel));\n color: var(--ts-card-fg, var(--foreground));\n box-shadow: var(--ts-card-shadow, 0 16px 36px rgba(0, 0, 0, 0.28));\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.authBrand {\n display: flex;\n justify-content: center;\n margin-bottom: 4px;\n}\n\n.authBrand svg {\n width: 40px;\n height: 40px;\n color: var(--primary);\n}\n\n.authHeader {\n text-align: center;\n}\n\n.authTitle {\n font-size: 1.25rem;\n font-weight: 600;\n line-height: 1.4;\n margin: 0;\n color: var(--foreground);\n}\n\n.authSubtitle {\n font-size: 0.875rem;\n color: var(--muted-foreground);\n margin-top: 4px;\n margin-bottom: 0;\n line-height: 1.4;\n}\n\n.authBody {\n display: flex;\n flex-direction: column;\n gap: 14px;\n}\n\n.divider {\n border: none;\n border-top: 1px solid var(--border);\n margin: 0;\n}\n\n.authFooter {\n text-align: center;\n font-size: 0.875rem;\n color: var(--muted-foreground);\n margin: 0;\n}\n\n.authFooter a {\n color: var(--primary);\n text-decoration: none;\n font-weight: 500;\n}\n\n.authFooter a:hover {\n text-decoration: underline;\n}\n"],"mappings":""}
@@ -0,0 +1,50 @@
1
+ import { cx } from "./index3.js";
2
+ import auth_card_module_default from "./index47.js";
3
+ import * as React from "react";
4
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
+ //#region src/components/auth-card/AuthCard.tsx
6
+ /**
7
+ * AuthCard — a centered card layout for auth pages.
8
+ *
9
+ * - Centered vertically and horizontally on screen
10
+ * - Brand → title → subtitle → form → divider → footer
11
+ * - No auth logic — just the visual template
12
+ */
13
+ var AuthCard = React.forwardRef(({ title, subtitle, children, footer, brand, className }, ref) => {
14
+ return /* @__PURE__ */ jsx("div", {
15
+ className: cx(auth_card_module_default.authLayout, className),
16
+ ref,
17
+ children: /* @__PURE__ */ jsxs("div", {
18
+ className: auth_card_module_default.authCard,
19
+ children: [
20
+ brand && /* @__PURE__ */ jsx("div", {
21
+ className: auth_card_module_default.authBrand,
22
+ children: brand
23
+ }),
24
+ /* @__PURE__ */ jsxs("div", {
25
+ className: auth_card_module_default.authHeader,
26
+ children: [/* @__PURE__ */ jsx("h1", {
27
+ className: auth_card_module_default.authTitle,
28
+ children: title
29
+ }), subtitle && /* @__PURE__ */ jsx("p", {
30
+ className: auth_card_module_default.authSubtitle,
31
+ children: subtitle
32
+ })]
33
+ }),
34
+ /* @__PURE__ */ jsx("div", {
35
+ className: auth_card_module_default.authBody,
36
+ children
37
+ }),
38
+ footer && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("hr", { className: auth_card_module_default.divider }), /* @__PURE__ */ jsx("p", {
39
+ className: auth_card_module_default.authFooter,
40
+ children: footer
41
+ })] })
42
+ ]
43
+ })
44
+ });
45
+ });
46
+ AuthCard.displayName = "AuthCard";
47
+ //#endregion
48
+ export { AuthCard };
49
+
50
+ //# sourceMappingURL=index48.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index48.js","names":[],"sources":["../src/components/auth-card/AuthCard.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cx } from \"../../utils/cx\";\nimport styles from \"./auth-card.module.css\";\n\nexport interface AuthCardProps {\n /** Title displayed at the top of the card. */\n title: React.ReactNode;\n /** Subtitle displayed below the title. */\n subtitle?: React.ReactNode;\n /** Primary form content rendered in the card body. */\n children: React.ReactNode;\n /** Footer links rendered below the divider (e.g., \"No account? Sign up\"). */\n footer?: React.ReactNode;\n /** Optional brand/logo element rendered above the title. */\n brand?: React.ReactNode;\n /** Additional class name for the outer wrapper. */\n className?: string;\n}\n\n/**\n * AuthCard — a centered card layout for auth pages.\n *\n * - Centered vertically and horizontally on screen\n * - Brand → title → subtitle → form → divider → footer\n * - No auth logic — just the visual template\n */\nexport const AuthCard = React.forwardRef<HTMLDivElement, AuthCardProps>(\n ({ title, subtitle, children, footer, brand, className }, ref) => {\n return (\n <div className={cx(styles.authLayout, className)} ref={ref}>\n <div className={styles.authCard}>\n {brand && <div className={styles.authBrand}>{brand}</div>}\n <div className={styles.authHeader}>\n <h1 className={styles.authTitle}>{title}</h1>\n {subtitle && <p className={styles.authSubtitle}>{subtitle}</p>}\n </div>\n <div className={styles.authBody}>{children}</div>\n {footer && (\n <>\n <hr className={styles.divider} />\n <p className={styles.authFooter}>{footer}</p>\n </>\n )}\n </div>\n </div>\n );\n },\n);\n\nAuthCard.displayName = \"AuthCard\";\n"],"mappings":";;;;;;;;;;;;AA0BA,IAAa,WAAW,MAAM,YAC3B,EAAE,OAAO,UAAU,UAAU,QAAQ,OAAO,aAAa,QAAQ;CAChE,OACE,oBAAC,OAAD;EAAK,WAAW,GAAG,yBAAO,YAAY,SAAS;EAAQ;YACrD,qBAAC,OAAD;GAAK,WAAW,yBAAO;aAAvB;IACG,SAAS,oBAAC,OAAD;KAAK,WAAW,yBAAO;eAAY;IAAW,CAAA;IACxD,qBAAC,OAAD;KAAK,WAAW,yBAAO;eAAvB,CACE,oBAAC,MAAD;MAAI,WAAW,yBAAO;gBAAY;KAAU,CAAA,GAC3C,YAAY,oBAAC,KAAD;MAAG,WAAW,yBAAO;gBAAe;KAAY,CAAA,CAC1D;;IACL,oBAAC,OAAD;KAAK,WAAW,yBAAO;KAAW;IAAc,CAAA;IAC/C,UACC,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,MAAD,EAAI,WAAW,yBAAO,QAAU,CAAA,GAChC,oBAAC,KAAD;KAAG,WAAW,yBAAO;eAAa;IAAU,CAAA,CAC5C,EAAA,CAAA;GAED;;CACF,CAAA;AAET,CACF;AAEA,SAAS,cAAc"}
@@ -0,0 +1,52 @@
1
+ const require_runtime = require("./index2.cjs");
2
+ const require_cx = require("./index4.cjs");
3
+ const require_auth_card_module = require("./index48.cjs");
4
+ let react = require("react");
5
+ react = require_runtime.__toESM(react, 1);
6
+ let react_jsx_runtime = require("react/jsx-runtime");
7
+ //#region src/components/auth-card/AuthCard.tsx
8
+ /**
9
+ * AuthCard — a centered card layout for auth pages.
10
+ *
11
+ * - Centered vertically and horizontally on screen
12
+ * - Brand → title → subtitle → form → divider → footer
13
+ * - No auth logic — just the visual template
14
+ */
15
+ var AuthCard = react.forwardRef(({ title, subtitle, children, footer, brand, className }, ref) => {
16
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
17
+ className: require_cx.cx(require_auth_card_module.default.authLayout, className),
18
+ ref,
19
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
20
+ className: require_auth_card_module.default.authCard,
21
+ children: [
22
+ brand && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
23
+ className: require_auth_card_module.default.authBrand,
24
+ children: brand
25
+ }),
26
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
27
+ className: require_auth_card_module.default.authHeader,
28
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h1", {
29
+ className: require_auth_card_module.default.authTitle,
30
+ children: title
31
+ }), subtitle && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
32
+ className: require_auth_card_module.default.authSubtitle,
33
+ children: subtitle
34
+ })]
35
+ }),
36
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
37
+ className: require_auth_card_module.default.authBody,
38
+ children
39
+ }),
40
+ footer && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("hr", { className: require_auth_card_module.default.divider }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
41
+ className: require_auth_card_module.default.authFooter,
42
+ children: footer
43
+ })] })
44
+ ]
45
+ })
46
+ });
47
+ });
48
+ AuthCard.displayName = "AuthCard";
49
+ //#endregion
50
+ exports.AuthCard = AuthCard;
51
+
52
+ //# sourceMappingURL=index49.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index49.cjs","names":[],"sources":["../src/components/auth-card/AuthCard.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cx } from \"../../utils/cx\";\nimport styles from \"./auth-card.module.css\";\n\nexport interface AuthCardProps {\n /** Title displayed at the top of the card. */\n title: React.ReactNode;\n /** Subtitle displayed below the title. */\n subtitle?: React.ReactNode;\n /** Primary form content rendered in the card body. */\n children: React.ReactNode;\n /** Footer links rendered below the divider (e.g., \"No account? Sign up\"). */\n footer?: React.ReactNode;\n /** Optional brand/logo element rendered above the title. */\n brand?: React.ReactNode;\n /** Additional class name for the outer wrapper. */\n className?: string;\n}\n\n/**\n * AuthCard — a centered card layout for auth pages.\n *\n * - Centered vertically and horizontally on screen\n * - Brand → title → subtitle → form → divider → footer\n * - No auth logic — just the visual template\n */\nexport const AuthCard = React.forwardRef<HTMLDivElement, AuthCardProps>(\n ({ title, subtitle, children, footer, brand, className }, ref) => {\n return (\n <div className={cx(styles.authLayout, className)} ref={ref}>\n <div className={styles.authCard}>\n {brand && <div className={styles.authBrand}>{brand}</div>}\n <div className={styles.authHeader}>\n <h1 className={styles.authTitle}>{title}</h1>\n {subtitle && <p className={styles.authSubtitle}>{subtitle}</p>}\n </div>\n <div className={styles.authBody}>{children}</div>\n {footer && (\n <>\n <hr className={styles.divider} />\n <p className={styles.authFooter}>{footer}</p>\n </>\n )}\n </div>\n </div>\n );\n },\n);\n\nAuthCard.displayName = \"AuthCard\";\n"],"mappings":";;;;;;;;;;;;;;AA0BA,IAAa,WAAW,MAAM,YAC3B,EAAE,OAAO,UAAU,UAAU,QAAQ,OAAO,aAAa,QAAQ;CAChE,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAW,WAAA,GAAG,yBAAA,QAAO,YAAY,SAAS;EAAQ;YACrD,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAW,yBAAA,QAAO;aAAvB;IACG,SAAS,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAW,yBAAA,QAAO;eAAY;IAAW,CAAA;IACxD,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;KAAK,WAAW,yBAAA,QAAO;eAAvB,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;MAAI,WAAW,yBAAA,QAAO;gBAAY;KAAU,CAAA,GAC3C,YAAY,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;MAAG,WAAW,yBAAA,QAAO;gBAAe;KAAY,CAAA,CAC1D;;IACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAW,yBAAA,QAAO;KAAW;IAAc,CAAA;IAC/C,UACC,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAI,WAAW,yBAAA,QAAO,QAAU,CAAA,GAChC,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;KAAG,WAAW,yBAAA,QAAO;eAAa;IAAU,CAAA,CAC5C,EAAA,CAAA;GAED;;CACF,CAAA;AAET,CACF;AAEA,SAAS,cAAc"}
@@ -0,0 +1,61 @@
1
+ //#region src/components/auth-pages/auth-pages.module.css
2
+ var authLayout = "uzi-auth-pages-module__authLayout__i-FlB";
3
+ var authCard = "uzi-auth-pages-module__authCard__toOGS";
4
+ var authBrand = "uzi-auth-pages-module__authBrand__7yOdw";
5
+ var authHeader = "uzi-auth-pages-module__authHeader__V-wcl";
6
+ var authTitle = "uzi-auth-pages-module__authTitle__1bgLI";
7
+ var authSubtitle = "uzi-auth-pages-module__authSubtitle__sGXxg";
8
+ var authForm = "uzi-auth-pages-module__authForm__4MucP";
9
+ var field = "uzi-auth-pages-module__field__Ajl6w";
10
+ var label = "uzi-auth-pages-module__label__MdsqJ";
11
+ var input = "uzi-auth-pages-module__input__yijT9";
12
+ var error = "uzi-auth-pages-module__error__7Mhyi";
13
+ var passwordWrapper = "uzi-auth-pages-module__passwordWrapper__P0bez";
14
+ var toggle = "uzi-auth-pages-module__toggle__T7HaZ";
15
+ var eyeIcon = "uzi-auth-pages-module__eyeIcon__ab2Ts";
16
+ var checkboxRow = "uzi-auth-pages-module__checkboxRow__Rq-84";
17
+ var checkboxLabel = "uzi-auth-pages-module__checkboxLabel__poKs-";
18
+ var checkbox = "uzi-auth-pages-module__checkbox__KOQQe";
19
+ var forgotLink = "uzi-auth-pages-module__forgotLink__5q-vL";
20
+ var checkboxLink = "uzi-auth-pages-module__checkboxLink__kAkKg";
21
+ var submitButton = "uzi-auth-pages-module__submitButton__mlGxT";
22
+ var spinner = "uzi-auth-pages-module__spinner__seK4F";
23
+ var spin = "uzi-auth-pages-module__spin__hYpWH";
24
+ var divider = "uzi-auth-pages-module__divider__Debmu";
25
+ var authFooter = "uzi-auth-pages-module__authFooter__SEaGh";
26
+ var sentMessage = "uzi-auth-pages-module__sentMessage__vLBoY";
27
+ var sentText = "uzi-auth-pages-module__sentText__qyJkF";
28
+ var backLink = "uzi-auth-pages-module__backLink__ezB3X";
29
+ var auth_pages_module_default = {
30
+ authLayout,
31
+ authCard,
32
+ authBrand,
33
+ authHeader,
34
+ authTitle,
35
+ authSubtitle,
36
+ authForm,
37
+ field,
38
+ label,
39
+ input,
40
+ error,
41
+ passwordWrapper,
42
+ toggle,
43
+ eyeIcon,
44
+ checkboxRow,
45
+ checkboxLabel,
46
+ checkbox,
47
+ forgotLink,
48
+ checkboxLink,
49
+ submitButton,
50
+ spinner,
51
+ spin,
52
+ divider,
53
+ authFooter,
54
+ sentMessage,
55
+ sentText,
56
+ backLink
57
+ };
58
+ //#endregion
59
+ export { authBrand, authCard, authFooter, authForm, authHeader, authLayout, authSubtitle, authTitle, backLink, checkbox, checkboxLabel, checkboxLink, checkboxRow, auth_pages_module_default as default, divider, error, eyeIcon, field, forgotLink, input, label, passwordWrapper, sentMessage, sentText, spin, spinner, submitButton, toggle };
60
+
61
+ //# sourceMappingURL=index49.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index49.js","names":[],"sources":["../src/components/auth-pages/auth-pages.module.css"],"sourcesContent":["/* ── Layout ── */\n.authLayout {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n min-height: 100dvh;\n padding: 24px;\n background: var(--background);\n}\n\n.authCard {\n width: 100%;\n max-width: 400px;\n border-radius: var(--ts-card-radius, 12px);\n border: 1px solid var(--ts-card-border, var(--border));\n background: var(--ts-card-bg, var(--card));\n color: var(--ts-card-fg, var(--foreground));\n box-shadow: var(--ts-card-shadow, 0 16px 36px rgba(0, 0, 0, 0.28));\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.authBrand {\n display: flex;\n justify-content: center;\n margin-bottom: 4px;\n}\n\n.authBrand svg {\n width: 40px;\n height: 40px;\n color: var(--primary);\n}\n\n.authHeader {\n text-align: center;\n}\n\n.authTitle {\n font-size: 1.25rem;\n font-weight: 600;\n line-height: 1.4;\n margin: 0;\n color: var(--foreground);\n}\n\n.authSubtitle {\n font-size: 0.875rem;\n color: var(--muted-foreground);\n margin-top: 4px;\n margin-bottom: 0;\n line-height: 1.4;\n}\n\n/* ── Form ── */\n.authForm {\n display: flex;\n flex-direction: column;\n gap: 14px;\n}\n\n/* ── Field ── */\n.field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.label {\n font-size: 0.875rem;\n font-weight: 500;\n line-height: 1.2;\n color: var(--foreground);\n}\n\n.input {\n display: flex;\n width: 100%;\n min-height: 2.25rem;\n border-radius: 0.5rem;\n border: 1px solid var(--input);\n background: var(--background);\n color: var(--foreground);\n padding: 0.25rem 0.75rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n box-shadow: var(--ts-input-shadow, 0 1px 2px rgba(0, 0, 0, 0.04));\n transition: border-color 0.15s ease, background 0.15s ease;\n font-family: inherit;\n}\n\n.input::placeholder {\n color: var(--muted-foreground);\n}\n\n.input:focus-visible {\n outline: var(--focus-ring);\n outline-offset: var(--focus-ring-offset);\n}\n\n.input:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n/* ── Error ── */\n.error {\n font-size: 0.8rem;\n color: var(--destructive);\n margin-top: 2px;\n}\n\n/* ── Password wrapper ── */\n.passwordWrapper {\n position: relative;\n}\n\n.passwordWrapper .input {\n padding-right: 2.5rem;\n}\n\n.toggle {\n position: absolute;\n right: 0.5rem;\n top: 50%;\n transform: translateY(-50%);\n background: none;\n border: none;\n padding: 0.25rem;\n cursor: pointer;\n color: var(--muted-foreground);\n border-radius: 4px;\n transition: color 0.15s, background 0.15s;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.toggle:hover {\n color: var(--foreground);\n background: var(--accent);\n}\n\n.toggle:focus-visible {\n outline: var(--focus-ring);\n outline-offset: var(--focus-ring-offset);\n}\n\n.eyeIcon {\n width: 1.125rem;\n height: 1.125rem;\n}\n\n/* ── Checkbox row ── */\n.checkboxRow {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.checkboxLabel {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.875rem;\n color: var(--foreground);\n cursor: pointer;\n}\n\n.checkbox {\n width: 1rem;\n height: 1rem;\n accent-color: var(--primary);\n border-radius: 4px;\n cursor: pointer;\n}\n\n.checkbox:focus-visible {\n outline: var(--focus-ring);\n outline-offset: var(--focus-ring-offset);\n}\n\n.forgotLink {\n font-size: 0.875rem;\n color: var(--primary);\n text-decoration: none;\n font-weight: 500;\n}\n\n.forgotLink:hover {\n text-decoration: underline;\n}\n\n.checkboxLink {\n color: var(--primary);\n text-decoration: none;\n font-weight: 500;\n}\n\n.checkboxLink:hover {\n text-decoration: underline;\n}\n\n/* ── Submit button ── */\n.submitButton {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n font-family: inherit;\n font-weight: 600;\n border-radius: 8px;\n border: 1px solid transparent;\n cursor: pointer;\n text-decoration: none;\n transition: opacity 0.15s, border-color 0.15s, color 0.15s, background 0.15s;\n white-space: nowrap;\n line-height: 1;\n font-size: 0.95rem;\n min-height: 2.25rem;\n padding: 10px 22px;\n background: var(--primary);\n color: var(--primary-foreground);\n}\n\n.submitButton:focus-visible {\n outline: var(--focus-ring);\n outline-offset: var(--focus-ring-offset);\n}\n\n.submitButton:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n.submitButton:hover:not(:disabled) {\n opacity: 0.88;\n}\n\n/* ── Spinner ── */\n.spinner {\n width: 1rem;\n height: 1rem;\n border: 2px solid rgba(255, 255, 255, 0.3);\n border-top-color: white;\n border-radius: 50%;\n animation: spin 0.6s linear infinite;\n}\n\n@keyframes spin {\n to { transform: rotate(360deg); }\n}\n\n/* ── Divider ── */\n.divider {\n border: none;\n border-top: 1px solid var(--border);\n margin: 0;\n}\n\n/* ── Footer ── */\n.authFooter {\n text-align: center;\n font-size: 0.875rem;\n color: var(--muted-foreground);\n margin: 0;\n}\n\n.authFooter a {\n color: var(--primary);\n text-decoration: none;\n font-weight: 500;\n}\n\n.authFooter a:hover {\n text-decoration: underline;\n}\n\n/* ── Sent state ── */\n.sentMessage {\n text-align: center;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.sentText {\n font-size: 0.875rem;\n color: var(--foreground);\n line-height: 1.5;\n}\n\n.sentText strong {\n font-weight: 600;\n}\n\n.backLink {\n font-size: 0.875rem;\n color: var(--primary);\n text-decoration: none;\n font-weight: 500;\n}\n\n.backLink:hover {\n text-decoration: underline;\n}\n"],"mappings":""}
@@ -0,0 +1,40 @@
1
+ //#region src/components/button/button.module.css
2
+ var button = "uzi-button-module__button__5dzDN";
3
+ var sizeSm = "uzi-button-module__sizeSm__jb544";
4
+ var sizeMd = "uzi-button-module__sizeMd__lIo8M";
5
+ var sizeLg = "uzi-button-module__sizeLg__QSSuW";
6
+ var sizeIcon = "uzi-button-module__sizeIcon__Aa9tN";
7
+ var variantPrimary = "uzi-button-module__variantPrimary__zp2Pg";
8
+ var variantSecondary = "uzi-button-module__variantSecondary__oX5CB";
9
+ var variantOutline = "uzi-button-module__variantOutline__uXfiP";
10
+ var variantGhost = "uzi-button-module__variantGhost__-OEB8";
11
+ var variantDestructive = "uzi-button-module__variantDestructive__5IeYA";
12
+ var variantLink = "uzi-button-module__variantLink__Olx4I";
13
+ var button_module_default = {
14
+ button,
15
+ sizeSm,
16
+ sizeMd,
17
+ sizeLg,
18
+ sizeIcon,
19
+ variantPrimary,
20
+ variantSecondary,
21
+ variantOutline,
22
+ variantGhost,
23
+ variantDestructive,
24
+ variantLink
25
+ };
26
+ //#endregion
27
+ exports.button = button;
28
+ exports.default = button_module_default;
29
+ exports.sizeIcon = sizeIcon;
30
+ exports.sizeLg = sizeLg;
31
+ exports.sizeMd = sizeMd;
32
+ exports.sizeSm = sizeSm;
33
+ exports.variantDestructive = variantDestructive;
34
+ exports.variantGhost = variantGhost;
35
+ exports.variantLink = variantLink;
36
+ exports.variantOutline = variantOutline;
37
+ exports.variantPrimary = variantPrimary;
38
+ exports.variantSecondary = variantSecondary;
39
+
40
+ //# sourceMappingURL=index5.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index5.cjs","names":[],"sources":["../src/components/button/button.module.css"],"sourcesContent":[".button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n font-family: inherit;\n font-weight: 600;\n border-radius: 8px;\n border: 1px solid transparent;\n cursor: pointer;\n text-decoration: none;\n transition:\n opacity 0.15s,\n border-color 0.15s,\n color 0.15s,\n background 0.15s;\n white-space: nowrap;\n line-height: 1;\n}\n\n.button:focus-visible {\n outline: var(--focus-ring);\n outline-offset: var(--focus-ring-offset);\n}\n\n.button svg {\n width: 1rem;\n height: 1rem;\n flex-shrink: 0;\n}\n\n.button:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n/* Sizes */\n.sizeSm {\n font-size: 0.82rem;\n min-height: 2rem;\n padding: 6px 14px;\n}\n\n.sizeMd {\n font-size: 0.95rem;\n min-height: 2.25rem;\n padding: 10px 22px;\n}\n\n.sizeLg {\n font-size: 1rem;\n min-height: 2.5rem;\n padding: 12px 28px;\n}\n\n.sizeIcon {\n width: 2.25rem;\n height: 2.25rem;\n padding: 0;\n}\n\n/* Variants */\n.variantPrimary {\n background: var(--ts-btn-primary-bg, var(--primary));\n color: var(--ts-btn-primary-text, var(--primary-foreground));\n}\n\n.variantPrimary:hover:not(:disabled) {\n opacity: 0.88;\n}\n\n.variantSecondary {\n background: var(--ts-btn-secondary-bg, var(--secondary));\n color: var(--ts-btn-secondary-text, var(--secondary-foreground));\n border-color: var(--ts-btn-secondary-border, var(--border));\n}\n\n.variantSecondary:hover:not(:disabled) {\n background: var(--ts-btn-secondary-hover-bg, color-mix(in srgb, var(--secondary) 90%, black));\n}\n\n.variantOutline {\n background: var(--ts-btn-outline-bg, var(--background));\n color: var(--ts-btn-outline-text, var(--foreground));\n border-color: var(--ts-btn-outline-border, var(--border));\n}\n\n.variantOutline:hover:not(:disabled) {\n background: var(--ts-btn-outline-hover-bg, var(--accent));\n color: var(--ts-btn-outline-hover-text, var(--accent-foreground));\n}\n\n.variantGhost {\n background: transparent;\n color: var(--ts-btn-ghost-text, var(--muted-foreground));\n padding-left: 8px;\n padding-right: 8px;\n}\n\n.variantGhost:hover:not(:disabled) {\n background: var(--ts-btn-ghost-hover-bg, var(--accent));\n color: var(--ts-btn-ghost-hover-text, var(--accent-foreground));\n}\n\n.variantDestructive {\n background: var(--ts-btn-danger-bg, var(--destructive));\n color: var(--ts-btn-danger-text, var(--destructive-foreground));\n}\n\n.variantDestructive:hover:not(:disabled) {\n opacity: 0.9;\n}\n\n.variantLink {\n background: transparent;\n color: var(--ts-btn-link-text, var(--primary));\n border-color: transparent;\n min-height: auto;\n padding: 0;\n border-radius: 0;\n}\n\n.variantLink:hover:not(:disabled) {\n text-decoration: underline;\n text-underline-offset: 0.2em;\n}\n"],"mappings":""}
package/dist/index5.js ADDED
@@ -0,0 +1,45 @@
1
+ import { cx } from "./index3.js";
2
+ import button_module_default from "./index4.js";
3
+ import "react";
4
+ import { Slot } from "@radix-ui/react-slot";
5
+ import { jsx } from "react/jsx-runtime";
6
+ //#region src/components/button/Button.tsx
7
+ var variantClass = {
8
+ default: "variantPrimary",
9
+ primary: "variantPrimary",
10
+ secondary: "variantSecondary",
11
+ outline: "variantOutline",
12
+ ghost: "variantGhost",
13
+ destructive: "variantDestructive",
14
+ link: "variantLink"
15
+ };
16
+ var sizeClass = {
17
+ default: "sizeMd",
18
+ sm: "sizeSm",
19
+ md: "sizeMd",
20
+ lg: "sizeLg",
21
+ icon: "sizeIcon"
22
+ };
23
+ function Button({ as, variant = "default", size = "default", className, children, asChild = false, ...rest }) {
24
+ const classes = cx(button_module_default.button, button_module_default[variantClass[variant]], button_module_default[sizeClass[size]], className);
25
+ if (asChild) return /* @__PURE__ */ jsx(Slot, {
26
+ className: classes,
27
+ ...rest,
28
+ children
29
+ });
30
+ if (as === "a") return /* @__PURE__ */ jsx("a", {
31
+ className: classes,
32
+ ...rest,
33
+ children
34
+ });
35
+ return /* @__PURE__ */ jsx("button", {
36
+ type: "button",
37
+ className: classes,
38
+ ...rest,
39
+ children
40
+ });
41
+ }
42
+ //#endregion
43
+ export { Button };
44
+
45
+ //# sourceMappingURL=index5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index5.js","names":[],"sources":["../src/components/button/Button.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cx } from \"../../utils/cx\";\nimport styles from \"./button.module.css\";\n\nexport type ButtonVariant =\n | \"default\"\n | \"primary\"\n | \"secondary\"\n | \"outline\"\n | \"ghost\"\n | \"destructive\"\n | \"link\";\nexport type ButtonSize = \"default\" | \"sm\" | \"md\" | \"lg\" | \"icon\";\n\ntype BaseProps = {\n variant?: ButtonVariant;\n size?: ButtonSize;\n className?: string;\n children?: React.ReactNode;\n asChild?: boolean;\n};\n\ntype AsButton = BaseProps &\n React.ButtonHTMLAttributes<HTMLButtonElement> & { as?: \"button\" };\n\ntype AsAnchor = BaseProps &\n React.AnchorHTMLAttributes<HTMLAnchorElement> & { as: \"a\" };\n\nexport type ButtonProps = AsButton | AsAnchor;\n\nconst variantClass: Record<ButtonVariant, string> = {\n default: \"variantPrimary\",\n primary: \"variantPrimary\",\n secondary: \"variantSecondary\",\n outline: \"variantOutline\",\n ghost: \"variantGhost\",\n destructive: \"variantDestructive\",\n link: \"variantLink\",\n};\n\nconst sizeClass: Record<ButtonSize, string> = {\n default: \"sizeMd\",\n sm: \"sizeSm\",\n md: \"sizeMd\",\n lg: \"sizeLg\",\n icon: \"sizeIcon\",\n};\n\nexport function Button({\n as,\n variant = \"default\",\n size = \"default\",\n className,\n children,\n asChild = false,\n ...rest\n}: ButtonProps) {\n const classes = cx(\n styles.button,\n styles[variantClass[variant]],\n styles[sizeClass[size]],\n className,\n );\n\n if (asChild) {\n return (\n <Slot className={classes} {...rest}>\n {children}\n </Slot>\n );\n }\n\n if (as === \"a\") {\n return (\n <a\n className={classes}\n {...(rest as React.AnchorHTMLAttributes<HTMLAnchorElement>)}\n >\n {children}\n </a>\n );\n }\n\n return (\n <button\n type=\"button\"\n className={classes}\n {...(rest as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n >\n {children}\n </button>\n );\n}\n"],"mappings":";;;;;;AA+BA,IAAM,eAA8C;CAClD,SAAS;CACT,SAAS;CACT,WAAW;CACX,SAAS;CACT,OAAO;CACP,aAAa;CACb,MAAM;AACR;AAEA,IAAM,YAAwC;CAC5C,SAAS;CACT,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,MAAM;AACR;AAEA,SAAgB,OAAO,EACrB,IACA,UAAU,WACV,OAAO,WACP,WACA,UACA,UAAU,OACV,GAAG,QACW;CACd,MAAM,UAAU,GACd,sBAAO,QACP,sBAAO,aAAa,WACpB,sBAAO,UAAU,QACjB,SACF;CAEA,IAAI,SACF,OACE,oBAAC,MAAD;EAAM,WAAW;EAAS,GAAI;EAC3B;CACG,CAAA;CAIV,IAAI,OAAO,KACT,OACE,oBAAC,KAAD;EACE,WAAW;EACX,GAAK;EAEJ;CACA,CAAA;CAIP,OACE,oBAAC,UAAD;EACE,MAAK;EACL,WAAW;EACX,GAAK;EAEJ;CACK,CAAA;AAEZ"}
@@ -0,0 +1,88 @@
1
+ //#region src/components/auth-pages/auth-pages.module.css
2
+ var authLayout = "uzi-auth-pages-module__authLayout__i-FlB";
3
+ var authCard = "uzi-auth-pages-module__authCard__toOGS";
4
+ var authBrand = "uzi-auth-pages-module__authBrand__7yOdw";
5
+ var authHeader = "uzi-auth-pages-module__authHeader__V-wcl";
6
+ var authTitle = "uzi-auth-pages-module__authTitle__1bgLI";
7
+ var authSubtitle = "uzi-auth-pages-module__authSubtitle__sGXxg";
8
+ var authForm = "uzi-auth-pages-module__authForm__4MucP";
9
+ var field = "uzi-auth-pages-module__field__Ajl6w";
10
+ var label = "uzi-auth-pages-module__label__MdsqJ";
11
+ var input = "uzi-auth-pages-module__input__yijT9";
12
+ var error = "uzi-auth-pages-module__error__7Mhyi";
13
+ var passwordWrapper = "uzi-auth-pages-module__passwordWrapper__P0bez";
14
+ var toggle = "uzi-auth-pages-module__toggle__T7HaZ";
15
+ var eyeIcon = "uzi-auth-pages-module__eyeIcon__ab2Ts";
16
+ var checkboxRow = "uzi-auth-pages-module__checkboxRow__Rq-84";
17
+ var checkboxLabel = "uzi-auth-pages-module__checkboxLabel__poKs-";
18
+ var checkbox = "uzi-auth-pages-module__checkbox__KOQQe";
19
+ var forgotLink = "uzi-auth-pages-module__forgotLink__5q-vL";
20
+ var checkboxLink = "uzi-auth-pages-module__checkboxLink__kAkKg";
21
+ var submitButton = "uzi-auth-pages-module__submitButton__mlGxT";
22
+ var spinner = "uzi-auth-pages-module__spinner__seK4F";
23
+ var spin = "uzi-auth-pages-module__spin__hYpWH";
24
+ var divider = "uzi-auth-pages-module__divider__Debmu";
25
+ var authFooter = "uzi-auth-pages-module__authFooter__SEaGh";
26
+ var sentMessage = "uzi-auth-pages-module__sentMessage__vLBoY";
27
+ var sentText = "uzi-auth-pages-module__sentText__qyJkF";
28
+ var backLink = "uzi-auth-pages-module__backLink__ezB3X";
29
+ var auth_pages_module_default = {
30
+ authLayout,
31
+ authCard,
32
+ authBrand,
33
+ authHeader,
34
+ authTitle,
35
+ authSubtitle,
36
+ authForm,
37
+ field,
38
+ label,
39
+ input,
40
+ error,
41
+ passwordWrapper,
42
+ toggle,
43
+ eyeIcon,
44
+ checkboxRow,
45
+ checkboxLabel,
46
+ checkbox,
47
+ forgotLink,
48
+ checkboxLink,
49
+ submitButton,
50
+ spinner,
51
+ spin,
52
+ divider,
53
+ authFooter,
54
+ sentMessage,
55
+ sentText,
56
+ backLink
57
+ };
58
+ //#endregion
59
+ exports.authBrand = authBrand;
60
+ exports.authCard = authCard;
61
+ exports.authFooter = authFooter;
62
+ exports.authForm = authForm;
63
+ exports.authHeader = authHeader;
64
+ exports.authLayout = authLayout;
65
+ exports.authSubtitle = authSubtitle;
66
+ exports.authTitle = authTitle;
67
+ exports.backLink = backLink;
68
+ exports.checkbox = checkbox;
69
+ exports.checkboxLabel = checkboxLabel;
70
+ exports.checkboxLink = checkboxLink;
71
+ exports.checkboxRow = checkboxRow;
72
+ exports.default = auth_pages_module_default;
73
+ exports.divider = divider;
74
+ exports.error = error;
75
+ exports.eyeIcon = eyeIcon;
76
+ exports.field = field;
77
+ exports.forgotLink = forgotLink;
78
+ exports.input = input;
79
+ exports.label = label;
80
+ exports.passwordWrapper = passwordWrapper;
81
+ exports.sentMessage = sentMessage;
82
+ exports.sentText = sentText;
83
+ exports.spin = spin;
84
+ exports.spinner = spinner;
85
+ exports.submitButton = submitButton;
86
+ exports.toggle = toggle;
87
+
88
+ //# sourceMappingURL=index50.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index50.cjs","names":[],"sources":["../src/components/auth-pages/auth-pages.module.css"],"sourcesContent":["/* ── Layout ── */\n.authLayout {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n min-height: 100dvh;\n padding: 24px;\n background: var(--background);\n}\n\n.authCard {\n width: 100%;\n max-width: 400px;\n border-radius: var(--ts-card-radius, 12px);\n border: 1px solid var(--ts-card-border, var(--border));\n background: var(--ts-card-bg, var(--card));\n color: var(--ts-card-fg, var(--foreground));\n box-shadow: var(--ts-card-shadow, 0 16px 36px rgba(0, 0, 0, 0.28));\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.authBrand {\n display: flex;\n justify-content: center;\n margin-bottom: 4px;\n}\n\n.authBrand svg {\n width: 40px;\n height: 40px;\n color: var(--primary);\n}\n\n.authHeader {\n text-align: center;\n}\n\n.authTitle {\n font-size: 1.25rem;\n font-weight: 600;\n line-height: 1.4;\n margin: 0;\n color: var(--foreground);\n}\n\n.authSubtitle {\n font-size: 0.875rem;\n color: var(--muted-foreground);\n margin-top: 4px;\n margin-bottom: 0;\n line-height: 1.4;\n}\n\n/* ── Form ── */\n.authForm {\n display: flex;\n flex-direction: column;\n gap: 14px;\n}\n\n/* ── Field ── */\n.field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.label {\n font-size: 0.875rem;\n font-weight: 500;\n line-height: 1.2;\n color: var(--foreground);\n}\n\n.input {\n display: flex;\n width: 100%;\n min-height: 2.25rem;\n border-radius: 0.5rem;\n border: 1px solid var(--input);\n background: var(--background);\n color: var(--foreground);\n padding: 0.25rem 0.75rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n box-shadow: var(--ts-input-shadow, 0 1px 2px rgba(0, 0, 0, 0.04));\n transition: border-color 0.15s ease, background 0.15s ease;\n font-family: inherit;\n}\n\n.input::placeholder {\n color: var(--muted-foreground);\n}\n\n.input:focus-visible {\n outline: var(--focus-ring);\n outline-offset: var(--focus-ring-offset);\n}\n\n.input:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n/* ── Error ── */\n.error {\n font-size: 0.8rem;\n color: var(--destructive);\n margin-top: 2px;\n}\n\n/* ── Password wrapper ── */\n.passwordWrapper {\n position: relative;\n}\n\n.passwordWrapper .input {\n padding-right: 2.5rem;\n}\n\n.toggle {\n position: absolute;\n right: 0.5rem;\n top: 50%;\n transform: translateY(-50%);\n background: none;\n border: none;\n padding: 0.25rem;\n cursor: pointer;\n color: var(--muted-foreground);\n border-radius: 4px;\n transition: color 0.15s, background 0.15s;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.toggle:hover {\n color: var(--foreground);\n background: var(--accent);\n}\n\n.toggle:focus-visible {\n outline: var(--focus-ring);\n outline-offset: var(--focus-ring-offset);\n}\n\n.eyeIcon {\n width: 1.125rem;\n height: 1.125rem;\n}\n\n/* ── Checkbox row ── */\n.checkboxRow {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.checkboxLabel {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.875rem;\n color: var(--foreground);\n cursor: pointer;\n}\n\n.checkbox {\n width: 1rem;\n height: 1rem;\n accent-color: var(--primary);\n border-radius: 4px;\n cursor: pointer;\n}\n\n.checkbox:focus-visible {\n outline: var(--focus-ring);\n outline-offset: var(--focus-ring-offset);\n}\n\n.forgotLink {\n font-size: 0.875rem;\n color: var(--primary);\n text-decoration: none;\n font-weight: 500;\n}\n\n.forgotLink:hover {\n text-decoration: underline;\n}\n\n.checkboxLink {\n color: var(--primary);\n text-decoration: none;\n font-weight: 500;\n}\n\n.checkboxLink:hover {\n text-decoration: underline;\n}\n\n/* ── Submit button ── */\n.submitButton {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n font-family: inherit;\n font-weight: 600;\n border-radius: 8px;\n border: 1px solid transparent;\n cursor: pointer;\n text-decoration: none;\n transition: opacity 0.15s, border-color 0.15s, color 0.15s, background 0.15s;\n white-space: nowrap;\n line-height: 1;\n font-size: 0.95rem;\n min-height: 2.25rem;\n padding: 10px 22px;\n background: var(--primary);\n color: var(--primary-foreground);\n}\n\n.submitButton:focus-visible {\n outline: var(--focus-ring);\n outline-offset: var(--focus-ring-offset);\n}\n\n.submitButton:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n.submitButton:hover:not(:disabled) {\n opacity: 0.88;\n}\n\n/* ── Spinner ── */\n.spinner {\n width: 1rem;\n height: 1rem;\n border: 2px solid rgba(255, 255, 255, 0.3);\n border-top-color: white;\n border-radius: 50%;\n animation: spin 0.6s linear infinite;\n}\n\n@keyframes spin {\n to { transform: rotate(360deg); }\n}\n\n/* ── Divider ── */\n.divider {\n border: none;\n border-top: 1px solid var(--border);\n margin: 0;\n}\n\n/* ── Footer ── */\n.authFooter {\n text-align: center;\n font-size: 0.875rem;\n color: var(--muted-foreground);\n margin: 0;\n}\n\n.authFooter a {\n color: var(--primary);\n text-decoration: none;\n font-weight: 500;\n}\n\n.authFooter a:hover {\n text-decoration: underline;\n}\n\n/* ── Sent state ── */\n.sentMessage {\n text-align: center;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.sentText {\n font-size: 0.875rem;\n color: var(--foreground);\n line-height: 1.5;\n}\n\n.sentText strong {\n font-weight: 600;\n}\n\n.backLink {\n font-size: 0.875rem;\n color: var(--primary);\n text-decoration: none;\n font-weight: 500;\n}\n\n.backLink:hover {\n text-decoration: underline;\n}\n"],"mappings":""}