@tinya-code/gas-admin-ui 0.2.0-alpha.13 → 0.2.0-alpha.15

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 (368) hide show
  1. package/ng-package.json +7 -0
  2. package/package.json +3 -15
  3. package/src/lib/actions/action-registry.spec.ts +52 -0
  4. package/src/lib/actions/action-registry.ts +126 -0
  5. package/src/lib/actions/action-service.spec.ts +215 -0
  6. package/src/lib/actions/action-service.ts +87 -0
  7. package/src/lib/actions/descriptors.spec.ts +155 -0
  8. package/src/lib/actions/descriptors.ts +154 -0
  9. package/src/lib/columns/column-cell.ts +33 -0
  10. package/src/lib/columns/column-defaults.spec.ts +99 -0
  11. package/src/lib/columns/column-defaults.ts +84 -0
  12. package/src/lib/columns/column-format.spec.ts +274 -0
  13. package/src/lib/columns/descriptors.ts +113 -0
  14. package/src/lib/columns/format-badge.ts +51 -0
  15. package/src/lib/columns/format-boolean.ts +58 -0
  16. package/src/lib/columns/format-currency.ts +30 -0
  17. package/src/lib/columns/format-date.ts +35 -0
  18. package/src/lib/columns/format-number.ts +32 -0
  19. package/src/lib/columns/format-text.ts +23 -0
  20. package/src/lib/columns/format-thumbnail.ts +63 -0
  21. package/src/lib/core/adapters/firebase-auth.adapter.ts +6 -0
  22. package/src/lib/core/guards/auth.guard.spec.ts +88 -0
  23. package/src/lib/core/guards/auth.guard.ts +48 -0
  24. package/src/lib/core/guards/unsaved-changes.guard.ts +16 -0
  25. package/src/lib/core/interceptors/api-error.interceptor.spec.ts +182 -0
  26. package/src/lib/core/interceptors/api-error.interceptor.ts +87 -0
  27. package/src/lib/core/models/api.model.ts +104 -0
  28. package/src/lib/core/models/schema-descriptions.ts +118 -0
  29. package/src/lib/core/models/schema.model.ts +1097 -0
  30. package/src/lib/core/registry/composition-validator.spec.ts +358 -0
  31. package/src/lib/core/registry/composition-validator.ts +270 -0
  32. package/src/lib/core/registry/field-validators.spec.ts +199 -0
  33. package/src/lib/core/registry/field-validators.ts +440 -0
  34. package/src/lib/core/registry/render-host.spec.ts +208 -0
  35. package/src/lib/core/registry/render-host.ts +646 -0
  36. package/src/lib/core/registry/render-registry.spec.ts +96 -0
  37. package/src/lib/core/registry/render-registry.ts +312 -0
  38. package/src/lib/core/registry/schema-catalog.ts +156 -0
  39. package/src/lib/core/services/api.service.spec.ts +1142 -0
  40. package/src/lib/core/services/api.service.ts +371 -0
  41. package/src/lib/core/services/auth.service.spec.ts +653 -0
  42. package/src/lib/core/services/auth.service.ts +503 -0
  43. package/src/lib/core/services/config.service.spec.ts +121 -0
  44. package/src/lib/core/services/config.service.ts +119 -0
  45. package/src/lib/core/services/data-source.service.spec.ts +179 -0
  46. package/src/lib/core/services/data-source.service.ts +142 -0
  47. package/src/lib/core/services/error-mapper.service.spec.ts +50 -0
  48. package/src/lib/core/services/error-mapper.service.ts +49 -0
  49. package/src/lib/core/services/notification.service.ts +73 -0
  50. package/src/lib/core/services/relation-drawer.service.ts +41 -0
  51. package/src/lib/core/services/theme.service.spec.ts +106 -0
  52. package/src/lib/core/services/theme.service.ts +86 -0
  53. package/src/lib/core/services/transport.spec.ts +198 -0
  54. package/src/lib/core/services/transport.ts +164 -0
  55. package/src/lib/core/services/upload.service.ts +81 -0
  56. package/src/lib/core/testing/categories.schema.ts +125 -0
  57. package/src/lib/core/testing/orders.schema.ts +372 -0
  58. package/src/lib/core/testing/products.schema.ts +258 -0
  59. package/src/lib/core/testing/site.schema.ts +195 -0
  60. package/src/lib/core/testing/test-catalog.ts +21 -0
  61. package/src/lib/core/tokens.ts +112 -0
  62. package/src/lib/core/utils/clipboard.spec.ts +55 -0
  63. package/src/lib/core/utils/clipboard.ts +90 -0
  64. package/src/lib/core/utils/context-resolver.spec.ts +95 -0
  65. package/src/lib/core/utils/context-resolver.ts +101 -0
  66. package/src/lib/core/utils/response-unwrapper.spec.ts +70 -0
  67. package/src/lib/core/utils/response-unwrapper.ts +103 -0
  68. package/src/lib/core/utils/source-options.spec.ts +96 -0
  69. package/src/lib/core/utils/source-options.ts +54 -0
  70. package/src/lib/core/utils/template-interpolator.spec.ts +59 -0
  71. package/src/lib/core/utils/template-interpolator.ts +56 -0
  72. package/src/lib/core/view-navigation/view-navigation.service.spec.ts +207 -0
  73. package/src/lib/core/view-navigation/view-navigation.service.ts +132 -0
  74. package/src/lib/fields/boolean/boolean.descriptor.ts +11 -0
  75. package/src/lib/fields/boolean/boolean.ts +40 -0
  76. package/src/lib/fields/color/color.descriptor.ts +12 -0
  77. package/src/lib/fields/color/color.ts +34 -0
  78. package/src/lib/fields/currency/currency.descriptor.ts +12 -0
  79. package/src/lib/fields/currency/currency.ts +67 -0
  80. package/src/lib/fields/date/date.descriptor.ts +12 -0
  81. package/src/lib/fields/date/date.ts +36 -0
  82. package/src/lib/fields/descriptors.ts +122 -0
  83. package/src/lib/fields/display/display-badge.ts +65 -0
  84. package/src/lib/fields/display/display-date.ts +39 -0
  85. package/src/lib/fields/display/display-defaults.ts +84 -0
  86. package/src/lib/fields/display/display-file.ts +41 -0
  87. package/src/lib/fields/display/display-image.ts +54 -0
  88. package/src/lib/fields/display/display-list.ts +107 -0
  89. package/src/lib/fields/display/display-number.ts +41 -0
  90. package/src/lib/fields/display/display-text.ts +42 -0
  91. package/src/lib/fields/display/display.spec.ts +242 -0
  92. package/src/lib/fields/dropdown/dropdown.descriptor.ts +12 -0
  93. package/src/lib/fields/dropdown/dropdown.ts +45 -0
  94. package/src/lib/fields/email/email.descriptor.ts +12 -0
  95. package/src/lib/fields/email/email.ts +28 -0
  96. package/src/lib/fields/field-aria.ts +60 -0
  97. package/src/lib/fields/field-host/field-host.spec.ts +118 -0
  98. package/src/lib/fields/field-host/field-host.ts +47 -0
  99. package/src/lib/fields/field-node.ts +88 -0
  100. package/src/lib/fields/file/file.descriptor.ts +14 -0
  101. package/src/lib/fields/file/file.spec.ts +134 -0
  102. package/src/lib/fields/file/file.ts +281 -0
  103. package/src/lib/fields/group/group.descriptor.ts +21 -0
  104. package/src/lib/fields/group/group.ts +110 -0
  105. package/src/lib/fields/image/image.descriptor.ts +12 -0
  106. package/src/lib/fields/image/image.spec.ts +117 -0
  107. package/src/lib/fields/image/image.ts +281 -0
  108. package/src/lib/fields/key-value/key-value.descriptor.ts +11 -0
  109. package/src/lib/fields/key-value/key-value.ts +283 -0
  110. package/src/lib/fields/list/list.descriptor.ts +21 -0
  111. package/src/lib/fields/list/list.ts +376 -0
  112. package/src/lib/fields/multiselect/multiselect.descriptor.ts +11 -0
  113. package/src/lib/fields/multiselect/multiselect.spec.ts +142 -0
  114. package/src/lib/fields/multiselect/multiselect.ts +152 -0
  115. package/src/lib/fields/number/number.descriptor.ts +12 -0
  116. package/src/lib/fields/number/number.ts +40 -0
  117. package/src/lib/fields/phone/phone.descriptor.ts +12 -0
  118. package/src/lib/fields/phone/phone.ts +46 -0
  119. package/src/lib/fields/readonly-text/readonly-text.descriptor.ts +12 -0
  120. package/src/lib/fields/readonly-text/readonly-text.ts +58 -0
  121. package/src/lib/fields/relation/relation.descriptor.ts +12 -0
  122. package/src/lib/fields/relation/relation.spec.ts +193 -0
  123. package/src/lib/fields/relation/relation.ts +224 -0
  124. package/src/lib/fields/rich-select/rich-select.descriptor.ts +12 -0
  125. package/src/lib/fields/rich-select/rich-select.ts +175 -0
  126. package/src/lib/fields/select/radio-mode.ts +25 -0
  127. package/src/lib/fields/select/select.descriptor.ts +12 -0
  128. package/src/lib/fields/select/select.spec.ts +162 -0
  129. package/src/lib/fields/select/select.ts +210 -0
  130. package/src/lib/fields/slug/slug.descriptor.ts +19 -0
  131. package/src/lib/fields/slug/slug.ts +67 -0
  132. package/src/lib/fields/string-list/string-list.descriptor.ts +11 -0
  133. package/src/lib/fields/string-list/string-list.ts +222 -0
  134. package/src/lib/fields/text/text.descriptor.ts +12 -0
  135. package/src/lib/fields/text/text.ts +35 -0
  136. package/src/lib/fields/textarea/textarea.descriptor.ts +12 -0
  137. package/src/lib/fields/textarea/textarea.spec.ts +117 -0
  138. package/src/lib/fields/textarea/textarea.ts +126 -0
  139. package/src/lib/fields/time/time.descriptor.ts +12 -0
  140. package/src/lib/fields/time/time.ts +28 -0
  141. package/src/lib/fields/unknown-render/unknown-render.ts +49 -0
  142. package/src/lib/fields/url/url.descriptor.ts +12 -0
  143. package/src/lib/fields/url/url.ts +53 -0
  144. package/src/lib/gas-admin-ui.spec.ts +21 -0
  145. package/src/lib/gas-admin-ui.ts +9 -0
  146. package/src/lib/layouts/descriptors.ts +9 -0
  147. package/src/lib/pages/dashboard/dashboard.ts +167 -0
  148. package/src/lib/pages/detail-view/detail-view.spec.ts +333 -0
  149. package/src/lib/pages/detail-view/detail-view.ts +570 -0
  150. package/src/lib/pages/drawer-form/drawer-form.ts +228 -0
  151. package/src/lib/pages/form-view/form-model.ts +88 -0
  152. package/src/lib/pages/form-view/form-schema.ts +255 -0
  153. package/src/lib/pages/form-view/form-view.ts +1622 -0
  154. package/src/lib/pages/list-view/list-view.formats.spec.ts +214 -0
  155. package/src/lib/pages/list-view/list-view.ts +882 -0
  156. package/src/lib/pages/login/login.spec.ts +109 -0
  157. package/src/lib/pages/login/login.ts +227 -0
  158. package/src/lib/pages/resource-page/resource-page.ts +234 -0
  159. package/src/lib/shared/components/badge/badge.ts +35 -0
  160. package/src/lib/shared/components/button/button.ts +65 -0
  161. package/src/lib/shared/components/confirm-dialog/confirm-dialog.ts +48 -0
  162. package/src/lib/shared/components/copy-button/copy-button.ts +56 -0
  163. package/src/lib/shared/components/copy-share/copy-share.spec.ts +122 -0
  164. package/src/lib/shared/components/copy-share/copy-share.ts +107 -0
  165. package/src/lib/shared/components/drawer/drawer.spec.ts +127 -0
  166. package/src/lib/shared/components/drawer/drawer.ts +172 -0
  167. package/src/lib/shared/components/empty-state/empty-state.ts +30 -0
  168. package/src/lib/shared/components/modal/modal.spec.ts +149 -0
  169. package/src/lib/shared/components/modal/modal.ts +145 -0
  170. package/src/lib/shared/components/post-create-modal/post-create-modal.spec.ts +165 -0
  171. package/src/lib/shared/components/post-create-modal/post-create-modal.ts +159 -0
  172. package/src/lib/shared/components/skeleton/skeleton.ts +31 -0
  173. package/src/lib/shared/components/toast/toast.ts +58 -0
  174. package/src/lib/shared/utils/col-span.ts +25 -0
  175. package/src/lib/shared/utils/condition-evaluator.ts +53 -0
  176. package/src/lib/shared/utils/depends-on.ts +48 -0
  177. package/src/lib/shared/utils/dialog-focus.ts +28 -0
  178. package/src/lib/shared/utils/field-path.ts +49 -0
  179. package/src/lib/shared/utils/gap-sorting.ts +144 -0
  180. package/src/lib/shared/utils/seed.spec.ts +64 -0
  181. package/src/lib/shared/utils/seed.ts +149 -0
  182. package/src/lib/shared/utils/slugify.ts +13 -0
  183. package/src/lib/shared/utils/validators.ts +41 -0
  184. package/src/lib/shell/layout/layout.ts +63 -0
  185. package/src/lib/shell/shell.routes.spec.ts +59 -0
  186. package/src/lib/shell/shell.routes.ts +122 -0
  187. package/src/lib/shell/sidebar/sidebar.ts +139 -0
  188. package/src/lib/shell/theme-toggle/theme-toggle.ts +74 -0
  189. package/src/lib/views/calendar-view/calendar-model.ts +426 -0
  190. package/src/lib/views/calendar-view/calendar-view.spec.ts +557 -0
  191. package/src/lib/views/calendar-view/calendar-view.ts +568 -0
  192. package/src/lib/views/composer/composer-host.spec.ts +301 -0
  193. package/src/lib/views/composer/composer-host.ts +248 -0
  194. package/src/lib/views/composer/composer-imports.spec.ts +54 -0
  195. package/src/lib/views/composer/view-context.spec.ts +117 -0
  196. package/src/lib/views/composer/view-context.ts +109 -0
  197. package/src/lib/views/composer/view-slot.spec.ts +130 -0
  198. package/src/lib/views/composer/view-slot.ts +178 -0
  199. package/src/lib/views/descriptors.ts +46 -0
  200. package/src/lib/views/kanban-view/kanban-model.ts +173 -0
  201. package/src/lib/views/kanban-view/kanban-view.spec.ts +540 -0
  202. package/src/lib/views/kanban-view/kanban-view.ts +327 -0
  203. package/src/lib/widgets/bar-chart/bar-chart.descriptor.ts +17 -0
  204. package/src/lib/widgets/bar-chart/bar-chart.spec.ts +66 -0
  205. package/src/lib/widgets/bar-chart/bar-chart.ts +76 -0
  206. package/src/lib/widgets/chart-line/chart-line.descriptor.ts +17 -0
  207. package/src/lib/widgets/chart-line/chart-line.spec.ts +113 -0
  208. package/src/lib/widgets/chart-line/chart-line.ts +219 -0
  209. package/src/lib/widgets/descriptors.ts +29 -0
  210. package/src/lib/widgets/metric-card/metric-card.descriptor.ts +41 -0
  211. package/src/lib/widgets/metric-card/metric-card.spec.ts +52 -0
  212. package/src/lib/widgets/metric-card/metric-card.ts +48 -0
  213. package/src/lib/widgets/quick-actions/quick-actions.descriptor.ts +13 -0
  214. package/src/lib/widgets/quick-actions/quick-actions.spec.ts +61 -0
  215. package/src/lib/widgets/quick-actions/quick-actions.ts +100 -0
  216. package/src/lib/widgets/record-list/record-list.descriptor.ts +16 -0
  217. package/src/lib/widgets/record-list/record-list.spec.ts +79 -0
  218. package/src/lib/widgets/record-list/record-list.ts +115 -0
  219. package/src/lib/widgets/series.spec.ts +42 -0
  220. package/src/lib/widgets/series.ts +56 -0
  221. package/src/lib/widgets/status-progress/status-progress.descriptor.ts +19 -0
  222. package/src/lib/widgets/status-progress/status-progress.spec.ts +63 -0
  223. package/src/lib/widgets/status-progress/status-progress.ts +104 -0
  224. package/src/lib/widgets/widget-host/widget-host.spec.ts +179 -0
  225. package/src/lib/widgets/widget-host/widget-host.ts +99 -0
  226. package/src/public-api.ts +104 -0
  227. package/tinya-code-gas-admin-ui-0.2.0-alpha.15.tgz +0 -0
  228. package/tsconfig.lib.json +13 -0
  229. package/tsconfig.lib.prod.json +11 -0
  230. package/tsconfig.spec.json +10 -0
  231. package/fesm2022/tinya-code-gas-admin-ui-badge-EeCA_l-o.mjs +0 -84
  232. package/fesm2022/tinya-code-gas-admin-ui-badge-EeCA_l-o.mjs.map +0 -1
  233. package/fesm2022/tinya-code-gas-admin-ui-bar-chart-G7sEMSBY.mjs +0 -140
  234. package/fesm2022/tinya-code-gas-admin-ui-bar-chart-G7sEMSBY.mjs.map +0 -1
  235. package/fesm2022/tinya-code-gas-admin-ui-boolean-B2ASKL0E.mjs +0 -113
  236. package/fesm2022/tinya-code-gas-admin-ui-boolean-B2ASKL0E.mjs.map +0 -1
  237. package/fesm2022/tinya-code-gas-admin-ui-button-BQjNW8KB.mjs +0 -163
  238. package/fesm2022/tinya-code-gas-admin-ui-button-BQjNW8KB.mjs.map +0 -1
  239. package/fesm2022/tinya-code-gas-admin-ui-calendar-view-DCY8bj2V.mjs +0 -1027
  240. package/fesm2022/tinya-code-gas-admin-ui-calendar-view-DCY8bj2V.mjs.map +0 -1
  241. package/fesm2022/tinya-code-gas-admin-ui-chart-line-BjdlKHoH.mjs +0 -278
  242. package/fesm2022/tinya-code-gas-admin-ui-chart-line-BjdlKHoH.mjs.map +0 -1
  243. package/fesm2022/tinya-code-gas-admin-ui-color-Dljh_By3.mjs +0 -107
  244. package/fesm2022/tinya-code-gas-admin-ui-color-Dljh_By3.mjs.map +0 -1
  245. package/fesm2022/tinya-code-gas-admin-ui-condition-evaluator-DY2k1M3C.mjs +0 -101
  246. package/fesm2022/tinya-code-gas-admin-ui-condition-evaluator-DY2k1M3C.mjs.map +0 -1
  247. package/fesm2022/tinya-code-gas-admin-ui-currency-BvuF3Z63.mjs +0 -141
  248. package/fesm2022/tinya-code-gas-admin-ui-currency-BvuF3Z63.mjs.map +0 -1
  249. package/fesm2022/tinya-code-gas-admin-ui-data-source.service-96FSbN72.mjs +0 -88
  250. package/fesm2022/tinya-code-gas-admin-ui-data-source.service-96FSbN72.mjs.map +0 -1
  251. package/fesm2022/tinya-code-gas-admin-ui-date-1SJGXZrd.mjs +0 -107
  252. package/fesm2022/tinya-code-gas-admin-ui-date-1SJGXZrd.mjs.map +0 -1
  253. package/fesm2022/tinya-code-gas-admin-ui-display-badge-fwk6sDU7.mjs +0 -140
  254. package/fesm2022/tinya-code-gas-admin-ui-display-badge-fwk6sDU7.mjs.map +0 -1
  255. package/fesm2022/tinya-code-gas-admin-ui-display-date-D7zLiDiG.mjs +0 -119
  256. package/fesm2022/tinya-code-gas-admin-ui-display-date-D7zLiDiG.mjs.map +0 -1
  257. package/fesm2022/tinya-code-gas-admin-ui-display-file-BiIhqvQC.mjs +0 -125
  258. package/fesm2022/tinya-code-gas-admin-ui-display-file-BiIhqvQC.mjs.map +0 -1
  259. package/fesm2022/tinya-code-gas-admin-ui-display-image-C1dhnZi1.mjs +0 -152
  260. package/fesm2022/tinya-code-gas-admin-ui-display-image-C1dhnZi1.mjs.map +0 -1
  261. package/fesm2022/tinya-code-gas-admin-ui-display-list-DOEuUbGe.mjs +0 -211
  262. package/fesm2022/tinya-code-gas-admin-ui-display-list-DOEuUbGe.mjs.map +0 -1
  263. package/fesm2022/tinya-code-gas-admin-ui-display-number-DDMzr4Hn.mjs +0 -116
  264. package/fesm2022/tinya-code-gas-admin-ui-display-number-DDMzr4Hn.mjs.map +0 -1
  265. package/fesm2022/tinya-code-gas-admin-ui-display-text-B8CdVNpv.mjs +0 -111
  266. package/fesm2022/tinya-code-gas-admin-ui-display-text-B8CdVNpv.mjs.map +0 -1
  267. package/fesm2022/tinya-code-gas-admin-ui-dropdown-C3blvmE1.mjs +0 -122
  268. package/fesm2022/tinya-code-gas-admin-ui-dropdown-C3blvmE1.mjs.map +0 -1
  269. package/fesm2022/tinya-code-gas-admin-ui-email-CT_O5ihA.mjs +0 -107
  270. package/fesm2022/tinya-code-gas-admin-ui-email-CT_O5ihA.mjs.map +0 -1
  271. package/fesm2022/tinya-code-gas-admin-ui-empty-state-BMc0QtoT.mjs +0 -109
  272. package/fesm2022/tinya-code-gas-admin-ui-empty-state-BMc0QtoT.mjs.map +0 -1
  273. package/fesm2022/tinya-code-gas-admin-ui-error-mapper.service-DY5y1FjE.mjs +0 -45
  274. package/fesm2022/tinya-code-gas-admin-ui-error-mapper.service-DY5y1FjE.mjs.map +0 -1
  275. package/fesm2022/tinya-code-gas-admin-ui-field-aria-BD1Wiggc.mjs +0 -50
  276. package/fesm2022/tinya-code-gas-admin-ui-field-aria-BD1Wiggc.mjs.map +0 -1
  277. package/fesm2022/tinya-code-gas-admin-ui-field-node-CIK6KNN_.mjs +0 -24
  278. package/fesm2022/tinya-code-gas-admin-ui-field-node-CIK6KNN_.mjs.map +0 -1
  279. package/fesm2022/tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs +0 -27
  280. package/fesm2022/tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs.map +0 -1
  281. package/fesm2022/tinya-code-gas-admin-ui-file-Dmxioog7.mjs +0 -408
  282. package/fesm2022/tinya-code-gas-admin-ui-file-Dmxioog7.mjs.map +0 -1
  283. package/fesm2022/tinya-code-gas-admin-ui-form-view-C709rc57.mjs +0 -4516
  284. package/fesm2022/tinya-code-gas-admin-ui-form-view-C709rc57.mjs.map +0 -1
  285. package/fesm2022/tinya-code-gas-admin-ui-format-badge-CK8ct5Wk.mjs +0 -82
  286. package/fesm2022/tinya-code-gas-admin-ui-format-badge-CK8ct5Wk.mjs.map +0 -1
  287. package/fesm2022/tinya-code-gas-admin-ui-format-boolean-ClzezZz-.mjs +0 -105
  288. package/fesm2022/tinya-code-gas-admin-ui-format-boolean-ClzezZz-.mjs.map +0 -1
  289. package/fesm2022/tinya-code-gas-admin-ui-format-currency-CVmniKml.mjs +0 -65
  290. package/fesm2022/tinya-code-gas-admin-ui-format-currency-CVmniKml.mjs.map +0 -1
  291. package/fesm2022/tinya-code-gas-admin-ui-format-date-Dr1YsDd_.mjs +0 -65
  292. package/fesm2022/tinya-code-gas-admin-ui-format-date-Dr1YsDd_.mjs.map +0 -1
  293. package/fesm2022/tinya-code-gas-admin-ui-format-number-CWCjpI4n.mjs +0 -65
  294. package/fesm2022/tinya-code-gas-admin-ui-format-number-CWCjpI4n.mjs.map +0 -1
  295. package/fesm2022/tinya-code-gas-admin-ui-format-text-DBOgJkH0.mjs +0 -59
  296. package/fesm2022/tinya-code-gas-admin-ui-format-text-DBOgJkH0.mjs.map +0 -1
  297. package/fesm2022/tinya-code-gas-admin-ui-format-thumbnail-PCRvxWKt.mjs +0 -94
  298. package/fesm2022/tinya-code-gas-admin-ui-format-thumbnail-PCRvxWKt.mjs.map +0 -1
  299. package/fesm2022/tinya-code-gas-admin-ui-gap-sorting-iTdy_DYG.mjs +0 -72
  300. package/fesm2022/tinya-code-gas-admin-ui-gap-sorting-iTdy_DYG.mjs.map +0 -1
  301. package/fesm2022/tinya-code-gas-admin-ui-group-h7-O8tt4.mjs +0 -238
  302. package/fesm2022/tinya-code-gas-admin-ui-group-h7-O8tt4.mjs.map +0 -1
  303. package/fesm2022/tinya-code-gas-admin-ui-image-7UhJ7nqI.mjs +0 -416
  304. package/fesm2022/tinya-code-gas-admin-ui-image-7UhJ7nqI.mjs.map +0 -1
  305. package/fesm2022/tinya-code-gas-admin-ui-kanban-view-Dl0Ol5Kb.mjs +0 -439
  306. package/fesm2022/tinya-code-gas-admin-ui-kanban-view-Dl0Ol5Kb.mjs.map +0 -1
  307. package/fesm2022/tinya-code-gas-admin-ui-key-value-nVdgg5at.mjs +0 -513
  308. package/fesm2022/tinya-code-gas-admin-ui-key-value-nVdgg5at.mjs.map +0 -1
  309. package/fesm2022/tinya-code-gas-admin-ui-list-C8ijJHAx.mjs +0 -637
  310. package/fesm2022/tinya-code-gas-admin-ui-list-C8ijJHAx.mjs.map +0 -1
  311. package/fesm2022/tinya-code-gas-admin-ui-metric-card-DnGMQL8l.mjs +0 -127
  312. package/fesm2022/tinya-code-gas-admin-ui-metric-card-DnGMQL8l.mjs.map +0 -1
  313. package/fesm2022/tinya-code-gas-admin-ui-multiselect-PB28e-jl.mjs +0 -251
  314. package/fesm2022/tinya-code-gas-admin-ui-multiselect-PB28e-jl.mjs.map +0 -1
  315. package/fesm2022/tinya-code-gas-admin-ui-notification.service-LjSULER6.mjs +0 -66
  316. package/fesm2022/tinya-code-gas-admin-ui-notification.service-LjSULER6.mjs.map +0 -1
  317. package/fesm2022/tinya-code-gas-admin-ui-number-JNr7glc8.mjs +0 -114
  318. package/fesm2022/tinya-code-gas-admin-ui-number-JNr7glc8.mjs.map +0 -1
  319. package/fesm2022/tinya-code-gas-admin-ui-phone-jR417hPf.mjs +0 -116
  320. package/fesm2022/tinya-code-gas-admin-ui-phone-jR417hPf.mjs.map +0 -1
  321. package/fesm2022/tinya-code-gas-admin-ui-quick-actions-DCQ6emmF.mjs +0 -235
  322. package/fesm2022/tinya-code-gas-admin-ui-quick-actions-DCQ6emmF.mjs.map +0 -1
  323. package/fesm2022/tinya-code-gas-admin-ui-radio-mode-DxvN07DY.mjs +0 -8
  324. package/fesm2022/tinya-code-gas-admin-ui-radio-mode-DxvN07DY.mjs.map +0 -1
  325. package/fesm2022/tinya-code-gas-admin-ui-readonly-text-BL7-4qie.mjs +0 -124
  326. package/fesm2022/tinya-code-gas-admin-ui-readonly-text-BL7-4qie.mjs.map +0 -1
  327. package/fesm2022/tinya-code-gas-admin-ui-record-list-BiZfnd_7.mjs +0 -249
  328. package/fesm2022/tinya-code-gas-admin-ui-record-list-BiZfnd_7.mjs.map +0 -1
  329. package/fesm2022/tinya-code-gas-admin-ui-relation-drawer.service-B0kT8EiW.mjs +0 -39
  330. package/fesm2022/tinya-code-gas-admin-ui-relation-drawer.service-B0kT8EiW.mjs.map +0 -1
  331. package/fesm2022/tinya-code-gas-admin-ui-relation-ykpJ3PYl.mjs +0 -309
  332. package/fesm2022/tinya-code-gas-admin-ui-relation-ykpJ3PYl.mjs.map +0 -1
  333. package/fesm2022/tinya-code-gas-admin-ui-render-registry-CULkxrSt.mjs +0 -576
  334. package/fesm2022/tinya-code-gas-admin-ui-render-registry-CULkxrSt.mjs.map +0 -1
  335. package/fesm2022/tinya-code-gas-admin-ui-rich-select-CIHaOrbU.mjs +0 -161
  336. package/fesm2022/tinya-code-gas-admin-ui-rich-select-CIHaOrbU.mjs.map +0 -1
  337. package/fesm2022/tinya-code-gas-admin-ui-rolldown-runtime-DpJrqANO.mjs +0 -11
  338. package/fesm2022/tinya-code-gas-admin-ui-schema-catalog-D0Pk0wAN.mjs +0 -685
  339. package/fesm2022/tinya-code-gas-admin-ui-schema-catalog-D0Pk0wAN.mjs.map +0 -1
  340. package/fesm2022/tinya-code-gas-admin-ui-seed-CcCA3FdQ.mjs +0 -80
  341. package/fesm2022/tinya-code-gas-admin-ui-seed-CcCA3FdQ.mjs.map +0 -1
  342. package/fesm2022/tinya-code-gas-admin-ui-select-CDwX9yNO.mjs +0 -296
  343. package/fesm2022/tinya-code-gas-admin-ui-select-CDwX9yNO.mjs.map +0 -1
  344. package/fesm2022/tinya-code-gas-admin-ui-skeleton-DnWK0tcZ.mjs +0 -119
  345. package/fesm2022/tinya-code-gas-admin-ui-skeleton-DnWK0tcZ.mjs.map +0 -1
  346. package/fesm2022/tinya-code-gas-admin-ui-slug-DU58cbiY.mjs +0 -158
  347. package/fesm2022/tinya-code-gas-admin-ui-slug-DU58cbiY.mjs.map +0 -1
  348. package/fesm2022/tinya-code-gas-admin-ui-source-options-B9R4mw8-.mjs +0 -26
  349. package/fesm2022/tinya-code-gas-admin-ui-source-options-B9R4mw8-.mjs.map +0 -1
  350. package/fesm2022/tinya-code-gas-admin-ui-status-progress-DmeG8htE.mjs +0 -205
  351. package/fesm2022/tinya-code-gas-admin-ui-status-progress-DmeG8htE.mjs.map +0 -1
  352. package/fesm2022/tinya-code-gas-admin-ui-string-list-gleasqzD.mjs +0 -432
  353. package/fesm2022/tinya-code-gas-admin-ui-string-list-gleasqzD.mjs.map +0 -1
  354. package/fesm2022/tinya-code-gas-admin-ui-template-interpolator-ewv7CkNX.mjs +0 -36
  355. package/fesm2022/tinya-code-gas-admin-ui-template-interpolator-ewv7CkNX.mjs.map +0 -1
  356. package/fesm2022/tinya-code-gas-admin-ui-text-CUPmL7W_.mjs +0 -107
  357. package/fesm2022/tinya-code-gas-admin-ui-text-CUPmL7W_.mjs.map +0 -1
  358. package/fesm2022/tinya-code-gas-admin-ui-textarea-CGLSIW13.mjs +0 -223
  359. package/fesm2022/tinya-code-gas-admin-ui-textarea-CGLSIW13.mjs.map +0 -1
  360. package/fesm2022/tinya-code-gas-admin-ui-time-BcHzsTWf.mjs +0 -107
  361. package/fesm2022/tinya-code-gas-admin-ui-time-BcHzsTWf.mjs.map +0 -1
  362. package/fesm2022/tinya-code-gas-admin-ui-upload.service-CZPEPCeN.mjs +0 -60
  363. package/fesm2022/tinya-code-gas-admin-ui-upload.service-CZPEPCeN.mjs.map +0 -1
  364. package/fesm2022/tinya-code-gas-admin-ui-url-GO4LZi__.mjs +0 -141
  365. package/fesm2022/tinya-code-gas-admin-ui-url-GO4LZi__.mjs.map +0 -1
  366. package/fesm2022/tinya-code-gas-admin-ui.mjs +0 -4599
  367. package/fesm2022/tinya-code-gas-admin-ui.mjs.map +0 -1
  368. package/types/tinya-code-gas-admin-ui.d.ts +0 -3632
@@ -0,0 +1,125 @@
1
+ import type { ResourceSchema } from '../models/schema.model';
2
+
3
+ /**
4
+ * Colección reordenable — base.md §11, api.md §3.1.
5
+ * `position` lo gestiona el backend (R3: nunca se expone como campo).
6
+ */
7
+ export const categoriesSchema: ResourceSchema = {
8
+ id: 'categories',
9
+ label: 'Categoría',
10
+ labelPlural: 'Categorías',
11
+ kind: 'collection',
12
+ uiViews: {
13
+ list: { type: 'list' },
14
+ create: { type: 'form', path: 'new' },
15
+ edit: { type: 'form', path: ':key/edit' },
16
+ },
17
+ endpoint: {
18
+ list: '/admin/categories',
19
+ get: '/admin/categories/{key}',
20
+ create: '/admin/categories',
21
+ update: '/admin/categories/{key}',
22
+ remove: '/admin/categories/{key}',
23
+ },
24
+ keyField: 'slug',
25
+ titleField: 'name',
26
+ sortable: true,
27
+ positionField: 'position',
28
+ // Edición rápida del listado (plan 6.5): los dos campos que se repiten.
29
+ quickEdit: ['name', 'active'],
30
+ search: ['name'],
31
+ filters: [{ key: 'active', label: 'Activo', type: 'boolean' }],
32
+ listColumns: [
33
+ { key: 'image_url', label: 'Imagen', format: 'thumbnail' },
34
+ { key: 'name', label: 'Nombre' },
35
+ { key: 'active', label: 'Activo', format: 'boolean' },
36
+ ],
37
+ layout: {
38
+ mode: 'sections',
39
+ sections: [
40
+ { id: 'general', label: 'General' },
41
+ { id: 'seo', label: 'SEO' },
42
+ { id: 'contenido', label: 'Contenido' },
43
+ { id: 'estado', label: 'Estado' },
44
+ ],
45
+ },
46
+ fields: [
47
+ {
48
+ type: 'text',
49
+ key: 'name',
50
+ label: 'Nombre',
51
+ required: true,
52
+ section: 'general',
53
+ width: 6,
54
+ },
55
+ {
56
+ type: 'slug',
57
+ key: 'slug',
58
+ label: 'Slug',
59
+ from: 'name',
60
+ lockAfterCreate: true,
61
+ required: true,
62
+ validators: { unique: true },
63
+ help: 'Se genera desde el nombre. Inmutable tras crear el registro.',
64
+ section: 'general',
65
+ width: 6,
66
+ },
67
+ {
68
+ type: 'text',
69
+ key: 'seo_title',
70
+ label: 'Título SEO',
71
+ required: true,
72
+ help: 'Aparece en el resultado de buscadores.',
73
+ section: 'seo',
74
+ width: 12,
75
+ },
76
+ {
77
+ type: 'textarea',
78
+ key: 'seo_description',
79
+ label: 'Descripción SEO',
80
+ required: true,
81
+ rows: 3,
82
+ section: 'seo',
83
+ width: 12,
84
+ },
85
+ {
86
+ type: 'textarea',
87
+ key: 'intro',
88
+ label: 'Introducción',
89
+ required: true,
90
+ rows: 6,
91
+ help: 'Texto de la categoría en la portada (100–1000 caracteres).',
92
+ validators: { minLength: 100, maxLength: 1000 },
93
+ section: 'contenido',
94
+ width: 12,
95
+ },
96
+ {
97
+ type: 'image',
98
+ key: 'image_url',
99
+ label: 'Imagen',
100
+ required: true,
101
+ section: 'contenido',
102
+ width: 6,
103
+ },
104
+ {
105
+ type: 'text',
106
+ key: 'image_alt',
107
+ label: 'Texto alternativo',
108
+ help: 'Describe la imagen para lectores de pantalla.',
109
+ section: 'contenido',
110
+ width: 6,
111
+ },
112
+ {
113
+ type: 'boolean',
114
+ key: 'active',
115
+ label: 'Activo',
116
+ required: true,
117
+ default: true,
118
+ trueLabel: 'Activo',
119
+ falseLabel: 'Inactivo',
120
+ help: 'Si está inactivo, la categoría no sale en el sitio público.',
121
+ section: 'estado',
122
+ width: 6,
123
+ },
124
+ ],
125
+ };
@@ -0,0 +1,372 @@
1
+ import type { ResourceSchema } from '../models/schema.model';
2
+
3
+ export const ordersSchema: ResourceSchema = {
4
+ id: 'orders',
5
+ label: 'Pedido',
6
+ labelPlural: 'Pedidos',
7
+ kind: 'collection',
8
+ uiViews: {
9
+ list: { type: 'list' },
10
+ create: { type: 'form', path: 'new' },
11
+ detail: { type: 'detail', path: ':key' },
12
+ edit: { type: 'form', path: ':key/edit' },
13
+ // R9.8.5 — vistas de dominio declaradas sobre un recurso real.
14
+ // Cada una con su propio `path` para no colisionar con la raíz `orders`
15
+ // (que es la ruta de la vista `list`).
16
+ calendar: {
17
+ type: 'calendar',
18
+ path: 'calendario',
19
+ config: { startField: 'pickup_date', titleField: 'customer_name' },
20
+ },
21
+ board: {
22
+ type: 'kanban',
23
+ path: 'tablero',
24
+ config: {
25
+ groupField: 'status',
26
+ columns: [
27
+ { value: 'PENDIENTE', label: 'Pendiente' },
28
+ { value: 'ENTREGADO', label: 'Entregado' },
29
+ { value: 'CANCELADO', label: 'Cancelado' },
30
+ ],
31
+ titleField: 'customer_name',
32
+ },
33
+ },
34
+ // R9.9 — composición declarativa de referencia sobre vistas reales
35
+ // (fixture de integración, task 5.1): tres hojas de tipos distintos +
36
+ // un tabs anidado (profundidad 2, dentro del límite), con `initial`
37
+ // explícito y config POR INSTANCIA (cada hijo trae la suya).
38
+ resumen: {
39
+ type: 'tabs',
40
+ path: 'resumen',
41
+ config: {
42
+ initial: 'board',
43
+ children: [
44
+ {
45
+ id: 'cal',
46
+ label: 'Calendario',
47
+ type: 'calendar',
48
+ config: { startField: 'pickup_date', titleField: 'customer_name' },
49
+ },
50
+ {
51
+ id: 'board',
52
+ label: 'Tablero',
53
+ type: 'kanban',
54
+ config: {
55
+ groupField: 'status',
56
+ columns: [
57
+ { value: 'PENDIENTE', label: 'Pendiente' },
58
+ { value: 'ENTREGADO', label: 'Entregado' },
59
+ { value: 'CANCELADO', label: 'Cancelado' },
60
+ ],
61
+ titleField: 'customer_name',
62
+ },
63
+ },
64
+ { id: 'rows', label: 'Pedidos', type: 'list' },
65
+ {
66
+ id: 'panels',
67
+ label: 'Paneles',
68
+ type: 'tabs',
69
+ config: {
70
+ children: [
71
+ {
72
+ id: 'inner-cal',
73
+ label: 'Agenda interna',
74
+ type: 'calendar',
75
+ config: { startField: 'pickup_date', titleField: 'customer_name' },
76
+ },
77
+ ],
78
+ },
79
+ },
80
+ ],
81
+ },
82
+ },
83
+ },
84
+ endpoint: {
85
+ list: '/admin/orders',
86
+ get: '/admin/orders/{key}',
87
+ create: '/admin/orders',
88
+ update: '/admin/orders/{key}',
89
+ remove: '/admin/orders/{key}',
90
+ },
91
+ keyField: 'ref',
92
+ titleField: 'customer_name',
93
+ search: ['ref', 'customer_name', 'authorized_name'],
94
+ filters: [
95
+ {
96
+ key: 'status',
97
+ label: 'Estado',
98
+ type: 'select',
99
+ options: [
100
+ { label: 'Pendiente', value: 'PENDIENTE' },
101
+ { label: 'Entregado', value: 'ENTREGADO' },
102
+ { label: 'Cancelado', value: 'CANCELADO' },
103
+ ],
104
+ },
105
+ {
106
+ key: 'auth_state',
107
+ label: 'Autorización',
108
+ type: 'select',
109
+ options: [
110
+ { label: 'Ninguno', value: 'NINGUNO' },
111
+ { label: 'Activa', value: 'ACTIVA' },
112
+ { label: 'Revocada', value: 'REVOCADA' },
113
+ ],
114
+ },
115
+ ],
116
+ // listColumns ⊆ listProjection del back (contract-check regla 5). `pin` se
117
+ // proyecta pero NO se lista: el operador lo copia vía acción/share, no
118
+ // escaneando la tabla (R8.1).
119
+ listColumns: [
120
+ { key: 'ref', label: 'Ref' },
121
+ { key: 'customer_name', label: 'Cliente' },
122
+ { key: 'status', label: 'Estado' },
123
+ { key: 'pickup_date', label: 'Fecha de retiro' },
124
+ { key: 'auth_state', label: 'Autorización' },
125
+ ],
126
+ detail: {
127
+ enabled: true,
128
+ headerFields: ['ref', 'status', 'auth_state'],
129
+ },
130
+ postCreate: {
131
+ mode: 'modal',
132
+ title: '¡Pedido Registrado con Éxito!',
133
+ description:
134
+ 'El pedido {ref} fue generado. Puede compartir el enlace de retiro con el cliente.',
135
+ // D11: `pin` queda FUERA del resumen — el modal no lo muestra porque la
136
+ // vía canónica es la acción copy-share, que lo incluye en el mensaje del
137
+ // cliente; duplicarlo en el modal expondría el PIN en una captura de
138
+ // pantalla que no viaja al cliente (R8.1).
139
+ summaryFields: ['ref', 'customer_name', 'pickup_date', 'status'],
140
+ actions: [
141
+ {
142
+ id: 'share_order',
143
+ type: 'copy-share',
144
+ label: 'Compartir con Cliente',
145
+ urlTemplate: '{public_base_url}/p/{ref}',
146
+ // Sin shareTextTemplate: cae al global `share_message_template`
147
+ // (pickpass), que el operador edita con los chips de tokens.
148
+ },
149
+ ],
150
+ },
151
+ actions: [
152
+ {
153
+ id: 'share_order',
154
+ type: 'copy-share',
155
+ label: 'Compartir Enlace',
156
+ urlTemplate: '{public_base_url}/p/{ref}',
157
+ // Mismo criterio que el modal: el mensaje lo define la plantilla
158
+ // global, no un hardcode del schema (R8.7).
159
+ },
160
+ // R8.8 (D14): regenera el PIN desde el detalle/listado — el remedio
161
+ // operativo de «pedido sin PIN recuperable» (R10) sin recrear el pedido.
162
+ // El back lo resuelve con `handlePinRegenerate` (orders.actions
163
+ // ['regenerate-pin']); el trigger sólo dispara la ruta y recarga.
164
+ {
165
+ id: 'regenerate_pin',
166
+ type: 'trigger',
167
+ name: 'regenerate-pin',
168
+ label: 'Regenerar PIN',
169
+ confirmMessage:
170
+ 'Se generará un PIN nuevo para este pedido; el anterior dejará de verificar. ¿Continuar?',
171
+ },
172
+ ],
173
+ layout: {
174
+ mode: 'sections',
175
+ sections: [
176
+ { id: 'pedido', label: 'Datos del Pedido' },
177
+ { id: 'autorizado', label: 'Persona Autorizada' },
178
+ { id: 'historial', label: 'Historial de Eventos' },
179
+ { id: 'sistema', label: 'Sistema' },
180
+ ],
181
+ },
182
+ fields: [
183
+ {
184
+ type: 'text',
185
+ key: 'ref',
186
+ label: 'Código del Pedido',
187
+ // El back lo genera (`operations.create.computed`, transform `token`):
188
+ // es un código aleatorio, no una entrada del operador, de ahí el
189
+ // `readonlyOn: 'create'` y el `help`.
190
+ //
191
+ // `required` + `unique` SÍ se declaran acá para que coincidan con el
192
+ // back y no diverja el contract check. NO bloquean el guardado aunque el
193
+ // campo esté vacío en alta: Signal Forms salta la validación de un nodo
194
+ // readonly (`shouldSkipValidation = hidden || disabled || readonly`,
195
+ // _validation_errors-chunk.mjs:778). En update el campo sí se valida.
196
+ required: true,
197
+ validators: { unique: true },
198
+ // En alta no existe todavía (lo llena el transform `token`): no tiene
199
+ // sentido mostrarlo vacío con un help que explica que se genera solo.
200
+ // En edición sí aparece, pero como `immutableKey: true` lo rechaza en el
201
+ // back, el campo es de solo-lectura en TODOS los modos.
202
+ hiddenOn: 'create',
203
+ readonlyOn: 'always',
204
+ help: 'Se genera solo al guardar: 6 caracteres sin confundir 0 con O ni 1 con I.',
205
+ section: 'pedido',
206
+ width: 6,
207
+ },
208
+ {
209
+ type: 'text',
210
+ key: 'pin',
211
+ label: 'PIN de Autorización',
212
+ // Lo genera el transform `pin` al crear y queda en claro SÓLO en la fila
213
+ // del pedido, para copiarlo en el mensaje del cliente. Nunca se edita:
214
+ // cambiarlo a mano dejaría la fila sin correspondencia en `_pin`, que es
215
+ // lo que compara `pin-verify` (aunque no abre el retiro, el pin mostrado
216
+ // dejaría de verificar).
217
+ // Igual que `ref`: en alta no existe (lo llena el transform `pin`), así
218
+ // que se oculta. En edición SÍ aparece — es donde al operador le sirve
219
+ // ver el PIN de ese pedido para dictarlo por teléfono.
220
+ hiddenOn: 'create',
221
+ readonlyOn: 'always',
222
+ validators: { maxLength: 12 },
223
+ help: 'Se genera solo al guardar (6 dígitos) y no se puede modificar.',
224
+ section: 'pedido',
225
+ width: 6,
226
+ },
227
+ {
228
+ type: 'text',
229
+ key: 'customer_name',
230
+ label: 'Nombre del Cliente',
231
+ required: true, // titleField del recurso: siempre presente
232
+ placeholder: 'Ej. Ana Pérez',
233
+ validators: { maxLength: 80 },
234
+ section: 'pedido',
235
+ width: 6,
236
+ },
237
+ {
238
+ type: 'textarea',
239
+ key: 'description',
240
+ label: 'Descripción del Pedido',
241
+ required: true, // campo textil del negocio: sin descripción no hay pedido
242
+ help: 'Qué es el pedido: mínimo 3 palabras, máximo 120.',
243
+ validators: { minWords: 3, maxWords: 120 },
244
+ section: 'pedido',
245
+ width: 12,
246
+ },
247
+ {
248
+ type: 'date',
249
+ key: 'pickup_date',
250
+ label: 'Fecha Acordada de Retiro',
251
+ required: true, // es lo que el operador confirma por teléfono
252
+ help: 'Cuándo viene el cliente a retirarlo.',
253
+ section: 'pedido',
254
+ width: 6, // mitad de fila: date corto
255
+ },
256
+ {
257
+ type: 'select',
258
+ key: 'status',
259
+ label: 'Estado',
260
+ required: true,
261
+ default: 'PENDIENTE', // todo pedido nace pendiente (transform back)
262
+ options: [
263
+ { label: 'Pendiente', value: 'PENDIENTE' },
264
+ { label: 'Entregado', value: 'ENTREGADO' },
265
+ { label: 'Cancelado', value: 'CANCELADO' },
266
+ ],
267
+ section: 'pedido',
268
+ width: 6,
269
+ },
270
+ {
271
+ type: 'image',
272
+ key: 'reference_photo',
273
+ label: 'Foto de Referencia del Pedido',
274
+ section: 'pedido',
275
+ width: 6, // opcional: sólo si el cliente mandó foto
276
+ },
277
+ {
278
+ type: 'textarea',
279
+ key: 'customer_notes',
280
+ label: 'Notas Internas / Instrucciones',
281
+ placeholder: 'Ej. Entregar por el portón trasero, llamar antes',
282
+ validators: { maxLength: 500 },
283
+ section: 'pedido',
284
+ width: 12, // textarea libre: fila completa
285
+ },
286
+ {
287
+ type: 'text',
288
+ key: 'authorized_name',
289
+ label: 'Nombre de la Persona Autorizada',
290
+ help: 'Quién viene a retirar. Déjelo vacío si retira el propio cliente.',
291
+ validators: { maxLength: 80 },
292
+ section: 'autorizado',
293
+ width: 6, // opcional: vacío = retira el propio cliente
294
+ },
295
+ {
296
+ type: 'image',
297
+ key: 'authorized_photo',
298
+ label: 'Foto del Autorizado',
299
+ section: 'autorizado',
300
+ width: 6, // la usa el personal para chequear identidad en el retiro
301
+ },
302
+ {
303
+ type: 'textarea',
304
+ key: 'authorized_notes',
305
+ label: 'Notas sobre la Autorización',
306
+ validators: { maxLength: 300 },
307
+ section: 'autorizado',
308
+ width: 12, // textarea: fila completa
309
+ },
310
+ {
311
+ type: 'select',
312
+ key: 'auth_state',
313
+ label: 'Estado de Autorización',
314
+ help: 'Activa habilita el retiro por tercero con el código del pedido.',
315
+ default: 'NINGUNO', // sin persona autorizada al crear
316
+ options: [
317
+ { label: 'Ninguno', value: 'NINGUNO' },
318
+ { label: 'Activa', value: 'ACTIVA' },
319
+ { label: 'Revocada', value: 'REVOCADA' },
320
+ ],
321
+ section: 'autorizado',
322
+ width: 6,
323
+ },
324
+ {
325
+ type: 'readonly-text',
326
+ key: 'created_at',
327
+ label: 'Fecha de creación',
328
+ section: 'sistema',
329
+ width: 6, // auditoría del back, siempre readonly-text
330
+ },
331
+ {
332
+ type: 'readonly-text',
333
+ key: 'updated_at',
334
+ label: 'Última actualización',
335
+ section: 'sistema',
336
+ width: 6, // auditoría del back, siempre readonly-text
337
+ },
338
+ {
339
+ type: 'list',
340
+ key: 'history',
341
+ label: 'Historial',
342
+ min: 0,
343
+ max: 200, // lo appenda el back (history-append-only): el operador no lo edita
344
+ section: 'historial',
345
+ itemFields: [
346
+ {
347
+ type: 'readonly-text',
348
+ key: 'at',
349
+ label: 'Fecha/Hora',
350
+ },
351
+ {
352
+ type: 'select',
353
+ key: 'action',
354
+ label: 'Acción',
355
+ options: [
356
+ { label: 'Pedido Creado', value: 'PEDIDO_CREADO' },
357
+ { label: 'Autorizado', value: 'AUTORIZADO' },
358
+ { label: 'Autorización Cambiada', value: 'AUTORIZADO_CAMBIADO' },
359
+ { label: 'Revocado', value: 'REVOCADO' },
360
+ { label: 'Entregado', value: 'ENTREGADO' },
361
+ ],
362
+ },
363
+ {
364
+ type: 'text',
365
+ key: 'detail',
366
+ label: 'Detalle',
367
+ validators: { maxLength: 120 },
368
+ },
369
+ ],
370
+ },
371
+ ],
372
+ };