@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
@@ -1 +0,0 @@
1
- {"version":3,"file":"tinya-code-gas-admin-ui-condition-evaluator-DY2k1M3C.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/core/view-navigation/view-navigation.service.ts","../../../projects/gas-admin-ui/src/lib/shared/utils/condition-evaluator.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport { Router, type ActivatedRouteSnapshot } from '@angular/router';\n\nimport type { NavigationTarget, SelectionBinding } from '../models/schema.model';\nimport { getSchema } from '../registry/schema-catalog';\nimport type { SelectionEvent } from '../../views/composer/view-context';\n\n/**\n * R9.9 · D4 — Servicio de navegación declarativa.\n *\n * Un leaf (hoja) sólo NAVEGA cuando hay `select` declarado; el motor vive\n * aquí, no en cada hoja. El flujo completo es:\n *\n * `ctx.emit/leaf → dispatch → buildSegments(pattern, {key}) →\n * router.navigate(matriz de comandos) → roleGuard`\n *\n * Invariantes:\n *\n * - **key-only**: la ÚNICA identidad que viaja es `event.key`. Los comandos\n * son una matriz de segmentos (nunca concat de strings) ⇒ el Router\n * codifica la clave (una clave `A/B` queda `A%2FB` en la URL) y ningún\n * dato del registro llega a la URL.\n * - **Fail closed**: sin binding, con acción distinta a la declarada o con\n * `mode` distinto de `route`, NO hay navegación — simplemente no ocurre.\n * - **Fail loud**: un target que el registry no declara lanza ruido antes de\n * navegar (el validador pre-render ya lo garantiza; esto es defensa en\n * profundidad).\n * - **Guards reales**: `router.navigate` ⇒ `roleGuard` corre igual que en\n * cualquier navegación declarada. Si el guard bloquea, no se registra\n * origen (no hay «atrás» que una sesión sin permiso deba volver a ver).\n */\n\n/**\n * Patrón de segmentos de la ruta destino (`['orders', ':key']`). Usa la\n * MISMA fuente que el validador (`getSchema`) para que lo validado en build\n * sea exactamente lo navegado en runtime. Inexistente ⇒ `undefined` (la\n * defensa en profundidad: el validador pre-render garantiza que esto no\n * ocurre en schemas válidos).\n */\nexport function targetRoutePattern(target: NavigationTarget): string[] | undefined {\n const destino = getSchema(target.resource);\n const vista = destino?.uiViews?.[target.view];\n if (!destino || !vista) return undefined;\n const relativa = vista.path ?? '';\n return [destino.id, ...(relativa === '' ? [] : relativa.split('/'))];\n}\n\n/**\n * Segmentos de la ruta destino con la clave sustituida. La clave es SIEMPRE\n * un segmento completo (no se parte en `/`); un param distinto de `:key` no\n * tiene fuente declarada ⇒ falla ruido, no navega a medias.\n */\nexport function buildSegments(pattern: readonly string[], key: string): string[] {\n const commands: string[] = [];\n for (const segmento of pattern) {\n if (segmento.startsWith(':')) {\n const nombre = segmento.slice(1);\n if (nombre !== 'key') {\n throw new Error(`Destino ':${nombre}' sin fuente declarada en SelectionEvent`);\n }\n commands.push(key);\n } else {\n commands.push(segmento);\n }\n }\n return commands;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ViewNavigationService {\n private readonly router = inject(Router);\n\n /** URL desde la que se navegó la última selección válida (origen del «atrás»). */\n private origen: string | undefined;\n\n /**\n * Transición declarada de un leaf. Inerte si no hay binding, si la acción\n * no es la declarada o si el modo no es `route`; falla ruido si el target\n * no existe en el registry.\n *\n * @returns `true` si el Router completó la navegación (guards aceptados).\n */\n async dispatch(binding: SelectionBinding | undefined, event: SelectionEvent): Promise<boolean> {\n if (binding === undefined) return false; // sin declaración ⇒ inerte\n if (binding.on !== event.action) return false; // fuera del scope declarado\n if (binding.mode !== 'route') return false; // comportamiento local del leaf\n\n const pattern = targetRoutePattern(binding.target);\n if (pattern === undefined) {\n throw new Error(\n `Destino '${binding.target.resource}/${binding.target.view}' no existe en el registry`,\n );\n }\n\n const urlOrigen = this.router.url;\n const ok = await this.router.navigate(['/', ...buildSegments(pattern, event.key)]);\n if (ok) this.origen = urlOrigen;\n return ok;\n }\n\n /**\n * Forma de volver (D4). Orden: `returnPath` declarado por el leaf ⇒\n * origen registrado por `dispatch` ⇒ raíz del recurso declarado en la ruta\n * actual (entrada directa a la URL: no hay origen en memoria). Fallback\n * final: la raíz de la aplicación.\n */\n async back(returnPath?: string): Promise<boolean> {\n if (returnPath !== undefined) return this.router.navigate([returnPath]);\n\n if (this.origen !== undefined) {\n const destino = this.origen;\n this.origen = undefined;\n return this.router.navigateByUrl(destino);\n }\n\n const recurso = this.recursoActual();\n return recurso === undefined\n ? this.router.navigate(['/'])\n : this.router.navigate(['/', recurso]);\n }\n\n /** Primer `resourceId` declarado en el árbol de rutas activo. */\n private recursoActual(): string | undefined {\n let nodo: ActivatedRouteSnapshot | null = this.router.routerState.snapshot.root;\n while (nodo !== null) {\n const id = nodo.data?.['resourceId'];\n if (id !== undefined) return String(id);\n nodo = nodo.firstChild;\n }\n return undefined;\n }\n}\n","import type { FieldCondition } from '../../core/models/schema.model';\n\n/**\n * Evaluador de condiciones `visibleWhen` / `readonlyWhen` (base.md §4):\n * comparaciones simples (igual, distinto, está vacío, contiene) sobre otros\n * campos del mismo nivel o del registro raíz.\n *\n * Nota de arquitectura: la importación de `FieldCondition` es SOLO de tipo\n * (se elimina en compilación) — no hay dependencia de runtime con `core`.\n */\n\n/** Resuelve una condición. Se resuelve contra el nivel propio; si la clave\n * no existe ahí, contra la raíz del registro. */\nexport function evaluateCondition(\n condition: FieldCondition,\n siblingValues: Record<string, unknown>,\n rootValues: Record<string, unknown> = {},\n): boolean {\n const source = condition.field in siblingValues ? siblingValues : rootValues;\n const actual = source[condition.field];\n const expected = condition.value;\n\n switch (condition.operator) {\n case 'eq':\n return actual === expected;\n case 'ne':\n return actual !== expected;\n case 'empty':\n return isEmpty(actual);\n case 'contains':\n return contains(actual, expected);\n }\n}\n\nfunction isEmpty(value: unknown): boolean {\n if (value === undefined || value === null || value === '') {\n return true;\n }\n if (Array.isArray(value)) {\n return value.length === 0;\n }\n return false;\n}\n\nfunction contains(actual: unknown, expected: unknown): boolean {\n if (typeof actual === 'string') {\n return actual.includes(String(expected));\n }\n if (Array.isArray(actual)) {\n return actual.includes(expected);\n }\n return false;\n}\n"],"mappings":";;;;AAuCA,SAAgB,mBAAmB,QAAwB;CACzD,MAAM,UAAU,UAAU,OAAO,QAAQ;CACzC,MAAM,QAAQ,SAAS,UAAU,OAAO;CACxC,IAAI,CAAC,WAAW,CAAC,OAAO,OAAO;CAC/B,MAAM,WAAW,MAAM,QAAQ;CAC/B,OAAO,CAAC,QAAQ,IAAI,GAAI,aAAa,KAAK,CAAA,IAAK,SAAS,MAAM,GAAG,CAAE;AACrE;AAOA,SAAgB,cAAc,SAA4B,KAAW;CACnE,MAAM,WAAqB,CAAA;CAC3B,KAAK,MAAM,YAAY,SACrB,IAAI,SAAS,WAAW,GAAG,GAAG;EAC5B,MAAM,SAAS,SAAS,MAAM,CAAC;EAC/B,IAAI,WAAW,OACb,MAAM,IAAI,MAAM,aAAa,OAAM,yCAA0C;EAE/E,SAAS,KAAK,GAAG;CACnB,OACE,SAAS,KAAK,QAAQ;CAG1B,OAAO;AACT;AAGA,IAAa,wBAAb,MAAa,sBAAqB;CACf,SAAS,OAAO,MAAM;CAG/B;CASR,MAAM,SAAS,SAAuC,OAAqB;EACzE,IAAI,YAAY,QAAW,OAAO;EAClC,IAAI,QAAQ,OAAO,MAAM,QAAQ,OAAO;EACxC,IAAI,QAAQ,SAAS,SAAS,OAAO;EAErC,MAAM,UAAU,mBAAmB,QAAQ,MAAM;EACjD,IAAI,YAAY,QACd,MAAM,IAAI,MACR,YAAY,QAAQ,OAAO,SAAQ,GAAI,QAAQ,OAAO,KAAI,2BAA4B;EAI1F,MAAM,YAAY,KAAK,OAAO;EAC9B,MAAM,KAAK,MAAM,KAAK,OAAO,SAAS,CAAC,KAAK,GAAG,cAAc,SAAS,MAAM,GAAG,CAAC,CAAC;EACjF,IAAI,IAAI,KAAK,SAAS;EACtB,OAAO;CACT;CAQA,MAAM,KAAK,YAAmB;EAC5B,IAAI,eAAe,QAAW,OAAO,KAAK,OAAO,SAAS,CAAC,UAAU,CAAC;EAEtE,IAAI,KAAK,WAAW,QAAW;GAC7B,MAAM,UAAU,KAAK;GACrB,KAAK,SAAS;GACd,OAAO,KAAK,OAAO,cAAc,OAAO;EAC1C;EAEA,MAAM,UAAU,KAAK,cAAa;EAClC,OAAO,YAAY,SACf,KAAK,OAAO,SAAS,CAAC,GAAG,CAAC,IAC1B,KAAK,OAAO,SAAS,CAAC,KAAK,OAAO,CAAC;CACzC;CAGQ,gBAAa;EACnB,IAAI,OAAsC,KAAK,OAAO,YAAY,SAAS;EAC3E,OAAO,SAAS,MAAM;GACpB,MAAM,KAAK,KAAK,OAAO;GACvB,IAAI,OAAO,QAAW,OAAO,OAAO,EAAE;GACtC,OAAO,KAAK;EACd;CAEF;CA7DW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAqB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAArB,OAAA,QAAA,GAAA,sBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAqB,YADR;CAAM,CAAA;;AACnB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAqB,YAAA,CAAA;EADjC,MAAA;EAAW,MAAA,CAAA,EAAE,YAAY,OAAM,CAAE;;;ACvDlC,SAAgB,kBACd,WACA,eACA,aAAsC,CAAA,GAAE;CAGxC,MAAM,UADS,UAAU,SAAS,gBAAgB,gBAAgB,WACnD,CAAO,UAAU;CAChC,MAAM,WAAW,UAAU;CAE3B,QAAQ,UAAU,UAAlB;EACE,KAAK,MACH,OAAO,WAAW;EACpB,KAAK,MACH,OAAO,WAAW;EACpB,KAAK,SACH,OAAO,QAAQ,MAAM;EACvB,KAAK,YACH,OAAO,SAAS,QAAQ,QAAQ;CACpC;AACF;AAEA,SAAS,QAAQ,OAAc;CAC7B,IAAI,UAAU,UAAa,UAAU,QAAQ,UAAU,IACrD,OAAO;CAET,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO,MAAM,WAAW;CAE1B,OAAO;AACT;AAEA,SAAS,SAAS,QAAiB,UAAiB;CAClD,IAAI,OAAO,WAAW,UACpB,OAAO,OAAO,SAAS,OAAO,QAAQ,CAAC;CAEzC,IAAI,MAAM,QAAQ,MAAM,GACtB,OAAO,OAAO,SAAS,QAAQ;CAEjC,OAAO;AACT"}
@@ -1,141 +0,0 @@
1
- import { n as FieldAria } from "./tinya-code-gas-admin-ui-field-aria-BD1Wiggc.mjs";
2
- import { t as childTree } from "./tinya-code-gas-admin-ui-field-node-CIK6KNN_.mjs";
3
- import * as i0 from "@angular/core";
4
- import { Component, computed, input } from "@angular/core";
5
- import { FormField } from "@angular/forms/signals";
6
- var FieldCurrency = class FieldCurrency {
7
- field = input.required(...ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []);
8
- tree = input.required(...ngDevMode ? [{ debugName: "tree" }] : /* istanbul ignore next */ []);
9
- node = computed(() => childTree(this.tree(), this.field().key), ...ngDevMode ? [{ debugName: "node" }] : /* istanbul ignore next */ []);
10
- state = computed(() => this.node()(), ...ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []);
11
- currencyCode = computed(() => {
12
- const from = this.field().currencyFrom;
13
- if (!from) return null;
14
- const value = childTree(this.tree(), from)().value();
15
- return typeof value === "string" && value !== "" ? value : null;
16
- }, ...ngDevMode ? [{ debugName: "currencyCode" }] : /* istanbul ignore next */ []);
17
- symbol = computed(() => {
18
- const code = this.currencyCode();
19
- if (code === null) return null;
20
- try {
21
- return new Intl.NumberFormat("es-PE", {
22
- style: "currency",
23
- currency: code
24
- }).formatToParts(0).find((part) => part.type === "currency")?.value ?? code;
25
- } catch {
26
- return code;
27
- }
28
- }, ...ngDevMode ? [{ debugName: "symbol" }] : /* istanbul ignore next */ []);
29
- static ɵfac = i0.ɵɵngDeclareFactory({
30
- minVersion: "12.0.0",
31
- version: "22.2.3",
32
- ngImport: i0,
33
- type: FieldCurrency,
34
- deps: [],
35
- target: i0.ɵɵFactoryTarget.Component
36
- });
37
- static ɵcmp = i0.ɵɵngDeclareComponent({
38
- minVersion: "17.0.0",
39
- version: "22.2.3",
40
- type: FieldCurrency,
41
- isStandalone: true,
42
- selector: "app-field-currency",
43
- inputs: {
44
- field: {
45
- classPropertyName: "field",
46
- publicName: "field",
47
- isSignal: true,
48
- isRequired: true,
49
- transformFunction: null
50
- },
51
- tree: {
52
- classPropertyName: "tree",
53
- publicName: "tree",
54
- isSignal: true,
55
- isRequired: true,
56
- transformFunction: null
57
- }
58
- },
59
- ngImport: i0,
60
- template: `
61
- <div class="flex items-center gap-2">
62
- @if (symbol(); as symbol) {
63
- <span class="shrink-0 text-sm text-neutral" data-testid="currency-symbol">{{
64
- symbol
65
- }}</span>
66
- }
67
- <input
68
- type="number"
69
- step="any"
70
- class="field-input"
71
- [id]="state().name()"
72
- [formField]="node()"
73
- [placeholder]="field().placeholder ?? ''"
74
- />
75
- </div>
76
- `,
77
- isInline: true,
78
- dependencies: [{
79
- kind: "directive",
80
- type: FieldAria,
81
- selector: "input[id], select[id], textarea[id], output[id]"
82
- }, {
83
- kind: "directive",
84
- type: FormField,
85
- selector: "[formField]",
86
- inputs: ["formField"],
87
- exportAs: ["formField"]
88
- }]
89
- });
90
- };
91
- i0.ɵɵngDeclareClassMetadata({
92
- minVersion: "12.0.0",
93
- version: "22.2.3",
94
- ngImport: i0,
95
- type: FieldCurrency,
96
- decorators: [{
97
- type: Component,
98
- args: [{
99
- selector: "app-field-currency",
100
- imports: [FieldAria, FormField],
101
- template: `
102
- <div class="flex items-center gap-2">
103
- @if (symbol(); as symbol) {
104
- <span class="shrink-0 text-sm text-neutral" data-testid="currency-symbol">{{
105
- symbol
106
- }}</span>
107
- }
108
- <input
109
- type="number"
110
- step="any"
111
- class="field-input"
112
- [id]="state().name()"
113
- [formField]="node()"
114
- [placeholder]="field().placeholder ?? ''"
115
- />
116
- </div>
117
- `
118
- }]
119
- }],
120
- propDecorators: {
121
- field: [{
122
- type: i0.Input,
123
- args: [{
124
- isSignal: true,
125
- alias: "field",
126
- required: true
127
- }]
128
- }],
129
- tree: [{
130
- type: i0.Input,
131
- args: [{
132
- isSignal: true,
133
- alias: "tree",
134
- required: true
135
- }]
136
- }]
137
- }
138
- });
139
- export { FieldCurrency };
140
-
141
- //# sourceMappingURL=tinya-code-gas-admin-ui-currency-BvuF3Z63.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tinya-code-gas-admin-ui-currency-BvuF3Z63.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/fields/currency/currency.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\n\nimport type { CurrencyField } from '../../core/models/schema.model';\nimport { FieldAria } from '../field-aria';\nimport { childTree, type RootTree } from '../field-node';\n\n/**\n * Número con prefijo de moneda (base.md §5.1). El valor sigue siendo número\n * puro; el prefijo sale del campo `currencyFrom` (código ISO, ej. `PEN`)\n * traducido a símbolo con Intl.\n */\n@Component({\n selector: 'app-field-currency',\n imports: [FieldAria, FormField],\n template: `\n <div class=\"flex items-center gap-2\">\n @if (symbol(); as symbol) {\n <span class=\"shrink-0 text-sm text-neutral\" data-testid=\"currency-symbol\">{{\n symbol\n }}</span>\n }\n <input\n type=\"number\"\n step=\"any\"\n class=\"field-input\"\n [id]=\"state().name()\"\n [formField]=\"node()\"\n [placeholder]=\"field().placeholder ?? ''\"\n />\n </div>\n `,\n})\nexport class FieldCurrency {\n readonly field = input.required<CurrencyField>();\n readonly tree = input.required<RootTree>();\n\n protected readonly node = computed(() => childTree<number>(this.tree(), this.field().key));\n protected readonly state = computed(() => this.node()());\n\n /** Código ISO de la moneda desde el campo hermano (`currencyFrom`). */\n private readonly currencyCode = computed(() => {\n const from = this.field().currencyFrom;\n if (!from) {\n return null;\n }\n const value = childTree<unknown>(this.tree(), from)().value();\n return typeof value === 'string' && value !== '' ? value : null;\n });\n\n /** Símbolo localizado (`S/` para PEN); el código crudo si Intl lo rechaza. */\n protected readonly symbol = computed(() => {\n const code = this.currencyCode();\n if (code === null) {\n return null;\n }\n try {\n const parts = new Intl.NumberFormat('es-PE', {\n style: 'currency',\n currency: code,\n }).formatToParts(0);\n return parts.find((part) => part.type === 'currency')?.value ?? code;\n } catch {\n return code;\n }\n });\n}\n"],"mappings":";;;;;AAiCA,IAAa,gBAAb,MAAa,cAAa;CACf,QAAQ,MAAM,SAAyB,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CACvC,OAAO,MAAM,SAAoB,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAEvB,OAAO,eAAe,UAAkB,KAAK,KAAI,GAAI,KAAK,MAAK,CAAE,CAAC,GAAG,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CACvE,QAAQ,eAAe,KAAK,KAAI,CAAE,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAGvC,eAAe,eAAc;EAC5C,MAAM,OAAO,KAAK,MAAK,CAAE,CAAC;EAC1B,IAAI,CAAC,MACH,OAAO;EAET,MAAM,QAAQ,UAAmB,KAAK,KAAI,GAAI,IAAI,CAAC,CAAA,CAAE,CAAC,MAAK;EAC3D,OAAO,OAAO,UAAU,YAAY,UAAU,KAAK,QAAQ;CAC7D,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;CAGiB,SAAS,eAAc;EACxC,MAAM,OAAO,KAAK,aAAY;EAC9B,IAAI,SAAS,MACX,OAAO;EAET,IAAI;GAKF,OAJc,IAAI,KAAK,aAAa,SAAS;IAC3C,OAAO;IACP,UAAU;GACX,CAAA,CAAC,CAAC,cAAc,CACV,CAAA,CAAM,MAAM,SAAS,KAAK,SAAS,UAAU,CAAC,EAAE,SAAS;EAClE,QAAQ;GACN,OAAO;EACT;CACF,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CAhCS,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAa,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAb,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAa,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,UAAA;EAAA,UAlBd;;;;;;;;;;;;;;;;;EAgBT,UAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MAjBS;GAAS,UAAA;EAAA,GAAA;GAAA,MAAA;GAAA,MAAE;GAAS,UAAA;GAAA,QAAA,CAAA,WAAA;GAAA,UAAA,CAAA,WAAA;EAAA,CAAA;CAAA,CAAA;;AAmBnB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAa,YAAA,CAAA;EArBzB,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,SAAS,CAAC,WAAW,SAAS;GAC9B,UAAU;;;;;;;;;;;;;;;;;EAiBX,CAAA"}
@@ -1,88 +0,0 @@
1
- import { i as getSchema, l as ApiService } from "./tinya-code-gas-admin-ui-schema-catalog-D0Pk0wAN.mjs";
2
- import { t as interpolateTemplate } from "./tinya-code-gas-admin-ui-template-interpolator-ewv7CkNX.mjs";
3
- import * as i0 from "@angular/core";
4
- import { Service, inject } from "@angular/core";
5
- import { firstValueFrom } from "rxjs";
6
- const TTL_MS = 3e4;
7
- const MAX_CLAVES = 100;
8
- function interpolateParams(params, ctx) {
9
- const out = {};
10
- if (params === void 0) return out;
11
- for (const name of Object.keys(params)) {
12
- const raw = params[name];
13
- const value = interpolateTemplate(raw, ctx ?? {});
14
- if (value !== "") out[name] = value;
15
- }
16
- return out;
17
- }
18
- function dataSourceKey(source, ctx) {
19
- const params = interpolateParams(source.params, ctx);
20
- const query = Object.keys(params).sort().map((name) => `${encodeURIComponent(name)}=${encodeURIComponent(params[name])}`).join("&");
21
- return `${source.resource}|${source.view ?? ""}|${query}`;
22
- }
23
- var DataSourceService = class DataSourceService {
24
- api = inject(ApiService);
25
- cache = /* @__PURE__ */ new Map();
26
- async rows(source, ctx, fresh = false) {
27
- const key = dataSourceKey(source, ctx);
28
- if (!fresh) {
29
- const hit = this.cache.get(key);
30
- if (hit !== void 0 && Date.now() - hit.at < TTL_MS) return hit.promise;
31
- }
32
- const promise = this.fetch(source, ctx).catch((error) => {
33
- this.cache.delete(key);
34
- throw error;
35
- });
36
- this.cache.set(key, {
37
- promise,
38
- at: Date.now()
39
- });
40
- if (this.cache.size > MAX_CLAVES) {
41
- const oldest = this.cache.keys().next();
42
- if (!oldest.done) this.cache.delete(oldest.value);
43
- }
44
- return promise;
45
- }
46
- invalidate(resourceId) {
47
- if (resourceId === void 0) {
48
- this.cache.clear();
49
- return;
50
- }
51
- const prefix = `${resourceId}|`;
52
- for (const key of [...this.cache.keys()]) if (key.startsWith(prefix)) this.cache.delete(key);
53
- }
54
- async fetch(source, ctx) {
55
- const target = getSchema(source.resource);
56
- if (!target) throw new Error(`Recurso desconocido: ${source.resource}`);
57
- const payload = {};
58
- if (source.view !== void 0 && source.view !== "") payload["view"] = source.view;
59
- const params = interpolateParams(source.params, ctx);
60
- if (Object.keys(params).length > 0) payload["params"] = params;
61
- const rows = await firstValueFrom(this.api.list(target.endpoint, payload));
62
- return Array.isArray(rows) ? rows : [];
63
- }
64
- static ɵfac = i0.ɵɵngDeclareFactory({
65
- minVersion: "12.0.0",
66
- version: "22.2.3",
67
- ngImport: i0,
68
- type: DataSourceService,
69
- deps: [],
70
- target: i0.ɵɵFactoryTarget.Service
71
- });
72
- static ɵprov = i0.ɵɵngDeclareService({
73
- minVersion: "22.0.0",
74
- version: "22.2.3",
75
- ngImport: i0,
76
- type: DataSourceService
77
- });
78
- };
79
- i0.ɵɵngDeclareClassMetadata({
80
- minVersion: "12.0.0",
81
- version: "22.2.3",
82
- ngImport: i0,
83
- type: DataSourceService,
84
- decorators: [{ type: Service }]
85
- });
86
- export { dataSourceKey as n, DataSourceService as t };
87
-
88
- //# sourceMappingURL=tinya-code-gas-admin-ui-data-source.service-96FSbN72.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tinya-code-gas-admin-ui-data-source.service-96FSbN72.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/core/services/data-source.service.ts"],"sourcesContent":["import { inject, Service } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\n\nimport type { DataSource } from '../models/schema.model';\nimport { interpolateTemplate } from '../utils/template-interpolator';\nimport { getSchema } from '../registry/schema-catalog';\nimport { ApiService } from './api.service';\n\n/** Fila cruda de un listado: el motor no impone forma a las columnas. */\nexport type SourceRow = Record<string, unknown>;\n\n/**\n * Cuánto se reutiliza una respuesta pedida igual (F8 · R6.5).\n *\n * Un panel de administración lee mucho y escribe poco: medio minuto de\n * frescura cubre un recorrido por varios formularios sin repetir la misma\n * vuelta. Es una decisión de UX, no de contrato — `invalidate()` la salta\n * cuando el usuario acaba de crear lo que la fuente lista.\n */\nconst TTL_MS = 30_000;\n\n/** Techo de claves cacheadas: un Map sin límite es una fuga en una sesión larga. */\nconst MAX_CLAVES = 100;\n\n/**\n * `source.params` con cada `{campo}` resuelto contra `ctx`.\n *\n * - Un valor que se resuelve **vacío se OMITE** en vez de mandar `''`: el\n * back distingue «parámetro ausente» (fail-closed ⇒ sin filas) de un\n * `eq ''` que podría cruzarse con filas realmente vacías.\n * - Un parámetro sin marcador `{}` es literal y viaja tal cual.\n */\nexport function interpolateParams(\n params: Record<string, string> | undefined,\n ctx?: Record<string, unknown>,\n): Record<string, string> {\n const out: Record<string, string> = {};\n if (params === undefined) return out;\n for (const name of Object.keys(params)) {\n const raw = params[name];\n const value = interpolateTemplate(raw, ctx ?? {});\n if (value !== '') out[name] = value;\n }\n return out;\n}\n\n/**\n * Clave de caché de una fuente: `resource|view|params` (F8 · R6.5).\n *\n * Los parámetros van **resueltos** y ordenados, así que dos fuentes que\n * terminan pidiendo lo mismo comparten entrada, y un `{campo}` que cambia\n * es otra entrada. Pura: es también el valor que `resource({ params })` de\n * Angular compara para decidir si vuelve a cargar.\n */\nexport function dataSourceKey(source: DataSource, ctx?: Record<string, unknown>): string {\n const params = interpolateParams(source.params, ctx);\n const names = Object.keys(params).sort();\n const query = names\n .map((name) => `${encodeURIComponent(name)}=${encodeURIComponent(params[name])}`)\n .join('&');\n return `${source.resource}|${source.view ?? ''}|${query}`;\n}\n\n/**\n * Fetcher único de `source` (F8 · R6.5): relations, selects y widgets del\n * panel piden sus filas ACÁ y no cada uno desde su componente.\n *\n * - **Caché por `resource+view+params`** con TTL e invalidación explícita —\n * es la pieza que evita que seis widgets del panel disparen seis vueltas\n * iguales a la misma vista.\n * - **Deduplicación de vuelta en vuelo**: dos consumidores que pidan la misma\n * clave en el mismo ciclo comparten la promesa (no la respuesta, la vuelta).\n * - Un error **no queda cacheado**: se borra la entrada para que la recarga\n * del consumidor vuelva a intentarlo en vez de devolver siempre la misma\n * rechazada.\n */\n@Service()\nexport class DataSourceService {\n private readonly api = inject(ApiService);\n\n private readonly cache = new Map<string, { promise: Promise<SourceRow[]>; at: number }>();\n\n /**\n * Filas de la fuente declarada.\n *\n * `fresh` salta la caché (recarga tras una escritura); `ctx` sólo se usa\n * para resolver `{campo}` en `params` y no cambia la forma de la respuesta.\n */\n async rows(\n source: DataSource,\n ctx?: Record<string, unknown>,\n fresh = false,\n ): Promise<SourceRow[]> {\n const key = dataSourceKey(source, ctx);\n if (!fresh) {\n const hit = this.cache.get(key);\n if (hit !== undefined && Date.now() - hit.at < TTL_MS) return hit.promise;\n }\n const promise = this.fetch(source, ctx).catch((error: unknown) => {\n this.cache.delete(key);\n throw error;\n });\n this.cache.set(key, { promise, at: Date.now() });\n if (this.cache.size > MAX_CLAVES) {\n // El Map conserva el orden de inserción: sale la más vieja.\n const oldest = this.cache.keys().next();\n if (!oldest.done) this.cache.delete(oldest.value);\n }\n return promise;\n }\n\n /**\n * Vacía las filas ya pedidas. Sin argumento, todas; con un `resourceId`,\n * sólo las de ese recurso (lo que acaba de crear el drawer de relación).\n */\n invalidate(resourceId?: string): void {\n if (resourceId === undefined) {\n this.cache.clear();\n return;\n }\n const prefix = `${resourceId}|`;\n for (const key of [...this.cache.keys()]) {\n if (key.startsWith(prefix)) this.cache.delete(key);\n }\n }\n\n private async fetch(source: DataSource, ctx?: Record<string, unknown>): Promise<SourceRow[]> {\n const target = getSchema(source.resource);\n if (!target) {\n // Un id que ni siquiera existe en el registry es error de\n // configuración, no de red: el consumidor lo pinta como «no se\n // pudieron cargar» con este texto.\n throw new Error(`Recurso desconocido: ${source.resource}`);\n }\n const payload: Record<string, unknown> = {};\n if (source.view !== undefined && source.view !== '') payload['view'] = source.view;\n const params = interpolateParams(source.params, ctx);\n if (Object.keys(params).length > 0) payload['params'] = params;\n const rows = await firstValueFrom(this.api.list<SourceRow>(target.endpoint, payload));\n return Array.isArray(rows) ? rows : [];\n }\n}\n"],"mappings":";;;;;AAmBA,MAAM,SAAS;AAGf,MAAM,aAAa;AAUnB,SAAgB,kBACd,QACA,KAA6B;CAE7B,MAAM,MAA8B,CAAA;CACpC,IAAI,WAAW,QAAW,OAAO;CACjC,KAAK,MAAM,QAAQ,OAAO,KAAK,MAAM,GAAG;EACtC,MAAM,MAAM,OAAO;EACnB,MAAM,QAAQ,oBAAoB,KAAK,OAAO,CAAA,CAAE;EAChD,IAAI,UAAU,IAAI,IAAI,QAAQ;CAChC;CACA,OAAO;AACT;AAUA,SAAgB,cAAc,QAAoB,KAA6B;CAC7E,MAAM,SAAS,kBAAkB,OAAO,QAAQ,GAAG;CAEnD,MAAM,QADQ,OAAO,KAAK,MAAM,CAAC,CAAC,KACpB,CAAA,CACX,KAAK,SAAS,GAAG,mBAAmB,IAAI,EAAC,GAAI,mBAAmB,OAAO,KAAK,GAAG,CAAC,CAChF,KAAK,GAAG;CACX,OAAO,GAAG,OAAO,SAAQ,GAAI,OAAO,QAAQ,GAAE,GAAI;AACpD;AAgBA,IAAa,oBAAb,MAAa,kBAAiB;CACX,MAAM,OAAO,UAAU;CAEvB,wBAAQ,IAAI,IAAG;CAQhC,MAAM,KACJ,QACA,KACA,QAAQ,OAAK;EAEb,MAAM,MAAM,cAAc,QAAQ,GAAG;EACrC,IAAI,CAAC,OAAO;GACV,MAAM,MAAM,KAAK,MAAM,IAAI,GAAG;GAC9B,IAAI,QAAQ,UAAa,KAAK,IAAG,IAAK,IAAI,KAAK,QAAQ,OAAO,IAAI;EACpE;EACA,MAAM,UAAU,KAAK,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,UAAkB;GAC/D,KAAK,MAAM,OAAO,GAAG;GACrB,MAAM;EACR,CAAC;EACD,KAAK,MAAM,IAAI,KAAK;GAAE;GAAS,IAAI,KAAK,IAAG;EAAE,CAAE;EAC/C,IAAI,KAAK,MAAM,OAAO,YAAY;GAEhC,MAAM,SAAS,KAAK,MAAM,KAAI,CAAE,CAAC,KAAI;GACrC,IAAI,CAAC,OAAO,MAAM,KAAK,MAAM,OAAO,OAAO,KAAK;EAClD;EACA,OAAO;CACT;CAMA,WAAW,YAAmB;EAC5B,IAAI,eAAe,QAAW;GAC5B,KAAK,MAAM,MAAK;GAChB;EACF;EACA,MAAM,SAAS,GAAG,WAAU;EAC5B,KAAK,MAAM,OAAO,CAAC,GAAG,KAAK,MAAM,KAAI,CAAE,GACrC,IAAI,IAAI,WAAW,MAAM,GAAG,KAAK,MAAM,OAAO,GAAG;CAErD;CAEQ,MAAM,MAAM,QAAoB,KAA6B;EACnE,MAAM,SAAS,UAAU,OAAO,QAAQ;EACxC,IAAI,CAAC,QAIH,MAAM,IAAI,MAAM,wBAAwB,OAAO,UAAU;EAE3D,MAAM,UAAmC,CAAA;EACzC,IAAI,OAAO,SAAS,UAAa,OAAO,SAAS,IAAI,QAAQ,UAAU,OAAO;EAC9E,MAAM,SAAS,kBAAkB,OAAO,QAAQ,GAAG;EACnD,IAAI,OAAO,KAAK,MAAM,CAAC,CAAC,SAAS,GAAG,QAAQ,YAAY;EACxD,MAAM,OAAO,MAAM,eAAe,KAAK,IAAI,KAAgB,OAAO,UAAU,OAAO,CAAC;EACpF,OAAO,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAA;CACtC;CA/DW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAiB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAjB,OAAA,QAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;CAAiB,CAAA;;AAAjB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAiB,YAAA,CAAA,EAD7B,MAAA,QAAA,CAAA"}
@@ -1,107 +0,0 @@
1
- import { n as FieldAria } from "./tinya-code-gas-admin-ui-field-aria-BD1Wiggc.mjs";
2
- import { t as childTree } from "./tinya-code-gas-admin-ui-field-node-CIK6KNN_.mjs";
3
- import * as i0 from "@angular/core";
4
- import { Component, computed, input } from "@angular/core";
5
- import { FormField } from "@angular/forms/signals";
6
- var FieldDate = class FieldDate {
7
- field = input.required(...ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []);
8
- tree = input.required(...ngDevMode ? [{ debugName: "tree" }] : /* istanbul ignore next */ []);
9
- node = computed(() => childTree(this.tree(), this.field().key), ...ngDevMode ? [{ debugName: "node" }] : /* istanbul ignore next */ []);
10
- state = computed(() => this.node()(), ...ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []);
11
- static ɵfac = i0.ɵɵngDeclareFactory({
12
- minVersion: "12.0.0",
13
- version: "22.2.3",
14
- ngImport: i0,
15
- type: FieldDate,
16
- deps: [],
17
- target: i0.ɵɵFactoryTarget.Component
18
- });
19
- static ɵcmp = i0.ɵɵngDeclareComponent({
20
- minVersion: "17.1.0",
21
- version: "22.2.3",
22
- type: FieldDate,
23
- isStandalone: true,
24
- selector: "app-field-date",
25
- inputs: {
26
- field: {
27
- classPropertyName: "field",
28
- publicName: "field",
29
- isSignal: true,
30
- isRequired: true,
31
- transformFunction: null
32
- },
33
- tree: {
34
- classPropertyName: "tree",
35
- publicName: "tree",
36
- isSignal: true,
37
- isRequired: true,
38
- transformFunction: null
39
- }
40
- },
41
- ngImport: i0,
42
- template: `
43
- <input
44
- type="date"
45
- class="field-input"
46
- [id]="state().name()"
47
- [formField]="node()"
48
- [placeholder]="field().placeholder ?? ''"
49
- />
50
- `,
51
- isInline: true,
52
- dependencies: [{
53
- kind: "directive",
54
- type: FieldAria,
55
- selector: "input[id], select[id], textarea[id], output[id]"
56
- }, {
57
- kind: "directive",
58
- type: FormField,
59
- selector: "[formField]",
60
- inputs: ["formField"],
61
- exportAs: ["formField"]
62
- }]
63
- });
64
- };
65
- i0.ɵɵngDeclareClassMetadata({
66
- minVersion: "12.0.0",
67
- version: "22.2.3",
68
- ngImport: i0,
69
- type: FieldDate,
70
- decorators: [{
71
- type: Component,
72
- args: [{
73
- selector: "app-field-date",
74
- imports: [FieldAria, FormField],
75
- template: `
76
- <input
77
- type="date"
78
- class="field-input"
79
- [id]="state().name()"
80
- [formField]="node()"
81
- [placeholder]="field().placeholder ?? ''"
82
- />
83
- `
84
- }]
85
- }],
86
- propDecorators: {
87
- field: [{
88
- type: i0.Input,
89
- args: [{
90
- isSignal: true,
91
- alias: "field",
92
- required: true
93
- }]
94
- }],
95
- tree: [{
96
- type: i0.Input,
97
- args: [{
98
- isSignal: true,
99
- alias: "tree",
100
- required: true
101
- }]
102
- }]
103
- }
104
- });
105
- export { FieldDate };
106
-
107
- //# sourceMappingURL=tinya-code-gas-admin-ui-date-1SJGXZrd.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tinya-code-gas-admin-ui-date-1SJGXZrd.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/fields/date/date.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\n\nimport type { DateField } from '../../core/models/schema.model';\nimport { FieldAria } from '../field-aria';\nimport { childTree, type RootTree } from '../field-node';\n\n/**\n * Selector de fecha ISO `YYYY-MM-DD` (base.md §5.1).\n *\n * `min`/`max` del schema se validan con reglas propias en\n * `pages/form-view/form-schema.ts`: `minDate`/`maxDate` de Signal Forms\n * exigen valores `Date` y este modelo guarda strings. `FormField` solo setea\n * los atributos nativos `min`/`max` cuando existen las reglas `min()`/`max()`\n * (que aplican a números).\n */\n@Component({\n selector: 'app-field-date',\n imports: [FieldAria, FormField],\n template: `\n <input\n type=\"date\"\n class=\"field-input\"\n [id]=\"state().name()\"\n [formField]=\"node()\"\n [placeholder]=\"field().placeholder ?? ''\"\n />\n `,\n})\nexport class FieldDate {\n readonly field = input.required<DateField>();\n readonly tree = input.required<RootTree>();\n\n protected readonly node = computed(() => childTree<string>(this.tree(), this.field().key));\n protected readonly state = computed(() => this.node()());\n}\n"],"mappings":";;;;;AA6BA,IAAa,YAAb,MAAa,UAAS;CACX,QAAQ,MAAM,SAAqB,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CACnC,OAAO,MAAM,SAAoB,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAEvB,OAAO,eAAe,UAAkB,KAAK,KAAI,GAAI,KAAK,MAAK,CAAE,CAAC,GAAG,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CACvE,QAAQ,eAAe,KAAK,KAAI,CAAE,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAL7C,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAS,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAT,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAS,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,UAAA;EAAA,UAVV;;;;;;;;;EAQT,UAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MATS;GAAS,UAAA;EAAA,GAAA;GAAA,MAAA;GAAA,MAAE;GAAS,UAAA;GAAA,QAAA,CAAA,WAAA;GAAA,UAAA,CAAA,WAAA;EAAA,CAAA;CAAA,CAAA;;AAWnB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAS,YAAA,CAAA;EAbrB,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,SAAS,CAAC,WAAW,SAAS;GAC9B,UAAU;;;;;;;;;EASX,CAAA"}
@@ -1,140 +0,0 @@
1
- import { t as __exportAll } from "./tinya-code-gas-admin-ui-rolldown-runtime-DpJrqANO.mjs";
2
- import { t as Badge } from "./tinya-code-gas-admin-ui-badge-EeCA_l-o.mjs";
3
- import * as i0 from "@angular/core";
4
- import { Component, computed, input } from "@angular/core";
5
- var display_badge_exports = /* @__PURE__ */ __exportAll({
6
- FieldDisplayBadge: () => FieldDisplayBadge,
7
- resolveBadgeKind: () => resolveBadgeKind
8
- });
9
- var FieldDisplayBadge = class FieldDisplayBadge {
10
- field = input.required(...ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []);
11
- value = input(null, ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
12
- chip = input(false, ...ngDevMode ? [{ debugName: "chip" }] : /* istanbul ignore next */ []);
13
- label = computed(() => {
14
- if (this.field().type === "boolean") return this.value() ? "Sí" : "No";
15
- const encontrada = (this.field().options ?? []).find((o) => o.value === String(this.value()));
16
- return encontrada ? encontrada.label : String(this.value());
17
- }, ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
18
- kind = computed(() => {
19
- if (this.field().type === "boolean") return this.value() ? "success" : "neutral";
20
- return resolveBadgeKind(String(this.value()));
21
- }, ...ngDevMode ? [{ debugName: "kind" }] : /* istanbul ignore next */ []);
22
- static ɵfac = i0.ɵɵngDeclareFactory({
23
- minVersion: "12.0.0",
24
- version: "22.2.3",
25
- ngImport: i0,
26
- type: FieldDisplayBadge,
27
- deps: [],
28
- target: i0.ɵɵFactoryTarget.Component
29
- });
30
- static ɵcmp = i0.ɵɵngDeclareComponent({
31
- minVersion: "17.1.0",
32
- version: "22.2.3",
33
- type: FieldDisplayBadge,
34
- isStandalone: true,
35
- selector: "app-field-display-badge",
36
- inputs: {
37
- field: {
38
- classPropertyName: "field",
39
- publicName: "field",
40
- isSignal: true,
41
- isRequired: true,
42
- transformFunction: null
43
- },
44
- value: {
45
- classPropertyName: "value",
46
- publicName: "value",
47
- isSignal: true,
48
- isRequired: false,
49
- transformFunction: null
50
- },
51
- chip: {
52
- classPropertyName: "chip",
53
- publicName: "chip",
54
- isSignal: true,
55
- isRequired: false,
56
- transformFunction: null
57
- }
58
- },
59
- ngImport: i0,
60
- template: `<app-badge [label]="label()" [kind]="kind()" />`,
61
- isInline: true,
62
- dependencies: [{
63
- kind: "component",
64
- type: Badge,
65
- selector: "app-badge",
66
- inputs: ["label", "kind"]
67
- }]
68
- });
69
- };
70
- i0.ɵɵngDeclareClassMetadata({
71
- minVersion: "12.0.0",
72
- version: "22.2.3",
73
- ngImport: i0,
74
- type: FieldDisplayBadge,
75
- decorators: [{
76
- type: Component,
77
- args: [{
78
- selector: "app-field-display-badge",
79
- imports: [Badge],
80
- template: `<app-badge [label]="label()" [kind]="kind()" />`
81
- }]
82
- }],
83
- propDecorators: {
84
- field: [{
85
- type: i0.Input,
86
- args: [{
87
- isSignal: true,
88
- alias: "field",
89
- required: true
90
- }]
91
- }],
92
- value: [{
93
- type: i0.Input,
94
- args: [{
95
- isSignal: true,
96
- alias: "value",
97
- required: false
98
- }]
99
- }],
100
- chip: [{
101
- type: i0.Input,
102
- args: [{
103
- isSignal: true,
104
- alias: "chip",
105
- required: false
106
- }]
107
- }]
108
- }
109
- });
110
- function resolveBadgeKind(valor) {
111
- const upper = String(valor).toUpperCase();
112
- if ([
113
- "PENDIENTE",
114
- "WAITING",
115
- "EN_PROCESO",
116
- "PROCESSING"
117
- ].includes(upper)) return "warning";
118
- if ([
119
- "ENTREGADO",
120
- "DELIVERED",
121
- "ACTIVA",
122
- "ACTIVE",
123
- "COMPLETADO",
124
- "SUCCESS",
125
- "SI",
126
- "SÍ"
127
- ].includes(upper)) return "success";
128
- if ([
129
- "CANCELADO",
130
- "CANCELLED",
131
- "REVOCADA",
132
- "REVOKED",
133
- "ERROR",
134
- "NO"
135
- ].includes(upper)) return "danger";
136
- return "neutral";
137
- }
138
- export { resolveBadgeKind as n, display_badge_exports as t };
139
-
140
- //# sourceMappingURL=tinya-code-gas-admin-ui-display-badge-fwk6sDU7.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tinya-code-gas-admin-ui-display-badge-fwk6sDU7.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/fields/display/display-badge.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\n\nimport { Badge, type BadgeKind } from '../../shared/components/badge/badge';\nimport type { FieldSchema, SelectField } from '../../core/models/schema.model';\n\n/**\n * Display por defecto de `boolean` y `select` (R4.1 · modo `display`).\n *\n * Absorbe `formatValue` + `resolveBadgeKind` de `detail-view` (R4.2): los\n * estados siguen clasificándose con el mismo vocabulario —\n * `PENDIENTE/WAITING/EN_PROCESO/PROCESSING` en `warning`,\n * `ENTREGADO/DELIVERED/…` en `success`, `CANCELADO/REVOCADA/ERROR/…` en\n * `danger` y el resto en `neutral` — porque es el criterio que el operador\n * ya reconoce en la cabecera de la ficha.\n *\n * `boolean` pinta `Sí`/`No` con `success`/`neutral` (la paridad de R4.2);\n * los `trueLabel`/`falseLabel` del schema siguen siendo cosa del control de\n * **edición**, y de la columna de lista (R4.3), que sí los usa.\n */\n@Component({\n selector: 'app-field-display-badge',\n imports: [Badge],\n template: `<app-badge [label]=\"label()\" [kind]=\"kind()\" />`,\n})\nexport class FieldDisplayBadge {\n readonly field = input.required<FieldSchema>();\n readonly value = input<unknown>(null);\n /** El chip de la cabecera ya es este componente: se ignora. */\n readonly chip = input(false);\n\n protected readonly label = computed(() => {\n if (this.field().type === 'boolean') {\n return this.value() ? 'Sí' : 'No';\n }\n const opciones = (this.field() as SelectField).options ?? [];\n const encontrada = opciones.find((o) => o.value === String(this.value()));\n return encontrada ? encontrada.label : String(this.value());\n });\n\n protected readonly kind = computed<BadgeKind>(() => {\n if (this.field().type === 'boolean') {\n return this.value() ? 'success' : 'neutral';\n }\n return resolveBadgeKind(String(this.value()));\n });\n}\n\n/**\n * Clasificación de estados, común al display de detalle (acá) y al\n * timeline del historial (`display-list`). Exportada para que R4.3 pueda\n * reusarla si la columna de lista decide alinearse con este criterio.\n */\nexport function resolveBadgeKind(valor: string): BadgeKind {\n const upper = String(valor).toUpperCase();\n if (['PENDIENTE', 'WAITING', 'EN_PROCESO', 'PROCESSING'].includes(upper)) return 'warning';\n if (\n ['ENTREGADO', 'DELIVERED', 'ACTIVA', 'ACTIVE', 'COMPLETADO', 'SUCCESS', 'SI', 'SÍ'].includes(\n upper,\n )\n )\n return 'success';\n if (['CANCELADO', 'CANCELLED', 'REVOCADA', 'REVOKED', 'ERROR', 'NO'].includes(upper))\n return 'danger';\n return 'neutral';\n}\n"],"mappings":";;;;;;;;AAwBA,IAAa,oBAAb,MAAa,kBAAiB;CACnB,QAAQ,MAAM,SAAuB,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CACrC,QAAQ,MAAe,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAE5B,OAAO,MAAM,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAET,QAAQ,eAAc;EACvC,IAAI,KAAK,MAAK,CAAE,CAAC,SAAS,WACxB,OAAO,KAAK,MAAK,IAAK,OAAO;EAG/B,MAAM,cADY,KAAK,MAAK,CAAkB,CAAC,WAAW,CAAA,EACvC,CAAS,MAAM,MAAM,EAAE,UAAU,OAAO,KAAK,MAAK,CAAE,CAAC;EACxE,OAAO,aAAa,WAAW,QAAQ,OAAO,KAAK,MAAK,CAAE;CAC5D,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAEiB,OAAO,eAAyB;EACjD,IAAI,KAAK,MAAK,CAAE,CAAC,SAAS,WACxB,OAAO,KAAK,MAAK,IAAK,YAAY;EAEpC,OAAO,iBAAiB,OAAO,KAAK,MAAK,CAAE,CAAC;CAC9C,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CApBS,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAiB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAjB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAiB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,UAAA;EAAA,UAFlB;EAAiD,UAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MADjD;GAAK,UAAA;GAAA,QAAA,CAAA,SAAA,MAAA;EAAA,CAAA;CAAA,CAAA;;AAGJ,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAiB,YAAA,CAAA;EAL7B,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,SAAS,CAAC,KAAK;GACf,UAAU;EACX,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BD,SAAgB,iBAAiB,OAAa;CAC5C,MAAM,QAAQ,OAAO,KAAK,CAAC,CAAC,YAAW;CACvC,IAAI;EAAC;EAAa;EAAW;EAAc;CAAY,CAAC,CAAC,SAAS,KAAK,GAAG,OAAO;CACjF,IACE;EAAC;EAAa;EAAa;EAAU;EAAU;EAAc;EAAW;EAAM;CAAI,CAAC,CAAC,SAClF,KAAK,GAGP,OAAO;CACT,IAAI;EAAC;EAAa;EAAa;EAAY;EAAW;EAAS;CAAI,CAAC,CAAC,SAAS,KAAK,GACjF,OAAO;CACT,OAAO;AACT"}
@@ -1,119 +0,0 @@
1
- import { t as Badge } from "./tinya-code-gas-admin-ui-badge-EeCA_l-o.mjs";
2
- import * as i0 from "@angular/core";
3
- import { Component, computed, input } from "@angular/core";
4
- const FORMATO_FECHA = new Intl.DateTimeFormat("es-PE", {
5
- dateStyle: "medium",
6
- timeZone: "UTC"
7
- });
8
- var FieldDisplayDate = class FieldDisplayDate {
9
- field = input.required(...ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []);
10
- value = input(null, ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
11
- chip = input(false, ...ngDevMode ? [{ debugName: "chip" }] : /* istanbul ignore next */ []);
12
- texto = computed(() => {
13
- const d = new Date(String(this.value()));
14
- if (Number.isNaN(d.getTime())) return String(this.value());
15
- return FORMATO_FECHA.format(d);
16
- }, ...ngDevMode ? [{ debugName: "texto" }] : /* istanbul ignore next */ []);
17
- static ɵfac = i0.ɵɵngDeclareFactory({
18
- minVersion: "12.0.0",
19
- version: "22.2.3",
20
- ngImport: i0,
21
- type: FieldDisplayDate,
22
- deps: [],
23
- target: i0.ɵɵFactoryTarget.Component
24
- });
25
- static ɵcmp = i0.ɵɵngDeclareComponent({
26
- minVersion: "17.0.0",
27
- version: "22.2.3",
28
- type: FieldDisplayDate,
29
- isStandalone: true,
30
- selector: "app-field-display-date",
31
- inputs: {
32
- field: {
33
- classPropertyName: "field",
34
- publicName: "field",
35
- isSignal: true,
36
- isRequired: true,
37
- transformFunction: null
38
- },
39
- value: {
40
- classPropertyName: "value",
41
- publicName: "value",
42
- isSignal: true,
43
- isRequired: false,
44
- transformFunction: null
45
- },
46
- chip: {
47
- classPropertyName: "chip",
48
- publicName: "chip",
49
- isSignal: true,
50
- isRequired: false,
51
- transformFunction: null
52
- }
53
- },
54
- ngImport: i0,
55
- template: `
56
- @if (chip()) {
57
- <app-badge [label]="texto()" />
58
- } @else {
59
- {{ texto() }}
60
- }
61
- `,
62
- isInline: true,
63
- dependencies: [{
64
- kind: "component",
65
- type: Badge,
66
- selector: "app-badge",
67
- inputs: ["label", "kind"]
68
- }]
69
- });
70
- };
71
- i0.ɵɵngDeclareClassMetadata({
72
- minVersion: "12.0.0",
73
- version: "22.2.3",
74
- ngImport: i0,
75
- type: FieldDisplayDate,
76
- decorators: [{
77
- type: Component,
78
- args: [{
79
- selector: "app-field-display-date",
80
- imports: [Badge],
81
- template: `
82
- @if (chip()) {
83
- <app-badge [label]="texto()" />
84
- } @else {
85
- {{ texto() }}
86
- }
87
- `
88
- }]
89
- }],
90
- propDecorators: {
91
- field: [{
92
- type: i0.Input,
93
- args: [{
94
- isSignal: true,
95
- alias: "field",
96
- required: true
97
- }]
98
- }],
99
- value: [{
100
- type: i0.Input,
101
- args: [{
102
- isSignal: true,
103
- alias: "value",
104
- required: false
105
- }]
106
- }],
107
- chip: [{
108
- type: i0.Input,
109
- args: [{
110
- isSignal: true,
111
- alias: "chip",
112
- required: false
113
- }]
114
- }]
115
- }
116
- });
117
- export { FieldDisplayDate };
118
-
119
- //# sourceMappingURL=tinya-code-gas-admin-ui-display-date-D7zLiDiG.mjs.map