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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. package/fesm2022/tinya-code-gas-admin-ui-badge-EeCA_l-o.mjs +84 -0
  2. package/fesm2022/tinya-code-gas-admin-ui-badge-EeCA_l-o.mjs.map +1 -0
  3. package/fesm2022/tinya-code-gas-admin-ui-bar-chart-G7sEMSBY.mjs +140 -0
  4. package/fesm2022/tinya-code-gas-admin-ui-bar-chart-G7sEMSBY.mjs.map +1 -0
  5. package/fesm2022/tinya-code-gas-admin-ui-boolean-B2ASKL0E.mjs +113 -0
  6. package/fesm2022/tinya-code-gas-admin-ui-boolean-B2ASKL0E.mjs.map +1 -0
  7. package/fesm2022/tinya-code-gas-admin-ui-button-BQjNW8KB.mjs +163 -0
  8. package/fesm2022/tinya-code-gas-admin-ui-button-BQjNW8KB.mjs.map +1 -0
  9. package/fesm2022/tinya-code-gas-admin-ui-calendar-view-DCY8bj2V.mjs +1027 -0
  10. package/fesm2022/tinya-code-gas-admin-ui-calendar-view-DCY8bj2V.mjs.map +1 -0
  11. package/fesm2022/tinya-code-gas-admin-ui-chart-line-BjdlKHoH.mjs +278 -0
  12. package/fesm2022/tinya-code-gas-admin-ui-chart-line-BjdlKHoH.mjs.map +1 -0
  13. package/fesm2022/tinya-code-gas-admin-ui-color-Dljh_By3.mjs +107 -0
  14. package/fesm2022/tinya-code-gas-admin-ui-color-Dljh_By3.mjs.map +1 -0
  15. package/fesm2022/tinya-code-gas-admin-ui-condition-evaluator-DY2k1M3C.mjs +101 -0
  16. package/fesm2022/tinya-code-gas-admin-ui-condition-evaluator-DY2k1M3C.mjs.map +1 -0
  17. package/fesm2022/tinya-code-gas-admin-ui-currency-BvuF3Z63.mjs +141 -0
  18. package/fesm2022/tinya-code-gas-admin-ui-currency-BvuF3Z63.mjs.map +1 -0
  19. package/fesm2022/tinya-code-gas-admin-ui-data-source.service-96FSbN72.mjs +88 -0
  20. package/fesm2022/tinya-code-gas-admin-ui-data-source.service-96FSbN72.mjs.map +1 -0
  21. package/fesm2022/tinya-code-gas-admin-ui-date-1SJGXZrd.mjs +107 -0
  22. package/fesm2022/tinya-code-gas-admin-ui-date-1SJGXZrd.mjs.map +1 -0
  23. package/fesm2022/tinya-code-gas-admin-ui-display-badge-fwk6sDU7.mjs +140 -0
  24. package/fesm2022/tinya-code-gas-admin-ui-display-badge-fwk6sDU7.mjs.map +1 -0
  25. package/fesm2022/tinya-code-gas-admin-ui-display-date-D7zLiDiG.mjs +119 -0
  26. package/fesm2022/tinya-code-gas-admin-ui-display-date-D7zLiDiG.mjs.map +1 -0
  27. package/fesm2022/tinya-code-gas-admin-ui-display-file-BiIhqvQC.mjs +125 -0
  28. package/fesm2022/tinya-code-gas-admin-ui-display-file-BiIhqvQC.mjs.map +1 -0
  29. package/fesm2022/tinya-code-gas-admin-ui-display-image-C1dhnZi1.mjs +152 -0
  30. package/fesm2022/tinya-code-gas-admin-ui-display-image-C1dhnZi1.mjs.map +1 -0
  31. package/fesm2022/tinya-code-gas-admin-ui-display-list-DOEuUbGe.mjs +211 -0
  32. package/fesm2022/tinya-code-gas-admin-ui-display-list-DOEuUbGe.mjs.map +1 -0
  33. package/fesm2022/tinya-code-gas-admin-ui-display-number-DDMzr4Hn.mjs +116 -0
  34. package/fesm2022/tinya-code-gas-admin-ui-display-number-DDMzr4Hn.mjs.map +1 -0
  35. package/fesm2022/tinya-code-gas-admin-ui-display-text-B8CdVNpv.mjs +111 -0
  36. package/fesm2022/tinya-code-gas-admin-ui-display-text-B8CdVNpv.mjs.map +1 -0
  37. package/fesm2022/tinya-code-gas-admin-ui-dropdown-C3blvmE1.mjs +122 -0
  38. package/fesm2022/tinya-code-gas-admin-ui-dropdown-C3blvmE1.mjs.map +1 -0
  39. package/fesm2022/tinya-code-gas-admin-ui-email-CT_O5ihA.mjs +107 -0
  40. package/fesm2022/tinya-code-gas-admin-ui-email-CT_O5ihA.mjs.map +1 -0
  41. package/fesm2022/tinya-code-gas-admin-ui-empty-state-BMc0QtoT.mjs +109 -0
  42. package/fesm2022/tinya-code-gas-admin-ui-empty-state-BMc0QtoT.mjs.map +1 -0
  43. package/fesm2022/tinya-code-gas-admin-ui-error-mapper.service-DY5y1FjE.mjs +45 -0
  44. package/fesm2022/tinya-code-gas-admin-ui-error-mapper.service-DY5y1FjE.mjs.map +1 -0
  45. package/fesm2022/tinya-code-gas-admin-ui-field-aria-BD1Wiggc.mjs +50 -0
  46. package/fesm2022/tinya-code-gas-admin-ui-field-aria-BD1Wiggc.mjs.map +1 -0
  47. package/fesm2022/tinya-code-gas-admin-ui-field-node-CIK6KNN_.mjs +24 -0
  48. package/fesm2022/tinya-code-gas-admin-ui-field-node-CIK6KNN_.mjs.map +1 -0
  49. package/fesm2022/tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs +27 -0
  50. package/fesm2022/tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs.map +1 -0
  51. package/fesm2022/tinya-code-gas-admin-ui-file-Dmxioog7.mjs +408 -0
  52. package/fesm2022/tinya-code-gas-admin-ui-file-Dmxioog7.mjs.map +1 -0
  53. package/fesm2022/tinya-code-gas-admin-ui-form-view-CEe7aZ4m.mjs +4516 -0
  54. package/fesm2022/tinya-code-gas-admin-ui-form-view-CEe7aZ4m.mjs.map +1 -0
  55. package/fesm2022/tinya-code-gas-admin-ui-format-badge-CK8ct5Wk.mjs +82 -0
  56. package/fesm2022/tinya-code-gas-admin-ui-format-badge-CK8ct5Wk.mjs.map +1 -0
  57. package/fesm2022/tinya-code-gas-admin-ui-format-boolean-ClzezZz-.mjs +105 -0
  58. package/fesm2022/tinya-code-gas-admin-ui-format-boolean-ClzezZz-.mjs.map +1 -0
  59. package/fesm2022/tinya-code-gas-admin-ui-format-currency-CVmniKml.mjs +65 -0
  60. package/fesm2022/tinya-code-gas-admin-ui-format-currency-CVmniKml.mjs.map +1 -0
  61. package/fesm2022/tinya-code-gas-admin-ui-format-date-Dr1YsDd_.mjs +65 -0
  62. package/fesm2022/tinya-code-gas-admin-ui-format-date-Dr1YsDd_.mjs.map +1 -0
  63. package/fesm2022/tinya-code-gas-admin-ui-format-number-CWCjpI4n.mjs +65 -0
  64. package/fesm2022/tinya-code-gas-admin-ui-format-number-CWCjpI4n.mjs.map +1 -0
  65. package/fesm2022/tinya-code-gas-admin-ui-format-text-DBOgJkH0.mjs +59 -0
  66. package/fesm2022/tinya-code-gas-admin-ui-format-text-DBOgJkH0.mjs.map +1 -0
  67. package/fesm2022/tinya-code-gas-admin-ui-format-thumbnail-PCRvxWKt.mjs +94 -0
  68. package/fesm2022/tinya-code-gas-admin-ui-format-thumbnail-PCRvxWKt.mjs.map +1 -0
  69. package/fesm2022/tinya-code-gas-admin-ui-gap-sorting-iTdy_DYG.mjs +72 -0
  70. package/fesm2022/tinya-code-gas-admin-ui-gap-sorting-iTdy_DYG.mjs.map +1 -0
  71. package/fesm2022/tinya-code-gas-admin-ui-group-h7-O8tt4.mjs +238 -0
  72. package/fesm2022/tinya-code-gas-admin-ui-group-h7-O8tt4.mjs.map +1 -0
  73. package/fesm2022/tinya-code-gas-admin-ui-image-7UhJ7nqI.mjs +416 -0
  74. package/fesm2022/tinya-code-gas-admin-ui-image-7UhJ7nqI.mjs.map +1 -0
  75. package/fesm2022/tinya-code-gas-admin-ui-kanban-view-Dl0Ol5Kb.mjs +439 -0
  76. package/fesm2022/tinya-code-gas-admin-ui-kanban-view-Dl0Ol5Kb.mjs.map +1 -0
  77. package/fesm2022/tinya-code-gas-admin-ui-key-value-nVdgg5at.mjs +513 -0
  78. package/fesm2022/tinya-code-gas-admin-ui-key-value-nVdgg5at.mjs.map +1 -0
  79. package/fesm2022/tinya-code-gas-admin-ui-list-DTtCYS4d.mjs +637 -0
  80. package/fesm2022/tinya-code-gas-admin-ui-list-DTtCYS4d.mjs.map +1 -0
  81. package/fesm2022/tinya-code-gas-admin-ui-metric-card-DnGMQL8l.mjs +127 -0
  82. package/fesm2022/tinya-code-gas-admin-ui-metric-card-DnGMQL8l.mjs.map +1 -0
  83. package/fesm2022/tinya-code-gas-admin-ui-multiselect-PB28e-jl.mjs +251 -0
  84. package/fesm2022/tinya-code-gas-admin-ui-multiselect-PB28e-jl.mjs.map +1 -0
  85. package/fesm2022/tinya-code-gas-admin-ui-notification.service-LjSULER6.mjs +66 -0
  86. package/fesm2022/tinya-code-gas-admin-ui-notification.service-LjSULER6.mjs.map +1 -0
  87. package/fesm2022/tinya-code-gas-admin-ui-number-JNr7glc8.mjs +114 -0
  88. package/fesm2022/tinya-code-gas-admin-ui-number-JNr7glc8.mjs.map +1 -0
  89. package/fesm2022/tinya-code-gas-admin-ui-phone-jR417hPf.mjs +116 -0
  90. package/fesm2022/tinya-code-gas-admin-ui-phone-jR417hPf.mjs.map +1 -0
  91. package/fesm2022/tinya-code-gas-admin-ui-quick-actions-DCQ6emmF.mjs +235 -0
  92. package/fesm2022/tinya-code-gas-admin-ui-quick-actions-DCQ6emmF.mjs.map +1 -0
  93. package/fesm2022/tinya-code-gas-admin-ui-radio-mode-DxvN07DY.mjs +8 -0
  94. package/fesm2022/tinya-code-gas-admin-ui-radio-mode-DxvN07DY.mjs.map +1 -0
  95. package/fesm2022/tinya-code-gas-admin-ui-readonly-text-BL7-4qie.mjs +124 -0
  96. package/fesm2022/tinya-code-gas-admin-ui-readonly-text-BL7-4qie.mjs.map +1 -0
  97. package/fesm2022/tinya-code-gas-admin-ui-record-list-BiZfnd_7.mjs +249 -0
  98. package/fesm2022/tinya-code-gas-admin-ui-record-list-BiZfnd_7.mjs.map +1 -0
  99. package/fesm2022/tinya-code-gas-admin-ui-relation-drawer.service-B0kT8EiW.mjs +39 -0
  100. package/fesm2022/tinya-code-gas-admin-ui-relation-drawer.service-B0kT8EiW.mjs.map +1 -0
  101. package/fesm2022/tinya-code-gas-admin-ui-relation-ykpJ3PYl.mjs +309 -0
  102. package/fesm2022/tinya-code-gas-admin-ui-relation-ykpJ3PYl.mjs.map +1 -0
  103. package/fesm2022/tinya-code-gas-admin-ui-render-registry-B88Pme-y.mjs +576 -0
  104. package/fesm2022/tinya-code-gas-admin-ui-render-registry-B88Pme-y.mjs.map +1 -0
  105. package/fesm2022/tinya-code-gas-admin-ui-rich-select-CIHaOrbU.mjs +161 -0
  106. package/fesm2022/tinya-code-gas-admin-ui-rich-select-CIHaOrbU.mjs.map +1 -0
  107. package/fesm2022/tinya-code-gas-admin-ui-rolldown-runtime-DpJrqANO.mjs +11 -0
  108. package/fesm2022/tinya-code-gas-admin-ui-schema-catalog-D0Pk0wAN.mjs +685 -0
  109. package/fesm2022/tinya-code-gas-admin-ui-schema-catalog-D0Pk0wAN.mjs.map +1 -0
  110. package/fesm2022/tinya-code-gas-admin-ui-seed-DkVZbxPP.mjs +80 -0
  111. package/fesm2022/tinya-code-gas-admin-ui-seed-DkVZbxPP.mjs.map +1 -0
  112. package/fesm2022/tinya-code-gas-admin-ui-select-CDwX9yNO.mjs +296 -0
  113. package/fesm2022/tinya-code-gas-admin-ui-select-CDwX9yNO.mjs.map +1 -0
  114. package/fesm2022/tinya-code-gas-admin-ui-skeleton-DnWK0tcZ.mjs +119 -0
  115. package/fesm2022/tinya-code-gas-admin-ui-skeleton-DnWK0tcZ.mjs.map +1 -0
  116. package/fesm2022/tinya-code-gas-admin-ui-slug-DU58cbiY.mjs +158 -0
  117. package/fesm2022/tinya-code-gas-admin-ui-slug-DU58cbiY.mjs.map +1 -0
  118. package/fesm2022/tinya-code-gas-admin-ui-source-options-B9R4mw8-.mjs +26 -0
  119. package/fesm2022/tinya-code-gas-admin-ui-source-options-B9R4mw8-.mjs.map +1 -0
  120. package/fesm2022/tinya-code-gas-admin-ui-status-progress-DmeG8htE.mjs +205 -0
  121. package/fesm2022/tinya-code-gas-admin-ui-status-progress-DmeG8htE.mjs.map +1 -0
  122. package/fesm2022/tinya-code-gas-admin-ui-string-list-gleasqzD.mjs +432 -0
  123. package/fesm2022/tinya-code-gas-admin-ui-string-list-gleasqzD.mjs.map +1 -0
  124. package/fesm2022/tinya-code-gas-admin-ui-template-interpolator-ewv7CkNX.mjs +36 -0
  125. package/fesm2022/tinya-code-gas-admin-ui-template-interpolator-ewv7CkNX.mjs.map +1 -0
  126. package/fesm2022/tinya-code-gas-admin-ui-text-CUPmL7W_.mjs +107 -0
  127. package/fesm2022/tinya-code-gas-admin-ui-text-CUPmL7W_.mjs.map +1 -0
  128. package/fesm2022/tinya-code-gas-admin-ui-textarea-CGLSIW13.mjs +223 -0
  129. package/fesm2022/tinya-code-gas-admin-ui-textarea-CGLSIW13.mjs.map +1 -0
  130. package/fesm2022/tinya-code-gas-admin-ui-time-BcHzsTWf.mjs +107 -0
  131. package/fesm2022/tinya-code-gas-admin-ui-time-BcHzsTWf.mjs.map +1 -0
  132. package/fesm2022/tinya-code-gas-admin-ui-upload.service-CZPEPCeN.mjs +60 -0
  133. package/fesm2022/tinya-code-gas-admin-ui-upload.service-CZPEPCeN.mjs.map +1 -0
  134. package/fesm2022/tinya-code-gas-admin-ui-url-GO4LZi__.mjs +141 -0
  135. package/fesm2022/tinya-code-gas-admin-ui-url-GO4LZi__.mjs.map +1 -0
  136. package/fesm2022/tinya-code-gas-admin-ui.mjs +4738 -0
  137. package/fesm2022/tinya-code-gas-admin-ui.mjs.map +1 -0
  138. package/package.json +15 -3
  139. package/types/tinya-code-gas-admin-ui.d.ts +3634 -0
  140. package/ng-package.json +0 -7
  141. package/src/lib/actions/action-registry.spec.ts +0 -52
  142. package/src/lib/actions/action-registry.ts +0 -126
  143. package/src/lib/actions/action-service.spec.ts +0 -215
  144. package/src/lib/actions/action-service.ts +0 -87
  145. package/src/lib/actions/descriptors.spec.ts +0 -155
  146. package/src/lib/actions/descriptors.ts +0 -154
  147. package/src/lib/columns/column-cell.ts +0 -33
  148. package/src/lib/columns/column-defaults.spec.ts +0 -99
  149. package/src/lib/columns/column-defaults.ts +0 -84
  150. package/src/lib/columns/column-format.spec.ts +0 -274
  151. package/src/lib/columns/descriptors.ts +0 -113
  152. package/src/lib/columns/format-badge.ts +0 -51
  153. package/src/lib/columns/format-boolean.ts +0 -58
  154. package/src/lib/columns/format-currency.ts +0 -30
  155. package/src/lib/columns/format-date.ts +0 -35
  156. package/src/lib/columns/format-number.ts +0 -32
  157. package/src/lib/columns/format-text.ts +0 -23
  158. package/src/lib/columns/format-thumbnail.ts +0 -63
  159. package/src/lib/core/adapters/firebase-auth.adapter.ts +0 -6
  160. package/src/lib/core/guards/auth.guard.spec.ts +0 -88
  161. package/src/lib/core/guards/auth.guard.ts +0 -48
  162. package/src/lib/core/guards/unsaved-changes.guard.ts +0 -16
  163. package/src/lib/core/interceptors/api-error.interceptor.spec.ts +0 -182
  164. package/src/lib/core/interceptors/api-error.interceptor.ts +0 -87
  165. package/src/lib/core/models/api.model.ts +0 -104
  166. package/src/lib/core/models/schema-descriptions.ts +0 -118
  167. package/src/lib/core/models/schema.model.ts +0 -1097
  168. package/src/lib/core/registry/composition-validator.spec.ts +0 -358
  169. package/src/lib/core/registry/composition-validator.ts +0 -270
  170. package/src/lib/core/registry/field-validators.spec.ts +0 -199
  171. package/src/lib/core/registry/field-validators.ts +0 -440
  172. package/src/lib/core/registry/render-host.spec.ts +0 -208
  173. package/src/lib/core/registry/render-host.ts +0 -646
  174. package/src/lib/core/registry/render-registry.spec.ts +0 -96
  175. package/src/lib/core/registry/render-registry.ts +0 -312
  176. package/src/lib/core/registry/schema-catalog.ts +0 -156
  177. package/src/lib/core/services/api.service.spec.ts +0 -1142
  178. package/src/lib/core/services/api.service.ts +0 -371
  179. package/src/lib/core/services/auth.service.spec.ts +0 -653
  180. package/src/lib/core/services/auth.service.ts +0 -503
  181. package/src/lib/core/services/config.service.spec.ts +0 -121
  182. package/src/lib/core/services/config.service.ts +0 -119
  183. package/src/lib/core/services/data-source.service.spec.ts +0 -179
  184. package/src/lib/core/services/data-source.service.ts +0 -142
  185. package/src/lib/core/services/error-mapper.service.spec.ts +0 -50
  186. package/src/lib/core/services/error-mapper.service.ts +0 -49
  187. package/src/lib/core/services/notification.service.ts +0 -73
  188. package/src/lib/core/services/relation-drawer.service.ts +0 -41
  189. package/src/lib/core/services/theme.service.spec.ts +0 -106
  190. package/src/lib/core/services/theme.service.ts +0 -86
  191. package/src/lib/core/services/transport.spec.ts +0 -198
  192. package/src/lib/core/services/transport.ts +0 -164
  193. package/src/lib/core/services/upload.service.ts +0 -81
  194. package/src/lib/core/testing/categories.schema.ts +0 -125
  195. package/src/lib/core/testing/orders.schema.ts +0 -372
  196. package/src/lib/core/testing/products.schema.ts +0 -258
  197. package/src/lib/core/testing/site.schema.ts +0 -195
  198. package/src/lib/core/testing/test-catalog.ts +0 -21
  199. package/src/lib/core/tokens.ts +0 -112
  200. package/src/lib/core/utils/clipboard.spec.ts +0 -55
  201. package/src/lib/core/utils/clipboard.ts +0 -90
  202. package/src/lib/core/utils/context-resolver.spec.ts +0 -95
  203. package/src/lib/core/utils/context-resolver.ts +0 -101
  204. package/src/lib/core/utils/response-unwrapper.spec.ts +0 -70
  205. package/src/lib/core/utils/response-unwrapper.ts +0 -103
  206. package/src/lib/core/utils/source-options.spec.ts +0 -96
  207. package/src/lib/core/utils/source-options.ts +0 -54
  208. package/src/lib/core/utils/template-interpolator.spec.ts +0 -59
  209. package/src/lib/core/utils/template-interpolator.ts +0 -56
  210. package/src/lib/core/view-navigation/view-navigation.service.spec.ts +0 -207
  211. package/src/lib/core/view-navigation/view-navigation.service.ts +0 -132
  212. package/src/lib/fields/boolean/boolean.descriptor.ts +0 -11
  213. package/src/lib/fields/boolean/boolean.ts +0 -40
  214. package/src/lib/fields/color/color.descriptor.ts +0 -12
  215. package/src/lib/fields/color/color.ts +0 -34
  216. package/src/lib/fields/currency/currency.descriptor.ts +0 -12
  217. package/src/lib/fields/currency/currency.ts +0 -67
  218. package/src/lib/fields/date/date.descriptor.ts +0 -12
  219. package/src/lib/fields/date/date.ts +0 -36
  220. package/src/lib/fields/descriptors.ts +0 -122
  221. package/src/lib/fields/display/display-badge.ts +0 -65
  222. package/src/lib/fields/display/display-date.ts +0 -39
  223. package/src/lib/fields/display/display-defaults.ts +0 -84
  224. package/src/lib/fields/display/display-file.ts +0 -41
  225. package/src/lib/fields/display/display-image.ts +0 -54
  226. package/src/lib/fields/display/display-list.ts +0 -107
  227. package/src/lib/fields/display/display-number.ts +0 -41
  228. package/src/lib/fields/display/display-text.ts +0 -42
  229. package/src/lib/fields/display/display.spec.ts +0 -242
  230. package/src/lib/fields/dropdown/dropdown.descriptor.ts +0 -12
  231. package/src/lib/fields/dropdown/dropdown.ts +0 -45
  232. package/src/lib/fields/email/email.descriptor.ts +0 -12
  233. package/src/lib/fields/email/email.ts +0 -28
  234. package/src/lib/fields/field-aria.ts +0 -60
  235. package/src/lib/fields/field-host/field-host.spec.ts +0 -118
  236. package/src/lib/fields/field-host/field-host.ts +0 -47
  237. package/src/lib/fields/field-node.ts +0 -88
  238. package/src/lib/fields/file/file.descriptor.ts +0 -14
  239. package/src/lib/fields/file/file.spec.ts +0 -134
  240. package/src/lib/fields/file/file.ts +0 -281
  241. package/src/lib/fields/group/group.descriptor.ts +0 -21
  242. package/src/lib/fields/group/group.ts +0 -110
  243. package/src/lib/fields/image/image.descriptor.ts +0 -12
  244. package/src/lib/fields/image/image.spec.ts +0 -117
  245. package/src/lib/fields/image/image.ts +0 -281
  246. package/src/lib/fields/key-value/key-value.descriptor.ts +0 -11
  247. package/src/lib/fields/key-value/key-value.ts +0 -283
  248. package/src/lib/fields/list/list.descriptor.ts +0 -21
  249. package/src/lib/fields/list/list.ts +0 -376
  250. package/src/lib/fields/multiselect/multiselect.descriptor.ts +0 -11
  251. package/src/lib/fields/multiselect/multiselect.spec.ts +0 -142
  252. package/src/lib/fields/multiselect/multiselect.ts +0 -152
  253. package/src/lib/fields/number/number.descriptor.ts +0 -12
  254. package/src/lib/fields/number/number.ts +0 -40
  255. package/src/lib/fields/phone/phone.descriptor.ts +0 -12
  256. package/src/lib/fields/phone/phone.ts +0 -46
  257. package/src/lib/fields/readonly-text/readonly-text.descriptor.ts +0 -12
  258. package/src/lib/fields/readonly-text/readonly-text.ts +0 -58
  259. package/src/lib/fields/relation/relation.descriptor.ts +0 -12
  260. package/src/lib/fields/relation/relation.spec.ts +0 -193
  261. package/src/lib/fields/relation/relation.ts +0 -224
  262. package/src/lib/fields/rich-select/rich-select.descriptor.ts +0 -12
  263. package/src/lib/fields/rich-select/rich-select.ts +0 -175
  264. package/src/lib/fields/select/radio-mode.ts +0 -25
  265. package/src/lib/fields/select/select.descriptor.ts +0 -12
  266. package/src/lib/fields/select/select.spec.ts +0 -162
  267. package/src/lib/fields/select/select.ts +0 -210
  268. package/src/lib/fields/slug/slug.descriptor.ts +0 -19
  269. package/src/lib/fields/slug/slug.ts +0 -67
  270. package/src/lib/fields/string-list/string-list.descriptor.ts +0 -11
  271. package/src/lib/fields/string-list/string-list.ts +0 -222
  272. package/src/lib/fields/text/text.descriptor.ts +0 -12
  273. package/src/lib/fields/text/text.ts +0 -35
  274. package/src/lib/fields/textarea/textarea.descriptor.ts +0 -12
  275. package/src/lib/fields/textarea/textarea.spec.ts +0 -117
  276. package/src/lib/fields/textarea/textarea.ts +0 -126
  277. package/src/lib/fields/time/time.descriptor.ts +0 -12
  278. package/src/lib/fields/time/time.ts +0 -28
  279. package/src/lib/fields/unknown-render/unknown-render.ts +0 -49
  280. package/src/lib/fields/url/url.descriptor.ts +0 -12
  281. package/src/lib/fields/url/url.ts +0 -53
  282. package/src/lib/gas-admin-ui.spec.ts +0 -21
  283. package/src/lib/gas-admin-ui.ts +0 -9
  284. package/src/lib/layouts/descriptors.ts +0 -9
  285. package/src/lib/pages/dashboard/dashboard.ts +0 -167
  286. package/src/lib/pages/detail-view/detail-view.spec.ts +0 -333
  287. package/src/lib/pages/detail-view/detail-view.ts +0 -570
  288. package/src/lib/pages/drawer-form/drawer-form.ts +0 -228
  289. package/src/lib/pages/form-view/form-model.ts +0 -88
  290. package/src/lib/pages/form-view/form-schema.ts +0 -255
  291. package/src/lib/pages/form-view/form-view.ts +0 -1622
  292. package/src/lib/pages/list-view/list-view.formats.spec.ts +0 -214
  293. package/src/lib/pages/list-view/list-view.ts +0 -882
  294. package/src/lib/pages/login/login.spec.ts +0 -109
  295. package/src/lib/pages/login/login.ts +0 -227
  296. package/src/lib/pages/resource-page/resource-page.ts +0 -234
  297. package/src/lib/shared/components/badge/badge.ts +0 -35
  298. package/src/lib/shared/components/button/button.ts +0 -65
  299. package/src/lib/shared/components/confirm-dialog/confirm-dialog.ts +0 -48
  300. package/src/lib/shared/components/copy-button/copy-button.ts +0 -56
  301. package/src/lib/shared/components/copy-share/copy-share.spec.ts +0 -122
  302. package/src/lib/shared/components/copy-share/copy-share.ts +0 -107
  303. package/src/lib/shared/components/drawer/drawer.spec.ts +0 -127
  304. package/src/lib/shared/components/drawer/drawer.ts +0 -172
  305. package/src/lib/shared/components/empty-state/empty-state.ts +0 -30
  306. package/src/lib/shared/components/modal/modal.spec.ts +0 -149
  307. package/src/lib/shared/components/modal/modal.ts +0 -145
  308. package/src/lib/shared/components/post-create-modal/post-create-modal.spec.ts +0 -165
  309. package/src/lib/shared/components/post-create-modal/post-create-modal.ts +0 -159
  310. package/src/lib/shared/components/skeleton/skeleton.ts +0 -31
  311. package/src/lib/shared/components/toast/toast.ts +0 -58
  312. package/src/lib/shared/utils/col-span.ts +0 -25
  313. package/src/lib/shared/utils/condition-evaluator.ts +0 -53
  314. package/src/lib/shared/utils/depends-on.ts +0 -48
  315. package/src/lib/shared/utils/dialog-focus.ts +0 -28
  316. package/src/lib/shared/utils/field-path.ts +0 -49
  317. package/src/lib/shared/utils/gap-sorting.ts +0 -144
  318. package/src/lib/shared/utils/seed.spec.ts +0 -64
  319. package/src/lib/shared/utils/seed.ts +0 -149
  320. package/src/lib/shared/utils/slugify.ts +0 -13
  321. package/src/lib/shared/utils/validators.ts +0 -41
  322. package/src/lib/shell/layout/layout.ts +0 -63
  323. package/src/lib/shell/shell.routes.spec.ts +0 -59
  324. package/src/lib/shell/shell.routes.ts +0 -122
  325. package/src/lib/shell/sidebar/sidebar.ts +0 -139
  326. package/src/lib/shell/theme-toggle/theme-toggle.ts +0 -74
  327. package/src/lib/views/calendar-view/calendar-model.ts +0 -426
  328. package/src/lib/views/calendar-view/calendar-view.spec.ts +0 -557
  329. package/src/lib/views/calendar-view/calendar-view.ts +0 -568
  330. package/src/lib/views/composer/composer-host.spec.ts +0 -301
  331. package/src/lib/views/composer/composer-host.ts +0 -248
  332. package/src/lib/views/composer/composer-imports.spec.ts +0 -54
  333. package/src/lib/views/composer/view-context.spec.ts +0 -117
  334. package/src/lib/views/composer/view-context.ts +0 -109
  335. package/src/lib/views/composer/view-slot.spec.ts +0 -130
  336. package/src/lib/views/composer/view-slot.ts +0 -178
  337. package/src/lib/views/descriptors.ts +0 -46
  338. package/src/lib/views/kanban-view/kanban-model.ts +0 -173
  339. package/src/lib/views/kanban-view/kanban-view.spec.ts +0 -540
  340. package/src/lib/views/kanban-view/kanban-view.ts +0 -327
  341. package/src/lib/widgets/bar-chart/bar-chart.descriptor.ts +0 -17
  342. package/src/lib/widgets/bar-chart/bar-chart.spec.ts +0 -66
  343. package/src/lib/widgets/bar-chart/bar-chart.ts +0 -76
  344. package/src/lib/widgets/chart-line/chart-line.descriptor.ts +0 -17
  345. package/src/lib/widgets/chart-line/chart-line.spec.ts +0 -113
  346. package/src/lib/widgets/chart-line/chart-line.ts +0 -219
  347. package/src/lib/widgets/descriptors.ts +0 -29
  348. package/src/lib/widgets/metric-card/metric-card.descriptor.ts +0 -41
  349. package/src/lib/widgets/metric-card/metric-card.spec.ts +0 -52
  350. package/src/lib/widgets/metric-card/metric-card.ts +0 -48
  351. package/src/lib/widgets/quick-actions/quick-actions.descriptor.ts +0 -13
  352. package/src/lib/widgets/quick-actions/quick-actions.spec.ts +0 -61
  353. package/src/lib/widgets/quick-actions/quick-actions.ts +0 -100
  354. package/src/lib/widgets/record-list/record-list.descriptor.ts +0 -16
  355. package/src/lib/widgets/record-list/record-list.spec.ts +0 -79
  356. package/src/lib/widgets/record-list/record-list.ts +0 -115
  357. package/src/lib/widgets/series.spec.ts +0 -42
  358. package/src/lib/widgets/series.ts +0 -56
  359. package/src/lib/widgets/status-progress/status-progress.descriptor.ts +0 -19
  360. package/src/lib/widgets/status-progress/status-progress.spec.ts +0 -63
  361. package/src/lib/widgets/status-progress/status-progress.ts +0 -104
  362. package/src/lib/widgets/widget-host/widget-host.spec.ts +0 -179
  363. package/src/lib/widgets/widget-host/widget-host.ts +0 -99
  364. package/src/public-api.ts +0 -104
  365. package/tinya-code-gas-admin-ui-0.2.0-alpha.15.tgz +0 -0
  366. package/tsconfig.lib.json +0 -13
  367. package/tsconfig.lib.prod.json +0 -11
  368. package/tsconfig.spec.json +0 -10
@@ -0,0 +1,111 @@
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
+ var FieldDisplayText = class FieldDisplayText {
5
+ field = input.required(...ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []);
6
+ value = input(null, ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
7
+ chip = input(false, ...ngDevMode ? [{ debugName: "chip" }] : /* istanbul ignore next */ []);
8
+ texto = computed(() => String(this.value()), ...ngDevMode ? [{ debugName: "texto" }] : /* istanbul ignore next */ []);
9
+ static ɵfac = i0.ɵɵngDeclareFactory({
10
+ minVersion: "12.0.0",
11
+ version: "22.2.3",
12
+ ngImport: i0,
13
+ type: FieldDisplayText,
14
+ deps: [],
15
+ target: i0.ɵɵFactoryTarget.Component
16
+ });
17
+ static ɵcmp = i0.ɵɵngDeclareComponent({
18
+ minVersion: "17.0.0",
19
+ version: "22.2.3",
20
+ type: FieldDisplayText,
21
+ isStandalone: true,
22
+ selector: "app-field-display-text",
23
+ inputs: {
24
+ field: {
25
+ classPropertyName: "field",
26
+ publicName: "field",
27
+ isSignal: true,
28
+ isRequired: true,
29
+ transformFunction: null
30
+ },
31
+ value: {
32
+ classPropertyName: "value",
33
+ publicName: "value",
34
+ isSignal: true,
35
+ isRequired: false,
36
+ transformFunction: null
37
+ },
38
+ chip: {
39
+ classPropertyName: "chip",
40
+ publicName: "chip",
41
+ isSignal: true,
42
+ isRequired: false,
43
+ transformFunction: null
44
+ }
45
+ },
46
+ ngImport: i0,
47
+ template: `
48
+ @if (chip()) {
49
+ <app-badge [label]="texto()" />
50
+ } @else {
51
+ {{ texto() }}
52
+ }
53
+ `,
54
+ isInline: true,
55
+ dependencies: [{
56
+ kind: "component",
57
+ type: Badge,
58
+ selector: "app-badge",
59
+ inputs: ["label", "kind"]
60
+ }]
61
+ });
62
+ };
63
+ i0.ɵɵngDeclareClassMetadata({
64
+ minVersion: "12.0.0",
65
+ version: "22.2.3",
66
+ ngImport: i0,
67
+ type: FieldDisplayText,
68
+ decorators: [{
69
+ type: Component,
70
+ args: [{
71
+ selector: "app-field-display-text",
72
+ imports: [Badge],
73
+ template: `
74
+ @if (chip()) {
75
+ <app-badge [label]="texto()" />
76
+ } @else {
77
+ {{ texto() }}
78
+ }
79
+ `
80
+ }]
81
+ }],
82
+ propDecorators: {
83
+ field: [{
84
+ type: i0.Input,
85
+ args: [{
86
+ isSignal: true,
87
+ alias: "field",
88
+ required: true
89
+ }]
90
+ }],
91
+ value: [{
92
+ type: i0.Input,
93
+ args: [{
94
+ isSignal: true,
95
+ alias: "value",
96
+ required: false
97
+ }]
98
+ }],
99
+ chip: [{
100
+ type: i0.Input,
101
+ args: [{
102
+ isSignal: true,
103
+ alias: "chip",
104
+ required: false
105
+ }]
106
+ }]
107
+ }
108
+ });
109
+ export { FieldDisplayText };
110
+
111
+ //# sourceMappingURL=tinya-code-gas-admin-ui-display-text-B8CdVNpv.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinya-code-gas-admin-ui-display-text-B8CdVNpv.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/fields/display/display-text.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\n\nimport { Badge } from '../../shared/components/badge/badge';\nimport type { FieldSchema } from '../../core/models/schema.model';\n\n/**\n * Display por defecto de los tipos textuales (R4.1 · modo `display`).\n *\n * Toma el valor crudo del registro —no el árbol del formulario— y lo pinta\n * como texto: el `default` de `formatValue` de `detail-view`, que era donde\n * caían `text`, `textarea`, `slug`, `url`, `email`, `phone`, `readonly-text`,\n * `relation`, `group`, `key-value`, `string-list`, `multiselect` y `time`.\n *\n * `String(raw)` conserva el comportamiento previo (un array sale `a,b`; un\n * objeto sale `[object Object]`): R4.2 pide que «los 7 detalles rendericen\n * igual», así que la paridad manda sobre la estética.\n *\n * Todos los display declaran `field`, `value` y `chip` aunque no los usen:\n * el host les pasa la misma forma a los 6 y `ngComponentOutletInputs` no\n * admite claves que el componente no declare.\n */\n@Component({\n selector: 'app-field-display-text',\n imports: [Badge],\n template: `\n @if (chip()) {\n <app-badge [label]=\"texto()\" />\n } @else {\n {{ texto() }}\n }\n `,\n})\nexport class FieldDisplayText {\n /** Campo que se pinta. Lo usa el tipo; acá sólo tipa la forma común. */\n readonly field = input.required<FieldSchema>();\n /** Valor crudo del registro. El host ya filtró el vacío (`—`). */\n readonly value = input<unknown>(null);\n /** `true` en la cabecera: el texto se pinta como chip compacto. */\n readonly chip = input(false);\n\n protected readonly texto = computed(() => String(this.value()));\n}\n"],"mappings":";;;AAgCA,IAAa,mBAAb,MAAa,iBAAgB;CAElB,QAAQ,MAAM,SAAuB,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAErC,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,eAAe,OAAO,KAAK,MAAK,CAAE,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CARpD,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAgB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAhB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAgB,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,UARjB;;;;;;;EAMT,UAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MAPS;GAAK,UAAA;GAAA,QAAA,CAAA,SAAA,MAAA;EAAA,CAAA;CAAA,CAAA;;AASJ,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAgB,YAAA,CAAA;EAX5B,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,SAAS,CAAC,KAAK;GACf,UAAU;;;;;;;EAOX,CAAA"}
@@ -0,0 +1,122 @@
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 FieldDropdown = class FieldDropdown {
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
+ options = computed(() => this.field().options, ...ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []);
12
+ static ɵfac = i0.ɵɵngDeclareFactory({
13
+ minVersion: "12.0.0",
14
+ version: "22.2.3",
15
+ ngImport: i0,
16
+ type: FieldDropdown,
17
+ deps: [],
18
+ target: i0.ɵɵFactoryTarget.Component
19
+ });
20
+ static ɵcmp = i0.ɵɵngDeclareComponent({
21
+ minVersion: "17.0.0",
22
+ version: "22.2.3",
23
+ type: FieldDropdown,
24
+ isStandalone: true,
25
+ selector: "app-field-dropdown",
26
+ inputs: {
27
+ field: {
28
+ classPropertyName: "field",
29
+ publicName: "field",
30
+ isSignal: true,
31
+ isRequired: true,
32
+ transformFunction: null
33
+ },
34
+ tree: {
35
+ classPropertyName: "tree",
36
+ publicName: "tree",
37
+ isSignal: true,
38
+ isRequired: true,
39
+ transformFunction: null
40
+ }
41
+ },
42
+ ngImport: i0,
43
+ template: `
44
+ <select
45
+ class="field-input"
46
+ [id]="state().name()"
47
+ [formField]="node()"
48
+ >
49
+ @if (!field().required) {
50
+ <option value="">{{ field().placeholder ?? '— Seleccionar —' }}</option>
51
+ }
52
+ @for (option of options(); track option.value) {
53
+ <option [value]="option.value" [disabled]="option.disabled ?? false">
54
+ {{ option.label }}
55
+ </option>
56
+ }
57
+ </select>
58
+ `,
59
+ isInline: true,
60
+ dependencies: [{
61
+ kind: "directive",
62
+ type: FieldAria,
63
+ selector: "input[id], select[id], textarea[id], output[id]"
64
+ }, {
65
+ kind: "directive",
66
+ type: FormField,
67
+ selector: "[formField]",
68
+ inputs: ["formField"],
69
+ exportAs: ["formField"]
70
+ }]
71
+ });
72
+ };
73
+ i0.ɵɵngDeclareClassMetadata({
74
+ minVersion: "12.0.0",
75
+ version: "22.2.3",
76
+ ngImport: i0,
77
+ type: FieldDropdown,
78
+ decorators: [{
79
+ type: Component,
80
+ args: [{
81
+ selector: "app-field-dropdown",
82
+ imports: [FieldAria, FormField],
83
+ template: `
84
+ <select
85
+ class="field-input"
86
+ [id]="state().name()"
87
+ [formField]="node()"
88
+ >
89
+ @if (!field().required) {
90
+ <option value="">{{ field().placeholder ?? '— Seleccionar —' }}</option>
91
+ }
92
+ @for (option of options(); track option.value) {
93
+ <option [value]="option.value" [disabled]="option.disabled ?? false">
94
+ {{ option.label }}
95
+ </option>
96
+ }
97
+ </select>
98
+ `
99
+ }]
100
+ }],
101
+ propDecorators: {
102
+ field: [{
103
+ type: i0.Input,
104
+ args: [{
105
+ isSignal: true,
106
+ alias: "field",
107
+ required: true
108
+ }]
109
+ }],
110
+ tree: [{
111
+ type: i0.Input,
112
+ args: [{
113
+ isSignal: true,
114
+ alias: "tree",
115
+ required: true
116
+ }]
117
+ }]
118
+ }
119
+ });
120
+ export { FieldDropdown };
121
+
122
+ //# sourceMappingURL=tinya-code-gas-admin-ui-dropdown-C3blvmE1.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinya-code-gas-admin-ui-dropdown-C3blvmE1.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/fields/dropdown/dropdown.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\n\nimport type { DropdownField } from '../../core/models/schema.model';\nimport { FieldAria } from '../field-aria';\nimport { childTree, type RootTree } from '../field-node';\n\n/**\n * Desplegable nativo (`<select>`) que SIEMPRE se renderiza como lista\n * desplegable, independientemente de cuántas opciones tenga.\n *\n * A diferencia de `select` (que usa radio buttons para 2–4 opciones\n * estáticas por la guía de control §1), este tipo nunca muta a radios.\n * Úsalo cuando necesites un dropdown verdadero aunque tenga pocas opciones.\n */\n@Component({\n selector: 'app-field-dropdown',\n imports: [FieldAria, FormField],\n template: `\n <select\n class=\"field-input\"\n [id]=\"state().name()\"\n [formField]=\"node()\"\n >\n @if (!field().required) {\n <option value=\"\">{{ field().placeholder ?? '— Seleccionar —' }}</option>\n }\n @for (option of options(); track option.value) {\n <option [value]=\"option.value\" [disabled]=\"option.disabled ?? false\">\n {{ option.label }}\n </option>\n }\n </select>\n `,\n})\nexport class FieldDropdown {\n readonly field = input.required<DropdownField>();\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 /** Opciones estáticas del schema (dropdown no soporta `source`). */\n protected readonly options = computed(() => this.field().options);\n}\n"],"mappings":";;;;;AAmCA,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;CAGrC,UAAU,eAAe,KAAK,MAAK,CAAE,CAAC,SAAQ,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CARtD,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,UAjBd;;;;;;;;;;;;;;;;EAeT,UAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MAhBS;GAAS,UAAA;EAAA,GAAA;GAAA,MAAA;GAAA,MAAE;GAAS,UAAA;GAAA,QAAA,CAAA,WAAA;GAAA,UAAA,CAAA,WAAA;EAAA,CAAA;CAAA,CAAA;;AAkBnB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAa,YAAA,CAAA;EApBzB,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,SAAS,CAAC,WAAW,SAAS;GAC9B,UAAU;;;;;;;;;;;;;;;;EAgBX,CAAA"}
@@ -0,0 +1,107 @@
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 FieldEmail = class FieldEmail {
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: FieldEmail,
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: FieldEmail,
23
+ isStandalone: true,
24
+ selector: "app-field-email",
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="email"
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: FieldEmail,
70
+ decorators: [{
71
+ type: Component,
72
+ args: [{
73
+ selector: "app-field-email",
74
+ imports: [FieldAria, FormField],
75
+ template: `
76
+ <input
77
+ type="email"
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 { FieldEmail };
106
+
107
+ //# sourceMappingURL=tinya-code-gas-admin-ui-email-CT_O5ihA.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinya-code-gas-admin-ui-email-CT_O5ihA.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/fields/email/email.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\n\nimport type { EmailField } from '../../core/models/schema.model';\nimport { FieldAria } from '../field-aria';\nimport { childTree, type RootTree } from '../field-node';\n\n/** Input de correo (base.md §5.1); la validación `email()` llega en Fase 10. */\n@Component({\n selector: 'app-field-email',\n imports: [FieldAria, FormField],\n template: `\n <input\n type=\"email\"\n class=\"field-input\"\n [id]=\"state().name()\"\n [formField]=\"node()\"\n [placeholder]=\"field().placeholder ?? ''\"\n />\n `,\n})\nexport class FieldEmail {\n readonly field = input.required<EmailField>();\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":";;;;;AAqBA,IAAa,aAAb,MAAa,WAAU;CACZ,QAAQ,MAAM,SAAsB,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CACpC,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;EAAU,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAV,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAU,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,UAVX;;;;;;;;;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;CAAU,YAAA,CAAA;EAbtB,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,SAAS,CAAC,WAAW,SAAS;GAC9B,UAAU;;;;;;;;;EASX,CAAA"}
@@ -0,0 +1,109 @@
1
+ import * as i0 from "@angular/core";
2
+ import { Component, input } from "@angular/core";
3
+ import { LucideInbox } from "@lucide/angular";
4
+ var EmptyState = class EmptyState {
5
+ title = input.required(...ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []);
6
+ message = input("", ...ngDevMode ? [{ debugName: "message" }] : /* istanbul ignore next */ []);
7
+ static ɵfac = i0.ɵɵngDeclareFactory({
8
+ minVersion: "12.0.0",
9
+ version: "22.2.3",
10
+ ngImport: i0,
11
+ type: EmptyState,
12
+ deps: [],
13
+ target: i0.ɵɵFactoryTarget.Component
14
+ });
15
+ static ɵcmp = i0.ɵɵngDeclareComponent({
16
+ minVersion: "17.0.0",
17
+ version: "22.2.3",
18
+ type: EmptyState,
19
+ isStandalone: true,
20
+ selector: "app-empty-state",
21
+ inputs: {
22
+ title: {
23
+ classPropertyName: "title",
24
+ publicName: "title",
25
+ isSignal: true,
26
+ isRequired: true,
27
+ transformFunction: null
28
+ },
29
+ message: {
30
+ classPropertyName: "message",
31
+ publicName: "message",
32
+ isSignal: true,
33
+ isRequired: false,
34
+ transformFunction: null
35
+ }
36
+ },
37
+ host: { attributes: { "role": "status" } },
38
+ ngImport: i0,
39
+ template: `
40
+ <div
41
+ class="flex flex-col items-center gap-2 rounded-xl border border-dashed border-neutral/30 px-6 py-12 text-center"
42
+ >
43
+ <svg lucideInbox size="32" class="text-neutral" />
44
+ <h2 class="font-display text-base font-semibold">{{ title() }}</h2>
45
+ @if (message()) {
46
+ <p class="text-sm text-neutral">{{ message() }}</p>
47
+ }
48
+ <div class="mt-2">
49
+ <ng-content />
50
+ </div>
51
+ </div>
52
+ `,
53
+ isInline: true,
54
+ dependencies: [{
55
+ kind: "component",
56
+ type: LucideInbox,
57
+ selector: "svg[lucideInbox]"
58
+ }]
59
+ });
60
+ };
61
+ i0.ɵɵngDeclareClassMetadata({
62
+ minVersion: "12.0.0",
63
+ version: "22.2.3",
64
+ ngImport: i0,
65
+ type: EmptyState,
66
+ decorators: [{
67
+ type: Component,
68
+ args: [{
69
+ selector: "app-empty-state",
70
+ imports: [LucideInbox],
71
+ host: { role: "status" },
72
+ template: `
73
+ <div
74
+ class="flex flex-col items-center gap-2 rounded-xl border border-dashed border-neutral/30 px-6 py-12 text-center"
75
+ >
76
+ <svg lucideInbox size="32" class="text-neutral" />
77
+ <h2 class="font-display text-base font-semibold">{{ title() }}</h2>
78
+ @if (message()) {
79
+ <p class="text-sm text-neutral">{{ message() }}</p>
80
+ }
81
+ <div class="mt-2">
82
+ <ng-content />
83
+ </div>
84
+ </div>
85
+ `
86
+ }]
87
+ }],
88
+ propDecorators: {
89
+ title: [{
90
+ type: i0.Input,
91
+ args: [{
92
+ isSignal: true,
93
+ alias: "title",
94
+ required: true
95
+ }]
96
+ }],
97
+ message: [{
98
+ type: i0.Input,
99
+ args: [{
100
+ isSignal: true,
101
+ alias: "message",
102
+ required: false
103
+ }]
104
+ }]
105
+ }
106
+ });
107
+ export { EmptyState as t };
108
+
109
+ //# sourceMappingURL=tinya-code-gas-admin-ui-empty-state-BMc0QtoT.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinya-code-gas-admin-ui-empty-state-BMc0QtoT.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/shared/components/empty-state/empty-state.ts"],"sourcesContent":["import { Component, input } from '@angular/core';\nimport { LucideInbox } from '@lucide/angular';\n\n/**\n * Estado vacío universal (structure.md §6). El contenido proyectado es la\n * acción opcional (normalmente un `button[app-button]`).\n */\n@Component({\n selector: 'app-empty-state',\n imports: [LucideInbox],\n host: { role: 'status' },\n template: `\n <div\n class=\"flex flex-col items-center gap-2 rounded-xl border border-dashed border-neutral/30 px-6 py-12 text-center\"\n >\n <svg lucideInbox size=\"32\" class=\"text-neutral\" />\n <h2 class=\"font-display text-base font-semibold\">{{ title() }}</h2>\n @if (message()) {\n <p class=\"text-sm text-neutral\">{{ message() }}</p>\n }\n <div class=\"mt-2\">\n <ng-content />\n </div>\n </div>\n `,\n})\nexport class EmptyState {\n readonly title = input.required<string>();\n readonly message = input('');\n}\n"],"mappings":";;;AA0BA,IAAa,aAAb,MAAa,WAAU;CACZ,QAAQ,MAAM,SAAkB,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAChC,UAAU,MAAM,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAFjB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAU,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAV,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAU,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,MAAA,EAAA,YAAA,EAAA,QAAA,SAAA,EAAA;EAAA,UAAA;EAAA,UAfX;;;;;;;;;;;;;;EAaT,UAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MAfS;GAAW,UAAA;EAAA,CAAA;CAAA,CAAA;;AAiBV,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAU,YAAA,CAAA;EAnBtB,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,SAAS,CAAC,WAAW;GACrB,MAAM,EAAE,MAAM,SAAQ;GACtB,UAAU;;;;;;;;;;;;;;EAcX,CAAA"}
@@ -0,0 +1,45 @@
1
+ import { b as ApiError } from "./tinya-code-gas-admin-ui-schema-catalog-D0Pk0wAN.mjs";
2
+ import * as i0 from "@angular/core";
3
+ import { Service } from "@angular/core";
4
+ var ErrorMapperService = class ErrorMapperService {
5
+ map(error) {
6
+ if (error instanceof ApiError) {
7
+ const fields = {};
8
+ for (const issue of error.issues) if (issue.path) fields[issue.path] = issue.message;
9
+ if (error.fieldPath && fields[error.fieldPath] === void 0) fields[error.fieldPath] = error.message;
10
+ if (Object.keys(fields).length > 0) return { fields };
11
+ }
12
+ return {
13
+ fields: {},
14
+ general: this.messageOf(error)
15
+ };
16
+ }
17
+ messageOf(error) {
18
+ if (error instanceof Error) return error.message;
19
+ return "Error inesperado";
20
+ }
21
+ static ɵfac = i0.ɵɵngDeclareFactory({
22
+ minVersion: "12.0.0",
23
+ version: "22.2.3",
24
+ ngImport: i0,
25
+ type: ErrorMapperService,
26
+ deps: [],
27
+ target: i0.ɵɵFactoryTarget.Service
28
+ });
29
+ static ɵprov = i0.ɵɵngDeclareService({
30
+ minVersion: "22.0.0",
31
+ version: "22.2.3",
32
+ ngImport: i0,
33
+ type: ErrorMapperService
34
+ });
35
+ };
36
+ i0.ɵɵngDeclareClassMetadata({
37
+ minVersion: "12.0.0",
38
+ version: "22.2.3",
39
+ ngImport: i0,
40
+ type: ErrorMapperService,
41
+ decorators: [{ type: Service }]
42
+ });
43
+ export { ErrorMapperService as t };
44
+
45
+ //# sourceMappingURL=tinya-code-gas-admin-ui-error-mapper.service-DY5y1FjE.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinya-code-gas-admin-ui-error-mapper.service-DY5y1FjE.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/core/services/error-mapper.service.ts"],"sourcesContent":["import { Service } from '@angular/core';\n\nimport { ApiError } from '../models/api.model';\n\nexport interface MappedError {\n /** Errores por ruta de campo (ej. `faq[2].answer`); se pintan en el campo exacto. */\n fields: Record<string, string>;\n /** Mensaje general; presente cuando el error no tiene ruta de campo (base.md §10). */\n general?: string;\n}\n\n/**\n * Convierte un error recibido en el formato que consume la UI:\n * rutas de campo para pintar el error donde corresponde, o mensaje general.\n *\n * Un422 trae VARIOS issues con ruta (`error.errors[]`, auth.md §6); cada uno\n * se convierte en `fields[path] = mensaje`, que es exactamente la clave que\n * después resuelve el host como `serverErrors[prefix + key]`. Si al final no\n * hay ninguna ruta pintable (error sin `errors[]`, issue sin `path`), el\n * mensaje del sobre queda en `general` como hasta ahora (base.md §10).\n */\n@Service()\nexport class ErrorMapperService {\n map(error: unknown): MappedError {\n if (error instanceof ApiError) {\n const fields: Record<string, string> = {};\n for (const issue of error.issues) {\n if (issue.path) {\n fields[issue.path] = issue.message;\n }\n }\n // Sobre con `path` suelto (sin `errors[]`): misma historia, un campo.\n if (error.fieldPath && fields[error.fieldPath] === undefined) {\n fields[error.fieldPath] = error.message;\n }\n if (Object.keys(fields).length > 0) {\n return { fields };\n }\n }\n return { fields: {}, general: this.messageOf(error) };\n }\n\n messageOf(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n return 'Error inesperado';\n }\n}\n"],"mappings":";;;AAsBA,IAAa,qBAAb,MAAa,mBAAkB;CAC7B,IAAI,OAAc;EAChB,IAAI,iBAAiB,UAAU;GAC7B,MAAM,SAAiC,CAAA;GACvC,KAAK,MAAM,SAAS,MAAM,QACxB,IAAI,MAAM,MACR,OAAO,MAAM,QAAQ,MAAM;GAI/B,IAAI,MAAM,aAAa,OAAO,MAAM,eAAe,QACjD,OAAO,MAAM,aAAa,MAAM;GAElC,IAAI,OAAO,KAAK,MAAM,CAAC,CAAC,SAAS,GAC/B,OAAO,EAAE,OAAM;EAEnB;EACA,OAAO;GAAE,QAAQ,CAAA;GAAI,SAAS,KAAK,UAAU,KAAK;EAAC;CACrD;CAEA,UAAU,OAAc;EACtB,IAAI,iBAAiB,OACnB,OAAO,MAAM;EAEf,OAAO;CACT;CAzBW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAkB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAlB,OAAA,QAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;CAAkB,CAAA;;AAAlB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAkB,YAAA,CAAA,EAD9B,MAAA,QAAA,CAAA"}
@@ -0,0 +1,50 @@
1
+ import * as i0 from "@angular/core";
2
+ import { Directive, InjectionToken, computed, inject } from "@angular/core";
3
+ const FIELD_ARIA = new InjectionToken("FIELD_ARIA");
4
+ var FieldAria = class FieldAria {
5
+ ctx = inject(FIELD_ARIA, { optional: true });
6
+ ariaInvalid = computed(() => this.ctx ? String(this.ctx.invalid()) : null, ...ngDevMode ? [{ debugName: "ariaInvalid" }] : /* istanbul ignore next */ []);
7
+ ariaRequired = computed(() => this.ctx ? String(this.ctx.required()) : null, ...ngDevMode ? [{ debugName: "ariaRequired" }] : /* istanbul ignore next */ []);
8
+ ariaDescribedBy = computed(() => this.ctx?.describedBy() ?? null, ...ngDevMode ? [{ debugName: "ariaDescribedBy" }] : /* istanbul ignore next */ []);
9
+ static ɵfac = i0.ɵɵngDeclareFactory({
10
+ minVersion: "12.0.0",
11
+ version: "22.2.3",
12
+ ngImport: i0,
13
+ type: FieldAria,
14
+ deps: [],
15
+ target: i0.ɵɵFactoryTarget.Directive
16
+ });
17
+ static ɵdir = i0.ɵɵngDeclareDirective({
18
+ minVersion: "14.0.0",
19
+ version: "22.2.3",
20
+ type: FieldAria,
21
+ isStandalone: true,
22
+ selector: "input[id], select[id], textarea[id], output[id]",
23
+ host: { properties: {
24
+ "attr.aria-invalid": "ariaInvalid()",
25
+ "attr.aria-required": "ariaRequired()",
26
+ "attr.aria-describedby": "ariaDescribedBy()"
27
+ } },
28
+ ngImport: i0
29
+ });
30
+ };
31
+ i0.ɵɵngDeclareClassMetadata({
32
+ minVersion: "12.0.0",
33
+ version: "22.2.3",
34
+ ngImport: i0,
35
+ type: FieldAria,
36
+ decorators: [{
37
+ type: Directive,
38
+ args: [{
39
+ selector: "input[id], select[id], textarea[id], output[id]",
40
+ host: {
41
+ "[attr.aria-invalid]": "ariaInvalid()",
42
+ "[attr.aria-required]": "ariaRequired()",
43
+ "[attr.aria-describedby]": "ariaDescribedBy()"
44
+ }
45
+ }]
46
+ }]
47
+ });
48
+ export { FieldAria as n, FIELD_ARIA as t };
49
+
50
+ //# sourceMappingURL=tinya-code-gas-admin-ui-field-aria-BD1Wiggc.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinya-code-gas-admin-ui-field-aria-BD1Wiggc.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/fields/field-aria.ts"],"sourcesContent":["import { Directive, InjectionToken, computed, inject, type Signal } from '@angular/core';\n\n/**\n * Contexto de accesibilidad que `app-field-host` expone a los controles.\n *\n * El host conoce la ayuda y el error (ambos viven en SU plantilla), pero el\n * `<input>` real vive dentro de un componente hijo distinto por cada tipo de\n * campo. En lugar de pasar dos inputs por cada uno de los 14 controles, el\n * host provee este contexto y cada control importa `FieldAria`, que lo lee\n * por DI y lo vuelca en el elemento.\n *\n * Selector por `[id]`: casa sólo con el elemento que ya recibe el `for` de la\n * etiqueta, así el mismo id es ancla de label y de `aria-describedby`. Los\n * controles fuera de un `app-field-host` inyectan `null` y no emiten nada.\n */\nexport interface FieldAriaContext {\n /** `id` del texto de ayuda y/o del error, separados por espacio. */\n readonly describedBy: Signal<string | null>;\n /** `true` cuando el campo muestra error visible (mismo criterio que el mensaje). */\n readonly invalid: Signal<boolean>;\n /**\n * Requerido por schema. Necesario porque la marca visual `*` desaparece en\n * los recursos donde mandan los `(opcional)` (§2): sin este atributo el\n * requerimiento quedaría sólo en pantalla.\n */\n readonly required: Signal<boolean>;\n}\n\nexport const FIELD_ARIA = new InjectionToken<FieldAriaContext>('FIELD_ARIA');\n\n/**\n * Vincula `aria-invalid` y `aria-describedby` a un control de formulario.\n *\n * `aria-invalid` se emite SIEMPRE (`\"true\"`/`\"false\"`, nunca ausente) para\n * que el atributo sea inspeccionable en cualquier estado; `aria-describedby`\n * se omite cuando no hay ni ayuda ni error, que es el caso por defecto.\n * `aria-required` sigue la misma regla que `aria-invalid`.\n *\n * Convención con `role=\"alert\"` en el mensaje de error: el `alert` anuncia el\n * error en el momento en que aparece (fallo de submit), mientras que\n * `aria-describedby` lo lee al enfocar el campo. Son momentos distintos; no\n * compiten.\n */\n@Directive({\n selector: 'input[id], select[id], textarea[id], output[id]',\n host: {\n '[attr.aria-invalid]': 'ariaInvalid()',\n '[attr.aria-required]': 'ariaRequired()',\n '[attr.aria-describedby]': 'ariaDescribedBy()',\n },\n})\nexport class FieldAria {\n private readonly ctx = inject(FIELD_ARIA, { optional: true });\n\n protected readonly ariaInvalid = computed(() => (this.ctx ? String(this.ctx.invalid()) : null));\n\n protected readonly ariaRequired = computed(() => (this.ctx ? String(this.ctx.required()) : null));\n\n protected readonly ariaDescribedBy = computed(() => this.ctx?.describedBy() ?? null);\n}\n"],"mappings":";;AA4BA,MAAa,aAAa,IAAI,eAAiC,YAAY;AAuB3E,IAAa,YAAb,MAAa,UAAS;CACH,MAAM,OAAO,YAAY,EAAE,UAAU,KAAI,CAAE;CAEzC,cAAc,eAAgB,KAAK,MAAM,OAAO,KAAK,IAAI,QAAO,CAAE,IAAI,MAAM,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;CAE5E,eAAe,eAAgB,KAAK,MAAM,OAAO,KAAK,IAAI,SAAQ,CAAE,IAAI,MAAM,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;CAE9E,kBAAkB,eAAe,KAAK,KAAK,YAAW,KAAM,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,kBAAA,CAAA,+BAAA,CAAA,CAAA;CAPzE,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,MAAA,EAAA,YAAA;GAAA,qBAAA;GAAA,sBAAA;GAAA,yBAAA;EAAA,EAAA;EAAA,UAAA;CAAA,CAAA;;AAAT,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAS,YAAA,CAAA;EARrB,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,MAAM;IACJ,uBAAuB;IACvB,wBAAwB;IACxB,2BAA2B;GAC5B;EACF,CAAA"}
@@ -0,0 +1,24 @@
1
+ function childTree(parent, key) {
2
+ const child = parent[key];
3
+ if (child === void 0) throw new Error(`El formulario no contiene el campo "${key}".`);
4
+ return child;
5
+ }
6
+ function groupTree(parent, key) {
7
+ return childTree(parent, key);
8
+ }
9
+ function listTree(parent, key) {
10
+ return childTree(parent, key);
11
+ }
12
+ function itemTree(items, index) {
13
+ const item = items[index];
14
+ if (item === void 0) throw new Error(`La lista no contiene el índice ${index}.`);
15
+ return item;
16
+ }
17
+ function stringItemTree(items, index) {
18
+ const item = items[index];
19
+ if (item === void 0) throw new Error(`La lista no contiene el índice ${index}.`);
20
+ return item;
21
+ }
22
+ export { stringItemTree as a, listTree as i, groupTree as n, itemTree as r, childTree as t };
23
+
24
+ //# sourceMappingURL=tinya-code-gas-admin-ui-field-node-CIK6KNN_.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinya-code-gas-admin-ui-field-node-CIK6KNN_.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/fields/field-node.ts"],"sourcesContent":["/**\n * Acceso dinámico a los subárboles de un formulario cuyo modelo es\n * `Record<string, unknown>` (decisión Fase 10: el tipado del modelo como\n * Record permite indexar con cualquier clave, pero el acceso se centraliza\n * aquí porque devuelve `undefined` en el tipo).\n *\n * Fase 11: los contenedores (`group`, `list`) se resuelven igual, más los\n * índices de las listas (`itemTree`).\n */\n\nimport type { FieldTree } from '@angular/forms/signals';\n\nimport type { FieldSchema } from '../core/models/schema.model';\n\n/** Árbol de un formulario con modelo dinámico. */\nexport type RootTree = FieldTree<Record<string, unknown>>;\n\n/**\n * Contexto que el `ng-template` del `list` recibe por `ngTemplateOutlet`\n * para renderizar los campos de un ítem. El template vive en el despachador\n * (`field-host`) porque es el único que puede instanciar `app-field-host`;\n * el list lo instancia una vez por ítem con este contexto.\n */\nexport interface ListChildContext {\n fields: readonly FieldSchema[];\n tree: RootTree;\n /** Prefijo de ruta de los errores del backend para este nivel (`faq[2].`). */\n prefix: string;\n errors: Record<string, string>;\n exists: boolean;\n /** `itemDisplay: 'row'` → los campos van en flujo compacto, no en grilla. */\n row: boolean;\n /** Clase `sm:col-span-*` de un campo (literal: Tailwind v4 es JIT). */\n colSpan: (width?: number) => string;\n}\n\n/** Subárbol del hijo directo bajo `key`. Lanza un error claro si el modelo no\n * contiene la clave (los modelos se siembran con los `default` del schema\n * antes de llamar a `form()`).\n */\nexport function childTree<T>(parent: RootTree, key: string): FieldTree<T> {\n const child = (parent as unknown as Record<string, FieldTree<T> | undefined>)[key];\n if (child === undefined) {\n throw new Error(`El formulario no contiene el campo \"${key}\".`);\n }\n return child;\n}\n\n/** Subárbol de un campo `list`/`group` cuyo valor es un objeto. */\nexport function groupTree(parent: RootTree, key: string): RootTree {\n return childTree<Record<string, unknown>>(parent, key);\n}\n\n/** Subárbol de un campo `list` (los ítems se acceden por índice). */\nexport function listTree<T>(parent: RootTree, key: string): FieldTree<T[]> {\n return childTree<T[]>(parent, key);\n}\n\n/**\n * Ítem de una lista como árbol navegable.\n *\n * **Los nodos de ítem se atan a la identidad del elemento**, no al índice:\n * tras un cambio del arreglo el nodo viejo queda huérfano y leerlo lanza\n * `NG01904 «Orphan field»`. Por eso este helper se llama SIEMPRE fresco, en\n * cada render/computed — nunca se cachea un nodo entre mutaciones.\n *\n * El `as unknown` es porque `FieldTree<Item, number>` no es assignable a\n * `RootTree` (le falta el index signature de `string`), pero se navega igual.\n */\nexport function itemTree<T>(items: FieldTree<T[]>, index: number): RootTree {\n const item = items[index];\n if (item === undefined) {\n throw new Error(`La lista no contiene el índice ${index}.`);\n }\n return item as unknown as RootTree;\n}\n\n/**\n * Ítem escalar de un `string-list` como nodo (`FieldTree<string>`), listo\n * para `[formField]`. Mismo criterio de frescura que `itemTree`.\n */\nexport function stringItemTree(items: FieldTree<string[]>, index: number): FieldTree<string> {\n const item = items[index] as FieldTree<string> | undefined;\n if (item === undefined) {\n throw new Error(`La lista no contiene el índice ${index}.`);\n }\n return item;\n}\n"],"mappings":"AAwCA,SAAgB,UAAa,QAAkB,KAAW;CACxD,MAAM,QAAS,OAA+D;CAC9E,IAAI,UAAU,QACZ,MAAM,IAAI,MAAM,uCAAuC,IAAG,GAAI;CAEhE,OAAO;AACT;AAGA,SAAgB,UAAU,QAAkB,KAAW;CACrD,OAAO,UAAmC,QAAQ,GAAG;AACvD;AAGA,SAAgB,SAAY,QAAkB,KAAW;CACvD,OAAO,UAAe,QAAQ,GAAG;AACnC;AAaA,SAAgB,SAAY,OAAuB,OAAa;CAC9D,MAAM,OAAO,MAAM;CACnB,IAAI,SAAS,QACX,MAAM,IAAI,MAAM,kCAAkC,MAAK,EAAG;CAE5D,OAAO;AACT;AAMA,SAAgB,eAAe,OAA4B,OAAa;CACtE,MAAM,OAAO,MAAM;CACnB,IAAI,SAAS,QACX,MAAM,IAAI,MAAM,kCAAkC,MAAK,EAAG;CAE5D,OAAO;AACT"}
@@ -0,0 +1,27 @@
1
+ function parsePath(path) {
2
+ const segments = [];
3
+ for (const part of path.split(".")) {
4
+ if (part === "") continue;
5
+ const match = /^([^[\]]*)((?:\[\d+\])+)$/.exec(part);
6
+ if (match) {
7
+ const key = match[1];
8
+ if (key !== "") segments.push(key);
9
+ for (const bracket of match[2].matchAll(/\[(\d+)\]/g)) segments.push(Number(bracket[1]));
10
+ } else segments.push(part);
11
+ }
12
+ return segments;
13
+ }
14
+ function getValue(source, path) {
15
+ let current = source;
16
+ for (const segment of parsePath(path)) {
17
+ if (current === null || current === void 0 || typeof current !== "object") return;
18
+ if (typeof segment === "number") {
19
+ if (!Array.isArray(current)) return;
20
+ current = current[segment];
21
+ } else current = current[segment];
22
+ }
23
+ return current;
24
+ }
25
+ export { getValue as t };
26
+
27
+ //# sourceMappingURL=tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/shared/utils/field-path.ts"],"sourcesContent":["/**\n * Lectura de valores por ruta (ej. `faq[2].answer`, `address.city`) —\n * celdas del listado y valores anidados de los singleton (base.md §10).\n */\n\n/** Segmentos de una ruta: claves de objeto y índices de arreglo. */\nexport type PathSegment = string | number;\n\n/** `faq[2].answer` → `['faq', 2, 'answer']`. */\nexport function parsePath(path: string): PathSegment[] {\n const segments: PathSegment[] = [];\n for (const part of path.split('.')) {\n if (part === '') {\n continue;\n }\n const match = /^([^[\\]]*)((?:\\[\\d+\\])+)$/.exec(part);\n if (match) {\n const key = match[1];\n if (key !== '') {\n segments.push(key);\n }\n for (const bracket of match[2].matchAll(/\\[(\\d+)\\]/g)) {\n segments.push(Number(bracket[1]));\n }\n } else {\n segments.push(part);\n }\n }\n return segments;\n}\n\n/** Lee el valor en `path`; `undefined` si algún tramo no existe. */\nexport function getValue<T = unknown>(source: unknown, path: string): T | undefined {\n let current: unknown = source;\n for (const segment of parsePath(path)) {\n if (current === null || current === undefined || typeof current !== 'object') {\n return undefined;\n }\n if (typeof segment === 'number') {\n if (!Array.isArray(current)) {\n return undefined;\n }\n current = current[segment];\n } else {\n current = (current as Record<string, unknown>)[segment];\n }\n }\n return current as T;\n}\n"],"mappings":"AASA,SAAgB,UAAU,MAAY;CACpC,MAAM,WAA0B,CAAA;CAChC,KAAK,MAAM,QAAQ,KAAK,MAAM,GAAG,GAAG;EAClC,IAAI,SAAS,IACX;EAEF,MAAM,QAAQ,4BAA4B,KAAK,IAAI;EACnD,IAAI,OAAO;GACT,MAAM,MAAM,MAAM;GAClB,IAAI,QAAQ,IACV,SAAS,KAAK,GAAG;GAEnB,KAAK,MAAM,WAAW,MAAM,EAAE,CAAC,SAAS,YAAY,GAClD,SAAS,KAAK,OAAO,QAAQ,EAAE,CAAC;EAEpC,OACE,SAAS,KAAK,IAAI;CAEtB;CACA,OAAO;AACT;AAGA,SAAgB,SAAsB,QAAiB,MAAY;CACjE,IAAI,UAAmB;CACvB,KAAK,MAAM,WAAW,UAAU,IAAI,GAAG;EACrC,IAAI,YAAY,QAAQ,YAAY,UAAa,OAAO,YAAY,UAClE;EAEF,IAAI,OAAO,YAAY,UAAU;GAC/B,IAAI,CAAC,MAAM,QAAQ,OAAO,GACxB;GAEF,UAAU,QAAQ;EACpB,OACE,UAAW,QAAoC;CAEnD;CACA,OAAO;AACT"}