@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,223 @@
1
+ import { t as Button } from "./tinya-code-gas-admin-ui-button-BQjNW8KB.mjs";
2
+ import { n as FieldAria } from "./tinya-code-gas-admin-ui-field-aria-BD1Wiggc.mjs";
3
+ import { t as childTree } from "./tinya-code-gas-admin-ui-field-node-CIK6KNN_.mjs";
4
+ import * as i0 from "@angular/core";
5
+ import { Component, computed, input, viewChild } from "@angular/core";
6
+ import { FormField } from "@angular/forms/signals";
7
+ var FieldTextarea = class FieldTextarea {
8
+ field = input.required(...ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []);
9
+ tree = input.required(...ngDevMode ? [{ debugName: "tree" }] : /* istanbul ignore next */ []);
10
+ area = viewChild("area", ...ngDevMode ? [{ debugName: "area" }] : /* istanbul ignore next */ []);
11
+ node = computed(() => childTree(this.tree(), this.field().key), ...ngDevMode ? [{ debugName: "node" }] : /* istanbul ignore next */ []);
12
+ state = computed(() => this.node()(), ...ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []);
13
+ insertToken(key) {
14
+ const area = this.area()?.nativeElement;
15
+ const token = `{${key}}`;
16
+ const current = typeof this.state().value() === "string" ? this.state().value() : "";
17
+ let next;
18
+ let caret;
19
+ if (area) {
20
+ const start = area.selectionStart ?? current.length;
21
+ const end = area.selectionEnd ?? start;
22
+ next = current.slice(0, start) + token + current.slice(end);
23
+ caret = start + token.length;
24
+ } else {
25
+ next = current + token;
26
+ caret = next.length;
27
+ }
28
+ this.state().value.set(next);
29
+ if (area) {
30
+ area.focus();
31
+ area.setSelectionRange(caret, caret);
32
+ }
33
+ }
34
+ counter = computed(() => {
35
+ const field = this.field();
36
+ const value = this.state().value();
37
+ const text = typeof value === "string" ? value : "";
38
+ const chars = text.length;
39
+ const words = text.trim() === "" ? 0 : text.trim().split(/\s+/).length;
40
+ const parts = [];
41
+ const maxChars = field.validators?.maxLength;
42
+ if (maxChars !== void 0) parts.push(`${chars}/${maxChars} caracteres`);
43
+ const maxWords = field.validators?.maxWords ?? field.maxWords;
44
+ const minWords = field.validators?.minWords ?? field.minWords;
45
+ if (maxWords !== void 0) parts.push(minWords !== void 0 ? `${words}/${maxWords} palabras (mín. ${minWords})` : `${words}/${maxWords} palabras`);
46
+ else if (minWords !== void 0) parts.push(`${words} palabras (mín. ${minWords})`);
47
+ return parts.length > 0 ? parts.join(" · ") : null;
48
+ }, ...ngDevMode ? [{ debugName: "counter" }] : /* istanbul ignore next */ []);
49
+ static ɵfac = i0.ɵɵngDeclareFactory({
50
+ minVersion: "12.0.0",
51
+ version: "22.2.3",
52
+ ngImport: i0,
53
+ type: FieldTextarea,
54
+ deps: [],
55
+ target: i0.ɵɵFactoryTarget.Component
56
+ });
57
+ static ɵcmp = i0.ɵɵngDeclareComponent({
58
+ minVersion: "17.0.0",
59
+ version: "22.2.3",
60
+ type: FieldTextarea,
61
+ isStandalone: true,
62
+ selector: "app-field-textarea",
63
+ inputs: {
64
+ field: {
65
+ classPropertyName: "field",
66
+ publicName: "field",
67
+ isSignal: true,
68
+ isRequired: true,
69
+ transformFunction: null
70
+ },
71
+ tree: {
72
+ classPropertyName: "tree",
73
+ publicName: "tree",
74
+ isSignal: true,
75
+ isRequired: true,
76
+ transformFunction: null
77
+ }
78
+ },
79
+ viewQueries: [{
80
+ propertyName: "area",
81
+ first: true,
82
+ predicate: ["area"],
83
+ descendants: true,
84
+ isSignal: true
85
+ }],
86
+ ngImport: i0,
87
+ template: `
88
+ <div>
89
+ <textarea
90
+ class="field-input"
91
+ [id]="state().name()"
92
+ [formField]="node()"
93
+ [placeholder]="field().placeholder ?? ''"
94
+ [attr.rows]="field().rows ?? 4"
95
+ #area
96
+ ></textarea>
97
+ @if (field().tokens?.length) {
98
+ <div class="mt-1.5 flex flex-wrap gap-2 lg:gap-1.5" data-testid="textarea-tokens">
99
+ @for (token of field().tokens; track token.key) {
100
+ <button
101
+ app-button
102
+ type="button"
103
+ variant="outline"
104
+ size="sm"
105
+ [attr.title]="'Inserta {' + token.key + '} en el texto'"
106
+ (click)="insertToken(token.key)"
107
+ >
108
+ {{ token.label }}
109
+ </button>
110
+ }
111
+ </div>
112
+ }
113
+ @if (counter(); as counter) {
114
+ <div class="mt-1 flex justify-right text-xs text-neutral" data-testid="textarea-counter">
115
+ {{ counter }}
116
+ </div>
117
+ }
118
+ </div>
119
+ `,
120
+ isInline: true,
121
+ dependencies: [
122
+ {
123
+ kind: "directive",
124
+ type: FieldAria,
125
+ selector: "input[id], select[id], textarea[id], output[id]"
126
+ },
127
+ {
128
+ kind: "directive",
129
+ type: FormField,
130
+ selector: "[formField]",
131
+ inputs: ["formField"],
132
+ exportAs: ["formField"]
133
+ },
134
+ {
135
+ kind: "component",
136
+ type: Button,
137
+ selector: "button[app-button]",
138
+ inputs: [
139
+ "variant",
140
+ "size",
141
+ "type",
142
+ "disabled",
143
+ "loading"
144
+ ]
145
+ }
146
+ ]
147
+ });
148
+ };
149
+ i0.ɵɵngDeclareClassMetadata({
150
+ minVersion: "12.0.0",
151
+ version: "22.2.3",
152
+ ngImport: i0,
153
+ type: FieldTextarea,
154
+ decorators: [{
155
+ type: Component,
156
+ args: [{
157
+ selector: "app-field-textarea",
158
+ imports: [
159
+ FieldAria,
160
+ FormField,
161
+ Button
162
+ ],
163
+ template: `
164
+ <div>
165
+ <textarea
166
+ class="field-input"
167
+ [id]="state().name()"
168
+ [formField]="node()"
169
+ [placeholder]="field().placeholder ?? ''"
170
+ [attr.rows]="field().rows ?? 4"
171
+ #area
172
+ ></textarea>
173
+ @if (field().tokens?.length) {
174
+ <div class="mt-1.5 flex flex-wrap gap-2 lg:gap-1.5" data-testid="textarea-tokens">
175
+ @for (token of field().tokens; track token.key) {
176
+ <button
177
+ app-button
178
+ type="button"
179
+ variant="outline"
180
+ size="sm"
181
+ [attr.title]="'Inserta {' + token.key + '} en el texto'"
182
+ (click)="insertToken(token.key)"
183
+ >
184
+ {{ token.label }}
185
+ </button>
186
+ }
187
+ </div>
188
+ }
189
+ @if (counter(); as counter) {
190
+ <div class="mt-1 flex justify-right text-xs text-neutral" data-testid="textarea-counter">
191
+ {{ counter }}
192
+ </div>
193
+ }
194
+ </div>
195
+ `
196
+ }]
197
+ }],
198
+ propDecorators: {
199
+ field: [{
200
+ type: i0.Input,
201
+ args: [{
202
+ isSignal: true,
203
+ alias: "field",
204
+ required: true
205
+ }]
206
+ }],
207
+ tree: [{
208
+ type: i0.Input,
209
+ args: [{
210
+ isSignal: true,
211
+ alias: "tree",
212
+ required: true
213
+ }]
214
+ }],
215
+ area: [{
216
+ type: i0.ViewChild,
217
+ args: ["area", { isSignal: true }]
218
+ }]
219
+ }
220
+ });
221
+ export { FieldTextarea };
222
+
223
+ //# sourceMappingURL=tinya-code-gas-admin-ui-textarea-CGLSIW13.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinya-code-gas-admin-ui-textarea-CGLSIW13.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/fields/textarea/textarea.ts"],"sourcesContent":["import { Component, computed, ElementRef, input, viewChild } from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\n\nimport type { TextareaField } from '../../core/models/schema.model';\nimport { FieldAria } from '../field-aria';\nimport { childTree, type RootTree } from '../field-node';\nimport { Button } from '../../shared/components/button/button';\n\n/**\n * Área multilínea con contador de caracteres/palabras (base.md §5.1).\n * Los límites salen de `validators.*`, con `minWords`/`maxWords` del tipo\n * como respaldo, y coinciden con las reglas de `form-view/form-schema.ts`.\n *\n * Cuando el campo declara `tokens`, se pinta una fila de chips debajo: cada\n * chip escribe `{key}` **en la posición del cursor** (no al final) y devuelve\n * el foco, así el operador escribe → apreta → sigue escribiendo. Es la UI de\n * la plantilla de compartir; el motor back no se entera.\n */\n@Component({\n selector: 'app-field-textarea',\n imports: [FieldAria, FormField, Button],\n template: `\n <div>\n <textarea\n class=\"field-input\"\n [id]=\"state().name()\"\n [formField]=\"node()\"\n [placeholder]=\"field().placeholder ?? ''\"\n [attr.rows]=\"field().rows ?? 4\"\n #area\n ></textarea>\n @if (field().tokens?.length) {\n <div class=\"mt-1.5 flex flex-wrap gap-2 lg:gap-1.5\" data-testid=\"textarea-tokens\">\n @for (token of field().tokens; track token.key) {\n <button\n app-button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n [attr.title]=\"'Inserta {' + token.key + '} en el texto'\"\n (click)=\"insertToken(token.key)\"\n >\n {{ token.label }}\n </button>\n }\n </div>\n }\n @if (counter(); as counter) {\n <div class=\"mt-1 flex justify-right text-xs text-neutral\" data-testid=\"textarea-counter\">\n {{ counter }}\n </div>\n }\n </div>\n `,\n})\nexport class FieldTextarea {\n readonly field = input.required<TextareaField>();\n readonly tree = input.required<RootTree>();\n\n private readonly area = viewChild<ElementRef<HTMLTextAreaElement>>('area');\n\n protected readonly node = computed(() => childTree<string>(this.tree(), this.field().key));\n protected readonly state = computed(() => this.node()());\n\n /**\n * Escribe `{key}` donde está el cursor (o reemplaza la selección) y\n * reposiciona el cursor DESPUÉS del token insertado, para seguir escribiendo.\n *\n * Si el textarea aún no está montado (o no hay cursor válido) cae al\n * final del texto: nunca revienta por un click temprano.\n */\n protected insertToken(key: string): void {\n const area = this.area()?.nativeElement;\n const token = `{${key}}`;\n const current =\n typeof this.state().value() === 'string' ? (this.state().value() as string) : '';\n\n let next: string;\n let caret: number;\n if (area) {\n const start = area.selectionStart ?? current.length;\n const end = area.selectionEnd ?? start;\n next = current.slice(0, start) + token + current.slice(end);\n caret = start + token.length;\n } else {\n next = current + token;\n caret = next.length;\n }\n\n this.state().value.set(next);\n\n if (area) {\n area.focus();\n area.setSelectionRange(caret, caret);\n }\n }\n\n /** Contador `n/m …`; `null` cuando el campo no declara límites. */\n protected readonly counter = computed<string | null>(() => {\n const field = this.field();\n const value = this.state().value();\n const text = typeof value === 'string' ? value : '';\n const chars = text.length;\n const words = text.trim() === '' ? 0 : text.trim().split(/\\s+/).length;\n\n const parts: string[] = [];\n const maxChars = field.validators?.maxLength;\n if (maxChars !== undefined) {\n parts.push(`${chars}/${maxChars} caracteres`);\n }\n // `validators` tiene prioridad sobre las opciones propias del tipo\n // (mismo criterio que las reglas de `form-schema.ts`).\n const maxWords = field.validators?.maxWords ?? field.maxWords;\n const minWords = field.validators?.minWords ?? field.minWords;\n if (maxWords !== undefined) {\n parts.push(\n minWords !== undefined\n ? `${words}/${maxWords} palabras (mín. ${minWords})`\n : `${words}/${maxWords} palabras`,\n );\n } else if (minWords !== undefined) {\n parts.push(`${words} palabras (mín. ${minWords})`);\n }\n return parts.length > 0 ? parts.join(' · ') : null;\n });\n}\n"],"mappings":"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"}
@@ -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 FieldTime = class FieldTime {
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: FieldTime,
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: FieldTime,
23
+ isStandalone: true,
24
+ selector: "app-field-time",
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="time"
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: FieldTime,
70
+ decorators: [{
71
+ type: Component,
72
+ args: [{
73
+ selector: "app-field-time",
74
+ imports: [FieldAria, FormField],
75
+ template: `
76
+ <input
77
+ type="time"
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 { FieldTime };
106
+
107
+ //# sourceMappingURL=tinya-code-gas-admin-ui-time-BcHzsTWf.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinya-code-gas-admin-ui-time-BcHzsTWf.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/fields/time/time.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\n\nimport type { TimeField } from '../../core/models/schema.model';\nimport { FieldAria } from '../field-aria';\nimport { childTree, type RootTree } from '../field-node';\n\n/** Selector de hora `HH:mm` (base.md §5.1). */\n@Component({\n selector: 'app-field-time',\n imports: [FieldAria, FormField],\n template: `\n <input\n type=\"time\"\n class=\"field-input\"\n [id]=\"state().name()\"\n [formField]=\"node()\"\n [placeholder]=\"field().placeholder ?? ''\"\n />\n `,\n})\nexport class FieldTime {\n readonly field = input.required<TimeField>();\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,YAAb,MAAa,UAAS;CACX,QAAQ,MAAM,SAAqB,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CACnC,OAAO,MAAM,SAAoB,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAEvB,OAAO,eAAe,UAAkB,KAAK,KAAI,GAAI,KAAK,MAAK,CAAE,CAAC,GAAG,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CACvE,QAAQ,eAAe,KAAK,KAAI,CAAE,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAL7C,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAS,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAT,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAS,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,UAAA;EAAA,UAVV;;;;;;;;;EAQT,UAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MATS;GAAS,UAAA;EAAA,GAAA;GAAA,MAAA;GAAA,MAAE;GAAS,UAAA;GAAA,QAAA,CAAA,WAAA;GAAA,UAAA,CAAA,WAAA;EAAA,CAAA;CAAA,CAAA;;AAWnB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAS,YAAA,CAAA;EAbrB,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,SAAS,CAAC,WAAW,SAAS;GAC9B,UAAU;;;;;;;;;EASX,CAAA"}
@@ -0,0 +1,60 @@
1
+ import { l as ApiService } from "./tinya-code-gas-admin-ui-schema-catalog-D0Pk0wAN.mjs";
2
+ import * as i0 from "@angular/core";
3
+ import { Service, inject } from "@angular/core";
4
+ import { HttpClient, HttpEventType, HttpResponse } from "@angular/common/http";
5
+ import { map, switchMap } from "rxjs";
6
+ var UploadService = class UploadService {
7
+ http = inject(HttpClient);
8
+ api = inject(ApiService);
9
+ uploadWithProgress(file, resource, field) {
10
+ const payload = field ? {
11
+ resource,
12
+ field
13
+ } : { resource };
14
+ return this.api.request("POST", "/admin/upload-signature", payload).pipe(switchMap((signature) => {
15
+ const form = new FormData();
16
+ form.append("file", file, file.name);
17
+ form.append("api_key", signature.api_key);
18
+ form.append("timestamp", String(signature.timestamp));
19
+ form.append("signature", signature.signature);
20
+ form.append("folder", signature.folder);
21
+ form.append("allowed_formats", signature.allowed_formats);
22
+ return this.http.post(signature.upload_url, form, {
23
+ reportProgress: true,
24
+ observe: "events"
25
+ });
26
+ }), map((event) => {
27
+ if (event.type !== HttpEventType.Response) return event;
28
+ const url = typeof event.body?.secure_url === "string" ? event.body.secure_url : "";
29
+ return new HttpResponse({
30
+ body: url,
31
+ status: event.status,
32
+ statusText: event.statusText
33
+ });
34
+ }));
35
+ }
36
+ static ɵfac = i0.ɵɵngDeclareFactory({
37
+ minVersion: "12.0.0",
38
+ version: "22.2.3",
39
+ ngImport: i0,
40
+ type: UploadService,
41
+ deps: [],
42
+ target: i0.ɵɵFactoryTarget.Service
43
+ });
44
+ static ɵprov = i0.ɵɵngDeclareService({
45
+ minVersion: "22.0.0",
46
+ version: "22.2.3",
47
+ ngImport: i0,
48
+ type: UploadService
49
+ });
50
+ };
51
+ i0.ɵɵngDeclareClassMetadata({
52
+ minVersion: "12.0.0",
53
+ version: "22.2.3",
54
+ ngImport: i0,
55
+ type: UploadService,
56
+ decorators: [{ type: Service }]
57
+ });
58
+ export { UploadService as t };
59
+
60
+ //# sourceMappingURL=tinya-code-gas-admin-ui-upload.service-CZPEPCeN.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinya-code-gas-admin-ui-upload.service-CZPEPCeN.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/core/services/upload.service.ts"],"sourcesContent":["import { HttpClient, HttpEvent, HttpEventType, HttpResponse } from '@angular/common/http';\nimport { inject, Service } from '@angular/core';\nimport { map, Observable, switchMap } from 'rxjs';\n\nimport { ApiService } from './api.service';\n\n/** Firma que emite `/admin/upload-signature` (baseapi §11.3). NUNCA `api_secret`. */\ninterface UploadSignature {\n cloud_name: string;\n api_key: string;\n timestamp: number;\n signature: string;\n folder: string;\n allowed_formats: string;\n upload_url: string;\n}\n\n/** Respuesta de Cloudinary en un upload normal (sólo interesa `secure_url`). */\ninterface CloudinaryResponse {\n secure_url?: unknown;\n}\n\n/**\n * Subida de imágenes en DOS PASOS (baseapi §11.2, opción B):\n * 1. Firma firmada por el backend → `POST /admin/upload-signature`\n * con `{ resource }` (mismo envelope text/plain que todo `/admin/*`).\n * 2. El navegador sube directo a Cloudinary (FormData a `upload_url`) con\n * los parámetros que fijó y firmó el backend; el API secret jamás sale\n * de acá (§11.1–§11.3).\n *\n * Se guarda SOLO `secure_url` (base.md §7: la URL pública es el valor del\n * campo; la imagen anterior no se borra al reemplazar — §11.6).\n *\n * Los errores (firma caducada, rate-limit 429, red) llegan por el canal de\n * error; el componente conserva la imagen anterior (§11.2 paso 6).\n */\n@Service()\nexport class UploadService {\n private readonly http = inject(HttpClient);\n private readonly api = inject(ApiService);\n\n /**\n * Misma subida con eventos de progreso (base.md §7, estado «Subiendo»):\n * emite `UploadProgress` durante la subida a Cloudinary y termina con\n * `Response` llevando la URL en el body. El campo sólo cambia cuando\n * llega la respuesta.\n */\n uploadWithProgress(file: File, resource: string, field?: string): Observable<HttpEvent<string>> {\n // `field` es opcional (R9.5.3): si el campo declara `formats`, esos son\n // los formatos que el backend firma. Sin campo firma la lista global.\n const payload: { resource: string; field?: string } = field\n ? { resource, field }\n : { resource };\n return this.api.request<UploadSignature>('POST', '/admin/upload-signature', payload).pipe(\n switchMap((signature) => {\n const form = new FormData();\n form.append('file', file, file.name);\n form.append('api_key', signature.api_key);\n form.append('timestamp', String(signature.timestamp));\n form.append('signature', signature.signature);\n form.append('folder', signature.folder);\n form.append('allowed_formats', signature.allowed_formats);\n return this.http.post<CloudinaryResponse>(signature.upload_url, form, {\n reportProgress: true,\n observe: 'events',\n });\n }),\n map((event) => {\n if (event.type !== HttpEventType.Response) {\n return event;\n }\n const url = typeof event.body?.secure_url === 'string' ? event.body.secure_url : '';\n return new HttpResponse({\n body: url,\n status: event.status,\n statusText: event.statusText,\n });\n }),\n );\n }\n}\n"],"mappings":";;;;;AAqCA,IAAa,gBAAb,MAAa,cAAa;CACP,OAAO,OAAO,UAAU;CACxB,MAAM,OAAO,UAAU;CAQxC,mBAAmB,MAAY,UAAkB,OAAc;EAG7D,MAAM,UAAgD,QAClD;GAAE;GAAU;EAAK,IACjB,EAAE,SAAQ;EACd,OAAO,KAAK,IAAI,QAAyB,QAAQ,2BAA2B,OAAO,CAAC,CAAC,KACnF,WAAW,cAAa;GACtB,MAAM,OAAO,IAAI,SAAQ;GACzB,KAAK,OAAO,QAAQ,MAAM,KAAK,IAAI;GACnC,KAAK,OAAO,WAAW,UAAU,OAAO;GACxC,KAAK,OAAO,aAAa,OAAO,UAAU,SAAS,CAAC;GACpD,KAAK,OAAO,aAAa,UAAU,SAAS;GAC5C,KAAK,OAAO,UAAU,UAAU,MAAM;GACtC,KAAK,OAAO,mBAAmB,UAAU,eAAe;GACxD,OAAO,KAAK,KAAK,KAAyB,UAAU,YAAY,MAAM;IACpE,gBAAgB;IAChB,SAAS;GACV,CAAA;EACH,CAAC,GACD,KAAK,UAAS;GACZ,IAAI,MAAM,SAAS,cAAc,UAC/B,OAAO;GAET,MAAM,MAAM,OAAO,MAAM,MAAM,eAAe,WAAW,MAAM,KAAK,aAAa;GACjF,OAAO,IAAI,aAAa;IACtB,MAAM;IACN,QAAQ,MAAM;IACd,YAAY,MAAM;GACnB,CAAA;EACH,CAAC,CAAC;CAEN;CA1CW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAa,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAb,OAAA,QAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;CAAa,CAAA;;AAAb,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAa,YAAA,CAAA,EADzB,MAAA,QAAA,CAAA"}
@@ -0,0 +1,141 @@
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 FieldUrl = class FieldUrl {
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
+ href = computed(() => {
12
+ const value = this.state().value();
13
+ return typeof value === "string" && /^https?:\/\//i.test(value) ? value : null;
14
+ }, ...ngDevMode ? [{ debugName: "href" }] : /* istanbul ignore next */ []);
15
+ static ɵfac = i0.ɵɵngDeclareFactory({
16
+ minVersion: "12.0.0",
17
+ version: "22.2.3",
18
+ ngImport: i0,
19
+ type: FieldUrl,
20
+ deps: [],
21
+ target: i0.ɵɵFactoryTarget.Component
22
+ });
23
+ static ɵcmp = i0.ɵɵngDeclareComponent({
24
+ minVersion: "17.0.0",
25
+ version: "22.2.3",
26
+ type: FieldUrl,
27
+ isStandalone: true,
28
+ selector: "app-field-url",
29
+ inputs: {
30
+ field: {
31
+ classPropertyName: "field",
32
+ publicName: "field",
33
+ isSignal: true,
34
+ isRequired: true,
35
+ transformFunction: null
36
+ },
37
+ tree: {
38
+ classPropertyName: "tree",
39
+ publicName: "tree",
40
+ isSignal: true,
41
+ isRequired: true,
42
+ transformFunction: null
43
+ }
44
+ },
45
+ ngImport: i0,
46
+ template: `
47
+ <div class="flex items-start gap-2">
48
+ <input
49
+ type="url"
50
+ class="field-input"
51
+ [id]="state().name()"
52
+ [formField]="node()"
53
+ [placeholder]="field().placeholder ?? 'https://…'"
54
+ />
55
+ @if (href(); as href) {
56
+ <!-- Mismo lenguaje que la variante outline de app-button (el
57
+ selector del componente es button[app-button], un ancla no
58
+ puede usarlo): borde /40, hover con fondo, 44 px en mobile. -->
59
+ <a
60
+ class="min-h-11 shrink-0 rounded-lg border border-neutral/40 bg-surface px-3 py-2 text-sm text-neutral hover:bg-neutral/10 lg:min-h-0"
61
+ [href]="href"
62
+ target="_blank"
63
+ rel="noopener noreferrer"
64
+ >
65
+ Abrir
66
+ </a>
67
+ }
68
+ </div>
69
+ `,
70
+ isInline: true,
71
+ dependencies: [{
72
+ kind: "directive",
73
+ type: FieldAria,
74
+ selector: "input[id], select[id], textarea[id], output[id]"
75
+ }, {
76
+ kind: "directive",
77
+ type: FormField,
78
+ selector: "[formField]",
79
+ inputs: ["formField"],
80
+ exportAs: ["formField"]
81
+ }]
82
+ });
83
+ };
84
+ i0.ɵɵngDeclareClassMetadata({
85
+ minVersion: "12.0.0",
86
+ version: "22.2.3",
87
+ ngImport: i0,
88
+ type: FieldUrl,
89
+ decorators: [{
90
+ type: Component,
91
+ args: [{
92
+ selector: "app-field-url",
93
+ imports: [FieldAria, FormField],
94
+ template: `
95
+ <div class="flex items-start gap-2">
96
+ <input
97
+ type="url"
98
+ class="field-input"
99
+ [id]="state().name()"
100
+ [formField]="node()"
101
+ [placeholder]="field().placeholder ?? 'https://…'"
102
+ />
103
+ @if (href(); as href) {
104
+ <!-- Mismo lenguaje que la variante outline de app-button (el
105
+ selector del componente es button[app-button], un ancla no
106
+ puede usarlo): borde /40, hover con fondo, 44 px en mobile. -->
107
+ <a
108
+ class="min-h-11 shrink-0 rounded-lg border border-neutral/40 bg-surface px-3 py-2 text-sm text-neutral hover:bg-neutral/10 lg:min-h-0"
109
+ [href]="href"
110
+ target="_blank"
111
+ rel="noopener noreferrer"
112
+ >
113
+ Abrir
114
+ </a>
115
+ }
116
+ </div>
117
+ `
118
+ }]
119
+ }],
120
+ propDecorators: {
121
+ field: [{
122
+ type: i0.Input,
123
+ args: [{
124
+ isSignal: true,
125
+ alias: "field",
126
+ required: true
127
+ }]
128
+ }],
129
+ tree: [{
130
+ type: i0.Input,
131
+ args: [{
132
+ isSignal: true,
133
+ alias: "tree",
134
+ required: true
135
+ }]
136
+ }]
137
+ }
138
+ });
139
+ export { FieldUrl };
140
+
141
+ //# sourceMappingURL=tinya-code-gas-admin-ui-url-GO4LZi__.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinya-code-gas-admin-ui-url-GO4LZi__.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/fields/url/url.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\n\nimport type { UrlField } from '../../core/models/schema.model';\nimport { FieldAria } from '../field-aria';\nimport { childTree, type RootTree } from '../field-node';\n\n/**\n * Input con validación de URL y botón «abrir» (base.md §5.1). La validación\n * de formato la aporta Fase 10 (`pattern`/`validate`); acá solo se enlaza el\n * valor cuando es http(s).\n */\n@Component({\n selector: 'app-field-url',\n imports: [FieldAria, FormField],\n template: `\n <div class=\"flex items-start gap-2\">\n <input\n type=\"url\"\n class=\"field-input\"\n [id]=\"state().name()\"\n [formField]=\"node()\"\n [placeholder]=\"field().placeholder ?? 'https://…'\"\n />\n @if (href(); as href) {\n <!-- Mismo lenguaje que la variante outline de app-button (el\n selector del componente es button[app-button], un ancla no\n puede usarlo): borde /40, hover con fondo, 44 px en mobile. -->\n <a\n class=\"min-h-11 shrink-0 rounded-lg border border-neutral/40 bg-surface px-3 py-2 text-sm text-neutral hover:bg-neutral/10 lg:min-h-0\"\n [href]=\"href\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Abrir\n </a>\n }\n </div>\n `,\n})\nexport class FieldUrl {\n readonly field = input.required<UrlField>();\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 /** Solo http(s): evita enlazar `javascript:` u otros esquemas. */\n protected readonly href = computed(() => {\n const value = this.state().value();\n return typeof value === 'string' && /^https?:\\/\\//i.test(value) ? value : null;\n });\n}\n"],"mappings":";;;;;AAwCA,IAAa,WAAb,MAAa,SAAQ;CACV,QAAQ,MAAM,SAAoB,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAClC,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,OAAO,eAAc;EACtC,MAAM,QAAQ,KAAK,MAAK,CAAE,CAAC,MAAK;EAChC,OAAO,OAAO,UAAU,YAAY,gBAAgB,KAAK,KAAK,IAAI,QAAQ;CAC5E,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAXS,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAQ,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAR,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAQ,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,UAzBT;;;;;;;;;;;;;;;;;;;;;;;;EAuBT,UAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MAxBS;GAAS,UAAA;EAAA,GAAA;GAAA,MAAA;GAAA,MAAE;GAAS,UAAA;GAAA,QAAA,CAAA,WAAA;GAAA,UAAA,CAAA,WAAA;EAAA,CAAA;CAAA,CAAA;;AA0BnB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAQ,YAAA,CAAA;EA5BpB,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,SAAS,CAAC,WAAW,SAAS;GAC9B,UAAU;;;;;;;;;;;;;;;;;;;;;;;;EAwBX,CAAA"}