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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. package/fesm2022/tinya-code-gas-admin-ui-badge-EeCA_l-o.mjs +84 -0
  2. package/fesm2022/tinya-code-gas-admin-ui-badge-EeCA_l-o.mjs.map +1 -0
  3. package/fesm2022/tinya-code-gas-admin-ui-bar-chart-G7sEMSBY.mjs +140 -0
  4. package/fesm2022/tinya-code-gas-admin-ui-bar-chart-G7sEMSBY.mjs.map +1 -0
  5. package/fesm2022/tinya-code-gas-admin-ui-boolean-B2ASKL0E.mjs +113 -0
  6. package/fesm2022/tinya-code-gas-admin-ui-boolean-B2ASKL0E.mjs.map +1 -0
  7. package/fesm2022/tinya-code-gas-admin-ui-button-BQjNW8KB.mjs +163 -0
  8. package/fesm2022/tinya-code-gas-admin-ui-button-BQjNW8KB.mjs.map +1 -0
  9. package/fesm2022/tinya-code-gas-admin-ui-calendar-view-DCY8bj2V.mjs +1027 -0
  10. package/fesm2022/tinya-code-gas-admin-ui-calendar-view-DCY8bj2V.mjs.map +1 -0
  11. package/fesm2022/tinya-code-gas-admin-ui-chart-line-BjdlKHoH.mjs +278 -0
  12. package/fesm2022/tinya-code-gas-admin-ui-chart-line-BjdlKHoH.mjs.map +1 -0
  13. package/fesm2022/tinya-code-gas-admin-ui-color-Dljh_By3.mjs +107 -0
  14. package/fesm2022/tinya-code-gas-admin-ui-color-Dljh_By3.mjs.map +1 -0
  15. package/fesm2022/tinya-code-gas-admin-ui-condition-evaluator-DY2k1M3C.mjs +101 -0
  16. package/fesm2022/tinya-code-gas-admin-ui-condition-evaluator-DY2k1M3C.mjs.map +1 -0
  17. package/fesm2022/tinya-code-gas-admin-ui-currency-BvuF3Z63.mjs +141 -0
  18. package/fesm2022/tinya-code-gas-admin-ui-currency-BvuF3Z63.mjs.map +1 -0
  19. package/fesm2022/tinya-code-gas-admin-ui-data-source.service-96FSbN72.mjs +88 -0
  20. package/fesm2022/tinya-code-gas-admin-ui-data-source.service-96FSbN72.mjs.map +1 -0
  21. package/fesm2022/tinya-code-gas-admin-ui-date-1SJGXZrd.mjs +107 -0
  22. package/fesm2022/tinya-code-gas-admin-ui-date-1SJGXZrd.mjs.map +1 -0
  23. package/fesm2022/tinya-code-gas-admin-ui-display-badge-fwk6sDU7.mjs +140 -0
  24. package/fesm2022/tinya-code-gas-admin-ui-display-badge-fwk6sDU7.mjs.map +1 -0
  25. package/fesm2022/tinya-code-gas-admin-ui-display-date-D7zLiDiG.mjs +119 -0
  26. package/fesm2022/tinya-code-gas-admin-ui-display-date-D7zLiDiG.mjs.map +1 -0
  27. package/fesm2022/tinya-code-gas-admin-ui-display-file-BiIhqvQC.mjs +125 -0
  28. package/fesm2022/tinya-code-gas-admin-ui-display-file-BiIhqvQC.mjs.map +1 -0
  29. package/fesm2022/tinya-code-gas-admin-ui-display-image-C1dhnZi1.mjs +152 -0
  30. package/fesm2022/tinya-code-gas-admin-ui-display-image-C1dhnZi1.mjs.map +1 -0
  31. package/fesm2022/tinya-code-gas-admin-ui-display-list-DOEuUbGe.mjs +211 -0
  32. package/fesm2022/tinya-code-gas-admin-ui-display-list-DOEuUbGe.mjs.map +1 -0
  33. package/fesm2022/tinya-code-gas-admin-ui-display-number-DDMzr4Hn.mjs +116 -0
  34. package/fesm2022/tinya-code-gas-admin-ui-display-number-DDMzr4Hn.mjs.map +1 -0
  35. package/fesm2022/tinya-code-gas-admin-ui-display-text-B8CdVNpv.mjs +111 -0
  36. package/fesm2022/tinya-code-gas-admin-ui-display-text-B8CdVNpv.mjs.map +1 -0
  37. package/fesm2022/tinya-code-gas-admin-ui-dropdown-C3blvmE1.mjs +122 -0
  38. package/fesm2022/tinya-code-gas-admin-ui-dropdown-C3blvmE1.mjs.map +1 -0
  39. package/fesm2022/tinya-code-gas-admin-ui-email-CT_O5ihA.mjs +107 -0
  40. package/fesm2022/tinya-code-gas-admin-ui-email-CT_O5ihA.mjs.map +1 -0
  41. package/fesm2022/tinya-code-gas-admin-ui-empty-state-BMc0QtoT.mjs +109 -0
  42. package/fesm2022/tinya-code-gas-admin-ui-empty-state-BMc0QtoT.mjs.map +1 -0
  43. package/fesm2022/tinya-code-gas-admin-ui-error-mapper.service-DY5y1FjE.mjs +45 -0
  44. package/fesm2022/tinya-code-gas-admin-ui-error-mapper.service-DY5y1FjE.mjs.map +1 -0
  45. package/fesm2022/tinya-code-gas-admin-ui-field-aria-BD1Wiggc.mjs +50 -0
  46. package/fesm2022/tinya-code-gas-admin-ui-field-aria-BD1Wiggc.mjs.map +1 -0
  47. package/fesm2022/tinya-code-gas-admin-ui-field-node-CIK6KNN_.mjs +24 -0
  48. package/fesm2022/tinya-code-gas-admin-ui-field-node-CIK6KNN_.mjs.map +1 -0
  49. package/fesm2022/tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs +27 -0
  50. package/fesm2022/tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs.map +1 -0
  51. package/fesm2022/tinya-code-gas-admin-ui-file-Dmxioog7.mjs +408 -0
  52. package/fesm2022/tinya-code-gas-admin-ui-file-Dmxioog7.mjs.map +1 -0
  53. package/fesm2022/tinya-code-gas-admin-ui-form-view-CEe7aZ4m.mjs +4516 -0
  54. package/fesm2022/tinya-code-gas-admin-ui-form-view-CEe7aZ4m.mjs.map +1 -0
  55. package/fesm2022/tinya-code-gas-admin-ui-format-badge-CK8ct5Wk.mjs +82 -0
  56. package/fesm2022/tinya-code-gas-admin-ui-format-badge-CK8ct5Wk.mjs.map +1 -0
  57. package/fesm2022/tinya-code-gas-admin-ui-format-boolean-ClzezZz-.mjs +105 -0
  58. package/fesm2022/tinya-code-gas-admin-ui-format-boolean-ClzezZz-.mjs.map +1 -0
  59. package/fesm2022/tinya-code-gas-admin-ui-format-currency-CVmniKml.mjs +65 -0
  60. package/fesm2022/tinya-code-gas-admin-ui-format-currency-CVmniKml.mjs.map +1 -0
  61. package/fesm2022/tinya-code-gas-admin-ui-format-date-Dr1YsDd_.mjs +65 -0
  62. package/fesm2022/tinya-code-gas-admin-ui-format-date-Dr1YsDd_.mjs.map +1 -0
  63. package/fesm2022/tinya-code-gas-admin-ui-format-number-CWCjpI4n.mjs +65 -0
  64. package/fesm2022/tinya-code-gas-admin-ui-format-number-CWCjpI4n.mjs.map +1 -0
  65. package/fesm2022/tinya-code-gas-admin-ui-format-text-DBOgJkH0.mjs +59 -0
  66. package/fesm2022/tinya-code-gas-admin-ui-format-text-DBOgJkH0.mjs.map +1 -0
  67. package/fesm2022/tinya-code-gas-admin-ui-format-thumbnail-PCRvxWKt.mjs +94 -0
  68. package/fesm2022/tinya-code-gas-admin-ui-format-thumbnail-PCRvxWKt.mjs.map +1 -0
  69. package/fesm2022/tinya-code-gas-admin-ui-gap-sorting-iTdy_DYG.mjs +72 -0
  70. package/fesm2022/tinya-code-gas-admin-ui-gap-sorting-iTdy_DYG.mjs.map +1 -0
  71. package/fesm2022/tinya-code-gas-admin-ui-group-h7-O8tt4.mjs +238 -0
  72. package/fesm2022/tinya-code-gas-admin-ui-group-h7-O8tt4.mjs.map +1 -0
  73. package/fesm2022/tinya-code-gas-admin-ui-image-7UhJ7nqI.mjs +416 -0
  74. package/fesm2022/tinya-code-gas-admin-ui-image-7UhJ7nqI.mjs.map +1 -0
  75. package/fesm2022/tinya-code-gas-admin-ui-kanban-view-Dl0Ol5Kb.mjs +439 -0
  76. package/fesm2022/tinya-code-gas-admin-ui-kanban-view-Dl0Ol5Kb.mjs.map +1 -0
  77. package/fesm2022/tinya-code-gas-admin-ui-key-value-nVdgg5at.mjs +513 -0
  78. package/fesm2022/tinya-code-gas-admin-ui-key-value-nVdgg5at.mjs.map +1 -0
  79. package/fesm2022/tinya-code-gas-admin-ui-list-DTtCYS4d.mjs +637 -0
  80. package/fesm2022/tinya-code-gas-admin-ui-list-DTtCYS4d.mjs.map +1 -0
  81. package/fesm2022/tinya-code-gas-admin-ui-metric-card-DnGMQL8l.mjs +127 -0
  82. package/fesm2022/tinya-code-gas-admin-ui-metric-card-DnGMQL8l.mjs.map +1 -0
  83. package/fesm2022/tinya-code-gas-admin-ui-multiselect-PB28e-jl.mjs +251 -0
  84. package/fesm2022/tinya-code-gas-admin-ui-multiselect-PB28e-jl.mjs.map +1 -0
  85. package/fesm2022/tinya-code-gas-admin-ui-notification.service-LjSULER6.mjs +66 -0
  86. package/fesm2022/tinya-code-gas-admin-ui-notification.service-LjSULER6.mjs.map +1 -0
  87. package/fesm2022/tinya-code-gas-admin-ui-number-JNr7glc8.mjs +114 -0
  88. package/fesm2022/tinya-code-gas-admin-ui-number-JNr7glc8.mjs.map +1 -0
  89. package/fesm2022/tinya-code-gas-admin-ui-phone-jR417hPf.mjs +116 -0
  90. package/fesm2022/tinya-code-gas-admin-ui-phone-jR417hPf.mjs.map +1 -0
  91. package/fesm2022/tinya-code-gas-admin-ui-quick-actions-DCQ6emmF.mjs +235 -0
  92. package/fesm2022/tinya-code-gas-admin-ui-quick-actions-DCQ6emmF.mjs.map +1 -0
  93. package/fesm2022/tinya-code-gas-admin-ui-radio-mode-DxvN07DY.mjs +8 -0
  94. package/fesm2022/tinya-code-gas-admin-ui-radio-mode-DxvN07DY.mjs.map +1 -0
  95. package/fesm2022/tinya-code-gas-admin-ui-readonly-text-BL7-4qie.mjs +124 -0
  96. package/fesm2022/tinya-code-gas-admin-ui-readonly-text-BL7-4qie.mjs.map +1 -0
  97. package/fesm2022/tinya-code-gas-admin-ui-record-list-BiZfnd_7.mjs +249 -0
  98. package/fesm2022/tinya-code-gas-admin-ui-record-list-BiZfnd_7.mjs.map +1 -0
  99. package/fesm2022/tinya-code-gas-admin-ui-relation-drawer.service-B0kT8EiW.mjs +39 -0
  100. package/fesm2022/tinya-code-gas-admin-ui-relation-drawer.service-B0kT8EiW.mjs.map +1 -0
  101. package/fesm2022/tinya-code-gas-admin-ui-relation-ykpJ3PYl.mjs +309 -0
  102. package/fesm2022/tinya-code-gas-admin-ui-relation-ykpJ3PYl.mjs.map +1 -0
  103. package/fesm2022/tinya-code-gas-admin-ui-render-registry-B88Pme-y.mjs +576 -0
  104. package/fesm2022/tinya-code-gas-admin-ui-render-registry-B88Pme-y.mjs.map +1 -0
  105. package/fesm2022/tinya-code-gas-admin-ui-rich-select-CIHaOrbU.mjs +161 -0
  106. package/fesm2022/tinya-code-gas-admin-ui-rich-select-CIHaOrbU.mjs.map +1 -0
  107. package/fesm2022/tinya-code-gas-admin-ui-rolldown-runtime-DpJrqANO.mjs +11 -0
  108. package/fesm2022/tinya-code-gas-admin-ui-schema-catalog-D0Pk0wAN.mjs +685 -0
  109. package/fesm2022/tinya-code-gas-admin-ui-schema-catalog-D0Pk0wAN.mjs.map +1 -0
  110. package/fesm2022/tinya-code-gas-admin-ui-seed-DkVZbxPP.mjs +80 -0
  111. package/fesm2022/tinya-code-gas-admin-ui-seed-DkVZbxPP.mjs.map +1 -0
  112. package/fesm2022/tinya-code-gas-admin-ui-select-CDwX9yNO.mjs +296 -0
  113. package/fesm2022/tinya-code-gas-admin-ui-select-CDwX9yNO.mjs.map +1 -0
  114. package/fesm2022/tinya-code-gas-admin-ui-skeleton-DnWK0tcZ.mjs +119 -0
  115. package/fesm2022/tinya-code-gas-admin-ui-skeleton-DnWK0tcZ.mjs.map +1 -0
  116. package/fesm2022/tinya-code-gas-admin-ui-slug-DU58cbiY.mjs +158 -0
  117. package/fesm2022/tinya-code-gas-admin-ui-slug-DU58cbiY.mjs.map +1 -0
  118. package/fesm2022/tinya-code-gas-admin-ui-source-options-B9R4mw8-.mjs +26 -0
  119. package/fesm2022/tinya-code-gas-admin-ui-source-options-B9R4mw8-.mjs.map +1 -0
  120. package/fesm2022/tinya-code-gas-admin-ui-status-progress-DmeG8htE.mjs +205 -0
  121. package/fesm2022/tinya-code-gas-admin-ui-status-progress-DmeG8htE.mjs.map +1 -0
  122. package/fesm2022/tinya-code-gas-admin-ui-string-list-gleasqzD.mjs +432 -0
  123. package/fesm2022/tinya-code-gas-admin-ui-string-list-gleasqzD.mjs.map +1 -0
  124. package/fesm2022/tinya-code-gas-admin-ui-template-interpolator-ewv7CkNX.mjs +36 -0
  125. package/fesm2022/tinya-code-gas-admin-ui-template-interpolator-ewv7CkNX.mjs.map +1 -0
  126. package/fesm2022/tinya-code-gas-admin-ui-text-CUPmL7W_.mjs +107 -0
  127. package/fesm2022/tinya-code-gas-admin-ui-text-CUPmL7W_.mjs.map +1 -0
  128. package/fesm2022/tinya-code-gas-admin-ui-textarea-CGLSIW13.mjs +223 -0
  129. package/fesm2022/tinya-code-gas-admin-ui-textarea-CGLSIW13.mjs.map +1 -0
  130. package/fesm2022/tinya-code-gas-admin-ui-time-BcHzsTWf.mjs +107 -0
  131. package/fesm2022/tinya-code-gas-admin-ui-time-BcHzsTWf.mjs.map +1 -0
  132. package/fesm2022/tinya-code-gas-admin-ui-upload.service-CZPEPCeN.mjs +60 -0
  133. package/fesm2022/tinya-code-gas-admin-ui-upload.service-CZPEPCeN.mjs.map +1 -0
  134. package/fesm2022/tinya-code-gas-admin-ui-url-GO4LZi__.mjs +141 -0
  135. package/fesm2022/tinya-code-gas-admin-ui-url-GO4LZi__.mjs.map +1 -0
  136. package/fesm2022/tinya-code-gas-admin-ui.mjs +4738 -0
  137. package/fesm2022/tinya-code-gas-admin-ui.mjs.map +1 -0
  138. package/package.json +15 -3
  139. package/types/tinya-code-gas-admin-ui.d.ts +3634 -0
  140. package/ng-package.json +0 -7
  141. package/src/lib/actions/action-registry.spec.ts +0 -52
  142. package/src/lib/actions/action-registry.ts +0 -126
  143. package/src/lib/actions/action-service.spec.ts +0 -215
  144. package/src/lib/actions/action-service.ts +0 -87
  145. package/src/lib/actions/descriptors.spec.ts +0 -155
  146. package/src/lib/actions/descriptors.ts +0 -154
  147. package/src/lib/columns/column-cell.ts +0 -33
  148. package/src/lib/columns/column-defaults.spec.ts +0 -99
  149. package/src/lib/columns/column-defaults.ts +0 -84
  150. package/src/lib/columns/column-format.spec.ts +0 -274
  151. package/src/lib/columns/descriptors.ts +0 -113
  152. package/src/lib/columns/format-badge.ts +0 -51
  153. package/src/lib/columns/format-boolean.ts +0 -58
  154. package/src/lib/columns/format-currency.ts +0 -30
  155. package/src/lib/columns/format-date.ts +0 -35
  156. package/src/lib/columns/format-number.ts +0 -32
  157. package/src/lib/columns/format-text.ts +0 -23
  158. package/src/lib/columns/format-thumbnail.ts +0 -63
  159. package/src/lib/core/adapters/firebase-auth.adapter.ts +0 -6
  160. package/src/lib/core/guards/auth.guard.spec.ts +0 -88
  161. package/src/lib/core/guards/auth.guard.ts +0 -48
  162. package/src/lib/core/guards/unsaved-changes.guard.ts +0 -16
  163. package/src/lib/core/interceptors/api-error.interceptor.spec.ts +0 -182
  164. package/src/lib/core/interceptors/api-error.interceptor.ts +0 -87
  165. package/src/lib/core/models/api.model.ts +0 -104
  166. package/src/lib/core/models/schema-descriptions.ts +0 -118
  167. package/src/lib/core/models/schema.model.ts +0 -1097
  168. package/src/lib/core/registry/composition-validator.spec.ts +0 -358
  169. package/src/lib/core/registry/composition-validator.ts +0 -270
  170. package/src/lib/core/registry/field-validators.spec.ts +0 -199
  171. package/src/lib/core/registry/field-validators.ts +0 -440
  172. package/src/lib/core/registry/render-host.spec.ts +0 -208
  173. package/src/lib/core/registry/render-host.ts +0 -646
  174. package/src/lib/core/registry/render-registry.spec.ts +0 -96
  175. package/src/lib/core/registry/render-registry.ts +0 -312
  176. package/src/lib/core/registry/schema-catalog.ts +0 -156
  177. package/src/lib/core/services/api.service.spec.ts +0 -1142
  178. package/src/lib/core/services/api.service.ts +0 -371
  179. package/src/lib/core/services/auth.service.spec.ts +0 -653
  180. package/src/lib/core/services/auth.service.ts +0 -503
  181. package/src/lib/core/services/config.service.spec.ts +0 -121
  182. package/src/lib/core/services/config.service.ts +0 -119
  183. package/src/lib/core/services/data-source.service.spec.ts +0 -179
  184. package/src/lib/core/services/data-source.service.ts +0 -142
  185. package/src/lib/core/services/error-mapper.service.spec.ts +0 -50
  186. package/src/lib/core/services/error-mapper.service.ts +0 -49
  187. package/src/lib/core/services/notification.service.ts +0 -73
  188. package/src/lib/core/services/relation-drawer.service.ts +0 -41
  189. package/src/lib/core/services/theme.service.spec.ts +0 -106
  190. package/src/lib/core/services/theme.service.ts +0 -86
  191. package/src/lib/core/services/transport.spec.ts +0 -198
  192. package/src/lib/core/services/transport.ts +0 -164
  193. package/src/lib/core/services/upload.service.ts +0 -81
  194. package/src/lib/core/testing/categories.schema.ts +0 -125
  195. package/src/lib/core/testing/orders.schema.ts +0 -372
  196. package/src/lib/core/testing/products.schema.ts +0 -258
  197. package/src/lib/core/testing/site.schema.ts +0 -195
  198. package/src/lib/core/testing/test-catalog.ts +0 -21
  199. package/src/lib/core/tokens.ts +0 -112
  200. package/src/lib/core/utils/clipboard.spec.ts +0 -55
  201. package/src/lib/core/utils/clipboard.ts +0 -90
  202. package/src/lib/core/utils/context-resolver.spec.ts +0 -95
  203. package/src/lib/core/utils/context-resolver.ts +0 -101
  204. package/src/lib/core/utils/response-unwrapper.spec.ts +0 -70
  205. package/src/lib/core/utils/response-unwrapper.ts +0 -103
  206. package/src/lib/core/utils/source-options.spec.ts +0 -96
  207. package/src/lib/core/utils/source-options.ts +0 -54
  208. package/src/lib/core/utils/template-interpolator.spec.ts +0 -59
  209. package/src/lib/core/utils/template-interpolator.ts +0 -56
  210. package/src/lib/core/view-navigation/view-navigation.service.spec.ts +0 -207
  211. package/src/lib/core/view-navigation/view-navigation.service.ts +0 -132
  212. package/src/lib/fields/boolean/boolean.descriptor.ts +0 -11
  213. package/src/lib/fields/boolean/boolean.ts +0 -40
  214. package/src/lib/fields/color/color.descriptor.ts +0 -12
  215. package/src/lib/fields/color/color.ts +0 -34
  216. package/src/lib/fields/currency/currency.descriptor.ts +0 -12
  217. package/src/lib/fields/currency/currency.ts +0 -67
  218. package/src/lib/fields/date/date.descriptor.ts +0 -12
  219. package/src/lib/fields/date/date.ts +0 -36
  220. package/src/lib/fields/descriptors.ts +0 -122
  221. package/src/lib/fields/display/display-badge.ts +0 -65
  222. package/src/lib/fields/display/display-date.ts +0 -39
  223. package/src/lib/fields/display/display-defaults.ts +0 -84
  224. package/src/lib/fields/display/display-file.ts +0 -41
  225. package/src/lib/fields/display/display-image.ts +0 -54
  226. package/src/lib/fields/display/display-list.ts +0 -107
  227. package/src/lib/fields/display/display-number.ts +0 -41
  228. package/src/lib/fields/display/display-text.ts +0 -42
  229. package/src/lib/fields/display/display.spec.ts +0 -242
  230. package/src/lib/fields/dropdown/dropdown.descriptor.ts +0 -12
  231. package/src/lib/fields/dropdown/dropdown.ts +0 -45
  232. package/src/lib/fields/email/email.descriptor.ts +0 -12
  233. package/src/lib/fields/email/email.ts +0 -28
  234. package/src/lib/fields/field-aria.ts +0 -60
  235. package/src/lib/fields/field-host/field-host.spec.ts +0 -118
  236. package/src/lib/fields/field-host/field-host.ts +0 -47
  237. package/src/lib/fields/field-node.ts +0 -88
  238. package/src/lib/fields/file/file.descriptor.ts +0 -14
  239. package/src/lib/fields/file/file.spec.ts +0 -134
  240. package/src/lib/fields/file/file.ts +0 -281
  241. package/src/lib/fields/group/group.descriptor.ts +0 -21
  242. package/src/lib/fields/group/group.ts +0 -110
  243. package/src/lib/fields/image/image.descriptor.ts +0 -12
  244. package/src/lib/fields/image/image.spec.ts +0 -117
  245. package/src/lib/fields/image/image.ts +0 -281
  246. package/src/lib/fields/key-value/key-value.descriptor.ts +0 -11
  247. package/src/lib/fields/key-value/key-value.ts +0 -283
  248. package/src/lib/fields/list/list.descriptor.ts +0 -21
  249. package/src/lib/fields/list/list.ts +0 -376
  250. package/src/lib/fields/multiselect/multiselect.descriptor.ts +0 -11
  251. package/src/lib/fields/multiselect/multiselect.spec.ts +0 -142
  252. package/src/lib/fields/multiselect/multiselect.ts +0 -152
  253. package/src/lib/fields/number/number.descriptor.ts +0 -12
  254. package/src/lib/fields/number/number.ts +0 -40
  255. package/src/lib/fields/phone/phone.descriptor.ts +0 -12
  256. package/src/lib/fields/phone/phone.ts +0 -46
  257. package/src/lib/fields/readonly-text/readonly-text.descriptor.ts +0 -12
  258. package/src/lib/fields/readonly-text/readonly-text.ts +0 -58
  259. package/src/lib/fields/relation/relation.descriptor.ts +0 -12
  260. package/src/lib/fields/relation/relation.spec.ts +0 -193
  261. package/src/lib/fields/relation/relation.ts +0 -224
  262. package/src/lib/fields/rich-select/rich-select.descriptor.ts +0 -12
  263. package/src/lib/fields/rich-select/rich-select.ts +0 -175
  264. package/src/lib/fields/select/radio-mode.ts +0 -25
  265. package/src/lib/fields/select/select.descriptor.ts +0 -12
  266. package/src/lib/fields/select/select.spec.ts +0 -162
  267. package/src/lib/fields/select/select.ts +0 -210
  268. package/src/lib/fields/slug/slug.descriptor.ts +0 -19
  269. package/src/lib/fields/slug/slug.ts +0 -67
  270. package/src/lib/fields/string-list/string-list.descriptor.ts +0 -11
  271. package/src/lib/fields/string-list/string-list.ts +0 -222
  272. package/src/lib/fields/text/text.descriptor.ts +0 -12
  273. package/src/lib/fields/text/text.ts +0 -35
  274. package/src/lib/fields/textarea/textarea.descriptor.ts +0 -12
  275. package/src/lib/fields/textarea/textarea.spec.ts +0 -117
  276. package/src/lib/fields/textarea/textarea.ts +0 -126
  277. package/src/lib/fields/time/time.descriptor.ts +0 -12
  278. package/src/lib/fields/time/time.ts +0 -28
  279. package/src/lib/fields/unknown-render/unknown-render.ts +0 -49
  280. package/src/lib/fields/url/url.descriptor.ts +0 -12
  281. package/src/lib/fields/url/url.ts +0 -53
  282. package/src/lib/gas-admin-ui.spec.ts +0 -21
  283. package/src/lib/gas-admin-ui.ts +0 -9
  284. package/src/lib/layouts/descriptors.ts +0 -9
  285. package/src/lib/pages/dashboard/dashboard.ts +0 -167
  286. package/src/lib/pages/detail-view/detail-view.spec.ts +0 -333
  287. package/src/lib/pages/detail-view/detail-view.ts +0 -570
  288. package/src/lib/pages/drawer-form/drawer-form.ts +0 -228
  289. package/src/lib/pages/form-view/form-model.ts +0 -88
  290. package/src/lib/pages/form-view/form-schema.ts +0 -255
  291. package/src/lib/pages/form-view/form-view.ts +0 -1622
  292. package/src/lib/pages/list-view/list-view.formats.spec.ts +0 -214
  293. package/src/lib/pages/list-view/list-view.ts +0 -882
  294. package/src/lib/pages/login/login.spec.ts +0 -109
  295. package/src/lib/pages/login/login.ts +0 -227
  296. package/src/lib/pages/resource-page/resource-page.ts +0 -234
  297. package/src/lib/shared/components/badge/badge.ts +0 -35
  298. package/src/lib/shared/components/button/button.ts +0 -65
  299. package/src/lib/shared/components/confirm-dialog/confirm-dialog.ts +0 -48
  300. package/src/lib/shared/components/copy-button/copy-button.ts +0 -56
  301. package/src/lib/shared/components/copy-share/copy-share.spec.ts +0 -122
  302. package/src/lib/shared/components/copy-share/copy-share.ts +0 -107
  303. package/src/lib/shared/components/drawer/drawer.spec.ts +0 -127
  304. package/src/lib/shared/components/drawer/drawer.ts +0 -172
  305. package/src/lib/shared/components/empty-state/empty-state.ts +0 -30
  306. package/src/lib/shared/components/modal/modal.spec.ts +0 -149
  307. package/src/lib/shared/components/modal/modal.ts +0 -145
  308. package/src/lib/shared/components/post-create-modal/post-create-modal.spec.ts +0 -165
  309. package/src/lib/shared/components/post-create-modal/post-create-modal.ts +0 -159
  310. package/src/lib/shared/components/skeleton/skeleton.ts +0 -31
  311. package/src/lib/shared/components/toast/toast.ts +0 -58
  312. package/src/lib/shared/utils/col-span.ts +0 -25
  313. package/src/lib/shared/utils/condition-evaluator.ts +0 -53
  314. package/src/lib/shared/utils/depends-on.ts +0 -48
  315. package/src/lib/shared/utils/dialog-focus.ts +0 -28
  316. package/src/lib/shared/utils/field-path.ts +0 -49
  317. package/src/lib/shared/utils/gap-sorting.ts +0 -144
  318. package/src/lib/shared/utils/seed.spec.ts +0 -64
  319. package/src/lib/shared/utils/seed.ts +0 -149
  320. package/src/lib/shared/utils/slugify.ts +0 -13
  321. package/src/lib/shared/utils/validators.ts +0 -41
  322. package/src/lib/shell/layout/layout.ts +0 -63
  323. package/src/lib/shell/shell.routes.spec.ts +0 -59
  324. package/src/lib/shell/shell.routes.ts +0 -122
  325. package/src/lib/shell/sidebar/sidebar.ts +0 -139
  326. package/src/lib/shell/theme-toggle/theme-toggle.ts +0 -74
  327. package/src/lib/views/calendar-view/calendar-model.ts +0 -426
  328. package/src/lib/views/calendar-view/calendar-view.spec.ts +0 -557
  329. package/src/lib/views/calendar-view/calendar-view.ts +0 -568
  330. package/src/lib/views/composer/composer-host.spec.ts +0 -301
  331. package/src/lib/views/composer/composer-host.ts +0 -248
  332. package/src/lib/views/composer/composer-imports.spec.ts +0 -54
  333. package/src/lib/views/composer/view-context.spec.ts +0 -117
  334. package/src/lib/views/composer/view-context.ts +0 -109
  335. package/src/lib/views/composer/view-slot.spec.ts +0 -130
  336. package/src/lib/views/composer/view-slot.ts +0 -178
  337. package/src/lib/views/descriptors.ts +0 -46
  338. package/src/lib/views/kanban-view/kanban-model.ts +0 -173
  339. package/src/lib/views/kanban-view/kanban-view.spec.ts +0 -540
  340. package/src/lib/views/kanban-view/kanban-view.ts +0 -327
  341. package/src/lib/widgets/bar-chart/bar-chart.descriptor.ts +0 -17
  342. package/src/lib/widgets/bar-chart/bar-chart.spec.ts +0 -66
  343. package/src/lib/widgets/bar-chart/bar-chart.ts +0 -76
  344. package/src/lib/widgets/chart-line/chart-line.descriptor.ts +0 -17
  345. package/src/lib/widgets/chart-line/chart-line.spec.ts +0 -113
  346. package/src/lib/widgets/chart-line/chart-line.ts +0 -219
  347. package/src/lib/widgets/descriptors.ts +0 -29
  348. package/src/lib/widgets/metric-card/metric-card.descriptor.ts +0 -41
  349. package/src/lib/widgets/metric-card/metric-card.spec.ts +0 -52
  350. package/src/lib/widgets/metric-card/metric-card.ts +0 -48
  351. package/src/lib/widgets/quick-actions/quick-actions.descriptor.ts +0 -13
  352. package/src/lib/widgets/quick-actions/quick-actions.spec.ts +0 -61
  353. package/src/lib/widgets/quick-actions/quick-actions.ts +0 -100
  354. package/src/lib/widgets/record-list/record-list.descriptor.ts +0 -16
  355. package/src/lib/widgets/record-list/record-list.spec.ts +0 -79
  356. package/src/lib/widgets/record-list/record-list.ts +0 -115
  357. package/src/lib/widgets/series.spec.ts +0 -42
  358. package/src/lib/widgets/series.ts +0 -56
  359. package/src/lib/widgets/status-progress/status-progress.descriptor.ts +0 -19
  360. package/src/lib/widgets/status-progress/status-progress.spec.ts +0 -63
  361. package/src/lib/widgets/status-progress/status-progress.ts +0 -104
  362. package/src/lib/widgets/widget-host/widget-host.spec.ts +0 -179
  363. package/src/lib/widgets/widget-host/widget-host.ts +0 -99
  364. package/src/public-api.ts +0 -104
  365. package/tinya-code-gas-admin-ui-0.2.0-alpha.15.tgz +0 -0
  366. package/tsconfig.lib.json +0 -13
  367. package/tsconfig.lib.prod.json +0 -11
  368. package/tsconfig.spec.json +0 -10
@@ -0,0 +1,432 @@
1
+ import { t as Button } from "./tinya-code-gas-admin-ui-button-BQjNW8KB.mjs";
2
+ import { t as NotificationService } from "./tinya-code-gas-admin-ui-notification.service-LjSULER6.mjs";
3
+ import { n as FieldAria } from "./tinya-code-gas-admin-ui-field-aria-BD1Wiggc.mjs";
4
+ import { a as stringItemTree, t as childTree } from "./tinya-code-gas-admin-ui-field-node-CIK6KNN_.mjs";
5
+ import * as i0 from "@angular/core";
6
+ import { Component, computed, inject, input } from "@angular/core";
7
+ import { LucideArrowDown, LucideArrowUp, LucideGripVertical, LucideTrash2 } from "@lucide/angular";
8
+ import { FormField } from "@angular/forms/signals";
9
+ import { CdkDrag, CdkDragHandle, CdkDropList, moveItemInArray } from "@angular/cdk/drag-drop";
10
+ var FieldStringList = class FieldStringList {
11
+ field = input.required(...ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []);
12
+ tree = input.required(...ngDevMode ? [{ debugName: "tree" }] : /* istanbul ignore next */ []);
13
+ notifications = inject(NotificationService);
14
+ itemsNode = computed(() => childTree(this.tree(), this.field().key), ...ngDevMode ? [{ debugName: "itemsNode" }] : /* istanbul ignore next */ []);
15
+ state = computed(() => this.itemsNode()(), ...ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []);
16
+ idPrefix = computed(() => this.state().name(), ...ngDevMode ? [{ debugName: "idPrefix" }] : /* istanbul ignore next */ []);
17
+ items = computed(() => this.state().value() ?? [], ...ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []);
18
+ sortable = computed(() => this.field().sortable ?? true, ...ngDevMode ? [{ debugName: "sortable" }] : /* istanbul ignore next */ []);
19
+ inputType = computed(() => this.field().itemType ?? "text", ...ngDevMode ? [{ debugName: "inputType" }] : /* istanbul ignore next */ []);
20
+ itemNode(index) {
21
+ return stringItemTree(this.itemsNode(), index);
22
+ }
23
+ canAdd() {
24
+ const max = this.field().max;
25
+ return max === void 0 || this.items().length < max;
26
+ }
27
+ canRemove() {
28
+ return this.items().length > (this.field().min ?? 0);
29
+ }
30
+ add() {
31
+ if (!this.canAdd()) return;
32
+ this.updateItems((next) => {
33
+ next.push("");
34
+ });
35
+ }
36
+ move(index, direction) {
37
+ const target = index + direction;
38
+ if (target < 0 || target >= this.items().length) return;
39
+ this.updateItems((next) => {
40
+ moveItemInArray(next, index, target);
41
+ });
42
+ }
43
+ onDrop(event) {
44
+ if (event.previousIndex === event.currentIndex) return;
45
+ this.updateItems((next) => {
46
+ moveItemInArray(next, event.previousIndex, event.currentIndex);
47
+ });
48
+ }
49
+ async remove(index) {
50
+ if (!this.canRemove()) return;
51
+ if ((this.items()[index] ?? "").trim() !== "") {
52
+ if (!await this.notifications.confirm({
53
+ title: `Eliminar elemento ${index + 1}`,
54
+ message: "Esta acción no se puede deshacer.",
55
+ confirmLabel: "Eliminar",
56
+ cancelLabel: "Cancelar"
57
+ })) return;
58
+ }
59
+ this.updateItems((next) => {
60
+ next.splice(index, 1);
61
+ });
62
+ }
63
+ updateItems(mutator) {
64
+ this.state().controlValue.update((current) => {
65
+ const next = [...current];
66
+ mutator(next);
67
+ return next;
68
+ });
69
+ }
70
+ placeholderFor() {
71
+ switch (this.field().itemType) {
72
+ case "url": return "https://…";
73
+ case "email": return "nombre@ejemplo.com";
74
+ default: return "Ej. Opción 1";
75
+ }
76
+ }
77
+ static ɵfac = i0.ɵɵngDeclareFactory({
78
+ minVersion: "12.0.0",
79
+ version: "22.2.3",
80
+ ngImport: i0,
81
+ type: FieldStringList,
82
+ deps: [],
83
+ target: i0.ɵɵFactoryTarget.Component
84
+ });
85
+ static ɵcmp = i0.ɵɵngDeclareComponent({
86
+ minVersion: "17.0.0",
87
+ version: "22.2.3",
88
+ type: FieldStringList,
89
+ isStandalone: true,
90
+ selector: "app-field-string-list",
91
+ inputs: {
92
+ field: {
93
+ classPropertyName: "field",
94
+ publicName: "field",
95
+ isSignal: true,
96
+ isRequired: true,
97
+ transformFunction: null
98
+ },
99
+ tree: {
100
+ classPropertyName: "tree",
101
+ publicName: "tree",
102
+ isSignal: true,
103
+ isRequired: true,
104
+ transformFunction: null
105
+ }
106
+ },
107
+ ngImport: i0,
108
+ template: `
109
+ @if (items().length === 0) {
110
+ <p
111
+ class="rounded-lg border border-dashed border-neutral/30 px-4 py-6 text-center text-sm text-neutral"
112
+ >
113
+ {{ field().emptyText ?? 'Sin elementos.' }}
114
+ </p>
115
+ } @else {
116
+ <div
117
+ cdkDropList
118
+ class="space-y-2"
119
+ [cdkDropListData]="items()"
120
+ [cdkDropListDisabled]="!sortable()"
121
+ (cdkDropListDropped)="onDrop($event)"
122
+ >
123
+ @for (item of items(); track $index; let i = $index) {
124
+ <div class="flex items-center gap-2" cdkDrag [cdkDragDisabled]="!sortable()">
125
+ @if (sortable()) {
126
+ <button
127
+ type="button"
128
+ app-button
129
+ variant="ghost"
130
+ size="icon"
131
+ class="cursor-grab"
132
+ cdkDragHandle
133
+ [attr.aria-label]="'Reordenar elemento ' + (i + 1)"
134
+ title="Arrastrar para reordenar"
135
+ >
136
+ <svg lucideGripVertical size="16" />
137
+ </button>
138
+ }
139
+ <input
140
+ class="field-input min-w-0 grow"
141
+ [type]="inputType()"
142
+ [placeholder]="field().placeholder ?? placeholderFor()"
143
+ [attr.aria-label]="field().label + ', elemento ' + (i + 1)"
144
+ [id]="idPrefix() + '-' + i"
145
+ [formField]="itemNode(i)"
146
+ />
147
+ <span class="flex shrink-0 items-center gap-2 lg:gap-1">
148
+ <button
149
+ type="button"
150
+ app-button
151
+ variant="ghost"
152
+ size="icon"
153
+ [disabled]="i === 0"
154
+ [attr.aria-label]="'Subir elemento ' + (i + 1)"
155
+ (click)="move(i, -1)"
156
+ >
157
+ <svg lucideArrowUp size="16" />
158
+ </button>
159
+ <button
160
+ type="button"
161
+ app-button
162
+ variant="ghost"
163
+ size="icon"
164
+ [disabled]="i === items().length - 1"
165
+ [attr.aria-label]="'Bajar elemento ' + (i + 1)"
166
+ (click)="move(i, 1)"
167
+ >
168
+ <svg lucideArrowDown size="16" />
169
+ </button>
170
+ <button
171
+ type="button"
172
+ app-button
173
+ variant="ghost"
174
+ size="icon"
175
+ [disabled]="!canRemove()"
176
+ [attr.aria-label]="'Eliminar elemento ' + (i + 1)"
177
+ (click)="remove(i)"
178
+ >
179
+ <svg lucideTrash2 size="16" />
180
+ </button>
181
+ </span>
182
+ </div>
183
+ }
184
+ </div>
185
+ }
186
+
187
+ <div class="mt-3">
188
+ <button app-button variant="outline" type="button" [disabled]="!canAdd()" (click)="add()">
189
+ + {{ field().addLabel ?? 'Agregar elemento' }}
190
+ </button>
191
+ </div>
192
+ `,
193
+ isInline: true,
194
+ dependencies: [
195
+ {
196
+ kind: "directive",
197
+ type: FieldAria,
198
+ selector: "input[id], select[id], textarea[id], output[id]"
199
+ },
200
+ {
201
+ kind: "component",
202
+ type: Button,
203
+ selector: "button[app-button]",
204
+ inputs: [
205
+ "variant",
206
+ "size",
207
+ "type",
208
+ "disabled",
209
+ "loading"
210
+ ]
211
+ },
212
+ {
213
+ kind: "directive",
214
+ type: CdkDrag,
215
+ selector: "[cdkDrag]",
216
+ inputs: [
217
+ "cdkDragData",
218
+ "cdkDragLockAxis",
219
+ "cdkDragRootElement",
220
+ "cdkDragBoundary",
221
+ "cdkDragStartDelay",
222
+ "cdkDragFreeDragPosition",
223
+ "cdkDragDisabled",
224
+ "cdkDragConstrainPosition",
225
+ "cdkDragPreviewClass",
226
+ "cdkDragPreviewContainer",
227
+ "cdkDragScale"
228
+ ],
229
+ outputs: [
230
+ "cdkDragStarted",
231
+ "cdkDragReleased",
232
+ "cdkDragEnded",
233
+ "cdkDragEntered",
234
+ "cdkDragExited",
235
+ "cdkDragDropped",
236
+ "cdkDragMoved"
237
+ ],
238
+ exportAs: ["cdkDrag"]
239
+ },
240
+ {
241
+ kind: "directive",
242
+ type: CdkDragHandle,
243
+ selector: "[cdkDragHandle]",
244
+ inputs: ["cdkDragHandleDisabled"]
245
+ },
246
+ {
247
+ kind: "directive",
248
+ type: CdkDropList,
249
+ selector: "[cdkDropList], cdk-drop-list",
250
+ inputs: [
251
+ "cdkDropListConnectedTo",
252
+ "cdkDropListData",
253
+ "cdkDropListOrientation",
254
+ "id",
255
+ "cdkDropListLockAxis",
256
+ "cdkDropListDisabled",
257
+ "cdkDropListSortingDisabled",
258
+ "cdkDropListEnterPredicate",
259
+ "cdkDropListSortPredicate",
260
+ "cdkDropListAutoScrollDisabled",
261
+ "cdkDropListAutoScrollStep",
262
+ "cdkDropListElementContainer",
263
+ "cdkDropListHasAnchor"
264
+ ],
265
+ outputs: [
266
+ "cdkDropListDropped",
267
+ "cdkDropListEntered",
268
+ "cdkDropListExited",
269
+ "cdkDropListSorted"
270
+ ],
271
+ exportAs: ["cdkDropList"]
272
+ },
273
+ {
274
+ kind: "directive",
275
+ type: FormField,
276
+ selector: "[formField]",
277
+ inputs: ["formField"],
278
+ exportAs: ["formField"]
279
+ },
280
+ {
281
+ kind: "component",
282
+ type: LucideArrowDown,
283
+ selector: "svg[lucideArrowDown]"
284
+ },
285
+ {
286
+ kind: "component",
287
+ type: LucideArrowUp,
288
+ selector: "svg[lucideArrowUp]"
289
+ },
290
+ {
291
+ kind: "component",
292
+ type: LucideGripVertical,
293
+ selector: "svg[lucideGripVertical]"
294
+ },
295
+ {
296
+ kind: "component",
297
+ type: LucideTrash2,
298
+ selector: "svg[lucideTrash], svg[lucideTrash2]"
299
+ }
300
+ ]
301
+ });
302
+ };
303
+ i0.ɵɵngDeclareClassMetadata({
304
+ minVersion: "12.0.0",
305
+ version: "22.2.3",
306
+ ngImport: i0,
307
+ type: FieldStringList,
308
+ decorators: [{
309
+ type: Component,
310
+ args: [{
311
+ selector: "app-field-string-list",
312
+ imports: [
313
+ FieldAria,
314
+ Button,
315
+ CdkDrag,
316
+ CdkDragHandle,
317
+ CdkDropList,
318
+ FormField,
319
+ LucideArrowDown,
320
+ LucideArrowUp,
321
+ LucideGripVertical,
322
+ LucideTrash2
323
+ ],
324
+ template: `
325
+ @if (items().length === 0) {
326
+ <p
327
+ class="rounded-lg border border-dashed border-neutral/30 px-4 py-6 text-center text-sm text-neutral"
328
+ >
329
+ {{ field().emptyText ?? 'Sin elementos.' }}
330
+ </p>
331
+ } @else {
332
+ <div
333
+ cdkDropList
334
+ class="space-y-2"
335
+ [cdkDropListData]="items()"
336
+ [cdkDropListDisabled]="!sortable()"
337
+ (cdkDropListDropped)="onDrop($event)"
338
+ >
339
+ @for (item of items(); track $index; let i = $index) {
340
+ <div class="flex items-center gap-2" cdkDrag [cdkDragDisabled]="!sortable()">
341
+ @if (sortable()) {
342
+ <button
343
+ type="button"
344
+ app-button
345
+ variant="ghost"
346
+ size="icon"
347
+ class="cursor-grab"
348
+ cdkDragHandle
349
+ [attr.aria-label]="'Reordenar elemento ' + (i + 1)"
350
+ title="Arrastrar para reordenar"
351
+ >
352
+ <svg lucideGripVertical size="16" />
353
+ </button>
354
+ }
355
+ <input
356
+ class="field-input min-w-0 grow"
357
+ [type]="inputType()"
358
+ [placeholder]="field().placeholder ?? placeholderFor()"
359
+ [attr.aria-label]="field().label + ', elemento ' + (i + 1)"
360
+ [id]="idPrefix() + '-' + i"
361
+ [formField]="itemNode(i)"
362
+ />
363
+ <span class="flex shrink-0 items-center gap-2 lg:gap-1">
364
+ <button
365
+ type="button"
366
+ app-button
367
+ variant="ghost"
368
+ size="icon"
369
+ [disabled]="i === 0"
370
+ [attr.aria-label]="'Subir elemento ' + (i + 1)"
371
+ (click)="move(i, -1)"
372
+ >
373
+ <svg lucideArrowUp size="16" />
374
+ </button>
375
+ <button
376
+ type="button"
377
+ app-button
378
+ variant="ghost"
379
+ size="icon"
380
+ [disabled]="i === items().length - 1"
381
+ [attr.aria-label]="'Bajar elemento ' + (i + 1)"
382
+ (click)="move(i, 1)"
383
+ >
384
+ <svg lucideArrowDown size="16" />
385
+ </button>
386
+ <button
387
+ type="button"
388
+ app-button
389
+ variant="ghost"
390
+ size="icon"
391
+ [disabled]="!canRemove()"
392
+ [attr.aria-label]="'Eliminar elemento ' + (i + 1)"
393
+ (click)="remove(i)"
394
+ >
395
+ <svg lucideTrash2 size="16" />
396
+ </button>
397
+ </span>
398
+ </div>
399
+ }
400
+ </div>
401
+ }
402
+
403
+ <div class="mt-3">
404
+ <button app-button variant="outline" type="button" [disabled]="!canAdd()" (click)="add()">
405
+ + {{ field().addLabel ?? 'Agregar elemento' }}
406
+ </button>
407
+ </div>
408
+ `
409
+ }]
410
+ }],
411
+ propDecorators: {
412
+ field: [{
413
+ type: i0.Input,
414
+ args: [{
415
+ isSignal: true,
416
+ alias: "field",
417
+ required: true
418
+ }]
419
+ }],
420
+ tree: [{
421
+ type: i0.Input,
422
+ args: [{
423
+ isSignal: true,
424
+ alias: "tree",
425
+ required: true
426
+ }]
427
+ }]
428
+ }
429
+ });
430
+ export { FieldStringList };
431
+
432
+ //# sourceMappingURL=tinya-code-gas-admin-ui-string-list-gleasqzD.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinya-code-gas-admin-ui-string-list-gleasqzD.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/fields/string-list/string-list.ts"],"sourcesContent":["import { Component, computed, inject, input } from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\nimport {\n CdkDrag,\n CdkDragDrop,\n CdkDragHandle,\n CdkDropList,\n moveItemInArray,\n} from '@angular/cdk/drag-drop';\n\nimport { LucideArrowDown, LucideArrowUp, LucideGripVertical, LucideTrash2 } from '@lucide/angular';\nimport type { StringListField } from '../../core/models/schema.model';\nimport { NotificationService } from '../../core/services/notification.service';\nimport { Button } from '../../shared/components/button/button';\nimport { FieldAria } from '../field-aria';\nimport { childTree, stringItemTree, type RootTree } from '../field-node';\n\n/**\n * Lista de cadenas (base.md §9: `text`, `url` o `email` por ítem).\n *\n * Hoja: renderiza sus propios `<input [formField]>` (el nodo de cada ítem es\n * `FieldTree<string>`) y no toca FieldHost. Los ítems escalares no pueden\n * llevar `position`: si el schema la declara, el orden viaja como orden del\n * arreglo y el backend renumera (api.md R3).\n */\n@Component({\n selector: 'app-field-string-list',\n imports: [\n FieldAria,\n Button,\n CdkDrag,\n CdkDragHandle,\n CdkDropList,\n FormField,\n LucideArrowDown,\n LucideArrowUp,\n LucideGripVertical,\n LucideTrash2,\n ],\n template: `\n @if (items().length === 0) {\n <p\n class=\"rounded-lg border border-dashed border-neutral/30 px-4 py-6 text-center text-sm text-neutral\"\n >\n {{ field().emptyText ?? 'Sin elementos.' }}\n </p>\n } @else {\n <div\n cdkDropList\n class=\"space-y-2\"\n [cdkDropListData]=\"items()\"\n [cdkDropListDisabled]=\"!sortable()\"\n (cdkDropListDropped)=\"onDrop($event)\"\n >\n @for (item of items(); track $index; let i = $index) {\n <div class=\"flex items-center gap-2\" cdkDrag [cdkDragDisabled]=\"!sortable()\">\n @if (sortable()) {\n <button\n type=\"button\"\n app-button\n variant=\"ghost\"\n size=\"icon\"\n class=\"cursor-grab\"\n cdkDragHandle\n [attr.aria-label]=\"'Reordenar elemento ' + (i + 1)\"\n title=\"Arrastrar para reordenar\"\n >\n <svg lucideGripVertical size=\"16\" />\n </button>\n }\n <input\n class=\"field-input min-w-0 grow\"\n [type]=\"inputType()\"\n [placeholder]=\"field().placeholder ?? placeholderFor()\"\n [attr.aria-label]=\"field().label + ', elemento ' + (i + 1)\"\n [id]=\"idPrefix() + '-' + i\"\n [formField]=\"itemNode(i)\"\n />\n <span class=\"flex shrink-0 items-center gap-2 lg:gap-1\">\n <button\n type=\"button\"\n app-button\n variant=\"ghost\"\n size=\"icon\"\n [disabled]=\"i === 0\"\n [attr.aria-label]=\"'Subir elemento ' + (i + 1)\"\n (click)=\"move(i, -1)\"\n >\n <svg lucideArrowUp size=\"16\" />\n </button>\n <button\n type=\"button\"\n app-button\n variant=\"ghost\"\n size=\"icon\"\n [disabled]=\"i === items().length - 1\"\n [attr.aria-label]=\"'Bajar elemento ' + (i + 1)\"\n (click)=\"move(i, 1)\"\n >\n <svg lucideArrowDown size=\"16\" />\n </button>\n <button\n type=\"button\"\n app-button\n variant=\"ghost\"\n size=\"icon\"\n [disabled]=\"!canRemove()\"\n [attr.aria-label]=\"'Eliminar elemento ' + (i + 1)\"\n (click)=\"remove(i)\"\n >\n <svg lucideTrash2 size=\"16\" />\n </button>\n </span>\n </div>\n }\n </div>\n }\n\n <div class=\"mt-3\">\n <button app-button variant=\"outline\" type=\"button\" [disabled]=\"!canAdd()\" (click)=\"add()\">\n + {{ field().addLabel ?? 'Agregar elemento' }}\n </button>\n </div>\n `,\n})\nexport class FieldStringList {\n readonly field = input.required<StringListField>();\n readonly tree = input.required<RootTree>();\n\n private readonly notifications = inject(NotificationService);\n\n private readonly itemsNode = computed(() => childTree<string[]>(this.tree(), this.field().key));\n private readonly state = computed(() => this.itemsNode()());\n /** Prefijo estable del campo para los id de cada ítem (§8). */\n protected readonly idPrefix = computed(() => this.state().name());\n protected readonly items = computed(() => this.state().value() ?? []);\n\n protected readonly sortable = computed(() => this.field().sortable ?? true);\n protected readonly inputType = computed(() => this.field().itemType ?? 'text');\n\n protected itemNode(index: number): ReturnType<typeof stringItemTree> {\n return stringItemTree(this.itemsNode(), index);\n }\n\n protected canAdd(): boolean {\n const max = this.field().max;\n return max === undefined || this.items().length < max;\n }\n\n protected canRemove(): boolean {\n return this.items().length > (this.field().min ?? 0);\n }\n\n protected add(): void {\n if (!this.canAdd()) {\n return;\n }\n this.updateItems((next) => {\n next.push('');\n });\n }\n\n protected move(index: number, direction: -1 | 1): void {\n const target = index + direction;\n if (target < 0 || target >= this.items().length) {\n return;\n }\n this.updateItems((next) => {\n moveItemInArray(next, index, target);\n });\n }\n\n protected onDrop(event: CdkDragDrop<string[]>): void {\n if (event.previousIndex === event.currentIndex) {\n return;\n }\n this.updateItems((next) => {\n moveItemInArray(next, event.previousIndex, event.currentIndex);\n });\n }\n\n protected async remove(index: number): Promise<void> {\n if (!this.canRemove()) {\n return;\n }\n const value = this.items()[index] ?? '';\n if (value.trim() !== '') {\n const accepted = await this.notifications.confirm({\n title: `Eliminar elemento ${index + 1}`,\n message: 'Esta acción no se puede deshacer.',\n confirmLabel: 'Eliminar',\n cancelLabel: 'Cancelar',\n });\n if (!accepted) {\n return;\n }\n }\n this.updateItems((next) => {\n next.splice(index, 1);\n });\n }\n\n private updateItems(mutator: (next: string[]) => void): void {\n this.state().controlValue.update((current) => {\n const next = [...current];\n mutator(next);\n return next;\n });\n }\n\n private placeholderFor(): string {\n switch (this.field().itemType) {\n case 'url':\n return 'https://…';\n case 'email':\n return 'nombre@ejemplo.com';\n default:\n // §2: placeholder siempre ejemplo, nunca instrucción.\n return 'Ej. Opción 1';\n }\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ function interpolateTemplate(template, data = {}, extraContext = {}) {
2
+ if (!template) return "";
3
+ return template.replace(/\{([a-zA-Z0-9_.]+)\}/g, (match, key) => {
4
+ const val = getDeepValue(data, key) ?? getDeepValue(extraContext, key);
5
+ if (val === null || val === void 0) return "";
6
+ return String(val);
7
+ });
8
+ }
9
+ function getDeepValue(obj, path) {
10
+ if (!obj || typeof obj !== "object") return void 0;
11
+ const parts = path.split(".");
12
+ let current = obj;
13
+ for (const part of parts) {
14
+ if (current === null || current === void 0 || typeof current !== "object") return;
15
+ current = current[part];
16
+ }
17
+ return current;
18
+ }
19
+ function parseNavigationUrl(url) {
20
+ if (!url) return {
21
+ path: "",
22
+ queryParams: {}
23
+ };
24
+ const [path, queryString] = url.split("?");
25
+ const queryParams = {};
26
+ if (queryString) new URLSearchParams(queryString).forEach((value, key) => {
27
+ queryParams[key] = value;
28
+ });
29
+ return {
30
+ path: path || "",
31
+ queryParams
32
+ };
33
+ }
34
+ export { parseNavigationUrl as n, interpolateTemplate as t };
35
+
36
+ //# sourceMappingURL=tinya-code-gas-admin-ui-template-interpolator-ewv7CkNX.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinya-code-gas-admin-ui-template-interpolator-ewv7CkNX.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/core/utils/template-interpolator.ts"],"sourcesContent":["/**\n * Resuelve una plantilla de texto reemplazando marcadores `{key}` o `{nested.key}`\n * con los valores presentes en el objeto `data` o en el contexto adicional `extraContext`.\n *\n * Si un valor es `null` o `undefined`, se reemplaza por una cadena vacía.\n * No arroja excepciones ante claves no encontradas ni ante objetos nulos.\n */\nexport function interpolateTemplate(\n template: string,\n data: Record<string, unknown> = {},\n extraContext: Record<string, unknown> = {},\n): string {\n if (!template) return '';\n\n return template.replace(/\\{([a-zA-Z0-9_.]+)\\}/g, (match, key: string) => {\n const val = getDeepValue(data, key) ?? getDeepValue(extraContext, key);\n if (val === null || val === undefined) {\n return '';\n }\n return String(val);\n });\n}\n\nfunction getDeepValue(obj: Record<string, unknown>, path: string): unknown {\n if (!obj || typeof obj !== 'object') return undefined;\n const parts = path.split('.');\n let current: unknown = obj;\n for (const part of parts) {\n if (current === null || current === undefined || typeof current !== 'object') {\n return undefined;\n }\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n}\n\nexport interface ParsedRoute {\n path: string;\n queryParams: Record<string, string>;\n}\n\n/**\n * Descompone una ruta relativa o absoluta en path y queryParams para routerLink.\n */\nexport function parseNavigationUrl(url: string): ParsedRoute {\n if (!url) return { path: '', queryParams: {} };\n const [path, queryString] = url.split('?');\n const queryParams: Record<string, string> = {};\n if (queryString) {\n const params = new URLSearchParams(queryString);\n params.forEach((value, key) => {\n queryParams[key] = value;\n });\n }\n return { path: path || '', queryParams };\n}\n"],"mappings":"AAOA,SAAgB,oBACd,UACA,OAAgC,CAAA,GAChC,eAAwC,CAAA,GAAE;CAE1C,IAAI,CAAC,UAAU,OAAO;CAEtB,OAAO,SAAS,QAAQ,0BAA0B,OAAO,QAAe;EACtE,MAAM,MAAM,aAAa,MAAM,GAAG,KAAK,aAAa,cAAc,GAAG;EACrE,IAAI,QAAQ,QAAQ,QAAQ,QAC1B,OAAO;EAET,OAAO,OAAO,GAAG;CACnB,CAAC;AACH;AAEA,SAAS,aAAa,KAA8B,MAAY;CAC9D,IAAI,CAAC,OAAO,OAAO,QAAQ,UAAU,OAAO;CAC5C,MAAM,QAAQ,KAAK,MAAM,GAAG;CAC5B,IAAI,UAAmB;CACvB,KAAK,MAAM,QAAQ,OAAO;EACxB,IAAI,YAAY,QAAQ,YAAY,UAAa,OAAO,YAAY,UAClE;EAEF,UAAW,QAAoC;CACjD;CACA,OAAO;AACT;AAUA,SAAgB,mBAAmB,KAAW;CAC5C,IAAI,CAAC,KAAK,OAAO;EAAE,MAAM;EAAI,aAAa,CAAA;CAAE;CAC5C,MAAM,CAAC,MAAM,eAAe,IAAI,MAAM,GAAG;CACzC,MAAM,cAAsC,CAAA;CAC5C,IAAI,aAEF,IADmB,gBAAgB,WACnC,CAAA,CAAO,SAAS,OAAO,QAAO;EAC5B,YAAY,OAAO;CACrB,CAAC;CAEH,OAAO;EAAE,MAAM,QAAQ;EAAI;CAAW;AACxC"}
@@ -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 FieldText = class FieldText {
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: FieldText,
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: FieldText,
23
+ isStandalone: true,
24
+ selector: "app-field-text",
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="text"
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: FieldText,
70
+ decorators: [{
71
+ type: Component,
72
+ args: [{
73
+ selector: "app-field-text",
74
+ imports: [FieldAria, FormField],
75
+ template: `
76
+ <input
77
+ type="text"
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 { FieldText };
106
+
107
+ //# sourceMappingURL=tinya-code-gas-admin-ui-text-CUPmL7W_.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinya-code-gas-admin-ui-text-CUPmL7W_.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/fields/text/text.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\n\nimport type { TextField } from '../../core/models/schema.model';\nimport { FieldAria } from '../field-aria';\nimport { childTree, type RootTree } from '../field-node';\n\n/**\n * Input de una línea (base.md §5.1 `text`).\n *\n * `readonly`, `maxLength` y `pattern` NO se bindean como atributos: el\n * directive `FormField` los gestiona desde el estado del campo y el compilador\n * lo exige (NG8022). La Fase 10 los traduce a reglas (`readonly()`,\n * `maxLength()`, `pattern()`) en el schema del formulario.\n */\n@Component({\n selector: 'app-field-text',\n imports: [FieldAria, FormField],\n template: `\n <input\n type=\"text\"\n class=\"field-input\"\n [id]=\"state().name()\"\n [formField]=\"node()\"\n [placeholder]=\"field().placeholder ?? ''\"\n />\n `,\n})\nexport class FieldText {\n readonly field = input.required<TextField>();\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":";;;;;AA4BA,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"}