@questpie/admin 1.1.1 → 2.0.0

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 (965) hide show
  1. package/README.md +245 -474
  2. package/dist/_virtual/rolldown_runtime.mjs +18 -0
  3. package/dist/augmentation.d.mts +315 -0
  4. package/dist/augmentation.d.mts.map +1 -0
  5. package/dist/client/blocks/block-registry.d.mts +199 -0
  6. package/dist/client/blocks/block-registry.d.mts.map +1 -0
  7. package/dist/client/blocks/block-registry.mjs +88 -0
  8. package/dist/client/blocks/block-registry.mjs.map +1 -0
  9. package/dist/client/blocks/block-renderer.d.mts +52 -0
  10. package/dist/client/blocks/block-renderer.d.mts.map +1 -0
  11. package/dist/client/blocks/block-renderer.mjs +71 -0
  12. package/dist/client/blocks/block-renderer.mjs.map +1 -0
  13. package/dist/client/blocks/index.d.mts +4 -0
  14. package/dist/client/blocks/prefetch.d.mts +45 -0
  15. package/dist/client/blocks/prefetch.d.mts.map +1 -0
  16. package/dist/client/blocks/prefetch.mjs +26 -0
  17. package/dist/client/blocks/prefetch.mjs.map +1 -0
  18. package/dist/client/blocks/types.d.mts +69 -0
  19. package/dist/client/blocks/types.d.mts.map +1 -0
  20. package/dist/client/blocks/types.mjs +20 -0
  21. package/dist/client/blocks/types.mjs.map +1 -0
  22. package/dist/client/builder/admin-builder.d.mts +112 -0
  23. package/dist/client/builder/admin-builder.d.mts.map +1 -0
  24. package/dist/client/builder/admin-builder.mjs +185 -0
  25. package/dist/client/builder/admin-builder.mjs.map +1 -0
  26. package/dist/client/builder/admin-types.d.mts +73 -0
  27. package/dist/client/builder/admin-types.d.mts.map +1 -0
  28. package/dist/client/builder/admin.d.mts +121 -0
  29. package/dist/client/builder/admin.d.mts.map +1 -0
  30. package/dist/client/builder/admin.mjs +160 -0
  31. package/dist/client/builder/admin.mjs.map +1 -0
  32. package/dist/client/builder/defaults/components.mjs +20 -0
  33. package/dist/client/builder/defaults/components.mjs.map +1 -0
  34. package/dist/client/builder/defaults/core.d.mts +354 -0
  35. package/dist/client/builder/defaults/core.d.mts.map +1 -0
  36. package/dist/client/builder/defaults/core.mjs +49 -0
  37. package/dist/client/builder/defaults/core.mjs.map +1 -0
  38. package/dist/client/builder/defaults/fields.mjs +328 -0
  39. package/dist/client/builder/defaults/fields.mjs.map +1 -0
  40. package/dist/client/builder/defaults/pages.mjs +58 -0
  41. package/dist/client/builder/defaults/pages.mjs.map +1 -0
  42. package/dist/client/builder/defaults/starter.d.mts +351 -0
  43. package/dist/client/builder/defaults/starter.d.mts.map +1 -0
  44. package/dist/client/builder/defaults/starter.mjs +28 -0
  45. package/dist/client/builder/defaults/starter.mjs.map +1 -0
  46. package/dist/client/builder/defaults/views.mjs +27 -0
  47. package/dist/client/builder/defaults/views.mjs.map +1 -0
  48. package/dist/client/builder/defaults/widgets.mjs +31 -0
  49. package/dist/client/builder/defaults/widgets.mjs.map +1 -0
  50. package/dist/client/builder/field/field.d.mts +229 -0
  51. package/dist/client/builder/field/field.d.mts.map +1 -0
  52. package/dist/client/builder/field/field.mjs +83 -0
  53. package/dist/client/builder/field/field.mjs.map +1 -0
  54. package/dist/client/builder/index.d.mts +36 -0
  55. package/dist/client/builder/index.d.mts.map +1 -0
  56. package/dist/client/builder/page/page.d.mts +36 -0
  57. package/dist/client/builder/page/page.d.mts.map +1 -0
  58. package/dist/client/builder/page/page.mjs +27 -0
  59. package/dist/client/builder/page/page.mjs.map +1 -0
  60. package/dist/client/builder/proxies.d.mts +2 -0
  61. package/dist/client/builder/proxies.mjs +24 -0
  62. package/dist/client/builder/proxies.mjs.map +1 -0
  63. package/dist/client/builder/qa.d.mts +50 -0
  64. package/dist/client/builder/qa.d.mts.map +1 -0
  65. package/dist/client/builder/qa.mjs +42 -0
  66. package/dist/client/builder/qa.mjs.map +1 -0
  67. package/dist/client/builder/registry.d.mts +70 -0
  68. package/dist/client/builder/registry.d.mts.map +1 -0
  69. package/dist/client/builder/types/action-registry.d.mts +2 -0
  70. package/dist/client/builder/types/action-registry.mjs +142 -0
  71. package/dist/client/builder/types/action-registry.mjs.map +1 -0
  72. package/dist/client/builder/types/action-types.d.mts +253 -0
  73. package/dist/client/builder/types/action-types.d.mts.map +1 -0
  74. package/dist/client/builder/types/collection-types.d.mts +199 -0
  75. package/dist/client/builder/types/collection-types.d.mts.map +1 -0
  76. package/dist/client/builder/types/collection-types.mjs +11 -0
  77. package/dist/client/builder/types/collection-types.mjs.map +1 -0
  78. package/dist/client/builder/types/common.d.mts +60 -0
  79. package/dist/client/builder/types/common.d.mts.map +1 -0
  80. package/dist/client/builder/types/field-types.d.mts +593 -0
  81. package/dist/client/builder/types/field-types.d.mts.map +1 -0
  82. package/dist/client/builder/types/field-types.mjs +19 -0
  83. package/dist/client/builder/types/field-types.mjs.map +1 -0
  84. package/dist/client/builder/types/global-types.d.mts +22 -0
  85. package/dist/client/builder/types/global-types.d.mts.map +1 -0
  86. package/dist/client/builder/types/ui-config.d.mts +160 -0
  87. package/dist/client/builder/types/ui-config.d.mts.map +1 -0
  88. package/dist/client/builder/types/views.d.mts +89 -0
  89. package/dist/client/builder/types/views.d.mts.map +1 -0
  90. package/dist/client/builder/types/widget-types.d.mts +563 -0
  91. package/dist/client/builder/types/widget-types.d.mts.map +1 -0
  92. package/dist/client/builder/validation.d.mts +3 -0
  93. package/dist/client/builder/validation.mjs +208 -0
  94. package/dist/client/builder/validation.mjs.map +1 -0
  95. package/dist/client/builder/view/view.d.mts +129 -0
  96. package/dist/client/builder/view/view.d.mts.map +1 -0
  97. package/dist/client/builder/view/view.mjs +109 -0
  98. package/dist/client/builder/view/view.mjs.map +1 -0
  99. package/dist/client/builder/widget/widget.d.mts +33 -0
  100. package/dist/client/builder/widget/widget.d.mts.map +1 -0
  101. package/dist/client/builder/widget/widget.mjs +26 -0
  102. package/dist/client/builder/widget/widget.mjs.map +1 -0
  103. package/dist/client/components/actions/action-button.d.mts +2 -0
  104. package/dist/client/components/actions/action-button.mjs +135 -0
  105. package/dist/client/components/actions/action-button.mjs.map +1 -0
  106. package/dist/client/components/actions/action-dialog.d.mts +2 -0
  107. package/dist/client/components/actions/action-dialog.mjs +264 -0
  108. package/dist/client/components/actions/action-dialog.mjs.map +1 -0
  109. package/dist/client/components/actions/confirmation-dialog.d.mts +2 -0
  110. package/dist/client/components/actions/confirmation-dialog.mjs +82 -0
  111. package/dist/client/components/actions/confirmation-dialog.mjs.map +1 -0
  112. package/dist/client/components/actions/header-actions.d.mts +2 -0
  113. package/dist/client/components/actions/header-actions.mjs +117 -0
  114. package/dist/client/components/actions/header-actions.mjs.map +1 -0
  115. package/dist/client/components/actions/index.d.mts +4 -0
  116. package/dist/client/components/admin-link.d.mts +67 -0
  117. package/dist/client/components/admin-link.d.mts.map +1 -0
  118. package/dist/client/components/admin-link.mjs +92 -0
  119. package/dist/client/components/admin-link.mjs.map +1 -0
  120. package/dist/client/components/auth/auth-guard.d.mts +51 -0
  121. package/dist/client/components/auth/auth-guard.d.mts.map +1 -0
  122. package/dist/client/components/auth/auth-guard.mjs +60 -0
  123. package/dist/client/components/auth/auth-guard.mjs.map +1 -0
  124. package/dist/client/components/auth/auth-loading.d.mts +36 -0
  125. package/dist/client/components/auth/auth-loading.d.mts.map +1 -0
  126. package/dist/client/components/auth/auth-loading.mjs +27 -0
  127. package/dist/client/components/auth/auth-loading.mjs.map +1 -0
  128. package/dist/client/components/auth/index.d.mts +2 -0
  129. package/dist/client/components/blocks/block-canvas.mjs +90 -0
  130. package/dist/client/components/blocks/block-canvas.mjs.map +1 -0
  131. package/dist/client/components/blocks/block-editor-context.mjs +58 -0
  132. package/dist/client/components/blocks/block-editor-context.mjs.map +1 -0
  133. package/dist/client/components/blocks/block-editor-layout.mjs +82 -0
  134. package/dist/client/components/blocks/block-editor-layout.mjs.map +1 -0
  135. package/dist/client/components/blocks/block-editor-provider.mjs +155 -0
  136. package/dist/client/components/blocks/block-editor-provider.mjs.map +1 -0
  137. package/dist/client/components/blocks/block-fields-renderer.mjs +70 -0
  138. package/dist/client/components/blocks/block-fields-renderer.mjs.map +1 -0
  139. package/dist/client/components/blocks/block-insert-button.mjs +72 -0
  140. package/dist/client/components/blocks/block-insert-button.mjs.map +1 -0
  141. package/dist/client/components/blocks/block-item-menu.mjs +161 -0
  142. package/dist/client/components/blocks/block-item-menu.mjs.map +1 -0
  143. package/dist/client/components/blocks/block-item.mjs +187 -0
  144. package/dist/client/components/blocks/block-item.mjs.map +1 -0
  145. package/dist/client/components/blocks/block-library-sidebar.mjs +190 -0
  146. package/dist/client/components/blocks/block-library-sidebar.mjs.map +1 -0
  147. package/dist/client/components/blocks/block-tree.mjs +45 -0
  148. package/dist/client/components/blocks/block-tree.mjs.map +1 -0
  149. package/dist/client/components/blocks/block-type-icon.mjs +50 -0
  150. package/dist/client/components/blocks/block-type-icon.mjs.map +1 -0
  151. package/dist/client/components/blocks/utils/tree-utils.mjs +186 -0
  152. package/dist/client/components/blocks/utils/tree-utils.mjs.map +1 -0
  153. package/dist/client/components/component-renderer.d.mts +125 -0
  154. package/dist/client/components/component-renderer.d.mts.map +1 -0
  155. package/dist/client/components/component-renderer.mjs +145 -0
  156. package/dist/client/components/component-renderer.mjs.map +1 -0
  157. package/dist/client/components/error-boundary.mjs +92 -0
  158. package/dist/client/components/error-boundary.mjs.map +1 -0
  159. package/dist/client/components/fields/array-field.d.mts +44 -0
  160. package/dist/client/components/fields/array-field.d.mts.map +1 -0
  161. package/dist/client/components/fields/array-field.mjs +231 -0
  162. package/dist/client/components/fields/array-field.mjs.map +1 -0
  163. package/dist/client/components/fields/asset-preview-field.d.mts +52 -0
  164. package/dist/client/components/fields/asset-preview-field.d.mts.map +1 -0
  165. package/dist/client/components/fields/asset-preview-field.mjs +60 -0
  166. package/dist/client/components/fields/asset-preview-field.mjs.map +1 -0
  167. package/dist/client/components/fields/blocks-field/blocks-field.d.mts +41 -0
  168. package/dist/client/components/fields/blocks-field/blocks-field.d.mts.map +1 -0
  169. package/dist/client/components/fields/blocks-field/blocks-field.mjs +101 -0
  170. package/dist/client/components/fields/blocks-field/blocks-field.mjs.map +1 -0
  171. package/dist/client/components/fields/blocks-field/index.d.mts +1 -0
  172. package/dist/client/components/fields/boolean-field.d.mts +30 -0
  173. package/dist/client/components/fields/boolean-field.d.mts.map +1 -0
  174. package/dist/client/components/fields/boolean-field.mjs +47 -0
  175. package/dist/client/components/fields/boolean-field.mjs.map +1 -0
  176. package/dist/client/components/fields/custom-field.d.mts +3 -0
  177. package/dist/client/components/fields/date-field.d.mts +22 -0
  178. package/dist/client/components/fields/date-field.d.mts.map +1 -0
  179. package/dist/client/components/fields/date-field.mjs +42 -0
  180. package/dist/client/components/fields/date-field.mjs.map +1 -0
  181. package/dist/client/components/fields/datetime-field.d.mts +23 -0
  182. package/dist/client/components/fields/datetime-field.d.mts.map +1 -0
  183. package/dist/client/components/fields/datetime-field.mjs +43 -0
  184. package/dist/client/components/fields/datetime-field.mjs.map +1 -0
  185. package/dist/client/components/fields/email-field.d.mts +19 -0
  186. package/dist/client/components/fields/email-field.d.mts.map +1 -0
  187. package/dist/client/components/fields/email-field.mjs +38 -0
  188. package/dist/client/components/fields/email-field.mjs.map +1 -0
  189. package/dist/client/components/fields/embedded-collection.d.mts +3 -0
  190. package/dist/client/components/fields/field-types.d.mts +571 -0
  191. package/dist/client/components/fields/field-types.d.mts.map +1 -0
  192. package/dist/client/components/fields/field-utils.d.mts +1 -0
  193. package/dist/client/components/fields/field-utils.mjs +65 -0
  194. package/dist/client/components/fields/field-utils.mjs.map +1 -0
  195. package/dist/client/components/fields/field-wrapper.d.mts +3 -0
  196. package/dist/client/components/fields/field-wrapper.mjs +49 -0
  197. package/dist/client/components/fields/field-wrapper.mjs.map +1 -0
  198. package/dist/client/components/fields/index.d.mts +33 -0
  199. package/dist/client/components/fields/json-field.d.mts +84 -0
  200. package/dist/client/components/fields/json-field.d.mts.map +1 -0
  201. package/dist/client/components/fields/json-field.mjs +248 -0
  202. package/dist/client/components/fields/json-field.mjs.map +1 -0
  203. package/dist/client/components/fields/locale-badge.d.mts +1 -0
  204. package/dist/client/components/fields/locale-badge.mjs +17 -0
  205. package/dist/client/components/fields/locale-badge.mjs.map +1 -0
  206. package/dist/client/components/fields/number-field.d.mts +23 -0
  207. package/dist/client/components/fields/number-field.d.mts.map +1 -0
  208. package/dist/client/components/fields/number-field.mjs +40 -0
  209. package/dist/client/components/fields/number-field.mjs.map +1 -0
  210. package/dist/client/components/fields/object-array-field.d.mts +2 -0
  211. package/dist/client/components/fields/object-array-field.mjs +313 -0
  212. package/dist/client/components/fields/object-array-field.mjs.map +1 -0
  213. package/dist/client/components/fields/object-field.d.mts +32 -0
  214. package/dist/client/components/fields/object-field.d.mts.map +1 -0
  215. package/dist/client/components/fields/object-field.mjs +128 -0
  216. package/dist/client/components/fields/object-field.mjs.map +1 -0
  217. package/dist/client/components/fields/relation/displays/cards-display.d.mts +2 -0
  218. package/dist/client/components/fields/relation/displays/cards-display.mjs +140 -0
  219. package/dist/client/components/fields/relation/displays/cards-display.mjs.map +1 -0
  220. package/dist/client/components/fields/relation/displays/chips-display.d.mts +2 -0
  221. package/dist/client/components/fields/relation/displays/chips-display.mjs +100 -0
  222. package/dist/client/components/fields/relation/displays/chips-display.mjs.map +1 -0
  223. package/dist/client/components/fields/relation/displays/grid-display.d.mts +2 -0
  224. package/dist/client/components/fields/relation/displays/grid-display.mjs +114 -0
  225. package/dist/client/components/fields/relation/displays/grid-display.mjs.map +1 -0
  226. package/dist/client/components/fields/relation/displays/index.d.mts +6 -0
  227. package/dist/client/components/fields/relation/displays/list-display.d.mts +2 -0
  228. package/dist/client/components/fields/relation/displays/list-display.mjs +128 -0
  229. package/dist/client/components/fields/relation/displays/list-display.mjs.map +1 -0
  230. package/dist/client/components/fields/relation/displays/table-display.d.mts +2 -0
  231. package/dist/client/components/fields/relation/displays/table-display.mjs +134 -0
  232. package/dist/client/components/fields/relation/displays/table-display.mjs.map +1 -0
  233. package/dist/client/components/fields/relation/displays/types.d.mts +22 -0
  234. package/dist/client/components/fields/relation/displays/types.d.mts.map +1 -0
  235. package/dist/client/components/fields/relation/displays/types.mjs +73 -0
  236. package/dist/client/components/fields/relation/displays/types.mjs.map +1 -0
  237. package/dist/client/components/fields/relation/index.d.mts +3 -0
  238. package/dist/client/components/fields/relation/relation-items-display.d.mts +5 -0
  239. package/dist/client/components/fields/relation/relation-items-display.mjs +47 -0
  240. package/dist/client/components/fields/relation/relation-items-display.mjs.map +1 -0
  241. package/dist/client/components/fields/relation-field.d.mts +134 -0
  242. package/dist/client/components/fields/relation-field.d.mts.map +1 -0
  243. package/dist/client/components/fields/relation-field.mjs +106 -0
  244. package/dist/client/components/fields/relation-field.mjs.map +1 -0
  245. package/dist/client/components/fields/relation-picker.d.mts +4 -0
  246. package/dist/client/components/fields/relation-picker.mjs +301 -0
  247. package/dist/client/components/fields/relation-picker.mjs.map +1 -0
  248. package/dist/client/components/fields/relation-select.d.mts +3 -0
  249. package/dist/client/components/fields/relation-select.mjs +219 -0
  250. package/dist/client/components/fields/relation-select.mjs.map +1 -0
  251. package/dist/client/components/fields/reverse-relation-field.d.mts +2 -0
  252. package/dist/client/components/fields/rich-text-editor/bubble-menu.mjs +56 -0
  253. package/dist/client/components/fields/rich-text-editor/bubble-menu.mjs.map +1 -0
  254. package/dist/client/components/fields/rich-text-editor/extensions.mjs +118 -0
  255. package/dist/client/components/fields/rich-text-editor/extensions.mjs.map +1 -0
  256. package/dist/client/components/fields/rich-text-editor/image-popover.mjs +196 -0
  257. package/dist/client/components/fields/rich-text-editor/image-popover.mjs.map +1 -0
  258. package/dist/client/components/fields/rich-text-editor/index.d.mts +4 -0
  259. package/dist/client/components/fields/rich-text-editor/index.mjs +187 -0
  260. package/dist/client/components/fields/rich-text-editor/index.mjs.map +1 -0
  261. package/dist/client/components/fields/rich-text-editor/link-popover.mjs +86 -0
  262. package/dist/client/components/fields/rich-text-editor/link-popover.mjs.map +1 -0
  263. package/dist/client/components/fields/rich-text-editor/presets.d.mts +11 -0
  264. package/dist/client/components/fields/rich-text-editor/presets.d.mts.map +1 -0
  265. package/dist/client/components/fields/rich-text-editor/presets.mjs +124 -0
  266. package/dist/client/components/fields/rich-text-editor/presets.mjs.map +1 -0
  267. package/dist/client/components/fields/rich-text-editor/slash-commands.mjs +145 -0
  268. package/dist/client/components/fields/rich-text-editor/slash-commands.mjs.map +1 -0
  269. package/dist/client/components/fields/rich-text-editor/table-controls.mjs +124 -0
  270. package/dist/client/components/fields/rich-text-editor/table-controls.mjs.map +1 -0
  271. package/dist/client/components/fields/rich-text-editor/toolbar.mjs +280 -0
  272. package/dist/client/components/fields/rich-text-editor/toolbar.mjs.map +1 -0
  273. package/dist/client/components/fields/rich-text-editor/types.d.mts +78 -0
  274. package/dist/client/components/fields/rich-text-editor/types.d.mts.map +1 -0
  275. package/dist/client/components/fields/rich-text-editor/types.mjs +31 -0
  276. package/dist/client/components/fields/rich-text-editor/types.mjs.map +1 -0
  277. package/dist/client/components/fields/rich-text-editor/utils.mjs +51 -0
  278. package/dist/client/components/fields/rich-text-editor/utils.mjs.map +1 -0
  279. package/dist/client/components/fields/rich-text-editor/variants.d.mts +2 -0
  280. package/dist/client/components/fields/rich-text-field.d.mts +14 -0
  281. package/dist/client/components/fields/rich-text-field.d.mts.map +1 -0
  282. package/dist/client/components/fields/rich-text-field.mjs +26 -0
  283. package/dist/client/components/fields/rich-text-field.mjs.map +1 -0
  284. package/dist/client/components/fields/select-field.d.mts +25 -0
  285. package/dist/client/components/fields/select-field.d.mts.map +1 -0
  286. package/dist/client/components/fields/select-field.mjs +53 -0
  287. package/dist/client/components/fields/select-field.mjs.map +1 -0
  288. package/dist/client/components/fields/status-field.d.mts +2 -0
  289. package/dist/client/components/fields/text-field.d.mts +22 -0
  290. package/dist/client/components/fields/text-field.d.mts.map +1 -0
  291. package/dist/client/components/fields/text-field.mjs +39 -0
  292. package/dist/client/components/fields/text-field.mjs.map +1 -0
  293. package/dist/client/components/fields/textarea-field.d.mts +22 -0
  294. package/dist/client/components/fields/textarea-field.d.mts.map +1 -0
  295. package/dist/client/components/fields/textarea-field.mjs +39 -0
  296. package/dist/client/components/fields/textarea-field.mjs.map +1 -0
  297. package/dist/client/components/fields/time-field.d.mts +20 -0
  298. package/dist/client/components/fields/time-field.d.mts.map +1 -0
  299. package/dist/client/components/fields/time-field.mjs +39 -0
  300. package/dist/client/components/fields/time-field.mjs.map +1 -0
  301. package/dist/client/components/fields/upload-field.d.mts +97 -0
  302. package/dist/client/components/fields/upload-field.d.mts.map +1 -0
  303. package/dist/client/components/fields/upload-field.mjs +497 -0
  304. package/dist/client/components/fields/upload-field.mjs.map +1 -0
  305. package/dist/client/components/filter-builder/columns-tab.d.mts +1 -0
  306. package/dist/client/components/filter-builder/columns-tab.mjs +131 -0
  307. package/dist/client/components/filter-builder/columns-tab.mjs.map +1 -0
  308. package/dist/client/components/filter-builder/filter-builder-sheet.d.mts +1 -0
  309. package/dist/client/components/filter-builder/filter-builder-sheet.mjs +157 -0
  310. package/dist/client/components/filter-builder/filter-builder-sheet.mjs.map +1 -0
  311. package/dist/client/components/filter-builder/filters-tab.d.mts +1 -0
  312. package/dist/client/components/filter-builder/filters-tab.mjs +380 -0
  313. package/dist/client/components/filter-builder/filters-tab.mjs.map +1 -0
  314. package/dist/client/components/filter-builder/index.d.mts +5 -0
  315. package/dist/client/components/filter-builder/saved-views-tab.d.mts +1 -0
  316. package/dist/client/components/filter-builder/saved-views-tab.mjs +125 -0
  317. package/dist/client/components/filter-builder/saved-views-tab.mjs.map +1 -0
  318. package/dist/client/components/index.d.mts +80 -0
  319. package/dist/client/components/locale-switcher.d.mts +2 -0
  320. package/dist/client/components/locale-switcher.mjs +128 -0
  321. package/dist/client/components/locale-switcher.mjs.map +1 -0
  322. package/dist/client/components/media/media-grid.mjs +139 -0
  323. package/dist/client/components/media/media-grid.mjs.map +1 -0
  324. package/dist/client/components/media/media-picker-dialog.mjs +255 -0
  325. package/dist/client/components/media/media-picker-dialog.mjs.map +1 -0
  326. package/dist/client/components/preview/live-preview-mode.mjs +211 -0
  327. package/dist/client/components/preview/live-preview-mode.mjs.map +1 -0
  328. package/dist/client/components/preview/preview-pane.mjs +179 -0
  329. package/dist/client/components/preview/preview-pane.mjs.map +1 -0
  330. package/dist/client/components/primitives/asset-preview.mjs +363 -0
  331. package/dist/client/components/primitives/asset-preview.mjs.map +1 -0
  332. package/dist/client/components/primitives/checkbox-input.mjs +33 -0
  333. package/dist/client/components/primitives/checkbox-input.mjs.map +1 -0
  334. package/dist/client/components/primitives/date-input.mjs +218 -0
  335. package/dist/client/components/primitives/date-input.mjs.map +1 -0
  336. package/dist/client/components/primitives/dropzone.mjs +239 -0
  337. package/dist/client/components/primitives/dropzone.mjs.map +1 -0
  338. package/dist/client/components/primitives/number-input.mjs +113 -0
  339. package/dist/client/components/primitives/number-input.mjs.map +1 -0
  340. package/dist/client/components/primitives/select-multi.mjs +256 -0
  341. package/dist/client/components/primitives/select-multi.mjs.map +1 -0
  342. package/dist/client/components/primitives/select-single.mjs +183 -0
  343. package/dist/client/components/primitives/select-single.mjs.map +1 -0
  344. package/dist/client/components/primitives/text-input.mjs +40 -0
  345. package/dist/client/components/primitives/text-input.mjs.map +1 -0
  346. package/dist/client/components/primitives/textarea-input.mjs +38 -0
  347. package/dist/client/components/primitives/textarea-input.mjs.map +1 -0
  348. package/dist/client/components/primitives/time-input.mjs +72 -0
  349. package/dist/client/components/primitives/time-input.mjs.map +1 -0
  350. package/dist/client/components/primitives/toggle-input.mjs +31 -0
  351. package/dist/client/components/primitives/toggle-input.mjs.map +1 -0
  352. package/dist/client/components/primitives/types.d.mts +14 -0
  353. package/dist/client/components/primitives/types.d.mts.map +1 -0
  354. package/dist/client/components/primitives/types.mjs +13 -0
  355. package/dist/client/components/primitives/types.mjs.map +1 -0
  356. package/dist/client/components/sheets/index.d.mts +1 -0
  357. package/dist/client/components/sheets/resource-sheet.d.mts +1 -0
  358. package/dist/client/components/sheets/resource-sheet.mjs +78 -0
  359. package/dist/client/components/sheets/resource-sheet.mjs.map +1 -0
  360. package/dist/client/components/ui/accordion.d.mts +2 -0
  361. package/dist/client/components/ui/accordion.mjs +50 -0
  362. package/dist/client/components/ui/accordion.mjs.map +1 -0
  363. package/dist/client/components/ui/alert.mjs +32 -0
  364. package/dist/client/components/ui/alert.mjs.map +1 -0
  365. package/dist/client/components/ui/avatar.d.mts +3 -0
  366. package/dist/client/components/ui/badge.d.mts +3 -0
  367. package/dist/client/components/ui/badge.mjs +35 -0
  368. package/dist/client/components/ui/badge.mjs.map +1 -0
  369. package/dist/client/components/ui/button.d.mts +3 -0
  370. package/dist/client/components/ui/button.mjs +49 -0
  371. package/dist/client/components/ui/button.mjs.map +1 -0
  372. package/dist/client/components/ui/card.d.mts +2 -0
  373. package/dist/{card-BKHjBQfw.mjs → client/components/ui/card.mjs} +3 -10
  374. package/dist/{card-BKHjBQfw.mjs.map → client/components/ui/card.mjs.map} +1 -1
  375. package/dist/client/components/ui/checkbox.d.mts +2 -0
  376. package/dist/client/components/ui/checkbox.mjs +27 -0
  377. package/dist/client/components/ui/checkbox.mjs.map +1 -0
  378. package/dist/client/components/ui/combobox.d.mts +3 -0
  379. package/dist/client/components/ui/command.mjs +69 -0
  380. package/dist/client/components/ui/command.mjs.map +1 -0
  381. package/dist/client/components/ui/dialog.d.mts +3 -0
  382. package/dist/client/components/ui/dialog.mjs +83 -0
  383. package/dist/client/components/ui/dialog.mjs.map +1 -0
  384. package/dist/client/components/ui/drawer.mjs +75 -0
  385. package/dist/client/components/ui/drawer.mjs.map +1 -0
  386. package/dist/client/components/ui/dropdown-menu.d.mts +3 -0
  387. package/dist/client/components/ui/dropdown-menu.mjs +89 -0
  388. package/dist/client/components/ui/dropdown-menu.mjs.map +1 -0
  389. package/dist/client/components/ui/empty-state.mjs +53 -0
  390. package/dist/client/components/ui/empty-state.mjs.map +1 -0
  391. package/dist/client/components/ui/field.d.mts +3 -0
  392. package/dist/client/components/ui/field.mjs +78 -0
  393. package/dist/client/components/ui/field.mjs.map +1 -0
  394. package/dist/client/components/ui/input-group.d.mts +4 -0
  395. package/dist/client/components/ui/input-group.mjs +68 -0
  396. package/dist/client/components/ui/input-group.mjs.map +1 -0
  397. package/dist/client/components/ui/input.d.mts +2 -0
  398. package/dist/client/components/ui/input.mjs +17 -0
  399. package/dist/client/components/ui/input.mjs.map +1 -0
  400. package/dist/client/components/ui/kbd.mjs +24 -0
  401. package/dist/client/components/ui/kbd.mjs.map +1 -0
  402. package/dist/client/components/ui/label.d.mts +2 -0
  403. package/dist/client/components/ui/label.mjs +15 -0
  404. package/dist/client/components/ui/label.mjs.map +1 -0
  405. package/dist/client/components/ui/popover.d.mts +3 -0
  406. package/dist/client/components/ui/popover.mjs +49 -0
  407. package/dist/client/components/ui/popover.mjs.map +1 -0
  408. package/dist/client/components/ui/responsive-dialog.mjs +102 -0
  409. package/dist/client/components/ui/responsive-dialog.mjs.map +1 -0
  410. package/dist/client/components/ui/scroll-area.d.mts +2 -0
  411. package/dist/client/components/ui/search-input.mjs +74 -0
  412. package/dist/client/components/ui/search-input.mjs.map +1 -0
  413. package/dist/client/components/ui/select.d.mts +3 -0
  414. package/dist/client/components/ui/select.mjs +85 -0
  415. package/dist/client/components/ui/select.mjs.map +1 -0
  416. package/dist/client/components/ui/separator.d.mts +2 -0
  417. package/dist/client/components/ui/separator.mjs +17 -0
  418. package/dist/client/components/ui/separator.mjs.map +1 -0
  419. package/dist/client/components/ui/sheet.d.mts +3 -0
  420. package/dist/client/components/ui/sheet.mjs +78 -0
  421. package/dist/client/components/ui/sheet.mjs.map +1 -0
  422. package/dist/client/components/ui/sidebar.d.mts +8 -0
  423. package/dist/client/components/ui/sidebar.mjs +256 -0
  424. package/dist/client/components/ui/sidebar.mjs.map +1 -0
  425. package/dist/client/components/ui/skeleton.d.mts +1 -0
  426. package/dist/client/components/ui/skeleton.mjs +15 -0
  427. package/dist/client/components/ui/skeleton.mjs.map +1 -0
  428. package/dist/client/components/ui/sonner.d.mts +14 -0
  429. package/dist/client/components/ui/sonner.d.mts.map +1 -0
  430. package/dist/client/components/ui/sonner.mjs +55 -0
  431. package/dist/client/components/ui/sonner.mjs.map +1 -0
  432. package/dist/client/components/ui/spinner.d.mts +1 -0
  433. package/dist/client/components/ui/spinner.mjs +18 -0
  434. package/dist/client/components/ui/spinner.mjs.map +1 -0
  435. package/dist/client/components/ui/switch.d.mts +2 -0
  436. package/dist/client/components/ui/switch.mjs +23 -0
  437. package/dist/client/components/ui/switch.mjs.map +1 -0
  438. package/dist/client/components/ui/table.d.mts +2 -0
  439. package/dist/client/components/ui/table.mjs +66 -0
  440. package/dist/client/components/ui/table.mjs.map +1 -0
  441. package/dist/client/components/ui/tabs.d.mts +3 -0
  442. package/dist/client/components/ui/tabs.mjs +49 -0
  443. package/dist/client/components/ui/tabs.mjs.map +1 -0
  444. package/dist/client/components/ui/textarea.d.mts +2 -0
  445. package/dist/client/components/ui/textarea.mjs +15 -0
  446. package/dist/client/components/ui/textarea.mjs.map +1 -0
  447. package/dist/client/components/ui/toolbar.mjs +54 -0
  448. package/dist/client/components/ui/toolbar.mjs.map +1 -0
  449. package/dist/client/components/ui/tooltip.d.mts +2 -0
  450. package/dist/client/components/ui/tooltip.mjs +45 -0
  451. package/dist/client/components/ui/tooltip.mjs.map +1 -0
  452. package/dist/client/components/widgets/chart-widget.d.mts +57 -0
  453. package/dist/client/components/widgets/chart-widget.d.mts.map +1 -0
  454. package/dist/client/components/widgets/chart-widget.mjs +282 -0
  455. package/dist/client/components/widgets/chart-widget.mjs.map +1 -0
  456. package/dist/client/components/widgets/progress-widget.d.mts +41 -0
  457. package/dist/client/components/widgets/progress-widget.d.mts.map +1 -0
  458. package/dist/client/components/widgets/progress-widget.mjs +110 -0
  459. package/dist/client/components/widgets/progress-widget.mjs.map +1 -0
  460. package/dist/client/components/widgets/quick-actions-widget.d.mts +29 -0
  461. package/dist/client/components/widgets/quick-actions-widget.d.mts.map +1 -0
  462. package/dist/client/components/widgets/quick-actions-widget.mjs +121 -0
  463. package/dist/client/components/widgets/quick-actions-widget.mjs.map +1 -0
  464. package/dist/client/components/widgets/recent-items-widget.d.mts +51 -0
  465. package/dist/client/components/widgets/recent-items-widget.d.mts.map +1 -0
  466. package/dist/client/components/widgets/recent-items-widget.mjs +101 -0
  467. package/dist/client/components/widgets/recent-items-widget.mjs.map +1 -0
  468. package/dist/client/components/widgets/stats-widget.d.mts +55 -0
  469. package/dist/client/components/widgets/stats-widget.d.mts.map +1 -0
  470. package/dist/client/components/widgets/stats-widget.mjs +150 -0
  471. package/dist/client/components/widgets/stats-widget.mjs.map +1 -0
  472. package/dist/client/components/widgets/table-widget.d.mts +31 -0
  473. package/dist/client/components/widgets/table-widget.d.mts.map +1 -0
  474. package/dist/client/components/widgets/table-widget.mjs +139 -0
  475. package/dist/client/components/widgets/table-widget.mjs.map +1 -0
  476. package/dist/client/components/widgets/timeline-widget.d.mts +51 -0
  477. package/dist/client/components/widgets/timeline-widget.d.mts.map +1 -0
  478. package/dist/client/components/widgets/timeline-widget.mjs +168 -0
  479. package/dist/client/components/widgets/timeline-widget.mjs.map +1 -0
  480. package/dist/client/components/widgets/value-widget.d.mts +39 -0
  481. package/dist/client/components/widgets/value-widget.d.mts.map +1 -0
  482. package/dist/client/components/widgets/value-widget.mjs +111 -0
  483. package/dist/client/components/widgets/value-widget.mjs.map +1 -0
  484. package/dist/client/components/widgets/widget-skeletons.mjs +145 -0
  485. package/dist/client/components/widgets/widget-skeletons.mjs.map +1 -0
  486. package/dist/client/context/focus-context.d.mts +88 -0
  487. package/dist/client/context/focus-context.d.mts.map +1 -0
  488. package/dist/client/context/focus-context.mjs +178 -0
  489. package/dist/client/context/focus-context.mjs.map +1 -0
  490. package/dist/client/contexts/breadcrumb-context.mjs +32 -0
  491. package/dist/client/contexts/breadcrumb-context.mjs.map +1 -0
  492. package/dist/client/hooks/typed-hooks.d.mts +84 -0
  493. package/dist/client/hooks/typed-hooks.d.mts.map +1 -0
  494. package/dist/client/hooks/typed-hooks.mjs +272 -0
  495. package/dist/client/hooks/typed-hooks.mjs.map +1 -0
  496. package/dist/client/hooks/use-action.mjs +201 -0
  497. package/dist/client/hooks/use-action.mjs.map +1 -0
  498. package/dist/client/hooks/use-admin-config.mjs +40 -0
  499. package/dist/client/hooks/use-admin-config.mjs.map +1 -0
  500. package/dist/client/hooks/use-admin-preferences.mjs +68 -0
  501. package/dist/client/hooks/use-admin-preferences.mjs.map +1 -0
  502. package/dist/client/hooks/use-admin-routes.mjs +97 -0
  503. package/dist/client/hooks/use-admin-routes.mjs.map +1 -0
  504. package/dist/client/hooks/use-auth.d.mts +98 -0
  505. package/dist/client/hooks/use-auth.d.mts.map +1 -0
  506. package/dist/{use-auth-BoLmWtmU.mjs → client/hooks/use-auth.mjs} +3 -3
  507. package/dist/client/hooks/use-auth.mjs.map +1 -0
  508. package/dist/client/hooks/use-collection-fields.mjs +32 -0
  509. package/dist/client/hooks/use-collection-fields.mjs.map +1 -0
  510. package/dist/client/hooks/use-collection-meta.mjs +121 -0
  511. package/dist/client/hooks/use-collection-meta.mjs.map +1 -0
  512. package/dist/client/hooks/use-collection-schema.mjs +67 -0
  513. package/dist/client/hooks/use-collection-schema.mjs.map +1 -0
  514. package/dist/client/hooks/use-collection-validation.mjs +74 -0
  515. package/dist/client/hooks/use-collection-validation.mjs.map +1 -0
  516. package/dist/client/hooks/use-collection.d.mts +86 -0
  517. package/dist/client/hooks/use-collection.d.mts.map +1 -0
  518. package/dist/client/hooks/use-collection.mjs +214 -0
  519. package/dist/client/hooks/use-collection.mjs.map +1 -0
  520. package/dist/client/hooks/use-current-user.d.mts +57 -0
  521. package/dist/client/hooks/use-current-user.d.mts.map +1 -0
  522. package/dist/client/hooks/use-current-user.mjs +79 -0
  523. package/dist/client/hooks/use-current-user.mjs.map +1 -0
  524. package/dist/client/hooks/use-field-hooks.mjs +191 -0
  525. package/dist/client/hooks/use-field-hooks.mjs.map +1 -0
  526. package/dist/client/hooks/use-field-options.d.mts +90 -0
  527. package/dist/client/hooks/use-field-options.d.mts.map +1 -0
  528. package/dist/client/hooks/use-field-options.mjs +184 -0
  529. package/dist/client/hooks/use-field-options.mjs.map +1 -0
  530. package/dist/client/hooks/use-global-fields.mjs +27 -0
  531. package/dist/client/hooks/use-global-fields.mjs.map +1 -0
  532. package/dist/client/hooks/use-global-meta.mjs +59 -0
  533. package/dist/client/hooks/use-global-meta.mjs.map +1 -0
  534. package/dist/client/hooks/use-global-schema.mjs +33 -0
  535. package/dist/client/hooks/use-global-schema.mjs.map +1 -0
  536. package/dist/client/hooks/use-global.d.mts +40 -0
  537. package/dist/client/hooks/use-global.d.mts.map +1 -0
  538. package/dist/client/hooks/use-global.mjs +74 -0
  539. package/dist/client/hooks/use-global.mjs.map +1 -0
  540. package/dist/client/hooks/use-locks.mjs +245 -0
  541. package/dist/client/hooks/use-locks.mjs.map +1 -0
  542. package/dist/client/hooks/use-media-query.d.mts +23 -0
  543. package/dist/client/hooks/use-media-query.d.mts.map +1 -0
  544. package/dist/client/hooks/use-media-query.mjs +62 -0
  545. package/dist/client/hooks/use-media-query.mjs.map +1 -0
  546. package/dist/client/hooks/use-prefill-params.mjs +47 -0
  547. package/dist/client/hooks/use-prefill-params.mjs.map +1 -0
  548. package/dist/client/hooks/use-questpie-query-options.mjs +28 -0
  549. package/dist/client/hooks/use-questpie-query-options.mjs.map +1 -0
  550. package/dist/client/hooks/use-reactive-fields.d.mts +75 -0
  551. package/dist/client/hooks/use-reactive-fields.d.mts.map +1 -0
  552. package/dist/client/hooks/use-reactive-fields.mjs +164 -0
  553. package/dist/client/hooks/use-reactive-fields.mjs.map +1 -0
  554. package/dist/client/hooks/use-realtime-highlight.mjs +96 -0
  555. package/dist/client/hooks/use-realtime-highlight.mjs.map +1 -0
  556. package/dist/client/hooks/use-saved-views.mjs +65 -0
  557. package/dist/client/hooks/use-saved-views.mjs.map +1 -0
  558. package/dist/client/hooks/use-search.mjs +147 -0
  559. package/dist/client/hooks/use-search.mjs.map +1 -0
  560. package/dist/client/hooks/use-server-validation.mjs +199 -0
  561. package/dist/client/hooks/use-server-validation.mjs.map +1 -0
  562. package/dist/client/hooks/use-server-widget-data.d.mts +26 -0
  563. package/dist/client/hooks/use-server-widget-data.d.mts.map +1 -0
  564. package/dist/client/hooks/use-server-widget-data.mjs +40 -0
  565. package/dist/client/hooks/use-server-widget-data.mjs.map +1 -0
  566. package/dist/client/hooks/use-setup-status.d.mts +39 -0
  567. package/dist/client/hooks/use-setup-status.d.mts.map +1 -0
  568. package/dist/client/hooks/use-setup-status.mjs +50 -0
  569. package/dist/client/hooks/use-setup-status.mjs.map +1 -0
  570. package/dist/client/hooks/use-upload-collection.mjs +32 -0
  571. package/dist/client/hooks/use-upload-collection.mjs.map +1 -0
  572. package/dist/client/hooks/use-upload.d.mts +23 -0
  573. package/dist/client/hooks/use-upload.d.mts.map +1 -0
  574. package/dist/client/hooks/use-upload.mjs +145 -0
  575. package/dist/client/hooks/use-upload.mjs.map +1 -0
  576. package/dist/client/hooks/use-validation-error-map.mjs +53 -0
  577. package/dist/client/hooks/use-validation-error-map.mjs.map +1 -0
  578. package/dist/client/hooks/use-view-state.mjs +261 -0
  579. package/dist/client/hooks/use-view-state.mjs.map +1 -0
  580. package/dist/client/i18n/hooks.mjs +160 -0
  581. package/dist/client/i18n/hooks.mjs.map +1 -0
  582. package/dist/client/i18n/intl-cache.mjs +65 -0
  583. package/dist/client/i18n/intl-cache.mjs.map +1 -0
  584. package/dist/client/i18n/messages.mjs +7 -0
  585. package/dist/client/i18n/messages.mjs.map +1 -0
  586. package/dist/client/i18n/simple.d.mts +22 -0
  587. package/dist/client/i18n/simple.d.mts.map +1 -0
  588. package/dist/client/i18n/simple.mjs +157 -0
  589. package/dist/client/i18n/simple.mjs.map +1 -0
  590. package/dist/client/i18n/types.d.mts +110 -0
  591. package/dist/client/i18n/types.d.mts.map +1 -0
  592. package/dist/client/lib/utils.d.mts +1 -0
  593. package/dist/client/lib/utils.mjs +28 -0
  594. package/dist/client/lib/utils.mjs.map +1 -0
  595. package/dist/client/preview/block-scope-context.d.mts +74 -0
  596. package/dist/client/preview/block-scope-context.d.mts.map +1 -0
  597. package/dist/client/preview/block-scope-context.mjs +93 -0
  598. package/dist/client/preview/block-scope-context.mjs.map +1 -0
  599. package/dist/client/preview/index.d.mts +5 -0
  600. package/dist/client/preview/preview-banner.d.mts +46 -0
  601. package/dist/client/preview/preview-banner.d.mts.map +1 -0
  602. package/dist/client/preview/preview-banner.mjs +95 -0
  603. package/dist/client/preview/preview-banner.mjs.map +1 -0
  604. package/dist/client/preview/preview-field.d.mts +108 -0
  605. package/dist/client/preview/preview-field.d.mts.map +1 -0
  606. package/dist/client/preview/preview-field.mjs +125 -0
  607. package/dist/client/preview/preview-field.mjs.map +1 -0
  608. package/dist/client/preview/types.d.mts +115 -0
  609. package/dist/client/preview/types.d.mts.map +1 -0
  610. package/dist/client/preview/types.mjs +21 -0
  611. package/dist/client/preview/types.mjs.map +1 -0
  612. package/dist/client/preview/use-collection-preview.d.mts +71 -0
  613. package/dist/client/preview/use-collection-preview.d.mts.map +1 -0
  614. package/dist/client/preview/use-collection-preview.mjs +114 -0
  615. package/dist/client/preview/use-collection-preview.mjs.map +1 -0
  616. package/dist/client/runtime/content-locales-provider.d.mts +1 -0
  617. package/dist/client/runtime/content-locales-provider.mjs +85 -0
  618. package/dist/client/runtime/content-locales-provider.mjs.map +1 -0
  619. package/dist/client/runtime/index.d.mts +7 -0
  620. package/dist/client/runtime/index.mjs +8 -0
  621. package/dist/client/runtime/locale-scope.d.mts +2 -0
  622. package/dist/{runtime-6VZM878K.mjs → client/runtime/locale-scope.mjs} +3 -4
  623. package/dist/client/runtime/locale-scope.mjs.map +1 -0
  624. package/dist/client/runtime/provider.d.mts +10107 -0
  625. package/dist/client/runtime/provider.d.mts.map +1 -0
  626. package/dist/client/runtime/provider.mjs +229 -0
  627. package/dist/client/runtime/provider.mjs.map +1 -0
  628. package/dist/client/runtime/routes.d.mts +49 -0
  629. package/dist/client/runtime/routes.d.mts.map +1 -0
  630. package/dist/client/runtime/routes.mjs +107 -0
  631. package/dist/client/runtime/routes.mjs.map +1 -0
  632. package/dist/client/runtime/translations-provider.d.mts +2 -0
  633. package/dist/client/runtime/translations-provider.mjs +181 -0
  634. package/dist/client/runtime/translations-provider.mjs.map +1 -0
  635. package/dist/client/scope/index.d.mts +3 -0
  636. package/dist/client/scope/picker.d.mts +54 -0
  637. package/dist/client/scope/picker.d.mts.map +1 -0
  638. package/dist/client/scope/picker.mjs +161 -0
  639. package/dist/client/scope/picker.mjs.map +1 -0
  640. package/dist/client/scope/provider.d.mts +104 -0
  641. package/dist/client/scope/provider.d.mts.map +1 -0
  642. package/dist/client/scope/provider.mjs +159 -0
  643. package/dist/client/scope/provider.mjs.map +1 -0
  644. package/dist/client/scope/types.d.mts +112 -0
  645. package/dist/client/scope/types.d.mts.map +1 -0
  646. package/dist/client/styles/index.css +80 -0
  647. package/dist/client/utils/auto-expand-fields.mjs +65 -0
  648. package/dist/client/utils/auto-expand-fields.mjs.map +1 -0
  649. package/dist/client/utils/build-field-definitions-from-schema.mjs +256 -0
  650. package/dist/client/utils/build-field-definitions-from-schema.mjs.map +1 -0
  651. package/dist/client/utils/detect-relations.mjs +46 -0
  652. package/dist/client/utils/detect-relations.mjs.map +1 -0
  653. package/dist/client/utils/locale-to-flag.d.mts +118 -0
  654. package/dist/client/utils/locale-to-flag.d.mts.map +1 -0
  655. package/dist/client/utils/locale-to-flag.mjs +130 -0
  656. package/dist/client/utils/locale-to-flag.mjs.map +1 -0
  657. package/dist/client/utils/routes.mjs +196 -0
  658. package/dist/client/utils/routes.mjs.map +1 -0
  659. package/dist/client/views/auth/accept-invite-form.d.mts +73 -0
  660. package/dist/client/views/auth/accept-invite-form.d.mts.map +1 -0
  661. package/dist/client/views/auth/accept-invite-form.mjs +180 -0
  662. package/dist/client/views/auth/accept-invite-form.mjs.map +1 -0
  663. package/dist/client/views/auth/auth-layout.d.mts +44 -0
  664. package/dist/client/views/auth/auth-layout.d.mts.map +1 -0
  665. package/dist/client/views/auth/auth-layout.mjs +53 -0
  666. package/dist/client/views/auth/auth-layout.mjs.map +1 -0
  667. package/dist/client/views/auth/forgot-password-form.d.mts +59 -0
  668. package/dist/client/views/auth/forgot-password-form.d.mts.map +1 -0
  669. package/dist/{forgot-password-page-Bcp-An4Y.mjs → client/views/auth/forgot-password-form.mjs} +22 -89
  670. package/dist/client/views/auth/forgot-password-form.mjs.map +1 -0
  671. package/dist/client/views/auth/index.d.mts +7 -0
  672. package/dist/client/views/auth/invite-form.d.mts +1 -0
  673. package/dist/client/views/auth/invite-form.mjs +155 -0
  674. package/dist/client/views/auth/invite-form.mjs.map +1 -0
  675. package/dist/client/views/auth/login-form.d.mts +76 -0
  676. package/dist/client/views/auth/login-form.d.mts.map +1 -0
  677. package/dist/client/views/auth/login-form.mjs +167 -0
  678. package/dist/client/views/auth/login-form.mjs.map +1 -0
  679. package/dist/client/views/auth/reset-password-form.d.mts +66 -0
  680. package/dist/client/views/auth/reset-password-form.d.mts.map +1 -0
  681. package/dist/client/views/auth/reset-password-form.mjs +188 -0
  682. package/dist/client/views/auth/reset-password-form.mjs.map +1 -0
  683. package/dist/client/views/auth/setup-form.d.mts +61 -0
  684. package/dist/client/views/auth/setup-form.d.mts.map +1 -0
  685. package/dist/{setup-page-YAP_fzqh.mjs → client/views/auth/setup-form.mjs} +46 -124
  686. package/dist/client/views/auth/setup-form.mjs.map +1 -0
  687. package/dist/client/views/collection/auto-form-fields.d.mts +4 -0
  688. package/dist/client/views/collection/auto-form-fields.mjs +453 -0
  689. package/dist/client/views/collection/auto-form-fields.mjs.map +1 -0
  690. package/dist/client/views/collection/bulk-action-toolbar.mjs +291 -0
  691. package/dist/client/views/collection/bulk-action-toolbar.mjs.map +1 -0
  692. package/dist/client/views/collection/cells/complex-cells.d.mts +46 -0
  693. package/dist/client/views/collection/cells/complex-cells.d.mts.map +1 -0
  694. package/dist/client/views/collection/cells/complex-cells.mjs +327 -0
  695. package/dist/client/views/collection/cells/complex-cells.mjs.map +1 -0
  696. package/dist/client/views/collection/cells/index.d.mts +7 -0
  697. package/dist/client/views/collection/cells/primitive-cells.d.mts +76 -0
  698. package/dist/client/views/collection/cells/primitive-cells.d.mts.map +1 -0
  699. package/dist/client/views/collection/cells/primitive-cells.mjs +165 -0
  700. package/dist/client/views/collection/cells/primitive-cells.mjs.map +1 -0
  701. package/dist/client/views/collection/cells/relation-cells.d.mts +21 -0
  702. package/dist/client/views/collection/cells/relation-cells.d.mts.map +1 -0
  703. package/dist/client/views/collection/cells/relation-cells.mjs +105 -0
  704. package/dist/client/views/collection/cells/relation-cells.mjs.map +1 -0
  705. package/dist/client/views/collection/cells/shared/asset-thumbnail.d.mts +1 -0
  706. package/dist/client/views/collection/cells/shared/asset-thumbnail.mjs +189 -0
  707. package/dist/client/views/collection/cells/shared/asset-thumbnail.mjs.map +1 -0
  708. package/dist/client/views/collection/cells/shared/cell-helpers.d.mts +2 -0
  709. package/dist/client/views/collection/cells/shared/cell-helpers.mjs +78 -0
  710. package/dist/client/views/collection/cells/shared/cell-helpers.mjs.map +1 -0
  711. package/dist/client/views/collection/cells/shared/relation-chip.d.mts +1 -0
  712. package/dist/client/views/collection/cells/shared/relation-chip.mjs +37 -0
  713. package/dist/client/views/collection/cells/shared/relation-chip.mjs.map +1 -0
  714. package/dist/client/views/collection/cells/upload-cells.d.mts +25 -0
  715. package/dist/client/views/collection/cells/upload-cells.d.mts.map +1 -0
  716. package/dist/client/views/collection/cells/upload-cells.mjs +20 -0
  717. package/dist/client/views/collection/cells/upload-cells.mjs.map +1 -0
  718. package/dist/client/views/collection/columns/build-columns.d.mts +2 -0
  719. package/dist/client/views/collection/columns/build-columns.mjs +156 -0
  720. package/dist/client/views/collection/columns/build-columns.mjs.map +1 -0
  721. package/dist/client/views/collection/columns/column-defaults.d.mts +2 -0
  722. package/dist/client/views/collection/columns/column-defaults.mjs +108 -0
  723. package/dist/client/views/collection/columns/column-defaults.mjs.map +1 -0
  724. package/dist/client/views/collection/columns/index.d.mts +3 -0
  725. package/dist/client/views/collection/columns/types.d.mts +2 -0
  726. package/dist/client/views/collection/field-context.mjs +127 -0
  727. package/dist/client/views/collection/field-context.mjs.map +1 -0
  728. package/dist/client/views/collection/field-renderer.mjs +171 -0
  729. package/dist/client/views/collection/field-renderer.mjs.map +1 -0
  730. package/dist/client/views/collection/form-view.d.mts +112 -0
  731. package/dist/client/views/collection/form-view.d.mts.map +1 -0
  732. package/dist/client/views/collection/form-view.mjs +903 -0
  733. package/dist/client/views/collection/form-view.mjs.map +1 -0
  734. package/dist/client/views/collection/index.d.mts +9 -0
  735. package/dist/client/views/collection/table-view.d.mts +102 -0
  736. package/dist/client/views/collection/table-view.d.mts.map +1 -0
  737. package/dist/client/views/collection/table-view.mjs +695 -0
  738. package/dist/client/views/collection/table-view.mjs.map +1 -0
  739. package/dist/client/views/collection/view-skeletons.mjs +121 -0
  740. package/dist/client/views/collection/view-skeletons.mjs.map +1 -0
  741. package/dist/client/views/common/global-search.d.mts +1 -0
  742. package/dist/client/views/common/global-search.mjs +376 -0
  743. package/dist/client/views/common/global-search.mjs.map +1 -0
  744. package/dist/client/views/common/index.d.mts +1 -0
  745. package/dist/client/views/dashboard/dashboard-grid.mjs +385 -0
  746. package/dist/client/views/dashboard/dashboard-grid.mjs.map +1 -0
  747. package/dist/client/views/dashboard/dashboard-widget.mjs +178 -0
  748. package/dist/client/views/dashboard/dashboard-widget.mjs.map +1 -0
  749. package/dist/client/views/dashboard/widget-card.mjs +159 -0
  750. package/dist/client/views/dashboard/widget-card.mjs.map +1 -0
  751. package/dist/client/views/globals/global-form-view.d.mts +74 -0
  752. package/dist/client/views/globals/global-form-view.d.mts.map +1 -0
  753. package/dist/client/views/globals/global-form-view.mjs +181 -0
  754. package/dist/client/views/globals/global-form-view.mjs.map +1 -0
  755. package/dist/client/views/index.d.mts +28 -0
  756. package/dist/client/views/layout/admin-layout-provider.d.mts +140 -0
  757. package/dist/client/views/layout/admin-layout-provider.d.mts.map +1 -0
  758. package/dist/client/views/layout/admin-layout-provider.mjs +90 -0
  759. package/dist/client/views/layout/admin-layout-provider.mjs.map +1 -0
  760. package/dist/client/views/layout/admin-layout.d.mts +151 -0
  761. package/dist/client/views/layout/admin-layout.d.mts.map +1 -0
  762. package/dist/client/views/layout/admin-layout.mjs +144 -0
  763. package/dist/client/views/layout/admin-layout.mjs.map +1 -0
  764. package/dist/client/views/layout/admin-root.d.mts +7 -0
  765. package/dist/client/views/layout/admin-router.d.mts +125 -0
  766. package/dist/client/views/layout/admin-router.d.mts.map +1 -0
  767. package/dist/client/views/layout/admin-router.mjs +594 -0
  768. package/dist/client/views/layout/admin-router.mjs.map +1 -0
  769. package/dist/client/views/layout/admin-sidebar.d.mts +105 -0
  770. package/dist/client/views/layout/admin-sidebar.d.mts.map +1 -0
  771. package/dist/client/views/layout/admin-sidebar.mjs +550 -0
  772. package/dist/client/views/layout/admin-sidebar.mjs.map +1 -0
  773. package/dist/client/views/layout/admin-topbar.mjs +128 -0
  774. package/dist/client/views/layout/admin-topbar.mjs.map +1 -0
  775. package/dist/client/views/layout/index.d.mts +5 -0
  776. package/dist/client/views/pages/accept-invite-page.d.mts +67 -0
  777. package/dist/client/views/pages/accept-invite-page.d.mts.map +1 -0
  778. package/dist/client/views/pages/accept-invite-page.mjs +143 -0
  779. package/dist/client/views/pages/accept-invite-page.mjs.map +1 -0
  780. package/dist/client/views/pages/dashboard-page.d.mts +52 -0
  781. package/dist/client/views/pages/dashboard-page.d.mts.map +1 -0
  782. package/dist/client/views/pages/dashboard-page.mjs +45 -0
  783. package/dist/client/views/pages/dashboard-page.mjs.map +1 -0
  784. package/dist/client/views/pages/forgot-password-page.d.mts +59 -0
  785. package/dist/client/views/pages/forgot-password-page.d.mts.map +1 -0
  786. package/dist/client/views/pages/forgot-password-page.mjs +80 -0
  787. package/dist/client/views/pages/forgot-password-page.mjs.map +1 -0
  788. package/dist/client/views/pages/index.d.mts +7 -0
  789. package/dist/client/views/pages/invite-page.d.mts +71 -0
  790. package/dist/client/views/pages/invite-page.d.mts.map +1 -0
  791. package/dist/client/views/pages/invite-page.mjs +86 -0
  792. package/dist/client/views/pages/invite-page.mjs.map +1 -0
  793. package/dist/client/views/pages/login-page.d.mts +76 -0
  794. package/dist/client/views/pages/login-page.d.mts.map +1 -0
  795. package/dist/client/views/pages/login-page.mjs +98 -0
  796. package/dist/client/views/pages/login-page.mjs.map +1 -0
  797. package/dist/client/views/pages/reset-password-page.d.mts +66 -0
  798. package/dist/client/views/pages/reset-password-page.d.mts.map +1 -0
  799. package/dist/client/views/pages/reset-password-page.mjs +105 -0
  800. package/dist/client/views/pages/reset-password-page.mjs.map +1 -0
  801. package/dist/client/views/pages/setup-page.d.mts +64 -0
  802. package/dist/client/views/pages/setup-page.d.mts.map +1 -0
  803. package/dist/client/views/pages/setup-page.mjs +91 -0
  804. package/dist/client/views/pages/setup-page.mjs.map +1 -0
  805. package/dist/client.d.mts +92 -3
  806. package/dist/client.d.mts.map +1 -0
  807. package/dist/client.mjs +54 -12
  808. package/dist/components/rich-text/index.d.mts +1 -0
  809. package/dist/components/rich-text/rich-text-renderer.d.mts +104 -0
  810. package/dist/components/rich-text/rich-text-renderer.d.mts.map +1 -0
  811. package/dist/components/rich-text/rich-text-renderer.mjs +210 -0
  812. package/dist/components/rich-text/rich-text-renderer.mjs.map +1 -0
  813. package/dist/index.d.mts +62 -3
  814. package/dist/index.mjs +54 -12
  815. package/dist/server/adapters/nextjs.d.mts +121 -0
  816. package/dist/server/adapters/nextjs.d.mts.map +1 -0
  817. package/dist/server/adapters/nextjs.mjs +111 -0
  818. package/dist/server/adapters/nextjs.mjs.map +1 -0
  819. package/dist/server/adapters/tanstack.d.mts +133 -0
  820. package/dist/server/adapters/tanstack.d.mts.map +1 -0
  821. package/dist/server/adapters/tanstack.mjs +90 -0
  822. package/dist/server/adapters/tanstack.mjs.map +1 -0
  823. package/dist/server/augmentation.d.mts +1523 -0
  824. package/dist/server/augmentation.d.mts.map +1 -0
  825. package/dist/server/auth-helpers.d.mts +143 -0
  826. package/dist/server/auth-helpers.d.mts.map +1 -0
  827. package/dist/server/auth-helpers.mjs +108 -0
  828. package/dist/server/auth-helpers.mjs.map +1 -0
  829. package/dist/server/block/block-builder.d.mts +319 -0
  830. package/dist/server/block/block-builder.d.mts.map +1 -0
  831. package/dist/server/block/block-builder.mjs +217 -0
  832. package/dist/server/block/block-builder.mjs.map +1 -0
  833. package/dist/server/block/index.d.mts +3 -0
  834. package/dist/server/block/introspection.d.mts +84 -0
  835. package/dist/server/block/introspection.d.mts.map +1 -0
  836. package/dist/server/block/introspection.mjs +89 -0
  837. package/dist/server/block/introspection.mjs.map +1 -0
  838. package/dist/server/block/prefetch.d.mts +78 -0
  839. package/dist/server/block/prefetch.d.mts.map +1 -0
  840. package/dist/server/block/prefetch.mjs +240 -0
  841. package/dist/server/block/prefetch.mjs.map +1 -0
  842. package/dist/server/fields/blocks.d.mts +139 -0
  843. package/dist/server/fields/blocks.d.mts.map +1 -0
  844. package/dist/server/fields/blocks.mjs +192 -0
  845. package/dist/server/fields/blocks.mjs.map +1 -0
  846. package/dist/server/fields/index.d.mts +48 -0
  847. package/dist/server/fields/index.d.mts.map +1 -0
  848. package/dist/server/fields/index.mjs +16 -0
  849. package/dist/server/fields/index.mjs.map +1 -0
  850. package/dist/server/fields/rich-text.d.mts +135 -0
  851. package/dist/server/fields/rich-text.d.mts.map +1 -0
  852. package/dist/server/fields/rich-text.mjs +188 -0
  853. package/dist/server/fields/rich-text.mjs.map +1 -0
  854. package/dist/server/i18n/index.d.mts +16 -0
  855. package/dist/server/i18n/index.d.mts.map +1 -0
  856. package/dist/server/i18n/index.mjs +44 -0
  857. package/dist/server/i18n/index.mjs.map +1 -0
  858. package/dist/server/i18n/messages/cs.mjs +461 -0
  859. package/dist/server/i18n/messages/cs.mjs.map +1 -0
  860. package/dist/server/i18n/messages/de.mjs +461 -0
  861. package/dist/server/i18n/messages/de.mjs.map +1 -0
  862. package/dist/server/i18n/messages/en.mjs +493 -0
  863. package/dist/server/i18n/messages/en.mjs.map +1 -0
  864. package/dist/server/i18n/messages/es.mjs +461 -0
  865. package/dist/server/i18n/messages/es.mjs.map +1 -0
  866. package/dist/server/i18n/messages/fr.mjs +461 -0
  867. package/dist/server/i18n/messages/fr.mjs.map +1 -0
  868. package/dist/server/i18n/messages/index.mjs +24 -0
  869. package/dist/server/i18n/messages/index.mjs.map +1 -0
  870. package/dist/server/i18n/messages/pl.mjs +461 -0
  871. package/dist/server/i18n/messages/pl.mjs.map +1 -0
  872. package/dist/server/i18n/messages/pt.mjs +464 -0
  873. package/dist/server/i18n/messages/pt.mjs.map +1 -0
  874. package/dist/server/i18n/messages/sk.mjs +490 -0
  875. package/dist/server/i18n/messages/sk.mjs.map +1 -0
  876. package/dist/server/index.d.mts +20 -0
  877. package/dist/server/modules/admin/functions/admin-config.mjs +348 -0
  878. package/dist/server/modules/admin/functions/admin-config.mjs.map +1 -0
  879. package/dist/server/modules/admin/functions/execute-action.d.mts +107 -0
  880. package/dist/server/modules/admin/functions/execute-action.d.mts.map +1 -0
  881. package/dist/server/modules/admin/functions/execute-action.mjs +331 -0
  882. package/dist/server/modules/admin/functions/execute-action.mjs.map +1 -0
  883. package/dist/server/modules/admin/functions/locales.mjs +80 -0
  884. package/dist/server/modules/admin/functions/locales.mjs.map +1 -0
  885. package/dist/server/modules/admin/functions/preview.d.mts +70 -0
  886. package/dist/server/modules/admin/functions/preview.d.mts.map +1 -0
  887. package/dist/server/modules/admin/functions/preview.mjs +243 -0
  888. package/dist/server/modules/admin/functions/preview.mjs.map +1 -0
  889. package/dist/server/modules/admin/functions/reactive.d.mts +99 -0
  890. package/dist/server/modules/admin/functions/reactive.d.mts.map +1 -0
  891. package/dist/server/modules/admin/functions/reactive.mjs +378 -0
  892. package/dist/server/modules/admin/functions/reactive.mjs.map +1 -0
  893. package/dist/server/modules/admin/functions/setup.d.mts +84 -0
  894. package/dist/server/modules/admin/functions/setup.d.mts.map +1 -0
  895. package/dist/server/modules/admin/functions/setup.mjs +131 -0
  896. package/dist/server/modules/admin/functions/setup.mjs.map +1 -0
  897. package/dist/server/modules/admin/functions/translations.mjs +125 -0
  898. package/dist/server/modules/admin/functions/translations.mjs.map +1 -0
  899. package/dist/server/modules/admin/functions/widget-data.d.mts +33 -0
  900. package/dist/server/modules/admin/functions/widget-data.d.mts.map +1 -0
  901. package/dist/server/modules/admin/functions/widget-data.mjs +70 -0
  902. package/dist/server/modules/admin/functions/widget-data.mjs.map +1 -0
  903. package/dist/server/modules/admin/index.d.mts +16879 -0
  904. package/dist/server/modules/admin/index.d.mts.map +1 -0
  905. package/dist/server/modules/admin/index.mjs +249 -0
  906. package/dist/server/modules/admin/index.mjs.map +1 -0
  907. package/dist/server/modules/admin-preferences/collections/admin-preferences.collection.d.mts +3 -0
  908. package/dist/server/modules/admin-preferences/collections/admin-preferences.collection.mjs +48 -0
  909. package/dist/server/modules/admin-preferences/collections/admin-preferences.collection.mjs.map +1 -0
  910. package/dist/server/modules/admin-preferences/collections/locks.collection.d.mts +3 -0
  911. package/dist/server/modules/admin-preferences/collections/locks.collection.mjs +79 -0
  912. package/dist/server/modules/admin-preferences/collections/locks.collection.mjs.map +1 -0
  913. package/dist/server/modules/admin-preferences/collections/saved-views.collection.d.mts +1490 -0
  914. package/dist/server/modules/admin-preferences/collections/saved-views.collection.d.mts.map +1 -0
  915. package/dist/server/modules/admin-preferences/collections/saved-views.collection.mjs +57 -0
  916. package/dist/server/modules/admin-preferences/collections/saved-views.collection.mjs.map +1 -0
  917. package/dist/server/patch.d.mts +100 -0
  918. package/dist/server/patch.d.mts.map +1 -0
  919. package/dist/server/patch.mjs +1062 -0
  920. package/dist/server/patch.mjs.map +1 -0
  921. package/dist/server.d.mts +21 -250
  922. package/dist/server.mjs +19 -832
  923. package/dist/shared/preview-utils.d.mts +54 -0
  924. package/dist/shared/preview-utils.d.mts.map +1 -0
  925. package/dist/{preview-utils-BKQ9-TMa.mjs → shared/preview-utils.mjs} +2 -2
  926. package/dist/shared/preview-utils.mjs.map +1 -0
  927. package/dist/{saved-views.types-BMsz5mCy.d.mts → shared/types/saved-views.types.d.mts} +7 -2
  928. package/dist/shared/types/saved-views.types.d.mts.map +1 -0
  929. package/dist/shared.d.mts +3 -57
  930. package/dist/shared.mjs +1 -1
  931. package/package.json +12 -17
  932. package/dist/auth-layout-M8K8_q5R.mjs +0 -181
  933. package/dist/auth-layout-M8K8_q5R.mjs.map +0 -1
  934. package/dist/bulk-upload-dialog-D7w7W1Hl.mjs +0 -273
  935. package/dist/bulk-upload-dialog-D7w7W1Hl.mjs.map +0 -1
  936. package/dist/client-D1DqawtP.d.mts +0 -13403
  937. package/dist/client-D1DqawtP.d.mts.map +0 -1
  938. package/dist/client-njX1rZmi.mjs +0 -22612
  939. package/dist/client-njX1rZmi.mjs.map +0 -1
  940. package/dist/content-locales-provider-BXvuIgfg.mjs +0 -1650
  941. package/dist/content-locales-provider-BXvuIgfg.mjs.map +0 -1
  942. package/dist/dashboard-page-B4PGEdc2.mjs +0 -2500
  943. package/dist/dashboard-page-B4PGEdc2.mjs.map +0 -1
  944. package/dist/dashboard-page-mCY0pgZv.mjs +0 -3
  945. package/dist/dropzone-Do3awXKd.mjs +0 -634
  946. package/dist/dropzone-Do3awXKd.mjs.map +0 -1
  947. package/dist/forgot-password-page-Bcp-An4Y.mjs.map +0 -1
  948. package/dist/forgot-password-page-CEwsdLwn.mjs +0 -3
  949. package/dist/index-B4H3amCD.d.mts +0 -2753
  950. package/dist/index-B4H3amCD.d.mts.map +0 -1
  951. package/dist/login-page-BUnpCbCa.mjs +0 -3
  952. package/dist/login-page-CP4gA-dl.mjs +0 -298
  953. package/dist/login-page-CP4gA-dl.mjs.map +0 -1
  954. package/dist/preview-utils-BKQ9-TMa.mjs.map +0 -1
  955. package/dist/reset-password-page-BqfDmLxA.mjs +0 -281
  956. package/dist/reset-password-page-BqfDmLxA.mjs.map +0 -1
  957. package/dist/reset-password-page-CufHz3h3.mjs +0 -3
  958. package/dist/runtime-6VZM878K.mjs.map +0 -1
  959. package/dist/saved-views.types-BMsz5mCy.d.mts.map +0 -1
  960. package/dist/server.d.mts.map +0 -1
  961. package/dist/server.mjs.map +0 -1
  962. package/dist/setup-page-BNNzt_Z6.mjs +0 -3
  963. package/dist/setup-page-YAP_fzqh.mjs.map +0 -1
  964. package/dist/shared.d.mts.map +0 -1
  965. package/dist/use-auth-BoLmWtmU.mjs.map +0 -1
@@ -0,0 +1,218 @@
1
+ "use client";
2
+
3
+ import { useResolveText } from "../../i18n/hooks.mjs";
4
+ import { cn } from "../../lib/utils.mjs";
5
+ import { Popover, PopoverContent, PopoverTrigger } from "../ui/popover.mjs";
6
+ import { Icon } from "@iconify/react";
7
+ import { useState } from "react";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ import { format } from "date-fns";
10
+ import { DayPicker } from "react-day-picker";
11
+
12
+ //#region src/client/components/primitives/date-input.tsx
13
+ /**
14
+ * Date Input Primitive
15
+ *
16
+ * A date picker with popover calendar.
17
+ * Uses react-day-picker under the hood.
18
+ *
19
+ * @example
20
+ * ```tsx
21
+ * <DateInput
22
+ * value={selectedDate}
23
+ * onChange={setSelectedDate}
24
+ * placeholder="Select date"
25
+ * />
26
+ * ```
27
+ */
28
+ function DateInput({ value, onChange, minDate, maxDate, format: dateFormat = "PP", placeholder = "Select date", disabled, className, id, "aria-invalid": ariaInvalid }) {
29
+ const resolveText = useResolveText();
30
+ const [open, setOpen] = useState(false);
31
+ const handleSelect = (date) => {
32
+ onChange(date ?? null);
33
+ setOpen(false);
34
+ };
35
+ const handleClear = (e) => {
36
+ e.stopPropagation();
37
+ onChange(null);
38
+ };
39
+ return /* @__PURE__ */ jsxs(Popover, {
40
+ open,
41
+ onOpenChange: setOpen,
42
+ children: [/* @__PURE__ */ jsxs(PopoverTrigger, {
43
+ id,
44
+ disabled,
45
+ "aria-invalid": ariaInvalid,
46
+ className: cn("flex h-9 w-full items-center justify-start gap-2 border border-input/80 bg-input/20 backdrop-blur-sm px-3 py-2 text-sm", "hover:bg-accent hover:text-accent-foreground", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2", "disabled:cursor-not-allowed disabled:opacity-50", !value && "text-muted-foreground", className),
47
+ children: [
48
+ /* @__PURE__ */ jsx(Icon, {
49
+ icon: "ph:calendar-blank",
50
+ className: "size-4"
51
+ }),
52
+ /* @__PURE__ */ jsx("span", {
53
+ className: "flex-1 text-left",
54
+ children: value ? format(value, dateFormat) : resolveText(placeholder)
55
+ }),
56
+ value && !disabled && /* @__PURE__ */ jsx(Icon, {
57
+ icon: "ph:x",
58
+ className: "size-4 opacity-50 hover:opacity-100",
59
+ onClick: handleClear
60
+ })
61
+ ]
62
+ }), /* @__PURE__ */ jsx(PopoverContent, {
63
+ className: "w-auto p-0",
64
+ align: "start",
65
+ children: /* @__PURE__ */ jsx(DayPicker, {
66
+ mode: "single",
67
+ selected: value ?? void 0,
68
+ onSelect: handleSelect,
69
+ disabled: (date) => {
70
+ if (minDate && date < minDate) return true;
71
+ if (maxDate && date > maxDate) return true;
72
+ return false;
73
+ },
74
+ className: "p-3",
75
+ classNames: {
76
+ months: "flex flex-col sm:flex-row gap-2",
77
+ month: "flex flex-col gap-4",
78
+ month_caption: "flex justify-center pt-1 relative items-center h-9",
79
+ caption_label: "text-sm font-medium",
80
+ nav: "absolute inset-x-0 top-0 flex items-center justify-between px-1",
81
+ button_previous: cn("size-8 flex items-center justify-center rounded-md", "bg-transparent p-0 opacity-50 hover:opacity-100 hover:bg-accent"),
82
+ button_next: cn("size-8 flex items-center justify-center rounded-md", "bg-transparent p-0 opacity-50 hover:opacity-100 hover:bg-accent"),
83
+ month_grid: "w-full border-collapse",
84
+ weekdays: "flex",
85
+ weekday: "text-muted-foreground w-9 font-normal text-[0.8rem] text-center",
86
+ week: "flex w-full mt-2",
87
+ day: "relative p-0 text-center text-sm focus-within:relative focus-within:z-20 [&:has([aria-selected])]:bg-accent [&:has([aria-selected].day-outside)]:bg-accent/50",
88
+ day_button: cn("size-9 p-0 font-normal rounded-md", "hover:bg-accent hover:text-accent-foreground", "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"),
89
+ selected: "bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground rounded-md",
90
+ today: "bg-accent text-accent-foreground",
91
+ outside: "text-muted-foreground opacity-50",
92
+ disabled: "text-muted-foreground opacity-50",
93
+ hidden: "invisible"
94
+ }
95
+ })
96
+ })]
97
+ });
98
+ }
99
+ /**
100
+ * DateTime Input Primitive
101
+ *
102
+ * A date and time picker.
103
+ *
104
+ * @example
105
+ * ```tsx
106
+ * <DateTimeInput
107
+ * value={scheduledAt}
108
+ * onChange={setScheduledAt}
109
+ * precision="minute"
110
+ * />
111
+ * ```
112
+ */
113
+ function DateTimeInput({ value, onChange, minDate, maxDate, format: dateFormat = "PPp", precision = "minute", placeholder = "Select date and time", disabled, className, id, "aria-invalid": ariaInvalid }) {
114
+ const resolveText = useResolveText();
115
+ const [open, setOpen] = useState(false);
116
+ const [timeValue, setTimeValue] = useState(() => {
117
+ if (!value) return "";
118
+ return precision === "second" ? format(value, "HH:mm:ss") : format(value, "HH:mm");
119
+ });
120
+ const handleDateSelect = (date) => {
121
+ if (!date) {
122
+ onChange(null);
123
+ return;
124
+ }
125
+ if (timeValue) {
126
+ const [hours, minutes, seconds] = timeValue.split(":").map(Number);
127
+ date.setHours(hours || 0, minutes || 0, seconds || 0);
128
+ }
129
+ onChange(date);
130
+ };
131
+ const handleTimeChange = (e) => {
132
+ const time = e.target.value;
133
+ setTimeValue(time);
134
+ if (value && time) {
135
+ const [hours, minutes, seconds] = time.split(":").map(Number);
136
+ const newDate = new Date(value);
137
+ newDate.setHours(hours || 0, minutes || 0, seconds || 0);
138
+ onChange(newDate);
139
+ }
140
+ };
141
+ const handleClear = (e) => {
142
+ e.stopPropagation();
143
+ onChange(null);
144
+ setTimeValue("");
145
+ };
146
+ return /* @__PURE__ */ jsxs(Popover, {
147
+ open,
148
+ onOpenChange: setOpen,
149
+ children: [/* @__PURE__ */ jsxs(PopoverTrigger, {
150
+ id,
151
+ disabled,
152
+ "aria-invalid": ariaInvalid,
153
+ className: cn("flex h-9 w-full items-center justify-start gap-2 border border-input/80 bg-input/20 backdrop-blur-sm px-3 py-2 text-sm", "hover:bg-accent hover:text-accent-foreground", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2", "disabled:cursor-not-allowed disabled:opacity-50", !value && "text-muted-foreground", className),
154
+ children: [
155
+ /* @__PURE__ */ jsx(Icon, {
156
+ icon: "ph:calendar-blank",
157
+ className: "size-4"
158
+ }),
159
+ /* @__PURE__ */ jsx("span", {
160
+ className: "flex-1 text-left",
161
+ children: value ? format(value, dateFormat) : resolveText(placeholder)
162
+ }),
163
+ value && !disabled && /* @__PURE__ */ jsx(Icon, {
164
+ icon: "ph:x",
165
+ className: "size-4 opacity-50 hover:opacity-100",
166
+ onClick: handleClear
167
+ })
168
+ ]
169
+ }), /* @__PURE__ */ jsxs(PopoverContent, {
170
+ className: "w-auto p-0",
171
+ align: "start",
172
+ children: [/* @__PURE__ */ jsx(DayPicker, {
173
+ mode: "single",
174
+ selected: value ?? void 0,
175
+ onSelect: handleDateSelect,
176
+ disabled: (date) => {
177
+ if (minDate && date < minDate) return true;
178
+ if (maxDate && date > maxDate) return true;
179
+ return false;
180
+ },
181
+ className: "p-3",
182
+ classNames: {
183
+ months: "flex flex-col sm:flex-row gap-2",
184
+ month: "flex flex-col gap-4",
185
+ month_caption: "flex justify-center pt-1 relative items-center h-9",
186
+ caption_label: "text-sm font-medium",
187
+ nav: "absolute inset-x-0 top-0 flex items-center justify-between px-1",
188
+ button_previous: cn("size-8 flex items-center justify-center rounded-md", "bg-transparent p-0 opacity-50 hover:opacity-100 hover:bg-accent"),
189
+ button_next: cn("size-8 flex items-center justify-center rounded-md", "bg-transparent p-0 opacity-50 hover:opacity-100 hover:bg-accent"),
190
+ month_grid: "w-full border-collapse",
191
+ weekdays: "flex",
192
+ weekday: "text-muted-foreground w-9 font-normal text-[0.8rem] text-center",
193
+ week: "flex w-full mt-2",
194
+ day: "relative p-0 text-center text-sm focus-within:relative focus-within:z-20 [&:has([aria-selected])]:bg-accent [&:has([aria-selected].day-outside)]:bg-accent/50",
195
+ day_button: cn("size-9 p-0 font-normal rounded-md", "hover:bg-accent hover:text-accent-foreground", "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"),
196
+ selected: "bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground rounded-md",
197
+ today: "bg-accent text-accent-foreground",
198
+ outside: "text-muted-foreground opacity-50",
199
+ disabled: "text-muted-foreground opacity-50",
200
+ hidden: "invisible"
201
+ }
202
+ }), /* @__PURE__ */ jsx("div", {
203
+ className: "border-t border-border p-3",
204
+ children: /* @__PURE__ */ jsx("input", {
205
+ type: "time",
206
+ step: precision === "second" ? 1 : 60,
207
+ value: timeValue,
208
+ onChange: handleTimeChange,
209
+ className: cn("flex h-9 w-full border border-input/80 bg-input/20 backdrop-blur-sm px-3 py-2 text-sm", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2")
210
+ })
211
+ })]
212
+ })]
213
+ });
214
+ }
215
+
216
+ //#endregion
217
+ export { DateInput, DateTimeInput };
218
+ //# sourceMappingURL=date-input.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-input.mjs","names":[],"sources":["../../../../src/client/components/primitives/date-input.tsx"],"sourcesContent":["\"use client\";\n\nimport { Icon } from \"@iconify/react\";\nimport { format } from \"date-fns\";\nimport { useState } from \"react\";\nimport { DayPicker } from \"react-day-picker\";\nimport { useResolveText } from \"../../i18n/hooks\";\nimport { cn } from \"../../lib/utils\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/popover\";\nimport type {\n DateInputProps,\n DateRangeInputProps,\n DateTimeInputProps,\n} from \"./types\";\n\n/**\n * Date Input Primitive\n *\n * A date picker with popover calendar.\n * Uses react-day-picker under the hood.\n *\n * @example\n * ```tsx\n * <DateInput\n * value={selectedDate}\n * onChange={setSelectedDate}\n * placeholder=\"Select date\"\n * />\n * ```\n */\nexport function DateInput({\n value,\n onChange,\n minDate,\n maxDate,\n format: dateFormat = \"PP\",\n placeholder = \"Select date\",\n disabled,\n className,\n id,\n \"aria-invalid\": ariaInvalid,\n}: DateInputProps) {\n const resolveText = useResolveText();\n const [open, setOpen] = useState(false);\n\n const handleSelect = (date: Date | undefined) => {\n onChange(date ?? null);\n setOpen(false);\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange(null);\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger\n id={id}\n disabled={disabled}\n aria-invalid={ariaInvalid}\n className={cn(\n \"flex h-9 w-full items-center justify-start gap-2 border border-input/80 bg-input/20 backdrop-blur-sm px-3 py-2 text-sm\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n !value && \"text-muted-foreground\",\n className,\n )}\n >\n <Icon icon=\"ph:calendar-blank\" className=\"size-4\" />\n <span className=\"flex-1 text-left\">\n {value ? format(value, dateFormat) : resolveText(placeholder)}\n </span>\n {value && !disabled && (\n <Icon\n icon=\"ph:x\"\n className=\"size-4 opacity-50 hover:opacity-100\"\n onClick={handleClear}\n />\n )}\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <DayPicker\n mode=\"single\"\n selected={value ?? undefined}\n onSelect={handleSelect}\n disabled={(date) => {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return false;\n }}\n className=\"p-3\"\n classNames={{\n months: \"flex flex-col sm:flex-row gap-2\",\n month: \"flex flex-col gap-4\",\n month_caption: \"flex justify-center pt-1 relative items-center h-9\",\n caption_label: \"text-sm font-medium\",\n nav: \"absolute inset-x-0 top-0 flex items-center justify-between px-1\",\n button_previous: cn(\n \"size-8 flex items-center justify-center rounded-md\",\n \"bg-transparent p-0 opacity-50 hover:opacity-100 hover:bg-accent\",\n ),\n button_next: cn(\n \"size-8 flex items-center justify-center rounded-md\",\n \"bg-transparent p-0 opacity-50 hover:opacity-100 hover:bg-accent\",\n ),\n month_grid: \"w-full border-collapse\",\n weekdays: \"flex\",\n weekday:\n \"text-muted-foreground w-9 font-normal text-[0.8rem] text-center\",\n week: \"flex w-full mt-2\",\n day: \"relative p-0 text-center text-sm focus-within:relative focus-within:z-20 [&:has([aria-selected])]:bg-accent [&:has([aria-selected].day-outside)]:bg-accent/50\",\n day_button: cn(\n \"size-9 p-0 font-normal rounded-md\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n ),\n selected:\n \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground rounded-md\",\n today: \"bg-accent text-accent-foreground\",\n outside: \"text-muted-foreground opacity-50\",\n disabled: \"text-muted-foreground opacity-50\",\n hidden: \"invisible\",\n }}\n />\n </PopoverContent>\n </Popover>\n );\n}\n\n/**\n * DateTime Input Primitive\n *\n * A date and time picker.\n *\n * @example\n * ```tsx\n * <DateTimeInput\n * value={scheduledAt}\n * onChange={setScheduledAt}\n * precision=\"minute\"\n * />\n * ```\n */\nexport function DateTimeInput({\n value,\n onChange,\n minDate,\n maxDate,\n format: dateFormat = \"PPp\",\n precision = \"minute\",\n placeholder = \"Select date and time\",\n disabled,\n className,\n id,\n \"aria-invalid\": ariaInvalid,\n}: DateTimeInputProps) {\n const resolveText = useResolveText();\n const [open, setOpen] = useState(false);\n const [timeValue, setTimeValue] = useState(() => {\n if (!value) return \"\";\n return precision === \"second\"\n ? format(value, \"HH:mm:ss\")\n : format(value, \"HH:mm\");\n });\n\n const handleDateSelect = (date: Date | undefined) => {\n if (!date) {\n onChange(null);\n return;\n }\n\n // Preserve existing time if available\n if (timeValue) {\n const [hours, minutes, seconds] = timeValue.split(\":\").map(Number);\n date.setHours(hours || 0, minutes || 0, seconds || 0);\n }\n onChange(date);\n };\n\n const handleTimeChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const time = e.target.value;\n setTimeValue(time);\n\n if (value && time) {\n const [hours, minutes, seconds] = time.split(\":\").map(Number);\n const newDate = new Date(value);\n newDate.setHours(hours || 0, minutes || 0, seconds || 0);\n onChange(newDate);\n }\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange(null);\n setTimeValue(\"\");\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger\n id={id}\n disabled={disabled}\n aria-invalid={ariaInvalid}\n className={cn(\n \"flex h-9 w-full items-center justify-start gap-2 border border-input/80 bg-input/20 backdrop-blur-sm px-3 py-2 text-sm\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n !value && \"text-muted-foreground\",\n className,\n )}\n >\n <Icon icon=\"ph:calendar-blank\" className=\"size-4\" />\n <span className=\"flex-1 text-left\">\n {value ? format(value, dateFormat) : resolveText(placeholder)}\n </span>\n {value && !disabled && (\n <Icon\n icon=\"ph:x\"\n className=\"size-4 opacity-50 hover:opacity-100\"\n onClick={handleClear}\n />\n )}\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <DayPicker\n mode=\"single\"\n selected={value ?? undefined}\n onSelect={handleDateSelect}\n disabled={(date) => {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return false;\n }}\n className=\"p-3\"\n classNames={{\n months: \"flex flex-col sm:flex-row gap-2\",\n month: \"flex flex-col gap-4\",\n month_caption: \"flex justify-center pt-1 relative items-center h-9\",\n caption_label: \"text-sm font-medium\",\n nav: \"absolute inset-x-0 top-0 flex items-center justify-between px-1\",\n button_previous: cn(\n \"size-8 flex items-center justify-center rounded-md\",\n \"bg-transparent p-0 opacity-50 hover:opacity-100 hover:bg-accent\",\n ),\n button_next: cn(\n \"size-8 flex items-center justify-center rounded-md\",\n \"bg-transparent p-0 opacity-50 hover:opacity-100 hover:bg-accent\",\n ),\n month_grid: \"w-full border-collapse\",\n weekdays: \"flex\",\n weekday:\n \"text-muted-foreground w-9 font-normal text-[0.8rem] text-center\",\n week: \"flex w-full mt-2\",\n day: \"relative p-0 text-center text-sm focus-within:relative focus-within:z-20 [&:has([aria-selected])]:bg-accent [&:has([aria-selected].day-outside)]:bg-accent/50\",\n day_button: cn(\n \"size-9 p-0 font-normal rounded-md\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n ),\n selected:\n \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground rounded-md\",\n today: \"bg-accent text-accent-foreground\",\n outside: \"text-muted-foreground opacity-50\",\n disabled: \"text-muted-foreground opacity-50\",\n hidden: \"invisible\",\n }}\n />\n <div className=\"border-t border-border p-3\">\n <input\n type=\"time\"\n step={precision === \"second\" ? 1 : 60}\n value={timeValue}\n onChange={handleTimeChange}\n className={cn(\n \"flex h-9 w-full border border-input/80 bg-input/20 backdrop-blur-sm px-3 py-2 text-sm\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n )}\n />\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\n/**\n * Date Range Input Primitive\n *\n * A date range picker for selecting start and end dates.\n *\n * @example\n * ```tsx\n * <DateRangeInput\n * value={{ start: startDate, end: endDate }}\n * onChange={setDateRange}\n * />\n * ```\n */\nexport function DateRangeInput({\n value,\n onChange,\n minDate,\n maxDate,\n placeholder = \"Select date range\",\n disabled,\n className,\n id,\n \"aria-invalid\": ariaInvalid,\n}: DateRangeInputProps) {\n const resolveText = useResolveText();\n const [open, setOpen] = useState(false);\n\n const handleSelect = (range: { from?: Date; to?: Date } | undefined) => {\n onChange({\n start: range?.from ?? null,\n end: range?.to ?? null,\n });\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange({ start: null, end: null });\n };\n\n const displayValue = () => {\n if (!value.start && !value.end) return resolveText(placeholder);\n if (value.start && value.end) {\n return `${format(value.start, \"PP\")} - ${format(value.end, \"PP\")}`;\n }\n if (value.start) return `${format(value.start, \"PP\")} - ...`;\n return resolveText(placeholder);\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger\n id={id}\n disabled={disabled}\n aria-invalid={ariaInvalid}\n className={cn(\n \"flex h-9 w-full items-center justify-start gap-2 border border-input/80 bg-input/20 backdrop-blur-sm px-3 py-2 text-sm\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n !value.start && !value.end && \"text-muted-foreground\",\n className,\n )}\n >\n <Icon icon=\"ph:calendar-blank\" className=\"size-4\" />\n <span className=\"flex-1 text-left\">{displayValue()}</span>\n {(value.start || value.end) && !disabled && (\n <Icon\n icon=\"ph:x\"\n className=\"size-4 opacity-50 hover:opacity-100\"\n onClick={handleClear}\n />\n )}\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <DayPicker\n mode=\"range\"\n selected={\n value.start || value.end\n ? { from: value.start ?? undefined, to: value.end ?? undefined }\n : undefined\n }\n onSelect={handleSelect}\n numberOfMonths={2}\n disabled={(date) => {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return false;\n }}\n className=\"p-3\"\n classNames={{\n months: \"flex flex-col sm:flex-row gap-4\",\n month: \"flex flex-col gap-4\",\n month_caption: \"flex justify-center pt-1 relative items-center h-9\",\n caption_label: \"text-sm font-medium\",\n nav: \"absolute inset-x-0 top-0 flex items-center justify-between px-1\",\n button_previous: cn(\n \"size-8 flex items-center justify-center rounded-md\",\n \"bg-transparent p-0 opacity-50 hover:opacity-100 hover:bg-accent\",\n ),\n button_next: cn(\n \"size-8 flex items-center justify-center rounded-md\",\n \"bg-transparent p-0 opacity-50 hover:opacity-100 hover:bg-accent\",\n ),\n month_grid: \"w-full border-collapse\",\n weekdays: \"flex\",\n weekday:\n \"text-muted-foreground w-9 font-normal text-[0.8rem] text-center\",\n week: \"flex w-full mt-2\",\n day: \"relative p-0 text-center text-sm focus-within:relative focus-within:z-20 [&:has([aria-selected])]:bg-accent [&:has([aria-selected].day-outside)]:bg-accent/50\",\n day_button: cn(\n \"size-9 p-0 font-normal rounded-md\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n ),\n selected:\n \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground rounded-md\",\n range_start: \"rounded-l-md\",\n range_end: \"rounded-r-md\",\n range_middle: \"bg-accent\",\n today: \"bg-accent text-accent-foreground\",\n outside: \"text-muted-foreground opacity-50\",\n disabled: \"text-muted-foreground opacity-50\",\n hidden: \"invisible\",\n }}\n />\n </PopoverContent>\n </Popover>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,239 @@
1
+ import { cn } from "../../lib/utils.mjs";
2
+ import { Icon } from "@iconify/react";
3
+ import * as React$1 from "react";
4
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
+
6
+ //#region src/client/components/primitives/dropzone.tsx
7
+ /**
8
+ * Dropzone Primitive
9
+ *
10
+ * A reusable drag-and-drop area for file uploads.
11
+ * Supports file type filtering, size validation, and visual feedback.
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * <Dropzone
16
+ * onDrop={(files) => handleUpload(files)}
17
+ * accept={["image/*", "application/pdf"]}
18
+ * maxSize={5_000_000}
19
+ * />
20
+ * ```
21
+ */
22
+ /**
23
+ * Check if a file matches accepted types
24
+ */
25
+ function matchesAccept(file, accept) {
26
+ if (!accept || accept.length === 0) return true;
27
+ const mimeType = file.type.toLowerCase();
28
+ const fileName = file.name.toLowerCase();
29
+ return accept.some((pattern) => {
30
+ const normalizedPattern = pattern.toLowerCase();
31
+ if (normalizedPattern.endsWith("/*")) {
32
+ const baseType = normalizedPattern.slice(0, -2);
33
+ return mimeType.startsWith(`${baseType}/`);
34
+ }
35
+ if (normalizedPattern.startsWith(".")) return fileName.endsWith(normalizedPattern);
36
+ return mimeType === normalizedPattern;
37
+ });
38
+ }
39
+ /**
40
+ * Format file size for display
41
+ */
42
+ function formatFileSize(bytes) {
43
+ if (bytes < 1024) return `${bytes} B`;
44
+ if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
45
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
46
+ }
47
+ function Dropzone({ onDrop, accept, maxSize, multiple = false, disabled = false, loading = false, progress, label = "Drop files here or click to browse", hint, error, className, children, onValidationError }) {
48
+ const [isDragging, setIsDragging] = React$1.useState(false);
49
+ const inputRef = React$1.useRef(null);
50
+ const dragCounterRef = React$1.useRef(0);
51
+ /**
52
+ * Validate files and return valid ones + errors
53
+ */
54
+ const validateFiles = React$1.useCallback((files) => {
55
+ const valid = [];
56
+ const errors = [];
57
+ for (const file of files) {
58
+ if (!matchesAccept(file, accept)) {
59
+ errors.push({
60
+ file,
61
+ type: "type",
62
+ message: `"${file.name}" is not an accepted file type`
63
+ });
64
+ continue;
65
+ }
66
+ if (maxSize && file.size > maxSize) {
67
+ errors.push({
68
+ file,
69
+ type: "size",
70
+ message: `"${file.name}" exceeds maximum size of ${formatFileSize(maxSize)}`
71
+ });
72
+ continue;
73
+ }
74
+ valid.push(file);
75
+ }
76
+ return {
77
+ valid,
78
+ errors
79
+ };
80
+ }, [accept, maxSize]);
81
+ /**
82
+ * Handle file selection
83
+ */
84
+ const handleFiles = React$1.useCallback((files) => {
85
+ if (disabled || loading) return;
86
+ const fileArray = Array.from(files);
87
+ const { valid, errors } = validateFiles(multiple ? fileArray : fileArray.slice(0, 1));
88
+ if (errors.length > 0) onValidationError?.(errors);
89
+ if (valid.length > 0) onDrop(valid);
90
+ }, [
91
+ disabled,
92
+ loading,
93
+ multiple,
94
+ validateFiles,
95
+ onDrop,
96
+ onValidationError
97
+ ]);
98
+ /**
99
+ * Handle drag events
100
+ */
101
+ const handleDragEnter = React$1.useCallback((e) => {
102
+ e.preventDefault();
103
+ e.stopPropagation();
104
+ dragCounterRef.current += 1;
105
+ if (e.dataTransfer.items.length > 0 && !disabled && !loading) setIsDragging(true);
106
+ }, [disabled, loading]);
107
+ const handleDragLeave = React$1.useCallback((e) => {
108
+ e.preventDefault();
109
+ e.stopPropagation();
110
+ dragCounterRef.current -= 1;
111
+ if (dragCounterRef.current === 0) setIsDragging(false);
112
+ }, []);
113
+ const handleDragOver = React$1.useCallback((e) => {
114
+ e.preventDefault();
115
+ e.stopPropagation();
116
+ }, []);
117
+ const handleDrop = React$1.useCallback((e) => {
118
+ e.preventDefault();
119
+ e.stopPropagation();
120
+ dragCounterRef.current = 0;
121
+ setIsDragging(false);
122
+ if (e.dataTransfer.files.length > 0) handleFiles(e.dataTransfer.files);
123
+ }, [handleFiles]);
124
+ /**
125
+ * Handle click to open file dialog
126
+ */
127
+ const handleClick = React$1.useCallback(() => {
128
+ if (disabled || loading) return;
129
+ inputRef.current?.click();
130
+ }, [disabled, loading]);
131
+ /**
132
+ * Handle file input change
133
+ */
134
+ const handleInputChange = React$1.useCallback((e) => {
135
+ if (e.target.files && e.target.files.length > 0) handleFiles(e.target.files);
136
+ e.target.value = "";
137
+ }, [handleFiles]);
138
+ /**
139
+ * Build accept string for input
140
+ */
141
+ const acceptString = accept?.join(",") || void 0;
142
+ /**
143
+ * Build hint text
144
+ */
145
+ const hintText = React$1.useMemo(() => {
146
+ if (hint) return hint;
147
+ const parts = [];
148
+ if (accept && accept.length > 0) {
149
+ const types = accept.map((t) => {
150
+ if (t.startsWith("image/")) return "Images";
151
+ if (t.startsWith("video/")) return "Videos";
152
+ if (t.startsWith("audio/")) return "Audio";
153
+ if (t === "application/pdf") return "PDF";
154
+ if (t.startsWith(".")) return t.toUpperCase();
155
+ return t;
156
+ }).filter((v, i, a) => a.indexOf(v) === i);
157
+ parts.push(types.join(", "));
158
+ }
159
+ if (maxSize) parts.push(`Max ${formatFileSize(maxSize)}`);
160
+ return parts.length > 0 ? parts.join(" • ") : void 0;
161
+ }, [
162
+ hint,
163
+ accept,
164
+ maxSize
165
+ ]);
166
+ return /* @__PURE__ */ jsxs("div", {
167
+ role: "button",
168
+ tabIndex: disabled || loading ? -1 : 0,
169
+ onClick: handleClick,
170
+ onKeyDown: (e) => {
171
+ if (e.key === "Enter" || e.key === " ") {
172
+ e.preventDefault();
173
+ handleClick();
174
+ }
175
+ },
176
+ onDragEnter: handleDragEnter,
177
+ onDragLeave: handleDragLeave,
178
+ onDragOver: handleDragOver,
179
+ onDrop: handleDrop,
180
+ className: cn("relative flex min-h-[120px] cursor-pointer flex-col items-center justify-center gap-2 rounded-lg border-2 border-dashed p-6 text-center transition-colors", "border-border/60 bg-muted/30 hover:border-border hover:bg-muted/50", isDragging && "border-primary bg-primary/5", error && "border-destructive/50 bg-destructive/5", (disabled || loading) && "pointer-events-none opacity-60", className),
181
+ "aria-disabled": disabled || loading,
182
+ "data-dragging": isDragging || void 0,
183
+ children: [
184
+ /* @__PURE__ */ jsx("input", {
185
+ ref: inputRef,
186
+ type: "file",
187
+ accept: acceptString,
188
+ multiple,
189
+ onChange: handleInputChange,
190
+ className: "sr-only",
191
+ disabled: disabled || loading,
192
+ tabIndex: -1
193
+ }),
194
+ children || /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("div", {
195
+ className: "flex items-center justify-center",
196
+ children: loading ? /* @__PURE__ */ jsxs("div", {
197
+ className: "relative",
198
+ children: [/* @__PURE__ */ jsx(Icon, {
199
+ icon: "ph:spinner-gap",
200
+ className: "text-muted-foreground size-10 animate-spin"
201
+ }), typeof progress === "number" && /* @__PURE__ */ jsxs("span", {
202
+ className: "text-muted-foreground absolute inset-0 flex items-center justify-center text-xs font-medium",
203
+ children: [progress, "%"]
204
+ })]
205
+ }) : /* @__PURE__ */ jsx(Icon, {
206
+ icon: "ph:cloud-arrow-up",
207
+ className: cn("size-10 transition-colors", isDragging ? "text-primary" : "text-muted-foreground")
208
+ })
209
+ }), /* @__PURE__ */ jsxs("div", {
210
+ className: "space-y-1",
211
+ children: [
212
+ /* @__PURE__ */ jsx("p", {
213
+ className: cn("text-sm font-medium", isDragging ? "text-primary" : "text-foreground"),
214
+ children: loading ? "Uploading..." : label
215
+ }),
216
+ hintText && !loading && /* @__PURE__ */ jsx("p", {
217
+ className: "text-muted-foreground text-xs",
218
+ children: hintText
219
+ }),
220
+ loading && typeof progress === "number" && /* @__PURE__ */ jsx("div", {
221
+ className: "bg-muted mx-auto mt-2 h-1.5 w-32 overflow-hidden rounded-full",
222
+ children: /* @__PURE__ */ jsx("div", {
223
+ className: "bg-primary h-full rounded-full transition-all duration-300",
224
+ style: { width: `${progress}%` }
225
+ })
226
+ })
227
+ ]
228
+ })] }),
229
+ error && /* @__PURE__ */ jsx("p", {
230
+ className: "text-destructive absolute bottom-2 left-0 right-0 text-center text-xs",
231
+ children: error
232
+ })
233
+ ]
234
+ });
235
+ }
236
+
237
+ //#endregion
238
+ export { Dropzone };
239
+ //# sourceMappingURL=dropzone.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropzone.mjs","names":["React","valid: File[]","errors: ValidationError[]","parts: string[]"],"sources":["../../../../src/client/components/primitives/dropzone.tsx"],"sourcesContent":["/**\n * Dropzone Primitive\n *\n * A reusable drag-and-drop area for file uploads.\n * Supports file type filtering, size validation, and visual feedback.\n *\n * @example\n * ```tsx\n * <Dropzone\n * onDrop={(files) => handleUpload(files)}\n * accept={[\"image/*\", \"application/pdf\"]}\n * maxSize={5_000_000}\n * />\n * ```\n */\n\nimport * as React from \"react\";\nimport { Icon } from \"@iconify/react\";\nimport { cn } from \"../../lib/utils\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface DropzoneProps {\n /**\n * Called when files are dropped or selected\n */\n onDrop: (files: File[]) => void;\n\n /**\n * Accepted file types (MIME types or extensions)\n * @example [\"image/*\", \"application/pdf\", \".doc\"]\n */\n accept?: string[];\n\n /**\n * Maximum file size in bytes\n */\n maxSize?: number;\n\n /**\n * Whether multiple files can be selected\n * @default false\n */\n multiple?: boolean;\n\n /**\n * Disable the dropzone\n */\n disabled?: boolean;\n\n /**\n * Show loading state (e.g., during upload)\n */\n loading?: boolean;\n\n /**\n * Current upload progress (0-100)\n */\n progress?: number;\n\n /**\n * Custom label text\n * @default \"Drop files here or click to browse\"\n */\n label?: string;\n\n /**\n * Helper text shown below the label\n */\n hint?: string;\n\n /**\n * Error message to display\n */\n error?: string;\n\n /**\n * Additional className\n */\n className?: string;\n\n /**\n * Children to render inside the dropzone (custom content)\n */\n children?: React.ReactNode;\n\n /**\n * Callback when validation fails\n */\n onValidationError?: (errors: ValidationError[]) => void;\n}\n\nexport interface ValidationError {\n file: File;\n type: \"type\" | \"size\";\n message: string;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/**\n * Check if a file matches accepted types\n */\nfunction matchesAccept(file: File, accept?: string[]): boolean {\n if (!accept || accept.length === 0) return true;\n\n const mimeType = file.type.toLowerCase();\n const fileName = file.name.toLowerCase();\n\n return accept.some((pattern) => {\n const normalizedPattern = pattern.toLowerCase();\n\n // Handle wildcard MIME types like \"image/*\"\n if (normalizedPattern.endsWith(\"/*\")) {\n const baseType = normalizedPattern.slice(0, -2);\n return mimeType.startsWith(`${baseType}/`);\n }\n\n // Handle extensions like \".pdf\"\n if (normalizedPattern.startsWith(\".\")) {\n return fileName.endsWith(normalizedPattern);\n }\n\n // Handle exact MIME types\n return mimeType === normalizedPattern;\n });\n}\n\n/**\n * Format file size for display\n */\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport function Dropzone({\n onDrop,\n accept,\n maxSize,\n multiple = false,\n disabled = false,\n loading = false,\n progress,\n label = \"Drop files here or click to browse\",\n hint,\n error,\n className,\n children,\n onValidationError,\n}: DropzoneProps) {\n const [isDragging, setIsDragging] = React.useState(false);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const dragCounterRef = React.useRef(0);\n\n /**\n * Validate files and return valid ones + errors\n */\n const validateFiles = React.useCallback(\n (files: File[]): { valid: File[]; errors: ValidationError[] } => {\n const valid: File[] = [];\n const errors: ValidationError[] = [];\n\n for (const file of files) {\n // Check type\n if (!matchesAccept(file, accept)) {\n errors.push({\n file,\n type: \"type\",\n message: `\"${file.name}\" is not an accepted file type`,\n });\n continue;\n }\n\n // Check size\n if (maxSize && file.size > maxSize) {\n errors.push({\n file,\n type: \"size\",\n message: `\"${file.name}\" exceeds maximum size of ${formatFileSize(maxSize)}`,\n });\n continue;\n }\n\n valid.push(file);\n }\n\n return { valid, errors };\n },\n [accept, maxSize],\n );\n\n /**\n * Handle file selection\n */\n const handleFiles = React.useCallback(\n (files: FileList | File[]) => {\n if (disabled || loading) return;\n\n const fileArray = Array.from(files);\n const filesToProcess = multiple ? fileArray : fileArray.slice(0, 1);\n\n const { valid, errors } = validateFiles(filesToProcess);\n\n if (errors.length > 0) {\n onValidationError?.(errors);\n }\n\n if (valid.length > 0) {\n onDrop(valid);\n }\n },\n [disabled, loading, multiple, validateFiles, onDrop, onValidationError],\n );\n\n /**\n * Handle drag events\n */\n const handleDragEnter = React.useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragCounterRef.current += 1;\n if (e.dataTransfer.items.length > 0 && !disabled && !loading) {\n setIsDragging(true);\n }\n },\n [disabled, loading],\n );\n\n const handleDragLeave = React.useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragCounterRef.current -= 1;\n if (dragCounterRef.current === 0) {\n setIsDragging(false);\n }\n }, []);\n\n const handleDragOver = React.useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n }, []);\n\n const handleDrop = React.useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragCounterRef.current = 0;\n setIsDragging(false);\n\n if (e.dataTransfer.files.length > 0) {\n handleFiles(e.dataTransfer.files);\n }\n },\n [handleFiles],\n );\n\n /**\n * Handle click to open file dialog\n */\n const handleClick = React.useCallback(() => {\n if (disabled || loading) return;\n inputRef.current?.click();\n }, [disabled, loading]);\n\n /**\n * Handle file input change\n */\n const handleInputChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files && e.target.files.length > 0) {\n handleFiles(e.target.files);\n }\n // Reset input so same file can be selected again\n e.target.value = \"\";\n },\n [handleFiles],\n );\n\n /**\n * Build accept string for input\n */\n const acceptString = accept?.join(\",\") || undefined;\n\n /**\n * Build hint text\n */\n const hintText = React.useMemo(() => {\n if (hint) return hint;\n\n const parts: string[] = [];\n\n if (accept && accept.length > 0) {\n // Simplify accept types for display\n const types = accept\n .map((t) => {\n if (t.startsWith(\"image/\")) return \"Images\";\n if (t.startsWith(\"video/\")) return \"Videos\";\n if (t.startsWith(\"audio/\")) return \"Audio\";\n if (t === \"application/pdf\") return \"PDF\";\n if (t.startsWith(\".\")) return t.toUpperCase();\n return t;\n })\n .filter((v, i, a) => a.indexOf(v) === i); // unique\n parts.push(types.join(\", \"));\n }\n\n if (maxSize) {\n parts.push(`Max ${formatFileSize(maxSize)}`);\n }\n\n return parts.length > 0 ? parts.join(\" • \") : undefined;\n }, [hint, accept, maxSize]);\n\n return (\n <div\n role=\"button\"\n tabIndex={disabled || loading ? -1 : 0}\n onClick={handleClick}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleClick();\n }\n }}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n className={cn(\n \"relative flex min-h-[120px] cursor-pointer flex-col items-center justify-center gap-2 rounded-lg border-2 border-dashed p-6 text-center transition-colors\",\n \"border-border/60 bg-muted/30 hover:border-border hover:bg-muted/50\",\n isDragging && \"border-primary bg-primary/5\",\n error && \"border-destructive/50 bg-destructive/5\",\n (disabled || loading) && \"pointer-events-none opacity-60\",\n className,\n )}\n aria-disabled={disabled || loading}\n data-dragging={isDragging || undefined}\n >\n {/* Hidden file input */}\n <input\n ref={inputRef}\n type=\"file\"\n accept={acceptString}\n multiple={multiple}\n onChange={handleInputChange}\n className=\"sr-only\"\n disabled={disabled || loading}\n tabIndex={-1}\n />\n\n {/* Custom children or default content */}\n {children || (\n <>\n {/* Icon / Loading */}\n <div className=\"flex items-center justify-center\">\n {loading ? (\n <div className=\"relative\">\n <Icon\n icon=\"ph:spinner-gap\"\n className=\"text-muted-foreground size-10 animate-spin\"\n />\n {typeof progress === \"number\" && (\n <span className=\"text-muted-foreground absolute inset-0 flex items-center justify-center text-xs font-medium\">\n {progress}%\n </span>\n )}\n </div>\n ) : (\n <Icon\n icon=\"ph:cloud-arrow-up\"\n className={cn(\n \"size-10 transition-colors\",\n isDragging ? \"text-primary\" : \"text-muted-foreground\",\n )}\n />\n )}\n </div>\n\n {/* Label */}\n <div className=\"space-y-1\">\n <p\n className={cn(\n \"text-sm font-medium\",\n isDragging ? \"text-primary\" : \"text-foreground\",\n )}\n >\n {loading ? \"Uploading...\" : label}\n </p>\n\n {/* Hint */}\n {hintText && !loading && (\n <p className=\"text-muted-foreground text-xs\">{hintText}</p>\n )}\n\n {/* Progress bar */}\n {loading && typeof progress === \"number\" && (\n <div className=\"bg-muted mx-auto mt-2 h-1.5 w-32 overflow-hidden rounded-full\">\n <div\n className=\"bg-primary h-full rounded-full transition-all duration-300\"\n style={{ width: `${progress}%` }}\n />\n </div>\n )}\n </div>\n </>\n )}\n\n {/* Error message */}\n {error && (\n <p className=\"text-destructive absolute bottom-2 left-0 right-0 text-center text-xs\">\n {error}\n </p>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ import { useResolveText } from "../../i18n/hooks.mjs";
2
+ import { cn } from "../../lib/utils.mjs";
3
+ import { Button } from "../ui/button.mjs";
4
+ import { Input } from "../ui/input.mjs";
5
+ import { Icon } from "@iconify/react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+
8
+ //#region src/client/components/primitives/number-input.tsx
9
+ /**
10
+ * Number Input Primitive
11
+ *
12
+ * A number input with optional increment/decrement buttons.
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * <NumberInput
17
+ * value={count}
18
+ * onChange={setCount}
19
+ * min={0}
20
+ * max={100}
21
+ * step={1}
22
+ * showButtons
23
+ * />
24
+ * ```
25
+ */
26
+ function NumberInput({ value, onChange, min, max, step = 1, showButtons = false, placeholder, disabled, readOnly, className, id, "aria-invalid": ariaInvalid }) {
27
+ const resolveText = useResolveText();
28
+ const handleChange = (newValue) => {
29
+ if (newValue === null) {
30
+ onChange(null);
31
+ return;
32
+ }
33
+ let clampedValue = newValue;
34
+ if (min !== void 0 && clampedValue < min) clampedValue = min;
35
+ if (max !== void 0 && clampedValue > max) clampedValue = max;
36
+ onChange(clampedValue);
37
+ };
38
+ const increment = () => {
39
+ handleChange((value ?? 0) + step);
40
+ };
41
+ const decrement = () => {
42
+ handleChange((value ?? 0) - step);
43
+ };
44
+ if (showButtons) return /* @__PURE__ */ jsxs("div", {
45
+ className: cn("flex items-center gap-1", className),
46
+ children: [
47
+ /* @__PURE__ */ jsx(Button, {
48
+ type: "button",
49
+ variant: "outline",
50
+ size: "icon-sm",
51
+ onClick: decrement,
52
+ disabled: disabled || min !== void 0 && (value ?? 0) <= min,
53
+ tabIndex: -1,
54
+ children: /* @__PURE__ */ jsx(Icon, {
55
+ icon: "ph:minus",
56
+ className: "size-3"
57
+ })
58
+ }),
59
+ /* @__PURE__ */ jsx(Input, {
60
+ id,
61
+ type: "number",
62
+ value: value ?? "",
63
+ onChange: (e) => {
64
+ const val = e.target.value;
65
+ if (val === "") handleChange(null);
66
+ else handleChange(Number(val));
67
+ },
68
+ placeholder: resolveText(placeholder),
69
+ disabled,
70
+ readOnly,
71
+ min,
72
+ max,
73
+ step,
74
+ "aria-invalid": ariaInvalid,
75
+ className: "text-center [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none"
76
+ }),
77
+ /* @__PURE__ */ jsx(Button, {
78
+ type: "button",
79
+ variant: "outline",
80
+ size: "icon-sm",
81
+ onClick: increment,
82
+ disabled: disabled || max !== void 0 && (value ?? 0) >= max,
83
+ tabIndex: -1,
84
+ children: /* @__PURE__ */ jsx(Icon, {
85
+ icon: "ph:plus",
86
+ className: "size-3"
87
+ })
88
+ })
89
+ ]
90
+ });
91
+ return /* @__PURE__ */ jsx(Input, {
92
+ id,
93
+ type: "number",
94
+ value: value ?? "",
95
+ onChange: (e) => {
96
+ const val = e.target.value;
97
+ if (val === "") handleChange(null);
98
+ else handleChange(Number(val));
99
+ },
100
+ placeholder: resolveText(placeholder),
101
+ disabled,
102
+ readOnly,
103
+ min,
104
+ max,
105
+ step,
106
+ "aria-invalid": ariaInvalid,
107
+ className
108
+ });
109
+ }
110
+
111
+ //#endregion
112
+ export { NumberInput };
113
+ //# sourceMappingURL=number-input.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number-input.mjs","names":[],"sources":["../../../../src/client/components/primitives/number-input.tsx"],"sourcesContent":["import { Icon } from \"@iconify/react\";\nimport { useResolveText } from \"../../i18n/hooks\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../ui/button\";\nimport { Input } from \"../ui/input\";\nimport type { NumberInputProps } from \"./types\";\n\n/**\n * Number Input Primitive\n *\n * A number input with optional increment/decrement buttons.\n *\n * @example\n * ```tsx\n * <NumberInput\n * value={count}\n * onChange={setCount}\n * min={0}\n * max={100}\n * step={1}\n * showButtons\n * />\n * ```\n */\nexport function NumberInput({\n value,\n onChange,\n min,\n max,\n step = 1,\n showButtons = false,\n placeholder,\n disabled,\n readOnly,\n className,\n id,\n \"aria-invalid\": ariaInvalid,\n}: NumberInputProps) {\n const resolveText = useResolveText();\n\n const handleChange = (newValue: number | null) => {\n if (newValue === null) {\n onChange(null);\n return;\n }\n\n let clampedValue = newValue;\n if (min !== undefined && clampedValue < min) clampedValue = min;\n if (max !== undefined && clampedValue > max) clampedValue = max;\n\n onChange(clampedValue);\n };\n\n const increment = () => {\n const current = value ?? 0;\n handleChange(current + step);\n };\n\n const decrement = () => {\n const current = value ?? 0;\n handleChange(current - step);\n };\n\n if (showButtons) {\n return (\n <div className={cn(\"flex items-center gap-1\", className)}>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n onClick={decrement}\n disabled={disabled || (min !== undefined && (value ?? 0) <= min)}\n tabIndex={-1}\n >\n <Icon icon=\"ph:minus\" className=\"size-3\" />\n </Button>\n <Input\n id={id}\n type=\"number\"\n value={value ?? \"\"}\n onChange={(e) => {\n const val = e.target.value;\n if (val === \"\") {\n handleChange(null);\n } else {\n handleChange(Number(val));\n }\n }}\n placeholder={resolveText(placeholder)}\n disabled={disabled}\n readOnly={readOnly}\n min={min}\n max={max}\n step={step}\n aria-invalid={ariaInvalid}\n className=\"text-center [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n />\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n onClick={increment}\n disabled={disabled || (max !== undefined && (value ?? 0) >= max)}\n tabIndex={-1}\n >\n <Icon icon=\"ph:plus\" className=\"size-3\" />\n </Button>\n </div>\n );\n }\n\n return (\n <Input\n id={id}\n type=\"number\"\n value={value ?? \"\"}\n onChange={(e) => {\n const val = e.target.value;\n if (val === \"\") {\n handleChange(null);\n } else {\n handleChange(Number(val));\n }\n }}\n placeholder={resolveText(placeholder)}\n disabled={disabled}\n readOnly={readOnly}\n min={min}\n max={max}\n step={step}\n aria-invalid={ariaInvalid}\n className={className}\n />\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,SAAgB,YAAY,EAC1B,OACA,UACA,KACA,KACA,OAAO,GACP,cAAc,OACd,aACA,UACA,UACA,WACA,IACA,gBAAgB,eACG;CACnB,MAAM,cAAc,gBAAgB;CAEpC,MAAM,gBAAgB,aAA4B;AAChD,MAAI,aAAa,MAAM;AACrB,YAAS,KAAK;AACd;;EAGF,IAAI,eAAe;AACnB,MAAI,QAAQ,UAAa,eAAe,IAAK,gBAAe;AAC5D,MAAI,QAAQ,UAAa,eAAe,IAAK,gBAAe;AAE5D,WAAS,aAAa;;CAGxB,MAAM,kBAAkB;AAEtB,gBADgB,SAAS,KACF,KAAK;;CAG9B,MAAM,kBAAkB;AAEtB,gBADgB,SAAS,KACF,KAAK;;AAG9B,KAAI,YACF,QACE,qBAAC;EAAI,WAAW,GAAG,2BAA2B,UAAU;;GACtD,oBAAC;IACC,MAAK;IACL,SAAQ;IACR,MAAK;IACL,SAAS;IACT,UAAU,YAAa,QAAQ,WAAc,SAAS,MAAM;IAC5D,UAAU;cAEV,oBAAC;KAAK,MAAK;KAAW,WAAU;MAAW;KACpC;GACT,oBAAC;IACK;IACJ,MAAK;IACL,OAAO,SAAS;IAChB,WAAW,MAAM;KACf,MAAM,MAAM,EAAE,OAAO;AACrB,SAAI,QAAQ,GACV,cAAa,KAAK;SAElB,cAAa,OAAO,IAAI,CAAC;;IAG7B,aAAa,YAAY,YAAY;IAC3B;IACA;IACL;IACA;IACC;IACN,gBAAc;IACd,WAAU;KACV;GACF,oBAAC;IACC,MAAK;IACL,SAAQ;IACR,MAAK;IACL,SAAS;IACT,UAAU,YAAa,QAAQ,WAAc,SAAS,MAAM;IAC5D,UAAU;cAEV,oBAAC;KAAK,MAAK;KAAU,WAAU;MAAW;KACnC;;GACL;AAIV,QACE,oBAAC;EACK;EACJ,MAAK;EACL,OAAO,SAAS;EAChB,WAAW,MAAM;GACf,MAAM,MAAM,EAAE,OAAO;AACrB,OAAI,QAAQ,GACV,cAAa,KAAK;OAElB,cAAa,OAAO,IAAI,CAAC;;EAG7B,aAAa,YAAY,YAAY;EAC3B;EACA;EACL;EACA;EACC;EACN,gBAAc;EACH;GACX"}