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,276 @@
1
+ <script setup>
2
+ import UButton from "@nuxt/ui/components/Button.vue";
3
+ import UIcon from "@nuxt/ui/components/Icon.vue";
4
+ import { computed, shallowRef } from "vue";
5
+ import { useUiToolsLocale } from "#ui-tools/i18n";
6
+ import {
7
+ useSpreadsheetImporter,
8
+ useSpreadsheetStepsContext
9
+ } from "../../composables/use-spreadsheet-import-context";
10
+ import SpreadsheetImportCellEditor from "../internal/spreadsheet-import-cell-editor.vue";
11
+ import SpreadsheetImportStatusBadge from "../internal/spreadsheet-import-status-badge.vue";
12
+ const LEVELS = ["info", "warning", "error"];
13
+ const props = defineProps({
14
+ importer: { type: Object, required: false, default: void 0 },
15
+ height: { type: String, required: false, default: "30rem" }
16
+ });
17
+ defineSlots();
18
+ const importer = useSpreadsheetImporter(() => props.importer);
19
+ const steps = useSpreadsheetStepsContext();
20
+ const { t } = useUiToolsLocale();
21
+ const editing = shallowRef(null);
22
+ const row = computed(() => importer.value.review.inspected);
23
+ const fields = computed(() => importer.value.columns.fields);
24
+ const labels = computed(() => new Map(fields.value.map((field) => [field.path, field.label])));
25
+ const issues = computed(
26
+ () => [...row.value?.issues ?? []].filter((issue) => issue.code !== "value.skipped").sort((left, right) => LEVELS.indexOf(right.level) - LEVELS.indexOf(left.level))
27
+ );
28
+ const counts = computed(
29
+ () => new Map(importer.value.review.issueTypes.map((type) => [type.id, type.rowCount]))
30
+ );
31
+ const position = computed(() => importer.value.review.position);
32
+ function choicesOf(path) {
33
+ const field = fields.value.find((entry) => entry.path === path);
34
+ return field?.kind === "select" && row.value ? importer.value.rows.cell(row.value.index, path).choices.map((option) => option.label) : void 0;
35
+ }
36
+ function commit(path, text) {
37
+ const current = row.value;
38
+ if (current && text !== importer.value.rows.cell(current.index, path).text)
39
+ importer.value.rows.edit(current.index, path, text);
40
+ editing.value = null;
41
+ }
42
+ function revert(path) {
43
+ if (row.value) importer.value.rows.revert(row.value.index, path);
44
+ }
45
+ function filterIssue(issue) {
46
+ importer.value.review.setIssue(`${issue.field}|${issue.code}`);
47
+ }
48
+ function toggleDiscard() {
49
+ const current = row.value;
50
+ if (!current) return;
51
+ if (current.discardReason === "manual") importer.value.rows.restore([current.index]);
52
+ else importer.value.rows.discard([current.index]);
53
+ }
54
+ function openValues() {
55
+ steps.value?.goTo("values");
56
+ }
57
+ </script>
58
+
59
+ <template>
60
+ <aside
61
+ v-if="row"
62
+ data-spreadsheet-inspector
63
+ class="flex min-w-0 flex-col bg-default"
64
+ :style="{ height }"
65
+ :aria-label="t('spreadsheet.inspector.title', { row: row.rowNumber })"
66
+ >
67
+ <div class="flex items-center gap-2.5 border-b border-default px-4 py-3">
68
+ <b class="text-[15px] font-semibold text-highlighted tabular-nums">{{
69
+ t("spreadsheet.inspector.title", { row: row.rowNumber })
70
+ }}</b>
71
+ <SpreadsheetImportStatusBadge :status="row.status" full />
72
+ <span
73
+ v-if="row.mode === 'update' && !row.discardReason"
74
+ class="inline-flex h-5 items-center gap-1 rounded-md bg-info/10 px-1.5 text-[11.5px] font-semibold text-info"
75
+ >
76
+ <UIcon name="i-lucide-refresh-cw" class="size-3" />{{ t("spreadsheet.table.modeUpdate") }}
77
+ </span>
78
+ <UButton
79
+ class="ms-auto"
80
+ size="sm"
81
+ color="neutral"
82
+ variant="ghost"
83
+ square
84
+ icon="i-lucide-x"
85
+ :aria-label="t('spreadsheet.inspector.close')"
86
+ @click="importer.review.inspect(null)"
87
+ />
88
+ </div>
89
+ <div
90
+ class="flex items-center justify-between gap-2 border-b border-default px-4 py-2 text-[12.5px] text-muted"
91
+ >
92
+ <UButton
93
+ size="xs"
94
+ color="neutral"
95
+ variant="outline"
96
+ square
97
+ icon="i-lucide-chevron-left"
98
+ :disabled="position.current <= 1"
99
+ :aria-label="t('spreadsheet.inspector.previous')"
100
+ @click="importer.review.previous()"
101
+ />
102
+ <span class="tabular-nums">
103
+ {{
104
+ position.current ? t("spreadsheet.inspector.position", {
105
+ current: position.current,
106
+ total: position.total
107
+ }) : t("spreadsheet.inspector.positionNone", { total: position.total })
108
+ }}
109
+ </span>
110
+ <UButton
111
+ size="xs"
112
+ color="neutral"
113
+ variant="outline"
114
+ square
115
+ icon="i-lucide-chevron-right"
116
+ :disabled="position.current >= position.total"
117
+ :aria-label="t('spreadsheet.inspector.next')"
118
+ @click="importer.review.next()"
119
+ />
120
+ </div>
121
+
122
+ <div class="grid flex-1 content-start gap-4 overflow-auto px-4 pt-3.5 pb-4">
123
+ <p
124
+ v-if="row.discardReason"
125
+ class="flex items-center gap-2 rounded-lg bg-elevated px-3 py-2 text-[13px] text-muted"
126
+ >
127
+ <UIcon name="i-lucide-ban" class="size-4 shrink-0" />{{
128
+ t(`spreadsheet.table.reasons.${row.discardReason}`)
129
+ }}
130
+ </p>
131
+ <section class="grid gap-2">
132
+ <h5 class="text-[11px] font-semibold tracking-[0.08em] text-dimmed uppercase">
133
+ {{ t("spreadsheet.inspector.issues") }}
134
+ </h5>
135
+ <template v-if="issues.length">
136
+ <div
137
+ v-for="(issue, index) in issues"
138
+ :key="`${issue.field}-${issue.code}-${index}`"
139
+ class="grid gap-1.5 rounded-lg border px-3 py-2.5"
140
+ :class="
141
+ issue.level === 'error' ? 'border-error/30 bg-error/4' : issue.level === 'warning' ? 'border-warning/30 bg-warning/4' : 'border-default'
142
+ "
143
+ >
144
+ <slot name="issue" :issue="issue">
145
+ <div class="flex items-start gap-2">
146
+ <UIcon
147
+ :name="issue.level === 'error' ? 'i-lucide-circle-x' : 'i-lucide-triangle-alert'"
148
+ class="mt-0.5 size-4 shrink-0"
149
+ :class="issue.level === 'error' ? 'text-error' : 'text-warning'"
150
+ />
151
+ <div class="grid min-w-0 gap-0.5">
152
+ <span v-if="issue.field" class="text-xs font-semibold text-toned">{{
153
+ labels.get(issue.field) ?? issue.field
154
+ }}</span>
155
+ <span class="text-[13px] text-highlighted">{{ issue.message }}</span>
156
+ </div>
157
+ </div>
158
+ <div class="flex flex-wrap gap-x-3 ps-6">
159
+ <UButton
160
+ v-if="steps && issue.code === 'value.unknown'"
161
+ variant="link"
162
+ size="xs"
163
+ class="px-0"
164
+ :label="t('spreadsheet.inspector.answerIt')"
165
+ @click="openValues"
166
+ />
167
+ <UButton
168
+ v-if="issue.field && (counts.get(`${issue.field}|${issue.code}`) ?? 0) > 1"
169
+ variant="link"
170
+ color="neutral"
171
+ size="xs"
172
+ class="px-0"
173
+ :label="
174
+ t('spreadsheet.inspector.allRows', {
175
+ count: counts.get(`${issue.field}|${issue.code}`) ?? 0
176
+ })
177
+ "
178
+ @click="filterIssue(issue)"
179
+ />
180
+ </div>
181
+ </slot>
182
+ </div>
183
+ </template>
184
+ <p v-else class="flex items-center gap-2 text-[13px] text-success">
185
+ <UIcon name="i-lucide-circle-check" class="size-4" />{{
186
+ t("spreadsheet.inspector.noIssue")
187
+ }}
188
+ </p>
189
+ </section>
190
+
191
+ <section class="grid gap-2">
192
+ <h5 class="text-[11px] font-semibold tracking-[0.08em] text-dimmed uppercase">
193
+ {{ t("spreadsheet.inspector.values") }}
194
+ </h5>
195
+ <dl class="divide-y divide-default overflow-hidden rounded-lg border border-default">
196
+ <div
197
+ v-for="field in fields"
198
+ :key="field.path"
199
+ class="grid gap-0.5 px-3 py-2"
200
+ :class="row.fieldIssues[field.path]?.level === 'error' ? 'bg-error/4' : ''"
201
+ >
202
+ <dt class="text-xs text-muted">{{ field.label }}</dt>
203
+ <dd class="min-w-0">
204
+ <div
205
+ v-if="editing === field.path"
206
+ class="h-8 overflow-hidden rounded-md ring-2 ring-primary ring-inset"
207
+ >
208
+ <SpreadsheetImportCellEditor
209
+ :text="importer.rows.cell(row.index, field.path).text"
210
+ :choices="choicesOf(field.path)"
211
+ @commit="(text) => commit(field.path, text)"
212
+ @cancel="editing = null"
213
+ />
214
+ </div>
215
+ <button
216
+ v-else
217
+ type="button"
218
+ class="w-full truncate rounded px-1 py-0.5 text-start text-[13px] text-highlighted hover:bg-elevated"
219
+ :class="{
220
+ 'italic text-dimmed': !importer.rows.cell(row.index, field.path).display
221
+ }"
222
+ :disabled="Boolean(row.discardReason)"
223
+ @click="editing = field.path"
224
+ >
225
+ {{
226
+ importer.rows.cell(row.index, field.path).display || t("spreadsheet.table.emptyCell")
227
+ }}
228
+ </button>
229
+ <p
230
+ v-if="importer.rows.cell(row.index, field.path).edited"
231
+ class="flex items-center gap-1 px-1 text-[11.5px] text-dimmed"
232
+ >
233
+ {{
234
+ t("spreadsheet.table.edited", {
235
+ value: importer.rows.cell(row.index, field.path).original || t("spreadsheet.table.emptyCell")
236
+ })
237
+ }}
238
+ <UButton
239
+ variant="link"
240
+ size="xs"
241
+ class="px-0"
242
+ :label="t('spreadsheet.inspector.revert')"
243
+ @click="revert(field.path)"
244
+ />
245
+ </p>
246
+ <p
247
+ v-else-if="importer.rows.cell(row.index, field.path).stored !== null"
248
+ class="px-1 text-[11.5px] text-info"
249
+ >
250
+ {{
251
+ t("spreadsheet.table.stored", {
252
+ value: importer.rows.cell(row.index, field.path).stored ?? ""
253
+ })
254
+ }}
255
+ </p>
256
+ </dd>
257
+ </div>
258
+ </dl>
259
+ </section>
260
+ </div>
261
+ <div class="border-t border-default px-4 py-2.5">
262
+ <UButton
263
+ v-if="!row.discardReason || row.discardReason === 'manual'"
264
+ size="sm"
265
+ color="neutral"
266
+ variant="outline"
267
+ block
268
+ :icon="row.discardReason ? 'i-lucide-rotate-ccw' : 'i-lucide-ban'"
269
+ :label="
270
+ row.discardReason ? t('spreadsheet.inspector.restore') : t('spreadsheet.inspector.discard')
271
+ "
272
+ @click="toggleDiscard"
273
+ />
274
+ </div>
275
+ </aside>
276
+ </template>
@@ -0,0 +1,22 @@
1
+ import type { SpreadsheetImporter, SpreadsheetRowIssue } from '../../types/index.js';
2
+ type __VLS_Props = {
3
+ importer?: SpreadsheetImporter;
4
+ height?: string;
5
+ };
6
+ type __VLS_Slots = {
7
+ issue?: (props: {
8
+ issue: SpreadsheetRowIssue;
9
+ }) => unknown;
10
+ };
11
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
12
+ height: string;
13
+ importer: SpreadsheetImporter;
14
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
15
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
16
+ declare const _default: typeof __VLS_export;
17
+ export default _default;
18
+ type __VLS_WithSlots<T, S> = T & {
19
+ new (): {
20
+ $slots: S;
21
+ };
22
+ };
@@ -0,0 +1,11 @@
1
+ import type { SpreadsheetImporter } from '../../types/index.js';
2
+ type __VLS_Props = {
3
+ importer?: SpreadsheetImporter;
4
+ /** Shows the sheet and header-row pickers even when detection is sure. */
5
+ always?: boolean;
6
+ /** Hides the preview of the rows around the header row. */
7
+ noPreview?: boolean;
8
+ };
9
+ 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>;
10
+ declare const _default: typeof __VLS_export;
11
+ export default _default;
@@ -0,0 +1,164 @@
1
+ <script setup>
2
+ import UButton from "@nuxt/ui/components/Button.vue";
3
+ import UIcon from "@nuxt/ui/components/Icon.vue";
4
+ import USelect from "@nuxt/ui/components/Select.vue";
5
+ import { computed, shallowRef } from "vue";
6
+ import { useUiToolsLocale } from "#ui-tools/i18n";
7
+ import { useSpreadsheetImporter } from "../../composables/use-spreadsheet-import-context";
8
+ const props = defineProps({
9
+ importer: { type: Object, required: false },
10
+ always: { type: Boolean, required: false },
11
+ noPreview: { type: Boolean, required: false }
12
+ });
13
+ const importer = useSpreadsheetImporter(() => props.importer);
14
+ const { t } = useUiToolsLocale();
15
+ const editing = shallowRef(false);
16
+ const layout = computed(() => importer.value.layout);
17
+ const matched = computed(
18
+ () => importer.value.columns.fields.filter((field) => field.status === "matched").length
19
+ );
20
+ const problem = computed(() => {
21
+ if (!layout.value.detection?.best) return "no-match";
22
+ if (!matched.value) return "no-match";
23
+ if (layout.value.ambiguous) return "ambiguous";
24
+ return null;
25
+ });
26
+ const showPickers = computed(
27
+ () => props.always || editing.value || problem.value !== null || !layout.value.detected
28
+ );
29
+ const sheetItems = computed(
30
+ () => importer.value.file.sheets.map((sheet) => ({
31
+ label: t("spreadsheet.file.sheetOption", { count: sheet.rowCount, name: sheet.name }),
32
+ value: sheet.name
33
+ }))
34
+ );
35
+ const rowItems = computed(
36
+ () => layout.value.candidates.map((row) => ({
37
+ label: row.preview.length ? t("spreadsheet.file.rowOption", { preview: row.preview.join(", "), row: row.rowNumber }) : t("spreadsheet.file.emptyRow", { row: row.rowNumber }),
38
+ value: row.index
39
+ }))
40
+ );
41
+ const previewWidth = computed(
42
+ () => Math.min(Math.max(...layout.value.preview.map((row) => row.cells.length), 0), 8)
43
+ );
44
+ function selectSheet(value) {
45
+ importer.value.layout.setSheet(value);
46
+ }
47
+ function selectRow(value) {
48
+ importer.value.layout.setHeaderRow(value);
49
+ }
50
+ </script>
51
+
52
+ <template>
53
+ <div v-if="importer.file.loaded" data-spreadsheet-source-settings class="grid gap-3">
54
+ <div v-if="!showPickers" class="flex flex-wrap items-center gap-x-2 gap-y-1 text-sm text-muted">
55
+ <UIcon name="i-lucide-circle-check" class="size-4 text-success" />
56
+ <span>
57
+ <b class="font-medium text-highlighted">{{ layout.sheet }}</b>
58
+ · {{ t("spreadsheet.file.headerRow") }}
59
+ <b class="font-medium text-highlighted tabular-nums">{{ layout.headerRowNumber }}</b>
60
+ </span>
61
+ <span class="text-dimmed">· {{ t("spreadsheet.file.detected") }}</span>
62
+ <span v-if="layout.headerRow > 0" class="text-dimmed">
63
+ · {{ t("spreadsheet.file.titleRows", { count: layout.headerRow }) }}
64
+ </span>
65
+ <UButton
66
+ variant="link"
67
+ color="neutral"
68
+ size="xs"
69
+ class="px-0"
70
+ icon="i-lucide-pencil"
71
+ :aria-label="t('spreadsheet.file.sheet')"
72
+ @click="editing = true"
73
+ />
74
+ </div>
75
+ <template v-else>
76
+ <div class="grid gap-3 sm:grid-cols-2">
77
+ <label class="grid min-w-0 gap-1.5 text-sm font-medium text-toned">
78
+ {{ t("spreadsheet.file.sheet") }}
79
+ <USelect
80
+ :model-value="layout.sheet ?? void 0"
81
+ :items="sheetItems"
82
+ class="w-full"
83
+ @update:model-value="selectSheet"
84
+ />
85
+ </label>
86
+ <label class="grid min-w-0 gap-1.5 text-sm font-medium text-toned">
87
+ {{ t("spreadsheet.file.headerRow") }}
88
+ <USelect
89
+ :model-value="layout.headerRow"
90
+ :items="rowItems"
91
+ class="w-full"
92
+ @update:model-value="selectRow"
93
+ />
94
+ </label>
95
+ </div>
96
+ <p
97
+ v-if="problem === 'no-match'"
98
+ class="flex flex-wrap items-center gap-1.5 text-sm text-error"
99
+ >
100
+ <UIcon name="i-lucide-circle-x" class="size-4 shrink-0" />
101
+ {{ t("spreadsheet.file.noMatch") }}
102
+ <UButton
103
+ v-if="layout.detection?.best && !layout.detected"
104
+ variant="link"
105
+ size="xs"
106
+ class="px-0"
107
+ :label="t('spreadsheet.file.useDetected')"
108
+ @click="layout.redetect()"
109
+ />
110
+ </p>
111
+ <p v-else-if="problem === 'ambiguous'" class="flex items-center gap-1.5 text-sm text-warning">
112
+ <UIcon name="i-lucide-triangle-alert" class="size-4 shrink-0" />
113
+ {{ t("spreadsheet.file.ambiguous") }}
114
+ </p>
115
+ <p v-else-if="layout.detected" class="flex items-center gap-1.5 text-sm text-dimmed">
116
+ <UIcon name="i-lucide-circle-check" class="size-4 text-success" />
117
+ {{ t("spreadsheet.file.detected") }}
118
+ </p>
119
+ </template>
120
+
121
+ <div
122
+ v-if="!noPreview && layout.preview.length"
123
+ class="overflow-x-auto rounded-lg border border-default bg-default"
124
+ >
125
+ <table class="w-full border-collapse text-[12.5px]">
126
+ <tbody>
127
+ <tr
128
+ v-for="row in layout.preview"
129
+ :key="row.rowNumber"
130
+ :class="{
131
+ 'text-dimmed': row.kind === 'title',
132
+ 'bg-primary/6 font-semibold text-highlighted': row.kind === 'header',
133
+ 'text-toned': row.kind === 'data'
134
+ }"
135
+ >
136
+ <td
137
+ class="w-10 border-e border-default px-2 py-1.5 text-end font-mono text-[11px] text-dimmed tabular-nums"
138
+ >
139
+ {{ row.rowNumber }}
140
+ </td>
141
+ <td
142
+ v-for="index in previewWidth"
143
+ :key="index"
144
+ class="max-w-40 truncate border-b border-default/60 px-2.5 py-1.5 whitespace-nowrap"
145
+ :class="row.kind === 'title' ? 'italic' : ''"
146
+ >
147
+ {{ row.cells[index - 1] }}
148
+ </td>
149
+ <td
150
+ class="w-full border-b border-default/60 px-2 py-1.5 text-end text-[11px] font-normal text-dimmed"
151
+ >
152
+ <template v-if="row.kind === 'title'">{{
153
+ t("spreadsheet.file.previewTitle")
154
+ }}</template>
155
+ <template v-else-if="row.kind === 'header'">{{
156
+ t("spreadsheet.file.previewHeader")
157
+ }}</template>
158
+ </td>
159
+ </tr>
160
+ </tbody>
161
+ </table>
162
+ </div>
163
+ </div>
164
+ </template>
@@ -0,0 +1,11 @@
1
+ import type { SpreadsheetImporter } from '../../types/index.js';
2
+ type __VLS_Props = {
3
+ importer?: SpreadsheetImporter;
4
+ /** Shows the sheet and header-row pickers even when detection is sure. */
5
+ always?: boolean;
6
+ /** Hides the preview of the rows around the header row. */
7
+ noPreview?: boolean;
8
+ };
9
+ 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>;
10
+ declare const _default: typeof __VLS_export;
11
+ export default _default;
@@ -1,10 +1,13 @@
1
- import type { SpreadsheetValue } from '../../types/index.js';
1
+ /** One KPI tile, in the style of `SpreadsheetImportStats`. For tiles of your own. */
2
2
  type __VLS_Props = {
3
- value: SpreadsheetValue;
4
- compact?: boolean;
3
+ value: string | number;
4
+ label: string;
5
+ hint?: string;
6
+ tone?: 'neutral' | 'success' | 'error' | 'warning' | 'info';
5
7
  };
6
8
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
7
- compact: boolean;
9
+ hint: string;
10
+ tone: "neutral" | "success" | "error" | "warning" | "info";
8
11
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
12
  declare const _default: typeof __VLS_export;
10
13
  export default _default;
@@ -0,0 +1,30 @@
1
+ <script setup>
2
+ defineProps({
3
+ value: { type: [String, Number], required: true },
4
+ label: { type: String, required: true },
5
+ hint: { type: String, required: false, default: void 0 },
6
+ tone: { type: String, required: false, default: "neutral" }
7
+ });
8
+ </script>
9
+
10
+ <template>
11
+ <div
12
+ data-spreadsheet-stat
13
+ class="grid min-w-0 content-start gap-0.5 rounded-lg border border-default bg-elevated/40 px-3.5 py-3"
14
+ >
15
+ <b
16
+ class="text-[22px] leading-7 font-light tracking-[-0.02em] tabular-nums"
17
+ :class="{
18
+ 'text-highlighted': tone === 'neutral',
19
+ 'text-success': tone === 'success',
20
+ 'text-error': tone === 'error',
21
+ 'text-warning': tone === 'warning',
22
+ 'text-info': tone === 'info'
23
+ }"
24
+ >
25
+ {{ typeof value === "number" ? value.toLocaleString() : value }}
26
+ </b>
27
+ <span class="truncate text-xs text-muted">{{ label }}</span>
28
+ <span v-if="hint" class="truncate text-[11.5px] text-dimmed">{{ hint }}</span>
29
+ </div>
30
+ </template>
@@ -1,10 +1,13 @@
1
- import type { SpreadsheetValue } from '../../types/index.js';
1
+ /** One KPI tile, in the style of `SpreadsheetImportStats`. For tiles of your own. */
2
2
  type __VLS_Props = {
3
- value: SpreadsheetValue;
4
- compact?: boolean;
3
+ value: string | number;
4
+ label: string;
5
+ hint?: string;
6
+ tone?: 'neutral' | 'success' | 'error' | 'warning' | 'info';
5
7
  };
6
8
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
7
- compact: boolean;
9
+ hint: string;
10
+ tone: "neutral" | "success" | "error" | "warning" | "info";
8
11
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
12
  declare const _default: typeof __VLS_export;
10
13
  export default _default;
@@ -0,0 +1,26 @@
1
+ import type { SpreadsheetImporter } from '../../types/index.js';
2
+ type __VLS_Props = {
3
+ importer?: SpreadsheetImporter;
4
+ };
5
+ type __VLS_Slots = {
6
+ default?: (props: {
7
+ importable: number;
8
+ invalid: number;
9
+ discarded: number;
10
+ byMode: {
11
+ create: number;
12
+ update: number;
13
+ skip: number;
14
+ };
15
+ }) => unknown;
16
+ extra?: () => unknown;
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
+ };
@@ -0,0 +1,55 @@
1
+ <script setup>
2
+ import { computed } from "vue";
3
+ import { useUiToolsLocale } from "#ui-tools/i18n";
4
+ import { useSpreadsheetImporter } from "../../composables/use-spreadsheet-import-context";
5
+ import SpreadsheetImportStat from "./spreadsheet-import-stat.vue";
6
+ const props = defineProps({
7
+ importer: { type: Object, required: false }
8
+ });
9
+ defineSlots();
10
+ const importer = useSpreadsheetImporter(() => props.importer);
11
+ const { t } = useUiToolsLocale();
12
+ const rows = computed(() => importer.value.rows);
13
+ const warnings = computed(() => rows.value.importable.filter((row) => row.warnings.length).length);
14
+ const blocking = computed(
15
+ () => rows.value.invalid.reduce((total, row) => total + row.errors.length, 0)
16
+ );
17
+ const importableHint = computed(() => {
18
+ if (rows.value.byMode.update)
19
+ return `${t("spreadsheet.stats.create", { count: rows.value.byMode.create })} \xB7 ${t("spreadsheet.stats.update", { count: rows.value.byMode.update })}`;
20
+ return warnings.value ? t("spreadsheet.stats.warnings", { count: warnings.value }) : void 0;
21
+ });
22
+ </script>
23
+
24
+ <template>
25
+ <div
26
+ data-spreadsheet-stats
27
+ class="grid grid-cols-2 gap-2.5 sm:grid-cols-[repeat(auto-fit,minmax(9rem,1fr))]"
28
+ >
29
+ <slot
30
+ :importable="rows.importable.length"
31
+ :invalid="rows.invalid.length"
32
+ :discarded="rows.discarded.length"
33
+ :by-mode="rows.byMode"
34
+ >
35
+ <SpreadsheetImportStat
36
+ :value="rows.importable.length"
37
+ :label="t('spreadsheet.stats.importable')"
38
+ :hint="importableHint"
39
+ tone="success"
40
+ />
41
+ <SpreadsheetImportStat
42
+ :value="rows.invalid.length"
43
+ :label="t('spreadsheet.stats.invalid')"
44
+ :hint="blocking ? t('spreadsheet.stats.blocking', { count: blocking }) : void 0"
45
+ :tone="rows.invalid.length ? 'error' : 'neutral'"
46
+ />
47
+ <SpreadsheetImportStat
48
+ v-if="rows.discarded.length"
49
+ :value="rows.discarded.length"
50
+ :label="t('spreadsheet.stats.discarded')"
51
+ />
52
+ </slot>
53
+ <slot name="extra" />
54
+ </div>
55
+ </template>
@@ -0,0 +1,26 @@
1
+ import type { SpreadsheetImporter } from '../../types/index.js';
2
+ type __VLS_Props = {
3
+ importer?: SpreadsheetImporter;
4
+ };
5
+ type __VLS_Slots = {
6
+ default?: (props: {
7
+ importable: number;
8
+ invalid: number;
9
+ discarded: number;
10
+ byMode: {
11
+ create: number;
12
+ update: number;
13
+ skip: number;
14
+ };
15
+ }) => unknown;
16
+ extra?: () => unknown;
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
+ };