@tinya-code/gas-admin-ui 0.2.0-alpha.12 → 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 (369) hide show
  1. package/README.md +222 -0
  2. package/ng-package.json +7 -0
  3. package/package.json +3 -15
  4. package/src/lib/actions/action-registry.spec.ts +52 -0
  5. package/src/lib/actions/action-registry.ts +126 -0
  6. package/src/lib/actions/action-service.spec.ts +215 -0
  7. package/src/lib/actions/action-service.ts +87 -0
  8. package/src/lib/actions/descriptors.spec.ts +155 -0
  9. package/src/lib/actions/descriptors.ts +154 -0
  10. package/src/lib/columns/column-cell.ts +33 -0
  11. package/src/lib/columns/column-defaults.spec.ts +99 -0
  12. package/src/lib/columns/column-defaults.ts +84 -0
  13. package/src/lib/columns/column-format.spec.ts +274 -0
  14. package/src/lib/columns/descriptors.ts +113 -0
  15. package/src/lib/columns/format-badge.ts +51 -0
  16. package/src/lib/columns/format-boolean.ts +58 -0
  17. package/src/lib/columns/format-currency.ts +30 -0
  18. package/src/lib/columns/format-date.ts +35 -0
  19. package/src/lib/columns/format-number.ts +32 -0
  20. package/src/lib/columns/format-text.ts +23 -0
  21. package/src/lib/columns/format-thumbnail.ts +63 -0
  22. package/src/lib/core/adapters/firebase-auth.adapter.ts +6 -0
  23. package/src/lib/core/guards/auth.guard.spec.ts +88 -0
  24. package/src/lib/core/guards/auth.guard.ts +48 -0
  25. package/src/lib/core/guards/unsaved-changes.guard.ts +16 -0
  26. package/src/lib/core/interceptors/api-error.interceptor.spec.ts +182 -0
  27. package/src/lib/core/interceptors/api-error.interceptor.ts +87 -0
  28. package/src/lib/core/models/api.model.ts +104 -0
  29. package/src/lib/core/models/schema-descriptions.ts +118 -0
  30. package/src/lib/core/models/schema.model.ts +1097 -0
  31. package/src/lib/core/registry/composition-validator.spec.ts +358 -0
  32. package/src/lib/core/registry/composition-validator.ts +270 -0
  33. package/src/lib/core/registry/field-validators.spec.ts +199 -0
  34. package/src/lib/core/registry/field-validators.ts +440 -0
  35. package/src/lib/core/registry/render-host.spec.ts +208 -0
  36. package/src/lib/core/registry/render-host.ts +646 -0
  37. package/src/lib/core/registry/render-registry.spec.ts +96 -0
  38. package/src/lib/core/registry/render-registry.ts +312 -0
  39. package/src/lib/core/registry/schema-catalog.ts +156 -0
  40. package/src/lib/core/services/api.service.spec.ts +1142 -0
  41. package/src/lib/core/services/api.service.ts +371 -0
  42. package/src/lib/core/services/auth.service.spec.ts +653 -0
  43. package/src/lib/core/services/auth.service.ts +503 -0
  44. package/src/lib/core/services/config.service.spec.ts +121 -0
  45. package/src/lib/core/services/config.service.ts +119 -0
  46. package/src/lib/core/services/data-source.service.spec.ts +179 -0
  47. package/src/lib/core/services/data-source.service.ts +142 -0
  48. package/src/lib/core/services/error-mapper.service.spec.ts +50 -0
  49. package/src/lib/core/services/error-mapper.service.ts +49 -0
  50. package/src/lib/core/services/notification.service.ts +73 -0
  51. package/src/lib/core/services/relation-drawer.service.ts +41 -0
  52. package/src/lib/core/services/theme.service.spec.ts +106 -0
  53. package/src/lib/core/services/theme.service.ts +86 -0
  54. package/src/lib/core/services/transport.spec.ts +198 -0
  55. package/src/lib/core/services/transport.ts +164 -0
  56. package/src/lib/core/services/upload.service.ts +81 -0
  57. package/src/lib/core/testing/categories.schema.ts +125 -0
  58. package/src/lib/core/testing/orders.schema.ts +372 -0
  59. package/src/lib/core/testing/products.schema.ts +258 -0
  60. package/src/lib/core/testing/site.schema.ts +195 -0
  61. package/src/lib/core/testing/test-catalog.ts +21 -0
  62. package/src/lib/core/tokens.ts +112 -0
  63. package/src/lib/core/utils/clipboard.spec.ts +55 -0
  64. package/src/lib/core/utils/clipboard.ts +90 -0
  65. package/src/lib/core/utils/context-resolver.spec.ts +95 -0
  66. package/src/lib/core/utils/context-resolver.ts +101 -0
  67. package/src/lib/core/utils/response-unwrapper.spec.ts +70 -0
  68. package/src/lib/core/utils/response-unwrapper.ts +103 -0
  69. package/src/lib/core/utils/source-options.spec.ts +96 -0
  70. package/src/lib/core/utils/source-options.ts +54 -0
  71. package/src/lib/core/utils/template-interpolator.spec.ts +59 -0
  72. package/src/lib/core/utils/template-interpolator.ts +56 -0
  73. package/src/lib/core/view-navigation/view-navigation.service.spec.ts +207 -0
  74. package/src/lib/core/view-navigation/view-navigation.service.ts +132 -0
  75. package/src/lib/fields/boolean/boolean.descriptor.ts +11 -0
  76. package/src/lib/fields/boolean/boolean.ts +40 -0
  77. package/src/lib/fields/color/color.descriptor.ts +12 -0
  78. package/src/lib/fields/color/color.ts +34 -0
  79. package/src/lib/fields/currency/currency.descriptor.ts +12 -0
  80. package/src/lib/fields/currency/currency.ts +67 -0
  81. package/src/lib/fields/date/date.descriptor.ts +12 -0
  82. package/src/lib/fields/date/date.ts +36 -0
  83. package/src/lib/fields/descriptors.ts +122 -0
  84. package/src/lib/fields/display/display-badge.ts +65 -0
  85. package/src/lib/fields/display/display-date.ts +39 -0
  86. package/src/lib/fields/display/display-defaults.ts +84 -0
  87. package/src/lib/fields/display/display-file.ts +41 -0
  88. package/src/lib/fields/display/display-image.ts +54 -0
  89. package/src/lib/fields/display/display-list.ts +107 -0
  90. package/src/lib/fields/display/display-number.ts +41 -0
  91. package/src/lib/fields/display/display-text.ts +42 -0
  92. package/src/lib/fields/display/display.spec.ts +242 -0
  93. package/src/lib/fields/dropdown/dropdown.descriptor.ts +12 -0
  94. package/src/lib/fields/dropdown/dropdown.ts +45 -0
  95. package/src/lib/fields/email/email.descriptor.ts +12 -0
  96. package/src/lib/fields/email/email.ts +28 -0
  97. package/src/lib/fields/field-aria.ts +60 -0
  98. package/src/lib/fields/field-host/field-host.spec.ts +118 -0
  99. package/src/lib/fields/field-host/field-host.ts +47 -0
  100. package/src/lib/fields/field-node.ts +88 -0
  101. package/src/lib/fields/file/file.descriptor.ts +14 -0
  102. package/src/lib/fields/file/file.spec.ts +134 -0
  103. package/src/lib/fields/file/file.ts +281 -0
  104. package/src/lib/fields/group/group.descriptor.ts +21 -0
  105. package/src/lib/fields/group/group.ts +110 -0
  106. package/src/lib/fields/image/image.descriptor.ts +12 -0
  107. package/src/lib/fields/image/image.spec.ts +117 -0
  108. package/src/lib/fields/image/image.ts +281 -0
  109. package/src/lib/fields/key-value/key-value.descriptor.ts +11 -0
  110. package/src/lib/fields/key-value/key-value.ts +283 -0
  111. package/src/lib/fields/list/list.descriptor.ts +21 -0
  112. package/src/lib/fields/list/list.ts +376 -0
  113. package/src/lib/fields/multiselect/multiselect.descriptor.ts +11 -0
  114. package/src/lib/fields/multiselect/multiselect.spec.ts +142 -0
  115. package/src/lib/fields/multiselect/multiselect.ts +152 -0
  116. package/src/lib/fields/number/number.descriptor.ts +12 -0
  117. package/src/lib/fields/number/number.ts +40 -0
  118. package/src/lib/fields/phone/phone.descriptor.ts +12 -0
  119. package/src/lib/fields/phone/phone.ts +46 -0
  120. package/src/lib/fields/readonly-text/readonly-text.descriptor.ts +12 -0
  121. package/src/lib/fields/readonly-text/readonly-text.ts +58 -0
  122. package/src/lib/fields/relation/relation.descriptor.ts +12 -0
  123. package/src/lib/fields/relation/relation.spec.ts +193 -0
  124. package/src/lib/fields/relation/relation.ts +224 -0
  125. package/src/lib/fields/rich-select/rich-select.descriptor.ts +12 -0
  126. package/src/lib/fields/rich-select/rich-select.ts +175 -0
  127. package/src/lib/fields/select/radio-mode.ts +25 -0
  128. package/src/lib/fields/select/select.descriptor.ts +12 -0
  129. package/src/lib/fields/select/select.spec.ts +162 -0
  130. package/src/lib/fields/select/select.ts +210 -0
  131. package/src/lib/fields/slug/slug.descriptor.ts +19 -0
  132. package/src/lib/fields/slug/slug.ts +67 -0
  133. package/src/lib/fields/string-list/string-list.descriptor.ts +11 -0
  134. package/src/lib/fields/string-list/string-list.ts +222 -0
  135. package/src/lib/fields/text/text.descriptor.ts +12 -0
  136. package/src/lib/fields/text/text.ts +35 -0
  137. package/src/lib/fields/textarea/textarea.descriptor.ts +12 -0
  138. package/src/lib/fields/textarea/textarea.spec.ts +117 -0
  139. package/src/lib/fields/textarea/textarea.ts +126 -0
  140. package/src/lib/fields/time/time.descriptor.ts +12 -0
  141. package/src/lib/fields/time/time.ts +28 -0
  142. package/src/lib/fields/unknown-render/unknown-render.ts +49 -0
  143. package/src/lib/fields/url/url.descriptor.ts +12 -0
  144. package/src/lib/fields/url/url.ts +53 -0
  145. package/src/lib/gas-admin-ui.spec.ts +21 -0
  146. package/src/lib/gas-admin-ui.ts +9 -0
  147. package/src/lib/layouts/descriptors.ts +9 -0
  148. package/src/lib/pages/dashboard/dashboard.ts +167 -0
  149. package/src/lib/pages/detail-view/detail-view.spec.ts +333 -0
  150. package/src/lib/pages/detail-view/detail-view.ts +570 -0
  151. package/src/lib/pages/drawer-form/drawer-form.ts +228 -0
  152. package/src/lib/pages/form-view/form-model.ts +88 -0
  153. package/src/lib/pages/form-view/form-schema.ts +255 -0
  154. package/src/lib/pages/form-view/form-view.ts +1622 -0
  155. package/src/lib/pages/list-view/list-view.formats.spec.ts +214 -0
  156. package/src/lib/pages/list-view/list-view.ts +882 -0
  157. package/src/lib/pages/login/login.spec.ts +109 -0
  158. package/src/lib/pages/login/login.ts +227 -0
  159. package/src/lib/pages/resource-page/resource-page.ts +234 -0
  160. package/src/lib/shared/components/badge/badge.ts +35 -0
  161. package/src/lib/shared/components/button/button.ts +65 -0
  162. package/src/lib/shared/components/confirm-dialog/confirm-dialog.ts +48 -0
  163. package/src/lib/shared/components/copy-button/copy-button.ts +56 -0
  164. package/src/lib/shared/components/copy-share/copy-share.spec.ts +122 -0
  165. package/src/lib/shared/components/copy-share/copy-share.ts +107 -0
  166. package/src/lib/shared/components/drawer/drawer.spec.ts +127 -0
  167. package/src/lib/shared/components/drawer/drawer.ts +172 -0
  168. package/src/lib/shared/components/empty-state/empty-state.ts +30 -0
  169. package/src/lib/shared/components/modal/modal.spec.ts +149 -0
  170. package/src/lib/shared/components/modal/modal.ts +145 -0
  171. package/src/lib/shared/components/post-create-modal/post-create-modal.spec.ts +165 -0
  172. package/src/lib/shared/components/post-create-modal/post-create-modal.ts +159 -0
  173. package/src/lib/shared/components/skeleton/skeleton.ts +31 -0
  174. package/src/lib/shared/components/toast/toast.ts +58 -0
  175. package/src/lib/shared/utils/col-span.ts +25 -0
  176. package/src/lib/shared/utils/condition-evaluator.ts +53 -0
  177. package/src/lib/shared/utils/depends-on.ts +48 -0
  178. package/src/lib/shared/utils/dialog-focus.ts +28 -0
  179. package/src/lib/shared/utils/field-path.ts +49 -0
  180. package/src/lib/shared/utils/gap-sorting.ts +144 -0
  181. package/src/lib/shared/utils/seed.spec.ts +64 -0
  182. package/src/lib/shared/utils/seed.ts +149 -0
  183. package/src/lib/shared/utils/slugify.ts +13 -0
  184. package/src/lib/shared/utils/validators.ts +41 -0
  185. package/src/lib/shell/layout/layout.ts +63 -0
  186. package/src/lib/shell/shell.routes.spec.ts +59 -0
  187. package/src/lib/shell/shell.routes.ts +122 -0
  188. package/src/lib/shell/sidebar/sidebar.ts +139 -0
  189. package/src/lib/shell/theme-toggle/theme-toggle.ts +74 -0
  190. package/src/lib/views/calendar-view/calendar-model.ts +426 -0
  191. package/src/lib/views/calendar-view/calendar-view.spec.ts +557 -0
  192. package/src/lib/views/calendar-view/calendar-view.ts +568 -0
  193. package/src/lib/views/composer/composer-host.spec.ts +301 -0
  194. package/src/lib/views/composer/composer-host.ts +248 -0
  195. package/src/lib/views/composer/composer-imports.spec.ts +54 -0
  196. package/src/lib/views/composer/view-context.spec.ts +117 -0
  197. package/src/lib/views/composer/view-context.ts +109 -0
  198. package/src/lib/views/composer/view-slot.spec.ts +130 -0
  199. package/src/lib/views/composer/view-slot.ts +178 -0
  200. package/src/lib/views/descriptors.ts +46 -0
  201. package/src/lib/views/kanban-view/kanban-model.ts +173 -0
  202. package/src/lib/views/kanban-view/kanban-view.spec.ts +540 -0
  203. package/src/lib/views/kanban-view/kanban-view.ts +327 -0
  204. package/src/lib/widgets/bar-chart/bar-chart.descriptor.ts +17 -0
  205. package/src/lib/widgets/bar-chart/bar-chart.spec.ts +66 -0
  206. package/src/lib/widgets/bar-chart/bar-chart.ts +76 -0
  207. package/src/lib/widgets/chart-line/chart-line.descriptor.ts +17 -0
  208. package/src/lib/widgets/chart-line/chart-line.spec.ts +113 -0
  209. package/src/lib/widgets/chart-line/chart-line.ts +219 -0
  210. package/src/lib/widgets/descriptors.ts +29 -0
  211. package/src/lib/widgets/metric-card/metric-card.descriptor.ts +41 -0
  212. package/src/lib/widgets/metric-card/metric-card.spec.ts +52 -0
  213. package/src/lib/widgets/metric-card/metric-card.ts +48 -0
  214. package/src/lib/widgets/quick-actions/quick-actions.descriptor.ts +13 -0
  215. package/src/lib/widgets/quick-actions/quick-actions.spec.ts +61 -0
  216. package/src/lib/widgets/quick-actions/quick-actions.ts +100 -0
  217. package/src/lib/widgets/record-list/record-list.descriptor.ts +16 -0
  218. package/src/lib/widgets/record-list/record-list.spec.ts +79 -0
  219. package/src/lib/widgets/record-list/record-list.ts +115 -0
  220. package/src/lib/widgets/series.spec.ts +42 -0
  221. package/src/lib/widgets/series.ts +56 -0
  222. package/src/lib/widgets/status-progress/status-progress.descriptor.ts +19 -0
  223. package/src/lib/widgets/status-progress/status-progress.spec.ts +63 -0
  224. package/src/lib/widgets/status-progress/status-progress.ts +104 -0
  225. package/src/lib/widgets/widget-host/widget-host.spec.ts +179 -0
  226. package/src/lib/widgets/widget-host/widget-host.ts +99 -0
  227. package/src/public-api.ts +104 -0
  228. package/tinya-code-gas-admin-ui-0.2.0-alpha.15.tgz +0 -0
  229. package/tsconfig.lib.json +13 -0
  230. package/tsconfig.lib.prod.json +11 -0
  231. package/tsconfig.spec.json +10 -0
  232. package/fesm2022/tinya-code-gas-admin-ui-badge-EeCA_l-o.mjs +0 -84
  233. package/fesm2022/tinya-code-gas-admin-ui-badge-EeCA_l-o.mjs.map +0 -1
  234. package/fesm2022/tinya-code-gas-admin-ui-bar-chart-G7sEMSBY.mjs +0 -140
  235. package/fesm2022/tinya-code-gas-admin-ui-bar-chart-G7sEMSBY.mjs.map +0 -1
  236. package/fesm2022/tinya-code-gas-admin-ui-boolean-B2ASKL0E.mjs +0 -113
  237. package/fesm2022/tinya-code-gas-admin-ui-boolean-B2ASKL0E.mjs.map +0 -1
  238. package/fesm2022/tinya-code-gas-admin-ui-button-BQjNW8KB.mjs +0 -163
  239. package/fesm2022/tinya-code-gas-admin-ui-button-BQjNW8KB.mjs.map +0 -1
  240. package/fesm2022/tinya-code-gas-admin-ui-calendar-view-DCY8bj2V.mjs +0 -1027
  241. package/fesm2022/tinya-code-gas-admin-ui-calendar-view-DCY8bj2V.mjs.map +0 -1
  242. package/fesm2022/tinya-code-gas-admin-ui-chart-line-BjdlKHoH.mjs +0 -278
  243. package/fesm2022/tinya-code-gas-admin-ui-chart-line-BjdlKHoH.mjs.map +0 -1
  244. package/fesm2022/tinya-code-gas-admin-ui-color-Dljh_By3.mjs +0 -107
  245. package/fesm2022/tinya-code-gas-admin-ui-color-Dljh_By3.mjs.map +0 -1
  246. package/fesm2022/tinya-code-gas-admin-ui-condition-evaluator-DY2k1M3C.mjs +0 -101
  247. package/fesm2022/tinya-code-gas-admin-ui-condition-evaluator-DY2k1M3C.mjs.map +0 -1
  248. package/fesm2022/tinya-code-gas-admin-ui-currency-BvuF3Z63.mjs +0 -141
  249. package/fesm2022/tinya-code-gas-admin-ui-currency-BvuF3Z63.mjs.map +0 -1
  250. package/fesm2022/tinya-code-gas-admin-ui-data-source.service-96FSbN72.mjs +0 -88
  251. package/fesm2022/tinya-code-gas-admin-ui-data-source.service-96FSbN72.mjs.map +0 -1
  252. package/fesm2022/tinya-code-gas-admin-ui-date-1SJGXZrd.mjs +0 -107
  253. package/fesm2022/tinya-code-gas-admin-ui-date-1SJGXZrd.mjs.map +0 -1
  254. package/fesm2022/tinya-code-gas-admin-ui-display-badge-fwk6sDU7.mjs +0 -140
  255. package/fesm2022/tinya-code-gas-admin-ui-display-badge-fwk6sDU7.mjs.map +0 -1
  256. package/fesm2022/tinya-code-gas-admin-ui-display-date-D7zLiDiG.mjs +0 -119
  257. package/fesm2022/tinya-code-gas-admin-ui-display-date-D7zLiDiG.mjs.map +0 -1
  258. package/fesm2022/tinya-code-gas-admin-ui-display-file-BiIhqvQC.mjs +0 -125
  259. package/fesm2022/tinya-code-gas-admin-ui-display-file-BiIhqvQC.mjs.map +0 -1
  260. package/fesm2022/tinya-code-gas-admin-ui-display-image-C1dhnZi1.mjs +0 -152
  261. package/fesm2022/tinya-code-gas-admin-ui-display-image-C1dhnZi1.mjs.map +0 -1
  262. package/fesm2022/tinya-code-gas-admin-ui-display-list-DOEuUbGe.mjs +0 -211
  263. package/fesm2022/tinya-code-gas-admin-ui-display-list-DOEuUbGe.mjs.map +0 -1
  264. package/fesm2022/tinya-code-gas-admin-ui-display-number-DDMzr4Hn.mjs +0 -116
  265. package/fesm2022/tinya-code-gas-admin-ui-display-number-DDMzr4Hn.mjs.map +0 -1
  266. package/fesm2022/tinya-code-gas-admin-ui-display-text-B8CdVNpv.mjs +0 -111
  267. package/fesm2022/tinya-code-gas-admin-ui-display-text-B8CdVNpv.mjs.map +0 -1
  268. package/fesm2022/tinya-code-gas-admin-ui-dropdown-C3blvmE1.mjs +0 -122
  269. package/fesm2022/tinya-code-gas-admin-ui-dropdown-C3blvmE1.mjs.map +0 -1
  270. package/fesm2022/tinya-code-gas-admin-ui-email-CT_O5ihA.mjs +0 -107
  271. package/fesm2022/tinya-code-gas-admin-ui-email-CT_O5ihA.mjs.map +0 -1
  272. package/fesm2022/tinya-code-gas-admin-ui-empty-state-BMc0QtoT.mjs +0 -109
  273. package/fesm2022/tinya-code-gas-admin-ui-empty-state-BMc0QtoT.mjs.map +0 -1
  274. package/fesm2022/tinya-code-gas-admin-ui-error-mapper.service-DY5y1FjE.mjs +0 -45
  275. package/fesm2022/tinya-code-gas-admin-ui-error-mapper.service-DY5y1FjE.mjs.map +0 -1
  276. package/fesm2022/tinya-code-gas-admin-ui-field-aria-BD1Wiggc.mjs +0 -50
  277. package/fesm2022/tinya-code-gas-admin-ui-field-aria-BD1Wiggc.mjs.map +0 -1
  278. package/fesm2022/tinya-code-gas-admin-ui-field-node-CIK6KNN_.mjs +0 -24
  279. package/fesm2022/tinya-code-gas-admin-ui-field-node-CIK6KNN_.mjs.map +0 -1
  280. package/fesm2022/tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs +0 -27
  281. package/fesm2022/tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs.map +0 -1
  282. package/fesm2022/tinya-code-gas-admin-ui-file-Dmxioog7.mjs +0 -408
  283. package/fesm2022/tinya-code-gas-admin-ui-file-Dmxioog7.mjs.map +0 -1
  284. package/fesm2022/tinya-code-gas-admin-ui-form-view-C709rc57.mjs +0 -4516
  285. package/fesm2022/tinya-code-gas-admin-ui-form-view-C709rc57.mjs.map +0 -1
  286. package/fesm2022/tinya-code-gas-admin-ui-format-badge-CK8ct5Wk.mjs +0 -82
  287. package/fesm2022/tinya-code-gas-admin-ui-format-badge-CK8ct5Wk.mjs.map +0 -1
  288. package/fesm2022/tinya-code-gas-admin-ui-format-boolean-ClzezZz-.mjs +0 -105
  289. package/fesm2022/tinya-code-gas-admin-ui-format-boolean-ClzezZz-.mjs.map +0 -1
  290. package/fesm2022/tinya-code-gas-admin-ui-format-currency-CVmniKml.mjs +0 -65
  291. package/fesm2022/tinya-code-gas-admin-ui-format-currency-CVmniKml.mjs.map +0 -1
  292. package/fesm2022/tinya-code-gas-admin-ui-format-date-Dr1YsDd_.mjs +0 -65
  293. package/fesm2022/tinya-code-gas-admin-ui-format-date-Dr1YsDd_.mjs.map +0 -1
  294. package/fesm2022/tinya-code-gas-admin-ui-format-number-CWCjpI4n.mjs +0 -65
  295. package/fesm2022/tinya-code-gas-admin-ui-format-number-CWCjpI4n.mjs.map +0 -1
  296. package/fesm2022/tinya-code-gas-admin-ui-format-text-DBOgJkH0.mjs +0 -59
  297. package/fesm2022/tinya-code-gas-admin-ui-format-text-DBOgJkH0.mjs.map +0 -1
  298. package/fesm2022/tinya-code-gas-admin-ui-format-thumbnail-PCRvxWKt.mjs +0 -94
  299. package/fesm2022/tinya-code-gas-admin-ui-format-thumbnail-PCRvxWKt.mjs.map +0 -1
  300. package/fesm2022/tinya-code-gas-admin-ui-gap-sorting-iTdy_DYG.mjs +0 -72
  301. package/fesm2022/tinya-code-gas-admin-ui-gap-sorting-iTdy_DYG.mjs.map +0 -1
  302. package/fesm2022/tinya-code-gas-admin-ui-group-h7-O8tt4.mjs +0 -238
  303. package/fesm2022/tinya-code-gas-admin-ui-group-h7-O8tt4.mjs.map +0 -1
  304. package/fesm2022/tinya-code-gas-admin-ui-image-7UhJ7nqI.mjs +0 -416
  305. package/fesm2022/tinya-code-gas-admin-ui-image-7UhJ7nqI.mjs.map +0 -1
  306. package/fesm2022/tinya-code-gas-admin-ui-kanban-view-Dl0Ol5Kb.mjs +0 -439
  307. package/fesm2022/tinya-code-gas-admin-ui-kanban-view-Dl0Ol5Kb.mjs.map +0 -1
  308. package/fesm2022/tinya-code-gas-admin-ui-key-value-nVdgg5at.mjs +0 -513
  309. package/fesm2022/tinya-code-gas-admin-ui-key-value-nVdgg5at.mjs.map +0 -1
  310. package/fesm2022/tinya-code-gas-admin-ui-list-C8ijJHAx.mjs +0 -637
  311. package/fesm2022/tinya-code-gas-admin-ui-list-C8ijJHAx.mjs.map +0 -1
  312. package/fesm2022/tinya-code-gas-admin-ui-metric-card-DnGMQL8l.mjs +0 -127
  313. package/fesm2022/tinya-code-gas-admin-ui-metric-card-DnGMQL8l.mjs.map +0 -1
  314. package/fesm2022/tinya-code-gas-admin-ui-multiselect-PB28e-jl.mjs +0 -251
  315. package/fesm2022/tinya-code-gas-admin-ui-multiselect-PB28e-jl.mjs.map +0 -1
  316. package/fesm2022/tinya-code-gas-admin-ui-notification.service-LjSULER6.mjs +0 -66
  317. package/fesm2022/tinya-code-gas-admin-ui-notification.service-LjSULER6.mjs.map +0 -1
  318. package/fesm2022/tinya-code-gas-admin-ui-number-JNr7glc8.mjs +0 -114
  319. package/fesm2022/tinya-code-gas-admin-ui-number-JNr7glc8.mjs.map +0 -1
  320. package/fesm2022/tinya-code-gas-admin-ui-phone-jR417hPf.mjs +0 -116
  321. package/fesm2022/tinya-code-gas-admin-ui-phone-jR417hPf.mjs.map +0 -1
  322. package/fesm2022/tinya-code-gas-admin-ui-quick-actions-DCQ6emmF.mjs +0 -235
  323. package/fesm2022/tinya-code-gas-admin-ui-quick-actions-DCQ6emmF.mjs.map +0 -1
  324. package/fesm2022/tinya-code-gas-admin-ui-radio-mode-DxvN07DY.mjs +0 -8
  325. package/fesm2022/tinya-code-gas-admin-ui-radio-mode-DxvN07DY.mjs.map +0 -1
  326. package/fesm2022/tinya-code-gas-admin-ui-readonly-text-BL7-4qie.mjs +0 -124
  327. package/fesm2022/tinya-code-gas-admin-ui-readonly-text-BL7-4qie.mjs.map +0 -1
  328. package/fesm2022/tinya-code-gas-admin-ui-record-list-BiZfnd_7.mjs +0 -249
  329. package/fesm2022/tinya-code-gas-admin-ui-record-list-BiZfnd_7.mjs.map +0 -1
  330. package/fesm2022/tinya-code-gas-admin-ui-relation-drawer.service-B0kT8EiW.mjs +0 -39
  331. package/fesm2022/tinya-code-gas-admin-ui-relation-drawer.service-B0kT8EiW.mjs.map +0 -1
  332. package/fesm2022/tinya-code-gas-admin-ui-relation-ykpJ3PYl.mjs +0 -309
  333. package/fesm2022/tinya-code-gas-admin-ui-relation-ykpJ3PYl.mjs.map +0 -1
  334. package/fesm2022/tinya-code-gas-admin-ui-render-registry-CULkxrSt.mjs +0 -576
  335. package/fesm2022/tinya-code-gas-admin-ui-render-registry-CULkxrSt.mjs.map +0 -1
  336. package/fesm2022/tinya-code-gas-admin-ui-rich-select-CIHaOrbU.mjs +0 -161
  337. package/fesm2022/tinya-code-gas-admin-ui-rich-select-CIHaOrbU.mjs.map +0 -1
  338. package/fesm2022/tinya-code-gas-admin-ui-rolldown-runtime-DpJrqANO.mjs +0 -11
  339. package/fesm2022/tinya-code-gas-admin-ui-schema-catalog-D0Pk0wAN.mjs +0 -685
  340. package/fesm2022/tinya-code-gas-admin-ui-schema-catalog-D0Pk0wAN.mjs.map +0 -1
  341. package/fesm2022/tinya-code-gas-admin-ui-seed-CcCA3FdQ.mjs +0 -80
  342. package/fesm2022/tinya-code-gas-admin-ui-seed-CcCA3FdQ.mjs.map +0 -1
  343. package/fesm2022/tinya-code-gas-admin-ui-select-CDwX9yNO.mjs +0 -296
  344. package/fesm2022/tinya-code-gas-admin-ui-select-CDwX9yNO.mjs.map +0 -1
  345. package/fesm2022/tinya-code-gas-admin-ui-skeleton-DnWK0tcZ.mjs +0 -119
  346. package/fesm2022/tinya-code-gas-admin-ui-skeleton-DnWK0tcZ.mjs.map +0 -1
  347. package/fesm2022/tinya-code-gas-admin-ui-slug-DU58cbiY.mjs +0 -158
  348. package/fesm2022/tinya-code-gas-admin-ui-slug-DU58cbiY.mjs.map +0 -1
  349. package/fesm2022/tinya-code-gas-admin-ui-source-options-B9R4mw8-.mjs +0 -26
  350. package/fesm2022/tinya-code-gas-admin-ui-source-options-B9R4mw8-.mjs.map +0 -1
  351. package/fesm2022/tinya-code-gas-admin-ui-status-progress-DmeG8htE.mjs +0 -205
  352. package/fesm2022/tinya-code-gas-admin-ui-status-progress-DmeG8htE.mjs.map +0 -1
  353. package/fesm2022/tinya-code-gas-admin-ui-string-list-gleasqzD.mjs +0 -432
  354. package/fesm2022/tinya-code-gas-admin-ui-string-list-gleasqzD.mjs.map +0 -1
  355. package/fesm2022/tinya-code-gas-admin-ui-template-interpolator-ewv7CkNX.mjs +0 -36
  356. package/fesm2022/tinya-code-gas-admin-ui-template-interpolator-ewv7CkNX.mjs.map +0 -1
  357. package/fesm2022/tinya-code-gas-admin-ui-text-CUPmL7W_.mjs +0 -107
  358. package/fesm2022/tinya-code-gas-admin-ui-text-CUPmL7W_.mjs.map +0 -1
  359. package/fesm2022/tinya-code-gas-admin-ui-textarea-CGLSIW13.mjs +0 -223
  360. package/fesm2022/tinya-code-gas-admin-ui-textarea-CGLSIW13.mjs.map +0 -1
  361. package/fesm2022/tinya-code-gas-admin-ui-time-BcHzsTWf.mjs +0 -107
  362. package/fesm2022/tinya-code-gas-admin-ui-time-BcHzsTWf.mjs.map +0 -1
  363. package/fesm2022/tinya-code-gas-admin-ui-upload.service-CZPEPCeN.mjs +0 -60
  364. package/fesm2022/tinya-code-gas-admin-ui-upload.service-CZPEPCeN.mjs.map +0 -1
  365. package/fesm2022/tinya-code-gas-admin-ui-url-GO4LZi__.mjs +0 -141
  366. package/fesm2022/tinya-code-gas-admin-ui-url-GO4LZi__.mjs.map +0 -1
  367. package/fesm2022/tinya-code-gas-admin-ui.mjs +0 -4599
  368. package/fesm2022/tinya-code-gas-admin-ui.mjs.map +0 -1
  369. package/types/tinya-code-gas-admin-ui.d.ts +0 -3632
@@ -1,127 +0,0 @@
1
- import * as i0 from "@angular/core";
2
- import { Component, computed, input } from "@angular/core";
3
- var MetricCard = class MetricCard {
4
- label = input.required(...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
5
- value = input(null, ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
6
- hint = input("", ...ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []);
7
- empty = computed(() => this.value() === null || this.value() === void 0, ...ngDevMode ? [{ debugName: "empty" }] : /* istanbul ignore next */ []);
8
- display = computed(() => {
9
- const value = this.value();
10
- return typeof value === "number" ? new Intl.NumberFormat("es-PE").format(value) : String(value);
11
- }, ...ngDevMode ? [{ debugName: "display" }] : /* istanbul ignore next */ []);
12
- static ɵfac = i0.ɵɵngDeclareFactory({
13
- minVersion: "12.0.0",
14
- version: "22.2.3",
15
- ngImport: i0,
16
- type: MetricCard,
17
- deps: [],
18
- target: i0.ɵɵFactoryTarget.Component
19
- });
20
- static ɵcmp = i0.ɵɵngDeclareComponent({
21
- minVersion: "17.0.0",
22
- version: "22.2.3",
23
- type: MetricCard,
24
- isStandalone: true,
25
- selector: "app-metric-card",
26
- inputs: {
27
- label: {
28
- classPropertyName: "label",
29
- publicName: "label",
30
- isSignal: true,
31
- isRequired: true,
32
- transformFunction: null
33
- },
34
- value: {
35
- classPropertyName: "value",
36
- publicName: "value",
37
- isSignal: true,
38
- isRequired: false,
39
- transformFunction: null
40
- },
41
- hint: {
42
- classPropertyName: "hint",
43
- publicName: "hint",
44
- isSignal: true,
45
- isRequired: false,
46
- transformFunction: null
47
- }
48
- },
49
- ngImport: i0,
50
- template: `
51
- <article class="rounded-lg border border-neutral/20 bg-surface p-4">
52
- <p class="text-sm text-neutral">{{ label() }}</p>
53
-
54
- @if (empty()) {
55
- <p class="font-display text-3xl font-semibold text-neutral/40" data-testid="value-empty">
56
- —
57
- </p>
58
- } @else {
59
- <p class="font-display text-3xl font-semibold" data-testid="value">{{ display() }}</p>
60
- }
61
-
62
- @if (hint()) {
63
- <p class="mt-1 text-xs text-neutral">{{ hint() }}</p>
64
- }
65
- </article>
66
- `,
67
- isInline: true
68
- });
69
- };
70
- i0.ɵɵngDeclareClassMetadata({
71
- minVersion: "12.0.0",
72
- version: "22.2.3",
73
- ngImport: i0,
74
- type: MetricCard,
75
- decorators: [{
76
- type: Component,
77
- args: [{
78
- selector: "app-metric-card",
79
- template: `
80
- <article class="rounded-lg border border-neutral/20 bg-surface p-4">
81
- <p class="text-sm text-neutral">{{ label() }}</p>
82
-
83
- @if (empty()) {
84
- <p class="font-display text-3xl font-semibold text-neutral/40" data-testid="value-empty">
85
- —
86
- </p>
87
- } @else {
88
- <p class="font-display text-3xl font-semibold" data-testid="value">{{ display() }}</p>
89
- }
90
-
91
- @if (hint()) {
92
- <p class="mt-1 text-xs text-neutral">{{ hint() }}</p>
93
- }
94
- </article>
95
- `
96
- }]
97
- }],
98
- propDecorators: {
99
- label: [{
100
- type: i0.Input,
101
- args: [{
102
- isSignal: true,
103
- alias: "label",
104
- required: true
105
- }]
106
- }],
107
- value: [{
108
- type: i0.Input,
109
- args: [{
110
- isSignal: true,
111
- alias: "value",
112
- required: false
113
- }]
114
- }],
115
- hint: [{
116
- type: i0.Input,
117
- args: [{
118
- isSignal: true,
119
- alias: "hint",
120
- required: false
121
- }]
122
- }]
123
- }
124
- });
125
- export { MetricCard };
126
-
127
- //# sourceMappingURL=tinya-code-gas-admin-ui-metric-card-DnGMQL8l.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tinya-code-gas-admin-ui-metric-card-DnGMQL8l.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/widgets/metric-card/metric-card.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\n\n/**\n * KPI de una cifra suelta («3 pendientes»).\n *\n * Cero dependencias: es sólo presentación — el valor lo trae el\n * orquestador del panel desde el endpoint de métricas.\n *\n * Sin `icon`: el schema no tiene hoy un registro de nombres de icono\n * (los Lucide se importan estáticamente), así que un `icon?: string` no\n * podría resolverse declarativamente. Se añade cuando exista ese registro.\n */\n@Component({\n selector: 'app-metric-card',\n template: `\n <article class=\"rounded-lg border border-neutral/20 bg-surface p-4\">\n <p class=\"text-sm text-neutral\">{{ label() }}</p>\n\n @if (empty()) {\n <p class=\"font-display text-3xl font-semibold text-neutral/40\" data-testid=\"value-empty\">\n —\n </p>\n } @else {\n <p class=\"font-display text-3xl font-semibold\" data-testid=\"value\">{{ display() }}</p>\n }\n\n @if (hint()) {\n <p class=\"mt-1 text-xs text-neutral\">{{ hint() }}</p>\n }\n </article>\n `,\n})\nexport class MetricCard {\n /** Rótulo del KPI. */\n readonly label = input.required<string>();\n /** Cifra a mostrar; `null`/`undefined` ⇒ estado vacío. */\n readonly value = input<unknown>(null);\n /** Texto secundario estático bajo la cifra. */\n readonly hint = input('');\n\n /** `0` es un valor, no un vacío: sólo `null`/`undefined` vacían la tarjeta. */\n protected readonly empty = computed(() => this.value() === null || this.value() === undefined);\n\n protected readonly display = computed(() => {\n const value = this.value();\n return typeof value === 'number' ? new Intl.NumberFormat('es-PE').format(value) : String(value);\n });\n}\n"],"mappings":";;AAgCA,IAAa,aAAb,MAAa,WAAU;CAEZ,QAAQ,MAAM,SAAkB,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAEhC,QAAQ,MAAe,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAE5B,OAAO,MAAM,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAGN,QAAQ,eAAe,KAAK,MAAK,MAAO,QAAQ,KAAK,MAAK,MAAO,QAAU,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAE3E,UAAU,eAAc;EACzC,MAAM,QAAQ,KAAK,MAAK;EACxB,OAAO,OAAO,UAAU,WAAW,IAAI,KAAK,aAAa,OAAO,CAAC,CAAC,OAAO,KAAK,IAAI,OAAO,KAAK;CAChG,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAdS,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAU,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAV,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAU,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;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,UAlBX;;;;;;;;;;;;;;;;;EAgBT,UAAA;CAAA,CAAA;;AAEU,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAU,YAAA,CAAA;EApBtB,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,UAAU;;;;;;;;;;;;;;;;;EAiBX,CAAA"}
@@ -1,251 +0,0 @@
1
- import { t as __exportAll } from "./tinya-code-gas-admin-ui-rolldown-runtime-DpJrqANO.mjs";
2
- import { i as getSchema } from "./tinya-code-gas-admin-ui-schema-catalog-D0Pk0wAN.mjs";
3
- import { n as dataSourceKey, t as DataSourceService } from "./tinya-code-gas-admin-ui-data-source.service-96FSbN72.mjs";
4
- import { t as optionsFromRows } from "./tinya-code-gas-admin-ui-source-options-B9R4mw8-.mjs";
5
- import * as i0 from "@angular/core";
6
- import { Component, computed, inject, input, model, resource } from "@angular/core";
7
- import { LucideX } from "@lucide/angular";
8
- var multiselect_exports = /* @__PURE__ */ __exportAll({ FieldMultiselect: () => FieldMultiselect });
9
- var FieldMultiselect = class FieldMultiselect {
10
- field = input.required(...ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []);
11
- tree = input(...ngDevMode ? [void 0, { debugName: "tree" }] : /* istanbul ignore next */ []);
12
- value = model.required(...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
13
- disabled = input(false, ...ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []);
14
- ds = inject(DataSourceService);
15
- registro = computed(() => {
16
- const source = this.field().source;
17
- const tree = this.tree();
18
- if (source === void 0 || source.params === void 0 || tree === void 0) return void 0;
19
- return tree().value();
20
- }, ...ngDevMode ? [{ debugName: "registro" }] : /* istanbul ignore next */ []);
21
- claveFuente = computed(() => {
22
- const source = this.field().source;
23
- return source === void 0 ? void 0 : dataSourceKey(source, this.registro());
24
- }, ...ngDevMode ? [{ debugName: "claveFuente" }] : /* istanbul ignore next */ []);
25
- fuenteResource = resource({
26
- ...ngDevMode ? { debugName: "fuenteResource" } : /* istanbul ignore next */ {},
27
- params: () => this.claveFuente(),
28
- loader: async () => {
29
- const source = this.field().source;
30
- if (source === void 0) return [];
31
- return this.ds.rows(source, this.registro());
32
- }
33
- });
34
- opciones = computed(() => {
35
- const field = this.field();
36
- if (field.source === void 0) return field.options ?? [];
37
- if (this.fuenteResource.status() === "error") return [];
38
- return optionsFromRows(this.fuenteResource.value() ?? [], {
39
- source: field.source,
40
- target: getSchema(field.source.resource)
41
- });
42
- }, ...ngDevMode ? [{ debugName: "opciones" }] : /* istanbul ignore next */ []);
43
- cargando = computed(() => this.claveFuente() !== void 0 && this.fuenteResource.status() === "loading", ...ngDevMode ? [{ debugName: "cargando" }] : /* istanbul ignore next */ []);
44
- fallo = computed(() => this.claveFuente() !== void 0 && this.fuenteResource.status() === "error", ...ngDevMode ? [{ debugName: "fallo" }] : /* istanbul ignore next */ []);
45
- toggle(option) {
46
- if (this.disabled()) return;
47
- this.value.update((current) => current.includes(option.value) ? current.filter((item) => item !== option.value) : [...current, option.value]);
48
- }
49
- remove(item) {
50
- if (this.disabled()) return;
51
- this.value.update((current) => current.filter((value) => value !== item));
52
- }
53
- isSelected(item) {
54
- return this.value().includes(item);
55
- }
56
- labelOf(item) {
57
- return this.opciones().find((option) => option.value === item)?.label ?? item;
58
- }
59
- static ɵfac = i0.ɵɵngDeclareFactory({
60
- minVersion: "12.0.0",
61
- version: "22.2.3",
62
- ngImport: i0,
63
- type: FieldMultiselect,
64
- deps: [],
65
- target: i0.ɵɵFactoryTarget.Component
66
- });
67
- static ɵcmp = i0.ɵɵngDeclareComponent({
68
- minVersion: "17.0.0",
69
- version: "22.2.3",
70
- type: FieldMultiselect,
71
- isStandalone: true,
72
- selector: "app-field-multiselect",
73
- inputs: {
74
- field: {
75
- classPropertyName: "field",
76
- publicName: "field",
77
- isSignal: true,
78
- isRequired: true,
79
- transformFunction: null
80
- },
81
- tree: {
82
- classPropertyName: "tree",
83
- publicName: "tree",
84
- isSignal: true,
85
- isRequired: false,
86
- transformFunction: null
87
- },
88
- value: {
89
- classPropertyName: "value",
90
- publicName: "value",
91
- isSignal: true,
92
- isRequired: true,
93
- transformFunction: null
94
- },
95
- disabled: {
96
- classPropertyName: "disabled",
97
- publicName: "disabled",
98
- isSignal: true,
99
- isRequired: false,
100
- transformFunction: null
101
- }
102
- },
103
- outputs: { value: "valueChange" },
104
- ngImport: i0,
105
- template: `
106
- <div class="space-y-2">
107
- @if (fallo()) {
108
- <p class="text-xs text-danger" role="alert">No se pudieron cargar las opciones.</p>
109
- } @else if (cargando()) {
110
- <p class="text-xs text-neutral" role="status">Cargando opciones…</p>
111
- }
112
- @if (value().length > 0) {
113
- <div class="flex flex-wrap gap-1.5" data-testid="multiselect-chips">
114
- @for (item of value(); track item) {
115
- <span
116
- class="inline-flex items-center rounded-full bg-primary/10 px-2.5 py-1 text-xs text-primary"
117
- >
118
- {{ labelOf(item) }}
119
- <button
120
- type="button"
121
- class="rounded-full px-0.5 hover:text-danger"
122
- [attr.aria-label]="'Quitar ' + labelOf(item)"
123
- [disabled]="disabled()"
124
- (click)="remove(item)"
125
- >
126
- <svg lucideX size="14" />
127
- </button>
128
- </span>
129
- }
130
- </div>
131
- }
132
- <div class="flex flex-wrap gap-1.5">
133
- @for (option of opciones(); track option.value) {
134
- @if (!isSelected(option.value)) {
135
- <button
136
- type="button"
137
- class="rounded-full border border-neutral/30 px-2.5 py-1 text-xs hover:border-primary disabled:cursor-not-allowed disabled:opacity-50"
138
- [disabled]="disabled() || (option.disabled ?? false)"
139
- (click)="toggle(option)"
140
- >
141
- {{ option.label }}
142
- </button>
143
- }
144
- }
145
- </div>
146
- </div>
147
- `,
148
- isInline: true,
149
- dependencies: [{
150
- kind: "component",
151
- type: LucideX,
152
- selector: "svg[lucideX]"
153
- }]
154
- });
155
- };
156
- i0.ɵɵngDeclareClassMetadata({
157
- minVersion: "12.0.0",
158
- version: "22.2.3",
159
- ngImport: i0,
160
- type: FieldMultiselect,
161
- decorators: [{
162
- type: Component,
163
- args: [{
164
- selector: "app-field-multiselect",
165
- imports: [LucideX],
166
- template: `
167
- <div class="space-y-2">
168
- @if (fallo()) {
169
- <p class="text-xs text-danger" role="alert">No se pudieron cargar las opciones.</p>
170
- } @else if (cargando()) {
171
- <p class="text-xs text-neutral" role="status">Cargando opciones…</p>
172
- }
173
- @if (value().length > 0) {
174
- <div class="flex flex-wrap gap-1.5" data-testid="multiselect-chips">
175
- @for (item of value(); track item) {
176
- <span
177
- class="inline-flex items-center rounded-full bg-primary/10 px-2.5 py-1 text-xs text-primary"
178
- >
179
- {{ labelOf(item) }}
180
- <button
181
- type="button"
182
- class="rounded-full px-0.5 hover:text-danger"
183
- [attr.aria-label]="'Quitar ' + labelOf(item)"
184
- [disabled]="disabled()"
185
- (click)="remove(item)"
186
- >
187
- <svg lucideX size="14" />
188
- </button>
189
- </span>
190
- }
191
- </div>
192
- }
193
- <div class="flex flex-wrap gap-1.5">
194
- @for (option of opciones(); track option.value) {
195
- @if (!isSelected(option.value)) {
196
- <button
197
- type="button"
198
- class="rounded-full border border-neutral/30 px-2.5 py-1 text-xs hover:border-primary disabled:cursor-not-allowed disabled:opacity-50"
199
- [disabled]="disabled() || (option.disabled ?? false)"
200
- (click)="toggle(option)"
201
- >
202
- {{ option.label }}
203
- </button>
204
- }
205
- }
206
- </div>
207
- </div>
208
- `
209
- }]
210
- }],
211
- propDecorators: {
212
- field: [{
213
- type: i0.Input,
214
- args: [{
215
- isSignal: true,
216
- alias: "field",
217
- required: true
218
- }]
219
- }],
220
- tree: [{
221
- type: i0.Input,
222
- args: [{
223
- isSignal: true,
224
- alias: "tree",
225
- required: false
226
- }]
227
- }],
228
- value: [{
229
- type: i0.Input,
230
- args: [{
231
- isSignal: true,
232
- alias: "value",
233
- required: true
234
- }]
235
- }, {
236
- type: i0.Output,
237
- args: ["valueChange"]
238
- }],
239
- disabled: [{
240
- type: i0.Input,
241
- args: [{
242
- isSignal: true,
243
- alias: "disabled",
244
- required: false
245
- }]
246
- }]
247
- }
248
- });
249
- export { multiselect_exports as n, FieldMultiselect as t };
250
-
251
- //# sourceMappingURL=tinya-code-gas-admin-ui-multiselect-PB28e-jl.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tinya-code-gas-admin-ui-multiselect-PB28e-jl.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/fields/multiselect/multiselect.ts"],"sourcesContent":["import { Component, computed, inject, input, model, resource } from '@angular/core';\nimport { LucideX } from '@lucide/angular';\nimport type { FormValueControl } from '@angular/forms/signals';\n\nimport type { MultiselectField, SelectOption } from '../../core/models/schema.model';\nimport { DataSourceService, dataSourceKey } from '../../core/services/data-source.service';\nimport { optionsFromRows } from '../../core/utils/source-options';\nimport { getSchema } from '../../core/registry/schema-catalog';\nimport type { RootTree } from '../field-node';\n\n/**\n * Selección múltiple con chips (base.md §5.1). `<select multiple>` no está\n * soportado por `[formField]`, así que es un control propio que cumple el\n * contrato `FormValueControl<string[]>`: el nodo llega desde el host con\n * `[formField]` y el valor se sincroniza por `model()`.\n *\n * Opciones: estáticas (`options`) o una fuente declarada (`source`), con la\n * misma regla XOR que el `select` y el mismo fetcher (F8 · R6.5). `tree`\n * existe para resolver `{campo}` en `source.params` con el registro del\n * formulario — sin él un multiselect con parámetros quedaría con el mismo\n * nombre de opción y otra regla que el select.\n */\n@Component({\n selector: 'app-field-multiselect',\n imports: [LucideX],\n template: `\n <div class=\"space-y-2\">\n @if (fallo()) {\n <p class=\"text-xs text-danger\" role=\"alert\">No se pudieron cargar las opciones.</p>\n } @else if (cargando()) {\n <p class=\"text-xs text-neutral\" role=\"status\">Cargando opciones…</p>\n }\n @if (value().length > 0) {\n <div class=\"flex flex-wrap gap-1.5\" data-testid=\"multiselect-chips\">\n @for (item of value(); track item) {\n <span\n class=\"inline-flex items-center rounded-full bg-primary/10 px-2.5 py-1 text-xs text-primary\"\n >\n {{ labelOf(item) }}\n <button\n type=\"button\"\n class=\"rounded-full px-0.5 hover:text-danger\"\n [attr.aria-label]=\"'Quitar ' + labelOf(item)\"\n [disabled]=\"disabled()\"\n (click)=\"remove(item)\"\n >\n <svg lucideX size=\"14\" />\n </button>\n </span>\n }\n </div>\n }\n <div class=\"flex flex-wrap gap-1.5\">\n @for (option of opciones(); track option.value) {\n @if (!isSelected(option.value)) {\n <button\n type=\"button\"\n class=\"rounded-full border border-neutral/30 px-2.5 py-1 text-xs hover:border-primary disabled:cursor-not-allowed disabled:opacity-50\"\n [disabled]=\"disabled() || (option.disabled ?? false)\"\n (click)=\"toggle(option)\"\n >\n {{ option.label }}\n </button>\n }\n }\n </div>\n </div>\n `,\n})\nexport class FieldMultiselect implements FormValueControl<string[]> {\n readonly field = input.required<MultiselectField>();\n\n /** Registro del formulario, sólo para resolver `{campo}` en `source.params`. */\n readonly tree = input<RootTree>();\n\n /** Sincronizado por el directive `FormField` del host. */\n readonly value = model.required<string[]>();\n readonly disabled = input(false);\n\n private readonly ds = inject(DataSourceService);\n\n private readonly registro = computed<Record<string, unknown> | undefined>(() => {\n const source = this.field().source;\n const tree = this.tree();\n if (source === undefined || source.params === undefined || tree === undefined) return undefined;\n return tree().value();\n });\n\n /** `undefined` sin fuente ⇒ `resource` queda idle y jamás llama al loader. */\n private readonly claveFuente = computed(() => {\n const source = this.field().source;\n return source === undefined ? undefined : dataSourceKey(source, this.registro());\n });\n\n private readonly fuenteResource = resource({\n params: () => this.claveFuente(),\n loader: async () => {\n const source = this.field().source;\n if (source === undefined) return [];\n return this.ds.rows(source, this.registro());\n },\n });\n\n /** Estáticas del schema o filas de la fuente declarada (F8 · R6.5). */\n protected readonly opciones = computed<SelectOption[]>(() => {\n const field = this.field();\n if (field.source === undefined) return field.options ?? [];\n // `value()` del resource TIRA en estado error (contract de Angular):\n // se mira el estado antes de leerlo, o el render rompe en vez de\n // pintar el aviso de fallo.\n if (this.fuenteResource.status() === 'error') return [];\n return optionsFromRows(this.fuenteResource.value() ?? [], {\n source: field.source,\n target: getSchema(field.source.resource),\n });\n });\n\n /** Sólo aplica con `source`: una lista estática no tiene vuelta que esperar. */\n protected readonly cargando = computed(\n () => this.claveFuente() !== undefined && this.fuenteResource.status() === 'loading',\n );\n\n protected readonly fallo = computed(\n () => this.claveFuente() !== undefined && this.fuenteResource.status() === 'error',\n );\n\n protected toggle(option: SelectOption): void {\n if (this.disabled()) {\n return;\n }\n this.value.update((current) =>\n current.includes(option.value)\n ? current.filter((item) => item !== option.value)\n : [...current, option.value],\n );\n }\n\n protected remove(item: string): void {\n if (this.disabled()) {\n return;\n }\n this.value.update((current) => current.filter((value) => value !== item));\n }\n\n protected isSelected(item: string): boolean {\n return this.value().includes(item);\n }\n\n protected labelOf(item: string): string {\n return this.opciones().find((option) => option.value === item)?.label ?? item;\n }\n}\n"],"mappings":"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"}
@@ -1,66 +0,0 @@
1
- import * as i0 from "@angular/core";
2
- import { Service, signal } from "@angular/core";
3
- var NotificationService = class NotificationService {
4
- toasts = signal([], ...ngDevMode ? [{ debugName: "toasts" }] : /* istanbul ignore next */ []);
5
- confirmation = signal(null, ...ngDevMode ? [{ debugName: "confirmation" }] : /* istanbul ignore next */ []);
6
- nextId = 1;
7
- pendingResolve = null;
8
- success(message) {
9
- this.push("success", message);
10
- }
11
- error(message) {
12
- this.push("error", message);
13
- }
14
- info(message) {
15
- this.push("info", message);
16
- }
17
- dismiss(id) {
18
- this.toasts.update((toasts) => toasts.filter((toast) => toast.id !== id));
19
- }
20
- confirm(options) {
21
- this.pendingResolve?.(false);
22
- this.confirmation.set(options);
23
- return new Promise((resolve) => {
24
- this.pendingResolve = resolve;
25
- });
26
- }
27
- resolveConfirmation(accepted) {
28
- this.confirmation.set(null);
29
- const resolve = this.pendingResolve;
30
- this.pendingResolve = null;
31
- resolve?.(accepted);
32
- }
33
- push(kind, message) {
34
- const id = this.nextId++;
35
- this.toasts.update((toasts) => [...toasts, {
36
- id,
37
- kind,
38
- message
39
- }]);
40
- if (kind !== "error") setTimeout(() => this.dismiss(id), 4e3);
41
- }
42
- static ɵfac = i0.ɵɵngDeclareFactory({
43
- minVersion: "12.0.0",
44
- version: "22.2.3",
45
- ngImport: i0,
46
- type: NotificationService,
47
- deps: [],
48
- target: i0.ɵɵFactoryTarget.Service
49
- });
50
- static ɵprov = i0.ɵɵngDeclareService({
51
- minVersion: "22.0.0",
52
- version: "22.2.3",
53
- ngImport: i0,
54
- type: NotificationService
55
- });
56
- };
57
- i0.ɵɵngDeclareClassMetadata({
58
- minVersion: "12.0.0",
59
- version: "22.2.3",
60
- ngImport: i0,
61
- type: NotificationService,
62
- decorators: [{ type: Service }]
63
- });
64
- export { NotificationService as t };
65
-
66
- //# sourceMappingURL=tinya-code-gas-admin-ui-notification.service-LjSULER6.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tinya-code-gas-admin-ui-notification.service-LjSULER6.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/core/services/notification.service.ts"],"sourcesContent":["import { Service, signal } from '@angular/core';\n\nexport type ToastKind = 'success' | 'error' | 'info';\n\nexport interface Toast {\n id: number;\n kind: ToastKind;\n message: string;\n}\n\nexport interface ConfirmOptions {\n title: string;\n message: string;\n confirmLabel?: string;\n cancelLabel?: string;\n}\n\n/**\n * Notificaciones de la app: toasts (señales, se renderizan en `app-toast`,\n * Fase 5) y un diálogo de confirmación con respuesta como `Promise`\n * (base.md §10: borrado con confirmación, aviso de cambios sin guardar).\n */\n@Service()\nexport class NotificationService {\n readonly toasts = signal<Toast[]>([]);\n /** Confirmación en curso; `null` = sin diálogo. */\n readonly confirmation = signal<ConfirmOptions | null>(null);\n\n private nextId = 1;\n private pendingResolve: ((accepted: boolean) => void) | null = null;\n\n success(message: string): void {\n this.push('success', message);\n }\n\n error(message: string): void {\n this.push('error', message);\n }\n\n info(message: string): void {\n this.push('info', message);\n }\n\n dismiss(id: number): void {\n this.toasts.update((toasts) => toasts.filter((toast) => toast.id !== id));\n }\n\n /** Abre el diálogo de confirmación y espera la respuesta del usuario. */\n confirm(options: ConfirmOptions): Promise<boolean> {\n // Solo una confirmación a la vez: la anterior se responde como rechazo.\n this.pendingResolve?.(false);\n this.confirmation.set(options);\n return new Promise<boolean>((resolve) => {\n this.pendingResolve = resolve;\n });\n }\n\n /** Resuelve la confirmación pendiente (lo llama el componente de diálogo, Fase 5). */\n resolveConfirmation(accepted: boolean): void {\n this.confirmation.set(null);\n const resolve = this.pendingResolve;\n this.pendingResolve = null;\n resolve?.(accepted);\n }\n\n private push(kind: ToastKind, message: string): void {\n const id = this.nextId++;\n this.toasts.update((toasts) => [...toasts, { id, kind, message }]);\n if (kind !== 'error') {\n setTimeout(() => this.dismiss(id), 4000);\n }\n }\n}\n"],"mappings":";;AAuBA,IAAa,sBAAb,MAAa,oBAAmB;CACrB,SAAS,OAAgB,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CAE5B,eAAe,OAA8B,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;CAEnD,SAAS;CACT,iBAAuD;CAE/D,QAAQ,SAAe;EACrB,KAAK,KAAK,WAAW,OAAO;CAC9B;CAEA,MAAM,SAAe;EACnB,KAAK,KAAK,SAAS,OAAO;CAC5B;CAEA,KAAK,SAAe;EAClB,KAAK,KAAK,QAAQ,OAAO;CAC3B;CAEA,QAAQ,IAAU;EAChB,KAAK,OAAO,QAAQ,WAAW,OAAO,QAAQ,UAAU,MAAM,OAAO,EAAE,CAAC;CAC1E;CAGA,QAAQ,SAAuB;EAE7B,KAAK,iBAAiB,KAAK;EAC3B,KAAK,aAAa,IAAI,OAAO;EAC7B,OAAO,IAAI,SAAkB,YAAW;GACtC,KAAK,iBAAiB;EACxB,CAAC;CACH;CAGA,oBAAoB,UAAiB;EACnC,KAAK,aAAa,IAAI,IAAI;EAC1B,MAAM,UAAU,KAAK;EACrB,KAAK,iBAAiB;EACtB,UAAU,QAAQ;CACpB;CAEQ,KAAK,MAAiB,SAAe;EAC3C,MAAM,KAAK,KAAK;EAChB,KAAK,OAAO,QAAQ,WAAW,CAAC,GAAG,QAAQ;GAAE;GAAI;GAAM;EAAO,CAAE,CAAC;EACjE,IAAI,SAAS,SACX,iBAAiB,KAAK,QAAQ,EAAE,GAAG,GAAI;CAE3C;CAhDW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAmB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAnB,OAAA,QAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;CAAmB,CAAA;;AAAnB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAmB,YAAA,CAAA,EAD/B,MAAA,QAAA,CAAA"}
@@ -1,114 +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 FieldNumber = class FieldNumber {
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
- stepAttr = computed(() => {
12
- const field = this.field();
13
- if (field.step !== void 0) return field.step;
14
- return field.decimals !== void 0 ? Math.pow(10, -field.decimals) : null;
15
- }, ...ngDevMode ? [{ debugName: "stepAttr" }] : /* istanbul ignore next */ []);
16
- static ɵfac = i0.ɵɵngDeclareFactory({
17
- minVersion: "12.0.0",
18
- version: "22.2.3",
19
- ngImport: i0,
20
- type: FieldNumber,
21
- deps: [],
22
- target: i0.ɵɵFactoryTarget.Component
23
- });
24
- static ɵcmp = i0.ɵɵngDeclareComponent({
25
- minVersion: "17.1.0",
26
- version: "22.2.3",
27
- type: FieldNumber,
28
- isStandalone: true,
29
- selector: "app-field-number",
30
- inputs: {
31
- field: {
32
- classPropertyName: "field",
33
- publicName: "field",
34
- isSignal: true,
35
- isRequired: true,
36
- transformFunction: null
37
- },
38
- tree: {
39
- classPropertyName: "tree",
40
- publicName: "tree",
41
- isSignal: true,
42
- isRequired: true,
43
- transformFunction: null
44
- }
45
- },
46
- ngImport: i0,
47
- template: `
48
- <input
49
- type="number"
50
- class="field-input"
51
- [id]="state().name()"
52
- [formField]="node()"
53
- [step]="stepAttr()"
54
- [placeholder]="field().placeholder ?? ''"
55
- />
56
- `,
57
- isInline: true,
58
- dependencies: [{
59
- kind: "directive",
60
- type: FieldAria,
61
- selector: "input[id], select[id], textarea[id], output[id]"
62
- }, {
63
- kind: "directive",
64
- type: FormField,
65
- selector: "[formField]",
66
- inputs: ["formField"],
67
- exportAs: ["formField"]
68
- }]
69
- });
70
- };
71
- i0.ɵɵngDeclareClassMetadata({
72
- minVersion: "12.0.0",
73
- version: "22.2.3",
74
- ngImport: i0,
75
- type: FieldNumber,
76
- decorators: [{
77
- type: Component,
78
- args: [{
79
- selector: "app-field-number",
80
- imports: [FieldAria, FormField],
81
- template: `
82
- <input
83
- type="number"
84
- class="field-input"
85
- [id]="state().name()"
86
- [formField]="node()"
87
- [step]="stepAttr()"
88
- [placeholder]="field().placeholder ?? ''"
89
- />
90
- `
91
- }]
92
- }],
93
- propDecorators: {
94
- field: [{
95
- type: i0.Input,
96
- args: [{
97
- isSignal: true,
98
- alias: "field",
99
- required: true
100
- }]
101
- }],
102
- tree: [{
103
- type: i0.Input,
104
- args: [{
105
- isSignal: true,
106
- alias: "tree",
107
- required: true
108
- }]
109
- }]
110
- }
111
- });
112
- export { FieldNumber };
113
-
114
- //# sourceMappingURL=tinya-code-gas-admin-ui-number-JNr7glc8.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tinya-code-gas-admin-ui-number-JNr7glc8.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/fields/number/number.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\n\nimport type { NumberField } from '../../core/models/schema.model';\nimport { FieldAria } from '../field-aria';\nimport { childTree, type RootTree } from '../field-node';\n\n/**\n * Input numérico (base.md §5.1). `step` sale del tipo o de `decimals`;\n * `min`/`max` los gestiona `FormField` desde las reglas (Fase 10).\n */\n@Component({\n selector: 'app-field-number',\n imports: [FieldAria, FormField],\n template: `\n <input\n type=\"number\"\n class=\"field-input\"\n [id]=\"state().name()\"\n [formField]=\"node()\"\n [step]=\"stepAttr()\"\n [placeholder]=\"field().placeholder ?? ''\"\n />\n `,\n})\nexport class FieldNumber {\n readonly field = input.required<NumberField>();\n readonly tree = input.required<RootTree>();\n\n protected readonly node = computed(() => childTree<number>(this.tree(), this.field().key));\n protected readonly state = computed(() => this.node()());\n\n protected readonly stepAttr = computed<number | null>(() => {\n const field = this.field();\n if (field.step !== undefined) {\n return field.step;\n }\n return field.decimals !== undefined ? Math.pow(10, -field.decimals) : null;\n });\n}\n"],"mappings":";;;;;AAyBA,IAAa,cAAb,MAAa,YAAW;CACb,QAAQ,MAAM,SAAuB,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CACrC,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;CAErC,WAAW,eAA6B;EACzD,MAAM,QAAQ,KAAK,MAAK;EACxB,IAAI,MAAM,SAAS,QACjB,OAAO,MAAM;EAEf,OAAO,MAAM,aAAa,SAAY,KAAK,IAAI,IAAI,CAAC,MAAM,QAAQ,IAAI;CACxE,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAbS,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAW,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAX,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAW,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,UAXZ;;;;;;;;;;EAST,UAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MAVS;GAAS,UAAA;EAAA,GAAA;GAAA,MAAA;GAAA,MAAE;GAAS,UAAA;GAAA,QAAA,CAAA,WAAA;GAAA,UAAA,CAAA,WAAA;EAAA,CAAA;CAAA,CAAA;;AAYnB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAW,YAAA,CAAA;EAdvB,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,SAAS,CAAC,WAAW,SAAS;GAC9B,UAAU;;;;;;;;;;EAUX,CAAA"}