@flamingo-stack/openframe-frontend-core 0.0.295 → 0.0.296-snapshot.20260621021605

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 (291) 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-7KXD7CWD.js → chunk-3JIQVE7T.js} +9 -15
  5. package/dist/{chunk-7KXD7CWD.js.map → chunk-3JIQVE7T.js.map} +1 -1
  6. package/dist/{chunk-FT4FCV7L.cjs → chunk-4PSQS3SW.cjs} +7 -9
  7. package/dist/chunk-4PSQS3SW.cjs.map +1 -0
  8. package/dist/{chunk-OOKKGOPQ.js → chunk-4TLE6VLU.js} +30 -24
  9. package/dist/chunk-4TLE6VLU.js.map +1 -0
  10. package/dist/{chunk-6IBA2MQV.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-5O6N3BKR.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-XXI7BNB6.cjs → chunk-FQOTC3UU.cjs} +321 -18
  27. package/dist/chunk-FQOTC3UU.cjs.map +1 -0
  28. package/dist/{chunk-INDQMNP6.cjs → chunk-GUTS7HGA.cjs} +11658 -2146
  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-HOVJGXF7.js → chunk-IL47XWV5.js} +8 -14
  33. package/dist/{chunk-HOVJGXF7.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-5IJ46KAV.js → chunk-JALO4TAZ.js} +360 -57
  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-J3RDKZ32.js → chunk-L7ULJKG7.js} +6 -10
  41. package/dist/{chunk-J3RDKZ32.js.map → chunk-L7ULJKG7.js.map} +1 -1
  42. package/dist/{chunk-6BZEAPNT.js → chunk-PC746XCO.js} +15120 -5608
  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-ETACGX2A.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-EJXHZX2E.js → chunk-X4DOXQRT.js} +4 -6
  54. package/dist/{chunk-EJXHZX2E.js.map → chunk-X4DOXQRT.js.map} +1 -1
  55. package/dist/{chunk-A2YL7QRX.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/chat-container.d.ts.map +1 -1
  66. package/dist/components/chat/error-message-display.d.ts.map +1 -1
  67. package/dist/components/chat/index.cjs +8 -18
  68. package/dist/components/chat/index.cjs.map +1 -1
  69. package/dist/components/chat/index.js +75 -85
  70. package/dist/components/chat/types/component.types.d.ts +2 -0
  71. package/dist/components/chat/types/component.types.d.ts.map +1 -1
  72. package/dist/components/contact/index.cjs +8 -15
  73. package/dist/components/contact/index.cjs.map +1 -1
  74. package/dist/components/contact/index.js +7 -14
  75. package/dist/components/docs/doc-viewer.d.ts +39 -2
  76. package/dist/components/docs/doc-viewer.d.ts.map +1 -1
  77. package/dist/components/docs/docs-hub-page.d.ts +46 -0
  78. package/dist/components/docs/docs-hub-page.d.ts.map +1 -0
  79. package/dist/components/docs/index.cjs +17 -9
  80. package/dist/components/docs/index.cjs.map +1 -1
  81. package/dist/components/docs/index.d.ts +4 -0
  82. package/dist/components/docs/index.d.ts.map +1 -1
  83. package/dist/components/docs/index.js +16 -8
  84. package/dist/components/docs/skeletons.d.ts +32 -0
  85. package/dist/components/docs/skeletons.d.ts.map +1 -0
  86. package/dist/components/docs/use-docs-resolve-link.d.ts +20 -0
  87. package/dist/components/docs/use-docs-resolve-link.d.ts.map +1 -0
  88. package/dist/components/docs/use-document-tree.d.ts.map +1 -1
  89. package/dist/components/embeds/embed-container.d.ts +37 -0
  90. package/dist/components/embeds/embed-container.d.ts.map +1 -0
  91. package/dist/components/embeds/embed-iframe.d.ts.map +1 -1
  92. package/dist/components/embeds/file-download-card.d.ts +18 -0
  93. package/dist/components/embeds/file-download-card.d.ts.map +1 -0
  94. package/dist/components/embeds/index.cjs +38 -15
  95. package/dist/components/embeds/index.cjs.map +1 -1
  96. package/dist/components/embeds/index.d.ts +8 -0
  97. package/dist/components/embeds/index.d.ts.map +1 -1
  98. package/dist/components/embeds/index.js +40 -17
  99. package/dist/components/embeds/linkedin-embed-client.d.ts +8 -0
  100. package/dist/components/embeds/linkedin-embed-client.d.ts.map +1 -0
  101. package/dist/components/embeds/markdown-image.d.ts +5 -0
  102. package/dist/components/embeds/markdown-image.d.ts.map +1 -0
  103. package/dist/components/embeds/reddit-embed-client.d.ts +7 -0
  104. package/dist/components/embeds/reddit-embed-client.d.ts.map +1 -0
  105. package/dist/components/embeds/rich-markdown-runtime.d.ts +46 -0
  106. package/dist/components/embeds/rich-markdown-runtime.d.ts.map +1 -0
  107. package/dist/components/embeds/twitter-embed-client.d.ts +8 -0
  108. package/dist/components/embeds/twitter-embed-client.d.ts.map +1 -0
  109. package/dist/components/faq/index.cjs +9 -16
  110. package/dist/components/faq/index.cjs.map +1 -1
  111. package/dist/components/faq/index.js +8 -15
  112. package/dist/components/features/index.cjs +8 -16
  113. package/dist/components/features/index.cjs.map +1 -1
  114. package/dist/components/features/index.js +24 -32
  115. package/dist/components/features/notifications/notification-drawer.d.ts.map +1 -1
  116. package/dist/components/features/notifications/notifications-context.d.ts +5 -1
  117. package/dist/components/features/notifications/notifications-context.d.ts.map +1 -1
  118. package/dist/components/index.cjs +257 -452
  119. package/dist/components/index.cjs.map +1 -1
  120. package/dist/components/index.js +781 -976
  121. package/dist/components/index.js.map +1 -1
  122. package/dist/components/layout/page-header.d.ts +78 -0
  123. package/dist/components/layout/page-header.d.ts.map +1 -0
  124. package/dist/components/layout/page-layout.d.ts +10 -1
  125. package/dist/components/layout/page-layout.d.ts.map +1 -1
  126. package/dist/components/layout/page-with-header.d.ts +67 -0
  127. package/dist/components/layout/page-with-header.d.ts.map +1 -0
  128. package/dist/components/layout/title-block.d.ts +17 -1
  129. package/dist/components/layout/title-block.d.ts.map +1 -1
  130. package/dist/components/navigation/index.cjs +7 -15
  131. package/dist/components/navigation/index.cjs.map +1 -1
  132. package/dist/components/navigation/index.js +9 -17
  133. package/dist/components/onboarding-guides/index.cjs +35 -36
  134. package/dist/components/onboarding-guides/index.cjs.map +1 -1
  135. package/dist/components/onboarding-guides/index.js +13 -14
  136. package/dist/components/onboarding-guides/index.js.map +1 -1
  137. package/dist/components/onboarding-guides/onboarding-guide-detail-view.d.ts +1 -1
  138. package/dist/components/onboarding-guides/onboarding-guide-detail-view.d.ts.map +1 -1
  139. package/dist/components/related-content/index.cjs +9 -16
  140. package/dist/components/related-content/index.cjs.map +1 -1
  141. package/dist/components/related-content/index.js +8 -15
  142. package/dist/components/shared/dev-section/dev-section-page.d.ts +9 -0
  143. package/dist/components/shared/dev-section/dev-section-page.d.ts.map +1 -1
  144. package/dist/components/shared/dev-section/dev-section-view.d.ts.map +1 -1
  145. package/dist/components/shared/dev-section/index.d.ts +1 -1
  146. package/dist/components/shared/dev-section/index.d.ts.map +1 -1
  147. package/dist/components/shared/doc-search/use-doc-search.d.ts.map +1 -1
  148. package/dist/components/shared/legal-document/legal-document-page.d.ts.map +1 -1
  149. package/dist/components/shared/product-release/release-detail-page.d.ts.map +1 -1
  150. package/dist/components/tickets/index.cjs +100 -112
  151. package/dist/components/tickets/index.cjs.map +1 -1
  152. package/dist/components/tickets/index.js +20 -32
  153. package/dist/components/tickets/index.js.map +1 -1
  154. package/dist/components/ui/button/split-button.d.ts.map +1 -1
  155. package/dist/components/ui/file-manager/index.cjs +50 -52
  156. package/dist/components/ui/file-manager/index.cjs.map +1 -1
  157. package/dist/components/ui/file-manager/index.js +4 -6
  158. package/dist/components/ui/file-manager/index.js.map +1 -1
  159. package/dist/components/ui/index.cjs +13 -19
  160. package/dist/components/ui/index.cjs.map +1 -1
  161. package/dist/components/ui/index.d.ts +2 -0
  162. package/dist/components/ui/index.d.ts.map +1 -1
  163. package/dist/components/ui/index.js +133 -139
  164. package/dist/components/ui/release-changelog-section.d.ts +6 -2
  165. package/dist/components/ui/release-changelog-section.d.ts.map +1 -1
  166. package/dist/components/ui/rich-markdown-renderer.d.ts +34 -0
  167. package/dist/components/ui/rich-markdown-renderer.d.ts.map +1 -0
  168. package/dist/components/ui/simple-markdown-renderer.d.ts +2 -8
  169. package/dist/components/ui/simple-markdown-renderer.d.ts.map +1 -1
  170. package/dist/contexts/chat-runtime-context.d.ts +14 -0
  171. package/dist/contexts/chat-runtime-context.d.ts.map +1 -1
  172. package/dist/contexts/index.cjs +3 -3
  173. package/dist/contexts/index.js +5 -5
  174. package/dist/embed-shims/index.cjs +3 -3
  175. package/dist/embed-shims/index.cjs.map +1 -1
  176. package/dist/embed-shims/index.js +4 -4
  177. package/dist/hooks/index.cjs +4 -9
  178. package/dist/hooks/index.cjs.map +1 -1
  179. package/dist/hooks/index.js +6 -11
  180. package/dist/index.cjs +14 -20
  181. package/dist/index.cjs.map +1 -1
  182. package/dist/index.js +362 -368
  183. package/dist/types/doc-source.d.ts +31 -1
  184. package/dist/types/doc-source.d.ts.map +1 -1
  185. package/dist/utils/index.cjs +4 -0
  186. package/dist/utils/index.cjs.map +1 -1
  187. package/dist/utils/index.d.ts +1 -0
  188. package/dist/utils/index.d.ts.map +1 -1
  189. package/dist/utils/index.js +4 -1
  190. package/dist/utils/index.js.map +1 -1
  191. package/dist/utils/page-header-constants.d.ts +15 -0
  192. package/dist/utils/page-header-constants.d.ts.map +1 -0
  193. package/dist/utils/social-embed-cache.d.ts +29 -0
  194. package/dist/utils/social-embed-cache.d.ts.map +1 -0
  195. package/package.json +7 -1
  196. package/src/components/case-studies/index.ts +4 -0
  197. package/src/components/case-studies/share-experience-section.tsx +185 -0
  198. package/src/components/chat/chat-container.tsx +5 -7
  199. package/src/components/chat/embeddable-chat.tsx +1 -1
  200. package/src/components/chat/error-message-display.tsx +49 -31
  201. package/src/components/chat/types/component.types.ts +2 -0
  202. package/src/components/docs/doc-viewer.tsx +111 -19
  203. package/src/components/docs/docs-hub-page.tsx +149 -0
  204. package/src/components/docs/index.ts +17 -0
  205. package/src/components/docs/skeletons.tsx +138 -0
  206. package/src/components/docs/use-docs-resolve-link.ts +52 -0
  207. package/src/components/docs/use-document-tree.ts +21 -0
  208. package/src/components/embeds/embed-container.tsx +80 -0
  209. package/src/components/embeds/embed-iframe.tsx +7 -9
  210. package/src/components/embeds/file-download-card.tsx +54 -0
  211. package/src/components/embeds/index.ts +30 -0
  212. package/src/components/embeds/linkedin-embed-client.tsx +100 -0
  213. package/src/components/embeds/markdown-image.tsx +88 -0
  214. package/src/components/embeds/og-link-preview.tsx +13 -13
  215. package/src/components/embeds/reddit-embed-client.tsx +550 -0
  216. package/src/components/embeds/rich-markdown-runtime.tsx +79 -0
  217. package/src/components/embeds/twitter-embed-client.tsx +308 -0
  218. package/src/components/features/notifications/notification-drawer.tsx +18 -7
  219. package/src/components/features/notifications/notifications-context.tsx +7 -0
  220. package/src/components/layout/page-header.tsx +182 -0
  221. package/src/components/layout/page-layout.tsx +14 -1
  222. package/src/components/layout/page-with-header.tsx +110 -0
  223. package/src/components/layout/title-block.tsx +40 -62
  224. package/src/components/onboarding-guides/onboarding-guide-detail-view.tsx +3 -3
  225. package/src/components/shared/dev-section/dev-section-page.tsx +9 -1
  226. package/src/components/shared/dev-section/dev-section-view.tsx +14 -9
  227. package/src/components/shared/dev-section/index.ts +1 -1
  228. package/src/components/shared/doc-search/use-doc-search.ts +7 -3
  229. package/src/components/shared/legal-document/legal-document-page.tsx +2 -2
  230. package/src/components/shared/product-release/release-detail-page.tsx +6 -4
  231. package/src/components/ui/button/split-button.tsx +5 -2
  232. package/src/components/ui/index.ts +2 -0
  233. package/src/components/ui/release-changelog-section.tsx +7 -2
  234. package/src/components/ui/rich-markdown-renderer.tsx +1203 -0
  235. package/src/components/ui/simple-markdown-renderer.tsx +7 -11
  236. package/src/contexts/chat-runtime-context.tsx +14 -0
  237. package/src/stories/NotificationDrawer.stories.tsx +2 -0
  238. package/src/types/doc-source.ts +33 -1
  239. package/src/utils/index.ts +1 -0
  240. package/src/utils/page-header-constants.ts +15 -0
  241. package/src/utils/social-embed-cache.ts +391 -0
  242. package/dist/chunk-26PKDALD.js +0 -2379
  243. package/dist/chunk-26PKDALD.js.map +0 -1
  244. package/dist/chunk-3MCHAFHB.js +0 -89
  245. package/dist/chunk-3MCHAFHB.js.map +0 -1
  246. package/dist/chunk-3XIB4VKS.cjs +0 -619
  247. package/dist/chunk-3XIB4VKS.cjs.map +0 -1
  248. package/dist/chunk-4W7NYJ3B.cjs +0 -3009
  249. package/dist/chunk-4W7NYJ3B.cjs.map +0 -1
  250. package/dist/chunk-5E2HOSSH.cjs.map +0 -1
  251. package/dist/chunk-5IJ46KAV.js.map +0 -1
  252. package/dist/chunk-5O6N3BKR.cjs.map +0 -1
  253. package/dist/chunk-6BZEAPNT.js.map +0 -1
  254. package/dist/chunk-6IBA2MQV.cjs.map +0 -1
  255. package/dist/chunk-6JINAOI7.cjs +0 -311
  256. package/dist/chunk-6JINAOI7.cjs.map +0 -1
  257. package/dist/chunk-7RIYT7ZH.js.map +0 -1
  258. package/dist/chunk-A2YL7QRX.cjs.map +0 -1
  259. package/dist/chunk-AQOWFSMB.cjs.map +0 -1
  260. package/dist/chunk-E4XABBSU.js.map +0 -1
  261. package/dist/chunk-ETACGX2A.cjs.map +0 -1
  262. package/dist/chunk-EYEW6PTA.cjs.map +0 -1
  263. package/dist/chunk-FQJK446R.js +0 -1606
  264. package/dist/chunk-FQJK446R.js.map +0 -1
  265. package/dist/chunk-FT4FCV7L.cjs.map +0 -1
  266. package/dist/chunk-INDQMNP6.cjs.map +0 -1
  267. package/dist/chunk-J54Z3OCR.cjs +0 -1606
  268. package/dist/chunk-J54Z3OCR.cjs.map +0 -1
  269. package/dist/chunk-KXCRGTRN.cjs +0 -2379
  270. package/dist/chunk-KXCRGTRN.cjs.map +0 -1
  271. package/dist/chunk-LCNMR277.js.map +0 -1
  272. package/dist/chunk-LFGGF7OT.cjs +0 -449
  273. package/dist/chunk-LFGGF7OT.cjs.map +0 -1
  274. package/dist/chunk-M2OCXTNT.js +0 -311
  275. package/dist/chunk-M2OCXTNT.js.map +0 -1
  276. package/dist/chunk-NSPOYUBH.js +0 -3009
  277. package/dist/chunk-NSPOYUBH.js.map +0 -1
  278. package/dist/chunk-OOKKGOPQ.js.map +0 -1
  279. package/dist/chunk-OQ6X7ZOC.js +0 -449
  280. package/dist/chunk-OQ6X7ZOC.js.map +0 -1
  281. package/dist/chunk-POKKCWKF.js +0 -354
  282. package/dist/chunk-POKKCWKF.js.map +0 -1
  283. package/dist/chunk-TFSYSWPS.cjs +0 -89
  284. package/dist/chunk-TFSYSWPS.cjs.map +0 -1
  285. package/dist/chunk-XXI7BNB6.cjs.map +0 -1
  286. package/dist/chunk-YD43AKI5.js +0 -619
  287. package/dist/chunk-YD43AKI5.js.map +0 -1
  288. package/dist/chunk-YETA25JW.cjs +0 -354
  289. package/dist/chunk-YETA25JW.cjs.map +0 -1
  290. package/dist/chunk-YIGPRLQY.cjs.map +0 -1
  291. /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";
294
- function Half({ variant, size, side, href, openInNewTab, prefetch, onClick, disabled, type = "button", ariaLabel, children }) {
295
- const classes = splitHalfVariants({ variant, size, side });
295
+ import React4 from "react";
296
+ import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
297
+ function Half({ variant, size, side, href, openInNewTab, prefetch, onClick, disabled, grow, type = "button", ariaLabel, children }) {
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,
@@ -414,16 +417,17 @@ var init_split_button = __esm({
414
417
  prefetch,
415
418
  onClick,
416
419
  disabled: disabled || mainDisabled,
420
+ grow: fullWidth,
417
421
  type,
418
422
  ariaLabel,
419
423
  children: [
420
- leftIcon && /* @__PURE__ */ jsx2("span", { className: "inline-flex items-center", children: leftIcon }),
421
- /* @__PURE__ */ jsx2("span", { children }),
422
- 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 })
423
427
  ]
424
428
  }
425
429
  ),
426
- /* @__PURE__ */ jsx2(
430
+ /* @__PURE__ */ jsx4(
427
431
  Half,
428
432
  {
429
433
  variant,
@@ -435,7 +439,7 @@ var init_split_button = __esm({
435
439
  onClick: iconAction.onClick,
436
440
  disabled: disabled || iconAction.disabled,
437
441
  ariaLabel: iconAction["aria-label"],
438
- 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 })
439
443
  }
440
444
  )
441
445
  ]
@@ -454,30 +458,173 @@ var init_button2 = __esm({
454
458
  }
455
459
  });
456
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
+
457
604
  // src/components/ui/dropdown-menu.tsx
458
605
  init_cn();
459
- import * as React4 from "react";
606
+ import * as React7 from "react";
460
607
  import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
461
608
  import { Check, ChevronRight, Circle } from "lucide-react";
462
609
 
463
610
  // src/components/ui/portal-container.tsx
464
- import * as React3 from "react";
465
- var PortalContainerContext = React3.createContext(
611
+ import * as React6 from "react";
612
+ var PortalContainerContext = React6.createContext(
466
613
  null
467
614
  );
468
615
  function usePortalContainer() {
469
- return React3.useContext(PortalContainerContext);
616
+ return React6.useContext(PortalContainerContext);
470
617
  }
471
618
 
472
619
  // src/components/ui/dropdown-menu.tsx
473
- import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
620
+ import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
474
621
  var DropdownMenu = DropdownMenuPrimitive.Root;
475
622
  var DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
476
623
  var DropdownMenuGroup = DropdownMenuPrimitive.Group;
477
624
  var DropdownMenuPortal = DropdownMenuPrimitive.Portal;
478
625
  var DropdownMenuSub = DropdownMenuPrimitive.Sub;
479
626
  var DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
480
- var DropdownMenuSubTrigger = React4.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs3(
627
+ var DropdownMenuSubTrigger = React7.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs5(
481
628
  DropdownMenuPrimitive.SubTrigger,
482
629
  {
483
630
  ref,
@@ -489,12 +636,12 @@ var DropdownMenuSubTrigger = React4.forwardRef(({ className, inset, children, ..
489
636
  ...props,
490
637
  children: [
491
638
  children,
492
- /* @__PURE__ */ jsx3(ChevronRight, { className: "ml-auto" })
639
+ /* @__PURE__ */ jsx6(ChevronRight, { className: "ml-auto" })
493
640
  ]
494
641
  }
495
642
  ));
496
643
  DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
497
- var DropdownMenuSubContent = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx3(
644
+ var DropdownMenuSubContent = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx6(
498
645
  DropdownMenuPrimitive.SubContent,
499
646
  {
500
647
  ref,
@@ -506,9 +653,9 @@ var DropdownMenuSubContent = React4.forwardRef(({ className, ...props }, ref) =>
506
653
  }
507
654
  ));
508
655
  DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
509
- var DropdownMenuContent = React4.forwardRef(({ className, sideOffset = 4, ...props }, ref) => {
656
+ var DropdownMenuContent = React7.forwardRef(({ className, sideOffset = 4, ...props }, ref) => {
510
657
  const container = usePortalContainer();
511
- 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(
512
659
  DropdownMenuPrimitive.Content,
513
660
  {
514
661
  ref,
@@ -522,7 +669,7 @@ var DropdownMenuContent = React4.forwardRef(({ className, sideOffset = 4, ...pro
522
669
  ) });
523
670
  });
524
671
  DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
525
- var DropdownMenuItem = React4.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx3(
672
+ var DropdownMenuItem = React7.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx6(
526
673
  DropdownMenuPrimitive.Item,
527
674
  {
528
675
  ref,
@@ -535,7 +682,7 @@ var DropdownMenuItem = React4.forwardRef(({ className, inset, ...props }, ref) =
535
682
  }
536
683
  ));
537
684
  DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
538
- var DropdownMenuCheckboxItem = React4.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs3(
685
+ var DropdownMenuCheckboxItem = React7.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs5(
539
686
  DropdownMenuPrimitive.CheckboxItem,
540
687
  {
541
688
  ref,
@@ -546,13 +693,13 @@ var DropdownMenuCheckboxItem = React4.forwardRef(({ className, children, checked
546
693
  checked,
547
694
  ...props,
548
695
  children: [
549
- /* @__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" }) }) }),
550
697
  children
551
698
  ]
552
699
  }
553
700
  ));
554
701
  DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
555
- var DropdownMenuRadioItem = React4.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs3(
702
+ var DropdownMenuRadioItem = React7.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs5(
556
703
  DropdownMenuPrimitive.RadioItem,
557
704
  {
558
705
  ref,
@@ -562,13 +709,13 @@ var DropdownMenuRadioItem = React4.forwardRef(({ className, children, ...props }
562
709
  ),
563
710
  ...props,
564
711
  children: [
565
- /* @__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" }) }) }),
566
713
  children
567
714
  ]
568
715
  }
569
716
  ));
570
717
  DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
571
- var DropdownMenuLabel = React4.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx3(
718
+ var DropdownMenuLabel = React7.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx6(
572
719
  DropdownMenuPrimitive.Label,
573
720
  {
574
721
  ref,
@@ -581,7 +728,7 @@ var DropdownMenuLabel = React4.forwardRef(({ className, inset, ...props }, ref)
581
728
  }
582
729
  ));
583
730
  DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
584
- var DropdownMenuSeparator = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx3(
731
+ var DropdownMenuSeparator = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx6(
585
732
  DropdownMenuPrimitive.Separator,
586
733
  {
587
734
  ref,
@@ -594,7 +741,7 @@ var DropdownMenuShortcut = ({
594
741
  className,
595
742
  ...props
596
743
  }) => {
597
- return /* @__PURE__ */ jsx3(
744
+ return /* @__PURE__ */ jsx6(
598
745
  "span",
599
746
  {
600
747
  className: cn("ml-auto text-xs tracking-widest text-ods-text-secondary opacity-60", className),
@@ -604,13 +751,161 @@ var DropdownMenuShortcut = ({
604
751
  };
605
752
  DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
606
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
+
607
899
  export {
900
+ FieldWrapper,
901
+ Input,
608
902
  buttonVariants,
609
903
  Button,
610
904
  init_button,
611
905
  SplitButton,
612
906
  init_split_button,
613
907
  init_button2,
908
+ Checkbox,
614
909
  PortalContainerContext,
615
910
  usePortalContainer,
616
911
  DropdownMenu,
@@ -627,6 +922,14 @@ export {
627
922
  DropdownMenuRadioItem,
628
923
  DropdownMenuLabel,
629
924
  DropdownMenuSeparator,
630
- DropdownMenuShortcut
925
+ DropdownMenuShortcut,
926
+ Skeleton,
927
+ SkeletonText,
928
+ SkeletonCard,
929
+ SkeletonGrid,
930
+ SkeletonButton,
931
+ SkeletonHeading,
932
+ SkeletonList,
933
+ SkeletonNavigation
631
934
  };
632
- //# sourceMappingURL=chunk-5IJ46KAV.js.map
935
+ //# sourceMappingURL=chunk-JALO4TAZ.js.map