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

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 +125 -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 +4403 -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 +3099 -0
@@ -0,0 +1,125 @@
1
+ import { t as Badge } from "./tinya-code-gas-admin-ui-badge-EeCA_l-o.mjs";
2
+ import * as i0 from "@angular/core";
3
+ import { Component, computed, input } from "@angular/core";
4
+ var FieldDisplayFile = class FieldDisplayFile {
5
+ field = input.required(...ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []);
6
+ value = input(null, ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
7
+ chip = input(false, ...ngDevMode ? [{ debugName: "chip" }] : /* istanbul ignore next */ []);
8
+ url = computed(() => String(this.value()), ...ngDevMode ? [{ debugName: "url" }] : /* istanbul ignore next */ []);
9
+ static ɵfac = i0.ɵɵngDeclareFactory({
10
+ minVersion: "12.0.0",
11
+ version: "22.2.3",
12
+ ngImport: i0,
13
+ type: FieldDisplayFile,
14
+ deps: [],
15
+ target: i0.ɵɵFactoryTarget.Component
16
+ });
17
+ static ɵcmp = i0.ɵɵngDeclareComponent({
18
+ minVersion: "17.0.0",
19
+ version: "22.2.3",
20
+ type: FieldDisplayFile,
21
+ isStandalone: true,
22
+ selector: "app-field-display-file",
23
+ inputs: {
24
+ field: {
25
+ classPropertyName: "field",
26
+ publicName: "field",
27
+ isSignal: true,
28
+ isRequired: true,
29
+ transformFunction: null
30
+ },
31
+ value: {
32
+ classPropertyName: "value",
33
+ publicName: "value",
34
+ isSignal: true,
35
+ isRequired: false,
36
+ transformFunction: null
37
+ },
38
+ chip: {
39
+ classPropertyName: "chip",
40
+ publicName: "chip",
41
+ isSignal: true,
42
+ isRequired: false,
43
+ transformFunction: null
44
+ }
45
+ },
46
+ ngImport: i0,
47
+ template: `
48
+ @if (chip()) {
49
+ <app-badge [label]="url()" />
50
+ } @else {
51
+ <a
52
+ class="font-medium text-primary hover:underline"
53
+ [href]="url()"
54
+ target="_blank"
55
+ rel="noopener noreferrer"
56
+ >
57
+ Abrir archivo
58
+ </a>
59
+ }
60
+ `,
61
+ isInline: true,
62
+ dependencies: [{
63
+ kind: "component",
64
+ type: Badge,
65
+ selector: "app-badge",
66
+ inputs: ["label", "kind"]
67
+ }]
68
+ });
69
+ };
70
+ i0.ɵɵngDeclareClassMetadata({
71
+ minVersion: "12.0.0",
72
+ version: "22.2.3",
73
+ ngImport: i0,
74
+ type: FieldDisplayFile,
75
+ decorators: [{
76
+ type: Component,
77
+ args: [{
78
+ selector: "app-field-display-file",
79
+ imports: [Badge],
80
+ template: `
81
+ @if (chip()) {
82
+ <app-badge [label]="url()" />
83
+ } @else {
84
+ <a
85
+ class="font-medium text-primary hover:underline"
86
+ [href]="url()"
87
+ target="_blank"
88
+ rel="noopener noreferrer"
89
+ >
90
+ Abrir archivo
91
+ </a>
92
+ }
93
+ `
94
+ }]
95
+ }],
96
+ propDecorators: {
97
+ field: [{
98
+ type: i0.Input,
99
+ args: [{
100
+ isSignal: true,
101
+ alias: "field",
102
+ required: true
103
+ }]
104
+ }],
105
+ value: [{
106
+ type: i0.Input,
107
+ args: [{
108
+ isSignal: true,
109
+ alias: "value",
110
+ required: false
111
+ }]
112
+ }],
113
+ chip: [{
114
+ type: i0.Input,
115
+ args: [{
116
+ isSignal: true,
117
+ alias: "chip",
118
+ required: false
119
+ }]
120
+ }]
121
+ }
122
+ });
123
+ export { FieldDisplayFile };
124
+
125
+ //# sourceMappingURL=tinya-code-gas-admin-ui-display-file-BiIhqvQC.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinya-code-gas-admin-ui-display-file-BiIhqvQC.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/fields/display/display-file.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\n\nimport { Badge } from '../../shared/components/badge/badge';\nimport type { FieldSchema } from '../../core/models/schema.model';\n\n/**\n * Display por defecto de `file` (R4.1 · modo `display` · R9.5.3).\n *\n * Un archivo no tiene miniatura: el valor es la URL pública, y lo honesto\n * en la ficha de detalle es un enlace que lo abre (mismo lenguaje que el\n * «Abrir» de `url`). En la cabecera (`chip`) va como badge con la URL, la\n * paridad con el resto de los displays.\n */\n@Component({\n selector: 'app-field-display-file',\n imports: [Badge],\n template: `\n @if (chip()) {\n <app-badge [label]=\"url()\" />\n } @else {\n <a\n class=\"font-medium text-primary hover:underline\"\n [href]=\"url()\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Abrir archivo\n </a>\n }\n `,\n})\nexport class FieldDisplayFile {\n /** Campo que se pinta. Lo usa el tipo; acá sólo tipa la forma común. */\n readonly field = input.required<FieldSchema>();\n /** Valor crudo del registro (la URL pública). El host ya filtró el vacío. */\n readonly value = input<unknown>(null);\n /** `true` en la cabecera: la URL se pinta como chip compacto. */\n readonly chip = input(false);\n\n protected readonly url = computed(() => String(this.value()));\n}\n"],"mappings":";;;AA+BA,IAAa,mBAAb,MAAa,iBAAgB;CAElB,QAAQ,MAAM,SAAuB,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAErC,QAAQ,MAAe,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAE5B,OAAO,MAAM,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAET,MAAM,eAAe,OAAO,KAAK,MAAK,CAAE,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,MAAA,CAAA,+BAAA,CAAA,CAAA;CARlD,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;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,UAfjB;;;;;;;;;;;;;;EAaT,UAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MAdS;GAAK,UAAA;GAAA,QAAA,CAAA,SAAA,MAAA;EAAA,CAAA;CAAA,CAAA;;AAgBJ,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAgB,YAAA,CAAA;EAlB5B,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,SAAS,CAAC,KAAK;GACf,UAAU;;;;;;;;;;;;;;EAcX,CAAA"}
@@ -0,0 +1,152 @@
1
+ import { t as Badge } from "./tinya-code-gas-admin-ui-badge-EeCA_l-o.mjs";
2
+ import * as i0 from "@angular/core";
3
+ import { Component, computed, input } from "@angular/core";
4
+ import { LucideExternalLink } from "@lucide/angular";
5
+ var FieldDisplayImage = class FieldDisplayImage {
6
+ field = input.required(...ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []);
7
+ value = input(null, ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
8
+ chip = input(false, ...ngDevMode ? [{ debugName: "chip" }] : /* istanbul ignore next */ []);
9
+ url = computed(() => String(this.value()), ...ngDevMode ? [{ debugName: "url" }] : /* istanbul ignore next */ []);
10
+ static ɵfac = i0.ɵɵngDeclareFactory({
11
+ minVersion: "12.0.0",
12
+ version: "22.2.3",
13
+ ngImport: i0,
14
+ type: FieldDisplayImage,
15
+ deps: [],
16
+ target: i0.ɵɵFactoryTarget.Component
17
+ });
18
+ static ɵcmp = i0.ɵɵngDeclareComponent({
19
+ minVersion: "17.0.0",
20
+ version: "22.2.3",
21
+ type: FieldDisplayImage,
22
+ isStandalone: true,
23
+ selector: "app-field-display-image",
24
+ inputs: {
25
+ field: {
26
+ classPropertyName: "field",
27
+ publicName: "field",
28
+ isSignal: true,
29
+ isRequired: true,
30
+ transformFunction: null
31
+ },
32
+ value: {
33
+ classPropertyName: "value",
34
+ publicName: "value",
35
+ isSignal: true,
36
+ isRequired: false,
37
+ transformFunction: null
38
+ },
39
+ chip: {
40
+ classPropertyName: "chip",
41
+ publicName: "chip",
42
+ isSignal: true,
43
+ isRequired: false,
44
+ transformFunction: null
45
+ }
46
+ },
47
+ ngImport: i0,
48
+ template: `
49
+ @if (chip()) {
50
+ <!-- Paridad R4.2: la cabecera siempre mostró el valor formateado
51
+ como chip, y para una imagen ese valor era la URL. -->
52
+ <app-badge [label]="url()" />
53
+ } @else {
54
+ <a
55
+ [href]="url()"
56
+ target="_blank"
57
+ rel="noopener noreferrer"
58
+ class="group relative inline-block overflow-hidden rounded-xl border border-neutral/20 shadow-xs transition hover:border-primary"
59
+ >
60
+ <img
61
+ [src]="url()"
62
+ [alt]="field().label"
63
+ class="h-28 w-28 object-cover transition duration-300 group-hover:scale-105"
64
+ />
65
+ <div
66
+ class="absolute inset-0 flex items-center justify-center bg-black/40 opacity-0 transition group-hover:opacity-100"
67
+ >
68
+ <svg lucideExternalLink size="18" class="text-white" />
69
+ </div>
70
+ </a>
71
+ }
72
+ `,
73
+ isInline: true,
74
+ dependencies: [{
75
+ kind: "component",
76
+ type: Badge,
77
+ selector: "app-badge",
78
+ inputs: ["label", "kind"]
79
+ }, {
80
+ kind: "component",
81
+ type: LucideExternalLink,
82
+ selector: "svg[lucideExternalLink]"
83
+ }]
84
+ });
85
+ };
86
+ i0.ɵɵngDeclareClassMetadata({
87
+ minVersion: "12.0.0",
88
+ version: "22.2.3",
89
+ ngImport: i0,
90
+ type: FieldDisplayImage,
91
+ decorators: [{
92
+ type: Component,
93
+ args: [{
94
+ selector: "app-field-display-image",
95
+ imports: [Badge, LucideExternalLink],
96
+ template: `
97
+ @if (chip()) {
98
+ <!-- Paridad R4.2: la cabecera siempre mostró el valor formateado
99
+ como chip, y para una imagen ese valor era la URL. -->
100
+ <app-badge [label]="url()" />
101
+ } @else {
102
+ <a
103
+ [href]="url()"
104
+ target="_blank"
105
+ rel="noopener noreferrer"
106
+ class="group relative inline-block overflow-hidden rounded-xl border border-neutral/20 shadow-xs transition hover:border-primary"
107
+ >
108
+ <img
109
+ [src]="url()"
110
+ [alt]="field().label"
111
+ class="h-28 w-28 object-cover transition duration-300 group-hover:scale-105"
112
+ />
113
+ <div
114
+ class="absolute inset-0 flex items-center justify-center bg-black/40 opacity-0 transition group-hover:opacity-100"
115
+ >
116
+ <svg lucideExternalLink size="18" class="text-white" />
117
+ </div>
118
+ </a>
119
+ }
120
+ `
121
+ }]
122
+ }],
123
+ propDecorators: {
124
+ field: [{
125
+ type: i0.Input,
126
+ args: [{
127
+ isSignal: true,
128
+ alias: "field",
129
+ required: true
130
+ }]
131
+ }],
132
+ value: [{
133
+ type: i0.Input,
134
+ args: [{
135
+ isSignal: true,
136
+ alias: "value",
137
+ required: false
138
+ }]
139
+ }],
140
+ chip: [{
141
+ type: i0.Input,
142
+ args: [{
143
+ isSignal: true,
144
+ alias: "chip",
145
+ required: false
146
+ }]
147
+ }]
148
+ }
149
+ });
150
+ export { FieldDisplayImage };
151
+
152
+ //# sourceMappingURL=tinya-code-gas-admin-ui-display-image-C1dhnZi1.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinya-code-gas-admin-ui-display-image-C1dhnZi1.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/fields/display/display-image.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\n\nimport { LucideExternalLink } from '@lucide/angular';\n\nimport { Badge } from '../../shared/components/badge/badge';\nimport type { FieldSchema } from '../../core/models/schema.model';\n\n/**\n * Display por defecto de `image` (R4.1 · modo `display`).\n *\n * Mismo maquetado que la rama `kind === 'image'` de `detail-view` antes de\n * R4.2: miniatura de 7×7 con enlace a la imagen completa y overlay con el\n * icono de «abrir». El `alt` sigue siendo la etiqueta del campo.\n *\n * El host ya se encarga del valor vacío (pinta `—`), así que acá la URL\n * siempre existe.\n */\n@Component({\n selector: 'app-field-display-image',\n imports: [Badge, LucideExternalLink],\n template: `\n @if (chip()) {\n <!-- Paridad R4.2: la cabecera siempre mostró el valor formateado\n como chip, y para una imagen ese valor era la URL. -->\n <app-badge [label]=\"url()\" />\n } @else {\n <a\n [href]=\"url()\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"group relative inline-block overflow-hidden rounded-xl border border-neutral/20 shadow-xs transition hover:border-primary\"\n >\n <img\n [src]=\"url()\"\n [alt]=\"field().label\"\n class=\"h-28 w-28 object-cover transition duration-300 group-hover:scale-105\"\n />\n <div\n class=\"absolute inset-0 flex items-center justify-center bg-black/40 opacity-0 transition group-hover:opacity-100\"\n >\n <svg lucideExternalLink size=\"18\" class=\"text-white\" />\n </div>\n </a>\n }\n `,\n})\nexport class FieldDisplayImage {\n readonly field = input.required<FieldSchema>();\n readonly value = input<unknown>(null);\n /** `true` en la cabecera: la URL se pinta como chip compacto. */\n readonly chip = input(false);\n\n protected readonly url = computed(() => String(this.value()));\n}\n"],"mappings":";;;;AA8CA,IAAa,oBAAb,MAAa,kBAAiB;CACnB,QAAQ,MAAM,SAAuB,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CACrC,QAAQ,MAAe,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAE5B,OAAO,MAAM,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAET,MAAM,eAAe,OAAO,KAAK,MAAK,CAAE,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,MAAA,CAAA,+BAAA,CAAA,CAAA;CANlD,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;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,UA1BlB;;;;;;;;;;;;;;;;;;;;;;;;;EAwBT,UAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MAzBS;GAAK,UAAA;GAAA,QAAA,CAAA,SAAA,MAAA;EAAA,GAAA;GAAA,MAAA;GAAA,MAAE;GAAkB,UAAA;EAAA,CAAA;CAAA,CAAA;;AA2BxB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAiB,YAAA,CAAA;EA7B7B,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,SAAS,CAAC,OAAO,kBAAkB;GACnC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;EAyBX,CAAA"}
@@ -0,0 +1,211 @@
1
+ import { t as Badge } from "./tinya-code-gas-admin-ui-badge-EeCA_l-o.mjs";
2
+ import { n as resolveBadgeKind } from "./tinya-code-gas-admin-ui-display-badge-fwk6sDU7.mjs";
3
+ import * as i0 from "@angular/core";
4
+ import { Component, computed, input } from "@angular/core";
5
+ import { LucideClock } from "@lucide/angular";
6
+ const FORMATO_FECHA_HORA = new Intl.DateTimeFormat("es-PE", {
7
+ dateStyle: "medium",
8
+ timeStyle: "short",
9
+ timeZone: "UTC"
10
+ });
11
+ var FieldDisplayList = class FieldDisplayList {
12
+ field = input.required(...ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []);
13
+ value = input(null, ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
14
+ chip = input(false, ...ngDevMode ? [{ debugName: "chip" }] : /* istanbul ignore next */ []);
15
+ items = computed(() => Array.isArray(this.value()) ? this.value() : [], ...ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []);
16
+ resumen() {
17
+ return `${this.items().length} elementos`;
18
+ }
19
+ fechaHora(valor) {
20
+ if (!valor) return "—";
21
+ const d = new Date(String(valor));
22
+ return Number.isNaN(d.getTime()) ? String(valor) : FORMATO_FECHA_HORA.format(d);
23
+ }
24
+ etiquetaAccion(valor) {
25
+ if (!valor) return "";
26
+ return String(valor).replace(/_/g, " ");
27
+ }
28
+ kindAccion(valor) {
29
+ return resolveBadgeKind(String(valor));
30
+ }
31
+ static ɵfac = i0.ɵɵngDeclareFactory({
32
+ minVersion: "12.0.0",
33
+ version: "22.2.3",
34
+ ngImport: i0,
35
+ type: FieldDisplayList,
36
+ deps: [],
37
+ target: i0.ɵɵFactoryTarget.Component
38
+ });
39
+ static ɵcmp = i0.ɵɵngDeclareComponent({
40
+ minVersion: "17.0.0",
41
+ version: "22.2.3",
42
+ type: FieldDisplayList,
43
+ isStandalone: true,
44
+ selector: "app-field-display-list",
45
+ inputs: {
46
+ field: {
47
+ classPropertyName: "field",
48
+ publicName: "field",
49
+ isSignal: true,
50
+ isRequired: true,
51
+ transformFunction: null
52
+ },
53
+ value: {
54
+ classPropertyName: "value",
55
+ publicName: "value",
56
+ isSignal: true,
57
+ isRequired: false,
58
+ transformFunction: null
59
+ },
60
+ chip: {
61
+ classPropertyName: "chip",
62
+ publicName: "chip",
63
+ isSignal: true,
64
+ isRequired: false,
65
+ transformFunction: null
66
+ }
67
+ },
68
+ ngImport: i0,
69
+ template: `
70
+ @if (chip()) {
71
+ <!-- Paridad R4.2: la cabecera siempre mostró el valor formateado
72
+ como chip, y para una lista ese valor era «N elementos». -->
73
+ <app-badge [label]="resumen()" />
74
+ } @else if (items().length > 0) {
75
+ <div
76
+ class="relative pl-6 space-y-4 before:absolute before:left-2 before:top-2 before:bottom-2 before:w-0.5 before:bg-neutral/20"
77
+ >
78
+ @for (item of items(); track $index) {
79
+ <div class="relative group">
80
+ <span
81
+ class="absolute -left-6 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-primary/20 ring-4 ring-surface"
82
+ >
83
+ <span class="h-1.5 w-1.5 rounded-full bg-primary"></span>
84
+ </span>
85
+ <div
86
+ class="rounded-xl border border-neutral/10 bg-neutral/5 p-3.5 transition hover:border-neutral/20"
87
+ >
88
+ <div class="flex flex-wrap items-center justify-between gap-2 mb-1.5">
89
+ @if (item['action']) {
90
+ <app-badge
91
+ [label]="etiquetaAccion(item['action'])"
92
+ [kind]="kindAccion(item['action'])"
93
+ />
94
+ }
95
+ @if (item['at']) {
96
+ <span class="text-xs text-neutral flex items-center gap-1">
97
+ <svg lucideClock size="12" />
98
+ {{ fechaHora(item['at']) }}
99
+ </span>
100
+ }
101
+ </div>
102
+ @if (item['detail']) {
103
+ <p class="text-sm text-neutral-light">{{ item['detail'] }}</p>
104
+ }
105
+ </div>
106
+ </div>
107
+ }
108
+ </div>
109
+ } @else {
110
+ <p class="text-xs italic text-neutral">No hay registros en el historial.</p>
111
+ }
112
+ `,
113
+ isInline: true,
114
+ dependencies: [{
115
+ kind: "component",
116
+ type: Badge,
117
+ selector: "app-badge",
118
+ inputs: ["label", "kind"]
119
+ }, {
120
+ kind: "component",
121
+ type: LucideClock,
122
+ selector: "svg[lucideClock]"
123
+ }]
124
+ });
125
+ };
126
+ i0.ɵɵngDeclareClassMetadata({
127
+ minVersion: "12.0.0",
128
+ version: "22.2.3",
129
+ ngImport: i0,
130
+ type: FieldDisplayList,
131
+ decorators: [{
132
+ type: Component,
133
+ args: [{
134
+ selector: "app-field-display-list",
135
+ imports: [Badge, LucideClock],
136
+ template: `
137
+ @if (chip()) {
138
+ <!-- Paridad R4.2: la cabecera siempre mostró el valor formateado
139
+ como chip, y para una lista ese valor era «N elementos». -->
140
+ <app-badge [label]="resumen()" />
141
+ } @else if (items().length > 0) {
142
+ <div
143
+ class="relative pl-6 space-y-4 before:absolute before:left-2 before:top-2 before:bottom-2 before:w-0.5 before:bg-neutral/20"
144
+ >
145
+ @for (item of items(); track $index) {
146
+ <div class="relative group">
147
+ <span
148
+ class="absolute -left-6 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-primary/20 ring-4 ring-surface"
149
+ >
150
+ <span class="h-1.5 w-1.5 rounded-full bg-primary"></span>
151
+ </span>
152
+ <div
153
+ class="rounded-xl border border-neutral/10 bg-neutral/5 p-3.5 transition hover:border-neutral/20"
154
+ >
155
+ <div class="flex flex-wrap items-center justify-between gap-2 mb-1.5">
156
+ @if (item['action']) {
157
+ <app-badge
158
+ [label]="etiquetaAccion(item['action'])"
159
+ [kind]="kindAccion(item['action'])"
160
+ />
161
+ }
162
+ @if (item['at']) {
163
+ <span class="text-xs text-neutral flex items-center gap-1">
164
+ <svg lucideClock size="12" />
165
+ {{ fechaHora(item['at']) }}
166
+ </span>
167
+ }
168
+ </div>
169
+ @if (item['detail']) {
170
+ <p class="text-sm text-neutral-light">{{ item['detail'] }}</p>
171
+ }
172
+ </div>
173
+ </div>
174
+ }
175
+ </div>
176
+ } @else {
177
+ <p class="text-xs italic text-neutral">No hay registros en el historial.</p>
178
+ }
179
+ `
180
+ }]
181
+ }],
182
+ propDecorators: {
183
+ field: [{
184
+ type: i0.Input,
185
+ args: [{
186
+ isSignal: true,
187
+ alias: "field",
188
+ required: true
189
+ }]
190
+ }],
191
+ value: [{
192
+ type: i0.Input,
193
+ args: [{
194
+ isSignal: true,
195
+ alias: "value",
196
+ required: false
197
+ }]
198
+ }],
199
+ chip: [{
200
+ type: i0.Input,
201
+ args: [{
202
+ isSignal: true,
203
+ alias: "chip",
204
+ required: false
205
+ }]
206
+ }]
207
+ }
208
+ });
209
+ export { FieldDisplayList };
210
+
211
+ //# sourceMappingURL=tinya-code-gas-admin-ui-display-list-DOEuUbGe.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinya-code-gas-admin-ui-display-list-DOEuUbGe.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/fields/display/display-list.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\n\nimport { LucideClock } from '@lucide/angular';\n\nimport { Badge, type BadgeKind } from '../../shared/components/badge/badge';\nimport type { FieldSchema } from '../../core/models/schema.model';\nimport { resolveBadgeKind } from './display-badge';\n\nconst FORMATO_FECHA_HORA = new Intl.DateTimeFormat('es-PE', {\n dateStyle: 'medium',\n timeStyle: 'short',\n timeZone: 'UTC',\n});\n\ntype Item = Record<string, unknown>;\n\n/**\n * Display por defecto de `list` (R4.1 · modo `display`).\n *\n * Es la línea de tiempo del historial: **toda la plantilla de `list` que\n * vivía en `detail-view`** se muda acá, que es lo que R4.2 exige\n * («`detail-view` no tiene plantilla propia de campo»). El agrupador sigue\n * siendo `detail-view`: él decide que este campo va en su bloque con el\n * `<h3>` y el ancho grande; acá sólo se pinta el valor.\n *\n * `itemFields` no participa: el timeline lee `action` / `at` / `detail`\n * directamente, igual que antes.\n */\n@Component({\n selector: 'app-field-display-list',\n imports: [Badge, LucideClock],\n template: `\n @if (chip()) {\n <!-- Paridad R4.2: la cabecera siempre mostró el valor formateado\n como chip, y para una lista ese valor era «N elementos». -->\n <app-badge [label]=\"resumen()\" />\n } @else if (items().length > 0) {\n <div\n class=\"relative pl-6 space-y-4 before:absolute before:left-2 before:top-2 before:bottom-2 before:w-0.5 before:bg-neutral/20\"\n >\n @for (item of items(); track $index) {\n <div class=\"relative group\">\n <span\n class=\"absolute -left-6 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-primary/20 ring-4 ring-surface\"\n >\n <span class=\"h-1.5 w-1.5 rounded-full bg-primary\"></span>\n </span>\n <div\n class=\"rounded-xl border border-neutral/10 bg-neutral/5 p-3.5 transition hover:border-neutral/20\"\n >\n <div class=\"flex flex-wrap items-center justify-between gap-2 mb-1.5\">\n @if (item['action']) {\n <app-badge\n [label]=\"etiquetaAccion(item['action'])\"\n [kind]=\"kindAccion(item['action'])\"\n />\n }\n @if (item['at']) {\n <span class=\"text-xs text-neutral flex items-center gap-1\">\n <svg lucideClock size=\"12\" />\n {{ fechaHora(item['at']) }}\n </span>\n }\n </div>\n @if (item['detail']) {\n <p class=\"text-sm text-neutral-light\">{{ item['detail'] }}</p>\n }\n </div>\n </div>\n }\n </div>\n } @else {\n <p class=\"text-xs italic text-neutral\">No hay registros en el historial.</p>\n }\n `,\n})\nexport class FieldDisplayList {\n readonly field = input.required<FieldSchema>();\n readonly value = input<unknown>(null);\n /** `true` en la cabecera: el resumen «N elementos» va como chip. */\n readonly chip = input(false);\n\n /** El host entrega el valor crudo; sólo un array tiene timeline. */\n protected readonly items = computed<Item[]>(() =>\n Array.isArray(this.value()) ? (this.value() as Item[]) : [],\n );\n\n /** Mismo texto que daba el formateo de detalle previo a R4.2. */\n protected resumen(): string {\n return `${this.items().length} elementos`;\n }\n\n protected fechaHora(valor: unknown): string {\n if (!valor) return '—';\n const d = new Date(String(valor));\n return Number.isNaN(d.getTime()) ? String(valor) : FORMATO_FECHA_HORA.format(d);\n }\n\n protected etiquetaAccion(valor: unknown): string {\n if (!valor) return '';\n return String(valor).replace(/_/g, ' ');\n }\n\n protected kindAccion(valor: unknown): BadgeKind {\n return resolveBadgeKind(String(valor));\n }\n}\n"],"mappings":";;;;;AAQA,MAAM,qBAAqB,IAAI,KAAK,eAAe,SAAS;CAC1D,WAAW;CACX,WAAW;CACX,UAAU;AACX,CAAA;AAgED,IAAa,mBAAb,MAAa,iBAAgB;CAClB,QAAQ,MAAM,SAAuB,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CACrC,QAAQ,MAAe,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAE5B,OAAO,MAAM,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAGT,QAAQ,eACzB,MAAM,QAAQ,KAAK,MAAK,CAAE,IAAK,KAAK,MAAK,IAAgB,CAAA,GAC1D,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAGS,UAAO;EACf,OAAO,GAAG,KAAK,MAAK,CAAE,CAAC,OAAM;CAC/B;CAEU,UAAU,OAAc;EAChC,IAAI,CAAC,OAAO,OAAO;EACnB,MAAM,IAAI,IAAI,KAAK,OAAO,KAAK,CAAC;EAChC,OAAO,OAAO,MAAM,EAAE,QAAO,CAAE,IAAI,OAAO,KAAK,IAAI,mBAAmB,OAAO,CAAC;CAChF;CAEU,eAAe,OAAc;EACrC,IAAI,CAAC,OAAO,OAAO;EACnB,OAAO,OAAO,KAAK,CAAC,CAAC,QAAQ,MAAM,GAAG;CACxC;CAEU,WAAW,OAAc;EACjC,OAAO,iBAAiB,OAAO,KAAK,CAAC;CACvC;CA7BW,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;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,UA7CjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2CT,UAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MA5CS;GAAK,UAAA;GAAA,QAAA,CAAA,SAAA,MAAA;EAAA,GAAA;GAAA,MAAA;GAAA,MAAE;GAAW,UAAA;EAAA,CAAA;CAAA,CAAA;;AA8CjB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAgB,YAAA,CAAA;EAhD5B,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,SAAS,CAAC,OAAO,WAAW;GAC5B,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4CX,CAAA"}
@@ -0,0 +1,116 @@
1
+ import { t as Badge } from "./tinya-code-gas-admin-ui-badge-EeCA_l-o.mjs";
2
+ import * as i0 from "@angular/core";
3
+ import { Component, computed, input } from "@angular/core";
4
+ const FORMATO_NUMERO = new Intl.NumberFormat("es-PE");
5
+ var FieldDisplayNumber = class FieldDisplayNumber {
6
+ field = input.required(...ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []);
7
+ value = input(null, ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
8
+ chip = input(false, ...ngDevMode ? [{ debugName: "chip" }] : /* istanbul ignore next */ []);
9
+ texto = computed(() => {
10
+ const n = Number(this.value());
11
+ if (!Number.isFinite(n)) return String(this.value());
12
+ return FORMATO_NUMERO.format(n);
13
+ }, ...ngDevMode ? [{ debugName: "texto" }] : /* istanbul ignore next */ []);
14
+ static ɵfac = i0.ɵɵngDeclareFactory({
15
+ minVersion: "12.0.0",
16
+ version: "22.2.3",
17
+ ngImport: i0,
18
+ type: FieldDisplayNumber,
19
+ deps: [],
20
+ target: i0.ɵɵFactoryTarget.Component
21
+ });
22
+ static ɵcmp = i0.ɵɵngDeclareComponent({
23
+ minVersion: "17.0.0",
24
+ version: "22.2.3",
25
+ type: FieldDisplayNumber,
26
+ isStandalone: true,
27
+ selector: "app-field-display-number",
28
+ inputs: {
29
+ field: {
30
+ classPropertyName: "field",
31
+ publicName: "field",
32
+ isSignal: true,
33
+ isRequired: true,
34
+ transformFunction: null
35
+ },
36
+ value: {
37
+ classPropertyName: "value",
38
+ publicName: "value",
39
+ isSignal: true,
40
+ isRequired: false,
41
+ transformFunction: null
42
+ },
43
+ chip: {
44
+ classPropertyName: "chip",
45
+ publicName: "chip",
46
+ isSignal: true,
47
+ isRequired: false,
48
+ transformFunction: null
49
+ }
50
+ },
51
+ ngImport: i0,
52
+ template: `
53
+ @if (chip()) {
54
+ <app-badge [label]="texto()" />
55
+ } @else {
56
+ {{ texto() }}
57
+ }
58
+ `,
59
+ isInline: true,
60
+ dependencies: [{
61
+ kind: "component",
62
+ type: Badge,
63
+ selector: "app-badge",
64
+ inputs: ["label", "kind"]
65
+ }]
66
+ });
67
+ };
68
+ i0.ɵɵngDeclareClassMetadata({
69
+ minVersion: "12.0.0",
70
+ version: "22.2.3",
71
+ ngImport: i0,
72
+ type: FieldDisplayNumber,
73
+ decorators: [{
74
+ type: Component,
75
+ args: [{
76
+ selector: "app-field-display-number",
77
+ imports: [Badge],
78
+ template: `
79
+ @if (chip()) {
80
+ <app-badge [label]="texto()" />
81
+ } @else {
82
+ {{ texto() }}
83
+ }
84
+ `
85
+ }]
86
+ }],
87
+ propDecorators: {
88
+ field: [{
89
+ type: i0.Input,
90
+ args: [{
91
+ isSignal: true,
92
+ alias: "field",
93
+ required: true
94
+ }]
95
+ }],
96
+ value: [{
97
+ type: i0.Input,
98
+ args: [{
99
+ isSignal: true,
100
+ alias: "value",
101
+ required: false
102
+ }]
103
+ }],
104
+ chip: [{
105
+ type: i0.Input,
106
+ args: [{
107
+ isSignal: true,
108
+ alias: "chip",
109
+ required: false
110
+ }]
111
+ }]
112
+ }
113
+ });
114
+ export { FieldDisplayNumber };
115
+
116
+ //# sourceMappingURL=tinya-code-gas-admin-ui-display-number-DDMzr4Hn.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tinya-code-gas-admin-ui-display-number-DDMzr4Hn.mjs","names":[],"sources":["../../../projects/gas-admin-ui/src/lib/fields/display/display-number.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\n\nimport { Badge } from '../../shared/components/badge/badge';\nimport type { FieldSchema } from '../../core/models/schema.model';\n\nconst FORMATO_NUMERO = new Intl.NumberFormat('es-PE');\n\n/**\n * Display por defecto de `number` y `currency` (R4.1 · modo `display`).\n *\n * Los dos tipos compartían rama en `formatValue` y la comparten acá: miles\n * con separador `es-PE` y sin decimales fijos (el schema controla los\n * decimales con `decimals` en el form; en display manda el valor tal cual\n * viene). Si no es número, se pinta el texto crudo — la degradación que ya\n * hacía `detail-view`.\n */\n@Component({\n selector: 'app-field-display-number',\n imports: [Badge],\n template: `\n @if (chip()) {\n <app-badge [label]=\"texto()\" />\n } @else {\n {{ texto() }}\n }\n `,\n})\nexport class FieldDisplayNumber {\n readonly field = input.required<FieldSchema>();\n readonly value = input<unknown>(null);\n /** `true` en la cabecera: el número se pinta como chip compacto. */\n readonly chip = input(false);\n\n protected readonly texto = computed(() => {\n const n = Number(this.value());\n if (!Number.isFinite(n)) {\n return String(this.value());\n }\n return FORMATO_NUMERO.format(n);\n });\n}\n"],"mappings":";;;AAKA,MAAM,iBAAiB,IAAI,KAAK,aAAa,OAAO;AAsBpD,IAAa,qBAAb,MAAa,mBAAkB;CACpB,QAAQ,MAAM,SAAuB,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CACrC,QAAQ,MAAe,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAE5B,OAAO,MAAM,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAET,QAAQ,eAAc;EACvC,MAAM,IAAI,OAAO,KAAK,MAAK,CAAE;EAC7B,IAAI,CAAC,OAAO,SAAS,CAAC,GACpB,OAAO,OAAO,KAAK,MAAK,CAAE;EAE5B,OAAO,eAAe,OAAO,CAAC;CAChC,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAZS,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;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,UARnB;;;;;;;EAMT,UAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MAPS;GAAK,UAAA;GAAA,QAAA,CAAA,SAAA,MAAA;EAAA,CAAA;CAAA,CAAA;;AASJ,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAkB,YAAA,CAAA;EAX9B,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,SAAS,CAAC,KAAK;GACf,UAAU;;;;;;;EAOX,CAAA"}