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

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,685 @@
1
+ import * as i0 from "@angular/core";
2
+ import { InjectionToken, Injector, Service, computed, inject, provideAppInitializer, signal } from "@angular/core";
3
+ import { HttpClient, HttpErrorResponse, HttpHeaders, HttpParams, HttpResponse, provideHttpClient, withInterceptors } from "@angular/common/http";
4
+ import { catchError, firstValueFrom, forkJoin, from, map, of, switchMap, tap, throwError } from "rxjs";
5
+ import { Router } from "@angular/router";
6
+ var ApiError = class extends Error {
7
+ status;
8
+ fieldPath;
9
+ code;
10
+ issues;
11
+ constructor(status, message, fieldPath, code, issues = []) {
12
+ super(message);
13
+ this.name = "ApiError";
14
+ this.status = status;
15
+ this.fieldPath = fieldPath;
16
+ this.code = code;
17
+ this.issues = issues;
18
+ }
19
+ };
20
+ function renewedTokenOf(body) {
21
+ if (body === null || typeof body !== "object") return null;
22
+ const meta = body.meta;
23
+ if (meta === null || typeof meta !== "object") return null;
24
+ const token = meta.renewedToken;
25
+ return typeof token === "string" && token !== "" ? token : null;
26
+ }
27
+ const API_URL = new InjectionToken("API_URL");
28
+ const FIREBASE_AUTH_ADAPTER = new InjectionToken("gas.admin.firebaseAuthAdapter");
29
+ const API_DRIVER = new InjectionToken("gas.admin.driver");
30
+ const VALUE_SOURCES = new InjectionToken("gas.admin.valueSources");
31
+ const DEFAULT_RESPONSE_UNWRAP = new InjectionToken("gas.admin.defaultResponseUnwrap");
32
+ const LOGIN_PATH = "/login";
33
+ const SESSION_TOKEN_KEY = "admin.session.token";
34
+ const SESSION_USER_KEY = "admin.session.user";
35
+ var AuthService = class AuthService {
36
+ http = inject(HttpClient);
37
+ apiUrl = inject(API_URL);
38
+ router = inject(Router);
39
+ firebaseAdapter = inject(FIREBASE_AUTH_ADAPTER, { optional: true });
40
+ driver = inject(API_DRIVER, { optional: true }) ?? "gas";
41
+ storage = sessionStorage;
42
+ _user = signal(null, ...ngDevMode ? [{ debugName: "_user" }] : /* istanbul ignore next */ []);
43
+ _token = signal(null, ...ngDevMode ? [{ debugName: "_token" }] : /* istanbul ignore next */ []);
44
+ _returnUrl = signal(null, ...ngDevMode ? [{ debugName: "_returnUrl" }] : /* istanbul ignore next */ []);
45
+ user = this._user.asReadonly();
46
+ token = this._token.asReadonly();
47
+ returnUrl = this._returnUrl.asReadonly();
48
+ isAuthenticated = computed(() => this._token() !== null && this._user() !== null, ...ngDevMode ? [{ debugName: "isAuthenticated" }] : /* istanbul ignore next */ []);
49
+ role = computed(() => this._user()?.role ?? "", ...ngDevMode ? [{ debugName: "role" }] : /* istanbul ignore next */ []);
50
+ constructor() {
51
+ const token = this.storage.getItem(SESSION_TOKEN_KEY);
52
+ if (token !== null && token !== "") this._token.set(token);
53
+ const raw = this.storage.getItem(SESSION_USER_KEY);
54
+ if (raw !== null && raw !== "") try {
55
+ this._user.set(JSON.parse(raw));
56
+ } catch {
57
+ this.storage.removeItem(SESSION_USER_KEY);
58
+ this.storage.removeItem(SESSION_TOKEN_KEY);
59
+ this._token.set(null);
60
+ }
61
+ }
62
+ login(email, password) {
63
+ return this.post("/auth/login", {
64
+ email,
65
+ password
66
+ }).pipe(map((res) => {
67
+ this.open(res.token, res.user);
68
+ const renewed = renewedTokenOf(res);
69
+ if (renewed !== null) this.applyRenewedToken(renewed);
70
+ return res.user;
71
+ }));
72
+ }
73
+ loginWithGoogle() {
74
+ if (!this.firebaseAdapter) return throwError(() => /* @__PURE__ */ new Error("[gas-admin-ui] FIREBASE_AUTH_ADAPTER is not provided."));
75
+ return from(this.firebaseAdapter.signInWithGoogle()).pipe(switchMap((idToken) => this.exchangeFirebaseToken(idToken)));
76
+ }
77
+ loginWithFirebasePassword(email, password) {
78
+ if (!this.firebaseAdapter) return throwError(() => /* @__PURE__ */ new Error("[gas-admin-ui] FIREBASE_AUTH_ADAPTER is not provided."));
79
+ return from(this.firebaseAdapter.signInWithEmailAndPassword(email, password)).pipe(switchMap((idToken) => this.exchangeFirebaseToken(idToken)));
80
+ }
81
+ exchangeFirebaseToken(idToken) {
82
+ const endpoint = getAuth()?.firebase?.exchangeEndpoint ?? "/auth/firebase";
83
+ return this.post(endpoint, { idToken }).pipe(map((res) => {
84
+ this.open(res.token, res.user);
85
+ const renewed = renewedTokenOf(res);
86
+ if (renewed !== null) this.applyRenewedToken(renewed);
87
+ return res.user;
88
+ }));
89
+ }
90
+ logout() {
91
+ return this.post("/auth/logout").pipe(tap({
92
+ next: () => {
93
+ this.clear();
94
+ this.firebaseAdapter?.signOut();
95
+ this.goLogin();
96
+ },
97
+ error: () => {
98
+ this.clear();
99
+ this.firebaseAdapter?.signOut();
100
+ this.goLogin();
101
+ }
102
+ }), map(() => void 0));
103
+ }
104
+ restore() {
105
+ if (this._token() === null) return of(void 0);
106
+ return this.post("/auth/me").pipe(tap((res) => {
107
+ this.open(this._token(), res.user);
108
+ }), catchError(() => of(void 0)), map(() => void 0));
109
+ }
110
+ applyRenewedToken(token) {
111
+ if (token === "" || this._token() === null) return;
112
+ this._token.set(token);
113
+ this.storage.setItem(SESSION_TOKEN_KEY, token);
114
+ }
115
+ applyAuthCode(code) {
116
+ switch (code) {
117
+ case "AUTH_EXPIRED":
118
+ this._returnUrl.set(this.currentUrl());
119
+ this.clear();
120
+ this.goLogin();
121
+ break;
122
+ case "AUTH_REQUIRED":
123
+ case "AUTH_INVALID":
124
+ this.clear();
125
+ this.goLogin();
126
+ }
127
+ }
128
+ hasRole(required) {
129
+ if (required === "" || required === "session") return this.isAuthenticated();
130
+ const role = this.role();
131
+ if (role === "admin") return true;
132
+ return role !== "" && role === required;
133
+ }
134
+ canAccess(access) {
135
+ const requires = access?.requires ?? "session";
136
+ if (requires === "public") return true;
137
+ if (!this.isAuthenticated()) return false;
138
+ const role = requires.startsWith("role:") ? requires.slice(5) : "";
139
+ const required = role === "" ? access?.roles ?? [] : [role];
140
+ if (required.length === 0) return true;
141
+ return required.some((one) => this.hasRole(one));
142
+ }
143
+ canDoOperation(schema, operation) {
144
+ if (operation === "create" || operation === "update" || operation === "remove") {
145
+ const ep = schema.endpoint;
146
+ if (!!ep && Object.keys(ep).length > 0 && !ep[operation]) return false;
147
+ }
148
+ const ops = schema.policies?.access?.operations;
149
+ if (ops && ops[operation]) return this.meetsLevel(ops[operation]);
150
+ if (schema.policies?.access) {
151
+ const groupLevel = operation === "create" || operation === "update" || operation === "remove" ? schema.policies.access.write : schema.policies.access.read;
152
+ return this.meetsLevel(groupLevel ?? "admin");
153
+ }
154
+ const perms = schema.permissions;
155
+ if (perms) return {
156
+ list: true,
157
+ get: true,
158
+ create: perms.create,
159
+ update: perms.update,
160
+ remove: perms.remove
161
+ }[operation] !== false;
162
+ return true;
163
+ }
164
+ canReadField(field) {
165
+ if (!field.access || !field.access.read) return true;
166
+ return this.meetsLevel(field.access.read);
167
+ }
168
+ canWriteField(field) {
169
+ if (!field.access || !field.access.write) return true;
170
+ return this.meetsLevel(field.access.write);
171
+ }
172
+ meetsLevel(level) {
173
+ if (level === "public") return true;
174
+ if (level === "session") return this.isAuthenticated();
175
+ if (level.startsWith("role:")) {
176
+ const requiredRole = level.slice(5);
177
+ return this.hasRole(requiredRole);
178
+ }
179
+ return this.hasRole("admin");
180
+ }
181
+ open(token, user) {
182
+ if (token !== null && token !== "") this._token.set(token);
183
+ this._user.set(user);
184
+ if (token !== null && token !== "") this.storage.setItem(SESSION_TOKEN_KEY, token);
185
+ if (user !== null) this.storage.setItem(SESSION_USER_KEY, JSON.stringify(user));
186
+ }
187
+ consumeReturnUrl() {
188
+ const url = this._returnUrl();
189
+ this._returnUrl.set(null);
190
+ return url;
191
+ }
192
+ clear() {
193
+ this._token.set(null);
194
+ this._user.set(null);
195
+ this.storage.removeItem(SESSION_TOKEN_KEY);
196
+ this.storage.removeItem(SESSION_USER_KEY);
197
+ }
198
+ goLogin() {
199
+ if (this.currentUrl().startsWith("/login")) return;
200
+ this.router.navigate([LOGIN_PATH]).catch(() => void 0);
201
+ }
202
+ currentUrl() {
203
+ return this.router.url;
204
+ }
205
+ buildUrl(path) {
206
+ return `${this.apiUrl ? this.apiUrl.replace(/\/+$/, "") : ""}${path.startsWith("/") ? path : `/${path}`}`;
207
+ }
208
+ envelope(path, payload = {}) {
209
+ return {
210
+ token: this._token(),
211
+ method: "POST",
212
+ path,
213
+ payload
214
+ };
215
+ }
216
+ buildAuthRequest(path, payload = {}) {
217
+ if (this.driver === "rest") {
218
+ const url = this.buildUrl(path);
219
+ let headers = new HttpHeaders();
220
+ const token = this._token();
221
+ if (token) headers = headers.set("Authorization", `Bearer ${token}`);
222
+ if (path === "/auth/me") return this.http.get(url, { headers });
223
+ headers = headers.set("Content-Type", "application/json");
224
+ return this.http.post(url, payload, { headers });
225
+ }
226
+ return this.http.post(this.apiUrl, this.envelope(path, payload), { headers: { "Content-Type": "text/plain" } });
227
+ }
228
+ post(path, payload = {}) {
229
+ return this.buildAuthRequest(path, payload).pipe(map((res) => res && typeof res === "object" && !Array.isArray(res) && "data" in res ? res["data"] : res));
230
+ }
231
+ static ɵfac = i0.ɵɵngDeclareFactory({
232
+ minVersion: "12.0.0",
233
+ version: "22.2.3",
234
+ ngImport: i0,
235
+ type: AuthService,
236
+ deps: [],
237
+ target: i0.ɵɵFactoryTarget.Service
238
+ });
239
+ static ɵprov = i0.ɵɵngDeclareService({
240
+ minVersion: "22.0.0",
241
+ version: "22.2.3",
242
+ ngImport: i0,
243
+ type: AuthService
244
+ });
245
+ };
246
+ i0.ɵɵngDeclareClassMetadata({
247
+ minVersion: "12.0.0",
248
+ version: "22.2.3",
249
+ ngImport: i0,
250
+ type: AuthService,
251
+ decorators: [{ type: Service }],
252
+ ctorParameters: () => []
253
+ });
254
+ function httpMessage(status) {
255
+ switch (status) {
256
+ case 0: return "No se pudo conectar con el servidor. Revisa tu conexión.";
257
+ case 401: return "Tu sesión ha expirado. Vuelve a iniciar sesión.";
258
+ case 403: return "No tienes permisos para realizar esta acción.";
259
+ case 404: return "No se encontró el recurso solicitado.";
260
+ case 409: return "El registro cambió o ya existe. Recarga la página y vuelve a intentarlo.";
261
+ case 413: return "El archivo es demasiado grande.";
262
+ case 422: return "Los datos enviados no son válidos.";
263
+ default:
264
+ if (status >= 500) return "El servidor tuvo un problema. Vuelve a intentarlo en unos segundos.";
265
+ return status >= 400 ? "No se pudo completar la operación." : "Error inesperado.";
266
+ }
267
+ }
268
+ function isErrorBody(body) {
269
+ if (typeof body !== "object" || body === null) return false;
270
+ const error = body.error;
271
+ return typeof error === "object" && error !== null && typeof error.message === "string";
272
+ }
273
+ const apiErrorInterceptor = (req, next) => {
274
+ const auth = inject(AuthService);
275
+ return next(req).pipe(map((event) => {
276
+ if (event instanceof HttpResponse && isErrorBody(event.body)) {
277
+ const { status, message, path, code, errors } = event.body.error;
278
+ auth.applyAuthCode(code);
279
+ throw new ApiError(status, message, path, code, errors ?? []);
280
+ }
281
+ return event;
282
+ }), catchError((err) => {
283
+ if (err instanceof ApiError) return throwError(() => err);
284
+ if (err instanceof HttpErrorResponse) return throwError(() => new ApiError(err.status, httpMessage(err.status)));
285
+ return throwError(() => err);
286
+ }));
287
+ };
288
+ function appliesTo(unwrap, operation) {
289
+ const apply = unwrap.apply ?? "all";
290
+ return apply === "all" || apply === operation;
291
+ }
292
+ function unwrapResponse(raw, unwrap, operation) {
293
+ if (!unwrap || !appliesTo(unwrap, operation)) return raw;
294
+ if (raw !== null && typeof raw === "object" && !Array.isArray(raw)) {
295
+ const record = raw;
296
+ if (Object.prototype.hasOwnProperty.call(record, unwrap.dataKey)) return record[unwrap.dataKey];
297
+ }
298
+ throw new Error(`Response unwrap declared dataKey '${unwrap.dataKey}' but it is missing in the response for operation '${operation}'`);
299
+ }
300
+ const NO_PAGINATION = {
301
+ nextCursor: null,
302
+ total: 0,
303
+ hasMore: false
304
+ };
305
+ function extractPagination(raw, unwrap) {
306
+ if (raw === null || typeof raw !== "object" || Array.isArray(raw)) return { ...NO_PAGINATION };
307
+ const body = raw;
308
+ let source = body;
309
+ const metaKey = unwrap?.metaKey;
310
+ if (metaKey) {
311
+ const meta = body[metaKey];
312
+ if (meta !== null && typeof meta === "object" && !Array.isArray(meta)) source = meta;
313
+ }
314
+ const cursorKey = unwrap?.pagination?.cursorKey ?? "nextCursor";
315
+ const totalKey = unwrap?.pagination?.totalKey ?? "total";
316
+ const hasMoreKey = unwrap?.pagination?.hasMoreKey ?? "hasMore";
317
+ const cursorValue = source[cursorKey] ?? body[cursorKey];
318
+ const nextCursor = typeof cursorValue === "string" && cursorValue !== "" ? cursorValue : null;
319
+ const totalValue = source[totalKey] ?? body[totalKey];
320
+ const total = typeof totalValue === "number" ? totalValue : 0;
321
+ const hasMoreValue = source[hasMoreKey] ?? body[hasMoreKey];
322
+ return {
323
+ nextCursor,
324
+ total,
325
+ hasMore: typeof hasMoreValue === "boolean" ? hasMoreValue : nextCursor !== null
326
+ };
327
+ }
328
+ const MARKER = /\{([a-zA-Z0-9_.]+)\}/g;
329
+ function resolveEndpointPath(path, sources) {
330
+ if (!path.includes("{")) return path;
331
+ return path.replace(MARKER, (marker, nombre) => sustituir(path, marker, nombre, sources));
332
+ }
333
+ function sustituir(path, marker, nombre, sources) {
334
+ if (nombre === "key") throw new Error(`[gas-admin-ui] path '${path}': ${marker} llegó sin resolver — la clave sólo la sustituyen get/update/remove antes de resolver el contexto.`);
335
+ const punto = nombre.indexOf(".");
336
+ const fuente = punto === -1 ? nombre : nombre.slice(0, punto);
337
+ const getter = sources[fuente];
338
+ if (typeof getter !== "function") throw new Error(`[gas-admin-ui] path '${path}': no se pudo resolver ${marker} — la fuente '${fuente}' no está registrada.`);
339
+ const valor = punto === -1 ? getter() : leerRuta(getter(), nombre.slice(punto + 1));
340
+ if (valor === void 0 || valor === null) throw new Error(`[gas-admin-ui] path '${path}': no se pudo resolver ${marker} — sin valor para '${nombre}'.`);
341
+ if (typeof valor === "object") throw new Error(`[gas-admin-ui] path '${path}': no se pudo resolver ${marker} — el valor de '${fuente}' no es un segmento de URL (no es escalar).`);
342
+ const texto = String(valor);
343
+ if (texto === "") throw new Error(`[gas-admin-ui] path '${path}': no se pudo resolver ${marker} — valor vacío en '${fuente}'.`);
344
+ return encodeURIComponent(texto);
345
+ }
346
+ function leerRuta(valor, ruta) {
347
+ let actual = valor;
348
+ for (const paso of ruta.split(".")) {
349
+ if (actual === null || typeof actual !== "object") return void 0;
350
+ actual = actual[paso];
351
+ }
352
+ return actual;
353
+ }
354
+ function sendGas(deps, path, method, payload, multipart = false) {
355
+ if (multipart) throw new Error("Multipart payload mode is only supported with the REST driver");
356
+ const body = {
357
+ token: deps.sessionToken(),
358
+ method,
359
+ path,
360
+ payload: payload ?? {}
361
+ };
362
+ return deps.http.post(deps.apiUrl, body, { headers: { "Content-Type": "text/plain" } });
363
+ }
364
+ function sendRest(deps, path, method, payload, multipart = false) {
365
+ const url = buildUrl(deps.apiUrl, path);
366
+ const headers = new HttpHeaders();
367
+ if (deps.getIdToken) return from(deps.getIdToken()).pipe(switchMap((freshToken) => doRestRequest(deps, url, method, payload, headers.set("Authorization", `Bearer ${freshToken}`), multipart)));
368
+ const token = deps.sessionToken();
369
+ return doRestRequest(deps, url, method, payload, token ? headers.set("Authorization", `Bearer ${token}`) : headers, multipart);
370
+ }
371
+ function doRestRequest(deps, url, method, payload, headers = new HttpHeaders(), multipart = false) {
372
+ if (method === "GET" || method === "DELETE") {
373
+ const params = toHttpParams(payload instanceof FormData ? void 0 : payload);
374
+ return deps.http.request(method, url, {
375
+ headers,
376
+ params
377
+ });
378
+ }
379
+ if (multipart || payload instanceof FormData) return deps.http.request(method, url, {
380
+ headers,
381
+ body: payload ?? {}
382
+ });
383
+ return deps.http.request(method, url, {
384
+ headers: headers.set("Content-Type", "application/json"),
385
+ body: payload ?? {}
386
+ });
387
+ }
388
+ function buildUrl(apiUrl, path) {
389
+ return `${apiUrl ? apiUrl.replace(/\/+$/, "") : ""}${path.startsWith("/") ? path : `/${path}`}`;
390
+ }
391
+ function toHttpParams(payload) {
392
+ let params = new HttpParams();
393
+ if (!payload) return params;
394
+ for (const [key, value] of Object.entries(payload)) {
395
+ if (value === void 0 || value === null) continue;
396
+ if (typeof value === "object" && !Array.isArray(value)) {
397
+ for (const [nestedKey, nestedValue] of Object.entries(value)) if (nestedValue !== void 0 && nestedValue !== null) params = params.set(nestedKey, String(nestedValue));
398
+ } else if (Array.isArray(value)) {
399
+ for (const item of value) if (item !== void 0 && item !== null) params = params.append(key, String(item));
400
+ } else params = params.set(key, String(value));
401
+ }
402
+ return params;
403
+ }
404
+ var ApiService = class ApiService {
405
+ http = inject(HttpClient);
406
+ apiUrl = inject(API_URL);
407
+ auth = inject(AuthService);
408
+ driver = inject(API_DRIVER, { optional: true }) ?? "gas";
409
+ valueSources = inject(VALUE_SOURCES, { optional: true }) ?? {};
410
+ firebaseAuthAdapter = inject(FIREBASE_AUTH_ADAPTER, { optional: true });
411
+ injector = inject(Injector);
412
+ defaultUnwrap = inject(DEFAULT_RESPONSE_UNWRAP, { optional: true }) ?? void 0;
413
+ effectiveUnwrap(endpoint) {
414
+ const global = this.defaultUnwrap;
415
+ const local = endpoint.responseUnwrap;
416
+ if (!global) return local;
417
+ if (!local) return global;
418
+ return {
419
+ ...global,
420
+ ...local
421
+ };
422
+ }
423
+ list(endpoint, payload) {
424
+ const unwrap = this.effectiveUnwrap(endpoint);
425
+ return this.send(endpoint.list, "GET", payload).pipe(map((raw) => {
426
+ if (unwrap && (unwrap.apply === "list" || unwrap.apply === "all" || !unwrap.apply)) return unwrapResponse(raw, unwrap, "list");
427
+ return unwrapList(raw);
428
+ }));
429
+ }
430
+ listPage(endpoint, payload) {
431
+ const unwrap = this.effectiveUnwrap(endpoint);
432
+ const applies = !unwrap || unwrap.apply === "list" || unwrap.apply === "all" || !unwrap.apply;
433
+ return this.send(endpoint.list, "GET", payload).pipe(map((raw) => {
434
+ return {
435
+ items: unwrap && applies ? unwrapResponse(raw, unwrap, "list") : unwrapList(raw),
436
+ ...extractPagination(raw, unwrap)
437
+ };
438
+ }));
439
+ }
440
+ get(endpoint, key) {
441
+ const unwrap = this.effectiveUnwrap(endpoint);
442
+ return this.send(this.withKey(endpoint.get, key), "GET").pipe(map((raw) => {
443
+ if (unwrap && (unwrap.apply === "get" || unwrap.apply === "all" || !unwrap.apply)) return unwrapResponse(raw, unwrap, "get");
444
+ return raw;
445
+ }));
446
+ }
447
+ create(endpoint, payload) {
448
+ const unwrap = this.effectiveUnwrap(endpoint);
449
+ return this.send(endpoint.create, "POST", payload).pipe(map((raw) => {
450
+ if (unwrap && (unwrap.apply === "create" || unwrap.apply === "all" || !unwrap.apply)) return unwrapResponse(raw, unwrap, "create");
451
+ return raw;
452
+ }));
453
+ }
454
+ update(endpoint, key, payload) {
455
+ const unwrap = this.effectiveUnwrap(endpoint);
456
+ return this.send(this.withKey(endpoint.update, key), "PUT", payload).pipe(map((raw) => {
457
+ if (unwrap && (unwrap.apply === "update" || unwrap.apply === "all" || !unwrap.apply)) return unwrapResponse(raw, unwrap, "update");
458
+ return raw;
459
+ }));
460
+ }
461
+ remove(endpoint, key) {
462
+ endpoint.responseUnwrap;
463
+ return this.send(this.withKey(endpoint.remove, key), "DELETE").pipe(map(() => void 0));
464
+ }
465
+ request(method, path, payload) {
466
+ const dataKey = this.defaultUnwrap?.dataKey ?? "data";
467
+ return this.send(path, method, payload).pipe(map((raw) => {
468
+ if (raw !== null && typeof raw === "object" && !Array.isArray(raw)) {
469
+ const rec = raw;
470
+ if (Object.prototype.hasOwnProperty.call(rec, dataKey)) return rec[dataKey];
471
+ }
472
+ return raw;
473
+ }));
474
+ }
475
+ invokeCustomEndpoint(definitionOrSchema, nameOrPayload, payload, key) {
476
+ let definition;
477
+ let actualPayload;
478
+ let actualKey = key;
479
+ if (isResourceSchema(definitionOrSchema)) {
480
+ const name = typeof nameOrPayload === "string" ? nameOrPayload : void 0;
481
+ if (!name) throw new Error("invokeCustomEndpoint requires an endpoint name when given a schema");
482
+ definition = definitionOrSchema.customEndpoints?.[name];
483
+ if (!definition) throw new Error(`Custom endpoint '${name}' is not declared for resource '${definitionOrSchema.id}'`);
484
+ actualPayload = (typeof nameOrPayload === "string" ? payload : nameOrPayload) ?? payload;
485
+ } else {
486
+ definition = definitionOrSchema;
487
+ actualPayload = nameOrPayload ?? payload;
488
+ }
489
+ if (!definition) return throwError(() => /* @__PURE__ */ new Error("Custom endpoint definition is required"));
490
+ const multipart = definition.payloadMode === "multipart" || actualPayload instanceof FormData;
491
+ const path = this.withKey(definition.path, actualKey);
492
+ const method = definition.method;
493
+ const unwrap = definition.responseUnwrap;
494
+ return this.send(path, method, actualPayload, multipart).pipe(map((raw) => {
495
+ if (unwrap) return unwrapResponse(raw, unwrap, "get");
496
+ return raw;
497
+ }));
498
+ }
499
+ invokeCustom(schemaOrDefinition, nameOrPayload, payload, key) {
500
+ return this.invokeCustomEndpoint(schemaOrDefinition, nameOrPayload, payload, key);
501
+ }
502
+ custom(schemaOrDefinition, nameOrPayload, payload, key) {
503
+ return this.invokeCustomEndpoint(schemaOrDefinition, nameOrPayload, payload, key);
504
+ }
505
+ send(path, method, payload, multipart = false) {
506
+ if (!path) return throwError(() => /* @__PURE__ */ new Error("Operación no disponible para este recurso"));
507
+ let resolvedPath;
508
+ try {
509
+ resolvedPath = resolveEndpointPath(path, this.buildSources());
510
+ } catch (error) {
511
+ return throwError(() => error);
512
+ }
513
+ const deps = this.transportDeps();
514
+ return (this.driver === "rest" ? sendRest(deps, resolvedPath, method, payload, multipart) : sendGas(deps, resolvedPath, method, payload, multipart)).pipe(tap((res) => {
515
+ const renewed = renewedTokenOf(res);
516
+ if (renewed !== null) this.auth.applyRenewedToken(renewed);
517
+ }));
518
+ }
519
+ transportDeps() {
520
+ const adapter = this.firebaseAuthAdapter;
521
+ return {
522
+ http: this.http,
523
+ apiUrl: this.apiUrl,
524
+ sessionToken: () => this.auth.token(),
525
+ getIdToken: adapter?.getIdToken ? () => adapter.getIdToken() : void 0
526
+ };
527
+ }
528
+ buildSources() {
529
+ return {
530
+ ...this.valueSources,
531
+ auth: () => ({
532
+ user: this.auth.user(),
533
+ token: this.auth.token()
534
+ }),
535
+ config: () => this.injector.get(ConfigService, null)?.globalConfig() ?? null
536
+ };
537
+ }
538
+ withKey(path, key) {
539
+ if (!path) return;
540
+ return path.includes("{key}") ? path.replace("{key}", encodeURIComponent(key ?? "")) : path;
541
+ }
542
+ static ɵfac = i0.ɵɵngDeclareFactory({
543
+ minVersion: "12.0.0",
544
+ version: "22.2.3",
545
+ ngImport: i0,
546
+ type: ApiService,
547
+ deps: [],
548
+ target: i0.ɵɵFactoryTarget.Service
549
+ });
550
+ static ɵprov = i0.ɵɵngDeclareService({
551
+ minVersion: "22.0.0",
552
+ version: "22.2.3",
553
+ ngImport: i0,
554
+ type: ApiService
555
+ });
556
+ };
557
+ i0.ɵɵngDeclareClassMetadata({
558
+ minVersion: "12.0.0",
559
+ version: "22.2.3",
560
+ ngImport: i0,
561
+ type: ApiService,
562
+ decorators: [{ type: Service }]
563
+ });
564
+ function isResourceSchema(value) {
565
+ return typeof value === "object" && value !== null && "endpoint" in value && "fields" in value;
566
+ }
567
+ function unwrapList(raw) {
568
+ if (Array.isArray(raw)) return raw;
569
+ if (raw !== null && typeof raw === "object") {
570
+ const items = raw.items;
571
+ if (Array.isArray(items)) return items;
572
+ return [];
573
+ }
574
+ throw new Error(`List response must be an array or an object with an 'items' array; received ${raw === null ? "null" : typeof raw}`);
575
+ }
576
+ var ConfigService = class ConfigService {
577
+ api = inject(ApiService, { optional: true });
578
+ globalConfig = signal({ public_base_url: typeof window !== "undefined" ? window.location.origin : "" }, ...ngDevMode ? [{ debugName: "globalConfig" }] : /* istanbul ignore next */ []);
579
+ endpoints = [];
580
+ loaded = false;
581
+ inFlight = null;
582
+ load(endpoints) {
583
+ this.endpoints = endpoints;
584
+ this.ensure();
585
+ }
586
+ ensureLoaded() {
587
+ return this.ensure();
588
+ }
589
+ ensure() {
590
+ if (this.loaded) return Promise.resolve();
591
+ if (this.inFlight) return this.inFlight;
592
+ if (!this.api || typeof this.api.get !== "function" || this.endpoints.length === 0) return Promise.resolve();
593
+ this.inFlight = firstValueFrom(forkJoin(this.endpoints.map((endpoint) => this.api.get(endpoint).pipe(catchError(() => of(null)))))).then((blocks) => {
594
+ this.inFlight = null;
595
+ blocks.forEach((data) => {
596
+ if (data && typeof data === "object" && Object.keys(data).length > 0) this.globalConfig.update((current) => ({
597
+ ...current,
598
+ ...data
599
+ }));
600
+ });
601
+ this.loaded = blocks.every((data) => data !== null);
602
+ });
603
+ return this.inFlight;
604
+ }
605
+ buildInterpolationContext(record) {
606
+ const config = this.globalConfig();
607
+ const baseUrl = String(config["public_base_url"] || window.location.origin).replace(/\/+$/, "");
608
+ return {
609
+ ...config,
610
+ ...record,
611
+ public_base_url: baseUrl
612
+ };
613
+ }
614
+ static ɵfac = i0.ɵɵngDeclareFactory({
615
+ minVersion: "12.0.0",
616
+ version: "22.2.3",
617
+ ngImport: i0,
618
+ type: ConfigService,
619
+ deps: [],
620
+ target: i0.ɵɵFactoryTarget.Service
621
+ });
622
+ static ɵprov = i0.ɵɵngDeclareService({
623
+ minVersion: "22.0.0",
624
+ version: "22.2.3",
625
+ ngImport: i0,
626
+ type: ConfigService
627
+ });
628
+ };
629
+ i0.ɵɵngDeclareClassMetadata({
630
+ minVersion: "12.0.0",
631
+ version: "22.2.3",
632
+ ngImport: i0,
633
+ type: ConfigService,
634
+ decorators: [{ type: Service }]
635
+ });
636
+ let catalog = [];
637
+ let authCatalog;
638
+ function setSchemaCatalog(schemas, auth) {
639
+ catalog = schemas;
640
+ authCatalog = auth;
641
+ }
642
+ function getSchema(id) {
643
+ return catalog.find((schema) => schema.id === id);
644
+ }
645
+ function allSchemas() {
646
+ return catalog;
647
+ }
648
+ function getAuth() {
649
+ return authCatalog;
650
+ }
651
+ const GAS_SCHEMAS = new InjectionToken("gas.admin.schemas");
652
+ function provideGasAdmin(config) {
653
+ setSchemaCatalog(config.schemas, config.auth);
654
+ const configEndpoints = () => config.schemas.flatMap((schema) => schema.kind === "singleton" && schema.endpoint?.get ? [{ get: schema.endpoint.get }] : []);
655
+ return [
656
+ {
657
+ provide: GAS_SCHEMAS,
658
+ useValue: config.schemas
659
+ },
660
+ {
661
+ provide: API_DRIVER,
662
+ useValue: config.driver ?? "gas"
663
+ },
664
+ {
665
+ provide: VALUE_SOURCES,
666
+ useValue: config.valueSources ?? {}
667
+ },
668
+ {
669
+ provide: DEFAULT_RESPONSE_UNWRAP,
670
+ useValue: config.defaultResponseUnwrap
671
+ },
672
+ provideHttpClient(withInterceptors([apiErrorInterceptor])),
673
+ provideAppInitializer(() => inject(ConfigService).load(configEndpoints())),
674
+ provideAppInitializer(() => inject(AuthService).restore())
675
+ ];
676
+ }
677
+ function provideFirebaseAdapter(adapter) {
678
+ return {
679
+ provide: FIREBASE_AUTH_ADAPTER,
680
+ useValue: adapter
681
+ };
682
+ }
683
+ export { DEFAULT_RESPONSE_UNWRAP as _, provideFirebaseAdapter as a, ApiError as b, ConfigService as c, AuthService as d, LOGIN_PATH as f, API_URL as g, API_DRIVER as h, getSchema as i, ApiService as l, SESSION_USER_KEY as m, allSchemas as n, provideGasAdmin as o, SESSION_TOKEN_KEY as p, getAuth as r, setSchemaCatalog as s, GAS_SCHEMAS as t, apiErrorInterceptor as u, FIREBASE_AUTH_ADAPTER as v, renewedTokenOf as x, VALUE_SOURCES as y };
684
+
685
+ //# sourceMappingURL=tinya-code-gas-admin-ui-schema-catalog-D0Pk0wAN.mjs.map