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
@@ -1,292 +1,271 @@
1
- import type { LazyTextValue, MaybePromise } from '#ui-tools/shared/types/utils';
2
- import type { InferSpreadsheetOptionValue, InferSpreadsheetOptionsSourceValue, SpreadsheetOptionItem, SpreadsheetOptionsSource } from './options.js';
3
- import type { SpreadsheetColumnResolveDefinition, SpreadsheetResolvedSelectionValue } from './resolution.js';
4
- import type { SpreadsheetCellValue, SpreadsheetMatchDefinition, SpreadsheetModifier, SpreadsheetValue } from './shared.js';
5
- import type { SpreadsheetFieldRulesInput } from './validation.js';
6
- export interface SpreadsheetColumnDefinition<TKey extends string = string, TValue = unknown, TRequired extends boolean = boolean, TContext = unknown, TRulesInput extends SpreadsheetFieldRulesInput<TValue> | undefined = undefined, TSourceValue = TValue, TResolve = undefined> {
7
- kind: 'text' | 'email' | 'number' | 'date' | 'boolean' | 'enum' | 'option';
8
- key: TKey;
1
+ import type { LazyTextValue } from '#ui-tools/shared/types/utils';
2
+ import type { InferSpreadsheetOptionValue, SpreadsheetOptionItem, SpreadsheetOptionsInput } from './options.js';
3
+ import type { SpreadsheetCell, SpreadsheetHeaderCell, SpreadsheetPrettify } from './shared.js';
4
+ import type { SpreadsheetRule, SpreadsheetRuleBuilder, SpreadsheetRulesInput } from './validation.js';
5
+ export type SpreadsheetColumnKind = 'text' | 'number' | 'date' | 'boolean' | 'select';
6
+ /**
7
+ * What happens to a value that is not one of a `select` column's options:
8
+ *
9
+ * - `ask` (default): a question for the user, once per distinct value
10
+ * - `error`: a blocking issue on the row
11
+ * - `skip-rows`: rows using the value are left out of the import
12
+ * - `leave-empty`: the value is dropped
13
+ * - `create`: the value is created with the options' `create` handler when the user imports
14
+ */
15
+ export type SpreadsheetUnknownPolicy = 'ask' | 'error' | 'skip-rows' | 'leave-empty' | 'create';
16
+ /** Callback typed with the context; stored bivariantly so any context fits the runtime shape. */
17
+ export type SpreadsheetContextCallback<TContext, TResult> = {
18
+ bivarianceHack(params: {
19
+ ctx: TContext;
20
+ }): TResult;
21
+ }['bivarianceHack'];
22
+ /** Callback typed with the context and the row so far. */
23
+ export type SpreadsheetRowCallback<TContext, TRow, TResult> = {
24
+ bivarianceHack(params: {
25
+ ctx: TContext;
26
+ row: TRow;
27
+ }): TResult;
28
+ }['bivarianceHack'];
29
+ /**
30
+ * A declared name of the column in files. Strings match exactly, ignoring case, accents, extra
31
+ * spaces, and a trailing `*`; a regex tests the header text; a predicate decides.
32
+ */
33
+ export type SpreadsheetHeaderMatcher<TContext = unknown> = string | RegExp | {
34
+ bivarianceHack(params: {
35
+ header: SpreadsheetHeaderCell;
36
+ ctx: TContext;
37
+ }): boolean;
38
+ }['bivarianceHack'];
39
+ export interface SpreadsheetMultipleOptions {
40
+ /** Separator between items. Defaults to a comma. */
41
+ separator?: string;
42
+ }
43
+ /** Runtime shape of a column's options, with every type parameter erased. */
44
+ export interface SpreadsheetColumnConfig {
9
45
  label?: LazyTextValue;
10
- required?: TRequired;
11
- match?: SpreadsheetMatchDefinition;
12
- from?: string | RegExp | readonly (string | RegExp)[];
13
- modifiers?: readonly SpreadsheetModifier[];
14
- multiple?: boolean | {
15
- separator?: string;
16
- matchBy?: 'label' | 'value';
17
- itemModifiers?: readonly SpreadsheetModifier[];
18
- };
19
- parse?: (params: {
20
- cell: SpreadsheetCellValue;
21
- context: TContext;
22
- }) => MaybePromise<TSourceValue>;
23
- resolve?: TResolve;
24
- rules?: SpreadsheetFieldRulesInput<TValue>;
25
- __rulesInput?: TRulesInput;
26
- __valueType?: TValue;
27
- __sourceValueType?: TSourceValue;
28
- __resolveType?: TResolve;
46
+ headers?: SpreadsheetHeaderMatcher | readonly SpreadsheetHeaderMatcher[];
47
+ required?: boolean;
48
+ /** A value, or `({ ctx, row }) => value`. */
49
+ default?: unknown;
50
+ when?: SpreadsheetContextCallback<unknown, boolean>;
51
+ description?: LazyTextValue;
52
+ example?: LazyTextValue;
53
+ rules?: readonly SpreadsheetRule<unknown>[] | {
54
+ bivarianceHack(rules: SpreadsheetRuleBuilder<unknown>, params: {
55
+ row: unknown;
56
+ ctx: unknown;
57
+ }): readonly SpreadsheetRule<unknown>[];
58
+ }['bivarianceHack'];
59
+ editable?: boolean;
60
+ multiple?: boolean | SpreadsheetMultipleOptions;
61
+ parse?: {
62
+ bivarianceHack(params: {
63
+ cell: SpreadsheetCell;
64
+ ctx: unknown;
65
+ row: unknown;
66
+ }): unknown;
67
+ }['bivarianceHack'];
68
+ /** `number` */
69
+ decimal?: '.' | ',';
70
+ /** `date` */
71
+ formats?: readonly string[];
72
+ /** `boolean` */
73
+ true?: readonly string[];
74
+ false?: readonly string[];
75
+ /** `select` */
76
+ options?: SpreadsheetOptionsInput<unknown, SpreadsheetOptionItem, unknown>;
77
+ from?: string;
78
+ unknown?: SpreadsheetUnknownPolicy;
29
79
  }
30
- export interface SpreadsheetColumnGroupDefinition<TKey extends string = string, TColumns extends readonly unknown[] = readonly unknown[]> {
31
- kind: 'group';
32
- key: TKey;
33
- columns: TColumns;
80
+ /** A column, as the builder records it. */
81
+ export interface SpreadsheetColumnEntry<TKey extends string = string> {
82
+ readonly entry: 'column';
83
+ readonly kind: SpreadsheetColumnKind;
84
+ readonly key: TKey;
85
+ readonly config: SpreadsheetColumnConfig;
34
86
  }
35
- export type SpreadsheetStaticColumnEntry = SpreadsheetColumnDefinition<string, unknown, boolean, unknown> | SpreadsheetColumnGroupDefinition<string, readonly unknown[]>;
36
- type ResolveSpreadsheetColumnValue<TDefault, TParse, TMultiple> = TParse extends (...args: infer _Args) => infer TResult ? Awaited<TResult> : TMultiple extends false | undefined ? TDefault : TDefault[];
37
- export interface SpreadsheetColumnMultipleOptions {
38
- separator?: string;
39
- itemModifiers?: readonly SpreadsheetModifier[];
87
+ export interface SpreadsheetGroupOptions<TContext> {
88
+ label?: LazyTextValue;
89
+ description?: LazyTextValue;
90
+ when?: SpreadsheetContextCallback<TContext, boolean>;
40
91
  }
41
- export interface SpreadsheetEnumColumnMultipleOptions extends SpreadsheetColumnMultipleOptions {
92
+ /** A group: its columns are nested under its key in the row. */
93
+ export interface SpreadsheetGroupEntry {
94
+ readonly entry: 'group';
95
+ readonly key: string;
96
+ readonly config: SpreadsheetGroupOptions<unknown>;
97
+ readonly children: readonly SpreadsheetColumnEntry[];
42
98
  }
43
- export interface SpreadsheetOptionColumnMultipleOptions extends SpreadsheetColumnMultipleOptions {
44
- matchBy?: 'label' | 'value';
99
+ /** A group whose columns are built from the context, one per item. */
100
+ export interface SpreadsheetDynamicEntry {
101
+ readonly entry: 'dynamic';
102
+ readonly key: string;
103
+ readonly config: SpreadsheetGroupOptions<unknown> & {
104
+ items: SpreadsheetContextCallback<unknown, readonly unknown[]>;
105
+ column: {
106
+ bivarianceHack(item: unknown, factory: SpreadsheetColumnFactory<never, never>): SpreadsheetColumnEntry;
107
+ }['bivarianceHack'];
108
+ };
45
109
  }
46
- export interface SpreadsheetColumnBaseOptions<TContext, TSourceValue, TRequired extends boolean, TMultiple = boolean | SpreadsheetColumnMultipleOptions> {
110
+ export type SpreadsheetEntry = SpreadsheetColumnEntry | SpreadsheetGroupEntry | SpreadsheetDynamicEntry;
111
+ type SpreadsheetItems<TItem, TMultiple> = [TMultiple] extends [undefined | false] ? TItem : TItem[];
112
+ /**
113
+ * Value of a column in the row: an array with `multiple` (empty when the cell is), otherwise the
114
+ * item, or `null` when the cell can be empty (not required and without a default).
115
+ */
116
+ export type SpreadsheetColumnValue<TItem, TMultiple, TRequired, TDefault> = [TMultiple] extends [
117
+ undefined | false
118
+ ] ? [TRequired] extends [true] ? TItem : [TDefault] extends [never] ? TItem | null : TItem : TItem[];
119
+ export type SpreadsheetIsOptional<TWhen> = [TWhen] extends [never] ? false : true;
120
+ type SpreadsheetItem<TParsed, TFallback> = [TParsed] extends [never] ? TFallback : TParsed;
121
+ /** The row with one more column. */
122
+ export type SpreadsheetWith<TRow, TKey extends string, TValue, TOptional> = TOptional extends true ? TRow & {
123
+ [K in TKey]?: TValue;
124
+ } : TRow & {
125
+ [K in TKey]: TValue;
126
+ };
127
+ /** A key the row does not have yet; declaring a key twice is a type error. */
128
+ type SpreadsheetNewKey<TKey extends string, TRow> = TKey & NoInfer<TKey extends keyof TRow ? {
129
+ duplicateColumn: TKey;
130
+ } : unknown>;
131
+ /** Options shared by every column. `TRow` is the row so far: the columns declared above. */
132
+ export interface SpreadsheetColumnCommonOptions<TContext, TRow, TItem> {
133
+ /** Name of the field everywhere in the UI. Also a header the column matches. */
47
134
  label?: LazyTextValue;
135
+ /** Other names the column has in files. Defaults to the label and the key. */
136
+ headers?: SpreadsheetHeaderMatcher<TContext> | readonly SpreadsheetHeaderMatcher<TContext>[];
137
+ /** Shown with the expected columns, in the template, and in mapping hints. */
138
+ description?: LazyTextValue;
139
+ /** Sample value for the template. */
140
+ example?: LazyTextValue;
141
+ /** Checks on each non-empty value (each item with `multiple`); the function form reads the row. */
142
+ rules?: SpreadsheetRulesInput<NoInfer<TItem>, TContext, TRow>;
143
+ /** Whether the cell can be edited in review. Defaults to `true`. */
144
+ editable?: boolean;
145
+ }
146
+ /** Options whose presence changes the value type; their generics are inferred from return types. */
147
+ interface SpreadsheetTypedOptions<TContext, TRow, TMultiple, TRequired, TDefault, TWhen> {
148
+ /** A required column without a match blocks the import; an empty cell is a blocking issue. */
48
149
  required?: TRequired;
49
- match?: SpreadsheetMatchDefinition;
50
- from?: string | RegExp | readonly (string | RegExp)[];
51
- modifiers?: readonly SpreadsheetModifier[];
150
+ /** Used when the column is missing from the file or the cell is empty. */
151
+ default?: TDefault | ((params: {
152
+ ctx: TContext;
153
+ row: TRow;
154
+ }) => TDefault);
155
+ /** Includes the column only when it returns `true` for the context. */
156
+ when?: (params: {
157
+ ctx: TContext;
158
+ }) => TWhen;
159
+ /** Splits the cell into items, on commas unless a separator is given. */
52
160
  multiple?: TMultiple;
53
- parse?: (params: {
54
- cell: SpreadsheetCellValue;
55
- context: TContext;
56
- }) => MaybePromise<TSourceValue>;
57
- rules?: SpreadsheetFieldRulesInput<TSourceValue>;
58
161
  }
59
- export type SpreadsheetEnumColumnOptions<TContext, TOptionValue, TRequired extends boolean, TMultiple = boolean | SpreadsheetEnumColumnMultipleOptions, TResolvedValue = TOptionValue> = SpreadsheetColumnBaseOptions<TContext, TResolvedValue, TRequired, TMultiple> & {
60
- options: readonly TOptionValue[];
61
- };
62
- export type SpreadsheetOptionColumnOptions<TContext, TOption extends SpreadsheetOptionItem, TRequired extends boolean, TMultiple = boolean | SpreadsheetOptionColumnMultipleOptions, TResolvedValue = InferSpreadsheetOptionValue<TOption>> = SpreadsheetColumnBaseOptions<TContext, TResolvedValue, TRequired, TMultiple> & {
63
- options: SpreadsheetOptionsSource<{
64
- context: TContext;
65
- }, TOption>;
162
+ type SpreadsheetScalarOptions<TContext, TRow, TItem, TParsed, TMultiple, TRequired, TDefault, TWhen> = SpreadsheetColumnCommonOptions<TContext, TRow, TItem> & SpreadsheetTypedOptions<TContext, TRow, TMultiple, TRequired, TDefault, TWhen> & {
163
+ /** Reads the cell yourself; its return type becomes the value type. */
164
+ parse?: (params: {
165
+ cell: SpreadsheetCell;
166
+ ctx: TContext;
167
+ row: TRow;
168
+ }) => TParsed;
66
169
  };
67
- export type SpreadsheetScalarColumnBuilder<TContext = unknown, TDefault = unknown, TMultipleConfig = SpreadsheetColumnMultipleOptions> = <TKey extends string, TRequired extends boolean = false, TMultiple extends boolean | TMultipleConfig | undefined = undefined, TParse extends SpreadsheetColumnBaseOptions<TContext, ResolveSpreadsheetColumnValue<TDefault, undefined, TMultiple>, TRequired, Exclude<TMultiple, undefined>>['parse'] | undefined = undefined, TRulesInput extends SpreadsheetFieldRulesInput<ResolveSpreadsheetColumnValue<TDefault, TParse, TMultiple>> | undefined = SpreadsheetFieldRulesInput<ResolveSpreadsheetColumnValue<TDefault, TParse, TMultiple>> | undefined>(key: TKey, options?: SpreadsheetColumnBaseOptions<TContext, ResolveSpreadsheetColumnValue<TDefault, TParse, TMultiple>, TRequired, Exclude<TMultiple, undefined>> & {
68
- rules?: TRulesInput;
69
- }) => SpreadsheetColumnDefinition<TKey, ResolveSpreadsheetColumnValue<TDefault, TParse, TMultiple>, TRequired, TContext, TRulesInput>;
70
- export interface SpreadsheetResolvableScalarColumnBuilder<TContext = unknown, TDefault = unknown, TMultipleConfig = SpreadsheetColumnMultipleOptions> {
71
- <TKey extends string, TRequired extends boolean = false, TMultiple extends boolean | TMultipleConfig | undefined = undefined, TParse extends SpreadsheetColumnBaseOptions<TContext, ResolveSpreadsheetColumnValue<TDefault, undefined, TMultiple>, TRequired, Exclude<TMultiple, undefined>>['parse'] | undefined = undefined, TSourceValue = ResolveSpreadsheetColumnValue<TDefault, TParse, TMultiple>, TRulesInput extends SpreadsheetFieldRulesInput<TSourceValue> | undefined = SpreadsheetFieldRulesInput<TSourceValue> | undefined>(key: TKey, options?: Omit<SpreadsheetColumnBaseOptions<TContext, TSourceValue, TRequired, Exclude<TMultiple, undefined>>, 'rules'> & {
72
- rules?: TRulesInput;
73
- }): SpreadsheetColumnDefinition<TKey, TSourceValue, TRequired, TContext, TRulesInput, TSourceValue>;
74
- <TKey extends string, TRequired extends boolean = false, TMultiple extends boolean | TMultipleConfig | undefined = undefined, TParse extends SpreadsheetColumnBaseOptions<TContext, ResolveSpreadsheetColumnValue<TDefault, undefined, TMultiple>, TRequired, Exclude<TMultiple, undefined>>['parse'] | undefined = undefined, TSourceValue = ResolveSpreadsheetColumnValue<TDefault, TParse, TMultiple>, const TResolveOptions = readonly SpreadsheetOptionItem[], TResolveValue = SpreadsheetResolvedSelectionValue<TSourceValue, InferSpreadsheetOptionsSourceValue<TResolveOptions>>, TRulesInput extends SpreadsheetFieldRulesInput<TResolveValue> | undefined = SpreadsheetFieldRulesInput<TResolveValue> | undefined>(key: TKey, options: Omit<SpreadsheetColumnBaseOptions<TContext, TSourceValue, TRequired, Exclude<TMultiple, undefined>>, 'rules'> & {
75
- resolve: {
76
- options: TResolveOptions & SpreadsheetOptionsSource<{
77
- context: TContext;
78
- }, SpreadsheetOptionItem>;
79
- getOptions?: SpreadsheetColumnResolveDefinition<TContext, TSourceValue, SpreadsheetOptionItem, TResolveValue>['getOptions'];
80
- };
81
- rules?: TRulesInput;
82
- }): SpreadsheetColumnDefinition<TKey, TResolveValue, TRequired, TContext, TRulesInput, TSourceValue, SpreadsheetColumnResolveDefinition<TContext, TSourceValue, SpreadsheetOptionItem, TResolveValue>>;
83
- }
84
- export type SpreadsheetOptionColumnBuilder<TContext = unknown> = <TKey extends string, const TOption extends SpreadsheetOptionItem, TRequired extends boolean = false, TMultiple extends boolean | SpreadsheetOptionColumnMultipleOptions | undefined = undefined, TParse extends SpreadsheetColumnBaseOptions<TContext, ResolveSpreadsheetColumnValue<InferSpreadsheetOptionValue<TOption>, undefined, TMultiple>, TRequired, Exclude<TMultiple, undefined>>['parse'] | undefined = undefined, TRulesInput extends SpreadsheetFieldRulesInput<ResolveSpreadsheetColumnValue<InferSpreadsheetOptionValue<TOption>, TParse, TMultiple>> | undefined = SpreadsheetFieldRulesInput<ResolveSpreadsheetColumnValue<InferSpreadsheetOptionValue<TOption>, TParse, TMultiple>> | undefined>(key: TKey, options: SpreadsheetColumnBaseOptions<TContext, ResolveSpreadsheetColumnValue<InferSpreadsheetOptionValue<TOption>, TParse, TMultiple>, TRequired, Exclude<TMultiple, undefined>> & {
85
- rules?: TRulesInput;
86
- options: SpreadsheetOptionsSource<{
87
- context: TContext;
88
- }, TOption>;
89
- }) => SpreadsheetColumnDefinition<TKey, ResolveSpreadsheetColumnValue<InferSpreadsheetOptionValue<TOption>, TParse, TMultiple>, TRequired, TContext, TRulesInput>;
90
- export interface SpreadsheetColumnBuilder<TContext = unknown> {
91
- text: SpreadsheetResolvableScalarColumnBuilder<TContext, string>;
92
- email: SpreadsheetScalarColumnBuilder<TContext, string>;
93
- number: SpreadsheetResolvableScalarColumnBuilder<TContext, number>;
94
- date: SpreadsheetScalarColumnBuilder<TContext, string>;
95
- boolean: SpreadsheetScalarColumnBuilder<TContext, boolean>;
96
- enum: <TKey extends string, const TOptions extends readonly unknown[], TRequired extends boolean = false, TMultiple extends boolean | SpreadsheetEnumColumnMultipleOptions | undefined = undefined, TParse extends SpreadsheetColumnBaseOptions<TContext, ResolveSpreadsheetColumnValue<TOptions[number], undefined, TMultiple>, TRequired, Exclude<TMultiple, undefined>>['parse'] | undefined = undefined, TRulesInput extends SpreadsheetFieldRulesInput<ResolveSpreadsheetColumnValue<TOptions[number], TParse, TMultiple>> | undefined = SpreadsheetFieldRulesInput<ResolveSpreadsheetColumnValue<TOptions[number], TParse, TMultiple>> | undefined>(key: TKey, options: SpreadsheetEnumColumnOptions<TContext, TOptions[number], TRequired, Exclude<TMultiple, undefined>, ResolveSpreadsheetColumnValue<TOptions[number], TParse, TMultiple>> & {
97
- rules?: TRulesInput;
98
- options: TOptions;
99
- }) => SpreadsheetColumnDefinition<TKey, ResolveSpreadsheetColumnValue<TOptions[number], TParse, TMultiple>, TRequired, TContext, TRulesInput>;
100
- option: SpreadsheetOptionColumnBuilder<TContext>;
101
- }
102
- export type SpreadsheetGroupBuilder = <TKey extends string, TColumns extends readonly SpreadsheetStaticColumnEntry[]>(key: TKey, columns: TColumns) => SpreadsheetColumnGroupDefinition<TKey, TColumns>;
103
- type ArrayElement<TValue> = TValue extends readonly (infer TItem)[] ? TItem : never;
104
- type SpreadsheetDynamicCollectionCallback<TParams, TResult> = (params: TParams) => TResult;
105
- type SpreadsheetDynamicCallback<TParams, TResult> = (params: TParams) => TResult;
106
- type SpreadsheetDynamicItemCallback<TResult> = SpreadsheetDynamicCallback<unknown, TResult>;
107
- export interface SpreadsheetDynamicTextValueDefinition {
108
- kind: 'text';
109
- modifiers?: readonly SpreadsheetModifier[];
170
+ export interface SpreadsheetNumberOptions {
171
+ /** Decimal separator of the file. Defaults to `.`; thousands separators are ignored. */
172
+ decimal?: '.' | ',';
110
173
  }
111
- export interface SpreadsheetDynamicNumberValueDefinition {
112
- kind: 'number';
174
+ export interface SpreadsheetDateOptions {
175
+ /**
176
+ * Text formats to read, like `dd/MM/yyyy` or `MMMM d, yyyy h:mm a`. Excel dates are read
177
+ * whatever the format. The value is an ISO date, with the time when the format has one.
178
+ */
179
+ formats?: readonly string[];
113
180
  }
114
- export interface SpreadsheetDynamicDateValueDefinition {
115
- kind: 'date';
181
+ export interface SpreadsheetBooleanOptions {
182
+ /** Texts read as `true`. Defaults to yes, oui, true, vrai, x, 1. */
183
+ true?: readonly string[];
184
+ /** Texts read as `false`. Defaults to no, non, false, faux, 0. */
185
+ false?: readonly string[];
116
186
  }
117
- export interface SpreadsheetDynamicBooleanValueDefinition {
118
- kind: 'boolean';
119
- }
120
- export interface SpreadsheetDynamicOptionsValueDefinition<TOption extends SpreadsheetOptionItem = SpreadsheetOptionItem, TMode extends 'single' | 'multiple' = 'single'> {
121
- kind: 'options';
122
- from: readonly TOption[];
123
- mode: TMode;
124
- separator?: string;
125
- matchBy: 'label' | 'value';
126
- itemModifiers?: readonly SpreadsheetModifier[];
127
- }
128
- export type SpreadsheetDynamicValueDefinition = SpreadsheetDynamicTextValueDefinition | SpreadsheetDynamicNumberValueDefinition | SpreadsheetDynamicDateValueDefinition | SpreadsheetDynamicBooleanValueDefinition | SpreadsheetDynamicOptionsValueDefinition<SpreadsheetOptionItem, 'single' | 'multiple'>;
129
- type SpreadsheetDynamicResolvedValue<TValueDefinition> = TValueDefinition extends SpreadsheetDynamicTextValueDefinition ? string : TValueDefinition extends SpreadsheetDynamicNumberValueDefinition ? number : TValueDefinition extends SpreadsheetDynamicDateValueDefinition ? string : TValueDefinition extends SpreadsheetDynamicBooleanValueDefinition ? boolean : TValueDefinition extends SpreadsheetDynamicOptionsValueDefinition<infer TOption, infer TMode> ? TMode extends 'multiple' ? InferSpreadsheetOptionValue<TOption>[] : InferSpreadsheetOptionValue<TOption> : never;
130
- type SpreadsheetDynamicDefaultArrayItem<TId extends string, TValueDefinition extends SpreadsheetDynamicValueDefinition> = SpreadsheetDynamicResolvedValue<TValueDefinition> extends infer TResult ? TResult extends readonly unknown[] ? {
131
- id: TId;
132
- values: TResult;
133
- } : {
134
- id: TId;
135
- value: TResult;
136
- } : never;
137
- type SpreadsheetDynamicDefaultRecordValue<TValueDefinition extends SpreadsheetDynamicValueDefinition> = SpreadsheetDynamicResolvedValue<TValueDefinition>;
138
- interface SpreadsheetDynamicBuildParams<TSource, TId extends string, TValueDefinition extends SpreadsheetDynamicValueDefinition> {
139
- id: TId;
140
- source: TSource;
141
- value?: SpreadsheetDynamicResolvedValue<TValueDefinition>;
142
- values?: SpreadsheetDynamicResolvedValue<TValueDefinition>;
143
- }
144
- export interface SpreadsheetDynamicValueBuilder {
145
- text: (config?: {
146
- modifiers?: readonly SpreadsheetModifier[];
147
- }) => SpreadsheetDynamicTextValueDefinition;
148
- number: () => SpreadsheetDynamicNumberValueDefinition;
149
- date: () => SpreadsheetDynamicDateValueDefinition;
150
- boolean: () => SpreadsheetDynamicBooleanValueDefinition;
151
- options<const TOption extends SpreadsheetOptionItem, TMode extends 'single' | 'multiple' = 'single'>(config: {
152
- from: readonly TOption[];
153
- mode?: TMode;
154
- separator?: string;
155
- matchBy: 'label' | 'value';
156
- itemModifiers?: readonly SpreadsheetModifier[];
157
- }): SpreadsheetDynamicOptionsValueDefinition<TOption, TMode>;
158
- }
159
- type SpreadsheetDynamicValueInput = SpreadsheetDynamicValueDefinition | ((value: SpreadsheetDynamicValueBuilder) => SpreadsheetValue);
160
- type ResolveSpreadsheetDynamicValueInput<TValueInput> = TValueInput extends (...args: infer _Args) => infer TValueDefinition ? TValueDefinition extends SpreadsheetDynamicValueDefinition ? TValueDefinition : never : TValueInput extends SpreadsheetDynamicValueDefinition ? TValueInput : never;
161
- interface SpreadsheetDynamicCollectionItemContract<TSource = unknown> {
162
- id: string;
163
- match: SpreadsheetMatchDefinition;
164
- value: SpreadsheetDynamicValueInput;
165
- build?: SpreadsheetDynamicCollectionCallback<SpreadsheetDynamicBuildParams<TSource, string, SpreadsheetDynamicValueDefinition>, unknown>;
166
- }
167
- export interface SpreadsheetDynamicCollectionItemDefinition<TId extends string = string, TValueInput extends SpreadsheetDynamicValueInput = SpreadsheetDynamicValueInput, TSource = unknown, TBuild = unknown> {
168
- id: TId;
169
- match: SpreadsheetMatchDefinition;
170
- value: TValueInput;
171
- build?: SpreadsheetDynamicCollectionCallback<SpreadsheetDynamicBuildParams<TSource, TId, ResolveSpreadsheetDynamicValueInput<TValueInput>>, TBuild>;
172
- source?: TSource;
173
- }
174
- export interface SpreadsheetDynamicCollectionDefinition<TRootKey extends string = string, TAs extends 'array' | 'record' = 'record', TItems = readonly unknown[], TOutput = unknown> {
175
- kind: 'collection';
176
- rootKey: TRootKey;
177
- as: TAs;
178
- items: TItems;
179
- __outputType?: TOutput;
187
+ export type SpreadsheetSelectOptions<TContext, TRow, TOption, TMultiple, TRequired, TDefault, TWhen, TFrom> = SpreadsheetColumnCommonOptions<TContext, TRow, InferSpreadsheetOptionValue<TOption>> & SpreadsheetTypedOptions<TContext, TRow, TMultiple, TRequired, TDefault, TWhen> & {
188
+ /**
189
+ * The known values: a list, a query, a remote loader, or `({ ctx, row }) => list`. A cell
190
+ * matches an option on its label, value, or an alias, exactly.
191
+ */
192
+ options: SpreadsheetOptionsInput<TContext, TOption, TRow>;
193
+ /** Reads the cell of a column declared above, like a product from an exam name. */
194
+ from?: TFrom;
195
+ /** What to do with a value that is not an option. Defaults to `ask`. */
196
+ unknown?: SpreadsheetUnknownPolicy;
197
+ };
198
+ type SpreadsheetBuilderKind = 'root' | 'group' | 'factory';
199
+ /** What the row looks like to the callbacks of a column. */
200
+ type SpreadsheetScope<TKind, TRow, TOuter, TGroupKey extends string> = TKind extends 'group' ? SpreadsheetPrettify<TOuter & {
201
+ [K in TGroupKey]: SpreadsheetPrettify<TRow>;
202
+ }> : TKind extends 'factory' ? SpreadsheetPrettify<TOuter> : SpreadsheetPrettify<TRow>;
203
+ type SpreadsheetNext<TKind, TContext, TRow, TOuter, TGroupKey extends string, TKey extends string, TValue, TOptional> = TKind extends 'group' ? SpreadsheetGroupBuilder<TContext, TOuter, TGroupKey, SpreadsheetWith<TRow, TKey, TValue, TOptional>> : TKind extends 'factory' ? SpreadsheetColumnSpec<TKey, TValue> : SpreadsheetColumnsBuilder<TContext, SpreadsheetWith<TRow, TKey, TValue, TOptional>>;
204
+ type SpreadsheetScalarMethod<TKind extends SpreadsheetBuilderKind, TContext, TRow, TOuter, TGroupKey extends string, TFallback, TExtra> = <const TKey extends string, TParsed = never, TMultiple extends boolean | SpreadsheetMultipleOptions | undefined = undefined, TRequired extends boolean | undefined = undefined, TDefault extends SpreadsheetItems<SpreadsheetItem<TParsed, TFallback>, TMultiple> = never, TWhen extends boolean = never>(key: SpreadsheetNewKey<TKey, TRow>, options?: SpreadsheetScalarOptions<TContext, SpreadsheetScope<TKind, TRow, TOuter, TGroupKey>, SpreadsheetItem<TParsed, TFallback>, TParsed, TMultiple, TRequired, TDefault, TWhen> & TExtra) => SpreadsheetNext<TKind, TContext, TRow, TOuter, TGroupKey, TKey, NoInfer<SpreadsheetColumnValue<SpreadsheetItem<TParsed, TFallback>, TMultiple, TRequired, TDefault>>, NoInfer<SpreadsheetIsOptional<TWhen>>>;
205
+ /** The column methods every builder has: text, number, date, boolean, select. */
206
+ export interface SpreadsheetColumnMethods<TKind extends SpreadsheetBuilderKind, TContext, TRow, TOuter, TGroupKey extends string> {
207
+ text: SpreadsheetScalarMethod<TKind, TContext, TRow, TOuter, TGroupKey, string, NonNullable<unknown>>;
208
+ number: SpreadsheetScalarMethod<TKind, TContext, TRow, TOuter, TGroupKey, number, SpreadsheetNumberOptions>;
209
+ date: SpreadsheetScalarMethod<TKind, TContext, TRow, TOuter, TGroupKey, string, SpreadsheetDateOptions>;
210
+ boolean: SpreadsheetScalarMethod<TKind, TContext, TRow, TOuter, TGroupKey, boolean, SpreadsheetBooleanOptions>;
211
+ select: <const TKey extends string, const TOption extends SpreadsheetOptionItem, TMultiple extends boolean | SpreadsheetMultipleOptions | undefined = undefined, TRequired extends boolean | undefined = undefined, TDefault extends SpreadsheetItems<InferSpreadsheetOptionValue<TOption>, TMultiple> = never, TWhen extends boolean = never, const TFrom extends SpreadsheetFieldPath<SpreadsheetScope<TKind, TRow, TOuter, TGroupKey>> = never>(key: SpreadsheetNewKey<TKey, TRow>, options: SpreadsheetSelectOptions<TContext, SpreadsheetScope<TKind, TRow, TOuter, TGroupKey>, TOption, TMultiple, TRequired, TDefault, TWhen, TFrom>) => SpreadsheetNext<TKind, TContext, TRow, TOuter, TGroupKey, TKey, NoInfer<SpreadsheetColumnValue<InferSpreadsheetOptionValue<TOption>, TMultiple, TRequired, TDefault>>, NoInfer<SpreadsheetIsOptional<TWhen>>>;
180
212
  }
181
- export interface SpreadsheetDynamicOptionGroupsDefinition<TKey extends string = string, TInto extends string = string, TValue = unknown> {
182
- kind: 'option-groups';
183
- key: TKey;
184
- source?: readonly unknown[];
185
- itemKey?: SpreadsheetDynamicItemCallback<string>;
186
- itemLabel?: SpreadsheetDynamicItemCallback<string>;
187
- targetKey?: SpreadsheetDynamicItemCallback<string>;
188
- header?: {
189
- strategy: 'exact' | 'template' | 'patterns';
190
- template?: SpreadsheetDynamicCallback<{
191
- source: unknown;
192
- }, string>;
193
- patterns?: SpreadsheetDynamicCallback<{
194
- source: unknown;
195
- }, readonly (string | RegExp)[]>;
196
- };
197
- options?: readonly SpreadsheetOptionItem<TValue>[] | SpreadsheetDynamicCollectionCallback<unknown, readonly SpreadsheetOptionItem<TValue>[]>;
198
- values?: {
199
- mode: 'single' | 'csv';
200
- separator?: string;
201
- resolve: 'label' | 'value';
202
- itemModifiers?: readonly SpreadsheetModifier[];
203
- };
204
- output: {
205
- into: TInto;
206
- };
207
- __valueType?: TValue;
213
+ /**
214
+ * The `c` of `columns: (c) => c.text(…).select(…)`. Each method adds a column and returns the
215
+ * builder; callbacks of a column receive the row so far, typed.
216
+ */
217
+ export interface SpreadsheetColumnsBuilder<TContext, TRow> extends SpreadsheetColumnMethods<'root', TContext, TRow, unknown, never> {
218
+ /** Columns nested under `key`; their callbacks also read the columns declared above the group. */
219
+ group: <const TKey extends string, TGroupRow, TWhen extends boolean = never>(key: SpreadsheetNewKey<TKey, TRow>, options: Omit<SpreadsheetGroupOptions<TContext>, 'when'> & {
220
+ when?: (params: {
221
+ ctx: TContext;
222
+ }) => TWhen;
223
+ }, build: (group: SpreadsheetGroupBuilder<TContext, SpreadsheetPrettify<TRow>, TKey, NonNullable<unknown>>) => SpreadsheetGroupBuilder<TContext, SpreadsheetPrettify<TRow>, TKey, TGroupRow>) => SpreadsheetColumnsBuilder<TContext, SpreadsheetWith<TRow, TKey, SpreadsheetPrettify<TGroupRow>, NoInfer<SpreadsheetIsOptional<TWhen>>>>;
224
+ /**
225
+ * A group with one column per item of the context, like one column per affiliation group. Its
226
+ * value is a record keyed by the columns' keys.
227
+ */
228
+ dynamic: <const TKey extends string, TItem, TValue, TWhen extends boolean = never>(key: SpreadsheetNewKey<TKey, TRow>, options: Omit<SpreadsheetGroupOptions<TContext>, 'when'> & {
229
+ when?: (params: {
230
+ ctx: TContext;
231
+ }) => TWhen;
232
+ /** The items, one column each. */
233
+ items: (params: {
234
+ ctx: TContext;
235
+ }) => readonly TItem[];
236
+ /** The column of an item, built with `c`. */
237
+ column: (item: TItem, c: SpreadsheetColumnFactory<TContext, SpreadsheetPrettify<TRow>>) => SpreadsheetColumnSpec<string, TValue>;
238
+ }) => SpreadsheetColumnsBuilder<TContext, SpreadsheetWith<TRow, TKey, {
239
+ [key: string]: TValue;
240
+ }, NoInfer<SpreadsheetIsOptional<TWhen>>>>;
241
+ /** Runtime: the columns declared so far. */
242
+ readonly '~entries': readonly SpreadsheetEntry[];
243
+ /** Type only. */
244
+ readonly '~row'?: TRow;
208
245
  }
209
- export type SpreadsheetBuiltDynamicOptionGroupsDefinition<TKey extends string, TSource extends readonly unknown[], TOption extends SpreadsheetOptionItem, TValue, TInto extends string> = Omit<SpreadsheetDynamicOptionGroupsDefinition<TKey, TInto, TValue>, 'source' | 'itemKey' | 'itemLabel' | 'targetKey' | 'header' | 'options' | 'values'> & {
210
- source: TSource;
211
- itemKey: (item: ArrayElement<TSource>) => string;
212
- itemLabel: (item: ArrayElement<TSource>) => string;
213
- targetKey?: (item: ArrayElement<TSource>) => string;
214
- header: {
215
- strategy: 'exact' | 'template' | 'patterns';
216
- template?: (params: {
217
- source: ArrayElement<TSource>;
218
- }) => string;
219
- patterns?: (params: {
220
- source: ArrayElement<TSource>;
221
- }) => readonly (string | RegExp)[];
222
- };
223
- options: readonly TOption[] | ((item: ArrayElement<TSource>) => readonly TOption[]);
224
- values: {
225
- mode: 'single' | 'csv';
226
- separator?: string;
227
- resolve: 'label' | 'value';
228
- itemModifiers?: readonly SpreadsheetModifier[];
229
- };
230
- };
231
- export type SpreadsheetDynamicColumnEntry = SpreadsheetDynamicOptionGroupsDefinition<string, string, unknown> | SpreadsheetDynamicCollectionDefinition<string, 'array' | 'record', readonly SpreadsheetDynamicCollectionItemDefinition[], unknown>;
232
- export interface SpreadsheetDynamicBuilder<TContext = unknown> {
233
- optionGroups: <TKey extends string, TSource extends readonly unknown[], const TOption extends SpreadsheetOptionItem, TInto extends string>(config: {
234
- key: TKey;
235
- source: TSource;
236
- itemKey: (item: ArrayElement<TSource>) => string;
237
- itemLabel: (item: ArrayElement<TSource>) => string;
238
- targetKey?: (item: ArrayElement<TSource>) => string;
239
- header: {
240
- strategy: 'exact' | 'template' | 'patterns';
241
- template?: (params: {
242
- source: ArrayElement<TSource>;
243
- }) => string;
244
- patterns?: (params: {
245
- source: ArrayElement<TSource>;
246
- }) => readonly (string | RegExp)[];
247
- };
248
- options: readonly TOption[] | ((item: ArrayElement<TSource>) => readonly TOption[]);
249
- values: {
250
- mode: 'single' | 'csv';
251
- separator?: string;
252
- resolve: 'label' | 'value';
253
- itemModifiers?: readonly SpreadsheetModifier[];
254
- };
255
- output: {
256
- into: TInto;
257
- };
258
- }) => SpreadsheetBuiltDynamicOptionGroupsDefinition<TKey, TSource, TOption, InferSpreadsheetOptionValue<TOption>, TInto>;
259
- arrayFromCollection: <TRootKey extends string, TSource extends readonly unknown[], TItem extends SpreadsheetDynamicCollectionItemContract<TSource[number]>>(rootKey: TRootKey, config: {
260
- from: SpreadsheetDynamicCollectionCallback<{
261
- context: TContext;
262
- }, TSource>;
263
- each: SpreadsheetDynamicCollectionCallback<TSource[number], TItem>;
264
- }) => SpreadsheetDynamicCollectionDefinition<TRootKey, 'array', readonly TItem[], TItem extends {
265
- id: infer TId extends string;
266
- value: infer TValueInput;
267
- build?: infer TBuild;
268
- } ? [TBuild] extends [unknown] ? SpreadsheetDynamicDefaultArrayItem<TId, ResolveSpreadsheetDynamicValueInput<TValueInput>> : TBuild : never>;
269
- recordFromCollection: <TRootKey extends string, TSource extends readonly unknown[], TItem extends SpreadsheetDynamicCollectionItemContract<TSource[number]>>(rootKey: TRootKey, config: {
270
- from: SpreadsheetDynamicCollectionCallback<{
271
- context: TContext;
272
- }, TSource>;
273
- each: SpreadsheetDynamicCollectionCallback<TSource[number], TItem>;
274
- }) => SpreadsheetDynamicCollectionDefinition<TRootKey, 'record', readonly TItem[], TItem extends {
275
- value: infer TValueInput;
276
- build?: infer TBuild;
277
- } ? [TBuild] extends [unknown] ? SpreadsheetDynamicDefaultRecordValue<ResolveSpreadsheetDynamicValueInput<TValueInput>> : TBuild : never>;
246
+ /** The builder inside a group. */
247
+ export interface SpreadsheetGroupBuilder<TContext, TOuter, TGroupKey extends string, TRow> extends SpreadsheetColumnMethods<'group', TContext, TRow, TOuter, TGroupKey> {
248
+ /** Runtime: the columns declared so far. */
249
+ readonly '~entries': readonly SpreadsheetEntry[];
250
+ /** Type only. */
251
+ readonly '~row'?: TRow;
278
252
  }
279
- export interface SpreadsheetColumnsDefinition<TContext = unknown> {
280
- static?: readonly unknown[] | ((column: SpreadsheetColumnBuilder<TContext>, group: SpreadsheetGroupBuilder) => readonly unknown[]);
281
- dynamic?: (params: {
282
- dynamic: SpreadsheetDynamicBuilder<TContext>;
283
- context: TContext;
284
- }) => readonly unknown[];
253
+ /** The `c` of a dynamic group's `column`: each method returns one column. */
254
+ export type SpreadsheetColumnFactory<TContext, TScope> = SpreadsheetColumnMethods<'factory', TContext, NonNullable<unknown>, TScope, never>;
255
+ /** One column built by a factory. */
256
+ export interface SpreadsheetColumnSpec<TKey extends string, TValue> extends SpreadsheetColumnEntry<TKey> {
257
+ /** Type only. */
258
+ readonly '~value'?: TValue;
285
259
  }
286
- type ResolveSpreadsheetCollection<TCollection> = TCollection extends (...args: infer _Args) => infer TResult ? TResult : TCollection;
287
- export type SpreadsheetResolvedColumns<TColumns> = TColumns extends {
288
- static?: infer TStatic;
289
- } ? Omit<TColumns, 'static'> & {
290
- static?: ResolveSpreadsheetCollection<TStatic>;
291
- } : TColumns;
260
+ /** Row type of a columns builder. */
261
+ export type SpreadsheetRowOf<TBuilder> = TBuilder extends {
262
+ '~row'?: infer TRow;
263
+ } ? SpreadsheetPrettify<TRow> : never;
264
+ type SpreadsheetIsNested<TValue> = [NonNullable<TValue>] extends [never] ? false : NonNullable<TValue> extends readonly unknown[] ? false : NonNullable<TValue> extends Record<string, unknown> ? true : false;
265
+ /** Path of every field of a row, like `secureCode` or `levels.general`. */
266
+ export type SpreadsheetFieldPath<TRow> = string extends keyof TRow ? string : {
267
+ [TKey in keyof TRow & string]: SpreadsheetIsNested<TRow[TKey]> extends true ? `${TKey}.${SpreadsheetFieldPath<NonNullable<TRow[TKey]>>}` : TKey;
268
+ }[keyof TRow & string];
269
+ /** Value of a field path in a row. */
270
+ export type SpreadsheetFieldValue<TRow, TPath extends string> = TPath extends `${infer THead}.${infer TRest}` ? THead extends keyof TRow ? SpreadsheetFieldValue<NonNullable<TRow[THead]>, TRest> : never : TPath extends keyof TRow ? TRow[TPath] : never;
292
271
  export {};
@@ -0,0 +1,64 @@
1
+ import type { SpreadsheetColumnKind, SpreadsheetHeaderMatcher, SpreadsheetUnknownPolicy } from './columns.js';
2
+ import type { SpreadsheetOptionItem, SpreadsheetOptionsCreate, SpreadsheetOptionsSource } from './options.js';
3
+ import type { SpreadsheetCell, SpreadsheetRecord } from './shared.js';
4
+ import type { SpreadsheetRule } from './validation.js';
5
+ /** A group of fields, resolved for the current context. */
6
+ export interface SpreadsheetFieldGroup {
7
+ /** Path of the group in the row. */
8
+ path: string;
9
+ label: string;
10
+ description: string;
11
+ /** Its columns are built from the context. */
12
+ dynamic: boolean;
13
+ }
14
+ /**
15
+ * A column of the schema, resolved for the current context: groups flattened, `when` applied,
16
+ * texts and rules resolved.
17
+ */
18
+ export interface SpreadsheetField {
19
+ /** Path in the row, like `secureCode` or `levels.general`. */
20
+ path: string;
21
+ kind: SpreadsheetColumnKind;
22
+ label: string;
23
+ /** Name of the column in files: the first declared header, or the label. */
24
+ name: string;
25
+ description: string;
26
+ example: string;
27
+ group: SpreadsheetFieldGroup | null;
28
+ /** Names the column matches, the label and the key included. */
29
+ headers: readonly SpreadsheetHeaderMatcher[];
30
+ required: boolean;
31
+ /** Default value of a row: the declared value, or the result of `default({ ctx, row })`. */
32
+ defaultOf: ((row: SpreadsheetRecord) => unknown) | null;
33
+ hasDefault: boolean;
34
+ /** Rules of a row; rules reading the row are resolved for each row. */
35
+ rulesOf: (row: SpreadsheetRecord) => readonly SpreadsheetRule<unknown>[];
36
+ /** The rules do not read the row. */
37
+ staticRules: boolean;
38
+ editable: boolean;
39
+ /** Item separator with `multiple`, or `null`. */
40
+ separator: string | null;
41
+ parse: ((params: {
42
+ cell: SpreadsheetCell;
43
+ ctx: unknown;
44
+ row: SpreadsheetRecord;
45
+ }) => unknown) | null;
46
+ decimal: '.' | ',';
47
+ formats: readonly string[];
48
+ trueTexts: readonly string[];
49
+ falseTexts: readonly string[];
50
+ /** `select` columns only. */
51
+ select: {
52
+ source: SpreadsheetOptionsSource<unknown, SpreadsheetOptionItem, unknown>;
53
+ create: SpreadsheetOptionsCreate<unknown, SpreadsheetOptionItem> | null;
54
+ /** Path of the field whose cell the select reads, or `null` for its own column. */
55
+ from: string | null;
56
+ unknown: SpreadsheetUnknownPolicy;
57
+ /** Options that depend on the row: resolved per row, for the fields they read. */
58
+ rowOptions: {
59
+ resolve: (row: SpreadsheetRecord) => readonly SpreadsheetOptionItem[];
60
+ /** Field paths the options read. */
61
+ dependsOn: readonly string[];
62
+ } | null;
63
+ } | null;
64
+ }