@tinya-code/gas-admin-ui 0.0.0-stage → 0.1.0-alpha.1

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 (136) hide show
  1. package/README.md +63 -2
  2. package/fesm2022/tinya-code-gas-admin-ui-api.service-CZrUeclM.mjs +281 -0
  3. package/fesm2022/tinya-code-gas-admin-ui-api.service-CZrUeclM.mjs.map +1 -0
  4. package/fesm2022/tinya-code-gas-admin-ui-badge-EeCA_l-o.mjs +84 -0
  5. package/fesm2022/tinya-code-gas-admin-ui-badge-EeCA_l-o.mjs.map +1 -0
  6. package/fesm2022/tinya-code-gas-admin-ui-bar-chart-G7sEMSBY.mjs +140 -0
  7. package/fesm2022/tinya-code-gas-admin-ui-bar-chart-G7sEMSBY.mjs.map +1 -0
  8. package/fesm2022/tinya-code-gas-admin-ui-boolean-B2ASKL0E.mjs +113 -0
  9. package/fesm2022/tinya-code-gas-admin-ui-boolean-B2ASKL0E.mjs.map +1 -0
  10. package/fesm2022/tinya-code-gas-admin-ui-button-BQjNW8KB.mjs +163 -0
  11. package/fesm2022/tinya-code-gas-admin-ui-button-BQjNW8KB.mjs.map +1 -0
  12. package/fesm2022/tinya-code-gas-admin-ui-calendar-view-r-RXDE37.mjs +1022 -0
  13. package/fesm2022/tinya-code-gas-admin-ui-calendar-view-r-RXDE37.mjs.map +1 -0
  14. package/fesm2022/tinya-code-gas-admin-ui-chart-line-BjdlKHoH.mjs +278 -0
  15. package/fesm2022/tinya-code-gas-admin-ui-chart-line-BjdlKHoH.mjs.map +1 -0
  16. package/fesm2022/tinya-code-gas-admin-ui-condition-evaluator-BBzWUuHl.mjs +101 -0
  17. package/fesm2022/tinya-code-gas-admin-ui-condition-evaluator-BBzWUuHl.mjs.map +1 -0
  18. package/fesm2022/tinya-code-gas-admin-ui-currency-BvuF3Z63.mjs +141 -0
  19. package/fesm2022/tinya-code-gas-admin-ui-currency-BvuF3Z63.mjs.map +1 -0
  20. package/fesm2022/tinya-code-gas-admin-ui-data-source.service-LD8AM3Rn.mjs +89 -0
  21. package/fesm2022/tinya-code-gas-admin-ui-data-source.service-LD8AM3Rn.mjs.map +1 -0
  22. package/fesm2022/tinya-code-gas-admin-ui-date-1SJGXZrd.mjs +107 -0
  23. package/fesm2022/tinya-code-gas-admin-ui-date-1SJGXZrd.mjs.map +1 -0
  24. package/fesm2022/tinya-code-gas-admin-ui-display-badge-fwk6sDU7.mjs +140 -0
  25. package/fesm2022/tinya-code-gas-admin-ui-display-badge-fwk6sDU7.mjs.map +1 -0
  26. package/fesm2022/tinya-code-gas-admin-ui-display-date-D7zLiDiG.mjs +119 -0
  27. package/fesm2022/tinya-code-gas-admin-ui-display-date-D7zLiDiG.mjs.map +1 -0
  28. package/fesm2022/tinya-code-gas-admin-ui-display-file-BiIhqvQC.mjs +125 -0
  29. package/fesm2022/tinya-code-gas-admin-ui-display-file-BiIhqvQC.mjs.map +1 -0
  30. package/fesm2022/tinya-code-gas-admin-ui-display-image-C1dhnZi1.mjs +152 -0
  31. package/fesm2022/tinya-code-gas-admin-ui-display-image-C1dhnZi1.mjs.map +1 -0
  32. package/fesm2022/tinya-code-gas-admin-ui-display-list-DOEuUbGe.mjs +211 -0
  33. package/fesm2022/tinya-code-gas-admin-ui-display-list-DOEuUbGe.mjs.map +1 -0
  34. package/fesm2022/tinya-code-gas-admin-ui-display-number-DDMzr4Hn.mjs +116 -0
  35. package/fesm2022/tinya-code-gas-admin-ui-display-number-DDMzr4Hn.mjs.map +1 -0
  36. package/fesm2022/tinya-code-gas-admin-ui-display-text-B8CdVNpv.mjs +111 -0
  37. package/fesm2022/tinya-code-gas-admin-ui-display-text-B8CdVNpv.mjs.map +1 -0
  38. package/fesm2022/tinya-code-gas-admin-ui-email-CT_O5ihA.mjs +107 -0
  39. package/fesm2022/tinya-code-gas-admin-ui-email-CT_O5ihA.mjs.map +1 -0
  40. package/fesm2022/tinya-code-gas-admin-ui-empty-state-BMc0QtoT.mjs +109 -0
  41. package/fesm2022/tinya-code-gas-admin-ui-empty-state-BMc0QtoT.mjs.map +1 -0
  42. package/fesm2022/tinya-code-gas-admin-ui-error-mapper.service-Ci0UpXtV.mjs +45 -0
  43. package/fesm2022/tinya-code-gas-admin-ui-error-mapper.service-Ci0UpXtV.mjs.map +1 -0
  44. package/fesm2022/tinya-code-gas-admin-ui-field-aria-BD1Wiggc.mjs +50 -0
  45. package/fesm2022/tinya-code-gas-admin-ui-field-aria-BD1Wiggc.mjs.map +1 -0
  46. package/fesm2022/tinya-code-gas-admin-ui-field-node-CIK6KNN_.mjs +24 -0
  47. package/fesm2022/tinya-code-gas-admin-ui-field-node-CIK6KNN_.mjs.map +1 -0
  48. package/fesm2022/tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs +27 -0
  49. package/fesm2022/tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs.map +1 -0
  50. package/fesm2022/tinya-code-gas-admin-ui-file-Dg2N3XQ2.mjs +408 -0
  51. package/fesm2022/tinya-code-gas-admin-ui-file-Dg2N3XQ2.mjs.map +1 -0
  52. package/fesm2022/tinya-code-gas-admin-ui-form-view-BwGupSbi.mjs +4514 -0
  53. package/fesm2022/tinya-code-gas-admin-ui-form-view-BwGupSbi.mjs.map +1 -0
  54. package/fesm2022/tinya-code-gas-admin-ui-format-badge-CK8ct5Wk.mjs +82 -0
  55. package/fesm2022/tinya-code-gas-admin-ui-format-badge-CK8ct5Wk.mjs.map +1 -0
  56. package/fesm2022/tinya-code-gas-admin-ui-format-boolean-ClzezZz-.mjs +105 -0
  57. package/fesm2022/tinya-code-gas-admin-ui-format-boolean-ClzezZz-.mjs.map +1 -0
  58. package/fesm2022/tinya-code-gas-admin-ui-format-currency-CVmniKml.mjs +65 -0
  59. package/fesm2022/tinya-code-gas-admin-ui-format-currency-CVmniKml.mjs.map +1 -0
  60. package/fesm2022/tinya-code-gas-admin-ui-format-date-Dr1YsDd_.mjs +65 -0
  61. package/fesm2022/tinya-code-gas-admin-ui-format-date-Dr1YsDd_.mjs.map +1 -0
  62. package/fesm2022/tinya-code-gas-admin-ui-format-number-CWCjpI4n.mjs +65 -0
  63. package/fesm2022/tinya-code-gas-admin-ui-format-number-CWCjpI4n.mjs.map +1 -0
  64. package/fesm2022/tinya-code-gas-admin-ui-format-text-DBOgJkH0.mjs +59 -0
  65. package/fesm2022/tinya-code-gas-admin-ui-format-text-DBOgJkH0.mjs.map +1 -0
  66. package/fesm2022/tinya-code-gas-admin-ui-format-thumbnail-PCRvxWKt.mjs +94 -0
  67. package/fesm2022/tinya-code-gas-admin-ui-format-thumbnail-PCRvxWKt.mjs.map +1 -0
  68. package/fesm2022/tinya-code-gas-admin-ui-gap-sorting-iTdy_DYG.mjs +72 -0
  69. package/fesm2022/tinya-code-gas-admin-ui-gap-sorting-iTdy_DYG.mjs.map +1 -0
  70. package/fesm2022/tinya-code-gas-admin-ui-group-h7-O8tt4.mjs +238 -0
  71. package/fesm2022/tinya-code-gas-admin-ui-group-h7-O8tt4.mjs.map +1 -0
  72. package/fesm2022/tinya-code-gas-admin-ui-image-Bjw9ImlS.mjs +416 -0
  73. package/fesm2022/tinya-code-gas-admin-ui-image-Bjw9ImlS.mjs.map +1 -0
  74. package/fesm2022/tinya-code-gas-admin-ui-kanban-view-CeGueI57.mjs +439 -0
  75. package/fesm2022/tinya-code-gas-admin-ui-kanban-view-CeGueI57.mjs.map +1 -0
  76. package/fesm2022/tinya-code-gas-admin-ui-key-value-nVdgg5at.mjs +513 -0
  77. package/fesm2022/tinya-code-gas-admin-ui-key-value-nVdgg5at.mjs.map +1 -0
  78. package/fesm2022/tinya-code-gas-admin-ui-list-CMzl9MkX.mjs +637 -0
  79. package/fesm2022/tinya-code-gas-admin-ui-list-CMzl9MkX.mjs.map +1 -0
  80. package/fesm2022/tinya-code-gas-admin-ui-metric-card-DnGMQL8l.mjs +127 -0
  81. package/fesm2022/tinya-code-gas-admin-ui-metric-card-DnGMQL8l.mjs.map +1 -0
  82. package/fesm2022/tinya-code-gas-admin-ui-multiselect-CuWwAfdY.mjs +251 -0
  83. package/fesm2022/tinya-code-gas-admin-ui-multiselect-CuWwAfdY.mjs.map +1 -0
  84. package/fesm2022/tinya-code-gas-admin-ui-notification.service-LjSULER6.mjs +66 -0
  85. package/fesm2022/tinya-code-gas-admin-ui-notification.service-LjSULER6.mjs.map +1 -0
  86. package/fesm2022/tinya-code-gas-admin-ui-number-JNr7glc8.mjs +114 -0
  87. package/fesm2022/tinya-code-gas-admin-ui-number-JNr7glc8.mjs.map +1 -0
  88. package/fesm2022/tinya-code-gas-admin-ui-phone-jR417hPf.mjs +116 -0
  89. package/fesm2022/tinya-code-gas-admin-ui-phone-jR417hPf.mjs.map +1 -0
  90. package/fesm2022/tinya-code-gas-admin-ui-quick-actions-DCQ6emmF.mjs +235 -0
  91. package/fesm2022/tinya-code-gas-admin-ui-quick-actions-DCQ6emmF.mjs.map +1 -0
  92. package/fesm2022/tinya-code-gas-admin-ui-radio-mode-DxvN07DY.mjs +8 -0
  93. package/fesm2022/tinya-code-gas-admin-ui-radio-mode-DxvN07DY.mjs.map +1 -0
  94. package/fesm2022/tinya-code-gas-admin-ui-readonly-text-BL7-4qie.mjs +124 -0
  95. package/fesm2022/tinya-code-gas-admin-ui-readonly-text-BL7-4qie.mjs.map +1 -0
  96. package/fesm2022/tinya-code-gas-admin-ui-record-list-BiZfnd_7.mjs +249 -0
  97. package/fesm2022/tinya-code-gas-admin-ui-record-list-BiZfnd_7.mjs.map +1 -0
  98. package/fesm2022/tinya-code-gas-admin-ui-relation-B3W3Ynsp.mjs +309 -0
  99. package/fesm2022/tinya-code-gas-admin-ui-relation-B3W3Ynsp.mjs.map +1 -0
  100. package/fesm2022/tinya-code-gas-admin-ui-relation-drawer.service-B0kT8EiW.mjs +39 -0
  101. package/fesm2022/tinya-code-gas-admin-ui-relation-drawer.service-B0kT8EiW.mjs.map +1 -0
  102. package/fesm2022/tinya-code-gas-admin-ui-render-registry-B_D5Jhp9.mjs +546 -0
  103. package/fesm2022/tinya-code-gas-admin-ui-render-registry-B_D5Jhp9.mjs.map +1 -0
  104. package/fesm2022/tinya-code-gas-admin-ui-rolldown-runtime-DpJrqANO.mjs +11 -0
  105. package/fesm2022/tinya-code-gas-admin-ui-schema-catalog-CDrz9pVN.mjs +131 -0
  106. package/fesm2022/tinya-code-gas-admin-ui-schema-catalog-CDrz9pVN.mjs.map +1 -0
  107. package/fesm2022/tinya-code-gas-admin-ui-seed-CNbQtREA.mjs +80 -0
  108. package/fesm2022/tinya-code-gas-admin-ui-seed-CNbQtREA.mjs.map +1 -0
  109. package/fesm2022/tinya-code-gas-admin-ui-select-DzaRfHXO.mjs +292 -0
  110. package/fesm2022/tinya-code-gas-admin-ui-select-DzaRfHXO.mjs.map +1 -0
  111. package/fesm2022/tinya-code-gas-admin-ui-skeleton-DnWK0tcZ.mjs +119 -0
  112. package/fesm2022/tinya-code-gas-admin-ui-skeleton-DnWK0tcZ.mjs.map +1 -0
  113. package/fesm2022/tinya-code-gas-admin-ui-slug-DU58cbiY.mjs +158 -0
  114. package/fesm2022/tinya-code-gas-admin-ui-slug-DU58cbiY.mjs.map +1 -0
  115. package/fesm2022/tinya-code-gas-admin-ui-source-options-B9R4mw8-.mjs +26 -0
  116. package/fesm2022/tinya-code-gas-admin-ui-source-options-B9R4mw8-.mjs.map +1 -0
  117. package/fesm2022/tinya-code-gas-admin-ui-status-progress-DmeG8htE.mjs +205 -0
  118. package/fesm2022/tinya-code-gas-admin-ui-status-progress-DmeG8htE.mjs.map +1 -0
  119. package/fesm2022/tinya-code-gas-admin-ui-string-list-gleasqzD.mjs +432 -0
  120. package/fesm2022/tinya-code-gas-admin-ui-string-list-gleasqzD.mjs.map +1 -0
  121. package/fesm2022/tinya-code-gas-admin-ui-template-interpolator-ewv7CkNX.mjs +36 -0
  122. package/fesm2022/tinya-code-gas-admin-ui-template-interpolator-ewv7CkNX.mjs.map +1 -0
  123. package/fesm2022/tinya-code-gas-admin-ui-text-CUPmL7W_.mjs +107 -0
  124. package/fesm2022/tinya-code-gas-admin-ui-text-CUPmL7W_.mjs.map +1 -0
  125. package/fesm2022/tinya-code-gas-admin-ui-textarea-CGLSIW13.mjs +223 -0
  126. package/fesm2022/tinya-code-gas-admin-ui-textarea-CGLSIW13.mjs.map +1 -0
  127. package/fesm2022/tinya-code-gas-admin-ui-time-BcHzsTWf.mjs +107 -0
  128. package/fesm2022/tinya-code-gas-admin-ui-time-BcHzsTWf.mjs.map +1 -0
  129. package/fesm2022/tinya-code-gas-admin-ui-upload.service-C1g545w5.mjs +60 -0
  130. package/fesm2022/tinya-code-gas-admin-ui-upload.service-C1g545w5.mjs.map +1 -0
  131. package/fesm2022/tinya-code-gas-admin-ui-url-GO4LZi__.mjs +141 -0
  132. package/fesm2022/tinya-code-gas-admin-ui-url-GO4LZi__.mjs.map +1 -0
  133. package/fesm2022/tinya-code-gas-admin-ui.mjs +4400 -0
  134. package/fesm2022/tinya-code-gas-admin-ui.mjs.map +1 -0
  135. package/package.json +31 -3
  136. package/types/tinya-code-gas-admin-ui.d.ts +3091 -0
@@ -0,0 +1,82 @@
1
+ import { t as getValue } from "./tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs";
2
+ import { t as Badge } from "./tinya-code-gas-admin-ui-badge-EeCA_l-o.mjs";
3
+ import { n as resolveBadgeKind } from "./tinya-code-gas-admin-ui-display-badge-fwk6sDU7.mjs";
4
+ import * as i0 from "@angular/core";
5
+ import { Component, computed, input } from "@angular/core";
6
+ var ColumnFormatBadge = class ColumnFormatBadge {
7
+ cell = input.required(...ngDevMode ? [{ debugName: "cell" }] : /* istanbul ignore next */ []);
8
+ badge = computed(() => badgeInfo(this.cell()), ...ngDevMode ? [{ debugName: "badge" }] : /* istanbul ignore next */ []);
9
+ static ɵfac = i0.ɵɵngDeclareFactory({
10
+ minVersion: "12.0.0",
11
+ version: "22.2.3",
12
+ ngImport: i0,
13
+ type: ColumnFormatBadge,
14
+ deps: [],
15
+ target: i0.ɵɵFactoryTarget.Component
16
+ });
17
+ static ɵcmp = i0.ɵɵngDeclareComponent({
18
+ minVersion: "17.1.0",
19
+ version: "22.2.3",
20
+ type: ColumnFormatBadge,
21
+ isStandalone: true,
22
+ selector: "app-column-format-badge",
23
+ inputs: { cell: {
24
+ classPropertyName: "cell",
25
+ publicName: "cell",
26
+ isSignal: true,
27
+ isRequired: true,
28
+ transformFunction: null
29
+ } },
30
+ ngImport: i0,
31
+ template: `<app-badge [label]="badge().label" [kind]="badge().kind" />`,
32
+ isInline: true,
33
+ dependencies: [{
34
+ kind: "component",
35
+ type: Badge,
36
+ selector: "app-badge",
37
+ inputs: ["label", "kind"]
38
+ }]
39
+ });
40
+ };
41
+ i0.ɵɵngDeclareClassMetadata({
42
+ minVersion: "12.0.0",
43
+ version: "22.2.3",
44
+ ngImport: i0,
45
+ type: ColumnFormatBadge,
46
+ decorators: [{
47
+ type: Component,
48
+ args: [{
49
+ selector: "app-column-format-badge",
50
+ imports: [Badge],
51
+ template: `<app-badge [label]="badge().label" [kind]="badge().kind" />`
52
+ }]
53
+ }],
54
+ propDecorators: { cell: [{
55
+ type: i0.Input,
56
+ args: [{
57
+ isSignal: true,
58
+ alias: "cell",
59
+ required: true
60
+ }]
61
+ }] }
62
+ });
63
+ function badgeInfo(cell) {
64
+ const value = getValue(cell.row, cell.column.key);
65
+ const field = cell.fields.find((candidate) => candidate.key === cell.column.key);
66
+ if (typeof value === "boolean") return {
67
+ label: value === true ? (field?.type === "boolean" ? field.trueLabel : void 0) ?? "Sí" : (field?.type === "boolean" ? field.falseLabel : void 0) ?? "No",
68
+ kind: value ? "success" : "danger"
69
+ };
70
+ const text = value == null ? "" : String(value);
71
+ if (text === "") return {
72
+ label: "Sin dato",
73
+ kind: "danger"
74
+ };
75
+ return {
76
+ label: field?.type === "select" ? field.options?.find((option) => option.value === text)?.label ?? text : text,
77
+ kind: resolveBadgeKind(text)
78
+ };
79
+ }
80
+ export { ColumnFormatBadge, badgeInfo };
81
+
82
+ //# sourceMappingURL=tinya-code-gas-admin-ui-format-badge-CK8ct5Wk.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinya-code-gas-admin-ui-format-badge-CK8ct5Wk.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/columns/format-badge.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\n\nimport { Badge, type BadgeKind } from '../shared/components/badge/badge';\nimport { resolveBadgeKind } from '../fields/display/display-badge';\nimport type { SelectField } from '../core/models/schema.model';\nimport { getValue } from '../shared/utils/field-path';\nimport type { ColumnCell } from './column-cell';\n\n/**\n * Formato `badge` (R4.3, afinado en R4.4).\n *\n * Un booleano usa `trueLabel`/`falseLabel` del campo (o «Sí»/«No») con\n * `success`/`danger` — el vocabulario de la lista para el control que\n * permite escribir. El vacío sigue siendo «Sin dato»/`danger`.\n *\n * El resto alinea el chip con el display del detalle (D41): un `select`\n * pinta la **etiqueta** de la opción y los estados se clasifican con\n * `resolveBadgeKind`, el mismo criterio que la cabecera de la ficha —\n * antes, toda columna declarada `badge` salía verde sin mirar el valor.\n */\n@Component({\n selector: 'app-column-format-badge',\n imports: [Badge],\n template: `<app-badge [label]=\"badge().label\" [kind]=\"badge().kind\" />`,\n})\nexport class ColumnFormatBadge {\n readonly cell = input.required<ColumnCell>();\n\n protected readonly badge = computed(() => badgeInfo(this.cell()));\n}\n\nexport function badgeInfo(cell: ColumnCell): { label: string; kind: BadgeKind } {\n const value = getValue(cell.row, cell.column.key);\n const field = cell.fields.find((candidate) => candidate.key === cell.column.key);\n if (typeof value === 'boolean') {\n const label =\n value === true\n ? ((field?.type === 'boolean' ? field.trueLabel : undefined) ?? 'Sí')\n : ((field?.type === 'boolean' ? field.falseLabel : undefined) ?? 'No');\n return { label, kind: value ? 'success' : 'danger' };\n }\n const text = value == null ? '' : String(value);\n if (text === '') {\n return { label: 'Sin dato', kind: 'danger' };\n }\n const etiqueta =\n field?.type === 'select'\n ? ((field as SelectField).options?.find((option) => option.value === text)?.label ?? text)\n : text;\n return { label: etiqueta, kind: resolveBadgeKind(text) };\n}\n"],"mappings":";;;;;AAyBA,IAAa,oBAAb,MAAa,kBAAiB;CACnB,OAAO,MAAM,SAAsB,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAEzB,QAAQ,eAAe,UAAU,KAAK,KAAI,CAAE,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAHtD,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAiB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAjB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAiB,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,MAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,UAAA;EAAA,UAFlB;EAA6D,UAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MAD7D;GAAK,UAAA;GAAA,QAAA,CAAA,SAAA,MAAA;EAAA,CAAA;CAAA,CAAA;;AAGJ,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAiB,YAAA,CAAA;EAL7B,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,SAAS,CAAC,KAAK;GACf,UAAU;EACX,CAAA;;;;;;;;;;;AAOD,SAAgB,UAAU,MAAgB;CACxC,MAAM,QAAQ,SAAS,KAAK,KAAK,KAAK,OAAO,GAAG;CAChD,MAAM,QAAQ,KAAK,OAAO,MAAM,cAAc,UAAU,QAAQ,KAAK,OAAO,GAAG;CAC/E,IAAI,OAAO,UAAU,WAKnB,OAAO;EAAE,OAHP,UAAU,QACJ,OAAO,SAAS,YAAY,MAAM,YAAY,WAAc,QAC5D,OAAO,SAAS,YAAY,MAAM,aAAa,WAAc;EACrD,MAAM,QAAQ,YAAY;CAAQ;CAEpD,MAAM,OAAO,SAAS,OAAO,KAAK,OAAO,KAAK;CAC9C,IAAI,SAAS,IACX,OAAO;EAAE,OAAO;EAAY,MAAM;CAAQ;CAM5C,OAAO;EAAE,OAHP,OAAO,SAAS,WACV,MAAsB,SAAS,MAAM,WAAW,OAAO,UAAU,IAAI,CAAC,EAAE,SAAS,OACnF;EACoB,MAAM,iBAAiB,IAAI;CAAC;AACxD"}
@@ -0,0 +1,105 @@
1
+ import { t as getValue } from "./tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs";
2
+ import { t as Badge } from "./tinya-code-gas-admin-ui-badge-EeCA_l-o.mjs";
3
+ import { badgeInfo } from "./tinya-code-gas-admin-ui-format-badge-CK8ct5Wk.mjs";
4
+ import * as i0 from "@angular/core";
5
+ import { Component, computed, input } from "@angular/core";
6
+ var ColumnFormatBoolean = class ColumnFormatBoolean {
7
+ cell = input.required(...ngDevMode ? [{ debugName: "cell" }] : /* istanbul ignore next */ []);
8
+ badge = computed(() => badgeInfo(this.cell()), ...ngDevMode ? [{ debugName: "badge" }] : /* istanbul ignore next */ []);
9
+ valor = computed(() => {
10
+ const value = getValue(this.cell().row, this.cell().column.key);
11
+ return value === true || value === "true";
12
+ }, ...ngDevMode ? [{ debugName: "valor" }] : /* istanbul ignore next */ []);
13
+ esInterruptor = computed(() => {
14
+ const cell = this.cell();
15
+ if (cell.column.key !== "active" || !cell.canUpdate) return false;
16
+ return cell.fields.some((field) => field.type === "boolean" && field.key === "active");
17
+ }, ...ngDevMode ? [{ debugName: "esInterruptor" }] : /* istanbul ignore next */ []);
18
+ alternar(event) {
19
+ this.cell().toggle?.(event.target.checked);
20
+ }
21
+ static ɵfac = i0.ɵɵngDeclareFactory({
22
+ minVersion: "12.0.0",
23
+ version: "22.2.3",
24
+ ngImport: i0,
25
+ type: ColumnFormatBoolean,
26
+ deps: [],
27
+ target: i0.ɵɵFactoryTarget.Component
28
+ });
29
+ static ɵcmp = i0.ɵɵngDeclareComponent({
30
+ minVersion: "17.0.0",
31
+ version: "22.2.3",
32
+ type: ColumnFormatBoolean,
33
+ isStandalone: true,
34
+ selector: "app-column-format-boolean",
35
+ inputs: { cell: {
36
+ classPropertyName: "cell",
37
+ publicName: "cell",
38
+ isSignal: true,
39
+ isRequired: true,
40
+ transformFunction: null
41
+ } },
42
+ ngImport: i0,
43
+ template: `
44
+ @if (esInterruptor()) {
45
+ <input
46
+ type="checkbox"
47
+ class="size-5 cursor-pointer accent-primary"
48
+ [checked]="valor()"
49
+ [disabled]="cell().saving"
50
+ [attr.aria-label]="cell().column.label + ': ' + cell().title"
51
+ (click)="$event.stopPropagation()"
52
+ (change)="alternar($event)"
53
+ />
54
+ } @else {
55
+ <app-badge [label]="badge().label" [kind]="badge().kind" />
56
+ }
57
+ `,
58
+ isInline: true,
59
+ dependencies: [{
60
+ kind: "component",
61
+ type: Badge,
62
+ selector: "app-badge",
63
+ inputs: ["label", "kind"]
64
+ }]
65
+ });
66
+ };
67
+ i0.ɵɵngDeclareClassMetadata({
68
+ minVersion: "12.0.0",
69
+ version: "22.2.3",
70
+ ngImport: i0,
71
+ type: ColumnFormatBoolean,
72
+ decorators: [{
73
+ type: Component,
74
+ args: [{
75
+ selector: "app-column-format-boolean",
76
+ imports: [Badge],
77
+ template: `
78
+ @if (esInterruptor()) {
79
+ <input
80
+ type="checkbox"
81
+ class="size-5 cursor-pointer accent-primary"
82
+ [checked]="valor()"
83
+ [disabled]="cell().saving"
84
+ [attr.aria-label]="cell().column.label + ': ' + cell().title"
85
+ (click)="$event.stopPropagation()"
86
+ (change)="alternar($event)"
87
+ />
88
+ } @else {
89
+ <app-badge [label]="badge().label" [kind]="badge().kind" />
90
+ }
91
+ `
92
+ }]
93
+ }],
94
+ propDecorators: { cell: [{
95
+ type: i0.Input,
96
+ args: [{
97
+ isSignal: true,
98
+ alias: "cell",
99
+ required: true
100
+ }]
101
+ }] }
102
+ });
103
+ export { ColumnFormatBoolean };
104
+
105
+ //# sourceMappingURL=tinya-code-gas-admin-ui-format-boolean-ClzezZz-.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinya-code-gas-admin-ui-format-boolean-ClzezZz-.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/columns/format-boolean.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\n\nimport { Badge } from '../shared/components/badge/badge';\nimport { getValue } from '../shared/utils/field-path';\nimport type { ColumnCell } from './column-cell';\nimport { badgeInfo } from './format-badge';\n\n/**\n * Formato `boolean` (R4.3): interruptor o badge.\n *\n * Es la rama `@case ('boolean')` de `list-view`, con una sola diferencia de\n * domicilio: hoy sólo monta este componente si el formato efectivo ya es\n * `boolean`, así que la comprobación `column.format === 'boolean'` que hacía\n * `isSwitchColumn` sobra. El criterio restante — `active` booleano y con\n * permiso de edición (base.md §10) — vive acá, que es quien dibuja el control.\n */\n@Component({\n selector: 'app-column-format-boolean',\n imports: [Badge],\n template: `\n @if (esInterruptor()) {\n <input\n type=\"checkbox\"\n class=\"size-5 cursor-pointer accent-primary\"\n [checked]=\"valor()\"\n [disabled]=\"cell().saving\"\n [attr.aria-label]=\"cell().column.label + ': ' + cell().title\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"alternar($event)\"\n />\n } @else {\n <app-badge [label]=\"badge().label\" [kind]=\"badge().kind\" />\n }\n `,\n})\nexport class ColumnFormatBoolean {\n readonly cell = input.required<ColumnCell>();\n\n protected readonly badge = computed(() => badgeInfo(this.cell()));\n\n protected readonly valor = computed(() => {\n const value = getValue(this.cell().row, this.cell().column.key);\n return value === true || value === 'true';\n });\n\n /** `active` declarado como boolean en el schema → interruptor (base.md §10). */\n protected readonly esInterruptor = computed(() => {\n const cell = this.cell();\n if (cell.column.key !== 'active' || !cell.canUpdate) {\n return false;\n }\n return cell.fields.some((field) => field.type === 'boolean' && field.key === 'active');\n });\n\n protected alternar(event: Event): void {\n this.cell().toggle?.((event.target as HTMLInputElement).checked);\n }\n}\n"],"mappings":";;;;;AAmCA,IAAa,sBAAb,MAAa,oBAAmB;CACrB,OAAO,MAAM,SAAsB,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAEzB,QAAQ,eAAe,UAAU,KAAK,KAAI,CAAE,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAE9C,QAAQ,eAAc;EACvC,MAAM,QAAQ,SAAS,KAAK,KAAI,CAAE,CAAC,KAAK,KAAK,KAAI,CAAE,CAAC,OAAO,GAAG;EAC9D,OAAO,UAAU,QAAQ,UAAU;CACrC,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAGiB,gBAAgB,eAAc;EAC/C,MAAM,OAAO,KAAK,KAAI;EACtB,IAAI,KAAK,OAAO,QAAQ,YAAY,CAAC,KAAK,WACxC,OAAO;EAET,OAAO,KAAK,OAAO,MAAM,UAAU,MAAM,SAAS,aAAa,MAAM,QAAQ,QAAQ;CACvF,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;CAEQ,SAAS,OAAY;EAC7B,KAAK,KAAI,CAAE,CAAC,SAAU,MAAM,OAA4B,OAAO;CACjE;CArBW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAmB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAnB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAmB,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,MAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,UAAA;EAAA,UAhBpB;;;;;;;;;;;;;;;EAcT,UAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MAfS;GAAK,UAAA;GAAA,QAAA,CAAA,SAAA,MAAA;EAAA,CAAA;CAAA,CAAA;;AAiBJ,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAmB,YAAA,CAAA;EAnB/B,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,SAAS,CAAC,KAAK;GACf,UAAU;;;;;;;;;;;;;;;EAeX,CAAA"}
@@ -0,0 +1,65 @@
1
+ import { t as getValue } from "./tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs";
2
+ import * as i0 from "@angular/core";
3
+ import { Component, computed, input } from "@angular/core";
4
+ var ColumnFormatCurrency = class ColumnFormatCurrency {
5
+ cell = input.required(...ngDevMode ? [{ debugName: "cell" }] : /* istanbul ignore next */ []);
6
+ precio = computed(() => {
7
+ const cell = this.cell();
8
+ const value = getValue(cell.row, cell.column.key);
9
+ const number = Number(value);
10
+ if (!Number.isFinite(number)) return value == null ? "" : String(value);
11
+ return new Intl.NumberFormat("es-PE", {
12
+ style: "currency",
13
+ currency: cell.currency
14
+ }).format(number);
15
+ }, ...ngDevMode ? [{ debugName: "precio" }] : /* istanbul ignore next */ []);
16
+ static ɵfac = i0.ɵɵngDeclareFactory({
17
+ minVersion: "12.0.0",
18
+ version: "22.2.3",
19
+ ngImport: i0,
20
+ type: ColumnFormatCurrency,
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: ColumnFormatCurrency,
28
+ isStandalone: true,
29
+ selector: "app-column-format-currency",
30
+ inputs: { cell: {
31
+ classPropertyName: "cell",
32
+ publicName: "cell",
33
+ isSignal: true,
34
+ isRequired: true,
35
+ transformFunction: null
36
+ } },
37
+ ngImport: i0,
38
+ template: `{{ precio() }}`,
39
+ isInline: true
40
+ });
41
+ };
42
+ i0.ɵɵngDeclareClassMetadata({
43
+ minVersion: "12.0.0",
44
+ version: "22.2.3",
45
+ ngImport: i0,
46
+ type: ColumnFormatCurrency,
47
+ decorators: [{
48
+ type: Component,
49
+ args: [{
50
+ selector: "app-column-format-currency",
51
+ template: `{{ precio() }}`
52
+ }]
53
+ }],
54
+ propDecorators: { cell: [{
55
+ type: i0.Input,
56
+ args: [{
57
+ isSignal: true,
58
+ alias: "cell",
59
+ required: true
60
+ }]
61
+ }] }
62
+ });
63
+ export { ColumnFormatCurrency };
64
+
65
+ //# sourceMappingURL=tinya-code-gas-admin-ui-format-currency-CVmniKml.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinya-code-gas-admin-ui-format-currency-CVmniKml.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/columns/format-currency.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\n\nimport { getValue } from '../shared/utils/field-path';\nimport type { ColumnCell } from './column-cell';\n\n/**\n * Formato `currency` (R4.3). Igual que el helper de `list-view`: `es-PE`,\n * moneda tomada del schema (se pasaba desde la vista porque sólo ella la\n * conoce) y texto crudo si el valor no es número.\n */\n@Component({\n selector: 'app-column-format-currency',\n template: `{{ precio() }}`,\n})\nexport class ColumnFormatCurrency {\n readonly cell = input.required<ColumnCell>();\n\n protected readonly precio = computed(() => {\n const cell = this.cell();\n const value = getValue(cell.row, cell.column.key);\n const number = Number(value);\n if (!Number.isFinite(number)) {\n return value == null ? '' : String(value);\n }\n return new Intl.NumberFormat('es-PE', {\n style: 'currency',\n currency: cell.currency,\n }).format(number);\n });\n}\n"],"mappings":";;;AAcA,IAAa,uBAAb,MAAa,qBAAoB;CACtB,OAAO,MAAM,SAAsB,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAEzB,SAAS,eAAc;EACxC,MAAM,OAAO,KAAK,KAAI;EACtB,MAAM,QAAQ,SAAS,KAAK,KAAK,KAAK,OAAO,GAAG;EAChD,MAAM,SAAS,OAAO,KAAK;EAC3B,IAAI,CAAC,OAAO,SAAS,MAAM,GACzB,OAAO,SAAS,OAAO,KAAK,OAAO,KAAK;EAE1C,OAAO,IAAI,KAAK,aAAa,SAAS;GACpC,OAAO;GACP,UAAU,KAAK;EAChB,CAAA,CAAC,CAAC,OAAO,MAAM;CAClB,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CAdS,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAoB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAApB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAoB,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,MAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,UAAA;EAAA,UAFrB;EAAgB,UAAA;CAAA,CAAA;;AAEf,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAoB,YAAA,CAAA;EAJhC,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,UAAU;EACX,CAAA"}
@@ -0,0 +1,65 @@
1
+ import { t as getValue } from "./tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs";
2
+ import * as i0 from "@angular/core";
3
+ import { Component, computed, input } from "@angular/core";
4
+ function formatDate(value) {
5
+ if (typeof value !== "string" || value === "") return value == null ? "" : String(value);
6
+ const date = new Date(value);
7
+ if (Number.isNaN(date.getTime())) return value;
8
+ return date.toLocaleDateString("es-PE", { timeZone: "UTC" });
9
+ }
10
+ var ColumnFormatDate = class ColumnFormatDate {
11
+ cell = input.required(...ngDevMode ? [{ debugName: "cell" }] : /* istanbul ignore next */ []);
12
+ fecha = computed(() => formatDate(this.valor()), ...ngDevMode ? [{ debugName: "fecha" }] : /* istanbul ignore next */ []);
13
+ valor() {
14
+ return getValue(this.cell().row, this.cell().column.key);
15
+ }
16
+ static ɵfac = i0.ɵɵngDeclareFactory({
17
+ minVersion: "12.0.0",
18
+ version: "22.2.3",
19
+ ngImport: i0,
20
+ type: ColumnFormatDate,
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: ColumnFormatDate,
28
+ isStandalone: true,
29
+ selector: "app-column-format-date",
30
+ inputs: { cell: {
31
+ classPropertyName: "cell",
32
+ publicName: "cell",
33
+ isSignal: true,
34
+ isRequired: true,
35
+ transformFunction: null
36
+ } },
37
+ ngImport: i0,
38
+ template: `{{ fecha() }}`,
39
+ isInline: true
40
+ });
41
+ };
42
+ i0.ɵɵngDeclareClassMetadata({
43
+ minVersion: "12.0.0",
44
+ version: "22.2.3",
45
+ ngImport: i0,
46
+ type: ColumnFormatDate,
47
+ decorators: [{
48
+ type: Component,
49
+ args: [{
50
+ selector: "app-column-format-date",
51
+ template: `{{ fecha() }}`
52
+ }]
53
+ }],
54
+ propDecorators: { cell: [{
55
+ type: i0.Input,
56
+ args: [{
57
+ isSignal: true,
58
+ alias: "cell",
59
+ required: true
60
+ }]
61
+ }] }
62
+ });
63
+ export { ColumnFormatDate };
64
+
65
+ //# sourceMappingURL=tinya-code-gas-admin-ui-format-date-Dr1YsDd_.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinya-code-gas-admin-ui-format-date-Dr1YsDd_.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/columns/format-date.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\n\nimport { getValue } from '../shared/utils/field-path';\nimport type { ColumnCell } from './column-cell';\n\nfunction formatDate(value: unknown): string {\n if (typeof value !== 'string' || value === '') {\n return value == null ? '' : String(value);\n }\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) {\n return value;\n }\n // Fechas `YYYY-MM-DD`: forzar UTC para no desfasar un día.\n return date.toLocaleDateString('es-PE', { timeZone: 'UTC' });\n}\n\n/**\n * Formato `date` (R4.3). Corto (`toLocaleDateString`), a diferencia del\n * display de la ficha, que va con `dateStyle: 'medium'`: cada superficie\n * con su formato, pero ambos desde su propio componente.\n */\n@Component({\n selector: 'app-column-format-date',\n template: `{{ fecha() }}`,\n})\nexport class ColumnFormatDate {\n readonly cell = input.required<ColumnCell>();\n\n protected readonly fecha = computed(() => formatDate(this.valor()));\n\n private valor(): unknown {\n return getValue(this.cell().row, this.cell().column.key);\n }\n}\n"],"mappings":";;;AAKA,SAAS,WAAW,OAAc;CAChC,IAAI,OAAO,UAAU,YAAY,UAAU,IACzC,OAAO,SAAS,OAAO,KAAK,OAAO,KAAK;CAE1C,MAAM,OAAO,IAAI,KAAK,KAAK;CAC3B,IAAI,OAAO,MAAM,KAAK,QAAO,CAAE,GAC7B,OAAO;CAGT,OAAO,KAAK,mBAAmB,SAAS,EAAE,UAAU,MAAK,CAAE;AAC7D;AAWA,IAAa,mBAAb,MAAa,iBAAgB;CAClB,OAAO,MAAM,SAAsB,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAEzB,QAAQ,eAAe,WAAW,KAAK,MAAK,CAAE,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAE3D,QAAK;EACX,OAAO,SAAS,KAAK,KAAI,CAAE,CAAC,KAAK,KAAK,KAAI,CAAE,CAAC,OAAO,GAAG;CACzD;CAPW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAgB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAhB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAgB,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,MAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,UAAA;EAAA,UAFjB;EAAe,UAAA;CAAA,CAAA;;AAEd,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAgB,YAAA,CAAA;EAJ5B,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,UAAU;EACX,CAAA"}
@@ -0,0 +1,65 @@
1
+ import { t as getValue } from "./tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs";
2
+ import * as i0 from "@angular/core";
3
+ import { Component, computed, input } from "@angular/core";
4
+ const NUMBER_FORMAT = new Intl.NumberFormat("es-PE");
5
+ function formatNumber(value) {
6
+ const number = Number(value);
7
+ if (!Number.isFinite(number)) return value == null ? "" : String(value);
8
+ return NUMBER_FORMAT.format(number);
9
+ }
10
+ var ColumnFormatNumber = class ColumnFormatNumber {
11
+ cell = input.required(...ngDevMode ? [{ debugName: "cell" }] : /* istanbul ignore next */ []);
12
+ numero = computed(() => formatNumber(this.valor()), ...ngDevMode ? [{ debugName: "numero" }] : /* istanbul ignore next */ []);
13
+ valor() {
14
+ return getValue(this.cell().row, this.cell().column.key);
15
+ }
16
+ static ɵfac = i0.ɵɵngDeclareFactory({
17
+ minVersion: "12.0.0",
18
+ version: "22.2.3",
19
+ ngImport: i0,
20
+ type: ColumnFormatNumber,
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: ColumnFormatNumber,
28
+ isStandalone: true,
29
+ selector: "app-column-format-number",
30
+ inputs: { cell: {
31
+ classPropertyName: "cell",
32
+ publicName: "cell",
33
+ isSignal: true,
34
+ isRequired: true,
35
+ transformFunction: null
36
+ } },
37
+ ngImport: i0,
38
+ template: `{{ numero() }}`,
39
+ isInline: true
40
+ });
41
+ };
42
+ i0.ɵɵngDeclareClassMetadata({
43
+ minVersion: "12.0.0",
44
+ version: "22.2.3",
45
+ ngImport: i0,
46
+ type: ColumnFormatNumber,
47
+ decorators: [{
48
+ type: Component,
49
+ args: [{
50
+ selector: "app-column-format-number",
51
+ template: `{{ numero() }}`
52
+ }]
53
+ }],
54
+ propDecorators: { cell: [{
55
+ type: i0.Input,
56
+ args: [{
57
+ isSignal: true,
58
+ alias: "cell",
59
+ required: true
60
+ }]
61
+ }] }
62
+ });
63
+ export { ColumnFormatNumber };
64
+
65
+ //# sourceMappingURL=tinya-code-gas-admin-ui-format-number-CWCjpI4n.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinya-code-gas-admin-ui-format-number-CWCjpI4n.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/columns/format-number.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\n\nimport { getValue } from '../shared/utils/field-path';\nimport type { ColumnCell } from './column-cell';\n\nconst NUMBER_FORMAT = new Intl.NumberFormat('es-PE');\n\nfunction formatNumber(value: unknown): string {\n const number = Number(value);\n if (!Number.isFinite(number)) {\n return value == null ? '' : String(value);\n }\n return NUMBER_FORMAT.format(number);\n}\n\n/**\n * Formato `number` (R4.3). Misma fórmula que el helper de `list-view`:\n * miles con separador `es-PE` y texto crudo si el valor no es número.\n */\n@Component({\n selector: 'app-column-format-number',\n template: `{{ numero() }}`,\n})\nexport class ColumnFormatNumber {\n readonly cell = input.required<ColumnCell>();\n\n protected readonly numero = computed(() => formatNumber(this.valor()));\n\n private valor(): unknown {\n return getValue(this.cell().row, this.cell().column.key);\n }\n}\n"],"mappings":";;;AAKA,MAAM,gBAAgB,IAAI,KAAK,aAAa,OAAO;AAEnD,SAAS,aAAa,OAAc;CAClC,MAAM,SAAS,OAAO,KAAK;CAC3B,IAAI,CAAC,OAAO,SAAS,MAAM,GACzB,OAAO,SAAS,OAAO,KAAK,OAAO,KAAK;CAE1C,OAAO,cAAc,OAAO,MAAM;AACpC;AAUA,IAAa,qBAAb,MAAa,mBAAkB;CACpB,OAAO,MAAM,SAAsB,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAEzB,SAAS,eAAe,aAAa,KAAK,MAAK,CAAE,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CAE9D,QAAK;EACX,OAAO,SAAS,KAAK,KAAI,CAAE,CAAC,KAAK,KAAK,KAAI,CAAE,CAAC,OAAO,GAAG;CACzD;CAPW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAkB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAlB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAkB,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,MAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,UAAA;EAAA,UAFnB;EAAgB,UAAA;CAAA,CAAA;;AAEf,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAkB,YAAA,CAAA;EAJ9B,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,UAAU;EACX,CAAA"}
@@ -0,0 +1,59 @@
1
+ import { t as getValue } from "./tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs";
2
+ import * as i0 from "@angular/core";
3
+ import { Component, computed, input } from "@angular/core";
4
+ var ColumnFormatText = class ColumnFormatText {
5
+ cell = input.required(...ngDevMode ? [{ debugName: "cell" }] : /* istanbul ignore next */ []);
6
+ texto = computed(() => {
7
+ const value = getValue(this.cell().row, this.cell().column.key);
8
+ return value == null ? "" : String(value);
9
+ }, ...ngDevMode ? [{ debugName: "texto" }] : /* istanbul ignore next */ []);
10
+ static ɵfac = i0.ɵɵngDeclareFactory({
11
+ minVersion: "12.0.0",
12
+ version: "22.2.3",
13
+ ngImport: i0,
14
+ type: ColumnFormatText,
15
+ deps: [],
16
+ target: i0.ɵɵFactoryTarget.Component
17
+ });
18
+ static ɵcmp = i0.ɵɵngDeclareComponent({
19
+ minVersion: "17.1.0",
20
+ version: "22.2.3",
21
+ type: ColumnFormatText,
22
+ isStandalone: true,
23
+ selector: "app-column-format-text",
24
+ inputs: { cell: {
25
+ classPropertyName: "cell",
26
+ publicName: "cell",
27
+ isSignal: true,
28
+ isRequired: true,
29
+ transformFunction: null
30
+ } },
31
+ ngImport: i0,
32
+ template: `{{ texto() }}`,
33
+ isInline: true
34
+ });
35
+ };
36
+ i0.ɵɵngDeclareClassMetadata({
37
+ minVersion: "12.0.0",
38
+ version: "22.2.3",
39
+ ngImport: i0,
40
+ type: ColumnFormatText,
41
+ decorators: [{
42
+ type: Component,
43
+ args: [{
44
+ selector: "app-column-format-text",
45
+ template: `{{ texto() }}`
46
+ }]
47
+ }],
48
+ propDecorators: { cell: [{
49
+ type: i0.Input,
50
+ args: [{
51
+ isSignal: true,
52
+ alias: "cell",
53
+ required: true
54
+ }]
55
+ }] }
56
+ });
57
+ export { ColumnFormatText };
58
+
59
+ //# sourceMappingURL=tinya-code-gas-admin-ui-format-text-DBOgJkH0.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinya-code-gas-admin-ui-format-text-DBOgJkH0.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/columns/format-text.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\n\nimport { getValue } from '../shared/utils/field-path';\nimport type { ColumnCell } from './column-cell';\n\n/**\n * Formato `text` (R4.3 · el `@default` del `@switch` viejo).\n *\n * `cellText` de `list-view`: `null`/`undefined` se pintan vacíos y el resto\n * pasa por `String()` — un objeto sale `[object Object]`, igual que antes.\n */\n@Component({\n selector: 'app-column-format-text',\n template: `{{ texto() }}`,\n})\nexport class ColumnFormatText {\n readonly cell = input.required<ColumnCell>();\n\n protected readonly texto = computed(() => {\n const value = getValue(this.cell().row, this.cell().column.key);\n return value == null ? '' : String(value);\n });\n}\n"],"mappings":";;;AAeA,IAAa,mBAAb,MAAa,iBAAgB;CAClB,OAAO,MAAM,SAAsB,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAEzB,QAAQ,eAAc;EACvC,MAAM,QAAQ,SAAS,KAAK,KAAI,CAAE,CAAC,KAAK,KAAK,KAAI,CAAE,CAAC,OAAO,GAAG;EAC9D,OAAO,SAAS,OAAO,KAAK,OAAO,KAAK;CAC1C,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CANS,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAgB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAhB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAgB,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,MAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,UAAA;EAAA,UAFjB;EAAe,UAAA;CAAA,CAAA;;AAEd,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAgB,YAAA,CAAA;EAJ5B,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,UAAU;EACX,CAAA"}
@@ -0,0 +1,94 @@
1
+ import { t as getValue } from "./tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs";
2
+ import * as i0 from "@angular/core";
3
+ import { Component, computed, input } from "@angular/core";
4
+ var ColumnFormatThumbnail = class ColumnFormatThumbnail {
5
+ cell = input.required(...ngDevMode ? [{ debugName: "cell" }] : /* istanbul ignore next */ []);
6
+ src = computed(() => {
7
+ const value = this.valor();
8
+ if (typeof value === "string") return value !== "" ? value : null;
9
+ if (Array.isArray(value)) {
10
+ const first = value[0];
11
+ const url = typeof first === "string" ? first : getValue(first, "image_url");
12
+ return typeof url === "string" && url !== "" ? url : null;
13
+ }
14
+ if (value && typeof value === "object") {
15
+ const url = getValue(value, "image_url");
16
+ return typeof url === "string" && url !== "" ? url : null;
17
+ }
18
+ return null;
19
+ }, ...ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []);
20
+ alt = computed(() => {
21
+ const value = this.valor();
22
+ let item = this.cell().row;
23
+ if (Array.isArray(value)) item = value[0] ?? null;
24
+ else if (value && typeof value === "object") item = value;
25
+ const alt = item == null ? null : getValue(item, "image_alt");
26
+ if (typeof alt === "string" && alt !== "") return alt;
27
+ const rootAlt = this.cell().row["image_alt"];
28
+ return typeof rootAlt === "string" ? rootAlt : "";
29
+ }, ...ngDevMode ? [{ debugName: "alt" }] : /* istanbul ignore next */ []);
30
+ valor() {
31
+ return getValue(this.cell().row, this.cell().column.key);
32
+ }
33
+ static ɵfac = i0.ɵɵngDeclareFactory({
34
+ minVersion: "12.0.0",
35
+ version: "22.2.3",
36
+ ngImport: i0,
37
+ type: ColumnFormatThumbnail,
38
+ deps: [],
39
+ target: i0.ɵɵFactoryTarget.Component
40
+ });
41
+ static ɵcmp = i0.ɵɵngDeclareComponent({
42
+ minVersion: "17.0.0",
43
+ version: "22.2.3",
44
+ type: ColumnFormatThumbnail,
45
+ isStandalone: true,
46
+ selector: "app-column-format-thumbnail",
47
+ inputs: { cell: {
48
+ classPropertyName: "cell",
49
+ publicName: "cell",
50
+ isSignal: true,
51
+ isRequired: true,
52
+ transformFunction: null
53
+ } },
54
+ ngImport: i0,
55
+ template: `
56
+ @if (src(); as url) {
57
+ <img [src]="url" [alt]="alt()" class="size-9 rounded-md object-cover" loading="lazy" />
58
+ } @else {
59
+ <span class="text-neutral" aria-hidden="true">—</span>
60
+ }
61
+ `,
62
+ isInline: true
63
+ });
64
+ };
65
+ i0.ɵɵngDeclareClassMetadata({
66
+ minVersion: "12.0.0",
67
+ version: "22.2.3",
68
+ ngImport: i0,
69
+ type: ColumnFormatThumbnail,
70
+ decorators: [{
71
+ type: Component,
72
+ args: [{
73
+ selector: "app-column-format-thumbnail",
74
+ template: `
75
+ @if (src(); as url) {
76
+ <img [src]="url" [alt]="alt()" class="size-9 rounded-md object-cover" loading="lazy" />
77
+ } @else {
78
+ <span class="text-neutral" aria-hidden="true">—</span>
79
+ }
80
+ `
81
+ }]
82
+ }],
83
+ propDecorators: { cell: [{
84
+ type: i0.Input,
85
+ args: [{
86
+ isSignal: true,
87
+ alias: "cell",
88
+ required: true
89
+ }]
90
+ }] }
91
+ });
92
+ export { ColumnFormatThumbnail };
93
+
94
+ //# sourceMappingURL=tinya-code-gas-admin-ui-format-thumbnail-PCRvxWKt.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinya-code-gas-admin-ui-format-thumbnail-PCRvxWKt.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/columns/format-thumbnail.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\n\nimport { getValue } from '../shared/utils/field-path';\nimport type { ColumnCell } from './column-cell';\n\n/**\n * Formato `thumbnail` (R4.3): miniatura de la fila.\n *\n * Tanto `thumbnailSrc` como `thumbnailAlt` se mudan desde `list-view`: la\n * columna puede apuntar a `image_url`, al primer elemento de `images[]` o a\n * un objeto con `image_url`, y el texto alternativo sale del item o de la\n * fila. Sin URL se pinta el `—` de siempre.\n */\n@Component({\n selector: 'app-column-format-thumbnail',\n template: `\n @if (src(); as url) {\n <img [src]=\"url\" [alt]=\"alt()\" class=\"size-9 rounded-md object-cover\" loading=\"lazy\" />\n } @else {\n <span class=\"text-neutral\" aria-hidden=\"true\">—</span>\n }\n `,\n})\nexport class ColumnFormatThumbnail {\n readonly cell = input.required<ColumnCell>();\n\n protected readonly src = computed(() => {\n const value = this.valor();\n if (typeof value === 'string') {\n return value !== '' ? value : null;\n }\n if (Array.isArray(value)) {\n const first = value[0];\n const url = typeof first === 'string' ? first : getValue(first, 'image_url');\n return typeof url === 'string' && url !== '' ? url : null;\n }\n if (value && typeof value === 'object') {\n const url = getValue(value, 'image_url');\n return typeof url === 'string' && url !== '' ? url : null;\n }\n return null;\n });\n\n protected readonly alt = computed(() => {\n const value = this.valor();\n let item: unknown = this.cell().row;\n if (Array.isArray(value)) {\n item = value[0] ?? null;\n } else if (value && typeof value === 'object') {\n item = value;\n }\n const alt = item == null ? null : getValue(item, 'image_alt');\n if (typeof alt === 'string' && alt !== '') {\n return alt;\n }\n const rootAlt = this.cell().row['image_alt'];\n return typeof rootAlt === 'string' ? rootAlt : '';\n });\n\n private valor(): unknown {\n return getValue(this.cell().row, this.cell().column.key);\n }\n}\n"],"mappings":";;;AAuBA,IAAa,wBAAb,MAAa,sBAAqB;CACvB,OAAO,MAAM,SAAsB,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAEzB,MAAM,eAAc;EACrC,MAAM,QAAQ,KAAK,MAAK;EACxB,IAAI,OAAO,UAAU,UACnB,OAAO,UAAU,KAAK,QAAQ;EAEhC,IAAI,MAAM,QAAQ,KAAK,GAAG;GACxB,MAAM,QAAQ,MAAM;GACpB,MAAM,MAAM,OAAO,UAAU,WAAW,QAAQ,SAAS,OAAO,WAAW;GAC3E,OAAO,OAAO,QAAQ,YAAY,QAAQ,KAAK,MAAM;EACvD;EACA,IAAI,SAAS,OAAO,UAAU,UAAU;GACtC,MAAM,MAAM,SAAS,OAAO,WAAW;GACvC,OAAO,OAAO,QAAQ,YAAY,QAAQ,KAAK,MAAM;EACvD;EACA,OAAO;CACT,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,MAAA,CAAA,+BAAA,CAAA,CAAA;CAEiB,MAAM,eAAc;EACrC,MAAM,QAAQ,KAAK,MAAK;EACxB,IAAI,OAAgB,KAAK,KAAI,CAAE,CAAC;EAChC,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO,MAAM,MAAM;OACd,IAAI,SAAS,OAAO,UAAU,UACnC,OAAO;EAET,MAAM,MAAM,QAAQ,OAAO,OAAO,SAAS,MAAM,WAAW;EAC5D,IAAI,OAAO,QAAQ,YAAY,QAAQ,IACrC,OAAO;EAET,MAAM,UAAU,KAAK,KAAI,CAAE,CAAC,IAAI;EAChC,OAAO,OAAO,YAAY,WAAW,UAAU;CACjD,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,MAAA,CAAA,+BAAA,CAAA,CAAA;CAEM,QAAK;EACX,OAAO,SAAS,KAAK,KAAI,CAAE,CAAC,KAAK,KAAK,KAAI,CAAE,CAAC,OAAO,GAAG;CACzD;CAtCW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAqB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAArB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAqB,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,MAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,UAAA;EAAA,UARtB;;;;;;;EAMT,UAAA;CAAA,CAAA;;AAEU,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAqB,YAAA,CAAA;EAVjC,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,UAAU;;;;;;;EAOX,CAAA"}
@@ -0,0 +1,72 @@
1
+ const GAP = 1e3;
2
+ function moveBetween(prevPosition, nextPosition) {
3
+ return Math.floor((prevPosition + nextPosition) / 2);
4
+ }
5
+ function moveToStart(firstPosition) {
6
+ return Math.floor(firstPosition / 2);
7
+ }
8
+ function moveToEnd(lastPosition) {
9
+ return lastPosition + GAP;
10
+ }
11
+ function appendPosition(items) {
12
+ const sorted = sortItems(items);
13
+ if (sorted.length === 0) return GAP;
14
+ return moveToEnd(sorted[sorted.length - 1].position);
15
+ }
16
+ function needsRebalance(items, movingKey, targetIndex) {
17
+ const without = sortItems(items.filter((item) => item.key !== movingKey));
18
+ if (without.length === 0) return false;
19
+ const index = clamp(targetIndex, 0, without.length);
20
+ if (index === without.length) return false;
21
+ if (index === 0) {
22
+ const first = without[0];
23
+ return first.position - moveToStart(first.position) < 2;
24
+ }
25
+ const prev = without[index - 1];
26
+ return without[index].position - prev.position < 2;
27
+ }
28
+ function rebalance(items, gap = GAP) {
29
+ return sortItems(items).map((item, index) => ({
30
+ key: item.key,
31
+ position: (index + 1) * gap
32
+ }));
33
+ }
34
+ function computeMove(items, movingKey, targetIndex) {
35
+ const sorted = sortItems(items);
36
+ if (!sorted.some((item) => item.key === movingKey)) throw new Error(`Elemento no encontrado: ${movingKey}`);
37
+ const without = sorted.filter((item) => item.key !== movingKey);
38
+ const index = clamp(targetIndex, 0, without.length);
39
+ if (needsRebalance(sorted, movingKey, targetIndex)) {
40
+ const renumbered = rebalance(without);
41
+ const position = positionFor(renumbered, index);
42
+ return {
43
+ rebalanced: true,
44
+ changes: [...renumbered, {
45
+ key: movingKey,
46
+ position
47
+ }]
48
+ };
49
+ }
50
+ return {
51
+ rebalanced: false,
52
+ changes: [{
53
+ key: movingKey,
54
+ position: positionFor(without, index)
55
+ }]
56
+ };
57
+ }
58
+ function positionFor(without, index) {
59
+ if (without.length === 0) return GAP;
60
+ if (index === 0) return moveToStart(without[0].position);
61
+ if (index === without.length) return moveToEnd(without[without.length - 1].position);
62
+ return moveBetween(without[index - 1].position, without[index].position);
63
+ }
64
+ function sortItems(items) {
65
+ return [...items].sort((a, b) => a.position - b.position);
66
+ }
67
+ function clamp(value, min, max) {
68
+ return Math.min(Math.max(value, min), max);
69
+ }
70
+ export { appendPosition as n, computeMove as r, GAP as t };
71
+
72
+ //# sourceMappingURL=tinya-code-gas-admin-ui-gap-sorting-iTdy_DYG.mjs.map