@flamingo-stack/openframe-frontend-core 0.0.296 → 0.0.297

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 (276) hide show
  1. package/README.md +9 -0
  2. package/dist/{chunk-7RIYT7ZH.js → chunk-2QG57XOJ.js} +1067 -205
  3. package/dist/chunk-2QG57XOJ.js.map +1 -0
  4. package/dist/{chunk-WHMATDVP.js → chunk-3JIQVE7T.js} +9 -15
  5. package/dist/{chunk-WHMATDVP.js.map → chunk-3JIQVE7T.js.map} +1 -1
  6. package/dist/{chunk-GLLDTKZK.cjs → chunk-4PSQS3SW.cjs} +7 -9
  7. package/dist/chunk-4PSQS3SW.cjs.map +1 -0
  8. package/dist/{chunk-OY7OF7E7.js → chunk-4TLE6VLU.js} +30 -24
  9. package/dist/chunk-4TLE6VLU.js.map +1 -0
  10. package/dist/{chunk-W6M2FLLT.cjs → chunk-53FUMSZ5.cjs} +40 -46
  11. package/dist/chunk-53FUMSZ5.cjs.map +1 -0
  12. package/dist/{chunk-D3LEFMOA.cjs → chunk-54KNMC2R.cjs} +3 -3
  13. package/dist/{chunk-D3LEFMOA.cjs.map → chunk-54KNMC2R.cjs.map} +1 -1
  14. package/dist/{chunk-EYEW6PTA.cjs → chunk-6C526VNN.cjs} +358 -118
  15. package/dist/chunk-6C526VNN.cjs.map +1 -0
  16. package/dist/{chunk-XREEV72C.cjs → chunk-7OVGB2DQ.cjs} +19 -25
  17. package/dist/chunk-7OVGB2DQ.cjs.map +1 -0
  18. package/dist/{chunk-6GCI7JOE.js → chunk-AD6C23QY.js} +8 -7
  19. package/dist/{chunk-6GCI7JOE.js.map → chunk-AD6C23QY.js.map} +1 -1
  20. package/dist/chunk-F5OB2YAL.cjs +144 -0
  21. package/dist/chunk-F5OB2YAL.cjs.map +1 -0
  22. package/dist/chunk-FBWXMMRB.cjs +2 -0
  23. package/dist/chunk-FBWXMMRB.cjs.map +1 -0
  24. package/dist/{chunk-YIGPRLQY.cjs → chunk-FCDQNTDG.cjs} +21 -20
  25. package/dist/chunk-FCDQNTDG.cjs.map +1 -0
  26. package/dist/{chunk-IE6OU3WQ.cjs → chunk-FQOTC3UU.cjs} +318 -16
  27. package/dist/chunk-FQOTC3UU.cjs.map +1 -0
  28. package/dist/{chunk-QHIXS3W2.cjs → chunk-GUTS7HGA.cjs} +11590 -2105
  29. package/dist/chunk-GUTS7HGA.cjs.map +1 -0
  30. package/dist/chunk-GZ4C3XW6.js +2 -0
  31. package/dist/chunk-GZ4C3XW6.js.map +1 -0
  32. package/dist/{chunk-5P3B2LZW.js → chunk-IL47XWV5.js} +8 -14
  33. package/dist/{chunk-5P3B2LZW.js.map → chunk-IL47XWV5.js.map} +1 -1
  34. package/dist/{chunk-LCNMR277.js → chunk-IZ7JSBFP.js} +1 -1
  35. package/dist/chunk-IZ7JSBFP.js.map +1 -0
  36. package/dist/{chunk-EL6QLAWX.js → chunk-JALO4TAZ.js} +357 -55
  37. package/dist/chunk-JALO4TAZ.js.map +1 -0
  38. package/dist/{chunk-AQOWFSMB.cjs → chunk-L6PSSIUQ.cjs} +1 -1
  39. package/dist/chunk-L6PSSIUQ.cjs.map +1 -0
  40. package/dist/{chunk-MBFWU2EM.js → chunk-L7ULJKG7.js} +6 -10
  41. package/dist/{chunk-MBFWU2EM.js.map → chunk-L7ULJKG7.js.map} +1 -1
  42. package/dist/{chunk-K2PFPBMF.js → chunk-PC746XCO.js} +15050 -5565
  43. package/dist/chunk-PC746XCO.js.map +1 -0
  44. package/dist/{chunk-3ZXUQQL4.js → chunk-PI4WSYQV.js} +2 -2
  45. package/dist/{chunk-E4XABBSU.js → chunk-PWQUAVA3.js} +338 -98
  46. package/dist/chunk-PWQUAVA3.js.map +1 -0
  47. package/dist/chunk-SA2WPJVO.js +144 -0
  48. package/dist/chunk-SA2WPJVO.js.map +1 -0
  49. package/dist/{chunk-X6BV7MB7.cjs → chunk-UNVE2SDJ.cjs} +37 -31
  50. package/dist/chunk-UNVE2SDJ.cjs.map +1 -0
  51. package/dist/{chunk-5E2HOSSH.cjs → chunk-WMSTJAZT.cjs} +913 -51
  52. package/dist/chunk-WMSTJAZT.cjs.map +1 -0
  53. package/dist/{chunk-ZP4AVIZP.js → chunk-X4DOXQRT.js} +4 -6
  54. package/dist/{chunk-ZP4AVIZP.js.map → chunk-X4DOXQRT.js.map} +1 -1
  55. package/dist/{chunk-X647HY3F.cjs → chunk-YBYI62OE.cjs} +33 -37
  56. package/dist/chunk-YBYI62OE.cjs.map +1 -0
  57. package/dist/components/case-studies/index.cjs +126 -0
  58. package/dist/components/case-studies/index.cjs.map +1 -0
  59. package/dist/components/case-studies/index.d.ts +2 -0
  60. package/dist/components/case-studies/index.d.ts.map +1 -0
  61. package/dist/components/case-studies/index.js +126 -0
  62. package/dist/components/case-studies/index.js.map +1 -0
  63. package/dist/components/case-studies/share-experience-section.d.ts +48 -0
  64. package/dist/components/case-studies/share-experience-section.d.ts.map +1 -0
  65. package/dist/components/chat/index.cjs +8 -18
  66. package/dist/components/chat/index.cjs.map +1 -1
  67. package/dist/components/chat/index.js +75 -85
  68. package/dist/components/contact/index.cjs +8 -15
  69. package/dist/components/contact/index.cjs.map +1 -1
  70. package/dist/components/contact/index.js +7 -14
  71. package/dist/components/docs/doc-viewer.d.ts +39 -2
  72. package/dist/components/docs/doc-viewer.d.ts.map +1 -1
  73. package/dist/components/docs/docs-hub-page.d.ts +46 -0
  74. package/dist/components/docs/docs-hub-page.d.ts.map +1 -0
  75. package/dist/components/docs/index.cjs +17 -9
  76. package/dist/components/docs/index.cjs.map +1 -1
  77. package/dist/components/docs/index.d.ts +4 -0
  78. package/dist/components/docs/index.d.ts.map +1 -1
  79. package/dist/components/docs/index.js +16 -8
  80. package/dist/components/docs/skeletons.d.ts +32 -0
  81. package/dist/components/docs/skeletons.d.ts.map +1 -0
  82. package/dist/components/docs/use-docs-resolve-link.d.ts +20 -0
  83. package/dist/components/docs/use-docs-resolve-link.d.ts.map +1 -0
  84. package/dist/components/docs/use-document-tree.d.ts.map +1 -1
  85. package/dist/components/embeds/embed-container.d.ts +37 -0
  86. package/dist/components/embeds/embed-container.d.ts.map +1 -0
  87. package/dist/components/embeds/embed-iframe.d.ts.map +1 -1
  88. package/dist/components/embeds/file-download-card.d.ts +18 -0
  89. package/dist/components/embeds/file-download-card.d.ts.map +1 -0
  90. package/dist/components/embeds/index.cjs +38 -15
  91. package/dist/components/embeds/index.cjs.map +1 -1
  92. package/dist/components/embeds/index.d.ts +8 -0
  93. package/dist/components/embeds/index.d.ts.map +1 -1
  94. package/dist/components/embeds/index.js +40 -17
  95. package/dist/components/embeds/linkedin-embed-client.d.ts +8 -0
  96. package/dist/components/embeds/linkedin-embed-client.d.ts.map +1 -0
  97. package/dist/components/embeds/markdown-image.d.ts +5 -0
  98. package/dist/components/embeds/markdown-image.d.ts.map +1 -0
  99. package/dist/components/embeds/reddit-embed-client.d.ts +7 -0
  100. package/dist/components/embeds/reddit-embed-client.d.ts.map +1 -0
  101. package/dist/components/embeds/rich-markdown-runtime.d.ts +46 -0
  102. package/dist/components/embeds/rich-markdown-runtime.d.ts.map +1 -0
  103. package/dist/components/embeds/twitter-embed-client.d.ts +8 -0
  104. package/dist/components/embeds/twitter-embed-client.d.ts.map +1 -0
  105. package/dist/components/faq/index.cjs +9 -16
  106. package/dist/components/faq/index.cjs.map +1 -1
  107. package/dist/components/faq/index.js +8 -15
  108. package/dist/components/features/index.cjs +8 -16
  109. package/dist/components/features/index.cjs.map +1 -1
  110. package/dist/components/features/index.js +24 -32
  111. package/dist/components/index.cjs +257 -452
  112. package/dist/components/index.cjs.map +1 -1
  113. package/dist/components/index.js +781 -976
  114. package/dist/components/index.js.map +1 -1
  115. package/dist/components/layout/page-header.d.ts +78 -0
  116. package/dist/components/layout/page-header.d.ts.map +1 -0
  117. package/dist/components/layout/page-layout.d.ts +10 -1
  118. package/dist/components/layout/page-layout.d.ts.map +1 -1
  119. package/dist/components/layout/page-with-header.d.ts +67 -0
  120. package/dist/components/layout/page-with-header.d.ts.map +1 -0
  121. package/dist/components/layout/title-block.d.ts +17 -1
  122. package/dist/components/layout/title-block.d.ts.map +1 -1
  123. package/dist/components/navigation/index.cjs +7 -15
  124. package/dist/components/navigation/index.cjs.map +1 -1
  125. package/dist/components/navigation/index.js +9 -17
  126. package/dist/components/onboarding-guides/index.cjs +35 -36
  127. package/dist/components/onboarding-guides/index.cjs.map +1 -1
  128. package/dist/components/onboarding-guides/index.js +13 -14
  129. package/dist/components/onboarding-guides/index.js.map +1 -1
  130. package/dist/components/onboarding-guides/onboarding-guide-detail-view.d.ts +1 -1
  131. package/dist/components/onboarding-guides/onboarding-guide-detail-view.d.ts.map +1 -1
  132. package/dist/components/related-content/index.cjs +9 -16
  133. package/dist/components/related-content/index.cjs.map +1 -1
  134. package/dist/components/related-content/index.js +8 -15
  135. package/dist/components/shared/dev-section/dev-section-page.d.ts +9 -0
  136. package/dist/components/shared/dev-section/dev-section-page.d.ts.map +1 -1
  137. package/dist/components/shared/dev-section/dev-section-view.d.ts.map +1 -1
  138. package/dist/components/shared/dev-section/index.d.ts +1 -1
  139. package/dist/components/shared/dev-section/index.d.ts.map +1 -1
  140. package/dist/components/shared/doc-search/use-doc-search.d.ts.map +1 -1
  141. package/dist/components/shared/legal-document/legal-document-page.d.ts.map +1 -1
  142. package/dist/components/shared/product-release/release-detail-page.d.ts.map +1 -1
  143. package/dist/components/tickets/index.cjs +100 -112
  144. package/dist/components/tickets/index.cjs.map +1 -1
  145. package/dist/components/tickets/index.js +20 -32
  146. package/dist/components/tickets/index.js.map +1 -1
  147. package/dist/components/ui/file-manager/index.cjs +50 -52
  148. package/dist/components/ui/file-manager/index.cjs.map +1 -1
  149. package/dist/components/ui/file-manager/index.js +4 -6
  150. package/dist/components/ui/file-manager/index.js.map +1 -1
  151. package/dist/components/ui/index.cjs +13 -19
  152. package/dist/components/ui/index.cjs.map +1 -1
  153. package/dist/components/ui/index.d.ts +2 -0
  154. package/dist/components/ui/index.d.ts.map +1 -1
  155. package/dist/components/ui/index.js +133 -139
  156. package/dist/components/ui/release-changelog-section.d.ts +6 -2
  157. package/dist/components/ui/release-changelog-section.d.ts.map +1 -1
  158. package/dist/components/ui/rich-markdown-renderer.d.ts +34 -0
  159. package/dist/components/ui/rich-markdown-renderer.d.ts.map +1 -0
  160. package/dist/components/ui/simple-markdown-renderer.d.ts +2 -8
  161. package/dist/components/ui/simple-markdown-renderer.d.ts.map +1 -1
  162. package/dist/contexts/chat-runtime-context.d.ts +14 -0
  163. package/dist/contexts/chat-runtime-context.d.ts.map +1 -1
  164. package/dist/contexts/index.cjs +3 -3
  165. package/dist/contexts/index.js +5 -5
  166. package/dist/embed-shims/index.cjs +3 -3
  167. package/dist/embed-shims/index.cjs.map +1 -1
  168. package/dist/embed-shims/index.js +4 -4
  169. package/dist/hooks/index.cjs +4 -9
  170. package/dist/hooks/index.cjs.map +1 -1
  171. package/dist/hooks/index.js +6 -11
  172. package/dist/index.cjs +14 -20
  173. package/dist/index.cjs.map +1 -1
  174. package/dist/index.js +362 -368
  175. package/dist/types/doc-source.d.ts +31 -1
  176. package/dist/types/doc-source.d.ts.map +1 -1
  177. package/dist/utils/index.cjs +4 -0
  178. package/dist/utils/index.cjs.map +1 -1
  179. package/dist/utils/index.d.ts +1 -0
  180. package/dist/utils/index.d.ts.map +1 -1
  181. package/dist/utils/index.js +4 -1
  182. package/dist/utils/index.js.map +1 -1
  183. package/dist/utils/page-header-constants.d.ts +15 -0
  184. package/dist/utils/page-header-constants.d.ts.map +1 -0
  185. package/dist/utils/social-embed-cache.d.ts +29 -0
  186. package/dist/utils/social-embed-cache.d.ts.map +1 -0
  187. package/package.json +7 -1
  188. package/src/components/case-studies/index.ts +4 -0
  189. package/src/components/case-studies/share-experience-section.tsx +185 -0
  190. package/src/components/chat/embeddable-chat.tsx +1 -1
  191. package/src/components/docs/doc-viewer.tsx +111 -19
  192. package/src/components/docs/docs-hub-page.tsx +149 -0
  193. package/src/components/docs/index.ts +17 -0
  194. package/src/components/docs/skeletons.tsx +138 -0
  195. package/src/components/docs/use-docs-resolve-link.ts +52 -0
  196. package/src/components/docs/use-document-tree.ts +21 -0
  197. package/src/components/embeds/embed-container.tsx +80 -0
  198. package/src/components/embeds/embed-iframe.tsx +7 -9
  199. package/src/components/embeds/file-download-card.tsx +54 -0
  200. package/src/components/embeds/index.ts +30 -0
  201. package/src/components/embeds/linkedin-embed-client.tsx +100 -0
  202. package/src/components/embeds/markdown-image.tsx +88 -0
  203. package/src/components/embeds/og-link-preview.tsx +13 -13
  204. package/src/components/embeds/reddit-embed-client.tsx +550 -0
  205. package/src/components/embeds/rich-markdown-runtime.tsx +79 -0
  206. package/src/components/embeds/twitter-embed-client.tsx +308 -0
  207. package/src/components/layout/page-header.tsx +182 -0
  208. package/src/components/layout/page-layout.tsx +14 -1
  209. package/src/components/layout/page-with-header.tsx +110 -0
  210. package/src/components/layout/title-block.tsx +40 -62
  211. package/src/components/onboarding-guides/onboarding-guide-detail-view.tsx +3 -3
  212. package/src/components/shared/dev-section/dev-section-page.tsx +9 -1
  213. package/src/components/shared/dev-section/dev-section-view.tsx +14 -9
  214. package/src/components/shared/dev-section/index.ts +1 -1
  215. package/src/components/shared/doc-search/use-doc-search.ts +7 -3
  216. package/src/components/shared/legal-document/legal-document-page.tsx +2 -2
  217. package/src/components/shared/product-release/release-detail-page.tsx +6 -4
  218. package/src/components/ui/index.ts +2 -0
  219. package/src/components/ui/release-changelog-section.tsx +7 -2
  220. package/src/components/ui/rich-markdown-renderer.tsx +1203 -0
  221. package/src/components/ui/simple-markdown-renderer.tsx +7 -11
  222. package/src/contexts/chat-runtime-context.tsx +14 -0
  223. package/src/types/doc-source.ts +33 -1
  224. package/src/utils/index.ts +1 -0
  225. package/src/utils/page-header-constants.ts +15 -0
  226. package/src/utils/social-embed-cache.ts +391 -0
  227. package/dist/chunk-26PKDALD.js +0 -2379
  228. package/dist/chunk-26PKDALD.js.map +0 -1
  229. package/dist/chunk-3MCHAFHB.js +0 -89
  230. package/dist/chunk-3MCHAFHB.js.map +0 -1
  231. package/dist/chunk-5E2HOSSH.cjs.map +0 -1
  232. package/dist/chunk-66AANIOC.cjs +0 -619
  233. package/dist/chunk-66AANIOC.cjs.map +0 -1
  234. package/dist/chunk-6JINAOI7.cjs +0 -311
  235. package/dist/chunk-6JINAOI7.cjs.map +0 -1
  236. package/dist/chunk-7RIYT7ZH.js.map +0 -1
  237. package/dist/chunk-AQOWFSMB.cjs.map +0 -1
  238. package/dist/chunk-BOCFIKYS.cjs +0 -3009
  239. package/dist/chunk-BOCFIKYS.cjs.map +0 -1
  240. package/dist/chunk-D652TJBQ.js +0 -3009
  241. package/dist/chunk-D652TJBQ.js.map +0 -1
  242. package/dist/chunk-E4XABBSU.js.map +0 -1
  243. package/dist/chunk-EL6QLAWX.js.map +0 -1
  244. package/dist/chunk-EYEW6PTA.cjs.map +0 -1
  245. package/dist/chunk-FQJK446R.js +0 -1606
  246. package/dist/chunk-FQJK446R.js.map +0 -1
  247. package/dist/chunk-GLLDTKZK.cjs.map +0 -1
  248. package/dist/chunk-IE6OU3WQ.cjs.map +0 -1
  249. package/dist/chunk-J54Z3OCR.cjs +0 -1606
  250. package/dist/chunk-J54Z3OCR.cjs.map +0 -1
  251. package/dist/chunk-K2PFPBMF.js.map +0 -1
  252. package/dist/chunk-KXCRGTRN.cjs +0 -2379
  253. package/dist/chunk-KXCRGTRN.cjs.map +0 -1
  254. package/dist/chunk-LCNMR277.js.map +0 -1
  255. package/dist/chunk-LFGGF7OT.cjs +0 -449
  256. package/dist/chunk-LFGGF7OT.cjs.map +0 -1
  257. package/dist/chunk-M2OCXTNT.js +0 -311
  258. package/dist/chunk-M2OCXTNT.js.map +0 -1
  259. package/dist/chunk-ME4EVDFP.js +0 -619
  260. package/dist/chunk-ME4EVDFP.js.map +0 -1
  261. package/dist/chunk-OQ6X7ZOC.js +0 -449
  262. package/dist/chunk-OQ6X7ZOC.js.map +0 -1
  263. package/dist/chunk-OY7OF7E7.js.map +0 -1
  264. package/dist/chunk-POKKCWKF.js +0 -354
  265. package/dist/chunk-POKKCWKF.js.map +0 -1
  266. package/dist/chunk-QHIXS3W2.cjs.map +0 -1
  267. package/dist/chunk-TFSYSWPS.cjs +0 -89
  268. package/dist/chunk-TFSYSWPS.cjs.map +0 -1
  269. package/dist/chunk-W6M2FLLT.cjs.map +0 -1
  270. package/dist/chunk-X647HY3F.cjs.map +0 -1
  271. package/dist/chunk-X6BV7MB7.cjs.map +0 -1
  272. package/dist/chunk-XREEV72C.cjs.map +0 -1
  273. package/dist/chunk-YETA25JW.cjs +0 -354
  274. package/dist/chunk-YETA25JW.cjs.map +0 -1
  275. package/dist/chunk-YIGPRLQY.cjs.map +0 -1
  276. /package/dist/{chunk-3ZXUQQL4.js.map → chunk-PI4WSYQV.js.map} +0 -0
@@ -7,6 +7,9 @@ import {
7
7
  cn,
8
8
  init_cn
9
9
  } from "./chunk-XTCBRQN2.js";
10
+ import {
11
+ CheckboxCheckmarkIcon
12
+ } from "./chunk-6U3IUD57.js";
10
13
  import {
11
14
  __esm
12
15
  } from "./chunk-GGWZFCYS.js";
@@ -35,8 +38,8 @@ var init_button_styles = __esm({
35
38
  // src/components/ui/button/button.tsx
36
39
  import { Slot } from "@radix-ui/react-slot";
37
40
  import { cva } from "class-variance-authority";
38
- import React from "react";
39
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
41
+ import React3 from "react";
42
+ import { Fragment, jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
40
43
  var buttonVariants, splitShellVariants, splitSlotVariants, Spinner, Button;
41
44
  var init_button = __esm({
42
45
  "src/components/ui/button/button.tsx"() {
@@ -149,9 +152,9 @@ var init_button = __esm({
149
152
  defaultVariants: { slot: "main", size: "default", variant: "accent" }
150
153
  }
151
154
  );
152
- Spinner = () => /* @__PURE__ */ jsxs("svg", { className: "animate-spin", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", "aria-hidden": "true", children: [
153
- /* @__PURE__ */ jsx("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }),
154
- /* @__PURE__ */ jsx(
155
+ Spinner = () => /* @__PURE__ */ jsxs3("svg", { className: "animate-spin", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", "aria-hidden": "true", children: [
156
+ /* @__PURE__ */ jsx3("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }),
157
+ /* @__PURE__ */ jsx3(
155
158
  "path",
156
159
  {
157
160
  className: "opacity-75",
@@ -160,7 +163,7 @@ var init_button = __esm({
160
163
  }
161
164
  )
162
165
  ] });
163
- Button = React.forwardRef(function Button2({
166
+ Button = React3.forwardRef(function Button2({
164
167
  className,
165
168
  variant,
166
169
  size,
@@ -191,16 +194,16 @@ var init_button = __esm({
191
194
  );
192
195
  const mainSlotClass = splitSlotVariants({ slot: "main", size: safeSize, variant: safeVariant });
193
196
  const iconSlotClass = splitSlotVariants({ slot: "icon", size: safeSize, variant: safeVariant });
194
- const splitContent = /* @__PURE__ */ jsxs(Fragment, { children: [
195
- /* @__PURE__ */ jsxs("span", { className: cn("contents", loading && "invisible"), children: [
196
- /* @__PURE__ */ jsxs("span", { className: mainSlotClass, children: [
197
- leftIcon && /* @__PURE__ */ jsx("span", { className: "inline-flex items-center", children: leftIcon }),
197
+ const splitContent = /* @__PURE__ */ jsxs3(Fragment, { children: [
198
+ /* @__PURE__ */ jsxs3("span", { className: cn("contents", loading && "invisible"), children: [
199
+ /* @__PURE__ */ jsxs3("span", { className: mainSlotClass, children: [
200
+ leftIcon && /* @__PURE__ */ jsx3("span", { className: "inline-flex items-center", children: leftIcon }),
198
201
  children,
199
- rightIcon && /* @__PURE__ */ jsx("span", { className: "inline-flex items-center", children: rightIcon })
202
+ rightIcon && /* @__PURE__ */ jsx3("span", { className: "inline-flex items-center", children: rightIcon })
200
203
  ] }),
201
- /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: iconSlotClass, children: splitIcon })
204
+ /* @__PURE__ */ jsx3("span", { "aria-hidden": "true", className: iconSlotClass, children: splitIcon })
202
205
  ] }),
203
- loading && /* @__PURE__ */ jsx("span", { className: "absolute inset-0 inline-flex items-center justify-center text-ods-text-primary", children: /* @__PURE__ */ jsx(Spinner, {}) })
206
+ loading && /* @__PURE__ */ jsx3("span", { className: "absolute inset-0 inline-flex items-center justify-center text-ods-text-primary", children: /* @__PURE__ */ jsx3(Spinner, {}) })
204
207
  ] });
205
208
  const splitAnchor = linkProps ?? (href ? {
206
209
  href,
@@ -209,7 +212,7 @@ var init_button = __esm({
209
212
  onClick
210
213
  } : null);
211
214
  if (splitAnchor) {
212
- return /* @__PURE__ */ jsx(
215
+ return /* @__PURE__ */ jsx3(
213
216
  next_link_default,
214
217
  {
215
218
  href: splitAnchor.href,
@@ -225,7 +228,7 @@ var init_button = __esm({
225
228
  }
226
229
  );
227
230
  }
228
- return /* @__PURE__ */ jsx(
231
+ return /* @__PURE__ */ jsx3(
229
232
  "button",
230
233
  {
231
234
  ref,
@@ -239,15 +242,15 @@ var init_button = __esm({
239
242
  }
240
243
  const classes = cn(buttonVariants({ variant, size, fullWidth, noPaddingX }), className);
241
244
  if (asChild) {
242
- return /* @__PURE__ */ jsx(Slot, { ref, className: classes, ...props, children });
245
+ return /* @__PURE__ */ jsx3(Slot, { ref, className: classes, ...props, children });
243
246
  }
244
- const content = /* @__PURE__ */ jsxs(Fragment, { children: [
245
- /* @__PURE__ */ jsxs("span", { className: cn("contents", loading && "invisible"), children: [
246
- leftIcon && /* @__PURE__ */ jsx("span", { className: "inline-flex items-center", children: leftIcon }),
247
+ const content = /* @__PURE__ */ jsxs3(Fragment, { children: [
248
+ /* @__PURE__ */ jsxs3("span", { className: cn("contents", loading && "invisible"), children: [
249
+ leftIcon && /* @__PURE__ */ jsx3("span", { className: "inline-flex items-center", children: leftIcon }),
247
250
  children,
248
- rightIcon && /* @__PURE__ */ jsx("span", { className: "inline-flex items-center", children: rightIcon })
251
+ rightIcon && /* @__PURE__ */ jsx3("span", { className: "inline-flex items-center", children: rightIcon })
249
252
  ] }),
250
- loading && /* @__PURE__ */ jsx("span", { className: "absolute inset-0 inline-flex items-center justify-center text-ods-text-primary", children: /* @__PURE__ */ jsx(Spinner, {}) })
253
+ loading && /* @__PURE__ */ jsx3("span", { className: "absolute inset-0 inline-flex items-center justify-center text-ods-text-primary", children: /* @__PURE__ */ jsx3(Spinner, {}) })
251
254
  ] });
252
255
  const anchor = linkProps ?? (href ? {
253
256
  href,
@@ -256,7 +259,7 @@ var init_button = __esm({
256
259
  onClick
257
260
  } : null);
258
261
  if (anchor) {
259
- return /* @__PURE__ */ jsx(
262
+ return /* @__PURE__ */ jsx3(
260
263
  next_link_default,
261
264
  {
262
265
  href: anchor.href,
@@ -272,7 +275,7 @@ var init_button = __esm({
272
275
  }
273
276
  );
274
277
  }
275
- return /* @__PURE__ */ jsx(
278
+ return /* @__PURE__ */ jsx3(
276
279
  "button",
277
280
  {
278
281
  ref,
@@ -289,12 +292,12 @@ var init_button = __esm({
289
292
 
290
293
  // src/components/ui/button/split-button.tsx
291
294
  import { cva as cva2 } from "class-variance-authority";
292
- import React2 from "react";
293
- import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
295
+ import React4 from "react";
296
+ import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
294
297
  function Half({ variant, size, side, href, openInNewTab, prefetch, onClick, disabled, grow, type = "button", ariaLabel, children }) {
295
298
  const classes = cn(splitHalfVariants({ variant, size, side }), grow && "flex-1");
296
299
  if (href) {
297
- return /* @__PURE__ */ jsx2(
300
+ return /* @__PURE__ */ jsx4(
298
301
  next_link_default,
299
302
  {
300
303
  href,
@@ -310,7 +313,7 @@ function Half({ variant, size, side, href, openInNewTab, prefetch, onClick, disa
310
313
  }
311
314
  );
312
315
  }
313
- return /* @__PURE__ */ jsx2(
316
+ return /* @__PURE__ */ jsx4(
314
317
  "button",
315
318
  {
316
319
  type,
@@ -376,7 +379,7 @@ var init_split_button = __esm({
376
379
  ],
377
380
  defaultVariants: { variant: "accent", size: "default", side: "main" }
378
381
  });
379
- SplitButton = React2.forwardRef(function SplitButton2({
382
+ SplitButton = React4.forwardRef(function SplitButton2({
380
383
  variant = "accent",
381
384
  size = "default",
382
385
  fullWidth = false,
@@ -395,7 +398,7 @@ var init_split_button = __esm({
395
398
  "aria-label": ariaLabel,
396
399
  groupAriaLabel
397
400
  }, ref) {
398
- return /* @__PURE__ */ jsxs2(
401
+ return /* @__PURE__ */ jsxs4(
399
402
  "div",
400
403
  {
401
404
  ref,
@@ -403,7 +406,7 @@ var init_split_button = __esm({
403
406
  "aria-label": groupAriaLabel,
404
407
  className: cn("inline-flex items-stretch", fullWidth && "w-full", className),
405
408
  children: [
406
- /* @__PURE__ */ jsxs2(
409
+ /* @__PURE__ */ jsxs4(
407
410
  Half,
408
411
  {
409
412
  variant,
@@ -418,13 +421,13 @@ var init_split_button = __esm({
418
421
  type,
419
422
  ariaLabel,
420
423
  children: [
421
- leftIcon && /* @__PURE__ */ jsx2("span", { className: "inline-flex items-center", children: leftIcon }),
422
- /* @__PURE__ */ jsx2("span", { children }),
423
- rightIcon && /* @__PURE__ */ jsx2("span", { className: "inline-flex items-center", children: rightIcon })
424
+ leftIcon && /* @__PURE__ */ jsx4("span", { className: "inline-flex items-center", children: leftIcon }),
425
+ /* @__PURE__ */ jsx4("span", { children }),
426
+ rightIcon && /* @__PURE__ */ jsx4("span", { className: "inline-flex items-center", children: rightIcon })
424
427
  ]
425
428
  }
426
429
  ),
427
- /* @__PURE__ */ jsx2(
430
+ /* @__PURE__ */ jsx4(
428
431
  Half,
429
432
  {
430
433
  variant,
@@ -436,7 +439,7 @@ var init_split_button = __esm({
436
439
  onClick: iconAction.onClick,
437
440
  disabled: disabled || iconAction.disabled,
438
441
  ariaLabel: iconAction["aria-label"],
439
- children: /* @__PURE__ */ jsx2("span", { className: "inline-flex items-center", children: iconAction.icon })
442
+ children: /* @__PURE__ */ jsx4("span", { className: "inline-flex items-center", children: iconAction.icon })
440
443
  }
441
444
  )
442
445
  ]
@@ -455,30 +458,173 @@ var init_button2 = __esm({
455
458
  }
456
459
  });
457
460
 
461
+ // src/components/ui/field-wrapper.tsx
462
+ init_cn();
463
+ import * as React from "react";
464
+ import { jsx, jsxs } from "react/jsx-runtime";
465
+ var errorVariantClasses = {
466
+ error: "text-ods-error",
467
+ warning: "text-[var(--ods-attention-yellow-warning)]"
468
+ };
469
+ var FieldWrapper = React.forwardRef(
470
+ ({ label, error, errorVariant = "error", className, children }, ref) => {
471
+ const hasChrome = label != null || error != null;
472
+ return /* @__PURE__ */ jsxs("div", { ref, className: cn(hasChrome ? "relative flex w-full flex-col" : "contents", className), children: [
473
+ label && /* @__PURE__ */ jsx("label", { className: "text-h4 text-ods-text-primary mb-1", children: label }),
474
+ children,
475
+ error && /* @__PURE__ */ jsx("p", { className: cn("absolute bottom-0 left-0 right-0 translate-y-full text-h6 truncate", errorVariantClasses[errorVariant]), title: error, children: error })
476
+ ] });
477
+ }
478
+ );
479
+ FieldWrapper.displayName = "FieldWrapper";
480
+
481
+ // src/components/ui/input.tsx
482
+ init_cn();
483
+ import * as React2 from "react";
484
+ import { Loader2 } from "lucide-react";
485
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
486
+ var invalidBorderClasses = {
487
+ error: "border-ods-error hover:border-ods-error has-[:focus]:border-ods-error",
488
+ warning: "!border-[var(--ods-attention-yellow-warning)] hover:!border-[var(--ods-attention-yellow-warning)] has-[:focus]:!border-[var(--ods-attention-yellow-warning)]"
489
+ };
490
+ var Input = React2.forwardRef(
491
+ ({ className, type, invalid = false, startAdornment, endAdornment, label, error, errorVariant = "error", loading = false, ...props }, ref) => {
492
+ const isInvalid = invalid || !!error;
493
+ if (type === "range") {
494
+ const rangeInput = /* @__PURE__ */ jsx2(
495
+ "input",
496
+ {
497
+ type: "range",
498
+ className: cn(
499
+ "w-full cursor-pointer appearance-none rounded-full bg-white/30 h-1",
500
+ // Webkit (Chrome/Safari) thumb
501
+ "[&::-webkit-slider-thumb]:appearance-none",
502
+ "[&::-webkit-slider-thumb]:w-3 [&::-webkit-slider-thumb]:h-3",
503
+ "[&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-white",
504
+ "[&::-webkit-slider-thumb]:cursor-pointer [&::-webkit-slider-thumb]:shadow-sm",
505
+ // Firefox thumb
506
+ "[&::-moz-range-thumb]:w-3 [&::-moz-range-thumb]:h-3",
507
+ "[&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:bg-white",
508
+ "[&::-moz-range-thumb]:border-0 [&::-moz-range-thumb]:cursor-pointer",
509
+ // Firefox track
510
+ "[&::-moz-range-track]:bg-transparent",
511
+ // Disabled
512
+ "disabled:cursor-not-allowed disabled:opacity-50",
513
+ className
514
+ ),
515
+ ref,
516
+ ...props
517
+ }
518
+ );
519
+ return label ? /* @__PURE__ */ jsx2(FieldWrapper, { label, error, errorVariant, children: rangeInput }) : rangeInput;
520
+ }
521
+ const content = /* @__PURE__ */ jsxs2(
522
+ "label",
523
+ {
524
+ "data-invalid": isInvalid || void 0,
525
+ className: cn(
526
+ // Layout & spacing
527
+ "flex w-full items-center gap-2 rounded-[6px] border px-3 h-11 md:h-12 cursor-text",
528
+ // Focus-within states
529
+ "has-[:focus-visible]:outline-none",
530
+ "group",
531
+ // Animations & touch UX
532
+ "transition-colors duration-200",
533
+ // Theme palette
534
+ "bg-ods-card border-ods-border has-[:focus]:border-ods-accent",
535
+ // Hover & active (not disabled)
536
+ !props.disabled && "hover:bg-ods-bg-hover hover:border-ods-border-hover active:bg-ods-bg-active active:border-ods-border-active",
537
+ // Disabled
538
+ props.disabled && "!cursor-not-allowed bg-ods-bg",
539
+ // Invalid
540
+ isInvalid && invalidBorderClasses[errorVariant],
541
+ className
542
+ ),
543
+ children: [
544
+ startAdornment && /* @__PURE__ */ jsx2("span", { className: "text-h6 flex-shrink-0 text-ods-text-secondary transition-colors duration-200 group-has-[:focus]:text-ods-accent group-data-[invalid]:text-ods-error [&_svg]:size-4 md:[&_svg]:size-6", children: startAdornment }),
545
+ /* @__PURE__ */ jsx2(
546
+ "input",
547
+ {
548
+ type,
549
+ className: cn(
550
+ // Layout
551
+ "flex-1 min-w-0 bg-transparent border-none outline-none",
552
+ // Typography
553
+ "text-h4",
554
+ // Colors
555
+ "text-ods-text-primary placeholder:text-ods-text-secondary",
556
+ // File input adjustments
557
+ "file:border-0 file:bg-transparent",
558
+ // Disabled
559
+ "disabled:cursor-not-allowed disabled:text-ods-text-disabled disabled:placeholder:text-ods-border",
560
+ // Touch
561
+ "touch-manipulation",
562
+ // Autofill override
563
+ "[&:-webkit-autofill]:[-webkit-box-shadow:0_0_0_9999px_transparent_inset] [&:-webkit-autofill]:[-webkit-text-fill-color:var(--color-text-primary)] [&:-webkit-autofill]:[caret-color:var(--color-text-primary)] [&:-webkit-autofill]:[transition:background-color_9999s_ease-in-out_0s]"
564
+ ),
565
+ ref,
566
+ ...props
567
+ }
568
+ ),
569
+ loading && /* @__PURE__ */ jsx2(Loader2, { className: "animate-spin flex-shrink-0 text-ods-text-secondary size-4 md:size-6" }),
570
+ !loading && endAdornment && /* @__PURE__ */ jsx2("span", { className: "text-h6 flex-shrink-0 text-ods-text-secondary transition-colors duration-200 group-has-[:focus]:text-ods-accent group-data-[invalid]:text-ods-error [&_svg]:size-4 md:[&_svg]:size-6", children: endAdornment })
571
+ ]
572
+ }
573
+ );
574
+ return /* @__PURE__ */ jsx2(FieldWrapper, { label, error, errorVariant, children: content });
575
+ }
576
+ );
577
+ Input.displayName = "Input";
578
+
579
+ // src/components/ui/checkbox.tsx
580
+ init_cn();
581
+ import * as React5 from "react";
582
+ import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
583
+ import { jsx as jsx5 } from "react/jsx-runtime";
584
+ var Checkbox = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx5(
585
+ CheckboxPrimitive.Root,
586
+ {
587
+ ref,
588
+ className: cn(
589
+ "peer h-4 w-4 shrink-0 rounded-sm border border-ods-border bg-ods-card focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-ods-accent data-[state=checked]:border-ods-accent",
590
+ className
591
+ ),
592
+ ...props,
593
+ children: /* @__PURE__ */ jsx5(
594
+ CheckboxPrimitive.Indicator,
595
+ {
596
+ className: cn("flex items-center justify-center text-ods-text-on-accent"),
597
+ children: /* @__PURE__ */ jsx5(CheckboxCheckmarkIcon, { size: 10 })
598
+ }
599
+ )
600
+ }
601
+ ));
602
+ Checkbox.displayName = CheckboxPrimitive.Root.displayName;
603
+
458
604
  // src/components/ui/dropdown-menu.tsx
459
605
  init_cn();
460
- import * as React4 from "react";
606
+ import * as React7 from "react";
461
607
  import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
462
608
  import { Check, ChevronRight, Circle } from "lucide-react";
463
609
 
464
610
  // src/components/ui/portal-container.tsx
465
- import * as React3 from "react";
466
- var PortalContainerContext = React3.createContext(
611
+ import * as React6 from "react";
612
+ var PortalContainerContext = React6.createContext(
467
613
  null
468
614
  );
469
615
  function usePortalContainer() {
470
- return React3.useContext(PortalContainerContext);
616
+ return React6.useContext(PortalContainerContext);
471
617
  }
472
618
 
473
619
  // src/components/ui/dropdown-menu.tsx
474
- import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
620
+ import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
475
621
  var DropdownMenu = DropdownMenuPrimitive.Root;
476
622
  var DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
477
623
  var DropdownMenuGroup = DropdownMenuPrimitive.Group;
478
624
  var DropdownMenuPortal = DropdownMenuPrimitive.Portal;
479
625
  var DropdownMenuSub = DropdownMenuPrimitive.Sub;
480
626
  var DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
481
- var DropdownMenuSubTrigger = React4.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs3(
627
+ var DropdownMenuSubTrigger = React7.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs5(
482
628
  DropdownMenuPrimitive.SubTrigger,
483
629
  {
484
630
  ref,
@@ -490,12 +636,12 @@ var DropdownMenuSubTrigger = React4.forwardRef(({ className, inset, children, ..
490
636
  ...props,
491
637
  children: [
492
638
  children,
493
- /* @__PURE__ */ jsx3(ChevronRight, { className: "ml-auto" })
639
+ /* @__PURE__ */ jsx6(ChevronRight, { className: "ml-auto" })
494
640
  ]
495
641
  }
496
642
  ));
497
643
  DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
498
- var DropdownMenuSubContent = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx3(
644
+ var DropdownMenuSubContent = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx6(
499
645
  DropdownMenuPrimitive.SubContent,
500
646
  {
501
647
  ref,
@@ -507,9 +653,9 @@ var DropdownMenuSubContent = React4.forwardRef(({ className, ...props }, ref) =>
507
653
  }
508
654
  ));
509
655
  DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
510
- var DropdownMenuContent = React4.forwardRef(({ className, sideOffset = 4, ...props }, ref) => {
656
+ var DropdownMenuContent = React7.forwardRef(({ className, sideOffset = 4, ...props }, ref) => {
511
657
  const container = usePortalContainer();
512
- return /* @__PURE__ */ jsx3(DropdownMenuPrimitive.Portal, { container: container ?? void 0, children: /* @__PURE__ */ jsx3(
658
+ return /* @__PURE__ */ jsx6(DropdownMenuPrimitive.Portal, { container: container ?? void 0, children: /* @__PURE__ */ jsx6(
513
659
  DropdownMenuPrimitive.Content,
514
660
  {
515
661
  ref,
@@ -523,7 +669,7 @@ var DropdownMenuContent = React4.forwardRef(({ className, sideOffset = 4, ...pro
523
669
  ) });
524
670
  });
525
671
  DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
526
- var DropdownMenuItem = React4.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx3(
672
+ var DropdownMenuItem = React7.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx6(
527
673
  DropdownMenuPrimitive.Item,
528
674
  {
529
675
  ref,
@@ -536,7 +682,7 @@ var DropdownMenuItem = React4.forwardRef(({ className, inset, ...props }, ref) =
536
682
  }
537
683
  ));
538
684
  DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
539
- var DropdownMenuCheckboxItem = React4.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs3(
685
+ var DropdownMenuCheckboxItem = React7.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs5(
540
686
  DropdownMenuPrimitive.CheckboxItem,
541
687
  {
542
688
  ref,
@@ -547,13 +693,13 @@ var DropdownMenuCheckboxItem = React4.forwardRef(({ className, children, checked
547
693
  checked,
548
694
  ...props,
549
695
  children: [
550
- /* @__PURE__ */ jsx3("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx3(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx3(Check, { className: "h-4 w-4" }) }) }),
696
+ /* @__PURE__ */ jsx6("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx6(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx6(Check, { className: "h-4 w-4" }) }) }),
551
697
  children
552
698
  ]
553
699
  }
554
700
  ));
555
701
  DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
556
- var DropdownMenuRadioItem = React4.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs3(
702
+ var DropdownMenuRadioItem = React7.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs5(
557
703
  DropdownMenuPrimitive.RadioItem,
558
704
  {
559
705
  ref,
@@ -563,13 +709,13 @@ var DropdownMenuRadioItem = React4.forwardRef(({ className, children, ...props }
563
709
  ),
564
710
  ...props,
565
711
  children: [
566
- /* @__PURE__ */ jsx3("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx3(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx3(Circle, { className: "h-2 w-2 fill-ods-accent" }) }) }),
712
+ /* @__PURE__ */ jsx6("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx6(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx6(Circle, { className: "h-2 w-2 fill-ods-accent" }) }) }),
567
713
  children
568
714
  ]
569
715
  }
570
716
  ));
571
717
  DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
572
- var DropdownMenuLabel = React4.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx3(
718
+ var DropdownMenuLabel = React7.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx6(
573
719
  DropdownMenuPrimitive.Label,
574
720
  {
575
721
  ref,
@@ -582,7 +728,7 @@ var DropdownMenuLabel = React4.forwardRef(({ className, inset, ...props }, ref)
582
728
  }
583
729
  ));
584
730
  DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
585
- var DropdownMenuSeparator = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx3(
731
+ var DropdownMenuSeparator = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx6(
586
732
  DropdownMenuPrimitive.Separator,
587
733
  {
588
734
  ref,
@@ -595,7 +741,7 @@ var DropdownMenuShortcut = ({
595
741
  className,
596
742
  ...props
597
743
  }) => {
598
- return /* @__PURE__ */ jsx3(
744
+ return /* @__PURE__ */ jsx6(
599
745
  "span",
600
746
  {
601
747
  className: cn("ml-auto text-xs tracking-widest text-ods-text-secondary opacity-60", className),
@@ -605,13 +751,161 @@ var DropdownMenuShortcut = ({
605
751
  };
606
752
  DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
607
753
 
754
+ // src/components/ui/skeleton.tsx
755
+ init_cn();
756
+ import * as React8 from "react";
757
+ import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
758
+ var Skeleton = React8.forwardRef(
759
+ ({ className, ...props }, ref) => {
760
+ return /* @__PURE__ */ jsx7(
761
+ "div",
762
+ {
763
+ ref,
764
+ className: cn(
765
+ "animate-pulse rounded-md bg-ods-border",
766
+ className
767
+ ),
768
+ ...props
769
+ }
770
+ );
771
+ }
772
+ );
773
+ Skeleton.displayName = "Skeleton";
774
+ var SkeletonText = React8.forwardRef(
775
+ ({ lines = 1, className, ...props }, ref) => {
776
+ return /* @__PURE__ */ jsx7("div", { ref, className: cn("space-y-2", className), ...props, children: Array.from({ length: lines }).map((_, i) => /* @__PURE__ */ jsx7(
777
+ Skeleton,
778
+ {
779
+ className: cn(
780
+ "h-4",
781
+ i === lines - 1 && lines > 1 && "w-3/4"
782
+ // Last line shorter for multi-line
783
+ )
784
+ },
785
+ i
786
+ )) });
787
+ }
788
+ );
789
+ SkeletonText.displayName = "SkeletonText";
790
+ var SkeletonCard = React8.forwardRef(
791
+ ({ showImage = false, className, ...props }, ref) => {
792
+ return /* @__PURE__ */ jsxs6(
793
+ "div",
794
+ {
795
+ ref,
796
+ className: cn(
797
+ "rounded-lg border border-ods-border overflow-hidden",
798
+ className
799
+ ),
800
+ ...props,
801
+ children: [
802
+ showImage && /* @__PURE__ */ jsx7(Skeleton, { className: "h-48 w-full" }),
803
+ /* @__PURE__ */ jsxs6("div", { className: "p-6", children: [
804
+ /* @__PURE__ */ jsx7(Skeleton, { className: "h-6 w-3/4 mb-4" }),
805
+ /* @__PURE__ */ jsx7(SkeletonText, { lines: 3 })
806
+ ] })
807
+ ]
808
+ }
809
+ );
810
+ }
811
+ );
812
+ SkeletonCard.displayName = "SkeletonCard";
813
+ var SkeletonGrid = React8.forwardRef(
814
+ ({ columns = 3, items = 6, showImages = false, className, ...props }, ref) => {
815
+ return /* @__PURE__ */ jsx7(
816
+ "div",
817
+ {
818
+ ref,
819
+ className: cn(
820
+ `grid grid-cols-1 gap-6`,
821
+ columns === 2 && "md:grid-cols-2",
822
+ columns === 3 && "md:grid-cols-3",
823
+ columns === 4 && "md:grid-cols-4",
824
+ className
825
+ ),
826
+ ...props,
827
+ children: Array.from({ length: items }).map((_, i) => /* @__PURE__ */ jsx7(SkeletonCard, { showImage: showImages }, i))
828
+ }
829
+ );
830
+ }
831
+ );
832
+ SkeletonGrid.displayName = "SkeletonGrid";
833
+ var SkeletonButton = React8.forwardRef(
834
+ ({ size = "default", className, ...props }, ref) => {
835
+ const sizeClasses = {
836
+ sm: "h-8 w-20",
837
+ default: "h-10 w-32",
838
+ lg: "h-12 w-40"
839
+ };
840
+ return /* @__PURE__ */ jsx7(
841
+ Skeleton,
842
+ {
843
+ ref,
844
+ className: cn(
845
+ "rounded-lg",
846
+ sizeClasses[size],
847
+ className
848
+ ),
849
+ ...props
850
+ }
851
+ );
852
+ }
853
+ );
854
+ SkeletonButton.displayName = "SkeletonButton";
855
+ var SkeletonHeading = React8.forwardRef(
856
+ ({ level = 1, className, ...props }, ref) => {
857
+ const heightClasses = {
858
+ 1: "h-12",
859
+ 2: "h-10",
860
+ 3: "h-8",
861
+ 4: "h-7",
862
+ 5: "h-6",
863
+ 6: "h-5"
864
+ };
865
+ return /* @__PURE__ */ jsx7(
866
+ Skeleton,
867
+ {
868
+ ref,
869
+ className: cn(
870
+ heightClasses[level],
871
+ "w-3/4",
872
+ className
873
+ ),
874
+ ...props
875
+ }
876
+ );
877
+ }
878
+ );
879
+ SkeletonHeading.displayName = "SkeletonHeading";
880
+ var SkeletonList = React8.forwardRef(
881
+ ({ items = 5, className, ...props }, ref) => {
882
+ return /* @__PURE__ */ jsx7("div", { ref, className: cn("space-y-3", className), ...props, children: Array.from({ length: items }).map((_, i) => /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-3", children: [
883
+ /* @__PURE__ */ jsx7(Skeleton, { className: "h-10 w-10 rounded-full flex-shrink-0" }),
884
+ /* @__PURE__ */ jsxs6("div", { className: "flex-1", children: [
885
+ /* @__PURE__ */ jsx7(Skeleton, { className: "h-4 w-1/3 mb-1" }),
886
+ /* @__PURE__ */ jsx7(Skeleton, { className: "h-3 w-1/2" })
887
+ ] })
888
+ ] }, i)) });
889
+ }
890
+ );
891
+ SkeletonList.displayName = "SkeletonList";
892
+ var SkeletonNavigation = React8.forwardRef(
893
+ ({ items = 6, className, ...props }, ref) => {
894
+ return /* @__PURE__ */ jsx7("div", { ref, className: cn("flex items-center gap-6", className), ...props, children: Array.from({ length: items }).map((_, i) => /* @__PURE__ */ jsx7(Skeleton, { className: "h-5 w-20" }, i)) });
895
+ }
896
+ );
897
+ SkeletonNavigation.displayName = "SkeletonNavigation";
898
+
608
899
  export {
900
+ FieldWrapper,
901
+ Input,
609
902
  buttonVariants,
610
903
  Button,
611
904
  init_button,
612
905
  SplitButton,
613
906
  init_split_button,
614
907
  init_button2,
908
+ Checkbox,
615
909
  PortalContainerContext,
616
910
  usePortalContainer,
617
911
  DropdownMenu,
@@ -628,6 +922,14 @@ export {
628
922
  DropdownMenuRadioItem,
629
923
  DropdownMenuLabel,
630
924
  DropdownMenuSeparator,
631
- DropdownMenuShortcut
925
+ DropdownMenuShortcut,
926
+ Skeleton,
927
+ SkeletonText,
928
+ SkeletonCard,
929
+ SkeletonGrid,
930
+ SkeletonButton,
931
+ SkeletonHeading,
932
+ SkeletonList,
933
+ SkeletonNavigation
632
934
  };
633
- //# sourceMappingURL=chunk-EL6QLAWX.js.map
935
+ //# sourceMappingURL=chunk-JALO4TAZ.js.map