@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,513 +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 { i as listTree, r as itemTree, t as childTree } from "./tinya-code-gas-admin-ui-field-node-CIK6KNN_.mjs";
5
- import { n as appendPosition, r as computeMove, t as GAP } from "./tinya-code-gas-admin-ui-gap-sorting-iTdy_DYG.mjs";
6
- import * as i0 from "@angular/core";
7
- import { Component, computed, inject, input } from "@angular/core";
8
- import { LucideArrowDown, LucideArrowUp, LucideGripVertical, LucideTrash2 } from "@lucide/angular";
9
- import { FormField } from "@angular/forms/signals";
10
- import { CdkDrag, CdkDragHandle, CdkDropList, moveItemInArray } from "@angular/cdk/drag-drop";
11
- var FieldKeyValue = class FieldKeyValue {
12
- field = input.required(...ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []);
13
- tree = input.required(...ngDevMode ? [{ debugName: "tree" }] : /* istanbul ignore next */ []);
14
- notifications = inject(NotificationService);
15
- itemsNode = computed(() => listTree(this.tree(), this.field().key), ...ngDevMode ? [{ debugName: "itemsNode" }] : /* istanbul ignore next */ []);
16
- state = computed(() => this.itemsNode()(), ...ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []);
17
- idPrefix = computed(() => this.state().name(), ...ngDevMode ? [{ debugName: "idPrefix" }] : /* istanbul ignore next */ []);
18
- items = computed(() => this.state().value() ?? [], ...ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []);
19
- sortable = computed(() => this.field().sortable ?? true, ...ngDevMode ? [{ debugName: "sortable" }] : /* istanbul ignore next */ []);
20
- fieldNode(index, column) {
21
- return childTree(itemTree(this.itemsNode(), index), column);
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
- const positionKey = this.field().positionField;
33
- const row = {
34
- key: "",
35
- value: ""
36
- };
37
- if (positionKey !== void 0) row[positionKey] = appendPosition(this.positioned());
38
- this.updateItems((next) => {
39
- next.push(row);
40
- });
41
- }
42
- move(index, direction) {
43
- const target = index + direction;
44
- if (target < 0 || target >= this.items().length) return;
45
- this.applyMove(index, target);
46
- }
47
- onDrop(event) {
48
- if (event.previousIndex === event.currentIndex) return;
49
- this.applyMove(event.previousIndex, event.currentIndex);
50
- }
51
- async remove(index) {
52
- if (!this.canRemove()) return;
53
- const row = this.items()[index];
54
- if (row !== void 0 && (row.key.trim() !== "" || row.value.trim() !== "")) {
55
- if (!await this.notifications.confirm({
56
- title: `Eliminar fila ${index + 1}`,
57
- message: "Esta acción no se puede deshacer.",
58
- confirmLabel: "Eliminar",
59
- cancelLabel: "Cancelar"
60
- })) return;
61
- }
62
- this.updateItems((next) => {
63
- next.splice(index, 1);
64
- });
65
- }
66
- applyMove(from, to) {
67
- const positionKey = this.field().positionField;
68
- this.updateItems((next) => {
69
- if (positionKey !== void 0) {
70
- const result = computeMove(this.positioned(), String(from), to);
71
- for (const change of result.changes) {
72
- const row = next[Number(change.key)];
73
- if (row !== void 0) row[positionKey] = change.position;
74
- }
75
- }
76
- moveItemInArray(next, from, to);
77
- });
78
- }
79
- positioned() {
80
- const positionKey = this.field().positionField;
81
- return this.items().map((item, index) => {
82
- const raw = positionKey !== void 0 ? item[positionKey] : void 0;
83
- return {
84
- key: String(index),
85
- position: typeof raw === "number" ? raw : (index + 1) * GAP
86
- };
87
- });
88
- }
89
- updateItems(mutator) {
90
- this.state().controlValue.update((current) => {
91
- const next = [...current];
92
- mutator(next);
93
- return next;
94
- });
95
- }
96
- static ɵfac = i0.ɵɵngDeclareFactory({
97
- minVersion: "12.0.0",
98
- version: "22.2.3",
99
- ngImport: i0,
100
- type: FieldKeyValue,
101
- deps: [],
102
- target: i0.ɵɵFactoryTarget.Component
103
- });
104
- static ɵcmp = i0.ɵɵngDeclareComponent({
105
- minVersion: "17.0.0",
106
- version: "22.2.3",
107
- type: FieldKeyValue,
108
- isStandalone: true,
109
- selector: "app-field-key-value",
110
- inputs: {
111
- field: {
112
- classPropertyName: "field",
113
- publicName: "field",
114
- isSignal: true,
115
- isRequired: true,
116
- transformFunction: null
117
- },
118
- tree: {
119
- classPropertyName: "tree",
120
- publicName: "tree",
121
- isSignal: true,
122
- isRequired: true,
123
- transformFunction: null
124
- }
125
- },
126
- ngImport: i0,
127
- template: `
128
- @if (items().length === 0) {
129
- <p
130
- class="rounded-lg border border-dashed border-neutral/30 px-4 py-6 text-center text-sm text-neutral"
131
- >
132
- {{ field().emptyText ?? 'Sin elementos.' }}
133
- </p>
134
- } @else {
135
- <div class="overflow-x-auto rounded-xl border border-neutral/20 bg-surface">
136
- <table class="w-full text-sm">
137
- <thead>
138
- <tr class="border-b border-neutral/20 text-left text-xs font-medium text-neutral">
139
- <th class="w-10 px-3 py-2" scope="col"><span class="sr-only">Orden</span></th>
140
- <th class="px-3 py-2" scope="col">Clave</th>
141
- <th class="px-3 py-2" scope="col">Valor</th>
142
- <th class="w-28 px-3 py-2" scope="col"><span class="sr-only">Acciones</span></th>
143
- </tr>
144
- </thead>
145
- <tbody
146
- cdkDropList
147
- [cdkDropListData]="items()"
148
- [cdkDropListDisabled]="!sortable()"
149
- (cdkDropListDropped)="onDrop($event)"
150
- >
151
- @for (item of items(); track $index; let i = $index) {
152
- <tr
153
- class="border-b border-neutral/10 last:border-b-0"
154
- cdkDrag
155
- [cdkDragDisabled]="!sortable()"
156
- >
157
- <td class="px-3 py-2 align-middle">
158
- @if (sortable()) {
159
- <button
160
- type="button"
161
- app-button
162
- variant="ghost"
163
- size="icon"
164
- class="cursor-grab"
165
- cdkDragHandle
166
- [attr.aria-label]="'Reordenar fila ' + (i + 1)"
167
- title="Arrastrar para reordenar"
168
- >
169
- <svg lucideGripVertical size="16" />
170
- </button>
171
- }
172
- </td>
173
- <td class="px-3 py-2">
174
- <input
175
- class="field-input"
176
- type="text"
177
- placeholder="Clave"
178
- [attr.aria-label]="'Clave, fila ' + (i + 1)"
179
- [id]="idPrefix() + '-key-' + i"
180
- [formField]="fieldNode(i, 'key')"
181
- />
182
- </td>
183
- <td class="px-3 py-2">
184
- <input
185
- class="field-input"
186
- type="text"
187
- placeholder="Valor"
188
- [attr.aria-label]="'Valor, fila ' + (i + 1)"
189
- [id]="idPrefix() + '-value-' + i"
190
- [formField]="fieldNode(i, 'value')"
191
- />
192
- </td>
193
- <td class="px-3 py-2">
194
- <span class="flex items-center justify-end gap-2 lg:gap-1">
195
- <button
196
- type="button"
197
- app-button
198
- variant="ghost"
199
- size="icon"
200
- [disabled]="i === 0"
201
- [attr.aria-label]="'Subir fila ' + (i + 1)"
202
- (click)="move(i, -1)"
203
- >
204
- <svg lucideArrowUp size="16" />
205
- </button>
206
- <button
207
- type="button"
208
- app-button
209
- variant="ghost"
210
- size="icon"
211
- [disabled]="i === items().length - 1"
212
- [attr.aria-label]="'Bajar fila ' + (i + 1)"
213
- (click)="move(i, 1)"
214
- >
215
- <svg lucideArrowDown size="16" />
216
- </button>
217
- <button
218
- type="button"
219
- app-button
220
- variant="ghost"
221
- size="icon"
222
- [disabled]="!canRemove()"
223
- [attr.aria-label]="'Eliminar fila ' + (i + 1)"
224
- (click)="remove(i)"
225
- >
226
- <svg lucideTrash2 size="16" />
227
- </button>
228
- </span>
229
- </td>
230
- </tr>
231
- }
232
- </tbody>
233
- </table>
234
- </div>
235
- }
236
-
237
- <div class="mt-3">
238
- <button app-button variant="outline" type="button" [disabled]="!canAdd()" (click)="add()">
239
- + {{ field().addLabel ?? 'Agregar especificación' }}
240
- </button>
241
- </div>
242
- `,
243
- isInline: true,
244
- dependencies: [
245
- {
246
- kind: "directive",
247
- type: FieldAria,
248
- selector: "input[id], select[id], textarea[id], output[id]"
249
- },
250
- {
251
- kind: "component",
252
- type: Button,
253
- selector: "button[app-button]",
254
- inputs: [
255
- "variant",
256
- "size",
257
- "type",
258
- "disabled",
259
- "loading"
260
- ]
261
- },
262
- {
263
- kind: "directive",
264
- type: CdkDrag,
265
- selector: "[cdkDrag]",
266
- inputs: [
267
- "cdkDragData",
268
- "cdkDragLockAxis",
269
- "cdkDragRootElement",
270
- "cdkDragBoundary",
271
- "cdkDragStartDelay",
272
- "cdkDragFreeDragPosition",
273
- "cdkDragDisabled",
274
- "cdkDragConstrainPosition",
275
- "cdkDragPreviewClass",
276
- "cdkDragPreviewContainer",
277
- "cdkDragScale"
278
- ],
279
- outputs: [
280
- "cdkDragStarted",
281
- "cdkDragReleased",
282
- "cdkDragEnded",
283
- "cdkDragEntered",
284
- "cdkDragExited",
285
- "cdkDragDropped",
286
- "cdkDragMoved"
287
- ],
288
- exportAs: ["cdkDrag"]
289
- },
290
- {
291
- kind: "directive",
292
- type: CdkDragHandle,
293
- selector: "[cdkDragHandle]",
294
- inputs: ["cdkDragHandleDisabled"]
295
- },
296
- {
297
- kind: "directive",
298
- type: CdkDropList,
299
- selector: "[cdkDropList], cdk-drop-list",
300
- inputs: [
301
- "cdkDropListConnectedTo",
302
- "cdkDropListData",
303
- "cdkDropListOrientation",
304
- "id",
305
- "cdkDropListLockAxis",
306
- "cdkDropListDisabled",
307
- "cdkDropListSortingDisabled",
308
- "cdkDropListEnterPredicate",
309
- "cdkDropListSortPredicate",
310
- "cdkDropListAutoScrollDisabled",
311
- "cdkDropListAutoScrollStep",
312
- "cdkDropListElementContainer",
313
- "cdkDropListHasAnchor"
314
- ],
315
- outputs: [
316
- "cdkDropListDropped",
317
- "cdkDropListEntered",
318
- "cdkDropListExited",
319
- "cdkDropListSorted"
320
- ],
321
- exportAs: ["cdkDropList"]
322
- },
323
- {
324
- kind: "directive",
325
- type: FormField,
326
- selector: "[formField]",
327
- inputs: ["formField"],
328
- exportAs: ["formField"]
329
- },
330
- {
331
- kind: "component",
332
- type: LucideArrowDown,
333
- selector: "svg[lucideArrowDown]"
334
- },
335
- {
336
- kind: "component",
337
- type: LucideArrowUp,
338
- selector: "svg[lucideArrowUp]"
339
- },
340
- {
341
- kind: "component",
342
- type: LucideGripVertical,
343
- selector: "svg[lucideGripVertical]"
344
- },
345
- {
346
- kind: "component",
347
- type: LucideTrash2,
348
- selector: "svg[lucideTrash], svg[lucideTrash2]"
349
- }
350
- ]
351
- });
352
- };
353
- i0.ɵɵngDeclareClassMetadata({
354
- minVersion: "12.0.0",
355
- version: "22.2.3",
356
- ngImport: i0,
357
- type: FieldKeyValue,
358
- decorators: [{
359
- type: Component,
360
- args: [{
361
- selector: "app-field-key-value",
362
- imports: [
363
- FieldAria,
364
- Button,
365
- CdkDrag,
366
- CdkDragHandle,
367
- CdkDropList,
368
- FormField,
369
- LucideArrowDown,
370
- LucideArrowUp,
371
- LucideGripVertical,
372
- LucideTrash2
373
- ],
374
- template: `
375
- @if (items().length === 0) {
376
- <p
377
- class="rounded-lg border border-dashed border-neutral/30 px-4 py-6 text-center text-sm text-neutral"
378
- >
379
- {{ field().emptyText ?? 'Sin elementos.' }}
380
- </p>
381
- } @else {
382
- <div class="overflow-x-auto rounded-xl border border-neutral/20 bg-surface">
383
- <table class="w-full text-sm">
384
- <thead>
385
- <tr class="border-b border-neutral/20 text-left text-xs font-medium text-neutral">
386
- <th class="w-10 px-3 py-2" scope="col"><span class="sr-only">Orden</span></th>
387
- <th class="px-3 py-2" scope="col">Clave</th>
388
- <th class="px-3 py-2" scope="col">Valor</th>
389
- <th class="w-28 px-3 py-2" scope="col"><span class="sr-only">Acciones</span></th>
390
- </tr>
391
- </thead>
392
- <tbody
393
- cdkDropList
394
- [cdkDropListData]="items()"
395
- [cdkDropListDisabled]="!sortable()"
396
- (cdkDropListDropped)="onDrop($event)"
397
- >
398
- @for (item of items(); track $index; let i = $index) {
399
- <tr
400
- class="border-b border-neutral/10 last:border-b-0"
401
- cdkDrag
402
- [cdkDragDisabled]="!sortable()"
403
- >
404
- <td class="px-3 py-2 align-middle">
405
- @if (sortable()) {
406
- <button
407
- type="button"
408
- app-button
409
- variant="ghost"
410
- size="icon"
411
- class="cursor-grab"
412
- cdkDragHandle
413
- [attr.aria-label]="'Reordenar fila ' + (i + 1)"
414
- title="Arrastrar para reordenar"
415
- >
416
- <svg lucideGripVertical size="16" />
417
- </button>
418
- }
419
- </td>
420
- <td class="px-3 py-2">
421
- <input
422
- class="field-input"
423
- type="text"
424
- placeholder="Clave"
425
- [attr.aria-label]="'Clave, fila ' + (i + 1)"
426
- [id]="idPrefix() + '-key-' + i"
427
- [formField]="fieldNode(i, 'key')"
428
- />
429
- </td>
430
- <td class="px-3 py-2">
431
- <input
432
- class="field-input"
433
- type="text"
434
- placeholder="Valor"
435
- [attr.aria-label]="'Valor, fila ' + (i + 1)"
436
- [id]="idPrefix() + '-value-' + i"
437
- [formField]="fieldNode(i, 'value')"
438
- />
439
- </td>
440
- <td class="px-3 py-2">
441
- <span class="flex items-center justify-end gap-2 lg:gap-1">
442
- <button
443
- type="button"
444
- app-button
445
- variant="ghost"
446
- size="icon"
447
- [disabled]="i === 0"
448
- [attr.aria-label]="'Subir fila ' + (i + 1)"
449
- (click)="move(i, -1)"
450
- >
451
- <svg lucideArrowUp size="16" />
452
- </button>
453
- <button
454
- type="button"
455
- app-button
456
- variant="ghost"
457
- size="icon"
458
- [disabled]="i === items().length - 1"
459
- [attr.aria-label]="'Bajar fila ' + (i + 1)"
460
- (click)="move(i, 1)"
461
- >
462
- <svg lucideArrowDown size="16" />
463
- </button>
464
- <button
465
- type="button"
466
- app-button
467
- variant="ghost"
468
- size="icon"
469
- [disabled]="!canRemove()"
470
- [attr.aria-label]="'Eliminar fila ' + (i + 1)"
471
- (click)="remove(i)"
472
- >
473
- <svg lucideTrash2 size="16" />
474
- </button>
475
- </span>
476
- </td>
477
- </tr>
478
- }
479
- </tbody>
480
- </table>
481
- </div>
482
- }
483
-
484
- <div class="mt-3">
485
- <button app-button variant="outline" type="button" [disabled]="!canAdd()" (click)="add()">
486
- + {{ field().addLabel ?? 'Agregar especificación' }}
487
- </button>
488
- </div>
489
- `
490
- }]
491
- }],
492
- propDecorators: {
493
- field: [{
494
- type: i0.Input,
495
- args: [{
496
- isSignal: true,
497
- alias: "field",
498
- required: true
499
- }]
500
- }],
501
- tree: [{
502
- type: i0.Input,
503
- args: [{
504
- isSignal: true,
505
- alias: "tree",
506
- required: true
507
- }]
508
- }]
509
- }
510
- });
511
- export { FieldKeyValue };
512
-
513
- //# sourceMappingURL=tinya-code-gas-admin-ui-key-value-nVdgg5at.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tinya-code-gas-admin-ui-key-value-nVdgg5at.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/fields/key-value/key-value.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 { KeyValueField, KeyValueItem } from '../../core/models/schema.model';\nimport { NotificationService } from '../../core/services/notification.service';\nimport { Button } from '../../shared/components/button/button';\nimport {\n appendPosition,\n computeMove,\n GAP,\n type PositionedItem,\n} from '../../shared/utils/gap-sorting';\nimport { FieldAria } from '../field-aria';\nimport { childTree, itemTree, listTree, type RootTree } from '../field-node';\n\n/**\n * Pares clave→valor (base.md §9 «ficha técnica»). Hoja: tabla con sus\n * propios `<input [formField]>` (nodos `key`/`value` del ítem) y no toca\n * FieldHost. `position` se calcula con gap-sorting igual que en `list`.\n */\n@Component({\n selector: 'app-field-key-value',\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 class=\"overflow-x-auto rounded-xl border border-neutral/20 bg-surface\">\n <table class=\"w-full text-sm\">\n <thead>\n <tr class=\"border-b border-neutral/20 text-left text-xs font-medium text-neutral\">\n <th class=\"w-10 px-3 py-2\" scope=\"col\"><span class=\"sr-only\">Orden</span></th>\n <th class=\"px-3 py-2\" scope=\"col\">Clave</th>\n <th class=\"px-3 py-2\" scope=\"col\">Valor</th>\n <th class=\"w-28 px-3 py-2\" scope=\"col\"><span class=\"sr-only\">Acciones</span></th>\n </tr>\n </thead>\n <tbody\n cdkDropList\n [cdkDropListData]=\"items()\"\n [cdkDropListDisabled]=\"!sortable()\"\n (cdkDropListDropped)=\"onDrop($event)\"\n >\n @for (item of items(); track $index; let i = $index) {\n <tr\n class=\"border-b border-neutral/10 last:border-b-0\"\n cdkDrag\n [cdkDragDisabled]=\"!sortable()\"\n >\n <td class=\"px-3 py-2 align-middle\">\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 fila ' + (i + 1)\"\n title=\"Arrastrar para reordenar\"\n >\n <svg lucideGripVertical size=\"16\" />\n </button>\n }\n </td>\n <td class=\"px-3 py-2\">\n <input\n class=\"field-input\"\n type=\"text\"\n placeholder=\"Clave\"\n [attr.aria-label]=\"'Clave, fila ' + (i + 1)\"\n [id]=\"idPrefix() + '-key-' + i\"\n [formField]=\"fieldNode(i, 'key')\"\n />\n </td>\n <td class=\"px-3 py-2\">\n <input\n class=\"field-input\"\n type=\"text\"\n placeholder=\"Valor\"\n [attr.aria-label]=\"'Valor, fila ' + (i + 1)\"\n [id]=\"idPrefix() + '-value-' + i\"\n [formField]=\"fieldNode(i, 'value')\"\n />\n </td>\n <td class=\"px-3 py-2\">\n <span class=\"flex items-center justify-end 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 fila ' + (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 fila ' + (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 fila ' + (i + 1)\"\n (click)=\"remove(i)\"\n >\n <svg lucideTrash2 size=\"16\" />\n </button>\n </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\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 especificación' }}\n </button>\n </div>\n `,\n})\nexport class FieldKeyValue {\n readonly field = input.required<KeyValueField>();\n readonly tree = input.required<RootTree>();\n\n private readonly notifications = inject(NotificationService);\n\n private readonly itemsNode = computed(() =>\n listTree<KeyValueItem>(this.tree(), this.field().key),\n );\n private readonly state = computed(() => this.itemsNode()());\n /** Prefijo estable del campo para los id de cada celda (§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\n /** Nodo de `key`/`value` del ítem; se llama fresco en cada render (NG01904). */\n protected fieldNode(\n index: number,\n column: 'key' | 'value',\n ): ReturnType<typeof childTree<string>> {\n return childTree<string>(itemTree(this.itemsNode(), index), column);\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 const positionKey = this.field().positionField;\n const row: KeyValueItem & Record<string, unknown> = { key: '', value: '' };\n if (positionKey !== undefined) {\n row[positionKey] = appendPosition(this.positioned());\n }\n this.updateItems((next) => {\n next.push(row);\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.applyMove(index, target);\n }\n\n protected onDrop(event: CdkDragDrop<KeyValueItem[]>): void {\n if (event.previousIndex === event.currentIndex) {\n return;\n }\n this.applyMove(event.previousIndex, event.currentIndex);\n }\n\n protected async remove(index: number): Promise<void> {\n if (!this.canRemove()) {\n return;\n }\n const row = this.items()[index];\n if (row !== undefined && (row.key.trim() !== '' || row.value.trim() !== '')) {\n const accepted = await this.notifications.confirm({\n title: `Eliminar fila ${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 /** Mueve y recalcula `position` (base.md §8): cambios antes del splice. */\n private applyMove(from: number, to: number): void {\n const positionKey = this.field().positionField;\n this.updateItems((next) => {\n if (positionKey !== undefined) {\n const result = computeMove(this.positioned(), String(from), to);\n for (const change of result.changes) {\n const row = next[Number(change.key)] as\n (KeyValueItem & Record<string, unknown>) | undefined;\n if (row !== undefined) {\n row[positionKey] = change.position;\n }\n }\n }\n moveItemInArray(next, from, to);\n });\n }\n\n private positioned(): PositionedItem[] {\n const positionKey = this.field().positionField;\n return this.items().map((item, index) => {\n const raw =\n positionKey !== undefined\n ? (item as unknown as Record<string, unknown>)[positionKey]\n : undefined;\n // Fallback: un registro viejo sin `position` se numera como rebalanceo.\n return {\n key: String(index),\n position: typeof raw === 'number' ? raw : (index + 1) * GAP,\n };\n });\n }\n\n private updateItems(mutator: (next: KeyValueItem[]) => void): void {\n this.state().controlValue.update((current) => {\n const next = [...current];\n mutator(next);\n return next;\n });\n }\n}\n"],"mappings":"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"}