@tinya-code/gas-admin-ui 0.2.0-alpha.12 → 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 (369) hide show
  1. package/README.md +222 -0
  2. package/ng-package.json +7 -0
  3. package/package.json +3 -15
  4. package/src/lib/actions/action-registry.spec.ts +52 -0
  5. package/src/lib/actions/action-registry.ts +126 -0
  6. package/src/lib/actions/action-service.spec.ts +215 -0
  7. package/src/lib/actions/action-service.ts +87 -0
  8. package/src/lib/actions/descriptors.spec.ts +155 -0
  9. package/src/lib/actions/descriptors.ts +154 -0
  10. package/src/lib/columns/column-cell.ts +33 -0
  11. package/src/lib/columns/column-defaults.spec.ts +99 -0
  12. package/src/lib/columns/column-defaults.ts +84 -0
  13. package/src/lib/columns/column-format.spec.ts +274 -0
  14. package/src/lib/columns/descriptors.ts +113 -0
  15. package/src/lib/columns/format-badge.ts +51 -0
  16. package/src/lib/columns/format-boolean.ts +58 -0
  17. package/src/lib/columns/format-currency.ts +30 -0
  18. package/src/lib/columns/format-date.ts +35 -0
  19. package/src/lib/columns/format-number.ts +32 -0
  20. package/src/lib/columns/format-text.ts +23 -0
  21. package/src/lib/columns/format-thumbnail.ts +63 -0
  22. package/src/lib/core/adapters/firebase-auth.adapter.ts +6 -0
  23. package/src/lib/core/guards/auth.guard.spec.ts +88 -0
  24. package/src/lib/core/guards/auth.guard.ts +48 -0
  25. package/src/lib/core/guards/unsaved-changes.guard.ts +16 -0
  26. package/src/lib/core/interceptors/api-error.interceptor.spec.ts +182 -0
  27. package/src/lib/core/interceptors/api-error.interceptor.ts +87 -0
  28. package/src/lib/core/models/api.model.ts +104 -0
  29. package/src/lib/core/models/schema-descriptions.ts +118 -0
  30. package/src/lib/core/models/schema.model.ts +1097 -0
  31. package/src/lib/core/registry/composition-validator.spec.ts +358 -0
  32. package/src/lib/core/registry/composition-validator.ts +270 -0
  33. package/src/lib/core/registry/field-validators.spec.ts +199 -0
  34. package/src/lib/core/registry/field-validators.ts +440 -0
  35. package/src/lib/core/registry/render-host.spec.ts +208 -0
  36. package/src/lib/core/registry/render-host.ts +646 -0
  37. package/src/lib/core/registry/render-registry.spec.ts +96 -0
  38. package/src/lib/core/registry/render-registry.ts +312 -0
  39. package/src/lib/core/registry/schema-catalog.ts +156 -0
  40. package/src/lib/core/services/api.service.spec.ts +1142 -0
  41. package/src/lib/core/services/api.service.ts +371 -0
  42. package/src/lib/core/services/auth.service.spec.ts +653 -0
  43. package/src/lib/core/services/auth.service.ts +503 -0
  44. package/src/lib/core/services/config.service.spec.ts +121 -0
  45. package/src/lib/core/services/config.service.ts +119 -0
  46. package/src/lib/core/services/data-source.service.spec.ts +179 -0
  47. package/src/lib/core/services/data-source.service.ts +142 -0
  48. package/src/lib/core/services/error-mapper.service.spec.ts +50 -0
  49. package/src/lib/core/services/error-mapper.service.ts +49 -0
  50. package/src/lib/core/services/notification.service.ts +73 -0
  51. package/src/lib/core/services/relation-drawer.service.ts +41 -0
  52. package/src/lib/core/services/theme.service.spec.ts +106 -0
  53. package/src/lib/core/services/theme.service.ts +86 -0
  54. package/src/lib/core/services/transport.spec.ts +198 -0
  55. package/src/lib/core/services/transport.ts +164 -0
  56. package/src/lib/core/services/upload.service.ts +81 -0
  57. package/src/lib/core/testing/categories.schema.ts +125 -0
  58. package/src/lib/core/testing/orders.schema.ts +372 -0
  59. package/src/lib/core/testing/products.schema.ts +258 -0
  60. package/src/lib/core/testing/site.schema.ts +195 -0
  61. package/src/lib/core/testing/test-catalog.ts +21 -0
  62. package/src/lib/core/tokens.ts +112 -0
  63. package/src/lib/core/utils/clipboard.spec.ts +55 -0
  64. package/src/lib/core/utils/clipboard.ts +90 -0
  65. package/src/lib/core/utils/context-resolver.spec.ts +95 -0
  66. package/src/lib/core/utils/context-resolver.ts +101 -0
  67. package/src/lib/core/utils/response-unwrapper.spec.ts +70 -0
  68. package/src/lib/core/utils/response-unwrapper.ts +103 -0
  69. package/src/lib/core/utils/source-options.spec.ts +96 -0
  70. package/src/lib/core/utils/source-options.ts +54 -0
  71. package/src/lib/core/utils/template-interpolator.spec.ts +59 -0
  72. package/src/lib/core/utils/template-interpolator.ts +56 -0
  73. package/src/lib/core/view-navigation/view-navigation.service.spec.ts +207 -0
  74. package/src/lib/core/view-navigation/view-navigation.service.ts +132 -0
  75. package/src/lib/fields/boolean/boolean.descriptor.ts +11 -0
  76. package/src/lib/fields/boolean/boolean.ts +40 -0
  77. package/src/lib/fields/color/color.descriptor.ts +12 -0
  78. package/src/lib/fields/color/color.ts +34 -0
  79. package/src/lib/fields/currency/currency.descriptor.ts +12 -0
  80. package/src/lib/fields/currency/currency.ts +67 -0
  81. package/src/lib/fields/date/date.descriptor.ts +12 -0
  82. package/src/lib/fields/date/date.ts +36 -0
  83. package/src/lib/fields/descriptors.ts +122 -0
  84. package/src/lib/fields/display/display-badge.ts +65 -0
  85. package/src/lib/fields/display/display-date.ts +39 -0
  86. package/src/lib/fields/display/display-defaults.ts +84 -0
  87. package/src/lib/fields/display/display-file.ts +41 -0
  88. package/src/lib/fields/display/display-image.ts +54 -0
  89. package/src/lib/fields/display/display-list.ts +107 -0
  90. package/src/lib/fields/display/display-number.ts +41 -0
  91. package/src/lib/fields/display/display-text.ts +42 -0
  92. package/src/lib/fields/display/display.spec.ts +242 -0
  93. package/src/lib/fields/dropdown/dropdown.descriptor.ts +12 -0
  94. package/src/lib/fields/dropdown/dropdown.ts +45 -0
  95. package/src/lib/fields/email/email.descriptor.ts +12 -0
  96. package/src/lib/fields/email/email.ts +28 -0
  97. package/src/lib/fields/field-aria.ts +60 -0
  98. package/src/lib/fields/field-host/field-host.spec.ts +118 -0
  99. package/src/lib/fields/field-host/field-host.ts +47 -0
  100. package/src/lib/fields/field-node.ts +88 -0
  101. package/src/lib/fields/file/file.descriptor.ts +14 -0
  102. package/src/lib/fields/file/file.spec.ts +134 -0
  103. package/src/lib/fields/file/file.ts +281 -0
  104. package/src/lib/fields/group/group.descriptor.ts +21 -0
  105. package/src/lib/fields/group/group.ts +110 -0
  106. package/src/lib/fields/image/image.descriptor.ts +12 -0
  107. package/src/lib/fields/image/image.spec.ts +117 -0
  108. package/src/lib/fields/image/image.ts +281 -0
  109. package/src/lib/fields/key-value/key-value.descriptor.ts +11 -0
  110. package/src/lib/fields/key-value/key-value.ts +283 -0
  111. package/src/lib/fields/list/list.descriptor.ts +21 -0
  112. package/src/lib/fields/list/list.ts +376 -0
  113. package/src/lib/fields/multiselect/multiselect.descriptor.ts +11 -0
  114. package/src/lib/fields/multiselect/multiselect.spec.ts +142 -0
  115. package/src/lib/fields/multiselect/multiselect.ts +152 -0
  116. package/src/lib/fields/number/number.descriptor.ts +12 -0
  117. package/src/lib/fields/number/number.ts +40 -0
  118. package/src/lib/fields/phone/phone.descriptor.ts +12 -0
  119. package/src/lib/fields/phone/phone.ts +46 -0
  120. package/src/lib/fields/readonly-text/readonly-text.descriptor.ts +12 -0
  121. package/src/lib/fields/readonly-text/readonly-text.ts +58 -0
  122. package/src/lib/fields/relation/relation.descriptor.ts +12 -0
  123. package/src/lib/fields/relation/relation.spec.ts +193 -0
  124. package/src/lib/fields/relation/relation.ts +224 -0
  125. package/src/lib/fields/rich-select/rich-select.descriptor.ts +12 -0
  126. package/src/lib/fields/rich-select/rich-select.ts +175 -0
  127. package/src/lib/fields/select/radio-mode.ts +25 -0
  128. package/src/lib/fields/select/select.descriptor.ts +12 -0
  129. package/src/lib/fields/select/select.spec.ts +162 -0
  130. package/src/lib/fields/select/select.ts +210 -0
  131. package/src/lib/fields/slug/slug.descriptor.ts +19 -0
  132. package/src/lib/fields/slug/slug.ts +67 -0
  133. package/src/lib/fields/string-list/string-list.descriptor.ts +11 -0
  134. package/src/lib/fields/string-list/string-list.ts +222 -0
  135. package/src/lib/fields/text/text.descriptor.ts +12 -0
  136. package/src/lib/fields/text/text.ts +35 -0
  137. package/src/lib/fields/textarea/textarea.descriptor.ts +12 -0
  138. package/src/lib/fields/textarea/textarea.spec.ts +117 -0
  139. package/src/lib/fields/textarea/textarea.ts +126 -0
  140. package/src/lib/fields/time/time.descriptor.ts +12 -0
  141. package/src/lib/fields/time/time.ts +28 -0
  142. package/src/lib/fields/unknown-render/unknown-render.ts +49 -0
  143. package/src/lib/fields/url/url.descriptor.ts +12 -0
  144. package/src/lib/fields/url/url.ts +53 -0
  145. package/src/lib/gas-admin-ui.spec.ts +21 -0
  146. package/src/lib/gas-admin-ui.ts +9 -0
  147. package/src/lib/layouts/descriptors.ts +9 -0
  148. package/src/lib/pages/dashboard/dashboard.ts +167 -0
  149. package/src/lib/pages/detail-view/detail-view.spec.ts +333 -0
  150. package/src/lib/pages/detail-view/detail-view.ts +570 -0
  151. package/src/lib/pages/drawer-form/drawer-form.ts +228 -0
  152. package/src/lib/pages/form-view/form-model.ts +88 -0
  153. package/src/lib/pages/form-view/form-schema.ts +255 -0
  154. package/src/lib/pages/form-view/form-view.ts +1622 -0
  155. package/src/lib/pages/list-view/list-view.formats.spec.ts +214 -0
  156. package/src/lib/pages/list-view/list-view.ts +882 -0
  157. package/src/lib/pages/login/login.spec.ts +109 -0
  158. package/src/lib/pages/login/login.ts +227 -0
  159. package/src/lib/pages/resource-page/resource-page.ts +234 -0
  160. package/src/lib/shared/components/badge/badge.ts +35 -0
  161. package/src/lib/shared/components/button/button.ts +65 -0
  162. package/src/lib/shared/components/confirm-dialog/confirm-dialog.ts +48 -0
  163. package/src/lib/shared/components/copy-button/copy-button.ts +56 -0
  164. package/src/lib/shared/components/copy-share/copy-share.spec.ts +122 -0
  165. package/src/lib/shared/components/copy-share/copy-share.ts +107 -0
  166. package/src/lib/shared/components/drawer/drawer.spec.ts +127 -0
  167. package/src/lib/shared/components/drawer/drawer.ts +172 -0
  168. package/src/lib/shared/components/empty-state/empty-state.ts +30 -0
  169. package/src/lib/shared/components/modal/modal.spec.ts +149 -0
  170. package/src/lib/shared/components/modal/modal.ts +145 -0
  171. package/src/lib/shared/components/post-create-modal/post-create-modal.spec.ts +165 -0
  172. package/src/lib/shared/components/post-create-modal/post-create-modal.ts +159 -0
  173. package/src/lib/shared/components/skeleton/skeleton.ts +31 -0
  174. package/src/lib/shared/components/toast/toast.ts +58 -0
  175. package/src/lib/shared/utils/col-span.ts +25 -0
  176. package/src/lib/shared/utils/condition-evaluator.ts +53 -0
  177. package/src/lib/shared/utils/depends-on.ts +48 -0
  178. package/src/lib/shared/utils/dialog-focus.ts +28 -0
  179. package/src/lib/shared/utils/field-path.ts +49 -0
  180. package/src/lib/shared/utils/gap-sorting.ts +144 -0
  181. package/src/lib/shared/utils/seed.spec.ts +64 -0
  182. package/src/lib/shared/utils/seed.ts +149 -0
  183. package/src/lib/shared/utils/slugify.ts +13 -0
  184. package/src/lib/shared/utils/validators.ts +41 -0
  185. package/src/lib/shell/layout/layout.ts +63 -0
  186. package/src/lib/shell/shell.routes.spec.ts +59 -0
  187. package/src/lib/shell/shell.routes.ts +122 -0
  188. package/src/lib/shell/sidebar/sidebar.ts +139 -0
  189. package/src/lib/shell/theme-toggle/theme-toggle.ts +74 -0
  190. package/src/lib/views/calendar-view/calendar-model.ts +426 -0
  191. package/src/lib/views/calendar-view/calendar-view.spec.ts +557 -0
  192. package/src/lib/views/calendar-view/calendar-view.ts +568 -0
  193. package/src/lib/views/composer/composer-host.spec.ts +301 -0
  194. package/src/lib/views/composer/composer-host.ts +248 -0
  195. package/src/lib/views/composer/composer-imports.spec.ts +54 -0
  196. package/src/lib/views/composer/view-context.spec.ts +117 -0
  197. package/src/lib/views/composer/view-context.ts +109 -0
  198. package/src/lib/views/composer/view-slot.spec.ts +130 -0
  199. package/src/lib/views/composer/view-slot.ts +178 -0
  200. package/src/lib/views/descriptors.ts +46 -0
  201. package/src/lib/views/kanban-view/kanban-model.ts +173 -0
  202. package/src/lib/views/kanban-view/kanban-view.spec.ts +540 -0
  203. package/src/lib/views/kanban-view/kanban-view.ts +327 -0
  204. package/src/lib/widgets/bar-chart/bar-chart.descriptor.ts +17 -0
  205. package/src/lib/widgets/bar-chart/bar-chart.spec.ts +66 -0
  206. package/src/lib/widgets/bar-chart/bar-chart.ts +76 -0
  207. package/src/lib/widgets/chart-line/chart-line.descriptor.ts +17 -0
  208. package/src/lib/widgets/chart-line/chart-line.spec.ts +113 -0
  209. package/src/lib/widgets/chart-line/chart-line.ts +219 -0
  210. package/src/lib/widgets/descriptors.ts +29 -0
  211. package/src/lib/widgets/metric-card/metric-card.descriptor.ts +41 -0
  212. package/src/lib/widgets/metric-card/metric-card.spec.ts +52 -0
  213. package/src/lib/widgets/metric-card/metric-card.ts +48 -0
  214. package/src/lib/widgets/quick-actions/quick-actions.descriptor.ts +13 -0
  215. package/src/lib/widgets/quick-actions/quick-actions.spec.ts +61 -0
  216. package/src/lib/widgets/quick-actions/quick-actions.ts +100 -0
  217. package/src/lib/widgets/record-list/record-list.descriptor.ts +16 -0
  218. package/src/lib/widgets/record-list/record-list.spec.ts +79 -0
  219. package/src/lib/widgets/record-list/record-list.ts +115 -0
  220. package/src/lib/widgets/series.spec.ts +42 -0
  221. package/src/lib/widgets/series.ts +56 -0
  222. package/src/lib/widgets/status-progress/status-progress.descriptor.ts +19 -0
  223. package/src/lib/widgets/status-progress/status-progress.spec.ts +63 -0
  224. package/src/lib/widgets/status-progress/status-progress.ts +104 -0
  225. package/src/lib/widgets/widget-host/widget-host.spec.ts +179 -0
  226. package/src/lib/widgets/widget-host/widget-host.ts +99 -0
  227. package/src/public-api.ts +104 -0
  228. package/tinya-code-gas-admin-ui-0.2.0-alpha.15.tgz +0 -0
  229. package/tsconfig.lib.json +13 -0
  230. package/tsconfig.lib.prod.json +11 -0
  231. package/tsconfig.spec.json +10 -0
  232. package/fesm2022/tinya-code-gas-admin-ui-badge-EeCA_l-o.mjs +0 -84
  233. package/fesm2022/tinya-code-gas-admin-ui-badge-EeCA_l-o.mjs.map +0 -1
  234. package/fesm2022/tinya-code-gas-admin-ui-bar-chart-G7sEMSBY.mjs +0 -140
  235. package/fesm2022/tinya-code-gas-admin-ui-bar-chart-G7sEMSBY.mjs.map +0 -1
  236. package/fesm2022/tinya-code-gas-admin-ui-boolean-B2ASKL0E.mjs +0 -113
  237. package/fesm2022/tinya-code-gas-admin-ui-boolean-B2ASKL0E.mjs.map +0 -1
  238. package/fesm2022/tinya-code-gas-admin-ui-button-BQjNW8KB.mjs +0 -163
  239. package/fesm2022/tinya-code-gas-admin-ui-button-BQjNW8KB.mjs.map +0 -1
  240. package/fesm2022/tinya-code-gas-admin-ui-calendar-view-DCY8bj2V.mjs +0 -1027
  241. package/fesm2022/tinya-code-gas-admin-ui-calendar-view-DCY8bj2V.mjs.map +0 -1
  242. package/fesm2022/tinya-code-gas-admin-ui-chart-line-BjdlKHoH.mjs +0 -278
  243. package/fesm2022/tinya-code-gas-admin-ui-chart-line-BjdlKHoH.mjs.map +0 -1
  244. package/fesm2022/tinya-code-gas-admin-ui-color-Dljh_By3.mjs +0 -107
  245. package/fesm2022/tinya-code-gas-admin-ui-color-Dljh_By3.mjs.map +0 -1
  246. package/fesm2022/tinya-code-gas-admin-ui-condition-evaluator-DY2k1M3C.mjs +0 -101
  247. package/fesm2022/tinya-code-gas-admin-ui-condition-evaluator-DY2k1M3C.mjs.map +0 -1
  248. package/fesm2022/tinya-code-gas-admin-ui-currency-BvuF3Z63.mjs +0 -141
  249. package/fesm2022/tinya-code-gas-admin-ui-currency-BvuF3Z63.mjs.map +0 -1
  250. package/fesm2022/tinya-code-gas-admin-ui-data-source.service-96FSbN72.mjs +0 -88
  251. package/fesm2022/tinya-code-gas-admin-ui-data-source.service-96FSbN72.mjs.map +0 -1
  252. package/fesm2022/tinya-code-gas-admin-ui-date-1SJGXZrd.mjs +0 -107
  253. package/fesm2022/tinya-code-gas-admin-ui-date-1SJGXZrd.mjs.map +0 -1
  254. package/fesm2022/tinya-code-gas-admin-ui-display-badge-fwk6sDU7.mjs +0 -140
  255. package/fesm2022/tinya-code-gas-admin-ui-display-badge-fwk6sDU7.mjs.map +0 -1
  256. package/fesm2022/tinya-code-gas-admin-ui-display-date-D7zLiDiG.mjs +0 -119
  257. package/fesm2022/tinya-code-gas-admin-ui-display-date-D7zLiDiG.mjs.map +0 -1
  258. package/fesm2022/tinya-code-gas-admin-ui-display-file-BiIhqvQC.mjs +0 -125
  259. package/fesm2022/tinya-code-gas-admin-ui-display-file-BiIhqvQC.mjs.map +0 -1
  260. package/fesm2022/tinya-code-gas-admin-ui-display-image-C1dhnZi1.mjs +0 -152
  261. package/fesm2022/tinya-code-gas-admin-ui-display-image-C1dhnZi1.mjs.map +0 -1
  262. package/fesm2022/tinya-code-gas-admin-ui-display-list-DOEuUbGe.mjs +0 -211
  263. package/fesm2022/tinya-code-gas-admin-ui-display-list-DOEuUbGe.mjs.map +0 -1
  264. package/fesm2022/tinya-code-gas-admin-ui-display-number-DDMzr4Hn.mjs +0 -116
  265. package/fesm2022/tinya-code-gas-admin-ui-display-number-DDMzr4Hn.mjs.map +0 -1
  266. package/fesm2022/tinya-code-gas-admin-ui-display-text-B8CdVNpv.mjs +0 -111
  267. package/fesm2022/tinya-code-gas-admin-ui-display-text-B8CdVNpv.mjs.map +0 -1
  268. package/fesm2022/tinya-code-gas-admin-ui-dropdown-C3blvmE1.mjs +0 -122
  269. package/fesm2022/tinya-code-gas-admin-ui-dropdown-C3blvmE1.mjs.map +0 -1
  270. package/fesm2022/tinya-code-gas-admin-ui-email-CT_O5ihA.mjs +0 -107
  271. package/fesm2022/tinya-code-gas-admin-ui-email-CT_O5ihA.mjs.map +0 -1
  272. package/fesm2022/tinya-code-gas-admin-ui-empty-state-BMc0QtoT.mjs +0 -109
  273. package/fesm2022/tinya-code-gas-admin-ui-empty-state-BMc0QtoT.mjs.map +0 -1
  274. package/fesm2022/tinya-code-gas-admin-ui-error-mapper.service-DY5y1FjE.mjs +0 -45
  275. package/fesm2022/tinya-code-gas-admin-ui-error-mapper.service-DY5y1FjE.mjs.map +0 -1
  276. package/fesm2022/tinya-code-gas-admin-ui-field-aria-BD1Wiggc.mjs +0 -50
  277. package/fesm2022/tinya-code-gas-admin-ui-field-aria-BD1Wiggc.mjs.map +0 -1
  278. package/fesm2022/tinya-code-gas-admin-ui-field-node-CIK6KNN_.mjs +0 -24
  279. package/fesm2022/tinya-code-gas-admin-ui-field-node-CIK6KNN_.mjs.map +0 -1
  280. package/fesm2022/tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs +0 -27
  281. package/fesm2022/tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs.map +0 -1
  282. package/fesm2022/tinya-code-gas-admin-ui-file-Dmxioog7.mjs +0 -408
  283. package/fesm2022/tinya-code-gas-admin-ui-file-Dmxioog7.mjs.map +0 -1
  284. package/fesm2022/tinya-code-gas-admin-ui-form-view-C709rc57.mjs +0 -4516
  285. package/fesm2022/tinya-code-gas-admin-ui-form-view-C709rc57.mjs.map +0 -1
  286. package/fesm2022/tinya-code-gas-admin-ui-format-badge-CK8ct5Wk.mjs +0 -82
  287. package/fesm2022/tinya-code-gas-admin-ui-format-badge-CK8ct5Wk.mjs.map +0 -1
  288. package/fesm2022/tinya-code-gas-admin-ui-format-boolean-ClzezZz-.mjs +0 -105
  289. package/fesm2022/tinya-code-gas-admin-ui-format-boolean-ClzezZz-.mjs.map +0 -1
  290. package/fesm2022/tinya-code-gas-admin-ui-format-currency-CVmniKml.mjs +0 -65
  291. package/fesm2022/tinya-code-gas-admin-ui-format-currency-CVmniKml.mjs.map +0 -1
  292. package/fesm2022/tinya-code-gas-admin-ui-format-date-Dr1YsDd_.mjs +0 -65
  293. package/fesm2022/tinya-code-gas-admin-ui-format-date-Dr1YsDd_.mjs.map +0 -1
  294. package/fesm2022/tinya-code-gas-admin-ui-format-number-CWCjpI4n.mjs +0 -65
  295. package/fesm2022/tinya-code-gas-admin-ui-format-number-CWCjpI4n.mjs.map +0 -1
  296. package/fesm2022/tinya-code-gas-admin-ui-format-text-DBOgJkH0.mjs +0 -59
  297. package/fesm2022/tinya-code-gas-admin-ui-format-text-DBOgJkH0.mjs.map +0 -1
  298. package/fesm2022/tinya-code-gas-admin-ui-format-thumbnail-PCRvxWKt.mjs +0 -94
  299. package/fesm2022/tinya-code-gas-admin-ui-format-thumbnail-PCRvxWKt.mjs.map +0 -1
  300. package/fesm2022/tinya-code-gas-admin-ui-gap-sorting-iTdy_DYG.mjs +0 -72
  301. package/fesm2022/tinya-code-gas-admin-ui-gap-sorting-iTdy_DYG.mjs.map +0 -1
  302. package/fesm2022/tinya-code-gas-admin-ui-group-h7-O8tt4.mjs +0 -238
  303. package/fesm2022/tinya-code-gas-admin-ui-group-h7-O8tt4.mjs.map +0 -1
  304. package/fesm2022/tinya-code-gas-admin-ui-image-7UhJ7nqI.mjs +0 -416
  305. package/fesm2022/tinya-code-gas-admin-ui-image-7UhJ7nqI.mjs.map +0 -1
  306. package/fesm2022/tinya-code-gas-admin-ui-kanban-view-Dl0Ol5Kb.mjs +0 -439
  307. package/fesm2022/tinya-code-gas-admin-ui-kanban-view-Dl0Ol5Kb.mjs.map +0 -1
  308. package/fesm2022/tinya-code-gas-admin-ui-key-value-nVdgg5at.mjs +0 -513
  309. package/fesm2022/tinya-code-gas-admin-ui-key-value-nVdgg5at.mjs.map +0 -1
  310. package/fesm2022/tinya-code-gas-admin-ui-list-C8ijJHAx.mjs +0 -637
  311. package/fesm2022/tinya-code-gas-admin-ui-list-C8ijJHAx.mjs.map +0 -1
  312. package/fesm2022/tinya-code-gas-admin-ui-metric-card-DnGMQL8l.mjs +0 -127
  313. package/fesm2022/tinya-code-gas-admin-ui-metric-card-DnGMQL8l.mjs.map +0 -1
  314. package/fesm2022/tinya-code-gas-admin-ui-multiselect-PB28e-jl.mjs +0 -251
  315. package/fesm2022/tinya-code-gas-admin-ui-multiselect-PB28e-jl.mjs.map +0 -1
  316. package/fesm2022/tinya-code-gas-admin-ui-notification.service-LjSULER6.mjs +0 -66
  317. package/fesm2022/tinya-code-gas-admin-ui-notification.service-LjSULER6.mjs.map +0 -1
  318. package/fesm2022/tinya-code-gas-admin-ui-number-JNr7glc8.mjs +0 -114
  319. package/fesm2022/tinya-code-gas-admin-ui-number-JNr7glc8.mjs.map +0 -1
  320. package/fesm2022/tinya-code-gas-admin-ui-phone-jR417hPf.mjs +0 -116
  321. package/fesm2022/tinya-code-gas-admin-ui-phone-jR417hPf.mjs.map +0 -1
  322. package/fesm2022/tinya-code-gas-admin-ui-quick-actions-DCQ6emmF.mjs +0 -235
  323. package/fesm2022/tinya-code-gas-admin-ui-quick-actions-DCQ6emmF.mjs.map +0 -1
  324. package/fesm2022/tinya-code-gas-admin-ui-radio-mode-DxvN07DY.mjs +0 -8
  325. package/fesm2022/tinya-code-gas-admin-ui-radio-mode-DxvN07DY.mjs.map +0 -1
  326. package/fesm2022/tinya-code-gas-admin-ui-readonly-text-BL7-4qie.mjs +0 -124
  327. package/fesm2022/tinya-code-gas-admin-ui-readonly-text-BL7-4qie.mjs.map +0 -1
  328. package/fesm2022/tinya-code-gas-admin-ui-record-list-BiZfnd_7.mjs +0 -249
  329. package/fesm2022/tinya-code-gas-admin-ui-record-list-BiZfnd_7.mjs.map +0 -1
  330. package/fesm2022/tinya-code-gas-admin-ui-relation-drawer.service-B0kT8EiW.mjs +0 -39
  331. package/fesm2022/tinya-code-gas-admin-ui-relation-drawer.service-B0kT8EiW.mjs.map +0 -1
  332. package/fesm2022/tinya-code-gas-admin-ui-relation-ykpJ3PYl.mjs +0 -309
  333. package/fesm2022/tinya-code-gas-admin-ui-relation-ykpJ3PYl.mjs.map +0 -1
  334. package/fesm2022/tinya-code-gas-admin-ui-render-registry-CULkxrSt.mjs +0 -576
  335. package/fesm2022/tinya-code-gas-admin-ui-render-registry-CULkxrSt.mjs.map +0 -1
  336. package/fesm2022/tinya-code-gas-admin-ui-rich-select-CIHaOrbU.mjs +0 -161
  337. package/fesm2022/tinya-code-gas-admin-ui-rich-select-CIHaOrbU.mjs.map +0 -1
  338. package/fesm2022/tinya-code-gas-admin-ui-rolldown-runtime-DpJrqANO.mjs +0 -11
  339. package/fesm2022/tinya-code-gas-admin-ui-schema-catalog-D0Pk0wAN.mjs +0 -685
  340. package/fesm2022/tinya-code-gas-admin-ui-schema-catalog-D0Pk0wAN.mjs.map +0 -1
  341. package/fesm2022/tinya-code-gas-admin-ui-seed-CcCA3FdQ.mjs +0 -80
  342. package/fesm2022/tinya-code-gas-admin-ui-seed-CcCA3FdQ.mjs.map +0 -1
  343. package/fesm2022/tinya-code-gas-admin-ui-select-CDwX9yNO.mjs +0 -296
  344. package/fesm2022/tinya-code-gas-admin-ui-select-CDwX9yNO.mjs.map +0 -1
  345. package/fesm2022/tinya-code-gas-admin-ui-skeleton-DnWK0tcZ.mjs +0 -119
  346. package/fesm2022/tinya-code-gas-admin-ui-skeleton-DnWK0tcZ.mjs.map +0 -1
  347. package/fesm2022/tinya-code-gas-admin-ui-slug-DU58cbiY.mjs +0 -158
  348. package/fesm2022/tinya-code-gas-admin-ui-slug-DU58cbiY.mjs.map +0 -1
  349. package/fesm2022/tinya-code-gas-admin-ui-source-options-B9R4mw8-.mjs +0 -26
  350. package/fesm2022/tinya-code-gas-admin-ui-source-options-B9R4mw8-.mjs.map +0 -1
  351. package/fesm2022/tinya-code-gas-admin-ui-status-progress-DmeG8htE.mjs +0 -205
  352. package/fesm2022/tinya-code-gas-admin-ui-status-progress-DmeG8htE.mjs.map +0 -1
  353. package/fesm2022/tinya-code-gas-admin-ui-string-list-gleasqzD.mjs +0 -432
  354. package/fesm2022/tinya-code-gas-admin-ui-string-list-gleasqzD.mjs.map +0 -1
  355. package/fesm2022/tinya-code-gas-admin-ui-template-interpolator-ewv7CkNX.mjs +0 -36
  356. package/fesm2022/tinya-code-gas-admin-ui-template-interpolator-ewv7CkNX.mjs.map +0 -1
  357. package/fesm2022/tinya-code-gas-admin-ui-text-CUPmL7W_.mjs +0 -107
  358. package/fesm2022/tinya-code-gas-admin-ui-text-CUPmL7W_.mjs.map +0 -1
  359. package/fesm2022/tinya-code-gas-admin-ui-textarea-CGLSIW13.mjs +0 -223
  360. package/fesm2022/tinya-code-gas-admin-ui-textarea-CGLSIW13.mjs.map +0 -1
  361. package/fesm2022/tinya-code-gas-admin-ui-time-BcHzsTWf.mjs +0 -107
  362. package/fesm2022/tinya-code-gas-admin-ui-time-BcHzsTWf.mjs.map +0 -1
  363. package/fesm2022/tinya-code-gas-admin-ui-upload.service-CZPEPCeN.mjs +0 -60
  364. package/fesm2022/tinya-code-gas-admin-ui-upload.service-CZPEPCeN.mjs.map +0 -1
  365. package/fesm2022/tinya-code-gas-admin-ui-url-GO4LZi__.mjs +0 -141
  366. package/fesm2022/tinya-code-gas-admin-ui-url-GO4LZi__.mjs.map +0 -1
  367. package/fesm2022/tinya-code-gas-admin-ui.mjs +0 -4599
  368. package/fesm2022/tinya-code-gas-admin-ui.mjs.map +0 -1
  369. 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
+ };