@flanksource/clicky-ui 0.2.13 → 0.2.15

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 (466) hide show
  1. package/dist/chat.cjs +20 -0
  2. package/dist/chat.cjs.map +1 -0
  3. package/dist/chat.d.ts +2 -0
  4. package/dist/chat.d.ts.map +1 -0
  5. package/dist/chat.js +20 -0
  6. package/dist/chat.js.map +1 -0
  7. package/dist/components/Combobox.cjs +5 -3
  8. package/dist/components/Combobox.cjs.map +1 -1
  9. package/dist/components/Combobox.d.ts +2 -0
  10. package/dist/components/Combobox.d.ts.map +1 -1
  11. package/dist/components/Combobox.js +5 -3
  12. package/dist/components/Combobox.js.map +1 -1
  13. package/dist/components/DateTimePicker.cjs +3 -1
  14. package/dist/components/DateTimePicker.cjs.map +1 -1
  15. package/dist/components/DateTimePicker.d.ts +5 -1
  16. package/dist/components/DateTimePicker.d.ts.map +1 -1
  17. package/dist/components/DateTimePicker.js +3 -1
  18. package/dist/components/DateTimePicker.js.map +1 -1
  19. package/dist/components/FilterBar.cjs +8 -41
  20. package/dist/components/FilterBar.cjs.map +1 -1
  21. package/dist/components/FilterBar.d.ts +0 -2
  22. package/dist/components/FilterBar.d.ts.map +1 -1
  23. package/dist/components/FilterBar.js +3 -36
  24. package/dist/components/FilterBar.js.map +1 -1
  25. package/dist/components/FormatOptionsDropdown.cjs +2 -18
  26. package/dist/components/FormatOptionsDropdown.cjs.map +1 -1
  27. package/dist/components/FormatOptionsDropdown.d.ts +1 -17
  28. package/dist/components/FormatOptionsDropdown.d.ts.map +1 -1
  29. package/dist/components/FormatOptionsDropdown.js +1 -17
  30. package/dist/components/FormatOptionsDropdown.js.map +1 -1
  31. package/dist/components/JsonSchemaForm.cjs +128 -12
  32. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  33. package/dist/components/JsonSchemaForm.d.ts +1 -1
  34. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  35. package/dist/components/JsonSchemaForm.js +131 -15
  36. package/dist/components/JsonSchemaForm.js.map +1 -1
  37. package/dist/components/SecretKeySelector.cjs +1 -2
  38. package/dist/components/SecretKeySelector.cjs.map +1 -1
  39. package/dist/components/SecretKeySelector.d.ts +5 -3
  40. package/dist/components/SecretKeySelector.d.ts.map +1 -1
  41. package/dist/components/SecretKeySelector.js +2 -3
  42. package/dist/components/SecretKeySelector.js.map +1 -1
  43. package/dist/components/TreePickerField.cjs +137 -0
  44. package/dist/components/TreePickerField.cjs.map +1 -0
  45. package/dist/components/TreePickerField.d.ts +30 -0
  46. package/dist/components/TreePickerField.d.ts.map +1 -0
  47. package/dist/components/TreePickerField.js +137 -0
  48. package/dist/components/TreePickerField.js.map +1 -0
  49. package/dist/components/WorkloadPicker.cjs +6 -81
  50. package/dist/components/WorkloadPicker.cjs.map +1 -1
  51. package/dist/components/WorkloadPicker.d.ts +1 -20
  52. package/dist/components/WorkloadPicker.d.ts.map +1 -1
  53. package/dist/components/WorkloadPicker.js +3 -78
  54. package/dist/components/WorkloadPicker.js.map +1 -1
  55. package/dist/components/button-variants.cjs +30 -0
  56. package/dist/components/button-variants.cjs.map +1 -0
  57. package/dist/components/button-variants.d.ts +5 -0
  58. package/dist/components/button-variants.d.ts.map +1 -0
  59. package/dist/components/button-variants.js +30 -0
  60. package/dist/components/button-variants.js.map +1 -0
  61. package/dist/components/button.cjs +11 -82
  62. package/dist/components/button.cjs.map +1 -1
  63. package/dist/components/button.d.ts +1 -5
  64. package/dist/components/button.d.ts.map +1 -1
  65. package/dist/components/button.js +5 -76
  66. package/dist/components/button.js.map +1 -1
  67. package/dist/components/filter-bar-utils.cjs +37 -0
  68. package/dist/components/filter-bar-utils.cjs.map +1 -0
  69. package/dist/components/filter-bar-utils.d.ts +4 -0
  70. package/dist/components/filter-bar-utils.d.ts.map +1 -0
  71. package/dist/components/filter-bar-utils.js +37 -0
  72. package/dist/components/filter-bar-utils.js.map +1 -0
  73. package/dist/components/format-options.cjs +20 -0
  74. package/dist/components/format-options.cjs.map +1 -0
  75. package/dist/components/format-options.d.ts +18 -0
  76. package/dist/components/format-options.d.ts.map +1 -0
  77. package/dist/components/format-options.js +20 -0
  78. package/dist/components/format-options.js.map +1 -0
  79. package/dist/components/json-schema-form-array.cjs +13 -17
  80. package/dist/components/json-schema-form-array.cjs.map +1 -1
  81. package/dist/components/json-schema-form-array.d.ts +1 -2
  82. package/dist/components/json-schema-form-array.d.ts.map +1 -1
  83. package/dist/components/json-schema-form-array.js +3 -7
  84. package/dist/components/json-schema-form-array.js.map +1 -1
  85. package/dist/components/json-schema-form-fields.cjs +90 -232
  86. package/dist/components/json-schema-form-fields.cjs.map +1 -1
  87. package/dist/components/json-schema-form-fields.d.ts +51 -6
  88. package/dist/components/json-schema-form-fields.d.ts.map +1 -1
  89. package/dist/components/json-schema-form-fields.js +82 -224
  90. package/dist/components/json-schema-form-fields.js.map +1 -1
  91. package/dist/components/json-schema-form-object.cjs +149 -0
  92. package/dist/components/json-schema-form-object.cjs.map +1 -0
  93. package/dist/components/json-schema-form-object.d.ts +10 -0
  94. package/dist/components/json-schema-form-object.d.ts.map +1 -0
  95. package/dist/components/json-schema-form-object.js +149 -0
  96. package/dist/components/json-schema-form-object.js.map +1 -0
  97. package/dist/components/json-schema-form-preferences.cjs +41 -0
  98. package/dist/components/json-schema-form-preferences.cjs.map +1 -0
  99. package/dist/components/json-schema-form-preferences.d.ts +10 -0
  100. package/dist/components/json-schema-form-preferences.d.ts.map +1 -0
  101. package/dist/components/json-schema-form-preferences.js +41 -0
  102. package/dist/components/json-schema-form-preferences.js.map +1 -0
  103. package/dist/components/json-schema-form-render.cjs +43 -72
  104. package/dist/components/json-schema-form-render.cjs.map +1 -1
  105. package/dist/components/json-schema-form-render.d.ts +5 -33
  106. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  107. package/dist/components/json-schema-form-render.js +41 -70
  108. package/dist/components/json-schema-form-render.js.map +1 -1
  109. package/dist/components/json-schema-form-resolve.cjs +9 -1
  110. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  111. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  112. package/dist/components/json-schema-form-resolve.js +9 -1
  113. package/dist/components/json-schema-form-resolve.js.map +1 -1
  114. package/dist/components/json-schema-form-types.d.ts +58 -1
  115. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  116. package/dist/components/json-schema-form-utils.cjs +96 -0
  117. package/dist/components/json-schema-form-utils.cjs.map +1 -0
  118. package/dist/components/json-schema-form-utils.d.ts +17 -0
  119. package/dist/components/json-schema-form-utils.d.ts.map +1 -0
  120. package/dist/components/json-schema-form-utils.js +96 -0
  121. package/dist/components/json-schema-form-utils.js.map +1 -0
  122. package/dist/components/loading.cjs +109 -0
  123. package/dist/components/loading.cjs.map +1 -0
  124. package/dist/components/loading.d.ts +27 -0
  125. package/dist/components/loading.d.ts.map +1 -0
  126. package/dist/components/loading.js +109 -0
  127. package/dist/components/loading.js.map +1 -0
  128. package/dist/components/workload-picker-utils.cjs +88 -0
  129. package/dist/components/workload-picker-utils.cjs.map +1 -0
  130. package/dist/components/workload-picker-utils.d.ts +34 -0
  131. package/dist/components/workload-picker-utils.d.ts.map +1 -0
  132. package/dist/components/workload-picker-utils.js +88 -0
  133. package/dist/components/workload-picker-utils.js.map +1 -0
  134. package/dist/components.cjs +18 -6
  135. package/dist/components.cjs.map +1 -1
  136. package/dist/components.d.ts +10 -3
  137. package/dist/components.d.ts.map +1 -1
  138. package/dist/components.js +16 -4
  139. package/dist/components.js.map +1 -1
  140. package/dist/data/Badge.cjs +11 -91
  141. package/dist/data/Badge.cjs.map +1 -1
  142. package/dist/data/Badge.d.ts +1 -5
  143. package/dist/data/Badge.d.ts.map +1 -1
  144. package/dist/data/Badge.js +11 -91
  145. package/dist/data/Badge.js.map +1 -1
  146. package/dist/data/Clicky.cjs +4 -3
  147. package/dist/data/Clicky.cjs.map +1 -1
  148. package/dist/data/Clicky.d.ts.map +1 -1
  149. package/dist/data/Clicky.js +4 -3
  150. package/dist/data/Clicky.js.map +1 -1
  151. package/dist/data/DataTable.cjs +161 -156
  152. package/dist/data/DataTable.cjs.map +1 -1
  153. package/dist/data/DataTable.d.ts +25 -4
  154. package/dist/data/DataTable.d.ts.map +1 -1
  155. package/dist/data/DataTable.js +140 -135
  156. package/dist/data/DataTable.js.map +1 -1
  157. package/dist/data/FilterPill.cjs +3 -0
  158. package/dist/data/FilterPill.cjs.map +1 -1
  159. package/dist/data/FilterPill.d.ts.map +1 -1
  160. package/dist/data/FilterPill.js +3 -0
  161. package/dist/data/FilterPill.js.map +1 -1
  162. package/dist/data/Icon.cjs +7 -7
  163. package/dist/data/Icon.cjs.map +1 -1
  164. package/dist/data/Icon.js +7 -7
  165. package/dist/data/Icon.js.map +1 -1
  166. package/dist/data/LogDetails.cjs +5 -14
  167. package/dist/data/LogDetails.cjs.map +1 -1
  168. package/dist/data/LogDetails.d.ts +8 -4
  169. package/dist/data/LogDetails.d.ts.map +1 -1
  170. package/dist/data/LogDetails.js +4 -13
  171. package/dist/data/LogDetails.js.map +1 -1
  172. package/dist/data/LogsTable.cjs +6 -165
  173. package/dist/data/LogsTable.cjs.map +1 -1
  174. package/dist/data/LogsTable.d.ts +2 -15
  175. package/dist/data/LogsTable.d.ts.map +1 -1
  176. package/dist/data/LogsTable.js +6 -165
  177. package/dist/data/LogsTable.js.map +1 -1
  178. package/dist/data/TimeseriesCoreBars.cjs +8 -1
  179. package/dist/data/TimeseriesCoreBars.cjs.map +1 -1
  180. package/dist/data/TimeseriesCoreBars.d.ts.map +1 -1
  181. package/dist/data/TimeseriesCoreBars.js +8 -1
  182. package/dist/data/TimeseriesCoreBars.js.map +1 -1
  183. package/dist/data/TimeseriesPanel.axes.cjs.map +1 -1
  184. package/dist/data/TimeseriesPanel.axes.js.map +1 -1
  185. package/dist/data/TreeNode.cjs +13 -7
  186. package/dist/data/TreeNode.cjs.map +1 -1
  187. package/dist/data/TreeNode.d.ts.map +1 -1
  188. package/dist/data/TreeNode.js +13 -7
  189. package/dist/data/TreeNode.js.map +1 -1
  190. package/dist/data/badge-variants.cjs +85 -0
  191. package/dist/data/badge-variants.cjs.map +1 -0
  192. package/dist/data/badge-variants.d.ts +6 -0
  193. package/dist/data/badge-variants.d.ts.map +1 -0
  194. package/dist/data/badge-variants.js +85 -0
  195. package/dist/data/badge-variants.js.map +1 -0
  196. package/dist/data/cache-browser/CacheBrowser.cjs +59 -0
  197. package/dist/data/cache-browser/CacheBrowser.cjs.map +1 -0
  198. package/dist/data/cache-browser/CacheBrowser.d.ts +26 -0
  199. package/dist/data/cache-browser/CacheBrowser.d.ts.map +1 -0
  200. package/dist/data/cache-browser/CacheBrowser.js +59 -0
  201. package/dist/data/cache-browser/CacheBrowser.js.map +1 -0
  202. package/dist/data/cache-browser/CacheDetailPanel.cjs +193 -0
  203. package/dist/data/cache-browser/CacheDetailPanel.cjs.map +1 -0
  204. package/dist/data/cache-browser/CacheDetailPanel.d.ts +20 -0
  205. package/dist/data/cache-browser/CacheDetailPanel.d.ts.map +1 -0
  206. package/dist/data/cache-browser/CacheDetailPanel.js +193 -0
  207. package/dist/data/cache-browser/CacheDetailPanel.js.map +1 -0
  208. package/dist/data/cache-browser/CacheStatsOverview.cjs +126 -0
  209. package/dist/data/cache-browser/CacheStatsOverview.cjs.map +1 -0
  210. package/dist/data/cache-browser/CacheStatsOverview.d.ts +17 -0
  211. package/dist/data/cache-browser/CacheStatsOverview.d.ts.map +1 -0
  212. package/dist/data/cache-browser/CacheStatsOverview.js +126 -0
  213. package/dist/data/cache-browser/CacheStatsOverview.js.map +1 -0
  214. package/dist/data/cache-browser/CacheTree.cjs +189 -0
  215. package/dist/data/cache-browser/CacheTree.cjs.map +1 -0
  216. package/dist/data/cache-browser/CacheTree.d.ts +27 -0
  217. package/dist/data/cache-browser/CacheTree.d.ts.map +1 -0
  218. package/dist/data/cache-browser/CacheTree.js +189 -0
  219. package/dist/data/cache-browser/CacheTree.js.map +1 -0
  220. package/dist/data/cache-browser/CacheValue.cjs +86 -0
  221. package/dist/data/cache-browser/CacheValue.cjs.map +1 -0
  222. package/dist/data/cache-browser/CacheValue.d.ts +11 -0
  223. package/dist/data/cache-browser/CacheValue.d.ts.map +1 -0
  224. package/dist/data/cache-browser/CacheValue.js +86 -0
  225. package/dist/data/cache-browser/CacheValue.js.map +1 -0
  226. package/dist/data/cache-browser/adapter.cjs +52 -0
  227. package/dist/data/cache-browser/adapter.cjs.map +1 -0
  228. package/dist/data/cache-browser/adapter.d.ts +48 -0
  229. package/dist/data/cache-browser/adapter.d.ts.map +1 -0
  230. package/dist/data/cache-browser/adapter.js +52 -0
  231. package/dist/data/cache-browser/adapter.js.map +1 -0
  232. package/dist/data/cache-browser/api.cjs +42 -0
  233. package/dist/data/cache-browser/api.cjs.map +1 -0
  234. package/dist/data/cache-browser/api.d.ts +33 -0
  235. package/dist/data/cache-browser/api.d.ts.map +1 -0
  236. package/dist/data/cache-browser/api.js +42 -0
  237. package/dist/data/cache-browser/api.js.map +1 -0
  238. package/dist/data/cache-browser/index.d.ts +9 -0
  239. package/dist/data/cache-browser/index.d.ts.map +1 -0
  240. package/dist/data/cache-browser/types.cjs +7 -0
  241. package/dist/data/cache-browser/types.cjs.map +1 -0
  242. package/dist/data/cache-browser/types.d.ts +78 -0
  243. package/dist/data/cache-browser/types.d.ts.map +1 -0
  244. package/dist/data/cache-browser/types.js +7 -0
  245. package/dist/data/cache-browser/types.js.map +1 -0
  246. package/dist/data/cells/TagList.cjs +4 -101
  247. package/dist/data/cells/TagList.cjs.map +1 -1
  248. package/dist/data/cells/TagList.d.ts +1 -49
  249. package/dist/data/cells/TagList.d.ts.map +1 -1
  250. package/dist/data/cells/TagList.js +3 -100
  251. package/dist/data/cells/TagList.js.map +1 -1
  252. package/dist/data/cells/Timestamp.cjs +3 -192
  253. package/dist/data/cells/Timestamp.cjs.map +1 -1
  254. package/dist/data/cells/Timestamp.d.ts +1 -50
  255. package/dist/data/cells/Timestamp.d.ts.map +1 -1
  256. package/dist/data/cells/Timestamp.js +2 -191
  257. package/dist/data/cells/Timestamp.js.map +1 -1
  258. package/dist/data/cells/tag-utils.cjs +103 -0
  259. package/dist/data/cells/tag-utils.cjs.map +1 -0
  260. package/dist/data/cells/tag-utils.d.ts +51 -0
  261. package/dist/data/cells/tag-utils.d.ts.map +1 -0
  262. package/dist/data/cells/tag-utils.js +103 -0
  263. package/dist/data/cells/tag-utils.js.map +1 -0
  264. package/dist/data/cells/timestamp-format.cjs +193 -0
  265. package/dist/data/cells/timestamp-format.cjs.map +1 -0
  266. package/dist/data/cells/timestamp-format.d.ts +51 -0
  267. package/dist/data/cells/timestamp-format.d.ts.map +1 -0
  268. package/dist/data/cells/timestamp-format.js +193 -0
  269. package/dist/data/cells/timestamp-format.js.map +1 -0
  270. package/dist/data/chat/Chat.cjs +48 -0
  271. package/dist/data/chat/Chat.cjs.map +1 -0
  272. package/dist/data/chat/Chat.d.ts +26 -0
  273. package/dist/data/chat/Chat.d.ts.map +1 -0
  274. package/dist/data/chat/Chat.fixtures.d.ts +6 -0
  275. package/dist/data/chat/Chat.fixtures.d.ts.map +1 -0
  276. package/dist/data/chat/Chat.js +48 -0
  277. package/dist/data/chat/Chat.js.map +1 -0
  278. package/dist/data/chat/Conversation.cjs +34 -0
  279. package/dist/data/chat/Conversation.cjs.map +1 -0
  280. package/dist/data/chat/Conversation.d.ts +11 -0
  281. package/dist/data/chat/Conversation.d.ts.map +1 -0
  282. package/dist/data/chat/Conversation.js +34 -0
  283. package/dist/data/chat/Conversation.js.map +1 -0
  284. package/dist/data/chat/Message.cjs +44 -0
  285. package/dist/data/chat/Message.cjs.map +1 -0
  286. package/dist/data/chat/Message.d.ts +10 -0
  287. package/dist/data/chat/Message.d.ts.map +1 -0
  288. package/dist/data/chat/Message.js +44 -0
  289. package/dist/data/chat/Message.js.map +1 -0
  290. package/dist/data/chat/PromptInput.cjs +61 -0
  291. package/dist/data/chat/PromptInput.cjs.map +1 -0
  292. package/dist/data/chat/PromptInput.d.ts +16 -0
  293. package/dist/data/chat/PromptInput.d.ts.map +1 -0
  294. package/dist/data/chat/PromptInput.js +61 -0
  295. package/dist/data/chat/PromptInput.js.map +1 -0
  296. package/dist/data/chat/ToolCall.cjs +92 -0
  297. package/dist/data/chat/ToolCall.cjs.map +1 -0
  298. package/dist/data/chat/ToolCall.d.ts +14 -0
  299. package/dist/data/chat/ToolCall.d.ts.map +1 -0
  300. package/dist/data/chat/ToolCall.js +92 -0
  301. package/dist/data/chat/ToolCall.js.map +1 -0
  302. package/dist/data/chat/clickyOperationsToTools.cjs +73 -0
  303. package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -0
  304. package/dist/data/chat/clickyOperationsToTools.d.ts +10 -0
  305. package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -0
  306. package/dist/data/chat/clickyOperationsToTools.js +73 -0
  307. package/dist/data/chat/clickyOperationsToTools.js.map +1 -0
  308. package/dist/data/chat/index.d.ts +8 -0
  309. package/dist/data/chat/index.d.ts.map +1 -0
  310. package/dist/data/chat/types.cjs +18 -0
  311. package/dist/data/chat/types.cjs.map +1 -0
  312. package/dist/data/chat/types.d.ts +41 -0
  313. package/dist/data/chat/types.d.ts.map +1 -0
  314. package/dist/data/chat/types.js +18 -0
  315. package/dist/data/chat/types.js.map +1 -0
  316. package/dist/data/data-table-utils.cjs +55 -0
  317. package/dist/data/data-table-utils.cjs.map +1 -0
  318. package/dist/data/data-table-utils.d.ts +24 -0
  319. package/dist/data/data-table-utils.d.ts.map +1 -0
  320. package/dist/data/data-table-utils.js +55 -0
  321. package/dist/data/data-table-utils.js.map +1 -0
  322. package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs +2 -1
  323. package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs.map +1 -1
  324. package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts.map +1 -1
  325. package/dist/data/diagnostics/DiagnosticsDetailPanel.js +3 -2
  326. package/dist/data/diagnostics/DiagnosticsDetailPanel.js.map +1 -1
  327. package/dist/data/diagnostics/GoroutineCard.cjs +3 -22
  328. package/dist/data/diagnostics/GoroutineCard.cjs.map +1 -1
  329. package/dist/data/diagnostics/GoroutineCard.d.ts +0 -2
  330. package/dist/data/diagnostics/GoroutineCard.d.ts.map +1 -1
  331. package/dist/data/diagnostics/GoroutineCard.js +2 -21
  332. package/dist/data/diagnostics/GoroutineCard.js.map +1 -1
  333. package/dist/data/diagnostics/ThreadCard.cjs +3 -38
  334. package/dist/data/diagnostics/ThreadCard.cjs.map +1 -1
  335. package/dist/data/diagnostics/ThreadCard.d.ts +0 -2
  336. package/dist/data/diagnostics/ThreadCard.d.ts.map +1 -1
  337. package/dist/data/diagnostics/ThreadCard.js +2 -37
  338. package/dist/data/diagnostics/ThreadCard.js.map +1 -1
  339. package/dist/data/diagnostics/state-styles.cjs +59 -0
  340. package/dist/data/diagnostics/state-styles.cjs.map +1 -0
  341. package/dist/data/diagnostics/state-styles.d.ts +5 -0
  342. package/dist/data/diagnostics/state-styles.d.ts.map +1 -0
  343. package/dist/data/diagnostics/state-styles.js +59 -0
  344. package/dist/data/diagnostics/state-styles.js.map +1 -0
  345. package/dist/data/logs-normalize.cjs +166 -0
  346. package/dist/data/logs-normalize.cjs.map +1 -0
  347. package/dist/data/logs-normalize.d.ts +16 -0
  348. package/dist/data/logs-normalize.d.ts.map +1 -0
  349. package/dist/data/logs-normalize.js +166 -0
  350. package/dist/data/logs-normalize.js.map +1 -0
  351. package/dist/data/task-status.cjs +19 -19
  352. package/dist/data/task-status.cjs.map +1 -1
  353. package/dist/data/task-status.js +19 -19
  354. package/dist/data/task-status.js.map +1 -1
  355. package/dist/data/version-info.cjs +3 -3
  356. package/dist/data/version-info.js +3 -3
  357. package/dist/data.cjs +43 -18
  358. package/dist/data.cjs.map +1 -1
  359. package/dist/data.d.ts +11 -5
  360. package/dist/data.d.ts.map +1 -1
  361. package/dist/data.js +30 -5
  362. package/dist/data.js.map +1 -1
  363. package/dist/hooks/density-provider.cjs +38 -0
  364. package/dist/hooks/density-provider.cjs.map +1 -0
  365. package/dist/hooks/density-provider.d.ts +20 -0
  366. package/dist/hooks/density-provider.d.ts.map +1 -0
  367. package/dist/hooks/density-provider.js +38 -0
  368. package/dist/hooks/density-provider.js.map +1 -0
  369. package/dist/hooks/theme-provider.cjs +43 -0
  370. package/dist/hooks/theme-provider.cjs.map +1 -0
  371. package/dist/hooks/theme-provider.d.ts +9 -0
  372. package/dist/hooks/theme-provider.d.ts.map +1 -0
  373. package/dist/hooks/theme-provider.js +43 -0
  374. package/dist/hooks/theme-provider.js.map +1 -0
  375. package/dist/hooks/use-density.cjs +8 -37
  376. package/dist/hooks/use-density.cjs.map +1 -1
  377. package/dist/hooks/use-density.d.ts +5 -20
  378. package/dist/hooks/use-density.d.ts.map +1 -1
  379. package/dist/hooks/use-density.js +9 -38
  380. package/dist/hooks/use-density.js.map +1 -1
  381. package/dist/hooks/use-theme.cjs +10 -43
  382. package/dist/hooks/use-theme.cjs.map +1 -1
  383. package/dist/hooks/use-theme.d.ts +6 -9
  384. package/dist/hooks/use-theme.d.ts.map +1 -1
  385. package/dist/hooks/use-theme.js +11 -44
  386. package/dist/hooks/use-theme.js.map +1 -1
  387. package/dist/hooks.cjs +5 -2
  388. package/dist/hooks.cjs.map +1 -1
  389. package/dist/hooks.d.ts +4 -2
  390. package/dist/hooks.d.ts.map +1 -1
  391. package/dist/hooks.js +5 -2
  392. package/dist/hooks.js.map +1 -1
  393. package/dist/icons/changeIconAliases.cjs +13 -13
  394. package/dist/icons/changeIconAliases.cjs.map +1 -1
  395. package/dist/icons/changeIconAliases.d.ts.map +1 -1
  396. package/dist/icons/changeIconAliases.js +13 -13
  397. package/dist/icons/changeIconAliases.js.map +1 -1
  398. package/dist/index.cjs +71 -30
  399. package/dist/index.cjs.map +1 -1
  400. package/dist/index.js +53 -12
  401. package/dist/index.js.map +1 -1
  402. package/dist/overlay/DropdownMenu.cjs +2 -0
  403. package/dist/overlay/DropdownMenu.cjs.map +1 -1
  404. package/dist/overlay/DropdownMenu.d.ts +3 -1
  405. package/dist/overlay/DropdownMenu.d.ts.map +1 -1
  406. package/dist/overlay/DropdownMenu.js +2 -0
  407. package/dist/overlay/DropdownMenu.js.map +1 -1
  408. package/dist/overlay/Modal.cjs +11 -4
  409. package/dist/overlay/Modal.cjs.map +1 -1
  410. package/dist/overlay/Modal.d.ts +1 -1
  411. package/dist/overlay/Modal.d.ts.map +1 -1
  412. package/dist/overlay/Modal.js +11 -4
  413. package/dist/overlay/Modal.js.map +1 -1
  414. package/dist/overlay/modalStack.cjs +35 -0
  415. package/dist/overlay/modalStack.cjs.map +1 -0
  416. package/dist/overlay/modalStack.d.ts +13 -0
  417. package/dist/overlay/modalStack.d.ts.map +1 -0
  418. package/dist/overlay/modalStack.js +35 -0
  419. package/dist/overlay/modalStack.js.map +1 -0
  420. package/dist/rpc/AcceptPicker.cjs +2 -18
  421. package/dist/rpc/AcceptPicker.cjs.map +1 -1
  422. package/dist/rpc/AcceptPicker.d.ts +1 -41
  423. package/dist/rpc/AcceptPicker.d.ts.map +1 -1
  424. package/dist/rpc/AcceptPicker.js +2 -18
  425. package/dist/rpc/AcceptPicker.js.map +1 -1
  426. package/dist/rpc/CommandOutput.cjs +1 -1
  427. package/dist/rpc/CommandOutput.cjs.map +1 -1
  428. package/dist/rpc/CommandOutput.js +1 -1
  429. package/dist/rpc/CommandOutput.js.map +1 -1
  430. package/dist/rpc/EndpointList.cjs +1 -1
  431. package/dist/rpc/EndpointList.cjs.map +1 -1
  432. package/dist/rpc/EndpointList.js +1 -1
  433. package/dist/rpc/EndpointList.js.map +1 -1
  434. package/dist/rpc/OperationCatalog.cjs +23 -41
  435. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  436. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  437. package/dist/rpc/OperationCatalog.js +24 -42
  438. package/dist/rpc/OperationCatalog.js.map +1 -1
  439. package/dist/rpc/OperationCommandPage.cjs.map +1 -1
  440. package/dist/rpc/OperationCommandPage.d.ts.map +1 -1
  441. package/dist/rpc/OperationCommandPage.js.map +1 -1
  442. package/dist/rpc/accept-options.cjs +20 -0
  443. package/dist/rpc/accept-options.cjs.map +1 -0
  444. package/dist/rpc/accept-options.d.ts +42 -0
  445. package/dist/rpc/accept-options.d.ts.map +1 -0
  446. package/dist/rpc/accept-options.js +20 -0
  447. package/dist/rpc/accept-options.js.map +1 -0
  448. package/dist/rpc/classify.cjs +15 -4
  449. package/dist/rpc/classify.cjs.map +1 -1
  450. package/dist/rpc/classify.d.ts.map +1 -1
  451. package/dist/rpc/classify.js +15 -4
  452. package/dist/rpc/classify.js.map +1 -1
  453. package/dist/rpc/clickyMetadata.cjs +13 -3
  454. package/dist/rpc/clickyMetadata.cjs.map +1 -1
  455. package/dist/rpc/clickyMetadata.d.ts +2 -0
  456. package/dist/rpc/clickyMetadata.d.ts.map +1 -1
  457. package/dist/rpc/clickyMetadata.js +14 -4
  458. package/dist/rpc/clickyMetadata.js.map +1 -1
  459. package/dist/rpc.cjs +3 -2
  460. package/dist/rpc.cjs.map +1 -1
  461. package/dist/rpc.d.ts +2 -1
  462. package/dist/rpc.d.ts.map +1 -1
  463. package/dist/rpc.js +2 -1
  464. package/dist/rpc.js.map +1 -1
  465. package/dist/styles.css +1 -1
  466. package/package.json +16 -1
@@ -1,80 +1,10 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { Slot } from "@radix-ui/react-slot";
3
- import { cva } from "class-variance-authority";
3
+ import "class-variance-authority";
4
4
  import { forwardRef } from "react";
5
5
  import { cn } from "../lib/utils.js";
6
- const buttonVariants = cva(
7
- "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
8
- {
9
- variants: {
10
- variant: {
11
- default: "bg-primary text-primary-foreground hover:bg-primary/90",
12
- destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
13
- outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
14
- secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
15
- ghost: "hover:bg-accent hover:text-accent-foreground",
16
- link: "text-primary underline-offset-4 hover:underline"
17
- },
18
- size: {
19
- default: "h-control-h px-control-px py-2",
20
- sm: "h-8 rounded-md px-3 text-xs",
21
- lg: "h-10 rounded-md px-8",
22
- icon: "h-control-h w-control-h"
23
- }
24
- },
25
- defaultVariants: {
26
- variant: "default",
27
- size: "default"
28
- }
29
- }
30
- );
31
- function ButtonSpinner() {
32
- return /* @__PURE__ */ jsxs(
33
- "svg",
34
- {
35
- xmlns: "http://www.w3.org/2000/svg",
36
- width: "32",
37
- height: "32",
38
- viewBox: "0 0 24 24",
39
- "aria-hidden": "true",
40
- className: "h-4 w-4 shrink-0",
41
- children: [
42
- /* @__PURE__ */ jsx("circle", { cx: "4", cy: "12", r: "3", fill: "#151515", children: /* @__PURE__ */ jsx(
43
- "animate",
44
- {
45
- id: "SVG7x14Dcom",
46
- fill: "freeze",
47
- attributeName: "opacity",
48
- begin: "0;SVGqSjG0dUp.end-0.25s",
49
- dur: "0.75s",
50
- values: "1;0.2"
51
- }
52
- ) }),
53
- /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "3", fill: "#151515", opacity: "0.4", children: /* @__PURE__ */ jsx(
54
- "animate",
55
- {
56
- fill: "freeze",
57
- attributeName: "opacity",
58
- begin: "SVG7x14Dcom.begin+0.15s",
59
- dur: "0.75s",
60
- values: "1;0.2"
61
- }
62
- ) }),
63
- /* @__PURE__ */ jsx("circle", { cx: "20", cy: "12", r: "3", fill: "#151515", opacity: "0.3", children: /* @__PURE__ */ jsx(
64
- "animate",
65
- {
66
- id: "SVGqSjG0dUp",
67
- fill: "freeze",
68
- attributeName: "opacity",
69
- begin: "SVG7x14Dcom.begin+0.3s",
70
- dur: "0.75s",
71
- values: "1;0.2"
72
- }
73
- ) })
74
- ]
75
- }
76
- );
77
- }
6
+ import { buttonVariants } from "./button-variants.js";
7
+ import { LoadingDots } from "./loading.js";
78
8
  const Button = forwardRef(
79
9
  ({
80
10
  children,
@@ -111,7 +41,7 @@ const Button = forwardRef(
111
41
  disabled: disabled || loading,
112
42
  ...props,
113
43
  children: [
114
- loading && /* @__PURE__ */ jsx(ButtonSpinner, {}),
44
+ loading && /* @__PURE__ */ jsx(LoadingDots, { className: "size-4" }),
115
45
  content
116
46
  ]
117
47
  }
@@ -120,7 +50,6 @@ const Button = forwardRef(
120
50
  );
121
51
  Button.displayName = "Button";
122
52
  export {
123
- Button,
124
- buttonVariants
53
+ Button
125
54
  };
126
55
  //# sourceMappingURL=button.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"button.js","sources":["../../src/components/button.tsx"],"sourcesContent":["import { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef, type ButtonHTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-control-h px-control-px py-2\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n lg: \"h-10 rounded-md px-8\",\n icon: \"h-control-h w-control-h\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nexport type ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> &\n VariantProps<typeof buttonVariants> & {\n /** Render the button styles onto the child element via Radix Slot. */\n asChild?: boolean;\n /** Show a spinner and disable the button while an action is pending. */\n loading?: boolean;\n /** Label to render while loading; defaults to the normal children. */\n loadingLabel?: ReactNode;\n };\n\nfunction ButtonSpinner() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n className=\"h-4 w-4 shrink-0\"\n >\n <circle cx=\"4\" cy=\"12\" r=\"3\" fill=\"#151515\">\n <animate\n id=\"SVG7x14Dcom\"\n fill=\"freeze\"\n attributeName=\"opacity\"\n begin=\"0;SVGqSjG0dUp.end-0.25s\"\n dur=\"0.75s\"\n values=\"1;0.2\"\n />\n </circle>\n <circle cx=\"12\" cy=\"12\" r=\"3\" fill=\"#151515\" opacity=\"0.4\">\n <animate\n fill=\"freeze\"\n attributeName=\"opacity\"\n begin=\"SVG7x14Dcom.begin+0.15s\"\n dur=\"0.75s\"\n values=\"1;0.2\"\n />\n </circle>\n <circle cx=\"20\" cy=\"12\" r=\"3\" fill=\"#151515\" opacity=\"0.3\">\n <animate\n id=\"SVGqSjG0dUp\"\n fill=\"freeze\"\n attributeName=\"opacity\"\n begin=\"SVG7x14Dcom.begin+0.3s\"\n dur=\"0.75s\"\n values=\"1;0.2\"\n />\n </circle>\n </svg>\n );\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n children,\n className,\n disabled,\n loading = false,\n loadingLabel,\n variant,\n size,\n asChild = false,\n ...props\n },\n ref,\n ) => {\n const Comp = asChild ? Slot : \"button\";\n const content = loadingLabel !== undefined ? loadingLabel : children;\n\n if (asChild) {\n return (\n <Comp\n ref={ref}\n aria-busy={loading || undefined}\n className={cn(buttonVariants({ variant, size }), className)}\n disabled={disabled || loading}\n {...props}\n >\n {children}\n </Comp>\n );\n }\n\n return (\n <Comp\n ref={ref}\n aria-busy={loading || undefined}\n className={cn(buttonVariants({ variant, size }), className)}\n disabled={disabled || loading}\n {...props}\n >\n {loading && <ButtonSpinner />}\n {content}\n </Comp>\n );\n },\n);\nButton.displayName = \"Button\";\n\nexport { buttonVariants };\n"],"names":[],"mappings":";;;;;AAKA,MAAM,iBAAiB;AAAA,EACrB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,aAAa;AAAA,QACb,SAAS;AAAA,QACT,WAAW;AAAA,QACX,OAAO;AAAA,QACP,MAAM;AAAA,MAAA;AAAA,MAER,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,MAAA;AAAA,IACR;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ;AAYA,SAAS,gBAAgB;AACvB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,eAAY;AAAA,MACZ,WAAU;AAAA,MAEV,UAAA;AAAA,QAAA,oBAAC,UAAA,EAAO,IAAG,KAAI,IAAG,MAAK,GAAE,KAAI,MAAK,WAChC,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,MAAK;AAAA,YACL,eAAc;AAAA,YACd,OAAM;AAAA,YACN,KAAI;AAAA,YACJ,QAAO;AAAA,UAAA;AAAA,QAAA,GAEX;AAAA,QACA,oBAAC,UAAA,EAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI,MAAK,WAAU,SAAQ,OACnD,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,eAAc;AAAA,YACd,OAAM;AAAA,YACN,KAAI;AAAA,YACJ,QAAO;AAAA,UAAA;AAAA,QAAA,GAEX;AAAA,QACA,oBAAC,UAAA,EAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI,MAAK,WAAU,SAAQ,OACnD,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,MAAK;AAAA,YACL,eAAc;AAAA,YACd,OAAM;AAAA,YACN,KAAI;AAAA,YACJ,QAAO;AAAA,UAAA;AAAA,QAAA,EACT,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAEO,MAAM,SAAS;AAAA,EACpB,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,GAAG;AAAA,EAAA,GAEL,QACG;AACH,UAAM,OAAO,UAAU,OAAO;AAC9B,UAAM,UAAU,iBAAiB,SAAY,eAAe;AAE5D,QAAI,SAAS;AACX,aACE;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA,aAAW,WAAW;AAAA,UACtB,WAAW,GAAG,eAAe,EAAE,SAAS,KAAA,CAAM,GAAG,SAAS;AAAA,UAC1D,UAAU,YAAY;AAAA,UACrB,GAAG;AAAA,UAEH;AAAA,QAAA;AAAA,MAAA;AAAA,IAGP;AAEA,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,aAAW,WAAW;AAAA,QACtB,WAAW,GAAG,eAAe,EAAE,SAAS,KAAA,CAAM,GAAG,SAAS;AAAA,QAC1D,UAAU,YAAY;AAAA,QACrB,GAAG;AAAA,QAEH,UAAA;AAAA,UAAA,+BAAY,eAAA,EAAc;AAAA,UAC1B;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AACA,OAAO,cAAc;"}
1
+ {"version":3,"file":"button.js","sources":["../../src/components/button.tsx"],"sourcesContent":["import { Slot } from \"@radix-ui/react-slot\";\nimport { type VariantProps } from \"class-variance-authority\";\nimport { forwardRef, type ButtonHTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { buttonVariants } from \"./button-variants\";\nimport { LoadingDots } from \"./loading\";\n\nexport type ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> &\n VariantProps<typeof buttonVariants> & {\n /** Render the button styles onto the child element via Radix Slot. */\n asChild?: boolean;\n /** Show a spinner and disable the button while an action is pending. */\n loading?: boolean;\n /** Label to render while loading; defaults to the normal children. */\n loadingLabel?: ReactNode;\n };\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n children,\n className,\n disabled,\n loading = false,\n loadingLabel,\n variant,\n size,\n asChild = false,\n ...props\n },\n ref,\n ) => {\n const Comp = asChild ? Slot : \"button\";\n const content = loadingLabel !== undefined ? loadingLabel : children;\n\n if (asChild) {\n return (\n <Comp\n ref={ref}\n aria-busy={loading || undefined}\n className={cn(buttonVariants({ variant, size }), className)}\n disabled={disabled || loading}\n {...props}\n >\n {children}\n </Comp>\n );\n }\n\n return (\n <Comp\n ref={ref}\n aria-busy={loading || undefined}\n className={cn(buttonVariants({ variant, size }), className)}\n disabled={disabled || loading}\n {...props}\n >\n {loading && <LoadingDots className=\"size-4\" />}\n {content}\n </Comp>\n );\n },\n);\nButton.displayName = \"Button\";\n"],"names":[],"mappings":";;;;;;;AAiBO,MAAM,SAAS;AAAA,EACpB,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,GAAG;AAAA,EAAA,GAEL,QACG;AACH,UAAM,OAAO,UAAU,OAAO;AAC9B,UAAM,UAAU,iBAAiB,SAAY,eAAe;AAE5D,QAAI,SAAS;AACX,aACE;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA,aAAW,WAAW;AAAA,UACtB,WAAW,GAAG,eAAe,EAAE,SAAS,KAAA,CAAM,GAAG,SAAS;AAAA,UAC1D,UAAU,YAAY;AAAA,UACrB,GAAG;AAAA,UAEH;AAAA,QAAA;AAAA,MAAA;AAAA,IAGP;AAEA,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,aAAW,WAAW;AAAA,QACtB,WAAW,GAAG,eAAe,EAAE,SAAS,KAAA,CAAM,GAAG,SAAS;AAAA,QAC1D,UAAU,YAAY;AAAA,QACrB,GAAG;AAAA,QAEH,UAAA;AAAA,UAAA,WAAW,oBAAC,aAAA,EAAY,WAAU,SAAA,CAAS;AAAA,UAC3C;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AACA,OAAO,cAAc;"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ function clearFilterBarFilter(filter) {
4
+ if (filter.kind === "text" || filter.kind === "lookup" || filter.kind === "enum") {
5
+ filter.onChange("");
6
+ return;
7
+ }
8
+ if (filter.kind === "lookup-multi" || filter.kind === "select-multi") {
9
+ filter.onChange([]);
10
+ return;
11
+ }
12
+ if (filter.kind === "number") {
13
+ filter.onChange({});
14
+ return;
15
+ }
16
+ if (filter.kind === "boolean") {
17
+ filter.onChange(false);
18
+ return;
19
+ }
20
+ filter.onChange({});
21
+ }
22
+ function isFilterBarFilterActive(filter) {
23
+ if (filter.kind === "text" || filter.kind === "lookup" || filter.kind === "enum") {
24
+ return String(filter.value ?? "").trim() !== "";
25
+ }
26
+ if (filter.kind === "lookup-multi" || filter.kind === "select-multi") {
27
+ return filter.value.length > 0;
28
+ }
29
+ if (filter.kind === "number") {
30
+ return String(filter.value.min ?? "").trim() !== "" || String(filter.value.max ?? "").trim() !== "";
31
+ }
32
+ if (filter.kind === "boolean") return filter.value;
33
+ return Object.keys(filter.value).length > 0;
34
+ }
35
+ exports.clearFilterBarFilter = clearFilterBarFilter;
36
+ exports.isFilterBarFilterActive = isFilterBarFilterActive;
37
+ //# sourceMappingURL=filter-bar-utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-bar-utils.cjs","sources":["../../src/components/filter-bar-utils.ts"],"sourcesContent":["import type { FilterBarFilter } from \"./FilterBar\";\n\nexport function clearFilterBarFilter(filter: FilterBarFilter) {\n if (filter.kind === \"text\" || filter.kind === \"lookup\" || filter.kind === \"enum\") {\n filter.onChange(\"\");\n return;\n }\n\n if (filter.kind === \"lookup-multi\" || filter.kind === \"select-multi\") {\n filter.onChange([]);\n return;\n }\n\n if (filter.kind === \"number\") {\n filter.onChange({});\n return;\n }\n\n if (filter.kind === \"boolean\") {\n filter.onChange(false);\n return;\n }\n\n filter.onChange({});\n}\n\nexport function isFilterBarFilterActive(filter: FilterBarFilter) {\n if (filter.kind === \"text\" || filter.kind === \"lookup\" || filter.kind === \"enum\") {\n return String(filter.value ?? \"\").trim() !== \"\";\n }\n if (filter.kind === \"lookup-multi\" || filter.kind === \"select-multi\") {\n return filter.value.length > 0;\n }\n if (filter.kind === \"number\") {\n return (\n String(filter.value.min ?? \"\").trim() !== \"\" || String(filter.value.max ?? \"\").trim() !== \"\"\n );\n }\n if (filter.kind === \"boolean\") return filter.value;\n return Object.keys(filter.value).length > 0;\n}\n"],"names":[],"mappings":";;AAEO,SAAS,qBAAqB,QAAyB;AAC5D,MAAI,OAAO,SAAS,UAAU,OAAO,SAAS,YAAY,OAAO,SAAS,QAAQ;AAChF,WAAO,SAAS,EAAE;AAClB;AAAA,EACF;AAEA,MAAI,OAAO,SAAS,kBAAkB,OAAO,SAAS,gBAAgB;AACpE,WAAO,SAAS,EAAE;AAClB;AAAA,EACF;AAEA,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO,SAAS,EAAE;AAClB;AAAA,EACF;AAEA,MAAI,OAAO,SAAS,WAAW;AAC7B,WAAO,SAAS,KAAK;AACrB;AAAA,EACF;AAEA,SAAO,SAAS,EAAE;AACpB;AAEO,SAAS,wBAAwB,QAAyB;AAC/D,MAAI,OAAO,SAAS,UAAU,OAAO,SAAS,YAAY,OAAO,SAAS,QAAQ;AAChF,WAAO,OAAO,OAAO,SAAS,EAAE,EAAE,WAAW;AAAA,EAC/C;AACA,MAAI,OAAO,SAAS,kBAAkB,OAAO,SAAS,gBAAgB;AACpE,WAAO,OAAO,MAAM,SAAS;AAAA,EAC/B;AACA,MAAI,OAAO,SAAS,UAAU;AAC5B,WACE,OAAO,OAAO,MAAM,OAAO,EAAE,EAAE,KAAA,MAAW,MAAM,OAAO,OAAO,MAAM,OAAO,EAAE,EAAE,WAAW;AAAA,EAE9F;AACA,MAAI,OAAO,SAAS,UAAW,QAAO,OAAO;AAC7C,SAAO,OAAO,KAAK,OAAO,KAAK,EAAE,SAAS;AAC5C;;;"}
@@ -0,0 +1,4 @@
1
+ import { FilterBarFilter } from './FilterBar';
2
+ export declare function clearFilterBarFilter(filter: FilterBarFilter): void;
3
+ export declare function isFilterBarFilterActive(filter: FilterBarFilter): boolean;
4
+ //# sourceMappingURL=filter-bar-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-bar-utils.d.ts","sourceRoot":"","sources":["../../src/components/filter-bar-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,QAsB3D;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,eAAe,WAc9D"}
@@ -0,0 +1,37 @@
1
+ function clearFilterBarFilter(filter) {
2
+ if (filter.kind === "text" || filter.kind === "lookup" || filter.kind === "enum") {
3
+ filter.onChange("");
4
+ return;
5
+ }
6
+ if (filter.kind === "lookup-multi" || filter.kind === "select-multi") {
7
+ filter.onChange([]);
8
+ return;
9
+ }
10
+ if (filter.kind === "number") {
11
+ filter.onChange({});
12
+ return;
13
+ }
14
+ if (filter.kind === "boolean") {
15
+ filter.onChange(false);
16
+ return;
17
+ }
18
+ filter.onChange({});
19
+ }
20
+ function isFilterBarFilterActive(filter) {
21
+ if (filter.kind === "text" || filter.kind === "lookup" || filter.kind === "enum") {
22
+ return String(filter.value ?? "").trim() !== "";
23
+ }
24
+ if (filter.kind === "lookup-multi" || filter.kind === "select-multi") {
25
+ return filter.value.length > 0;
26
+ }
27
+ if (filter.kind === "number") {
28
+ return String(filter.value.min ?? "").trim() !== "" || String(filter.value.max ?? "").trim() !== "";
29
+ }
30
+ if (filter.kind === "boolean") return filter.value;
31
+ return Object.keys(filter.value).length > 0;
32
+ }
33
+ export {
34
+ clearFilterBarFilter,
35
+ isFilterBarFilterActive
36
+ };
37
+ //# sourceMappingURL=filter-bar-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-bar-utils.js","sources":["../../src/components/filter-bar-utils.ts"],"sourcesContent":["import type { FilterBarFilter } from \"./FilterBar\";\n\nexport function clearFilterBarFilter(filter: FilterBarFilter) {\n if (filter.kind === \"text\" || filter.kind === \"lookup\" || filter.kind === \"enum\") {\n filter.onChange(\"\");\n return;\n }\n\n if (filter.kind === \"lookup-multi\" || filter.kind === \"select-multi\") {\n filter.onChange([]);\n return;\n }\n\n if (filter.kind === \"number\") {\n filter.onChange({});\n return;\n }\n\n if (filter.kind === \"boolean\") {\n filter.onChange(false);\n return;\n }\n\n filter.onChange({});\n}\n\nexport function isFilterBarFilterActive(filter: FilterBarFilter) {\n if (filter.kind === \"text\" || filter.kind === \"lookup\" || filter.kind === \"enum\") {\n return String(filter.value ?? \"\").trim() !== \"\";\n }\n if (filter.kind === \"lookup-multi\" || filter.kind === \"select-multi\") {\n return filter.value.length > 0;\n }\n if (filter.kind === \"number\") {\n return (\n String(filter.value.min ?? \"\").trim() !== \"\" || String(filter.value.max ?? \"\").trim() !== \"\"\n );\n }\n if (filter.kind === \"boolean\") return filter.value;\n return Object.keys(filter.value).length > 0;\n}\n"],"names":[],"mappings":"AAEO,SAAS,qBAAqB,QAAyB;AAC5D,MAAI,OAAO,SAAS,UAAU,OAAO,SAAS,YAAY,OAAO,SAAS,QAAQ;AAChF,WAAO,SAAS,EAAE;AAClB;AAAA,EACF;AAEA,MAAI,OAAO,SAAS,kBAAkB,OAAO,SAAS,gBAAgB;AACpE,WAAO,SAAS,EAAE;AAClB;AAAA,EACF;AAEA,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO,SAAS,EAAE;AAClB;AAAA,EACF;AAEA,MAAI,OAAO,SAAS,WAAW;AAC7B,WAAO,SAAS,KAAK;AACrB;AAAA,EACF;AAEA,SAAO,SAAS,EAAE;AACpB;AAEO,SAAS,wBAAwB,QAAyB;AAC/D,MAAI,OAAO,SAAS,UAAU,OAAO,SAAS,YAAY,OAAO,SAAS,QAAQ;AAChF,WAAO,OAAO,OAAO,SAAS,EAAE,EAAE,WAAW;AAAA,EAC/C;AACA,MAAI,OAAO,SAAS,kBAAkB,OAAO,SAAS,gBAAgB;AACpE,WAAO,OAAO,MAAM,SAAS;AAAA,EAC/B;AACA,MAAI,OAAO,SAAS,UAAU;AAC5B,WACE,OAAO,OAAO,MAAM,OAAO,EAAE,EAAE,KAAA,MAAW,MAAM,OAAO,OAAO,MAAM,OAAO,EAAE,EAAE,WAAW;AAAA,EAE9F;AACA,MAAI,OAAO,SAAS,UAAW,QAAO,OAAO;AAC7C,SAAO,OAAO,KAAK,OAAO,KAAK,EAAE,SAAS;AAC5C;"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const UiEye = require("../icons/components/UiEye.cjs");
4
+ const UiFileCode = require("../icons/components/UiFileCode.cjs");
5
+ const UiTable = require("../icons/components/UiTable.cjs");
6
+ const UiComment = require("../icons/components/UiComment.cjs");
7
+ const CLICKY_FORMAT_OPTIONS = [
8
+ { value: "clicky", label: "Clicky", description: "Rendered Clicky JSON with the rich Clicky viewer", icon: UiEye.UiEye },
9
+ { value: "json", label: "JSON", description: "Plain JSON for inspecting the raw response body", icon: UiFileCode.UiFileCode },
10
+ { value: "yaml", label: "YAML", description: "YAML for config-friendly inspection and export", icon: UiFileCode.UiFileCode },
11
+ { value: "csv", label: "CSV", description: "Comma-separated values for spreadsheets and imports", icon: UiTable.UiTable },
12
+ { value: "markdown", label: "Markdown", description: "Markdown formatted for docs, comments, and chat", icon: UiFileCode.UiFileCode },
13
+ { value: "html", label: "HTML", description: "Browser-ready HTML preview of the formatted output", icon: UiFileCode.UiFileCode },
14
+ { value: "pdf", label: "PDF", description: "Portable document for sharing and printing", icon: UiFileCode.UiFileCode },
15
+ { value: "pretty", label: "Pretty", description: "Human-readable plain text output from the formatter", icon: UiFileCode.UiFileCode },
16
+ { value: "excel", label: "Excel", description: "Spreadsheet workbook for offline analysis", icon: UiTable.UiTable },
17
+ { value: "slack", label: "Slack", description: "Slack Block Kit JSON for chat-native output", icon: UiComment.UiComment }
18
+ ];
19
+ exports.CLICKY_FORMAT_OPTIONS = CLICKY_FORMAT_OPTIONS;
20
+ //# sourceMappingURL=format-options.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-options.cjs","sources":["../../src/components/format-options.ts"],"sourcesContent":["import { type StaticIconComponent } from \"../data/Icon\";\nimport { UiComment, UiEye, UiFileCode, UiTable } from \"../icons\";\n\nexport type FormatOption = {\n /** Stable identifier emitted by `onChange`. */\n value: string;\n /** Visible label. */\n label: string;\n /** Secondary description shown in the menu. */\n description?: string;\n /** Icon rendered before the label. */\n icon?: StaticIconComponent;\n};\n\n/**\n * Clicky output formats with their label, description, and icon. Mirrors the\n * metadata in `Clicky.tsx`'s `getRemoteFormatMeta` so the format picker can live\n * as a standalone component.\n */\nexport const CLICKY_FORMAT_OPTIONS: FormatOption[] = [\n { value: \"clicky\", label: \"Clicky\", description: \"Rendered Clicky JSON with the rich Clicky viewer\", icon: UiEye },\n { value: \"json\", label: \"JSON\", description: \"Plain JSON for inspecting the raw response body\", icon: UiFileCode },\n { value: \"yaml\", label: \"YAML\", description: \"YAML for config-friendly inspection and export\", icon: UiFileCode },\n { value: \"csv\", label: \"CSV\", description: \"Comma-separated values for spreadsheets and imports\", icon: UiTable },\n { value: \"markdown\", label: \"Markdown\", description: \"Markdown formatted for docs, comments, and chat\", icon: UiFileCode },\n { value: \"html\", label: \"HTML\", description: \"Browser-ready HTML preview of the formatted output\", icon: UiFileCode },\n { value: \"pdf\", label: \"PDF\", description: \"Portable document for sharing and printing\", icon: UiFileCode },\n { value: \"pretty\", label: \"Pretty\", description: \"Human-readable plain text output from the formatter\", icon: UiFileCode },\n { value: \"excel\", label: \"Excel\", description: \"Spreadsheet workbook for offline analysis\", icon: UiTable },\n { value: \"slack\", label: \"Slack\", description: \"Slack Block Kit JSON for chat-native output\", icon: UiComment },\n];\n"],"names":["UiEye","UiFileCode","UiTable","UiComment"],"mappings":";;;;;;AAmBO,MAAM,wBAAwC;AAAA,EACnD,EAAE,OAAO,UAAU,OAAO,UAAU,aAAa,oDAAoD,MAAMA,YAAA;AAAA,EAC3G,EAAE,OAAO,QAAQ,OAAO,QAAQ,aAAa,mDAAmD,MAAMC,sBAAA;AAAA,EACtG,EAAE,OAAO,QAAQ,OAAO,QAAQ,aAAa,kDAAkD,MAAMA,sBAAA;AAAA,EACrG,EAAE,OAAO,OAAO,OAAO,OAAO,aAAa,uDAAuD,MAAMC,gBAAA;AAAA,EACxG,EAAE,OAAO,YAAY,OAAO,YAAY,aAAa,mDAAmD,MAAMD,sBAAA;AAAA,EAC9G,EAAE,OAAO,QAAQ,OAAO,QAAQ,aAAa,sDAAsD,MAAMA,sBAAA;AAAA,EACzG,EAAE,OAAO,OAAO,OAAO,OAAO,aAAa,8CAA8C,MAAMA,sBAAA;AAAA,EAC/F,EAAE,OAAO,UAAU,OAAO,UAAU,aAAa,uDAAuD,MAAMA,sBAAA;AAAA,EAC9G,EAAE,OAAO,SAAS,OAAO,SAAS,aAAa,6CAA6C,MAAMC,gBAAA;AAAA,EAClG,EAAE,OAAO,SAAS,OAAO,SAAS,aAAa,+CAA+C,MAAMC,UAAAA,UAAA;AACtG;;"}
@@ -0,0 +1,18 @@
1
+ import { StaticIconComponent } from '../data/Icon';
2
+ export type FormatOption = {
3
+ /** Stable identifier emitted by `onChange`. */
4
+ value: string;
5
+ /** Visible label. */
6
+ label: string;
7
+ /** Secondary description shown in the menu. */
8
+ description?: string;
9
+ /** Icon rendered before the label. */
10
+ icon?: StaticIconComponent;
11
+ };
12
+ /**
13
+ * Clicky output formats with their label, description, and icon. Mirrors the
14
+ * metadata in `Clicky.tsx`'s `getRemoteFormatMeta` so the format picker can live
15
+ * as a standalone component.
16
+ */
17
+ export declare const CLICKY_FORMAT_OPTIONS: FormatOption[];
18
+ //# sourceMappingURL=format-options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-options.d.ts","sourceRoot":"","sources":["../../src/components/format-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGxD,MAAM,MAAM,YAAY,GAAG;IACzB,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,IAAI,CAAC,EAAE,mBAAmB,CAAC;CAC5B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,YAAY,EAW/C,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { UiEye } from "../icons/components/UiEye.js";
2
+ import { UiFileCode } from "../icons/components/UiFileCode.js";
3
+ import { UiTable } from "../icons/components/UiTable.js";
4
+ import { UiComment } from "../icons/components/UiComment.js";
5
+ const CLICKY_FORMAT_OPTIONS = [
6
+ { value: "clicky", label: "Clicky", description: "Rendered Clicky JSON with the rich Clicky viewer", icon: UiEye },
7
+ { value: "json", label: "JSON", description: "Plain JSON for inspecting the raw response body", icon: UiFileCode },
8
+ { value: "yaml", label: "YAML", description: "YAML for config-friendly inspection and export", icon: UiFileCode },
9
+ { value: "csv", label: "CSV", description: "Comma-separated values for spreadsheets and imports", icon: UiTable },
10
+ { value: "markdown", label: "Markdown", description: "Markdown formatted for docs, comments, and chat", icon: UiFileCode },
11
+ { value: "html", label: "HTML", description: "Browser-ready HTML preview of the formatted output", icon: UiFileCode },
12
+ { value: "pdf", label: "PDF", description: "Portable document for sharing and printing", icon: UiFileCode },
13
+ { value: "pretty", label: "Pretty", description: "Human-readable plain text output from the formatter", icon: UiFileCode },
14
+ { value: "excel", label: "Excel", description: "Spreadsheet workbook for offline analysis", icon: UiTable },
15
+ { value: "slack", label: "Slack", description: "Slack Block Kit JSON for chat-native output", icon: UiComment }
16
+ ];
17
+ export {
18
+ CLICKY_FORMAT_OPTIONS
19
+ };
20
+ //# sourceMappingURL=format-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-options.js","sources":["../../src/components/format-options.ts"],"sourcesContent":["import { type StaticIconComponent } from \"../data/Icon\";\nimport { UiComment, UiEye, UiFileCode, UiTable } from \"../icons\";\n\nexport type FormatOption = {\n /** Stable identifier emitted by `onChange`. */\n value: string;\n /** Visible label. */\n label: string;\n /** Secondary description shown in the menu. */\n description?: string;\n /** Icon rendered before the label. */\n icon?: StaticIconComponent;\n};\n\n/**\n * Clicky output formats with their label, description, and icon. Mirrors the\n * metadata in `Clicky.tsx`'s `getRemoteFormatMeta` so the format picker can live\n * as a standalone component.\n */\nexport const CLICKY_FORMAT_OPTIONS: FormatOption[] = [\n { value: \"clicky\", label: \"Clicky\", description: \"Rendered Clicky JSON with the rich Clicky viewer\", icon: UiEye },\n { value: \"json\", label: \"JSON\", description: \"Plain JSON for inspecting the raw response body\", icon: UiFileCode },\n { value: \"yaml\", label: \"YAML\", description: \"YAML for config-friendly inspection and export\", icon: UiFileCode },\n { value: \"csv\", label: \"CSV\", description: \"Comma-separated values for spreadsheets and imports\", icon: UiTable },\n { value: \"markdown\", label: \"Markdown\", description: \"Markdown formatted for docs, comments, and chat\", icon: UiFileCode },\n { value: \"html\", label: \"HTML\", description: \"Browser-ready HTML preview of the formatted output\", icon: UiFileCode },\n { value: \"pdf\", label: \"PDF\", description: \"Portable document for sharing and printing\", icon: UiFileCode },\n { value: \"pretty\", label: \"Pretty\", description: \"Human-readable plain text output from the formatter\", icon: UiFileCode },\n { value: \"excel\", label: \"Excel\", description: \"Spreadsheet workbook for offline analysis\", icon: UiTable },\n { value: \"slack\", label: \"Slack\", description: \"Slack Block Kit JSON for chat-native output\", icon: UiComment },\n];\n"],"names":[],"mappings":";;;;AAmBO,MAAM,wBAAwC;AAAA,EACnD,EAAE,OAAO,UAAU,OAAO,UAAU,aAAa,oDAAoD,MAAM,MAAA;AAAA,EAC3G,EAAE,OAAO,QAAQ,OAAO,QAAQ,aAAa,mDAAmD,MAAM,WAAA;AAAA,EACtG,EAAE,OAAO,QAAQ,OAAO,QAAQ,aAAa,kDAAkD,MAAM,WAAA;AAAA,EACrG,EAAE,OAAO,OAAO,OAAO,OAAO,aAAa,uDAAuD,MAAM,QAAA;AAAA,EACxG,EAAE,OAAO,YAAY,OAAO,YAAY,aAAa,mDAAmD,MAAM,WAAA;AAAA,EAC9G,EAAE,OAAO,QAAQ,OAAO,QAAQ,aAAa,sDAAsD,MAAM,WAAA;AAAA,EACzG,EAAE,OAAO,OAAO,OAAO,OAAO,aAAa,8CAA8C,MAAM,WAAA;AAAA,EAC/F,EAAE,OAAO,UAAU,OAAO,UAAU,aAAa,uDAAuD,MAAM,WAAA;AAAA,EAC9G,EAAE,OAAO,SAAS,OAAO,SAAS,aAAa,6CAA6C,MAAM,QAAA;AAAA,EAClG,EAAE,OAAO,SAAS,OAAO,SAAS,aAAa,+CAA+C,MAAM,UAAA;AACtG;"}
@@ -5,10 +5,9 @@ require("react");
5
5
  const utils = require("../lib/utils.cjs");
6
6
  const Icon = require("../data/Icon.cjs");
7
7
  const button = require("./button.cjs");
8
- const jsonSchemaFormFields = require("./json-schema-form-fields.cjs");
9
8
  const jsonSchemaFormSize = require("./json-schema-form-size.cjs");
10
9
  const jsonSchemaFormResolve = require("./json-schema-form-resolve.cjs");
11
- const jsonSchemaFormRender = require("./json-schema-form-render.cjs");
10
+ const jsonSchemaFormUtils = require("./json-schema-form-utils.cjs");
12
11
  const UiAdd = require("../icons/components/UiAdd.cjs");
13
12
  const UiClose = require("../icons/components/UiClose.cjs");
14
13
  const UiTrash = require("../icons/components/UiTrash.cjs");
@@ -31,13 +30,13 @@ function ArrayControl({
31
30
  const childCtx = { ...ctx, readOnly, depth: ctx.depth + 1 };
32
31
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: utils.cn("flex flex-col rounded-md border border-input p-2", jsonSchemaFormSize.fieldInnerGapClass[ctx.size]), children: [
33
32
  items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-[1fr_auto] items-start gap-2", children: [
34
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0", children: jsonSchemaFormRender.renderFieldRow(
33
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0", children: ctx.render.renderFieldRow(
35
34
  {
36
35
  key: `${field.key}[${i}]`,
37
36
  prop: itemSchema,
38
37
  required: false,
39
38
  value: item,
40
- onChange: (next) => field.onChange(jsonSchemaFormRender.setIndex(items, i, next))
39
+ onChange: (next) => field.onChange(jsonSchemaFormUtils.setIndex(items, i, next))
41
40
  },
42
41
  childCtx,
43
42
  { labelOverride: `Item ${i + 1}` }
@@ -45,9 +44,9 @@ function ArrayControl({
45
44
  !readOnly && /* @__PURE__ */ jsxRuntime.jsx(
46
45
  ItemControls,
47
46
  {
48
- onUp: i > 0 ? () => field.onChange(jsonSchemaFormRender.moveItem(items, i, i - 1)) : void 0,
49
- onDown: i < items.length - 1 ? () => field.onChange(jsonSchemaFormRender.moveItem(items, i, i + 1)) : void 0,
50
- onRemove: () => field.onChange(jsonSchemaFormRender.removeIndex(items, i)),
47
+ onUp: i > 0 ? () => field.onChange(jsonSchemaFormUtils.moveItem(items, i, i - 1)) : void 0,
48
+ onDown: i < items.length - 1 ? () => field.onChange(jsonSchemaFormUtils.moveItem(items, i, i + 1)) : void 0,
49
+ onRemove: () => field.onChange(jsonSchemaFormUtils.removeIndex(items, i)),
51
50
  index: i
52
51
  }
53
52
  )
@@ -59,7 +58,7 @@ function ArrayControl({
59
58
  variant: "outline",
60
59
  size: "sm",
61
60
  className: "gap-1.5",
62
- onClick: () => field.onChange([...items, jsonSchemaFormRender.seedFromSchema(itemSchema)]),
61
+ onClick: () => field.onChange([...items, jsonSchemaFormUtils.seedFromSchema(itemSchema)]),
63
62
  children: [
64
63
  /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiAdd.UiAdd, className: "text-sm" }),
65
64
  "Add item"
@@ -81,14 +80,14 @@ function TableArray({
81
80
  const columns = Object.entries(itemSchema.properties ?? {});
82
81
  const childCtx = { ...ctx, readOnly, depth: ctx.depth + 1 };
83
82
  function cell(item, rowIndex, col, prop) {
84
- const obj = isPlainObject(item) ? item : {};
85
- const nodes = jsonSchemaFormRender.renderFieldNodes(
83
+ const obj = jsonSchemaFormUtils.isPlainObject(item) ? item : {};
84
+ const nodes = ctx.render.renderFieldNodes(
86
85
  {
87
86
  key: `${field.key}[${rowIndex}].${col}`,
88
87
  prop,
89
88
  required: false,
90
89
  value: obj[col],
91
- onChange: (next) => field.onChange(jsonSchemaFormRender.setIndex(items, rowIndex, { ...obj, [col]: next }))
90
+ onChange: (next) => field.onChange(jsonSchemaFormUtils.setIndex(items, rowIndex, { ...obj, [col]: next }))
92
91
  },
93
92
  childCtx
94
93
  );
@@ -108,7 +107,7 @@ function TableArray({
108
107
  type: "button",
109
108
  "aria-label": `Remove item ${i + 1}`,
110
109
  className: "inline-flex h-8 w-8 items-center justify-center rounded text-muted-foreground hover:bg-accent hover:text-foreground",
111
- onClick: () => field.onChange(jsonSchemaFormRender.removeIndex(items, i)),
110
+ onClick: () => field.onChange(jsonSchemaFormUtils.removeIndex(items, i)),
112
111
  children: /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiTrash.UiTrash, className: "text-sm" })
113
112
  }
114
113
  ) })
@@ -121,7 +120,7 @@ function TableArray({
121
120
  variant: "outline",
122
121
  size: "sm",
123
122
  className: "gap-1.5",
124
- onClick: () => field.onChange([...items, jsonSchemaFormRender.seedFromSchema(itemSchema)]),
123
+ onClick: () => field.onChange([...items, jsonSchemaFormUtils.seedFromSchema(itemSchema)]),
125
124
  children: [
126
125
  /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiAdd.UiAdd, className: "text-sm" }),
127
126
  "Add item"
@@ -130,9 +129,6 @@ function TableArray({
130
129
  ) })
131
130
  ] });
132
131
  }
133
- function isPlainObject(value) {
134
- return typeof value === "object" && value !== null && !Array.isArray(value);
135
- }
136
132
  function ItemControls({
137
133
  onUp,
138
134
  onDown,
@@ -232,7 +228,7 @@ function TagArray({
232
228
  id: fieldId,
233
229
  "data-jsf-input": true,
234
230
  className: utils.cn("min-w-32 flex-1 bg-transparent px-1 py-1 outline-none", jsonSchemaFormSize.labelSizeClass[size]),
235
- placeholder: tags.length === 0 ? jsonSchemaFormFields.defaultPlaceholder(field.schema) : "",
231
+ placeholder: tags.length === 0 ? jsonSchemaFormUtils.defaultPlaceholder(field.schema) : "",
236
232
  onKeyDown: handleKeyDown,
237
233
  onBlur: (e) => commit(e.currentTarget.value, e.currentTarget)
238
234
  }
@@ -1 +1 @@
1
- {"version":3,"file":"json-schema-form-array.cjs","sources":["../../src/components/json-schema-form-array.tsx"],"sourcesContent":["import { type KeyboardEvent, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon } from \"../data/Icon\";\nimport { UiAdd, UiChevronDown, UiChevronUp, UiClose, UiTrash } from \"../icons\";\nimport { Button } from \"./button\";\nimport { defaultPlaceholder } from \"./json-schema-form-fields\";\nimport { controlMinHeightClass, fieldInnerGapClass, labelSizeClass, type FormSize } from \"./json-schema-form-size\";\nimport { isScalarStringItems } from \"./json-schema-form-resolve\";\nimport {\n moveItem,\n removeIndex,\n renderFieldNodes,\n renderFieldRow,\n seedFromSchema,\n setIndex,\n type RenderContext,\n} from \"./json-schema-form-render\";\nimport type { FieldControl, JsonSchemaProperty } from \"./json-schema-form-types\";\n\n// ArrayControl is a hybrid: plain string-item arrays keep the compact tag UI;\n// anything richer (objects, numbers, enums, nested arrays) renders one recursive\n// control per item with add / remove / reorder.\nexport function ArrayControl({\n field,\n fieldId,\n ctx,\n}: {\n field: FieldControl;\n fieldId: string;\n ctx: RenderContext;\n}) {\n // A read-only array marks its whole subtree non-editable: no add/remove/reorder\n // and item inputs disabled (a child the schema marks readOnly still renders as\n // a value span).\n const readOnly = ctx.readOnly || field.readOnly === true;\n if (isScalarStringItems(field.itemSchema)) {\n return <TagArray field={field} fieldId={fieldId} readOnly={readOnly} size={ctx.size} />;\n }\n // `x-layout: table` renders object-item arrays as compact rows with one column\n // per item property — a denser alternative to the per-item stacked sub-form.\n if (field.layout === \"table\" && hasObjectItemProperties(field.itemSchema)) {\n return <TableArray field={field} ctx={ctx} readOnly={readOnly} />;\n }\n const items = Array.isArray(field.value) ? field.value : [];\n const itemSchema = field.itemSchema ?? { type: \"string\" };\n const childCtx: RenderContext = { ...ctx, readOnly, depth: ctx.depth + 1 };\n\n return (\n <div className={cn(\"flex flex-col rounded-md border border-input p-2\", fieldInnerGapClass[ctx.size])}>\n {items.map((item, i) => (\n <div key={i} className=\"grid grid-cols-[1fr_auto] items-start gap-2\">\n <div className=\"min-w-0\">\n {renderFieldRow(\n {\n key: `${field.key}[${i}]`,\n prop: itemSchema,\n required: false,\n value: item,\n onChange: (next) => field.onChange(setIndex(items, i, next)),\n },\n childCtx,\n { labelOverride: `Item ${i + 1}` },\n )}\n </div>\n {!readOnly && (\n <ItemControls\n onUp={i > 0 ? () => field.onChange(moveItem(items, i, i - 1)) : undefined}\n onDown={i < items.length - 1 ? () => field.onChange(moveItem(items, i, i + 1)) : undefined}\n onRemove={() => field.onChange(removeIndex(items, i))}\n index={i}\n />\n )}\n </div>\n ))}\n {!readOnly && (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"gap-1.5\"\n onClick={() => field.onChange([...items, seedFromSchema(itemSchema)])}\n >\n <Icon icon={UiAdd} className=\"text-sm\" />\n Add item\n </Button>\n )}\n </div>\n );\n}\n\n// hasObjectItemProperties reports whether the array's items are objects with a\n// fixed `properties` set — the precondition for a column-per-property table.\nfunction hasObjectItemProperties(items: JsonSchemaProperty | undefined): boolean {\n return !!items && !!items.properties && Object.keys(items.properties).length > 0;\n}\n\n// TableArray renders an object-item array as a table: a header row of the item's\n// property names and one row per item with value-only controls, plus per-row\n// remove and an add button. Driven by `x-layout: table`.\nfunction TableArray({\n field,\n ctx,\n readOnly,\n}: {\n field: FieldControl;\n ctx: RenderContext;\n readOnly: boolean;\n}) {\n const items = Array.isArray(field.value) ? field.value : [];\n const itemSchema = field.itemSchema ?? { type: \"object\" };\n const columns = Object.entries(itemSchema.properties ?? {});\n const childCtx: RenderContext = { ...ctx, readOnly, depth: ctx.depth + 1 };\n\n function cell(item: unknown, rowIndex: number, col: string, prop: JsonSchemaProperty): ReactNode {\n const obj = isPlainObject(item) ? item : {};\n const nodes = renderFieldNodes(\n {\n key: `${field.key}[${rowIndex}].${col}`,\n prop,\n required: false,\n value: obj[col],\n onChange: (next) => field.onChange(setIndex(items, rowIndex, { ...obj, [col]: next })),\n },\n childCtx,\n );\n return nodes?.value ?? null;\n }\n\n return (\n <div className=\"overflow-x-auto rounded-md border border-input\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b border-input bg-muted/40 text-left\">\n {columns.map(([col, prop]) => (\n <th key={col} className=\"px-2 py-1 text-xs font-medium text-muted-foreground\">\n {typeof prop.title === \"string\" && prop.title ? prop.title : col}\n </th>\n ))}\n {!readOnly && <th className=\"w-10 px-2 py-1\" />}\n </tr>\n </thead>\n <tbody>\n {items.map((item, i) => (\n <tr key={i} className=\"border-b border-input last:border-b-0 align-top\">\n {columns.map(([col, prop]) => (\n <td key={col} className=\"px-2 py-1\">\n {cell(item, i, col, prop)}\n </td>\n ))}\n {!readOnly && (\n <td className=\"px-2 py-1\">\n <button\n type=\"button\"\n aria-label={`Remove item ${i + 1}`}\n className=\"inline-flex h-8 w-8 items-center justify-center rounded text-muted-foreground hover:bg-accent hover:text-foreground\"\n onClick={() => field.onChange(removeIndex(items, i))}\n >\n <Icon icon={UiTrash} className=\"text-sm\" />\n </button>\n </td>\n )}\n </tr>\n ))}\n </tbody>\n </table>\n {!readOnly && (\n <div className=\"p-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"gap-1.5\"\n onClick={() => field.onChange([...items, seedFromSchema(itemSchema)])}\n >\n <Icon icon={UiAdd} className=\"text-sm\" />\n Add item\n </Button>\n </div>\n )}\n </div>\n );\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction ItemControls({\n onUp,\n onDown,\n onRemove,\n index,\n}: {\n onUp: (() => void) | undefined;\n onDown: (() => void) | undefined;\n onRemove: () => void;\n index: number;\n}) {\n return (\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n aria-label={`Move item ${index + 1} up`}\n disabled={!onUp}\n className=\"inline-flex h-8 w-8 items-center justify-center rounded text-muted-foreground hover:bg-accent hover:text-foreground disabled:opacity-30\"\n onClick={onUp}\n >\n <Icon icon={UiChevronUp} className=\"text-sm\" />\n </button>\n <button\n type=\"button\"\n aria-label={`Move item ${index + 1} down`}\n disabled={!onDown}\n className=\"inline-flex h-8 w-8 items-center justify-center rounded text-muted-foreground hover:bg-accent hover:text-foreground disabled:opacity-30\"\n onClick={onDown}\n >\n <Icon icon={UiChevronDown} className=\"text-sm\" />\n </button>\n <button\n type=\"button\"\n aria-label={`Remove item ${index + 1}`}\n className=\"inline-flex h-8 w-8 items-center justify-center rounded text-muted-foreground hover:bg-accent hover:text-foreground\"\n onClick={onRemove}\n >\n <Icon icon={UiTrash} className=\"text-sm\" />\n </button>\n </div>\n );\n}\n\n// TagArray is the compact tag editor for plain string-item arrays.\nfunction TagArray({\n field,\n fieldId,\n readOnly,\n size,\n}: {\n field: FieldControl;\n fieldId: string;\n readOnly: boolean;\n size: FormSize;\n}) {\n const tags = toStringArray(field.value);\n\n function commit(raw: string, input: HTMLInputElement) {\n const next = raw\n .split(\",\")\n .map((p) => p.trim())\n .filter(Boolean);\n if (next.length === 0) return;\n field.onChange([...tags, ...next]);\n input.value = \"\";\n }\n\n function handleKeyDown(e: KeyboardEvent<HTMLInputElement>) {\n const input = e.currentTarget;\n if (e.key === \"Enter\" || e.key === \",\") {\n e.preventDefault();\n commit(input.value, input);\n return;\n }\n if (e.key === \"Backspace\" && input.value === \"\" && tags.length > 0) {\n field.onChange(tags.slice(0, -1));\n }\n }\n\n return (\n <div\n className={cn(\n \"flex flex-wrap items-center gap-1.5 rounded-md border border-input bg-transparent px-2 py-1 shadow-sm\",\n controlMinHeightClass[size],\n )}\n >\n {tags.map((tag, i) => (\n <span\n key={`${tag}-${i}`}\n className=\"inline-flex h-6 max-w-full items-center gap-1 rounded-md bg-muted px-2 text-xs\"\n >\n <span className=\"truncate\">{tag}</span>\n {!readOnly && (\n <button\n type=\"button\"\n className=\"text-muted-foreground hover:text-foreground\"\n aria-label={`Remove ${tag}`}\n onClick={() => field.onChange(tags.filter((_, idx) => idx !== i))}\n >\n <Icon icon={UiClose} />\n </button>\n )}\n </span>\n ))}\n {!readOnly && (\n <input\n id={fieldId}\n data-jsf-input\n className={cn(\"min-w-32 flex-1 bg-transparent px-1 py-1 outline-none\", labelSizeClass[size])}\n placeholder={tags.length === 0 ? defaultPlaceholder(field.schema) : \"\"}\n onKeyDown={handleKeyDown}\n onBlur={(e) => commit(e.currentTarget.value, e.currentTarget)}\n />\n )}\n </div>\n );\n}\n\nfunction toStringArray(value: unknown): string[] {\n if (Array.isArray(value)) return value.map(String);\n return [];\n}\n"],"names":["isScalarStringItems","jsx","jsxs","cn","fieldInnerGapClass","renderFieldRow","setIndex","moveItem","removeIndex","Button","seedFromSchema","Icon","UiAdd","renderFieldNodes","UiTrash","UiChevronUp","UiChevronDown","controlMinHeightClass","UiClose","labelSizeClass","defaultPlaceholder"],"mappings":"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"}
1
+ {"version":3,"file":"json-schema-form-array.cjs","sources":["../../src/components/json-schema-form-array.tsx"],"sourcesContent":["import { type KeyboardEvent, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon } from \"../data/Icon\";\nimport { UiAdd, UiChevronDown, UiChevronUp, UiClose, UiTrash } from \"../icons\";\nimport { Button } from \"./button\";\nimport { controlMinHeightClass, fieldInnerGapClass, labelSizeClass, type FormSize } from \"./json-schema-form-size\";\nimport { isScalarStringItems } from \"./json-schema-form-resolve\";\nimport {\n defaultPlaceholder,\n isPlainObject,\n moveItem,\n removeIndex,\n seedFromSchema,\n setIndex,\n} from \"./json-schema-form-utils\";\nimport type { FieldControl, JsonSchemaProperty, RenderContext } from \"./json-schema-form-types\";\n\n// ArrayControl is a hybrid: plain string-item arrays keep the compact tag UI;\n// anything richer (objects, numbers, enums, nested arrays) renders one recursive\n// control per item with add / remove / reorder. Recursion goes through\n// ctx.render so this module never imports the renderer (no import cycle).\nexport function ArrayControl({\n field,\n fieldId,\n ctx,\n}: {\n field: FieldControl;\n fieldId: string;\n ctx: RenderContext;\n}) {\n // A read-only array marks its whole subtree non-editable: no add/remove/reorder\n // and item inputs disabled (a child the schema marks readOnly still renders as\n // a value span).\n const readOnly = ctx.readOnly || field.readOnly === true;\n if (isScalarStringItems(field.itemSchema)) {\n return <TagArray field={field} fieldId={fieldId} readOnly={readOnly} size={ctx.size} />;\n }\n // `x-layout: table` renders object-item arrays as compact rows with one column\n // per item property — a denser alternative to the per-item stacked sub-form.\n if (field.layout === \"table\" && hasObjectItemProperties(field.itemSchema)) {\n return <TableArray field={field} ctx={ctx} readOnly={readOnly} />;\n }\n const items = Array.isArray(field.value) ? field.value : [];\n const itemSchema = field.itemSchema ?? { type: \"string\" };\n const childCtx: RenderContext = { ...ctx, readOnly, depth: ctx.depth + 1 };\n\n return (\n <div className={cn(\"flex flex-col rounded-md border border-input p-2\", fieldInnerGapClass[ctx.size])}>\n {items.map((item, i) => (\n <div key={i} className=\"grid grid-cols-[1fr_auto] items-start gap-2\">\n <div className=\"min-w-0\">\n {ctx.render.renderFieldRow(\n {\n key: `${field.key}[${i}]`,\n prop: itemSchema,\n required: false,\n value: item,\n onChange: (next) => field.onChange(setIndex(items, i, next)),\n },\n childCtx,\n { labelOverride: `Item ${i + 1}` },\n )}\n </div>\n {!readOnly && (\n <ItemControls\n onUp={i > 0 ? () => field.onChange(moveItem(items, i, i - 1)) : undefined}\n onDown={i < items.length - 1 ? () => field.onChange(moveItem(items, i, i + 1)) : undefined}\n onRemove={() => field.onChange(removeIndex(items, i))}\n index={i}\n />\n )}\n </div>\n ))}\n {!readOnly && (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"gap-1.5\"\n onClick={() => field.onChange([...items, seedFromSchema(itemSchema)])}\n >\n <Icon icon={UiAdd} className=\"text-sm\" />\n Add item\n </Button>\n )}\n </div>\n );\n}\n\n// hasObjectItemProperties reports whether the array's items are objects with a\n// fixed `properties` set — the precondition for a column-per-property table.\nfunction hasObjectItemProperties(items: JsonSchemaProperty | undefined): boolean {\n return !!items && !!items.properties && Object.keys(items.properties).length > 0;\n}\n\n// TableArray renders an object-item array as a table: a header row of the item's\n// property names and one row per item with value-only controls, plus per-row\n// remove and an add button. Driven by `x-layout: table`.\nfunction TableArray({\n field,\n ctx,\n readOnly,\n}: {\n field: FieldControl;\n ctx: RenderContext;\n readOnly: boolean;\n}) {\n const items = Array.isArray(field.value) ? field.value : [];\n const itemSchema = field.itemSchema ?? { type: \"object\" };\n const columns = Object.entries(itemSchema.properties ?? {});\n const childCtx: RenderContext = { ...ctx, readOnly, depth: ctx.depth + 1 };\n\n function cell(item: unknown, rowIndex: number, col: string, prop: JsonSchemaProperty): ReactNode {\n const obj = isPlainObject(item) ? item : {};\n const nodes = ctx.render.renderFieldNodes(\n {\n key: `${field.key}[${rowIndex}].${col}`,\n prop,\n required: false,\n value: obj[col],\n onChange: (next) => field.onChange(setIndex(items, rowIndex, { ...obj, [col]: next })),\n },\n childCtx,\n );\n return nodes?.value ?? null;\n }\n\n return (\n <div className=\"overflow-x-auto rounded-md border border-input\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b border-input bg-muted/40 text-left\">\n {columns.map(([col, prop]) => (\n <th key={col} className=\"px-2 py-1 text-xs font-medium text-muted-foreground\">\n {typeof prop.title === \"string\" && prop.title ? prop.title : col}\n </th>\n ))}\n {!readOnly && <th className=\"w-10 px-2 py-1\" />}\n </tr>\n </thead>\n <tbody>\n {items.map((item, i) => (\n <tr key={i} className=\"border-b border-input last:border-b-0 align-top\">\n {columns.map(([col, prop]) => (\n <td key={col} className=\"px-2 py-1\">\n {cell(item, i, col, prop)}\n </td>\n ))}\n {!readOnly && (\n <td className=\"px-2 py-1\">\n <button\n type=\"button\"\n aria-label={`Remove item ${i + 1}`}\n className=\"inline-flex h-8 w-8 items-center justify-center rounded text-muted-foreground hover:bg-accent hover:text-foreground\"\n onClick={() => field.onChange(removeIndex(items, i))}\n >\n <Icon icon={UiTrash} className=\"text-sm\" />\n </button>\n </td>\n )}\n </tr>\n ))}\n </tbody>\n </table>\n {!readOnly && (\n <div className=\"p-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"gap-1.5\"\n onClick={() => field.onChange([...items, seedFromSchema(itemSchema)])}\n >\n <Icon icon={UiAdd} className=\"text-sm\" />\n Add item\n </Button>\n </div>\n )}\n </div>\n );\n}\n\nfunction ItemControls({\n onUp,\n onDown,\n onRemove,\n index,\n}: {\n onUp: (() => void) | undefined;\n onDown: (() => void) | undefined;\n onRemove: () => void;\n index: number;\n}) {\n return (\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n aria-label={`Move item ${index + 1} up`}\n disabled={!onUp}\n className=\"inline-flex h-8 w-8 items-center justify-center rounded text-muted-foreground hover:bg-accent hover:text-foreground disabled:opacity-30\"\n onClick={onUp}\n >\n <Icon icon={UiChevronUp} className=\"text-sm\" />\n </button>\n <button\n type=\"button\"\n aria-label={`Move item ${index + 1} down`}\n disabled={!onDown}\n className=\"inline-flex h-8 w-8 items-center justify-center rounded text-muted-foreground hover:bg-accent hover:text-foreground disabled:opacity-30\"\n onClick={onDown}\n >\n <Icon icon={UiChevronDown} className=\"text-sm\" />\n </button>\n <button\n type=\"button\"\n aria-label={`Remove item ${index + 1}`}\n className=\"inline-flex h-8 w-8 items-center justify-center rounded text-muted-foreground hover:bg-accent hover:text-foreground\"\n onClick={onRemove}\n >\n <Icon icon={UiTrash} className=\"text-sm\" />\n </button>\n </div>\n );\n}\n\n// TagArray is the compact tag editor for plain string-item arrays.\nfunction TagArray({\n field,\n fieldId,\n readOnly,\n size,\n}: {\n field: FieldControl;\n fieldId: string;\n readOnly: boolean;\n size: FormSize;\n}) {\n const tags = toStringArray(field.value);\n\n function commit(raw: string, input: HTMLInputElement) {\n const next = raw\n .split(\",\")\n .map((p) => p.trim())\n .filter(Boolean);\n if (next.length === 0) return;\n field.onChange([...tags, ...next]);\n input.value = \"\";\n }\n\n function handleKeyDown(e: KeyboardEvent<HTMLInputElement>) {\n const input = e.currentTarget;\n if (e.key === \"Enter\" || e.key === \",\") {\n e.preventDefault();\n commit(input.value, input);\n return;\n }\n if (e.key === \"Backspace\" && input.value === \"\" && tags.length > 0) {\n field.onChange(tags.slice(0, -1));\n }\n }\n\n return (\n <div\n className={cn(\n \"flex flex-wrap items-center gap-1.5 rounded-md border border-input bg-transparent px-2 py-1 shadow-sm\",\n controlMinHeightClass[size],\n )}\n >\n {tags.map((tag, i) => (\n <span\n key={`${tag}-${i}`}\n className=\"inline-flex h-6 max-w-full items-center gap-1 rounded-md bg-muted px-2 text-xs\"\n >\n <span className=\"truncate\">{tag}</span>\n {!readOnly && (\n <button\n type=\"button\"\n className=\"text-muted-foreground hover:text-foreground\"\n aria-label={`Remove ${tag}`}\n onClick={() => field.onChange(tags.filter((_, idx) => idx !== i))}\n >\n <Icon icon={UiClose} />\n </button>\n )}\n </span>\n ))}\n {!readOnly && (\n <input\n id={fieldId}\n data-jsf-input\n className={cn(\"min-w-32 flex-1 bg-transparent px-1 py-1 outline-none\", labelSizeClass[size])}\n placeholder={tags.length === 0 ? defaultPlaceholder(field.schema) : \"\"}\n onKeyDown={handleKeyDown}\n onBlur={(e) => commit(e.currentTarget.value, e.currentTarget)}\n />\n )}\n </div>\n );\n}\n\nfunction toStringArray(value: unknown): string[] {\n if (Array.isArray(value)) return value.map(String);\n return [];\n}\n"],"names":["isScalarStringItems","jsx","jsxs","cn","fieldInnerGapClass","setIndex","moveItem","removeIndex","Button","seedFromSchema","Icon","UiAdd","isPlainObject","UiTrash","UiChevronUp","UiChevronDown","controlMinHeightClass","UiClose","labelSizeClass","defaultPlaceholder"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
- import { RenderContext } from './json-schema-form-render';
2
- import { FieldControl } from './json-schema-form-types';
1
+ import { FieldControl, RenderContext } from './json-schema-form-types';
3
2
  export declare function ArrayControl({ field, fieldId, ctx, }: {
4
3
  field: FieldControl;
5
4
  fieldId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"json-schema-form-array.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-array.tsx"],"names":[],"mappings":"AAQA,OAAO,EAOL,KAAK,aAAa,EACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAsB,MAAM,0BAA0B,CAAC;AAKjF,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,OAAO,EACP,GAAG,GACJ,EAAE;IACD,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,aAAa,CAAC;CACpB,2CA0DA"}
1
+ {"version":3,"file":"json-schema-form-array.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-array.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAsB,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAMhG,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,OAAO,EACP,GAAG,GACJ,EAAE;IACD,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,aAAa,CAAC;CACpB,2CA0DA"}
@@ -3,10 +3,9 @@ import "react";
3
3
  import { cn } from "../lib/utils.js";
4
4
  import { Icon } from "../data/Icon.js";
5
5
  import { Button } from "./button.js";
6
- import { defaultPlaceholder } from "./json-schema-form-fields.js";
7
6
  import { fieldInnerGapClass, labelSizeClass, controlMinHeightClass } from "./json-schema-form-size.js";
8
7
  import { isScalarStringItems } from "./json-schema-form-resolve.js";
9
- import { renderFieldRow, setIndex, removeIndex, moveItem, seedFromSchema, renderFieldNodes } from "./json-schema-form-render.js";
8
+ import { setIndex, removeIndex, moveItem, seedFromSchema, defaultPlaceholder, isPlainObject } from "./json-schema-form-utils.js";
10
9
  import { UiAdd } from "../icons/components/UiAdd.js";
11
10
  import { UiClose } from "../icons/components/UiClose.js";
12
11
  import { UiTrash } from "../icons/components/UiTrash.js";
@@ -29,7 +28,7 @@ function ArrayControl({
29
28
  const childCtx = { ...ctx, readOnly, depth: ctx.depth + 1 };
30
29
  return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col rounded-md border border-input p-2", fieldInnerGapClass[ctx.size]), children: [
31
30
  items.map((item, i) => /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-[1fr_auto] items-start gap-2", children: [
32
- /* @__PURE__ */ jsx("div", { className: "min-w-0", children: renderFieldRow(
31
+ /* @__PURE__ */ jsx("div", { className: "min-w-0", children: ctx.render.renderFieldRow(
33
32
  {
34
33
  key: `${field.key}[${i}]`,
35
34
  prop: itemSchema,
@@ -80,7 +79,7 @@ function TableArray({
80
79
  const childCtx = { ...ctx, readOnly, depth: ctx.depth + 1 };
81
80
  function cell(item, rowIndex, col, prop) {
82
81
  const obj = isPlainObject(item) ? item : {};
83
- const nodes = renderFieldNodes(
82
+ const nodes = ctx.render.renderFieldNodes(
84
83
  {
85
84
  key: `${field.key}[${rowIndex}].${col}`,
86
85
  prop,
@@ -128,9 +127,6 @@ function TableArray({
128
127
  ) })
129
128
  ] });
130
129
  }
131
- function isPlainObject(value) {
132
- return typeof value === "object" && value !== null && !Array.isArray(value);
133
- }
134
130
  function ItemControls({
135
131
  onUp,
136
132
  onDown,