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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. package/ng-package.json +7 -0
  2. package/package.json +3 -15
  3. package/src/lib/actions/action-registry.spec.ts +52 -0
  4. package/src/lib/actions/action-registry.ts +126 -0
  5. package/src/lib/actions/action-service.spec.ts +215 -0
  6. package/src/lib/actions/action-service.ts +87 -0
  7. package/src/lib/actions/descriptors.spec.ts +155 -0
  8. package/src/lib/actions/descriptors.ts +154 -0
  9. package/src/lib/columns/column-cell.ts +33 -0
  10. package/src/lib/columns/column-defaults.spec.ts +99 -0
  11. package/src/lib/columns/column-defaults.ts +84 -0
  12. package/src/lib/columns/column-format.spec.ts +274 -0
  13. package/src/lib/columns/descriptors.ts +113 -0
  14. package/src/lib/columns/format-badge.ts +51 -0
  15. package/src/lib/columns/format-boolean.ts +58 -0
  16. package/src/lib/columns/format-currency.ts +30 -0
  17. package/src/lib/columns/format-date.ts +35 -0
  18. package/src/lib/columns/format-number.ts +32 -0
  19. package/src/lib/columns/format-text.ts +23 -0
  20. package/src/lib/columns/format-thumbnail.ts +63 -0
  21. package/src/lib/core/adapters/firebase-auth.adapter.ts +6 -0
  22. package/src/lib/core/guards/auth.guard.spec.ts +88 -0
  23. package/src/lib/core/guards/auth.guard.ts +48 -0
  24. package/src/lib/core/guards/unsaved-changes.guard.ts +16 -0
  25. package/src/lib/core/interceptors/api-error.interceptor.spec.ts +182 -0
  26. package/src/lib/core/interceptors/api-error.interceptor.ts +87 -0
  27. package/src/lib/core/models/api.model.ts +104 -0
  28. package/src/lib/core/models/schema-descriptions.ts +118 -0
  29. package/src/lib/core/models/schema.model.ts +1097 -0
  30. package/src/lib/core/registry/composition-validator.spec.ts +358 -0
  31. package/src/lib/core/registry/composition-validator.ts +270 -0
  32. package/src/lib/core/registry/field-validators.spec.ts +199 -0
  33. package/src/lib/core/registry/field-validators.ts +440 -0
  34. package/src/lib/core/registry/render-host.spec.ts +208 -0
  35. package/src/lib/core/registry/render-host.ts +646 -0
  36. package/src/lib/core/registry/render-registry.spec.ts +96 -0
  37. package/src/lib/core/registry/render-registry.ts +312 -0
  38. package/src/lib/core/registry/schema-catalog.ts +156 -0
  39. package/src/lib/core/services/api.service.spec.ts +1142 -0
  40. package/src/lib/core/services/api.service.ts +371 -0
  41. package/src/lib/core/services/auth.service.spec.ts +653 -0
  42. package/src/lib/core/services/auth.service.ts +503 -0
  43. package/src/lib/core/services/config.service.spec.ts +121 -0
  44. package/src/lib/core/services/config.service.ts +119 -0
  45. package/src/lib/core/services/data-source.service.spec.ts +179 -0
  46. package/src/lib/core/services/data-source.service.ts +142 -0
  47. package/src/lib/core/services/error-mapper.service.spec.ts +50 -0
  48. package/src/lib/core/services/error-mapper.service.ts +49 -0
  49. package/src/lib/core/services/notification.service.ts +73 -0
  50. package/src/lib/core/services/relation-drawer.service.ts +41 -0
  51. package/src/lib/core/services/theme.service.spec.ts +106 -0
  52. package/src/lib/core/services/theme.service.ts +86 -0
  53. package/src/lib/core/services/transport.spec.ts +198 -0
  54. package/src/lib/core/services/transport.ts +164 -0
  55. package/src/lib/core/services/upload.service.ts +81 -0
  56. package/src/lib/core/testing/categories.schema.ts +125 -0
  57. package/src/lib/core/testing/orders.schema.ts +372 -0
  58. package/src/lib/core/testing/products.schema.ts +258 -0
  59. package/src/lib/core/testing/site.schema.ts +195 -0
  60. package/src/lib/core/testing/test-catalog.ts +21 -0
  61. package/src/lib/core/tokens.ts +112 -0
  62. package/src/lib/core/utils/clipboard.spec.ts +55 -0
  63. package/src/lib/core/utils/clipboard.ts +90 -0
  64. package/src/lib/core/utils/context-resolver.spec.ts +95 -0
  65. package/src/lib/core/utils/context-resolver.ts +101 -0
  66. package/src/lib/core/utils/response-unwrapper.spec.ts +70 -0
  67. package/src/lib/core/utils/response-unwrapper.ts +103 -0
  68. package/src/lib/core/utils/source-options.spec.ts +96 -0
  69. package/src/lib/core/utils/source-options.ts +54 -0
  70. package/src/lib/core/utils/template-interpolator.spec.ts +59 -0
  71. package/src/lib/core/utils/template-interpolator.ts +56 -0
  72. package/src/lib/core/view-navigation/view-navigation.service.spec.ts +207 -0
  73. package/src/lib/core/view-navigation/view-navigation.service.ts +132 -0
  74. package/src/lib/fields/boolean/boolean.descriptor.ts +11 -0
  75. package/src/lib/fields/boolean/boolean.ts +40 -0
  76. package/src/lib/fields/color/color.descriptor.ts +12 -0
  77. package/src/lib/fields/color/color.ts +34 -0
  78. package/src/lib/fields/currency/currency.descriptor.ts +12 -0
  79. package/src/lib/fields/currency/currency.ts +67 -0
  80. package/src/lib/fields/date/date.descriptor.ts +12 -0
  81. package/src/lib/fields/date/date.ts +36 -0
  82. package/src/lib/fields/descriptors.ts +122 -0
  83. package/src/lib/fields/display/display-badge.ts +65 -0
  84. package/src/lib/fields/display/display-date.ts +39 -0
  85. package/src/lib/fields/display/display-defaults.ts +84 -0
  86. package/src/lib/fields/display/display-file.ts +41 -0
  87. package/src/lib/fields/display/display-image.ts +54 -0
  88. package/src/lib/fields/display/display-list.ts +107 -0
  89. package/src/lib/fields/display/display-number.ts +41 -0
  90. package/src/lib/fields/display/display-text.ts +42 -0
  91. package/src/lib/fields/display/display.spec.ts +242 -0
  92. package/src/lib/fields/dropdown/dropdown.descriptor.ts +12 -0
  93. package/src/lib/fields/dropdown/dropdown.ts +45 -0
  94. package/src/lib/fields/email/email.descriptor.ts +12 -0
  95. package/src/lib/fields/email/email.ts +28 -0
  96. package/src/lib/fields/field-aria.ts +60 -0
  97. package/src/lib/fields/field-host/field-host.spec.ts +118 -0
  98. package/src/lib/fields/field-host/field-host.ts +47 -0
  99. package/src/lib/fields/field-node.ts +88 -0
  100. package/src/lib/fields/file/file.descriptor.ts +14 -0
  101. package/src/lib/fields/file/file.spec.ts +134 -0
  102. package/src/lib/fields/file/file.ts +281 -0
  103. package/src/lib/fields/group/group.descriptor.ts +21 -0
  104. package/src/lib/fields/group/group.ts +110 -0
  105. package/src/lib/fields/image/image.descriptor.ts +12 -0
  106. package/src/lib/fields/image/image.spec.ts +117 -0
  107. package/src/lib/fields/image/image.ts +281 -0
  108. package/src/lib/fields/key-value/key-value.descriptor.ts +11 -0
  109. package/src/lib/fields/key-value/key-value.ts +283 -0
  110. package/src/lib/fields/list/list.descriptor.ts +21 -0
  111. package/src/lib/fields/list/list.ts +376 -0
  112. package/src/lib/fields/multiselect/multiselect.descriptor.ts +11 -0
  113. package/src/lib/fields/multiselect/multiselect.spec.ts +142 -0
  114. package/src/lib/fields/multiselect/multiselect.ts +152 -0
  115. package/src/lib/fields/number/number.descriptor.ts +12 -0
  116. package/src/lib/fields/number/number.ts +40 -0
  117. package/src/lib/fields/phone/phone.descriptor.ts +12 -0
  118. package/src/lib/fields/phone/phone.ts +46 -0
  119. package/src/lib/fields/readonly-text/readonly-text.descriptor.ts +12 -0
  120. package/src/lib/fields/readonly-text/readonly-text.ts +58 -0
  121. package/src/lib/fields/relation/relation.descriptor.ts +12 -0
  122. package/src/lib/fields/relation/relation.spec.ts +193 -0
  123. package/src/lib/fields/relation/relation.ts +224 -0
  124. package/src/lib/fields/rich-select/rich-select.descriptor.ts +12 -0
  125. package/src/lib/fields/rich-select/rich-select.ts +175 -0
  126. package/src/lib/fields/select/radio-mode.ts +25 -0
  127. package/src/lib/fields/select/select.descriptor.ts +12 -0
  128. package/src/lib/fields/select/select.spec.ts +162 -0
  129. package/src/lib/fields/select/select.ts +210 -0
  130. package/src/lib/fields/slug/slug.descriptor.ts +19 -0
  131. package/src/lib/fields/slug/slug.ts +67 -0
  132. package/src/lib/fields/string-list/string-list.descriptor.ts +11 -0
  133. package/src/lib/fields/string-list/string-list.ts +222 -0
  134. package/src/lib/fields/text/text.descriptor.ts +12 -0
  135. package/src/lib/fields/text/text.ts +35 -0
  136. package/src/lib/fields/textarea/textarea.descriptor.ts +12 -0
  137. package/src/lib/fields/textarea/textarea.spec.ts +117 -0
  138. package/src/lib/fields/textarea/textarea.ts +126 -0
  139. package/src/lib/fields/time/time.descriptor.ts +12 -0
  140. package/src/lib/fields/time/time.ts +28 -0
  141. package/src/lib/fields/unknown-render/unknown-render.ts +49 -0
  142. package/src/lib/fields/url/url.descriptor.ts +12 -0
  143. package/src/lib/fields/url/url.ts +53 -0
  144. package/src/lib/gas-admin-ui.spec.ts +21 -0
  145. package/src/lib/gas-admin-ui.ts +9 -0
  146. package/src/lib/layouts/descriptors.ts +9 -0
  147. package/src/lib/pages/dashboard/dashboard.ts +167 -0
  148. package/src/lib/pages/detail-view/detail-view.spec.ts +333 -0
  149. package/src/lib/pages/detail-view/detail-view.ts +570 -0
  150. package/src/lib/pages/drawer-form/drawer-form.ts +228 -0
  151. package/src/lib/pages/form-view/form-model.ts +88 -0
  152. package/src/lib/pages/form-view/form-schema.ts +255 -0
  153. package/src/lib/pages/form-view/form-view.ts +1622 -0
  154. package/src/lib/pages/list-view/list-view.formats.spec.ts +214 -0
  155. package/src/lib/pages/list-view/list-view.ts +882 -0
  156. package/src/lib/pages/login/login.spec.ts +109 -0
  157. package/src/lib/pages/login/login.ts +227 -0
  158. package/src/lib/pages/resource-page/resource-page.ts +234 -0
  159. package/src/lib/shared/components/badge/badge.ts +35 -0
  160. package/src/lib/shared/components/button/button.ts +65 -0
  161. package/src/lib/shared/components/confirm-dialog/confirm-dialog.ts +48 -0
  162. package/src/lib/shared/components/copy-button/copy-button.ts +56 -0
  163. package/src/lib/shared/components/copy-share/copy-share.spec.ts +122 -0
  164. package/src/lib/shared/components/copy-share/copy-share.ts +107 -0
  165. package/src/lib/shared/components/drawer/drawer.spec.ts +127 -0
  166. package/src/lib/shared/components/drawer/drawer.ts +172 -0
  167. package/src/lib/shared/components/empty-state/empty-state.ts +30 -0
  168. package/src/lib/shared/components/modal/modal.spec.ts +149 -0
  169. package/src/lib/shared/components/modal/modal.ts +145 -0
  170. package/src/lib/shared/components/post-create-modal/post-create-modal.spec.ts +165 -0
  171. package/src/lib/shared/components/post-create-modal/post-create-modal.ts +159 -0
  172. package/src/lib/shared/components/skeleton/skeleton.ts +31 -0
  173. package/src/lib/shared/components/toast/toast.ts +58 -0
  174. package/src/lib/shared/utils/col-span.ts +25 -0
  175. package/src/lib/shared/utils/condition-evaluator.ts +53 -0
  176. package/src/lib/shared/utils/depends-on.ts +48 -0
  177. package/src/lib/shared/utils/dialog-focus.ts +28 -0
  178. package/src/lib/shared/utils/field-path.ts +49 -0
  179. package/src/lib/shared/utils/gap-sorting.ts +144 -0
  180. package/src/lib/shared/utils/seed.spec.ts +64 -0
  181. package/src/lib/shared/utils/seed.ts +149 -0
  182. package/src/lib/shared/utils/slugify.ts +13 -0
  183. package/src/lib/shared/utils/validators.ts +41 -0
  184. package/src/lib/shell/layout/layout.ts +63 -0
  185. package/src/lib/shell/shell.routes.spec.ts +59 -0
  186. package/src/lib/shell/shell.routes.ts +122 -0
  187. package/src/lib/shell/sidebar/sidebar.ts +139 -0
  188. package/src/lib/shell/theme-toggle/theme-toggle.ts +74 -0
  189. package/src/lib/views/calendar-view/calendar-model.ts +426 -0
  190. package/src/lib/views/calendar-view/calendar-view.spec.ts +557 -0
  191. package/src/lib/views/calendar-view/calendar-view.ts +568 -0
  192. package/src/lib/views/composer/composer-host.spec.ts +301 -0
  193. package/src/lib/views/composer/composer-host.ts +248 -0
  194. package/src/lib/views/composer/composer-imports.spec.ts +54 -0
  195. package/src/lib/views/composer/view-context.spec.ts +117 -0
  196. package/src/lib/views/composer/view-context.ts +109 -0
  197. package/src/lib/views/composer/view-slot.spec.ts +130 -0
  198. package/src/lib/views/composer/view-slot.ts +178 -0
  199. package/src/lib/views/descriptors.ts +46 -0
  200. package/src/lib/views/kanban-view/kanban-model.ts +173 -0
  201. package/src/lib/views/kanban-view/kanban-view.spec.ts +540 -0
  202. package/src/lib/views/kanban-view/kanban-view.ts +327 -0
  203. package/src/lib/widgets/bar-chart/bar-chart.descriptor.ts +17 -0
  204. package/src/lib/widgets/bar-chart/bar-chart.spec.ts +66 -0
  205. package/src/lib/widgets/bar-chart/bar-chart.ts +76 -0
  206. package/src/lib/widgets/chart-line/chart-line.descriptor.ts +17 -0
  207. package/src/lib/widgets/chart-line/chart-line.spec.ts +113 -0
  208. package/src/lib/widgets/chart-line/chart-line.ts +219 -0
  209. package/src/lib/widgets/descriptors.ts +29 -0
  210. package/src/lib/widgets/metric-card/metric-card.descriptor.ts +41 -0
  211. package/src/lib/widgets/metric-card/metric-card.spec.ts +52 -0
  212. package/src/lib/widgets/metric-card/metric-card.ts +48 -0
  213. package/src/lib/widgets/quick-actions/quick-actions.descriptor.ts +13 -0
  214. package/src/lib/widgets/quick-actions/quick-actions.spec.ts +61 -0
  215. package/src/lib/widgets/quick-actions/quick-actions.ts +100 -0
  216. package/src/lib/widgets/record-list/record-list.descriptor.ts +16 -0
  217. package/src/lib/widgets/record-list/record-list.spec.ts +79 -0
  218. package/src/lib/widgets/record-list/record-list.ts +115 -0
  219. package/src/lib/widgets/series.spec.ts +42 -0
  220. package/src/lib/widgets/series.ts +56 -0
  221. package/src/lib/widgets/status-progress/status-progress.descriptor.ts +19 -0
  222. package/src/lib/widgets/status-progress/status-progress.spec.ts +63 -0
  223. package/src/lib/widgets/status-progress/status-progress.ts +104 -0
  224. package/src/lib/widgets/widget-host/widget-host.spec.ts +179 -0
  225. package/src/lib/widgets/widget-host/widget-host.ts +99 -0
  226. package/src/public-api.ts +104 -0
  227. package/tinya-code-gas-admin-ui-0.2.0-alpha.15.tgz +0 -0
  228. package/tsconfig.lib.json +13 -0
  229. package/tsconfig.lib.prod.json +11 -0
  230. package/tsconfig.spec.json +10 -0
  231. package/fesm2022/tinya-code-gas-admin-ui-badge-EeCA_l-o.mjs +0 -84
  232. package/fesm2022/tinya-code-gas-admin-ui-badge-EeCA_l-o.mjs.map +0 -1
  233. package/fesm2022/tinya-code-gas-admin-ui-bar-chart-G7sEMSBY.mjs +0 -140
  234. package/fesm2022/tinya-code-gas-admin-ui-bar-chart-G7sEMSBY.mjs.map +0 -1
  235. package/fesm2022/tinya-code-gas-admin-ui-boolean-B2ASKL0E.mjs +0 -113
  236. package/fesm2022/tinya-code-gas-admin-ui-boolean-B2ASKL0E.mjs.map +0 -1
  237. package/fesm2022/tinya-code-gas-admin-ui-button-BQjNW8KB.mjs +0 -163
  238. package/fesm2022/tinya-code-gas-admin-ui-button-BQjNW8KB.mjs.map +0 -1
  239. package/fesm2022/tinya-code-gas-admin-ui-calendar-view-DCY8bj2V.mjs +0 -1027
  240. package/fesm2022/tinya-code-gas-admin-ui-calendar-view-DCY8bj2V.mjs.map +0 -1
  241. package/fesm2022/tinya-code-gas-admin-ui-chart-line-BjdlKHoH.mjs +0 -278
  242. package/fesm2022/tinya-code-gas-admin-ui-chart-line-BjdlKHoH.mjs.map +0 -1
  243. package/fesm2022/tinya-code-gas-admin-ui-color-Dljh_By3.mjs +0 -107
  244. package/fesm2022/tinya-code-gas-admin-ui-color-Dljh_By3.mjs.map +0 -1
  245. package/fesm2022/tinya-code-gas-admin-ui-condition-evaluator-DY2k1M3C.mjs +0 -101
  246. package/fesm2022/tinya-code-gas-admin-ui-condition-evaluator-DY2k1M3C.mjs.map +0 -1
  247. package/fesm2022/tinya-code-gas-admin-ui-currency-BvuF3Z63.mjs +0 -141
  248. package/fesm2022/tinya-code-gas-admin-ui-currency-BvuF3Z63.mjs.map +0 -1
  249. package/fesm2022/tinya-code-gas-admin-ui-data-source.service-96FSbN72.mjs +0 -88
  250. package/fesm2022/tinya-code-gas-admin-ui-data-source.service-96FSbN72.mjs.map +0 -1
  251. package/fesm2022/tinya-code-gas-admin-ui-date-1SJGXZrd.mjs +0 -107
  252. package/fesm2022/tinya-code-gas-admin-ui-date-1SJGXZrd.mjs.map +0 -1
  253. package/fesm2022/tinya-code-gas-admin-ui-display-badge-fwk6sDU7.mjs +0 -140
  254. package/fesm2022/tinya-code-gas-admin-ui-display-badge-fwk6sDU7.mjs.map +0 -1
  255. package/fesm2022/tinya-code-gas-admin-ui-display-date-D7zLiDiG.mjs +0 -119
  256. package/fesm2022/tinya-code-gas-admin-ui-display-date-D7zLiDiG.mjs.map +0 -1
  257. package/fesm2022/tinya-code-gas-admin-ui-display-file-BiIhqvQC.mjs +0 -125
  258. package/fesm2022/tinya-code-gas-admin-ui-display-file-BiIhqvQC.mjs.map +0 -1
  259. package/fesm2022/tinya-code-gas-admin-ui-display-image-C1dhnZi1.mjs +0 -152
  260. package/fesm2022/tinya-code-gas-admin-ui-display-image-C1dhnZi1.mjs.map +0 -1
  261. package/fesm2022/tinya-code-gas-admin-ui-display-list-DOEuUbGe.mjs +0 -211
  262. package/fesm2022/tinya-code-gas-admin-ui-display-list-DOEuUbGe.mjs.map +0 -1
  263. package/fesm2022/tinya-code-gas-admin-ui-display-number-DDMzr4Hn.mjs +0 -116
  264. package/fesm2022/tinya-code-gas-admin-ui-display-number-DDMzr4Hn.mjs.map +0 -1
  265. package/fesm2022/tinya-code-gas-admin-ui-display-text-B8CdVNpv.mjs +0 -111
  266. package/fesm2022/tinya-code-gas-admin-ui-display-text-B8CdVNpv.mjs.map +0 -1
  267. package/fesm2022/tinya-code-gas-admin-ui-dropdown-C3blvmE1.mjs +0 -122
  268. package/fesm2022/tinya-code-gas-admin-ui-dropdown-C3blvmE1.mjs.map +0 -1
  269. package/fesm2022/tinya-code-gas-admin-ui-email-CT_O5ihA.mjs +0 -107
  270. package/fesm2022/tinya-code-gas-admin-ui-email-CT_O5ihA.mjs.map +0 -1
  271. package/fesm2022/tinya-code-gas-admin-ui-empty-state-BMc0QtoT.mjs +0 -109
  272. package/fesm2022/tinya-code-gas-admin-ui-empty-state-BMc0QtoT.mjs.map +0 -1
  273. package/fesm2022/tinya-code-gas-admin-ui-error-mapper.service-DY5y1FjE.mjs +0 -45
  274. package/fesm2022/tinya-code-gas-admin-ui-error-mapper.service-DY5y1FjE.mjs.map +0 -1
  275. package/fesm2022/tinya-code-gas-admin-ui-field-aria-BD1Wiggc.mjs +0 -50
  276. package/fesm2022/tinya-code-gas-admin-ui-field-aria-BD1Wiggc.mjs.map +0 -1
  277. package/fesm2022/tinya-code-gas-admin-ui-field-node-CIK6KNN_.mjs +0 -24
  278. package/fesm2022/tinya-code-gas-admin-ui-field-node-CIK6KNN_.mjs.map +0 -1
  279. package/fesm2022/tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs +0 -27
  280. package/fesm2022/tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs.map +0 -1
  281. package/fesm2022/tinya-code-gas-admin-ui-file-Dmxioog7.mjs +0 -408
  282. package/fesm2022/tinya-code-gas-admin-ui-file-Dmxioog7.mjs.map +0 -1
  283. package/fesm2022/tinya-code-gas-admin-ui-form-view-C709rc57.mjs +0 -4516
  284. package/fesm2022/tinya-code-gas-admin-ui-form-view-C709rc57.mjs.map +0 -1
  285. package/fesm2022/tinya-code-gas-admin-ui-format-badge-CK8ct5Wk.mjs +0 -82
  286. package/fesm2022/tinya-code-gas-admin-ui-format-badge-CK8ct5Wk.mjs.map +0 -1
  287. package/fesm2022/tinya-code-gas-admin-ui-format-boolean-ClzezZz-.mjs +0 -105
  288. package/fesm2022/tinya-code-gas-admin-ui-format-boolean-ClzezZz-.mjs.map +0 -1
  289. package/fesm2022/tinya-code-gas-admin-ui-format-currency-CVmniKml.mjs +0 -65
  290. package/fesm2022/tinya-code-gas-admin-ui-format-currency-CVmniKml.mjs.map +0 -1
  291. package/fesm2022/tinya-code-gas-admin-ui-format-date-Dr1YsDd_.mjs +0 -65
  292. package/fesm2022/tinya-code-gas-admin-ui-format-date-Dr1YsDd_.mjs.map +0 -1
  293. package/fesm2022/tinya-code-gas-admin-ui-format-number-CWCjpI4n.mjs +0 -65
  294. package/fesm2022/tinya-code-gas-admin-ui-format-number-CWCjpI4n.mjs.map +0 -1
  295. package/fesm2022/tinya-code-gas-admin-ui-format-text-DBOgJkH0.mjs +0 -59
  296. package/fesm2022/tinya-code-gas-admin-ui-format-text-DBOgJkH0.mjs.map +0 -1
  297. package/fesm2022/tinya-code-gas-admin-ui-format-thumbnail-PCRvxWKt.mjs +0 -94
  298. package/fesm2022/tinya-code-gas-admin-ui-format-thumbnail-PCRvxWKt.mjs.map +0 -1
  299. package/fesm2022/tinya-code-gas-admin-ui-gap-sorting-iTdy_DYG.mjs +0 -72
  300. package/fesm2022/tinya-code-gas-admin-ui-gap-sorting-iTdy_DYG.mjs.map +0 -1
  301. package/fesm2022/tinya-code-gas-admin-ui-group-h7-O8tt4.mjs +0 -238
  302. package/fesm2022/tinya-code-gas-admin-ui-group-h7-O8tt4.mjs.map +0 -1
  303. package/fesm2022/tinya-code-gas-admin-ui-image-7UhJ7nqI.mjs +0 -416
  304. package/fesm2022/tinya-code-gas-admin-ui-image-7UhJ7nqI.mjs.map +0 -1
  305. package/fesm2022/tinya-code-gas-admin-ui-kanban-view-Dl0Ol5Kb.mjs +0 -439
  306. package/fesm2022/tinya-code-gas-admin-ui-kanban-view-Dl0Ol5Kb.mjs.map +0 -1
  307. package/fesm2022/tinya-code-gas-admin-ui-key-value-nVdgg5at.mjs +0 -513
  308. package/fesm2022/tinya-code-gas-admin-ui-key-value-nVdgg5at.mjs.map +0 -1
  309. package/fesm2022/tinya-code-gas-admin-ui-list-C8ijJHAx.mjs +0 -637
  310. package/fesm2022/tinya-code-gas-admin-ui-list-C8ijJHAx.mjs.map +0 -1
  311. package/fesm2022/tinya-code-gas-admin-ui-metric-card-DnGMQL8l.mjs +0 -127
  312. package/fesm2022/tinya-code-gas-admin-ui-metric-card-DnGMQL8l.mjs.map +0 -1
  313. package/fesm2022/tinya-code-gas-admin-ui-multiselect-PB28e-jl.mjs +0 -251
  314. package/fesm2022/tinya-code-gas-admin-ui-multiselect-PB28e-jl.mjs.map +0 -1
  315. package/fesm2022/tinya-code-gas-admin-ui-notification.service-LjSULER6.mjs +0 -66
  316. package/fesm2022/tinya-code-gas-admin-ui-notification.service-LjSULER6.mjs.map +0 -1
  317. package/fesm2022/tinya-code-gas-admin-ui-number-JNr7glc8.mjs +0 -114
  318. package/fesm2022/tinya-code-gas-admin-ui-number-JNr7glc8.mjs.map +0 -1
  319. package/fesm2022/tinya-code-gas-admin-ui-phone-jR417hPf.mjs +0 -116
  320. package/fesm2022/tinya-code-gas-admin-ui-phone-jR417hPf.mjs.map +0 -1
  321. package/fesm2022/tinya-code-gas-admin-ui-quick-actions-DCQ6emmF.mjs +0 -235
  322. package/fesm2022/tinya-code-gas-admin-ui-quick-actions-DCQ6emmF.mjs.map +0 -1
  323. package/fesm2022/tinya-code-gas-admin-ui-radio-mode-DxvN07DY.mjs +0 -8
  324. package/fesm2022/tinya-code-gas-admin-ui-radio-mode-DxvN07DY.mjs.map +0 -1
  325. package/fesm2022/tinya-code-gas-admin-ui-readonly-text-BL7-4qie.mjs +0 -124
  326. package/fesm2022/tinya-code-gas-admin-ui-readonly-text-BL7-4qie.mjs.map +0 -1
  327. package/fesm2022/tinya-code-gas-admin-ui-record-list-BiZfnd_7.mjs +0 -249
  328. package/fesm2022/tinya-code-gas-admin-ui-record-list-BiZfnd_7.mjs.map +0 -1
  329. package/fesm2022/tinya-code-gas-admin-ui-relation-drawer.service-B0kT8EiW.mjs +0 -39
  330. package/fesm2022/tinya-code-gas-admin-ui-relation-drawer.service-B0kT8EiW.mjs.map +0 -1
  331. package/fesm2022/tinya-code-gas-admin-ui-relation-ykpJ3PYl.mjs +0 -309
  332. package/fesm2022/tinya-code-gas-admin-ui-relation-ykpJ3PYl.mjs.map +0 -1
  333. package/fesm2022/tinya-code-gas-admin-ui-render-registry-CULkxrSt.mjs +0 -576
  334. package/fesm2022/tinya-code-gas-admin-ui-render-registry-CULkxrSt.mjs.map +0 -1
  335. package/fesm2022/tinya-code-gas-admin-ui-rich-select-CIHaOrbU.mjs +0 -161
  336. package/fesm2022/tinya-code-gas-admin-ui-rich-select-CIHaOrbU.mjs.map +0 -1
  337. package/fesm2022/tinya-code-gas-admin-ui-rolldown-runtime-DpJrqANO.mjs +0 -11
  338. package/fesm2022/tinya-code-gas-admin-ui-schema-catalog-D0Pk0wAN.mjs +0 -685
  339. package/fesm2022/tinya-code-gas-admin-ui-schema-catalog-D0Pk0wAN.mjs.map +0 -1
  340. package/fesm2022/tinya-code-gas-admin-ui-seed-CcCA3FdQ.mjs +0 -80
  341. package/fesm2022/tinya-code-gas-admin-ui-seed-CcCA3FdQ.mjs.map +0 -1
  342. package/fesm2022/tinya-code-gas-admin-ui-select-CDwX9yNO.mjs +0 -296
  343. package/fesm2022/tinya-code-gas-admin-ui-select-CDwX9yNO.mjs.map +0 -1
  344. package/fesm2022/tinya-code-gas-admin-ui-skeleton-DnWK0tcZ.mjs +0 -119
  345. package/fesm2022/tinya-code-gas-admin-ui-skeleton-DnWK0tcZ.mjs.map +0 -1
  346. package/fesm2022/tinya-code-gas-admin-ui-slug-DU58cbiY.mjs +0 -158
  347. package/fesm2022/tinya-code-gas-admin-ui-slug-DU58cbiY.mjs.map +0 -1
  348. package/fesm2022/tinya-code-gas-admin-ui-source-options-B9R4mw8-.mjs +0 -26
  349. package/fesm2022/tinya-code-gas-admin-ui-source-options-B9R4mw8-.mjs.map +0 -1
  350. package/fesm2022/tinya-code-gas-admin-ui-status-progress-DmeG8htE.mjs +0 -205
  351. package/fesm2022/tinya-code-gas-admin-ui-status-progress-DmeG8htE.mjs.map +0 -1
  352. package/fesm2022/tinya-code-gas-admin-ui-string-list-gleasqzD.mjs +0 -432
  353. package/fesm2022/tinya-code-gas-admin-ui-string-list-gleasqzD.mjs.map +0 -1
  354. package/fesm2022/tinya-code-gas-admin-ui-template-interpolator-ewv7CkNX.mjs +0 -36
  355. package/fesm2022/tinya-code-gas-admin-ui-template-interpolator-ewv7CkNX.mjs.map +0 -1
  356. package/fesm2022/tinya-code-gas-admin-ui-text-CUPmL7W_.mjs +0 -107
  357. package/fesm2022/tinya-code-gas-admin-ui-text-CUPmL7W_.mjs.map +0 -1
  358. package/fesm2022/tinya-code-gas-admin-ui-textarea-CGLSIW13.mjs +0 -223
  359. package/fesm2022/tinya-code-gas-admin-ui-textarea-CGLSIW13.mjs.map +0 -1
  360. package/fesm2022/tinya-code-gas-admin-ui-time-BcHzsTWf.mjs +0 -107
  361. package/fesm2022/tinya-code-gas-admin-ui-time-BcHzsTWf.mjs.map +0 -1
  362. package/fesm2022/tinya-code-gas-admin-ui-upload.service-CZPEPCeN.mjs +0 -60
  363. package/fesm2022/tinya-code-gas-admin-ui-upload.service-CZPEPCeN.mjs.map +0 -1
  364. package/fesm2022/tinya-code-gas-admin-ui-url-GO4LZi__.mjs +0 -141
  365. package/fesm2022/tinya-code-gas-admin-ui-url-GO4LZi__.mjs.map +0 -1
  366. package/fesm2022/tinya-code-gas-admin-ui.mjs +0 -4599
  367. package/fesm2022/tinya-code-gas-admin-ui.mjs.map +0 -1
  368. package/types/tinya-code-gas-admin-ui.d.ts +0 -3632
@@ -1,432 +0,0 @@
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
@@ -1 +0,0 @@
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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"}
@@ -1,36 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,107 +0,0 @@
1
- import { n as FieldAria } from "./tinya-code-gas-admin-ui-field-aria-BD1Wiggc.mjs";
2
- import { t as childTree } from "./tinya-code-gas-admin-ui-field-node-CIK6KNN_.mjs";
3
- import * as i0 from "@angular/core";
4
- import { Component, computed, input } from "@angular/core";
5
- import { FormField } from "@angular/forms/signals";
6
- var 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
@@ -1 +0,0 @@
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"}