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,302 @@
1
+ <script setup>
2
+ import UIcon from "@nuxt/ui/components/Icon.vue";
3
+ import { useVirtualizer } from "@tanstack/vue-virtual";
4
+ import { computed, shallowRef, useTemplateRef } from "vue";
5
+ import { useUiToolsLocale } from "#ui-tools/i18n";
6
+ import { useSpreadsheetImporter } from "../../composables/use-spreadsheet-import-context";
7
+ import SpreadsheetImportCellEditor from "../internal/spreadsheet-import-cell-editor.vue";
8
+ import SpreadsheetImportStatusBadge from "../internal/spreadsheet-import-status-badge.vue";
9
+ const ROW_HEIGHT = 38;
10
+ const VIRTUALIZE_FROM = 150;
11
+ const props = defineProps({
12
+ importer: { type: Object, required: false },
13
+ height: { type: String, required: false, default: "30rem" },
14
+ fields: { type: Array, required: false, default: void 0 },
15
+ editable: { type: Boolean, required: false, default: true },
16
+ selectable: { type: Boolean, required: false, default: true }
17
+ });
18
+ defineSlots();
19
+ const importer = useSpreadsheetImporter(() => props.importer);
20
+ const { t } = useUiToolsLocale();
21
+ const scroller = useTemplateRef("scroller");
22
+ const editing = shallowRef(null);
23
+ const columns = computed(() => {
24
+ const all = importer.value.columns.fields;
25
+ if (!props.fields) return all;
26
+ return props.fields.flatMap((path) => all.filter((field) => field.path === path));
27
+ });
28
+ const rows = computed(() => importer.value.review.visible);
29
+ function choicesOf(row, field) {
30
+ return field.kind === "select" ? importer.value.rows.cell(row.index, field.path).choices.map((option) => option.label) : void 0;
31
+ }
32
+ const virtualized = computed(() => rows.value.length > VIRTUALIZE_FROM);
33
+ const virtualizer = useVirtualizer(
34
+ computed(() => ({
35
+ count: virtualized.value ? rows.value.length : 0,
36
+ estimateSize: () => ROW_HEIGHT,
37
+ getItemKey: (index) => rows.value[index]?.index ?? index,
38
+ getScrollElement: () => scroller.value,
39
+ initialRect: { height: 480, width: 1200 },
40
+ overscan: 12
41
+ }))
42
+ );
43
+ const items = computed(
44
+ () => virtualized.value ? virtualizer.value.getVirtualItems().map((item) => item.index) : rows.value.map((_, index) => index)
45
+ );
46
+ const padTop = computed(
47
+ () => virtualized.value ? virtualizer.value.getVirtualItems()[0]?.start ?? 0 : 0
48
+ );
49
+ const padBottom = computed(
50
+ () => virtualized.value ? virtualizer.value.getTotalSize() - (virtualizer.value.getVirtualItems().at(-1)?.end ?? 0) : 0
51
+ );
52
+ const allSelected = computed(
53
+ () => rows.value.length > 0 && rows.value.every((row) => importer.value.review.selection.has(row.index))
54
+ );
55
+ function rowOf(position) {
56
+ return rows.value[position];
57
+ }
58
+ function cellOf(row, field) {
59
+ return importer.value.rows.cell(row.index, field.path);
60
+ }
61
+ function isEditing(row, field) {
62
+ return editing.value?.index === row.index && editing.value.field === field.path;
63
+ }
64
+ function edit(row, field) {
65
+ if (props.editable && !row.discardReason && !isEditing(row, field))
66
+ editing.value = { field: field.path, index: row.index };
67
+ }
68
+ function commit(row, field, text, move) {
69
+ if (text !== importer.value.rows.cell(row.index, field.path).text)
70
+ importer.value.rows.edit(row.index, field.path, text);
71
+ if (!move) {
72
+ editing.value = null;
73
+ return;
74
+ }
75
+ const next = columns.value[columns.value.findIndex((column) => column.path === field.path) + move];
76
+ editing.value = next ? { field: next.path, index: row.index } : null;
77
+ }
78
+ function cellClass(row, field) {
79
+ const cell = cellOf(row, field);
80
+ const level = cell.issue?.level;
81
+ if (isEditing(row, field)) return "bg-default ring-2 ring-inset ring-primary";
82
+ return [
83
+ level === "error" ? "bg-error/8 text-error ring-1 ring-inset ring-error/40" : "",
84
+ level === "warning" ? "bg-warning/8 text-warning ring-1 ring-inset ring-warning/35" : "",
85
+ cell.stored !== null && !level ? "bg-info/6" : "",
86
+ row.discardReason ? "text-dimmed" : "",
87
+ props.editable && !row.discardReason ? "cursor-text hover:ring-1 hover:ring-inset hover:ring-accented" : ""
88
+ ];
89
+ }
90
+ function rowBar(row) {
91
+ if (row.index === importer.value.review.inspected?.index)
92
+ return "shadow-[inset_3px_0_0_var(--ui-primary)]";
93
+ if (row.status === "blocking") return "shadow-[inset_3px_0_0_var(--ui-error)]";
94
+ if (row.status === "warning") return "shadow-[inset_3px_0_0_var(--ui-warning)]";
95
+ return "";
96
+ }
97
+ function toggleRow(index, event) {
98
+ if (event.target instanceof HTMLInputElement)
99
+ importer.value.review.select([index], event.target.checked);
100
+ }
101
+ function toggleAll(event) {
102
+ if (event.target instanceof HTMLInputElement)
103
+ importer.value.review.select(
104
+ rows.value.map((row) => row.index),
105
+ event.target.checked
106
+ );
107
+ }
108
+ function filterField(field) {
109
+ importer.value.review.setIssue(`${field.path}|*`);
110
+ }
111
+ function sourceOf(field) {
112
+ if (field.header) return field.header.text;
113
+ if (field.status === "default") return t("spreadsheet.table.defaulted");
114
+ return "\u2014";
115
+ }
116
+ </script>
117
+
118
+ <template>
119
+ <div
120
+ ref="scroller"
121
+ data-spreadsheet-table
122
+ class="relative min-w-0 overflow-auto bg-default"
123
+ :style="{ height }"
124
+ >
125
+ <table class="w-full min-w-max border-separate border-spacing-0 text-[13px]">
126
+ <thead>
127
+ <tr>
128
+ <th
129
+ class="sticky top-0 left-0 z-30 border-e border-b border-default bg-elevated px-3 py-2 text-start text-xs font-medium text-muted"
130
+ >
131
+ <span class="flex items-center gap-2.5">
132
+ <input
133
+ v-if="selectable"
134
+ type="checkbox"
135
+ class="size-4 accent-primary"
136
+ :checked="allSelected"
137
+ :aria-label="t('spreadsheet.table.selectAll')"
138
+ @change="toggleAll"
139
+ />
140
+ {{ t("spreadsheet.table.row") }}
141
+ </span>
142
+ </th>
143
+ <th
144
+ v-for="field in columns"
145
+ :key="field.path"
146
+ class="sticky top-0 z-20 border-b border-default bg-elevated px-3 py-2 text-start align-bottom font-medium whitespace-nowrap"
147
+ >
148
+ <span class="flex items-center gap-1.5 text-xs text-toned">
149
+ <span v-if="field.group" class="font-normal text-dimmed"
150
+ >{{ field.group.label }} ·</span
151
+ >
152
+ {{ field.label }}
153
+ <button
154
+ v-if="importer.review.fieldIssues.get(field.path)"
155
+ type="button"
156
+ class="h-4.5 min-w-4.5 rounded-full px-1.5 text-[11px] leading-[18px] font-bold tabular-nums"
157
+ :class="
158
+ importer.review.fieldIssues.get(field.path)?.level === 'error' ? 'bg-error text-inverted' : 'bg-warning/15 text-warning ring-1 ring-warning ring-inset'
159
+ "
160
+ @click="filterField(field)"
161
+ >
162
+ {{ importer.review.fieldIssues.get(field.path)?.rowCount }}
163
+ </button>
164
+ </span>
165
+ <span class="block max-w-52 truncate text-[11px] font-normal text-dimmed">{{
166
+ sourceOf(field)
167
+ }}</span>
168
+ </th>
169
+ </tr>
170
+ </thead>
171
+ <tbody>
172
+ <tr v-if="padTop" aria-hidden="true">
173
+ <td :colspan="columns.length + 1" :style="{ height: `${padTop}px` }" />
174
+ </tr>
175
+ <template v-for="position in items" :key="rowOf(position)?.index">
176
+ <tr
177
+ v-if="rowOf(position)"
178
+ :data-spreadsheet-row="rowOf(position).index"
179
+ :data-status="rowOf(position).status"
180
+ :class="
181
+ rowOf(position).index === importer.review.inspected?.index ? 'bg-primary/6' : ''
182
+ "
183
+ >
184
+ <td
185
+ class="sticky left-0 z-10 border-e border-b border-default bg-default px-3"
186
+ :class="rowBar(rowOf(position))"
187
+ :style="{ height: `${ROW_HEIGHT}px` }"
188
+ >
189
+ <span class="flex items-center gap-2">
190
+ <input
191
+ v-if="selectable"
192
+ type="checkbox"
193
+ class="size-4 accent-primary"
194
+ :checked="importer.review.selection.has(rowOf(position).index)"
195
+ :aria-label="
196
+ t('spreadsheet.table.selectRow', { row: rowOf(position).rowNumber })
197
+ "
198
+ @change="(event) => toggleRow(rowOf(position).index, event)"
199
+ />
200
+ <button
201
+ type="button"
202
+ data-spreadsheet-inspect
203
+ class="flex items-center gap-1.5 rounded-md px-1 py-0.5 hover:bg-accented"
204
+ :title="t('spreadsheet.table.inspectRow', { row: rowOf(position).rowNumber })"
205
+ @click="importer.review.inspect(rowOf(position).index)"
206
+ >
207
+ <span class="min-w-7 text-end font-mono text-[11.5px] text-dimmed tabular-nums">{{
208
+ rowOf(position).rowNumber
209
+ }}</span>
210
+ <SpreadsheetImportStatusBadge
211
+ :status="rowOf(position).status"
212
+ :count="rowOf(position).errors.length || rowOf(position).warnings.length"
213
+ />
214
+ <UIcon
215
+ v-if="rowOf(position).mode === 'update' && !rowOf(position).discardReason"
216
+ name="i-lucide-refresh-cw"
217
+ class="size-3.5 text-info"
218
+ :title="t('spreadsheet.table.modeUpdate')"
219
+ />
220
+ </button>
221
+ </span>
222
+ </td>
223
+ <td
224
+ v-for="field in columns"
225
+ :key="field.path"
226
+ :data-spreadsheet-cell="field.path"
227
+ class="relative max-w-72 border-b border-default p-0 whitespace-nowrap"
228
+ :class="cellClass(rowOf(position), field)"
229
+ :title="
230
+ cellOf(rowOf(position), field).issue?.message ?? (cellOf(rowOf(position), field).stored !== null ? t('spreadsheet.table.stored', {
231
+ value: cellOf(rowOf(position), field).stored ?? ''
232
+ }) : void 0)
233
+ "
234
+ @click="edit(rowOf(position), field)"
235
+ >
236
+ <div
237
+ class="flex h-[37px] items-center"
238
+ :class="isEditing(rowOf(position), field) ? '' : 'px-3'"
239
+ >
240
+ <SpreadsheetImportCellEditor
241
+ v-if="isEditing(rowOf(position), field)"
242
+ :text="cellOf(rowOf(position), field).text"
243
+ :choices="choicesOf(rowOf(position), field)"
244
+ @commit="(text, move) => commit(rowOf(position), field, text, move)"
245
+ @cancel="editing = null"
246
+ />
247
+ <slot
248
+ v-else
249
+ name="cell"
250
+ :row="rowOf(position)"
251
+ :field="field"
252
+ :cell="cellOf(rowOf(position), field)"
253
+ >
254
+ <span class="flex min-w-0 items-center gap-1.5">
255
+ <UIcon
256
+ v-if="cellOf(rowOf(position), field).issue?.level === 'error'"
257
+ name="i-lucide-circle-x"
258
+ class="size-3.5 shrink-0"
259
+ />
260
+ <UIcon
261
+ v-else-if="cellOf(rowOf(position), field).issue?.level === 'warning'"
262
+ name="i-lucide-triangle-alert"
263
+ class="size-3.5 shrink-0"
264
+ />
265
+ <span
266
+ class="truncate"
267
+ :class="{
268
+ 'italic opacity-60': !cellOf(rowOf(position), field).display,
269
+ 'text-info': cellOf(rowOf(position), field).defaulted,
270
+ 'line-through decoration-dimmed': rowOf(position).discardReason
271
+ }"
272
+ >
273
+ {{
274
+ cellOf(rowOf(position), field).display || cellOf(rowOf(position), field).text || t("spreadsheet.table.emptyCell")
275
+ }}
276
+ </span>
277
+ <span
278
+ v-if="cellOf(rowOf(position), field).created"
279
+ class="shrink-0 rounded bg-primary/10 px-1 text-[10.5px] leading-4 font-semibold text-primary"
280
+ >
281
+ {{ t("spreadsheet.table.created") }}
282
+ </span>
283
+ </span>
284
+ </slot>
285
+ </div>
286
+ <span
287
+ v-if="cellOf(rowOf(position), field).edited"
288
+ class="absolute top-0 right-0 size-0 border-t-[9px] border-l-[9px] border-t-primary border-l-transparent"
289
+ />
290
+ </td>
291
+ </tr>
292
+ </template>
293
+ <tr v-if="padBottom > 0" aria-hidden="true">
294
+ <td :colspan="columns.length + 1" :style="{ height: `${padBottom}px` }" />
295
+ </tr>
296
+ </tbody>
297
+ </table>
298
+ <p v-if="!rows.length" class="px-6 py-16 text-center text-sm text-muted">
299
+ {{ t("spreadsheet.table.empty") }}
300
+ </p>
301
+ </div>
302
+ </template>
@@ -0,0 +1,33 @@
1
+ import type { SpreadsheetCellView, SpreadsheetFieldState, SpreadsheetImporter, SpreadsheetRecord, SpreadsheetRow } from '../../types/index.js';
2
+ type __VLS_Props = {
3
+ importer?: SpreadsheetImporter;
4
+ /** Height of the scrolling area. */
5
+ height?: string;
6
+ /** Field paths to show, in order. Defaults to every field. */
7
+ fields?: readonly string[];
8
+ /** Cells can be edited. Defaults to `true`. */
9
+ editable?: boolean;
10
+ /** Rows can be selected. Defaults to `true`. */
11
+ selectable?: boolean;
12
+ };
13
+ type __VLS_Slots = {
14
+ cell?: (props: {
15
+ row: SpreadsheetRow<SpreadsheetRecord, unknown>;
16
+ field: SpreadsheetFieldState;
17
+ cell: SpreadsheetCellView;
18
+ }) => unknown;
19
+ };
20
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
21
+ height: string;
22
+ selectable: boolean;
23
+ fields: readonly string[];
24
+ editable: boolean;
25
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
26
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
27
+ declare const _default: typeof __VLS_export;
28
+ export default _default;
29
+ type __VLS_WithSlots<T, S> = T & {
30
+ new (): {
31
+ $slots: S;
32
+ };
33
+ };
@@ -1,8 +1,9 @@
1
- import type { SpreadsheetStepItem } from '../types.js';
1
+ import type { SpreadsheetImporter } from '../../types/index.js';
2
2
  type __VLS_Props = {
3
- title: string;
4
- description?: string;
5
- items: SpreadsheetStepItem[];
3
+ importer?: SpreadsheetImporter;
4
+ label?: string;
5
+ /** File name, without extension. Defaults to the schema key. */
6
+ filename?: string;
6
7
  };
7
8
  declare const __VLS_export: 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>;
8
9
  declare const _default: typeof __VLS_export;
@@ -0,0 +1,31 @@
1
+ <script setup>
2
+ import UButton from "@nuxt/ui/components/Button.vue";
3
+ import { useUiToolsLocale } from "#ui-tools/i18n";
4
+ import { useSpreadsheetImporter } from "../../composables/use-spreadsheet-import-context";
5
+ import { downloadSpreadsheetBlob } from "../../utils";
6
+ const props = defineProps({
7
+ importer: { type: Object, required: false },
8
+ label: { type: String, required: false },
9
+ filename: { type: String, required: false }
10
+ });
11
+ const importer = useSpreadsheetImporter(() => props.importer);
12
+ const { t } = useUiToolsLocale();
13
+ function download() {
14
+ downloadSpreadsheetBlob(
15
+ importer.value.template(),
16
+ `${props.filename ?? importer.value.schema.key}.xlsx`
17
+ );
18
+ }
19
+ </script>
20
+
21
+ <template>
22
+ <UButton
23
+ data-spreadsheet-template
24
+ color="neutral"
25
+ variant="ghost"
26
+ size="sm"
27
+ icon="i-lucide-download"
28
+ :label="label ?? t('spreadsheet.file.template')"
29
+ @click="download"
30
+ />
31
+ </template>
@@ -1,8 +1,9 @@
1
- import type { SpreadsheetStepItem } from '../types.js';
1
+ import type { SpreadsheetImporter } from '../../types/index.js';
2
2
  type __VLS_Props = {
3
- title: string;
4
- description?: string;
5
- items: SpreadsheetStepItem[];
3
+ importer?: SpreadsheetImporter;
4
+ label?: string;
5
+ /** File name, without extension. Defaults to the schema key. */
6
+ filename?: string;
6
7
  };
7
8
  declare const __VLS_export: 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>;
8
9
  declare const _default: typeof __VLS_export;
@@ -0,0 +1,27 @@
1
+ import type { SpreadsheetImporter, SpreadsheetRecognizedValue, SpreadsheetValueAnswer, SpreadsheetValueQuestion } from '../../types/index.js';
2
+ type __VLS_Props = {
3
+ importer?: SpreadsheetImporter;
4
+ /** `open`: only values without an answer; renders nothing when there are none. */
5
+ only?: 'open';
6
+ /** Hides the values found in the lists. */
7
+ noRecognized?: boolean;
8
+ };
9
+ type __VLS_Slots = {
10
+ default?: (props: {
11
+ questions: readonly SpreadsheetValueQuestion[];
12
+ recognized: readonly SpreadsheetRecognizedValue[];
13
+ answer: (question: SpreadsheetValueQuestion, answer: SpreadsheetValueAnswer) => void;
14
+ }) => unknown;
15
+ question?: (props: {
16
+ question: SpreadsheetValueQuestion;
17
+ }) => unknown;
18
+ };
19
+ 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>;
20
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
21
+ declare const _default: typeof __VLS_export;
22
+ export default _default;
23
+ type __VLS_WithSlots<T, S> = T & {
24
+ new (): {
25
+ $slots: S;
26
+ };
27
+ };
@@ -0,0 +1,162 @@
1
+ <script setup>
2
+ import UIcon from "@nuxt/ui/components/Icon.vue";
3
+ import { computed, shallowRef } from "vue";
4
+ import { useUiToolsLocale } from "#ui-tools/i18n";
5
+ import { useSpreadsheetImporter } from "../../composables/use-spreadsheet-import-context";
6
+ import SpreadsheetImportValueRow from "../internal/spreadsheet-import-value-row.vue";
7
+ const props = defineProps({
8
+ importer: { type: Object, required: false },
9
+ only: { type: String, required: false },
10
+ noRecognized: { type: Boolean, required: false }
11
+ });
12
+ defineSlots();
13
+ const importer = useSpreadsheetImporter(() => props.importer);
14
+ const { t } = useUiToolsLocale();
15
+ const showRecognized = shallowRef(false);
16
+ const questions = computed(
17
+ () => props.only === "open" ? importer.value.values.open : importer.value.values.questions
18
+ );
19
+ function scopeLabel(scope) {
20
+ const conditions = scope.dependsOn.map(
21
+ (entry) => t("spreadsheet.values.condition", { label: entry.label, values: entry.values.join(", ") })
22
+ ).join(" \xB7 ");
23
+ return conditions ? t("spreadsheet.values.scope", { conditions }) : "";
24
+ }
25
+ const groups = computed(() => {
26
+ const list = [];
27
+ for (const question of questions.value) {
28
+ let group = list.find((entry) => entry.field === question.field);
29
+ if (!group) {
30
+ group = {
31
+ field: question.field,
32
+ header: question.header,
33
+ label: question.fieldLabel,
34
+ scopes: []
35
+ };
36
+ list.push(group);
37
+ }
38
+ const id = question.scope?.id ?? "";
39
+ const scope = group.scopes.find((entry) => entry.id === id);
40
+ if (scope) scope.questions.push(question);
41
+ else
42
+ group.scopes.push({
43
+ id,
44
+ label: question.scope ? scopeLabel(question.scope) : "",
45
+ questions: [question]
46
+ });
47
+ }
48
+ return list;
49
+ });
50
+ const labels = computed(
51
+ () => new Map(importer.value.columns.fields.map((field) => [field.path, field.label]))
52
+ );
53
+ function answer(question, value) {
54
+ importer.value.values.answer(question, value);
55
+ }
56
+ function search(field) {
57
+ return (text) => importer.value.values.search(field, text);
58
+ }
59
+ </script>
60
+
61
+ <template>
62
+ <div
63
+ v-if="importer.file.loaded && (only !== 'open' || questions.length)"
64
+ data-spreadsheet-value-mapping
65
+ class="grid gap-5"
66
+ >
67
+ <slot :questions="questions" :recognized="importer.values.recognized" :answer="answer">
68
+ <p v-if="importer.values.loading" class="flex items-center gap-2 text-sm text-muted">
69
+ <span
70
+ class="size-3.5 animate-spin rounded-full border-2 border-accented border-t-primary"
71
+ />
72
+ {{ t("spreadsheet.values.loading") }}
73
+ </p>
74
+ <section v-for="group in groups" :key="group.field" class="grid gap-2">
75
+ <div class="flex flex-wrap items-baseline gap-x-2">
76
+ <h4 class="text-[11px] font-semibold tracking-[0.08em] text-dimmed uppercase">
77
+ {{ group.label }}
78
+ </h4>
79
+ <span v-if="group.header" class="text-xs text-dimmed">· « {{ group.header }} »</span>
80
+ </div>
81
+ <div
82
+ class="divide-y divide-default overflow-hidden rounded-xl border border-default bg-default"
83
+ >
84
+ <div
85
+ class="hidden grid-cols-[minmax(0,1fr)_4.5rem_minmax(0,1.15fr)_6.5rem] gap-x-4 bg-elevated/50 px-4 py-2 text-[11.5px] font-medium text-muted sm:grid"
86
+ >
87
+ <span>{{ t("spreadsheet.values.value") }}</span>
88
+ <span>{{ t("spreadsheet.values.rows") }}</span>
89
+ <span>{{ t("spreadsheet.values.answer") }}</span>
90
+ <span />
91
+ </div>
92
+ <template v-for="scope in group.scopes" :key="scope.id">
93
+ <div
94
+ v-if="scope.label"
95
+ data-spreadsheet-value-scope
96
+ class="flex items-center gap-2 bg-elevated/30 px-4 py-1.5 text-xs font-medium text-toned"
97
+ >
98
+ <UIcon name="i-lucide-split" class="size-3.5 shrink-0 text-dimmed" />
99
+ <span class="truncate">{{ scope.label }}</span>
100
+ </div>
101
+ <template v-for="question in scope.questions" :key="question.id">
102
+ <slot name="question" :question="question">
103
+ <SpreadsheetImportValueRow
104
+ :question="question"
105
+ :choices="question.choices"
106
+ :search="search(question.field)"
107
+ @answer="(value2) => answer(question, value2)"
108
+ />
109
+ </slot>
110
+ </template>
111
+ </template>
112
+ </div>
113
+ </section>
114
+ <div
115
+ v-if="!groups.length && only !== 'open'"
116
+ class="flex items-center gap-3 rounded-xl border border-default bg-default px-4 py-3.5"
117
+ >
118
+ <span
119
+ class="grid size-8 shrink-0 place-items-center rounded-full bg-success/10 text-success"
120
+ >
121
+ <UIcon name="i-lucide-check" class="size-4" />
122
+ </span>
123
+ <span class="font-medium text-highlighted">{{ t("spreadsheet.values.nothing") }}</span>
124
+ </div>
125
+ <div
126
+ v-if="!noRecognized && only !== 'open' && importer.values.recognized.length"
127
+ class="overflow-hidden rounded-xl border border-default bg-default"
128
+ >
129
+ <button
130
+ type="button"
131
+ class="flex w-full items-center gap-2 px-4 py-3 text-start text-sm font-medium text-toned hover:bg-elevated/60"
132
+ :aria-expanded="showRecognized"
133
+ @click="showRecognized = !showRecognized"
134
+ >
135
+ <UIcon
136
+ name="i-lucide-chevron-right"
137
+ class="size-4 text-dimmed transition-transform"
138
+ :class="showRecognized ? 'rotate-90' : ''"
139
+ />
140
+ {{ t("spreadsheet.values.recognized", { count: importer.values.recognized.length }) }}
141
+ </button>
142
+ <ul v-if="showRecognized" class="divide-y divide-default border-t border-default">
143
+ <li
144
+ v-for="value in importer.values.recognized"
145
+ :key="`${value.field}::${value.scope ?? ''}::${value.value}`"
146
+ class="grid grid-cols-[minmax(0,1fr)_auto] items-center gap-x-4 gap-y-0.5 px-4 py-2.5 text-sm sm:grid-cols-[minmax(0,10rem)_minmax(0,1fr)_minmax(0,1fr)_auto]"
147
+ >
148
+ <span class="truncate text-xs text-dimmed">{{ labels.get(value.field) }}</span>
149
+ <span class="truncate font-medium text-highlighted">{{ value.value }}</span>
150
+ <span class="flex min-w-0 items-center gap-1.5 text-muted">
151
+ <UIcon name="i-lucide-arrow-right" class="size-3.5 shrink-0 text-dimmed" />
152
+ <span class="truncate">{{ value.option.label }}</span>
153
+ </span>
154
+ <span class="text-xs text-dimmed tabular-nums">{{
155
+ t("spreadsheet.values.rowCount", { count: value.rows.length })
156
+ }}</span>
157
+ </li>
158
+ </ul>
159
+ </div>
160
+ </slot>
161
+ </div>
162
+ </template>
@@ -0,0 +1,27 @@
1
+ import type { SpreadsheetImporter, SpreadsheetRecognizedValue, SpreadsheetValueAnswer, SpreadsheetValueQuestion } from '../../types/index.js';
2
+ type __VLS_Props = {
3
+ importer?: SpreadsheetImporter;
4
+ /** `open`: only values without an answer; renders nothing when there are none. */
5
+ only?: 'open';
6
+ /** Hides the values found in the lists. */
7
+ noRecognized?: boolean;
8
+ };
9
+ type __VLS_Slots = {
10
+ default?: (props: {
11
+ questions: readonly SpreadsheetValueQuestion[];
12
+ recognized: readonly SpreadsheetRecognizedValue[];
13
+ answer: (question: SpreadsheetValueQuestion, answer: SpreadsheetValueAnswer) => void;
14
+ }) => unknown;
15
+ question?: (props: {
16
+ question: SpreadsheetValueQuestion;
17
+ }) => unknown;
18
+ };
19
+ 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>;
20
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
21
+ declare const _default: typeof __VLS_export;
22
+ export default _default;
23
+ type __VLS_WithSlots<T, S> = T & {
24
+ new (): {
25
+ $slots: S;
26
+ };
27
+ };
@@ -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
+ };
@@ -0,0 +1,23 @@
1
+ <script setup>
2
+ import { computed } from "vue";
3
+ import { provideUiToolsLocale, useUiToolsLocaleRef } from "#ui-tools/i18n";
4
+ import { provideSpreadsheetImport } from "../composables/use-spreadsheet-import-context";
5
+ const props = defineProps({
6
+ importer: { type: Object, required: true },
7
+ steps: { type: Object, required: false },
8
+ locale: { type: Object, required: false }
9
+ });
10
+ provideUiToolsLocale(useUiToolsLocaleRef(computed(() => props.locale)));
11
+ provideSpreadsheetImport({
12
+ get importer() {
13
+ return props.importer;
14
+ },
15
+ get steps() {
16
+ return props.steps ?? null;
17
+ }
18
+ });
19
+ </script>
20
+
21
+ <template>
22
+ <slot />
23
+ </template>