nuxt-ui-tools 1.11.2 → 1.13.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 (332) hide show
  1. package/README.md +11 -5
  2. package/dist/module.json +1 -1
  3. package/dist/module.mjs +46 -0
  4. package/dist/runtime/dashboard/components/dashboard-stat.d.vue.ts +1 -1
  5. package/dist/runtime/dashboard/components/dashboard-stat.vue.d.ts +1 -1
  6. package/dist/runtime/file-preview/components/shell/file-preview-stage.d.vue.ts +2 -2
  7. package/dist/runtime/file-preview/components/shell/file-preview-stage.vue.d.ts +2 -2
  8. package/dist/runtime/form/fields/array-collapse/component.vue +2 -1
  9. package/dist/runtime/form/fields/array-list/component.vue +72 -63
  10. package/dist/runtime/form/fields/array-list/use-array-items.d.ts +1 -0
  11. package/dist/runtime/form/fields/array-list/use-array-items.js +4 -0
  12. package/dist/runtime/form/fields/array-table/component.vue +2 -1
  13. package/dist/runtime/form/types/api.d.ts +10 -2
  14. package/dist/runtime/i18n/locales/en.js +252 -130
  15. package/dist/runtime/i18n/locales/fr.js +252 -130
  16. package/dist/runtime/i18n/types.d.ts +242 -119
  17. package/dist/runtime/shared/types/query.d.ts +14 -4
  18. package/dist/runtime/shared/types/remote-options.d.ts +11 -0
  19. package/dist/runtime/shared/utils/define-remote-options.js +6 -0
  20. package/dist/runtime/shared/utils/file.d.ts +1 -1
  21. package/dist/runtime/spreadsheet/components/{steps/review/spreadsheet-review-overflow-alert.d.vue.ts → internal/spreadsheet-import-cell-editor.d.vue.ts} +8 -5
  22. package/dist/runtime/spreadsheet/components/internal/spreadsheet-import-cell-editor.vue +73 -0
  23. package/dist/runtime/spreadsheet/components/{steps/review/spreadsheet-review-overflow-alert.vue.d.ts → internal/spreadsheet-import-cell-editor.vue.d.ts} +8 -5
  24. package/dist/runtime/spreadsheet/components/internal/spreadsheet-import-column-row.d.vue.ts +17 -0
  25. package/dist/runtime/spreadsheet/components/internal/spreadsheet-import-column-row.vue +98 -0
  26. package/dist/runtime/spreadsheet/components/internal/spreadsheet-import-column-row.vue.d.ts +17 -0
  27. package/dist/runtime/spreadsheet/components/internal/spreadsheet-import-heading.d.vue.ts +17 -0
  28. package/dist/runtime/spreadsheet/components/internal/spreadsheet-import-heading.vue +20 -0
  29. package/dist/runtime/spreadsheet/components/internal/spreadsheet-import-heading.vue.d.ts +17 -0
  30. package/dist/runtime/spreadsheet/components/internal/spreadsheet-import-status-badge.d.vue.ts +10 -0
  31. package/dist/runtime/spreadsheet/components/internal/spreadsheet-import-status-badge.vue +34 -0
  32. package/dist/runtime/spreadsheet/components/internal/spreadsheet-import-status-badge.vue.d.ts +10 -0
  33. package/dist/runtime/spreadsheet/components/internal/spreadsheet-import-value-row.d.vue.ts +13 -0
  34. package/dist/runtime/spreadsheet/components/internal/spreadsheet-import-value-row.vue +113 -0
  35. package/dist/runtime/spreadsheet/components/internal/spreadsheet-import-value-row.vue.d.ts +13 -0
  36. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-column-mapping.d.vue.ts +35 -0
  37. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-column-mapping.vue +154 -0
  38. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-column-mapping.vue.d.ts +35 -0
  39. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-dropzone.d.vue.ts +23 -0
  40. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-dropzone.vue +83 -0
  41. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-dropzone.vue.d.ts +23 -0
  42. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-expected-columns.d.vue.ts +19 -0
  43. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-expected-columns.vue +45 -0
  44. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-expected-columns.vue.d.ts +19 -0
  45. package/dist/runtime/spreadsheet/components/{shared/spreadsheet-object-preview-table.d.vue.ts → parts/spreadsheet-import-export-button.d.vue.ts} +3 -2
  46. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-export-button.vue +34 -0
  47. package/dist/runtime/spreadsheet/components/{layout/spreadsheet-import-file-bar.vue.d.ts → parts/spreadsheet-import-export-button.vue.d.ts} +3 -4
  48. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-file-card.d.vue.ts +17 -0
  49. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-file-card.vue +49 -0
  50. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-file-card.vue.d.ts +17 -0
  51. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-progress.d.vue.ts +18 -0
  52. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-progress.vue +101 -0
  53. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-progress.vue.d.ts +18 -0
  54. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-row-inspector.d.vue.ts +22 -0
  55. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-row-inspector.vue +276 -0
  56. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-row-inspector.vue.d.ts +22 -0
  57. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-source-settings.d.vue.ts +11 -0
  58. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-source-settings.vue +164 -0
  59. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-source-settings.vue.d.ts +11 -0
  60. package/dist/runtime/spreadsheet/components/{shared/spreadsheet-value-preview.d.vue.ts → parts/spreadsheet-import-stat.d.vue.ts} +7 -4
  61. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-stat.vue +30 -0
  62. package/dist/runtime/spreadsheet/components/{shared/spreadsheet-value-preview.vue.d.ts → parts/spreadsheet-import-stat.vue.d.ts} +7 -4
  63. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-stats.d.vue.ts +26 -0
  64. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-stats.vue +55 -0
  65. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-stats.vue.d.ts +26 -0
  66. package/dist/runtime/spreadsheet/components/{shared/spreadsheet-object-preview-table.vue.d.ts → parts/spreadsheet-import-submit-button.d.vue.ts} +3 -2
  67. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-submit-button.vue +27 -0
  68. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-submit-button.vue.d.ts +8 -0
  69. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-summary.d.vue.ts +16 -0
  70. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-summary.vue +51 -0
  71. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-summary.vue.d.ts +16 -0
  72. package/dist/runtime/spreadsheet/components/{layout/spreadsheet-import-file-bar.d.vue.ts → parts/spreadsheet-import-table-toolbar.d.vue.ts} +2 -4
  73. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-table-toolbar.vue +217 -0
  74. package/dist/runtime/spreadsheet/components/{shared/spreadsheet-raw-preview-table.d.vue.ts → parts/spreadsheet-import-table-toolbar.vue.d.ts} +2 -2
  75. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-table.d.vue.ts +33 -0
  76. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-table.vue +302 -0
  77. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-table.vue.d.ts +33 -0
  78. package/dist/runtime/spreadsheet/components/{layout/spreadsheet-import-sidebar.d.vue.ts → parts/spreadsheet-import-template-button.d.vue.ts} +5 -4
  79. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-template-button.vue +31 -0
  80. package/dist/runtime/spreadsheet/components/{layout/spreadsheet-import-sidebar.vue.d.ts → parts/spreadsheet-import-template-button.vue.d.ts} +5 -4
  81. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-value-mapping.d.vue.ts +27 -0
  82. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-value-mapping.vue +162 -0
  83. package/dist/runtime/spreadsheet/components/parts/spreadsheet-import-value-mapping.vue.d.ts +27 -0
  84. package/dist/runtime/spreadsheet/components/spreadsheet-import-root.d.vue.ts +24 -0
  85. package/dist/runtime/spreadsheet/components/spreadsheet-import-root.vue +23 -0
  86. package/dist/runtime/spreadsheet/components/spreadsheet-import-root.vue.d.ts +24 -0
  87. package/dist/runtime/spreadsheet/components/spreadsheet-import.d.vue.ts +21 -6
  88. package/dist/runtime/spreadsheet/components/spreadsheet-import.vue +46 -262
  89. package/dist/runtime/spreadsheet/components/spreadsheet-import.vue.d.ts +21 -6
  90. package/dist/runtime/spreadsheet/components/{layout/spreadsheet-import-header.d.vue.ts → steps/spreadsheet-import-step-nav.d.vue.ts} +6 -2
  91. package/dist/runtime/spreadsheet/components/steps/spreadsheet-import-step-nav.vue +116 -0
  92. package/dist/runtime/spreadsheet/components/{layout/spreadsheet-import-header.vue.d.ts → steps/spreadsheet-import-step-nav.vue.d.ts} +6 -2
  93. package/dist/runtime/spreadsheet/components/steps/spreadsheet-import-step.d.vue.ts +26 -0
  94. package/dist/runtime/spreadsheet/components/steps/spreadsheet-import-step.vue +106 -0
  95. package/dist/runtime/spreadsheet/components/steps/spreadsheet-import-step.vue.d.ts +26 -0
  96. package/dist/runtime/spreadsheet/components/steps/spreadsheet-import-stepper.d.vue.ts +15 -0
  97. package/dist/runtime/spreadsheet/components/steps/spreadsheet-import-stepper.vue +131 -0
  98. package/dist/runtime/spreadsheet/components/steps/spreadsheet-import-stepper.vue.d.ts +15 -0
  99. package/dist/runtime/spreadsheet/composables/index.d.ts +2 -0
  100. package/dist/runtime/spreadsheet/composables/index.js +2 -0
  101. package/dist/runtime/spreadsheet/composables/use-spreadsheet-answers.d.ts +8 -0
  102. package/dist/runtime/spreadsheet/composables/use-spreadsheet-answers.js +19 -0
  103. package/dist/runtime/spreadsheet/composables/use-spreadsheet-columns.d.ts +23 -0
  104. package/dist/runtime/spreadsheet/composables/use-spreadsheet-columns.js +75 -0
  105. package/dist/runtime/spreadsheet/composables/use-spreadsheet-context.d.ts +8 -45
  106. package/dist/runtime/spreadsheet/composables/use-spreadsheet-context.js +28 -32
  107. package/dist/runtime/spreadsheet/composables/use-spreadsheet-edits.d.ts +11 -0
  108. package/dist/runtime/spreadsheet/composables/use-spreadsheet-edits.js +25 -0
  109. package/dist/runtime/spreadsheet/composables/use-spreadsheet-fields.d.ts +16 -0
  110. package/dist/runtime/spreadsheet/composables/use-spreadsheet-fields.js +20 -0
  111. package/dist/runtime/spreadsheet/composables/use-spreadsheet-file.d.ts +14 -0
  112. package/dist/runtime/spreadsheet/composables/use-spreadsheet-file.js +44 -0
  113. package/dist/runtime/spreadsheet/composables/use-spreadsheet-import-context.d.ts +12 -0
  114. package/dist/runtime/spreadsheet/composables/use-spreadsheet-import-context.js +22 -0
  115. package/dist/runtime/spreadsheet/composables/use-spreadsheet-import.d.ts +18 -7
  116. package/dist/runtime/spreadsheet/composables/use-spreadsheet-import.js +340 -109
  117. package/dist/runtime/spreadsheet/composables/use-spreadsheet-layout.d.ts +36 -0
  118. package/dist/runtime/spreadsheet/composables/use-spreadsheet-layout.js +95 -0
  119. package/dist/runtime/spreadsheet/composables/use-spreadsheet-options.d.ts +24 -0
  120. package/dist/runtime/spreadsheet/composables/use-spreadsheet-options.js +159 -0
  121. package/dist/runtime/spreadsheet/composables/use-spreadsheet-queries.d.ts +14 -0
  122. package/dist/runtime/spreadsheet/composables/use-spreadsheet-queries.js +11 -0
  123. package/dist/runtime/spreadsheet/composables/use-spreadsheet-review.d.ts +37 -169
  124. package/dist/runtime/spreadsheet/composables/use-spreadsheet-review.js +148 -408
  125. package/dist/runtime/spreadsheet/composables/use-spreadsheet-rows.d.ts +48 -26
  126. package/dist/runtime/spreadsheet/composables/use-spreadsheet-rows.js +334 -21
  127. package/dist/runtime/spreadsheet/composables/use-spreadsheet-steps.d.ts +33 -0
  128. package/dist/runtime/spreadsheet/composables/use-spreadsheet-steps.js +126 -0
  129. package/dist/runtime/spreadsheet/composables/use-spreadsheet-submit.d.ts +37 -0
  130. package/dist/runtime/spreadsheet/composables/use-spreadsheet-submit.js +136 -0
  131. package/dist/runtime/spreadsheet/composables/use-spreadsheet-values.d.ts +27 -0
  132. package/dist/runtime/spreadsheet/composables/use-spreadsheet-values.js +121 -0
  133. package/dist/runtime/spreadsheet/index.d.ts +0 -1
  134. package/dist/runtime/spreadsheet/index.js +0 -1
  135. package/dist/runtime/spreadsheet/schema/builder.d.ts +8 -0
  136. package/dist/runtime/spreadsheet/schema/builder.js +31 -0
  137. package/dist/runtime/spreadsheet/schema/index.d.ts +24 -32
  138. package/dist/runtime/spreadsheet/schema/index.js +4 -21
  139. package/dist/runtime/spreadsheet/types/columns.d.ts +252 -273
  140. package/dist/runtime/spreadsheet/types/fields.d.ts +64 -0
  141. package/dist/runtime/spreadsheet/types/importer.d.ts +308 -0
  142. package/dist/runtime/spreadsheet/types/index.d.ts +6 -10
  143. package/dist/runtime/spreadsheet/types/options.d.ts +47 -9
  144. package/dist/runtime/spreadsheet/types/rows.d.ts +57 -48
  145. package/dist/runtime/spreadsheet/types/schema.d.ts +162 -76
  146. package/dist/runtime/spreadsheet/types/shared.d.ts +19 -21
  147. package/dist/runtime/spreadsheet/types/source.d.ts +39 -15
  148. package/dist/runtime/spreadsheet/types/steps.d.ts +76 -0
  149. package/dist/runtime/spreadsheet/types/validation.d.ts +49 -69
  150. package/dist/runtime/spreadsheet/types/values.d.ts +77 -0
  151. package/dist/runtime/spreadsheet/utils/download.d.ts +2 -0
  152. package/dist/runtime/spreadsheet/utils/download.js +8 -0
  153. package/dist/runtime/spreadsheet/utils/export.d.ts +26 -0
  154. package/dist/runtime/spreadsheet/utils/export.js +50 -0
  155. package/dist/runtime/spreadsheet/utils/fields.d.ts +26 -0
  156. package/dist/runtime/spreadsheet/utils/fields.js +169 -0
  157. package/dist/runtime/spreadsheet/utils/guards.d.ts +18 -0
  158. package/dist/runtime/spreadsheet/utils/guards.js +27 -0
  159. package/dist/runtime/spreadsheet/utils/headers.d.ts +15 -0
  160. package/dist/runtime/spreadsheet/utils/headers.js +36 -0
  161. package/dist/runtime/spreadsheet/utils/identity.d.ts +24 -0
  162. package/dist/runtime/spreadsheet/utils/identity.js +57 -0
  163. package/dist/runtime/spreadsheet/utils/index.d.ts +15 -6
  164. package/dist/runtime/spreadsheet/utils/index.js +15 -6
  165. package/dist/runtime/spreadsheet/utils/layout.d.ts +12 -0
  166. package/dist/runtime/spreadsheet/utils/layout.js +37 -0
  167. package/dist/runtime/spreadsheet/utils/options.d.ts +31 -10
  168. package/dist/runtime/spreadsheet/utils/options.js +58 -30
  169. package/dist/runtime/spreadsheet/utils/parse.d.ts +6 -0
  170. package/dist/runtime/spreadsheet/utils/parse.js +147 -0
  171. package/dist/runtime/spreadsheet/utils/paths.d.ts +4 -0
  172. package/dist/runtime/spreadsheet/utils/paths.js +29 -0
  173. package/dist/runtime/spreadsheet/utils/rows.d.ts +69 -0
  174. package/dist/runtime/spreadsheet/utils/rows.js +168 -0
  175. package/dist/runtime/spreadsheet/utils/rules.d.ts +4 -0
  176. package/dist/runtime/spreadsheet/utils/rules.js +95 -0
  177. package/dist/runtime/spreadsheet/utils/suggestions.d.ts +20 -0
  178. package/dist/runtime/spreadsheet/utils/suggestions.js +43 -0
  179. package/dist/runtime/spreadsheet/utils/text.d.ts +9 -0
  180. package/dist/runtime/spreadsheet/utils/text.js +11 -0
  181. package/dist/runtime/spreadsheet/utils/workbook.d.ts +13 -0
  182. package/dist/runtime/spreadsheet/utils/workbook.js +121 -0
  183. package/dist/runtime/table/components/filters/tags/boolean-filter-tag.d.vue.ts +2 -2
  184. package/dist/runtime/table/components/filters/tags/boolean-filter-tag.vue.d.ts +2 -2
  185. package/dist/runtime/table/components/filters/tags/date-filter-tag.d.vue.ts +2 -2
  186. package/dist/runtime/table/components/filters/tags/date-filter-tag.vue.d.ts +2 -2
  187. package/dist/runtime/table/components/filters/tags/number-filter-tag.d.vue.ts +2 -2
  188. package/dist/runtime/table/components/filters/tags/number-filter-tag.vue.d.ts +2 -2
  189. package/dist/runtime/table/components/filters/tags/option-filter-tag.d.vue.ts +2 -2
  190. package/dist/runtime/table/components/filters/tags/option-filter-tag.vue.d.ts +2 -2
  191. package/dist/runtime/table/components/filters/tags/text-filter-tag.d.vue.ts +2 -2
  192. package/dist/runtime/table/components/filters/tags/text-filter-tag.vue.d.ts +2 -2
  193. package/dist/runtime/table/components/table/table-cell-ellipsis.d.ts +1 -1
  194. package/dist/runtime/table/composables/use-table-actions.d.ts +1 -1
  195. package/dist/runtime/table/composables/use-table-actions.js +11 -3
  196. package/dist/runtime/table/composables/use-table-internals.d.ts +3 -3
  197. package/dist/runtime/table/types/actions.d.ts +8 -1
  198. package/dist/runtime/table/utils/data-list-ui.d.ts +1 -1
  199. package/package.json +18 -3
  200. package/dist/runtime/spreadsheet/components/layout/spreadsheet-import-file-bar.vue +0 -31
  201. package/dist/runtime/spreadsheet/components/layout/spreadsheet-import-footer.d.vue.ts +0 -24
  202. package/dist/runtime/spreadsheet/components/layout/spreadsheet-import-footer.vue +0 -69
  203. package/dist/runtime/spreadsheet/components/layout/spreadsheet-import-footer.vue.d.ts +0 -24
  204. package/dist/runtime/spreadsheet/components/layout/spreadsheet-import-header.vue +0 -36
  205. package/dist/runtime/spreadsheet/components/layout/spreadsheet-import-sidebar.vue +0 -63
  206. package/dist/runtime/spreadsheet/components/shared/spreadsheet-object-preview-table.vue +0 -67
  207. package/dist/runtime/spreadsheet/components/shared/spreadsheet-raw-preview-table.vue +0 -41
  208. package/dist/runtime/spreadsheet/components/shared/spreadsheet-raw-preview-table.vue.d.ts +0 -7
  209. package/dist/runtime/spreadsheet/components/shared/spreadsheet-summary-stats.d.vue.ts +0 -10
  210. package/dist/runtime/spreadsheet/components/shared/spreadsheet-summary-stats.vue +0 -25
  211. package/dist/runtime/spreadsheet/components/shared/spreadsheet-summary-stats.vue.d.ts +0 -10
  212. package/dist/runtime/spreadsheet/components/shared/spreadsheet-value-preview.vue +0 -201
  213. package/dist/runtime/spreadsheet/components/steps/matching/spreadsheet-matching-summary.d.vue.ts +0 -11
  214. package/dist/runtime/spreadsheet/components/steps/matching/spreadsheet-matching-summary.vue +0 -38
  215. package/dist/runtime/spreadsheet/components/steps/matching/spreadsheet-matching-summary.vue.d.ts +0 -11
  216. package/dist/runtime/spreadsheet/components/steps/matching/spreadsheet-matching-table.d.vue.ts +0 -45
  217. package/dist/runtime/spreadsheet/components/steps/matching/spreadsheet-matching-table.vue +0 -219
  218. package/dist/runtime/spreadsheet/components/steps/matching/spreadsheet-matching-table.vue.d.ts +0 -45
  219. package/dist/runtime/spreadsheet/components/steps/references/spreadsheet-references-accordion.d.vue.ts +0 -51
  220. package/dist/runtime/spreadsheet/components/steps/references/spreadsheet-references-accordion.vue +0 -166
  221. package/dist/runtime/spreadsheet/components/steps/references/spreadsheet-references-accordion.vue.d.ts +0 -51
  222. package/dist/runtime/spreadsheet/components/steps/references/spreadsheet-references-summary.d.vue.ts +0 -11
  223. package/dist/runtime/spreadsheet/components/steps/references/spreadsheet-references-summary.vue +0 -26
  224. package/dist/runtime/spreadsheet/components/steps/references/spreadsheet-references-summary.vue.d.ts +0 -11
  225. package/dist/runtime/spreadsheet/components/steps/review/spreadsheet-review-inspection.d.vue.ts +0 -41
  226. package/dist/runtime/spreadsheet/components/steps/review/spreadsheet-review-inspection.vue +0 -392
  227. package/dist/runtime/spreadsheet/components/steps/review/spreadsheet-review-inspection.vue.d.ts +0 -41
  228. package/dist/runtime/spreadsheet/components/steps/review/spreadsheet-review-overflow-alert.vue +0 -43
  229. package/dist/runtime/spreadsheet/components/steps/review/spreadsheet-review-stats.d.vue.ts +0 -15
  230. package/dist/runtime/spreadsheet/components/steps/review/spreadsheet-review-stats.vue +0 -40
  231. package/dist/runtime/spreadsheet/components/steps/review/spreadsheet-review-stats.vue.d.ts +0 -15
  232. package/dist/runtime/spreadsheet/components/steps/spreadsheet-import-matching-step.d.vue.ts +0 -7
  233. package/dist/runtime/spreadsheet/components/steps/spreadsheet-import-matching-step.vue +0 -137
  234. package/dist/runtime/spreadsheet/components/steps/spreadsheet-import-matching-step.vue.d.ts +0 -7
  235. package/dist/runtime/spreadsheet/components/steps/spreadsheet-import-references-step.d.vue.ts +0 -7
  236. package/dist/runtime/spreadsheet/components/steps/spreadsheet-import-references-step.vue +0 -222
  237. package/dist/runtime/spreadsheet/components/steps/spreadsheet-import-references-step.vue.d.ts +0 -7
  238. package/dist/runtime/spreadsheet/components/steps/spreadsheet-import-review-step.d.vue.ts +0 -7
  239. package/dist/runtime/spreadsheet/components/steps/spreadsheet-import-review-step.vue +0 -191
  240. package/dist/runtime/spreadsheet/components/steps/spreadsheet-import-review-step.vue.d.ts +0 -7
  241. package/dist/runtime/spreadsheet/components/steps/spreadsheet-import-structure-step.d.vue.ts +0 -7
  242. package/dist/runtime/spreadsheet/components/steps/spreadsheet-import-structure-step.vue +0 -62
  243. package/dist/runtime/spreadsheet/components/steps/spreadsheet-import-structure-step.vue.d.ts +0 -7
  244. package/dist/runtime/spreadsheet/components/steps/spreadsheet-import-upload-step.d.vue.ts +0 -8
  245. package/dist/runtime/spreadsheet/components/steps/spreadsheet-import-upload-step.vue +0 -81
  246. package/dist/runtime/spreadsheet/components/steps/spreadsheet-import-upload-step.vue.d.ts +0 -8
  247. package/dist/runtime/spreadsheet/components/steps/structure/spreadsheet-structure-preview-table.d.vue.ts +0 -15
  248. package/dist/runtime/spreadsheet/components/steps/structure/spreadsheet-structure-preview-table.vue +0 -95
  249. package/dist/runtime/spreadsheet/components/steps/structure/spreadsheet-structure-preview-table.vue.d.ts +0 -15
  250. package/dist/runtime/spreadsheet/components/steps/structure/spreadsheet-structure-sheet-list.d.vue.ts +0 -15
  251. package/dist/runtime/spreadsheet/components/steps/structure/spreadsheet-structure-sheet-list.vue +0 -56
  252. package/dist/runtime/spreadsheet/components/steps/structure/spreadsheet-structure-sheet-list.vue.d.ts +0 -15
  253. package/dist/runtime/spreadsheet/components/types.d.ts +0 -41
  254. package/dist/runtime/spreadsheet/composables/use-spreadsheet-column-matching.d.ts +0 -18
  255. package/dist/runtime/spreadsheet/composables/use-spreadsheet-column-matching.js +0 -62
  256. package/dist/runtime/spreadsheet/composables/use-spreadsheet-internals.d.ts +0 -629
  257. package/dist/runtime/spreadsheet/composables/use-spreadsheet-internals.js +0 -68
  258. package/dist/runtime/spreadsheet/composables/use-spreadsheet-references.d.ts +0 -1
  259. package/dist/runtime/spreadsheet/composables/use-spreadsheet-references.js +0 -3
  260. package/dist/runtime/spreadsheet/composables/use-spreadsheet-resolutions.d.ts +0 -40
  261. package/dist/runtime/spreadsheet/composables/use-spreadsheet-resolutions.js +0 -97
  262. package/dist/runtime/spreadsheet/composables/use-spreadsheet-row-state.d.ts +0 -24
  263. package/dist/runtime/spreadsheet/composables/use-spreadsheet-row-state.js +0 -74
  264. package/dist/runtime/spreadsheet/composables/use-spreadsheet-source.d.ts +0 -27
  265. package/dist/runtime/spreadsheet/composables/use-spreadsheet-source.js +0 -109
  266. package/dist/runtime/spreadsheet/composables/use-spreadsheet-view.d.ts +0 -15
  267. package/dist/runtime/spreadsheet/composables/use-spreadsheet-view.js +0 -109
  268. package/dist/runtime/spreadsheet/schema/normalize.d.ts +0 -73
  269. package/dist/runtime/spreadsheet/schema/normalize.js +0 -136
  270. package/dist/runtime/spreadsheet/types/context.d.ts +0 -9
  271. package/dist/runtime/spreadsheet/types/import.d.ts +0 -55
  272. package/dist/runtime/spreadsheet/types/inference.d.ts +0 -83
  273. package/dist/runtime/spreadsheet/types/normalized.d.ts +0 -50
  274. package/dist/runtime/spreadsheet/types/normalized.js +0 -0
  275. package/dist/runtime/spreadsheet/types/pipeline.d.ts +0 -7
  276. package/dist/runtime/spreadsheet/types/pipeline.js +0 -0
  277. package/dist/runtime/spreadsheet/types/reference-session.d.ts +0 -43
  278. package/dist/runtime/spreadsheet/types/reference-session.js +0 -0
  279. package/dist/runtime/spreadsheet/types/references.d.ts +0 -32
  280. package/dist/runtime/spreadsheet/types/references.js +0 -0
  281. package/dist/runtime/spreadsheet/types/resolution.d.ts +0 -43
  282. package/dist/runtime/spreadsheet/types/resolution.js +0 -0
  283. package/dist/runtime/spreadsheet/utils/builders/core.d.ts +0 -17
  284. package/dist/runtime/spreadsheet/utils/builders/core.js +0 -262
  285. package/dist/runtime/spreadsheet/utils/builders/index.d.ts +0 -1
  286. package/dist/runtime/spreadsheet/utils/builders/index.js +0 -1
  287. package/dist/runtime/spreadsheet/utils/context.d.ts +0 -20
  288. package/dist/runtime/spreadsheet/utils/context.js +0 -25
  289. package/dist/runtime/spreadsheet/utils/display.d.ts +0 -6
  290. package/dist/runtime/spreadsheet/utils/display.js +0 -26
  291. package/dist/runtime/spreadsheet/utils/object.d.ts +0 -9
  292. package/dist/runtime/spreadsheet/utils/object.js +0 -78
  293. package/dist/runtime/spreadsheet/utils/references/candidates.d.ts +0 -6
  294. package/dist/runtime/spreadsheet/utils/references/candidates.js +0 -28
  295. package/dist/runtime/spreadsheet/utils/references/core.d.ts +0 -3
  296. package/dist/runtime/spreadsheet/utils/references/core.js +0 -3
  297. package/dist/runtime/spreadsheet/utils/references/guards.d.ts +0 -4
  298. package/dist/runtime/spreadsheet/utils/references/guards.js +0 -28
  299. package/dist/runtime/spreadsheet/utils/references/index.d.ts +0 -1
  300. package/dist/runtime/spreadsheet/utils/references/index.js +0 -1
  301. package/dist/runtime/spreadsheet/utils/references/resolutions.d.ts +0 -17
  302. package/dist/runtime/spreadsheet/utils/references/resolutions.js +0 -172
  303. package/dist/runtime/spreadsheet/utils/references/shared.d.ts +0 -3
  304. package/dist/runtime/spreadsheet/utils/references/shared.js +0 -26
  305. package/dist/runtime/spreadsheet/utils/references/sources.d.ts +0 -9
  306. package/dist/runtime/spreadsheet/utils/references/sources.js +0 -38
  307. package/dist/runtime/spreadsheet/utils/rows/core.d.ts +0 -4
  308. package/dist/runtime/spreadsheet/utils/rows/core.js +0 -4
  309. package/dist/runtime/spreadsheet/utils/rows/headers.d.ts +0 -2
  310. package/dist/runtime/spreadsheet/utils/rows/headers.js +0 -9
  311. package/dist/runtime/spreadsheet/utils/rows/index.d.ts +0 -1
  312. package/dist/runtime/spreadsheet/utils/rows/index.js +0 -1
  313. package/dist/runtime/spreadsheet/utils/rows/matching.d.ts +0 -5
  314. package/dist/runtime/spreadsheet/utils/rows/matching.js +0 -209
  315. package/dist/runtime/spreadsheet/utils/rows/parsing.d.ts +0 -7
  316. package/dist/runtime/spreadsheet/utils/rows/parsing.js +0 -209
  317. package/dist/runtime/spreadsheet/utils/rows/shared.d.ts +0 -17
  318. package/dist/runtime/spreadsheet/utils/rows/shared.js +0 -309
  319. package/dist/runtime/spreadsheet/utils/rows/summary.d.ts +0 -2
  320. package/dist/runtime/spreadsheet/utils/rows/summary.js +0 -10
  321. package/dist/runtime/spreadsheet/utils/source/core.d.ts +0 -9
  322. package/dist/runtime/spreadsheet/utils/source/core.js +0 -65
  323. package/dist/runtime/spreadsheet/utils/source/index.d.ts +0 -1
  324. package/dist/runtime/spreadsheet/utils/source/index.js +0 -1
  325. package/dist/runtime/spreadsheet/utils/validation/core.d.ts +0 -16
  326. package/dist/runtime/spreadsheet/utils/validation/core.js +0 -211
  327. package/dist/runtime/spreadsheet/utils/validation/index.d.ts +0 -1
  328. package/dist/runtime/spreadsheet/utils/validation/index.js +0 -1
  329. /package/dist/runtime/spreadsheet/{components/types.js → types/fields.js} +0 -0
  330. /package/dist/runtime/spreadsheet/types/{context.js → importer.js} +0 -0
  331. /package/dist/runtime/spreadsheet/types/{import.js → steps.js} +0 -0
  332. /package/dist/runtime/spreadsheet/types/{inference.js → values.js} +0 -0
package/README.md CHANGED
@@ -3,15 +3,21 @@
3
3
  Nuxt module and runtime toolkit for UI-heavy Nuxt apps, with a local playground for integration testing and demos.
4
4
 
5
5
  The release-ready public runtimes are available through `nuxt-ui-tools/table`,
6
- `nuxt-ui-tools/form`, `nuxt-ui-tools/query-state`, `nuxt-ui-tools/shared`, and
7
- `nuxt-ui-tools/i18n`. Installing the Nuxt module also exposes the same domains
8
- through `#ui-tools/*`, auto-imports their primary functions, and registers their
6
+ `nuxt-ui-tools/form`, `nuxt-ui-tools/query-state`, `nuxt-ui-tools/spreadsheet`,
7
+ `nuxt-ui-tools/shared`, and `nuxt-ui-tools/i18n`. Installing the Nuxt module also exposes the
8
+ same domains through `#ui-tools/*`, auto-imports their primary functions, and registers their
9
9
  top-level components.
10
10
 
11
11
  The shared entrypoint exports the breakpoint-aware runtime helpers
12
12
  `getResponsiveValue`, `parseResponsiveValue`, `resolveResponsiveValueAtBreakpoint`,
13
- and `useResponsiveValue`. The spreadsheet import engine is still internal and is
14
- not part of the package export map or Nuxt public surface.
13
+ and `useResponsiveValue`.
14
+
15
+ The spreadsheet import reads files with SheetJS, an optional peer. npm only serves SheetJS up to
16
+ 0.18.5, which has known vulnerabilities; install 0.20.2 or later from the SheetJS CDN:
17
+
18
+ ```bash
19
+ bun add https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz
20
+ ```
15
21
 
16
22
  ## Structure
17
23
 
package/dist/module.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "configKey": "nuxtUiTools",
6
6
  "docs": "https://ui.nuxt.com/docs/getting-started/installation/nuxt",
7
7
  "name": "nuxt-ui-tools",
8
- "version": "1.11.2",
8
+ "version": "1.13.0",
9
9
  "builder": {
10
10
  "@nuxt/module-builder": "1.0.3",
11
11
  "unbuild": "unknown"
package/dist/module.mjs CHANGED
@@ -46,6 +46,44 @@ function getPublicComponents(runtimeDir, options) {
46
46
  global: options.global,
47
47
  name: `${prefix}DataList${part}`
48
48
  })),
49
+ // Spreadsheet
50
+ {
51
+ filePath: `${runtimeDir}/spreadsheet/components/spreadsheet-import.vue`,
52
+ global: options.global,
53
+ name: `${prefix}SpreadsheetImport`
54
+ },
55
+ {
56
+ filePath: `${runtimeDir}/spreadsheet/components/spreadsheet-import-root.vue`,
57
+ global: options.global,
58
+ name: `${prefix}SpreadsheetImportRoot`
59
+ },
60
+ ...[
61
+ "Dropzone",
62
+ "FileCard",
63
+ "SourceSettings",
64
+ "ExpectedColumns",
65
+ "TemplateButton",
66
+ "ColumnMapping",
67
+ "ValueMapping",
68
+ "Table",
69
+ "TableToolbar",
70
+ "RowInspector",
71
+ "Stats",
72
+ "Stat",
73
+ "ExportButton",
74
+ "SubmitButton",
75
+ "Summary",
76
+ "Progress"
77
+ ].map((part) => ({
78
+ filePath: `${runtimeDir}/spreadsheet/components/parts/spreadsheet-import-${toKebabCase(part)}.vue`,
79
+ global: options.global,
80
+ name: `${prefix}SpreadsheetImport${part}`
81
+ })),
82
+ ...["Stepper", "Step", "StepNav"].map((part) => ({
83
+ filePath: `${runtimeDir}/spreadsheet/components/steps/spreadsheet-import-${toKebabCase(part)}.vue`,
84
+ global: options.global,
85
+ name: `${prefix}SpreadsheetImport${part}`
86
+ })),
49
87
  // Dashboard
50
88
  ...[
51
89
  "Grid",
@@ -174,6 +212,13 @@ function setupImports(runtimeDir) {
174
212
  { from: "table", name: "tableSource" },
175
213
  { from: "table", name: "useTable" }
176
214
  ]),
215
+ // Spreadsheet
216
+ ...withRuntime(runtimeDir, [
217
+ { from: "spreadsheet", name: "defineSpreadsheetSchema" },
218
+ { from: "spreadsheet", name: "spreadsheetSteps" },
219
+ { from: "spreadsheet", name: "useSpreadsheetImport" },
220
+ { from: "spreadsheet", name: "useSpreadsheetSteps" }
221
+ ]),
177
222
  // Dashboard
178
223
  ...withRuntime(runtimeDir, [
179
224
  { from: "dashboard", name: "defineDashboardSchema" },
@@ -377,6 +422,7 @@ const publicRuntimeDomains = [
377
422
  "query-prefetch",
378
423
  "query-state",
379
424
  "shared",
425
+ "spreadsheet",
380
426
  "table"
381
427
  ];
382
428
  const require$1 = createRequire(import.meta.url);
@@ -1,7 +1,7 @@
1
1
  import type { LazyTextValue } from '#ui-tools/shared/types/utils';
2
2
  import type { DashboardBlockBaseProps, DashboardBlockUi, DashboardSeriesColor, DashboardSourceLike, DashboardStatUi, DashboardStatus, DashboardValueFormat } from '../types/index.js';
3
3
  declare const __VLS_export: <TData>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
4
- props: import("vue").PublicProps & __VLS_PrettifyLocal<Omit<DashboardBlockBaseProps, "ui" | "title" | "subtitle"> & {
4
+ props: import("vue").PublicProps & __VLS_PrettifyLocal<Omit<DashboardBlockBaseProps, "title" | "ui" | "subtitle"> & {
5
5
  source: DashboardSourceLike<TData>;
6
6
  /** KPI label, shown above the value. */
7
7
  label: LazyTextValue;
@@ -1,7 +1,7 @@
1
1
  import type { LazyTextValue } from '#ui-tools/shared/types/utils';
2
2
  import type { DashboardBlockBaseProps, DashboardBlockUi, DashboardSeriesColor, DashboardSourceLike, DashboardStatUi, DashboardStatus, DashboardValueFormat } from '../types/index.js';
3
3
  declare const __VLS_export: <TData>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
4
- props: import("vue").PublicProps & __VLS_PrettifyLocal<Omit<DashboardBlockBaseProps, "ui" | "title" | "subtitle"> & {
4
+ props: import("vue").PublicProps & __VLS_PrettifyLocal<Omit<DashboardBlockBaseProps, "title" | "ui" | "subtitle"> & {
5
5
  source: DashboardSourceLike<TData>;
6
6
  /** KPI label, shown above the value. */
7
7
  label: LazyTextValue;
@@ -17,13 +17,13 @@ type __VLS_Slots = {} & {
17
17
  default?: (props: typeof __VLS_64) => any;
18
18
  };
19
19
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
20
- ready: (details: readonly FilePreviewDetail[]) => any;
21
20
  previous: () => any;
21
+ ready: (details: readonly FilePreviewDetail[]) => any;
22
22
  download: () => any;
23
23
  next: () => any;
24
24
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
25
- onReady?: ((details: readonly FilePreviewDetail[]) => any) | undefined;
26
25
  onPrevious?: (() => any) | undefined;
26
+ onReady?: ((details: readonly FilePreviewDetail[]) => any) | undefined;
27
27
  onDownload?: (() => any) | undefined;
28
28
  onNext?: (() => any) | undefined;
29
29
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
@@ -17,13 +17,13 @@ type __VLS_Slots = {} & {
17
17
  default?: (props: typeof __VLS_64) => any;
18
18
  };
19
19
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
20
- ready: (details: readonly FilePreviewDetail[]) => any;
21
20
  previous: () => any;
21
+ ready: (details: readonly FilePreviewDetail[]) => any;
22
22
  download: () => any;
23
23
  next: () => any;
24
24
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
25
- onReady?: ((details: readonly FilePreviewDetail[]) => any) | undefined;
26
25
  onPrevious?: (() => any) | undefined;
26
+ onReady?: ((details: readonly FilePreviewDetail[]) => any) | undefined;
27
27
  onDownload?: (() => any) | undefined;
28
28
  onNext?: (() => any) | undefined;
29
29
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
@@ -41,6 +41,7 @@ const {
41
41
  itemPath,
42
42
  itemRenderKey,
43
43
  items,
44
+ removeItemLabel,
44
45
  runCustomAction,
45
46
  t,
46
47
  title,
@@ -229,7 +230,7 @@ function bodyId(index) {
229
230
  variant="ghost"
230
231
  size="xs"
231
232
  :class="ui?.action"
232
- :aria-label="t('form.fields.array.removeItem')"
233
+ :aria-label="removeItemLabel(item, index)"
233
234
  @click="removeItem(index)"
234
235
  />
235
236
  <UButton
@@ -43,6 +43,7 @@ const {
43
43
  itemPath,
44
44
  itemRenderKey,
45
45
  items,
46
+ removeItemLabel,
46
47
  runCustomAction,
47
48
  t,
48
49
  title,
@@ -230,7 +231,7 @@ function updateDraggedItems(value) {
230
231
  variant="ghost"
231
232
  size="xs"
232
233
  :class="ui?.action"
233
- :aria-label="t('form.fields.array.removeItem')"
234
+ :aria-label="removeItemLabel(item, index)"
234
235
  @click.stop="removeItem(index)"
235
236
  />
236
237
  </div>
@@ -291,76 +292,84 @@ function updateDraggedItems(value) {
291
292
  handle=".array-drag-handle"
292
293
  :animation="150"
293
294
  >
294
- <div
295
- v-for="(item, index) in items"
296
- :key="itemRenderKey(item, index)"
297
- :class="[
295
+ <TransitionGroup
296
+ enter-active-class="transition duration-200 ease-out motion-reduce:transition-none"
297
+ enter-from-class="translate-y-1 opacity-0"
298
+ leave-active-class="transition duration-150 ease-in motion-reduce:transition-none"
299
+ leave-to-class="scale-[0.98] opacity-0"
300
+ >
301
+ <div
302
+ v-for="(item, index) in items"
303
+ :key="itemRenderKey(item, index)"
304
+ :class="[
298
305
  mergeFormUiClass('grid rounded-lg border border-default bg-default', ui?.item),
299
306
  fieldProps.compact ? 'gap-3 p-3' : 'gap-4 p-4'
300
307
  ]"
301
- >
302
- <div :class="mergeFormUiClass('flex items-center justify-between gap-3', ui?.itemHeader)">
303
- <span
304
- :class="mergeFormUiClass('text-sm font-medium text-highlighted', ui?.itemTitle)"
305
- :data-form-array-heading="index"
306
- >
307
- {{ itemHeading(items[index] ?? {}, index) }}
308
- </span>
309
- <div :class="mergeFormUiClass('flex items-center gap-1', ui?.itemActions)">
310
- <UButton
311
- v-if="isDraggable"
312
- icon="i-lucide-grip-vertical"
313
- color="neutral"
314
- variant="ghost"
315
- size="xs"
316
- :class="mergeFormUiClass('array-drag-handle cursor-grab', ui?.action)"
317
- :aria-label="t('form.fields.array.dragItem')"
318
- />
319
- <UButton
320
- v-if="canDelete(index)"
321
- icon="i-lucide-trash-2"
322
- color="neutral"
323
- variant="ghost"
324
- size="xs"
325
- :class="ui?.action"
326
- :aria-label="t('form.fields.array.removeItem')"
327
- @click="removeItem(index)"
328
- />
329
- <UButton
330
- v-for="(action, actionIndex) in field.actions?.custom ?? []"
331
- v-show="customActionVisible(index, actionIndex)"
332
- :key="actionIndex"
333
- :icon="action.icon"
334
- color="neutral"
335
- variant="ghost"
336
- size="xs"
337
- :class="ui?.action"
338
- @click="runCustomAction(index, actionIndex)"
308
+ :data-form-array-item="index"
309
+ >
310
+ <div :class="mergeFormUiClass('flex items-center justify-between gap-3', ui?.itemHeader)">
311
+ <span
312
+ :class="mergeFormUiClass('text-sm font-medium text-highlighted', ui?.itemTitle)"
313
+ :data-form-array-heading="index"
339
314
  >
340
- {{ resolveFormText(action.label) }}
341
- </UButton>
315
+ {{ itemHeading(items[index] ?? {}, index) }}
316
+ </span>
317
+ <div :class="mergeFormUiClass('flex items-center gap-1', ui?.itemActions)">
318
+ <UButton
319
+ v-if="isDraggable"
320
+ icon="i-lucide-grip-vertical"
321
+ color="neutral"
322
+ variant="ghost"
323
+ size="xs"
324
+ :class="mergeFormUiClass('array-drag-handle cursor-grab', ui?.action)"
325
+ :aria-label="t('form.fields.array.dragItem')"
326
+ />
327
+ <UButton
328
+ v-if="canDelete(index)"
329
+ icon="i-lucide-trash-2"
330
+ color="neutral"
331
+ variant="ghost"
332
+ size="xs"
333
+ :class="ui?.action"
334
+ :aria-label="removeItemLabel(items[index] ?? {}, index)"
335
+ @click="removeItem(index)"
336
+ />
337
+ <UButton
338
+ v-for="(action, actionIndex) in field.actions?.custom ?? []"
339
+ v-show="customActionVisible(index, actionIndex)"
340
+ :key="actionIndex"
341
+ :icon="action.icon"
342
+ color="neutral"
343
+ variant="ghost"
344
+ size="xs"
345
+ :class="ui?.action"
346
+ @click="runCustomAction(index, actionIndex)"
347
+ >
348
+ {{ resolveFormText(action.label) }}
349
+ </UButton>
350
+ </div>
342
351
  </div>
343
- </div>
344
-
345
- <USelect
346
- v-if="field.type === 'array-variant'"
347
- :model-value="variantValue(items[index])"
348
- :items="variantItems"
349
- value-key="value"
350
- :size="formUi.controlSize.value"
351
- :class="mergeFormUiClass('w-full max-w-xs', ui?.variant)"
352
- @update:model-value="updateVariant(index, $event)"
353
- />
354
352
 
355
- <div :class="mergeFormUiClass('grid', ui?.fields)" :style="containerLayout.style.value">
356
- <FormFieldRenderer
357
- v-for="child in fieldsForItem(items[index] ?? {})"
358
- :key="child.key"
359
- :field="child"
360
- :parent-path="itemPath(index)"
353
+ <USelect
354
+ v-if="field.type === 'array-variant'"
355
+ :model-value="variantValue(items[index])"
356
+ :items="variantItems"
357
+ value-key="value"
358
+ :size="formUi.controlSize.value"
359
+ :class="mergeFormUiClass('w-full max-w-xs', ui?.variant)"
360
+ @update:model-value="updateVariant(index, $event)"
361
361
  />
362
+
363
+ <div :class="mergeFormUiClass('grid', ui?.fields)" :style="containerLayout.style.value">
364
+ <FormFieldRenderer
365
+ v-for="child in fieldsForItem(items[index] ?? {})"
366
+ :key="child.key"
367
+ :field="child"
368
+ :parent-path="itemPath(index)"
369
+ />
370
+ </div>
362
371
  </div>
363
- </div>
372
+ </TransitionGroup>
364
373
  </component>
365
374
 
366
375
  <UButton
@@ -42,6 +42,7 @@ export declare function useFormArrayItems(field: () => FormArrayItemsField, path
42
42
  itemRenderKey: (item: FormObject, index: number) => string;
43
43
  items: import("vue").ComputedRef<readonly import("../../../shared/index.js").GenericObject[]>;
44
44
  removeItem: (index: number) => boolean;
45
+ removeItemLabel: (item: FormObject, index: number) => string;
45
46
  resolveAction: (action: FormArrayAction | undefined, index: number) => (import("./types.js").FormArrayActionCondition<{}, {}> | undefined) & boolean;
46
47
  runCustomAction: (index: number, actionIndex: number) => Promise<void>;
47
48
  t: import("../../../i18n/index.js").UiToolsTranslator;
@@ -106,6 +106,9 @@ export function useFormArrayItems(field, path) {
106
106
  function itemHeading(item, index) {
107
107
  return resolveFormText(field().headerTemplate?.(item, index, actionParams(index).deps)) ?? `${itemLabel.value} ${index + 1}`;
108
108
  }
109
+ function removeItemLabel(item, index) {
110
+ return t("form.fields.array.removeNamedItem", { item: itemHeading(item, index) });
111
+ }
109
112
  function resolveAction(action, index) {
110
113
  const condition = isArrayActionConfig(action) ? action.condition : action;
111
114
  if (isBoolean(condition)) {
@@ -239,6 +242,7 @@ export function useFormArrayItems(field, path) {
239
242
  itemRenderKey,
240
243
  items,
241
244
  removeItem,
245
+ removeItemLabel,
242
246
  resolveAction,
243
247
  runCustomAction,
244
248
  t,
@@ -41,6 +41,7 @@ const {
41
41
  itemRenderKey,
42
42
  items,
43
43
  removeItem,
44
+ removeItemLabel,
44
45
  runCustomAction,
45
46
  t,
46
47
  title,
@@ -208,7 +209,7 @@ function fieldLabel(field) {
208
209
  variant="ghost"
209
210
  size="xs"
210
211
  :class="ui?.action"
211
- :aria-label="t('form.fields.array.removeItem')"
212
+ :aria-label="removeItemLabel(item, index)"
212
213
  @click="removeItem(index)"
213
214
  />
214
215
  <UButton
@@ -1,4 +1,4 @@
1
- import type { NestedPaths } from '../../shared/types/utils.js';
1
+ import type { DecrementDepth } from '../../shared/types/utils.js';
2
2
  import type { FormValue } from './/index.js';
3
3
  import type { FormContextData } from './context.js';
4
4
  import type { FormMaybePromise, FormObject } from './utils.js';
@@ -170,10 +170,17 @@ export interface FormFieldApi<TValue = FormValue, TOption = FormValue, TContext
170
170
  /** Focuses the mounted control for this field when it has a focusable input. */
171
171
  focus: () => Promise<boolean>;
172
172
  }
173
+ /**
174
+ * Dot path into submitted output. Array items are addressed by index (`contacts.0.email`); the
175
+ * unindexed form (`contacts.email`) stays accepted.
176
+ */
177
+ type FormOutputPath<T, MaxDepth extends number = 10> = [MaxDepth] extends [0] ? never : T extends readonly (infer TItem)[] ? `${number}` | `${number}.${FormOutputPath<TItem, DecrementDepth<MaxDepth>>}` | FormOutputPath<TItem, DecrementDepth<MaxDepth>> : T extends object ? {
178
+ [K in keyof T & string]: `${K}` | `${K}.${FormOutputPath<T[K], DecrementDepth<MaxDepth>>}`;
179
+ }[keyof T & string] : never;
173
180
  /**
174
181
  * Public form API available from form-level callbacks.
175
182
  */
176
- export type FormFieldPath<TOutput = FormObject> = TOutput extends FormObject ? FormObject extends TOutput ? string : NestedPaths<TOutput> : string;
183
+ export type FormFieldPath<TOutput = FormObject> = TOutput extends FormObject ? FormObject extends TOutput ? string : FormOutputPath<TOutput> : string;
177
184
  export interface FormApi<TOutput = FormObject> {
178
185
  /** Reads an internal form value by raw path. */
179
186
  get: (path: string) => FormValue;
@@ -212,3 +219,4 @@ export interface FormSubmitHandlerResult<TSubmitData = FormValue> {
212
219
  success: boolean;
213
220
  data?: TSubmitData;
214
221
  }
222
+ export {};