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
@@ -0,0 +1,24 @@
1
+ import type { UiToolsLocale, UiToolsMessages } from '#ui-tools/i18n';
2
+ import type { SpreadsheetImporter, SpreadsheetSteps } from '../types/index.js';
3
+ /**
4
+ * Provides an importer (and its steps, for a wizard) to every `SpreadsheetImport*` part inside.
5
+ * Renders nothing of its own.
6
+ */
7
+ type __VLS_Props = {
8
+ importer: SpreadsheetImporter;
9
+ steps?: SpreadsheetSteps;
10
+ locale?: UiToolsLocale<UiToolsMessages>;
11
+ };
12
+ declare var __VLS_1: {};
13
+ type __VLS_Slots = {} & {
14
+ default?: (props: typeof __VLS_1) => any;
15
+ };
16
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
17
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
18
+ declare const _default: typeof __VLS_export;
19
+ export default _default;
20
+ type __VLS_WithSlots<T, S> = T & {
21
+ new (): {
22
+ $slots: S;
23
+ };
24
+ };
@@ -1,18 +1,33 @@
1
1
  import type { UiToolsLocale, UiToolsMessages } from '#ui-tools/i18n';
2
- import type { SpreadsheetComponentApi } from './types.js';
2
+ import type { SpreadsheetImporter, SpreadsheetStep } from '../types/index.js';
3
+ /**
4
+ * A ready-made import wizard built from the public parts: file, columns and values when needed,
5
+ * review, and import. Pass `steps` to reorder them or add your own; a slot named after a step key
6
+ * replaces its content.
7
+ */
3
8
  type __VLS_Props = {
4
- spreadsheet: SpreadsheetComponentApi;
9
+ importer: SpreadsheetImporter;
10
+ steps?: readonly SpreadsheetStep[];
5
11
  title?: string;
6
- description?: string;
7
- onDownloadTemplate?: () => void;
8
12
  closable?: boolean;
9
- mode?: 'inline' | 'fullscreen';
10
13
  locale?: UiToolsLocale<UiToolsMessages>;
11
14
  };
12
- declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
15
+ declare var __VLS_28: string, __VLS_29: {
16
+ step: import("../types/index.js").SpreadsheetStepStatus;
17
+ };
18
+ type __VLS_Slots = {} & {
19
+ [K in NonNullable<typeof __VLS_28>]?: (props: typeof __VLS_29) => any;
20
+ };
21
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
13
22
  close: () => any;
14
23
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
15
24
  onClose?: (() => any) | undefined;
16
25
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
26
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
17
27
  declare const _default: typeof __VLS_export;
18
28
  export default _default;
29
+ type __VLS_WithSlots<T, S> = T & {
30
+ new (): {
31
+ $slots: S;
32
+ };
33
+ };
@@ -1,277 +1,61 @@
1
1
  <script setup>
2
- import { computed, ref, nextTick, watch } from "vue";
3
- import { provideUiToolsLocale, useUiToolsLocale, useUiToolsLocaleRef } from "#ui-tools/i18n";
4
- import { isNumber, isObject } from "#ui-tools/shared";
5
- import { resolveTextValue } from "#ui-tools/shared/utils/render";
6
- import { useSpreadsheetView } from "../composables/use-spreadsheet-view";
7
- import SpreadsheetImportFileBar from "./layout/spreadsheet-import-file-bar.vue";
8
- import SpreadsheetImportFooter from "./layout/spreadsheet-import-footer.vue";
9
- import SpreadsheetImportHeader from "./layout/spreadsheet-import-header.vue";
10
- import SpreadsheetImportSidebar from "./layout/spreadsheet-import-sidebar.vue";
11
- import SpreadsheetImportMatchingStep from "./steps/spreadsheet-import-matching-step.vue";
12
- import SpreadsheetImportReferencesStep from "./steps/spreadsheet-import-references-step.vue";
13
- import SpreadsheetImportReviewStep from "./steps/spreadsheet-import-review-step.vue";
14
- import SpreadsheetImportStructureStep from "./steps/spreadsheet-import-structure-step.vue";
15
- import SpreadsheetImportUploadStep from "./steps/spreadsheet-import-upload-step.vue";
2
+ import UButton from "@nuxt/ui/components/Button.vue";
3
+ import { useUiToolsLocale } from "#ui-tools/i18n";
4
+ import { useSpreadsheetSteps } from "../composables/use-spreadsheet-steps";
5
+ import SpreadsheetImportRoot from "./spreadsheet-import-root.vue";
6
+ import SpreadsheetImportStepNav from "./steps/spreadsheet-import-step-nav.vue";
7
+ import SpreadsheetImportStep from "./steps/spreadsheet-import-step.vue";
8
+ import SpreadsheetImportStepper from "./steps/spreadsheet-import-stepper.vue";
16
9
  const props = defineProps({
17
- spreadsheet: { type: Object, required: true },
10
+ importer: { type: Object, required: true },
11
+ steps: { type: Array, required: false },
18
12
  title: { type: String, required: false },
19
- description: { type: String, required: false },
20
- onDownloadTemplate: { type: Function, required: false },
21
13
  closable: { type: Boolean, required: false },
22
- mode: { type: String, required: false },
23
14
  locale: { type: Object, required: false }
24
15
  });
25
- const locale = useUiToolsLocaleRef(computed(() => props.locale));
26
- provideUiToolsLocale(locale);
27
- const { t } = useUiToolsLocale(locale);
28
16
  const emit = defineEmits(["close"]);
29
- const view = useSpreadsheetView({
30
- hasReferences: () => props.spreadsheet.referenceResolutions.value.length > 0,
31
- stepConfig: () => props.spreadsheet.schema.value.steps,
32
- t
33
- });
34
- const workspaceTitle = computed(
35
- () => props.title ?? humanizeKey(props.spreadsheet.schema.value.importKey)
36
- );
37
- const workspaceDescription = computed(() => props.description);
38
- const { activeStep, activeStepIndex, steps, goToPrevStep, goToNextStep } = view;
39
- const currentStep = computed(
40
- () => steps.value.find((step) => step.value === activeStep.value) ?? steps.value[0]
41
- );
42
- const stageTitle = computed(() => {
43
- if (activeStep.value === "upload") {
44
- return resolveTextValue(
45
- props.spreadsheet.schema.value.steps?.upload?.title,
46
- t("spreadsheet.steps.upload.stageTitle")
47
- );
48
- }
49
- if (activeStep.value === "structure") {
50
- return resolveTextValue(
51
- props.spreadsheet.schema.value.steps?.structure?.title,
52
- t("spreadsheet.steps.structure.stageTitle")
53
- );
54
- }
55
- return currentStep.value?.title ?? humanizeKey(props.spreadsheet.schema.value.importKey);
56
- });
57
- const stageDescription = computed(() => currentStep.value?.description ?? "");
58
- const renderMode = computed(() => props.mode ?? "inline");
59
- const isFullscreen = computed(() => renderMode.value === "fullscreen");
60
- const isClosable = computed(() => props.closable ?? false);
61
- const isPreparingNextStep = ref(false);
62
- const hasWorkbook = computed(() => Boolean(props.spreadsheet.workbook.value));
63
- const hasHeaders = computed(() => props.spreadsheet.headers.value.length > 0);
64
- function getSchemaMaxRecords(schema) {
65
- if ("file" in schema && schema.file && isObject(schema.file) && "maxRecords" in schema.file) {
66
- return isNumber(schema.file.maxRecords) ? schema.file.maxRecords : void 0;
67
- }
68
- if ("source" in schema && schema.source && isObject(schema.source) && "maxRecords" in schema.source) {
69
- return isNumber(schema.source.maxRecords) ? schema.source.maxRecords : void 0;
70
- }
71
- return void 0;
72
- }
73
- const canGoNext = computed(() => {
74
- if (activeStep.value === "upload") {
75
- return hasWorkbook.value;
76
- }
77
- if (activeStep.value === "structure") {
78
- return hasWorkbook.value && hasHeaders.value;
79
- }
80
- if (activeStep.value === "matching") {
81
- return hasWorkbook.value && hasHeaders.value;
82
- }
83
- if (activeStep.value === "references") {
84
- return hasWorkbook.value && hasHeaders.value;
85
- }
86
- return false;
87
- });
88
- const fileName = computed(() => props.spreadsheet.workbook.value?.fileName);
89
- const maxRecords = computed(() => getSchemaMaxRecords(props.spreadsheet.schema.value) ?? Infinity);
90
- const importableRowCount = computed(
91
- () => Math.min(props.spreadsheet.rowSummary.value.totalRows, maxRecords.value)
92
- );
93
- const overflowRowCount = computed(
94
- () => Math.max(props.spreadsheet.rowSummary.value.totalRows - importableRowCount.value, 0)
95
- );
96
- const sidebarItems = computed(
97
- () => steps.value.map((step, index) => ({
98
- ...step,
99
- disabled: step.value !== "upload" && !hasWorkbook.value,
100
- status: index < activeStepIndex.value ? "done" : step.value === activeStep.value ? "active" : "pending"
101
- }))
102
- );
103
- function humanizeKey(value) {
104
- return value.split(".").at(-1)?.replaceAll(/([a-z0-9])([A-Z])/gu, "$1 $2").replaceAll(/[_-]+/gu, " ").replaceAll(/\b\w/gu, (char) => char.toUpperCase()) ?? value;
105
- }
106
- const actionHint = computed(() => {
107
- if (activeStep.value === "structure") {
108
- return t("spreadsheet.common.clickToChangeHeaderRow");
109
- }
110
- if (activeStep.value === "references") {
111
- return t("spreadsheet.common.referencesStepHint");
112
- }
113
- return void 0;
114
- });
115
- const primaryActionLabel = computed(() => {
116
- if (activeStep.value === "review") {
117
- return t("spreadsheet.common.importRows", { count: importableRowCount.value });
118
- }
119
- return t("spreadsheet.common.continue");
120
- });
121
- const primaryActionColor = computed(
122
- () => activeStep.value === "review" ? "success" : "primary"
123
- );
124
- const primaryActionBusyLabel = computed(() => t("spreadsheet.common.preparingReview"));
125
- function getNextStepValue() {
126
- return steps.value[activeStepIndex.value + 1]?.value;
127
- }
128
- function waitForPaint() {
129
- return new Promise(
130
- (resolve) => requestAnimationFrame(() => requestAnimationFrame(() => resolve()))
131
- );
132
- }
133
- async function handlePrimaryAction() {
134
- if (activeStep.value === "review") {
135
- void props.spreadsheet.refresh();
136
- return;
137
- }
138
- if (!canGoNext.value) {
139
- return;
140
- }
141
- const nextStep = getNextStepValue();
142
- if (nextStep === "review") {
143
- isPreparingNextStep.value = true;
144
- await nextTick();
145
- await waitForPaint();
146
- }
147
- goToNextStep();
148
- if (nextStep === "review") {
149
- await nextTick();
150
- isPreparingNextStep.value = false;
151
- }
152
- }
153
- function handleClose() {
154
- emit("close");
155
- }
156
- watch(hasWorkbook, (nextHasWorkbook) => {
157
- if (!nextHasWorkbook) {
158
- return;
159
- }
160
- if (activeStep.value !== "upload") {
161
- return;
162
- }
163
- goToNextStep();
164
- });
17
+ const { t } = useUiToolsLocale();
18
+ const wizard = useSpreadsheetSteps(props.importer, props.steps);
165
19
  </script>
166
20
 
167
21
  <template>
168
- <div
169
- class="grid h-full overflow-hidden bg-default lg:grid-cols-[320px_minmax(0,1fr)]"
170
- :class="
171
- isFullscreen ? 'min-h-full' : 'min-h-[44rem] rounded-[var(--ui-radius)] border border-default/70 shadow-sm'
172
- "
173
- >
174
- <SpreadsheetImportSidebar
175
- :title="workspaceTitle"
176
- :description="workspaceDescription"
177
- :items="sidebarItems"
178
- />
179
-
180
- <div class="grid min-h-0 grid-rows-[minmax(0,1fr)_auto] bg-default">
181
- <div
182
- class="relative min-h-0"
183
- :class="
184
- activeStep === 'matching' || activeStep === 'review' ? 'overflow-hidden' : 'overflow-y-auto'
185
- "
186
- >
187
- <div
188
- v-if="isPreparingNextStep"
189
- class="absolute inset-0 z-10 flex items-center justify-center bg-default/72 backdrop-blur-sm"
190
- >
191
- <div
192
- class="flex items-center gap-3 rounded-[var(--ui-radius)] border border-default/70 bg-default px-4 py-3 shadow-sm"
193
- >
194
- <div
195
- class="size-4 animate-spin rounded-full border-2 border-default border-t-primary"
196
- />
197
- <div class="grid gap-0.5">
198
- <span class="text-sm font-medium text-highlighted">{{ primaryActionBusyLabel }}</span>
199
- <span class="text-xs text-muted">{{
200
- t("spreadsheet.common.preparingReviewDescription")
201
- }}</span>
202
- </div>
203
- </div>
204
- </div>
205
-
206
- <div
207
- class="grid px-6 py-5 lg:px-10 lg:py-6"
208
- :class="
209
- activeStep === 'matching' || activeStep === 'review' ? 'h-full grid-rows-[auto_minmax(0,1fr)] gap-4' : 'gap-4'
210
- "
211
- >
212
- <div class="grid gap-3" :class="activeStep === 'upload' ? '' : 'pb-2'">
213
- <SpreadsheetImportHeader
214
- :title="stageTitle"
215
- :description="stageDescription"
216
- :closable="isClosable"
217
- @close="handleClose"
218
- />
219
-
220
- <SpreadsheetImportFileBar
221
- v-if="activeStep !== 'upload'"
222
- :file-name="fileName"
223
- :total-sheets="spreadsheet.workbook.value?.sheets.length ?? 0"
224
- :row-count="spreadsheet.rows.value.length"
225
- :has-workbook="hasWorkbook"
226
- />
227
- </div>
228
-
229
- <SpreadsheetImportUploadStep
230
- v-if="activeStep === 'upload'"
231
- :spreadsheet="spreadsheet"
232
- :on-download-template="onDownloadTemplate"
22
+ <SpreadsheetImportRoot :importer="importer" :steps="wizard" :locale="locale">
23
+ <div
24
+ data-spreadsheet-import
25
+ class="grid min-w-0 overflow-hidden rounded-xl border border-default bg-default"
26
+ >
27
+ <div class="grid gap-5 px-5 pt-5 sm:px-7">
28
+ <div class="flex min-w-0 items-center gap-3">
29
+ <h2 class="truncate text-base font-semibold text-highlighted">
30
+ {{ title ?? t("spreadsheet.steps.submit") }}
31
+ </h2>
32
+ <span v-if="importer.file.name" class="hidden truncate text-sm text-muted sm:inline">{{
33
+ importer.file.name
34
+ }}</span>
35
+ <UButton
36
+ v-if="closable"
37
+ class="ms-auto"
38
+ color="neutral"
39
+ variant="ghost"
40
+ size="sm"
41
+ square
42
+ icon="i-lucide-x"
43
+ :aria-label="t('spreadsheet.nav.close')"
44
+ @click="emit('close')"
233
45
  />
234
-
235
- <SpreadsheetImportStructureStep
236
- v-else-if="activeStep === 'structure'"
237
- :spreadsheet="spreadsheet"
238
- />
239
-
240
- <SpreadsheetImportMatchingStep
241
- v-else-if="activeStep === 'matching'"
242
- :spreadsheet="spreadsheet"
243
- />
244
-
245
- <SpreadsheetImportReferencesStep
246
- v-else-if="activeStep === 'references'"
247
- :spreadsheet="spreadsheet"
248
- />
249
-
250
- <SpreadsheetImportReviewStep v-else :spreadsheet="spreadsheet" />
251
46
  </div>
47
+ <SpreadsheetImportStepper />
48
+ </div>
49
+ <div class="min-w-0 px-5 py-6 sm:px-7">
50
+ <SpreadsheetImportStep headings>
51
+ <template v-for="(_, name) in $slots" #[name]="scope">
52
+ <slot :name="name" v-bind="scope" />
53
+ </template>
54
+ </SpreadsheetImportStep>
55
+ </div>
56
+ <div class="border-t border-default bg-elevated/40 px-5 py-4 sm:px-7">
57
+ <SpreadsheetImportStepNav :closable="closable" @close="emit('close')" />
252
58
  </div>
253
-
254
- <SpreadsheetImportFooter
255
- v-if="activeStep !== 'upload'"
256
- :hint="actionHint"
257
- :show-previous="activeStep !== 'upload'"
258
- :previous-label="t('spreadsheet.common.previous')"
259
- :primary-label="primaryActionLabel"
260
- :primary-disabled="activeStep !== 'review' && !canGoNext"
261
- :primary-loading="isPreparingNextStep"
262
- :primary-color="primaryActionColor"
263
- :primary-icon="activeStep === 'review' ? 'i-lucide-check' : 'i-lucide-arrow-right'"
264
- :show-export="activeStep === 'review' && overflowRowCount > 0"
265
- :export-label="t('spreadsheet.common.exportDiscardedRows', { count: overflowRowCount })"
266
- :meta-text="
267
- t('spreadsheet.common.importSummary', {
268
- importable: importableRowCount,
269
- total: spreadsheet.rowSummary.value.totalRows
270
- })
271
- "
272
- @previous="goToPrevStep"
273
- @primary="handlePrimaryAction"
274
- />
275
59
  </div>
276
- </div>
60
+ </SpreadsheetImportRoot>
277
61
  </template>
@@ -1,18 +1,33 @@
1
1
  import type { UiToolsLocale, UiToolsMessages } from '#ui-tools/i18n';
2
- import type { SpreadsheetComponentApi } from './types.js';
2
+ import type { SpreadsheetImporter, SpreadsheetStep } from '../types/index.js';
3
+ /**
4
+ * A ready-made import wizard built from the public parts: file, columns and values when needed,
5
+ * review, and import. Pass `steps` to reorder them or add your own; a slot named after a step key
6
+ * replaces its content.
7
+ */
3
8
  type __VLS_Props = {
4
- spreadsheet: SpreadsheetComponentApi;
9
+ importer: SpreadsheetImporter;
10
+ steps?: readonly SpreadsheetStep[];
5
11
  title?: string;
6
- description?: string;
7
- onDownloadTemplate?: () => void;
8
12
  closable?: boolean;
9
- mode?: 'inline' | 'fullscreen';
10
13
  locale?: UiToolsLocale<UiToolsMessages>;
11
14
  };
12
- declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
15
+ declare var __VLS_28: string, __VLS_29: {
16
+ step: import("../types/index.js").SpreadsheetStepStatus;
17
+ };
18
+ type __VLS_Slots = {} & {
19
+ [K in NonNullable<typeof __VLS_28>]?: (props: typeof __VLS_29) => any;
20
+ };
21
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
13
22
  close: () => any;
14
23
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
15
24
  onClose?: (() => any) | undefined;
16
25
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
26
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
17
27
  declare const _default: typeof __VLS_export;
18
28
  export default _default;
29
+ type __VLS_WithSlots<T, S> = T & {
30
+ new (): {
31
+ $slots: S;
32
+ };
33
+ };
@@ -1,6 +1,10 @@
1
+ import type { SpreadsheetImporter, SpreadsheetSteps } from '../../types/index.js';
1
2
  type __VLS_Props = {
2
- title: string;
3
- description?: string;
3
+ importer?: SpreadsheetImporter;
4
+ steps?: SpreadsheetSteps;
5
+ /** Page the Cancel button of the first step goes to. */
6
+ cancelTo?: string;
7
+ /** Shows Cancel on the first step and Close after the import, emitting `close`. */
4
8
  closable?: boolean;
5
9
  };
6
10
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
@@ -0,0 +1,116 @@
1
+ <script setup>
2
+ import UButton from "@nuxt/ui/components/Button.vue";
3
+ import { computed } from "vue";
4
+ import { useUiToolsLocale } from "#ui-tools/i18n";
5
+ import {
6
+ useSpreadsheetImporter,
7
+ useSpreadsheetStepsContext
8
+ } from "../../composables/use-spreadsheet-import-context";
9
+ import SpreadsheetImportSubmitButton from "../parts/spreadsheet-import-submit-button.vue";
10
+ const props = defineProps({
11
+ importer: { type: Object, required: false },
12
+ steps: { type: Object, required: false },
13
+ cancelTo: { type: String, required: false },
14
+ closable: { type: Boolean, required: false }
15
+ });
16
+ const emit = defineEmits(["close"]);
17
+ const importer = useSpreadsheetImporter(() => props.importer);
18
+ const steps = useSpreadsheetStepsContext(() => props.steps);
19
+ const { t } = useUiToolsLocale();
20
+ const step = computed(() => steps.value?.step ?? null);
21
+ const submitting = computed(() => step.value?.builtIn === "submit");
22
+ const status = computed(() => importer.value.submit.status);
23
+ const hint = computed(() => {
24
+ const current = step.value;
25
+ if (!current) return { blocking: false, text: "" };
26
+ if (current.builtIn === "file" && !importer.value.file.loaded)
27
+ return { blocking: false, text: t("spreadsheet.nav.blockers.file") };
28
+ if (current.builtIn === "columns" && current.blockers)
29
+ return {
30
+ blocking: true,
31
+ text: t("spreadsheet.nav.blockers.columns", { count: current.blockers })
32
+ };
33
+ if (current.builtIn === "values" && current.blockers)
34
+ return {
35
+ blocking: true,
36
+ text: t("spreadsheet.nav.blockers.values", { count: current.blockers })
37
+ };
38
+ if (current.builtIn === "review") {
39
+ if (!importer.value.readiness.importable)
40
+ return { blocking: true, text: t("spreadsheet.nav.blockers.review") };
41
+ const invalid = importer.value.readiness.invalidRows;
42
+ return {
43
+ blocking: false,
44
+ text: invalid ? t("spreadsheet.nav.blockers.invalid", { count: invalid }) : ""
45
+ };
46
+ }
47
+ return { blocking: false, text: "" };
48
+ });
49
+ function next() {
50
+ steps.value?.next();
51
+ }
52
+ function back() {
53
+ steps.value?.back();
54
+ }
55
+ function another() {
56
+ importer.value.reset();
57
+ steps.value?.reset();
58
+ }
59
+ </script>
60
+
61
+ <template>
62
+ <div v-if="steps" data-spreadsheet-step-nav class="flex flex-wrap items-center gap-x-3 gap-y-2">
63
+ <UButton
64
+ v-if="steps.canBack && status !== 'running' && status !== 'done'"
65
+ color="neutral"
66
+ variant="outline"
67
+ icon="i-lucide-arrow-left"
68
+ :label="t('spreadsheet.nav.back')"
69
+ @click="back"
70
+ />
71
+ <UButton
72
+ v-else-if="!steps.canBack && cancelTo"
73
+ color="neutral"
74
+ variant="ghost"
75
+ :to="cancelTo"
76
+ :label="t('spreadsheet.nav.cancel')"
77
+ />
78
+ <UButton
79
+ v-else-if="!steps.canBack && closable"
80
+ color="neutral"
81
+ variant="ghost"
82
+ :label="t('spreadsheet.nav.cancel')"
83
+ @click="emit('close')"
84
+ />
85
+ <span
86
+ v-if="hint.text"
87
+ class="order-last basis-full text-sm sm:order-none sm:ms-auto sm:basis-auto sm:text-end"
88
+ :class="hint.blocking ? 'font-medium text-error' : 'text-muted'"
89
+ >
90
+ {{ hint.text }}
91
+ </span>
92
+ <div class="ms-auto flex gap-2" :class="hint.text ? 'sm:ms-0' : ''">
93
+ <template v-if="submitting">
94
+ <SpreadsheetImportSubmitButton v-if="status === 'idle' || status === 'running'" />
95
+ <template v-else-if="status === 'done'">
96
+ <UButton
97
+ color="neutral"
98
+ variant="outline"
99
+ :label="t('spreadsheet.nav.another')"
100
+ @click="another"
101
+ />
102
+ <UButton v-if="closable" :label="t('spreadsheet.nav.close')" @click="emit('close')" />
103
+ <UButton v-else-if="cancelTo" :to="cancelTo" :label="t('spreadsheet.nav.close')" />
104
+ </template>
105
+ </template>
106
+ <UButton
107
+ v-else
108
+ data-spreadsheet-next
109
+ trailing-icon="i-lucide-arrow-right"
110
+ :label="t('spreadsheet.nav.continue')"
111
+ :disabled="!steps.canNext"
112
+ @click="next"
113
+ />
114
+ </div>
115
+ </div>
116
+ </template>
@@ -1,6 +1,10 @@
1
+ import type { SpreadsheetImporter, SpreadsheetSteps } from '../../types/index.js';
1
2
  type __VLS_Props = {
2
- title: string;
3
- description?: string;
3
+ importer?: SpreadsheetImporter;
4
+ steps?: SpreadsheetSteps;
5
+ /** Page the Cancel button of the first step goes to. */
6
+ cancelTo?: string;
7
+ /** Shows Cancel on the first step and Close after the import, emitting `close`. */
4
8
  closable?: boolean;
5
9
  };
6
10
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
@@ -0,0 +1,26 @@
1
+ import type { SpreadsheetImporter, SpreadsheetSteps } from '../../types/index.js';
2
+ /**
3
+ * The current step. A slot named after the step key replaces its content; built-in steps
4
+ * otherwise render their default parts.
5
+ */
6
+ type __VLS_Props = {
7
+ importer?: SpreadsheetImporter;
8
+ steps?: SpreadsheetSteps;
9
+ /** Shows the built-in title and description above the default content. */
10
+ headings?: boolean;
11
+ };
12
+ declare var __VLS_2: string, __VLS_3: {
13
+ step: import("../../types/index.js").SpreadsheetStepStatus;
14
+ };
15
+ type __VLS_Slots = {} & {
16
+ [K in NonNullable<typeof __VLS_2>]?: (props: typeof __VLS_3) => any;
17
+ };
18
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
19
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
20
+ declare const _default: typeof __VLS_export;
21
+ export default _default;
22
+ type __VLS_WithSlots<T, S> = T & {
23
+ new (): {
24
+ $slots: S;
25
+ };
26
+ };