@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.
- package/README.md +63 -2
- package/fesm2022/tinya-code-gas-admin-ui-api.service-CZrUeclM.mjs +281 -0
- package/fesm2022/tinya-code-gas-admin-ui-api.service-CZrUeclM.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-badge-EeCA_l-o.mjs +84 -0
- package/fesm2022/tinya-code-gas-admin-ui-badge-EeCA_l-o.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-bar-chart-G7sEMSBY.mjs +140 -0
- package/fesm2022/tinya-code-gas-admin-ui-bar-chart-G7sEMSBY.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-boolean-B2ASKL0E.mjs +113 -0
- package/fesm2022/tinya-code-gas-admin-ui-boolean-B2ASKL0E.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-button-BQjNW8KB.mjs +163 -0
- package/fesm2022/tinya-code-gas-admin-ui-button-BQjNW8KB.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-calendar-view-r-RXDE37.mjs +1022 -0
- package/fesm2022/tinya-code-gas-admin-ui-calendar-view-r-RXDE37.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-chart-line-BjdlKHoH.mjs +278 -0
- package/fesm2022/tinya-code-gas-admin-ui-chart-line-BjdlKHoH.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-condition-evaluator-BBzWUuHl.mjs +101 -0
- package/fesm2022/tinya-code-gas-admin-ui-condition-evaluator-BBzWUuHl.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-currency-BvuF3Z63.mjs +141 -0
- package/fesm2022/tinya-code-gas-admin-ui-currency-BvuF3Z63.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-data-source.service-LD8AM3Rn.mjs +89 -0
- package/fesm2022/tinya-code-gas-admin-ui-data-source.service-LD8AM3Rn.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-date-1SJGXZrd.mjs +107 -0
- package/fesm2022/tinya-code-gas-admin-ui-date-1SJGXZrd.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-display-badge-fwk6sDU7.mjs +140 -0
- package/fesm2022/tinya-code-gas-admin-ui-display-badge-fwk6sDU7.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-display-date-D7zLiDiG.mjs +119 -0
- package/fesm2022/tinya-code-gas-admin-ui-display-date-D7zLiDiG.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-display-file-BiIhqvQC.mjs +125 -0
- package/fesm2022/tinya-code-gas-admin-ui-display-file-BiIhqvQC.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-display-image-C1dhnZi1.mjs +152 -0
- package/fesm2022/tinya-code-gas-admin-ui-display-image-C1dhnZi1.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-display-list-DOEuUbGe.mjs +211 -0
- package/fesm2022/tinya-code-gas-admin-ui-display-list-DOEuUbGe.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-display-number-DDMzr4Hn.mjs +116 -0
- package/fesm2022/tinya-code-gas-admin-ui-display-number-DDMzr4Hn.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-display-text-B8CdVNpv.mjs +111 -0
- package/fesm2022/tinya-code-gas-admin-ui-display-text-B8CdVNpv.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-email-CT_O5ihA.mjs +107 -0
- package/fesm2022/tinya-code-gas-admin-ui-email-CT_O5ihA.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-empty-state-BMc0QtoT.mjs +109 -0
- package/fesm2022/tinya-code-gas-admin-ui-empty-state-BMc0QtoT.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-error-mapper.service-Ci0UpXtV.mjs +45 -0
- package/fesm2022/tinya-code-gas-admin-ui-error-mapper.service-Ci0UpXtV.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-field-aria-BD1Wiggc.mjs +50 -0
- package/fesm2022/tinya-code-gas-admin-ui-field-aria-BD1Wiggc.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-field-node-CIK6KNN_.mjs +24 -0
- package/fesm2022/tinya-code-gas-admin-ui-field-node-CIK6KNN_.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs +27 -0
- package/fesm2022/tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-file-Dg2N3XQ2.mjs +408 -0
- package/fesm2022/tinya-code-gas-admin-ui-file-Dg2N3XQ2.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-form-view-BwGupSbi.mjs +4514 -0
- package/fesm2022/tinya-code-gas-admin-ui-form-view-BwGupSbi.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-format-badge-CK8ct5Wk.mjs +82 -0
- package/fesm2022/tinya-code-gas-admin-ui-format-badge-CK8ct5Wk.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-format-boolean-ClzezZz-.mjs +105 -0
- package/fesm2022/tinya-code-gas-admin-ui-format-boolean-ClzezZz-.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-format-currency-CVmniKml.mjs +65 -0
- package/fesm2022/tinya-code-gas-admin-ui-format-currency-CVmniKml.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-format-date-Dr1YsDd_.mjs +65 -0
- package/fesm2022/tinya-code-gas-admin-ui-format-date-Dr1YsDd_.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-format-number-CWCjpI4n.mjs +65 -0
- package/fesm2022/tinya-code-gas-admin-ui-format-number-CWCjpI4n.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-format-text-DBOgJkH0.mjs +59 -0
- package/fesm2022/tinya-code-gas-admin-ui-format-text-DBOgJkH0.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-format-thumbnail-PCRvxWKt.mjs +94 -0
- package/fesm2022/tinya-code-gas-admin-ui-format-thumbnail-PCRvxWKt.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-gap-sorting-iTdy_DYG.mjs +72 -0
- package/fesm2022/tinya-code-gas-admin-ui-gap-sorting-iTdy_DYG.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-group-h7-O8tt4.mjs +238 -0
- package/fesm2022/tinya-code-gas-admin-ui-group-h7-O8tt4.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-image-Bjw9ImlS.mjs +416 -0
- package/fesm2022/tinya-code-gas-admin-ui-image-Bjw9ImlS.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-kanban-view-CeGueI57.mjs +439 -0
- package/fesm2022/tinya-code-gas-admin-ui-kanban-view-CeGueI57.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-key-value-nVdgg5at.mjs +513 -0
- package/fesm2022/tinya-code-gas-admin-ui-key-value-nVdgg5at.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-list-CMzl9MkX.mjs +637 -0
- package/fesm2022/tinya-code-gas-admin-ui-list-CMzl9MkX.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-metric-card-DnGMQL8l.mjs +127 -0
- package/fesm2022/tinya-code-gas-admin-ui-metric-card-DnGMQL8l.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-multiselect-CuWwAfdY.mjs +251 -0
- package/fesm2022/tinya-code-gas-admin-ui-multiselect-CuWwAfdY.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-notification.service-LjSULER6.mjs +66 -0
- package/fesm2022/tinya-code-gas-admin-ui-notification.service-LjSULER6.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-number-JNr7glc8.mjs +114 -0
- package/fesm2022/tinya-code-gas-admin-ui-number-JNr7glc8.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-phone-jR417hPf.mjs +116 -0
- package/fesm2022/tinya-code-gas-admin-ui-phone-jR417hPf.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-quick-actions-DCQ6emmF.mjs +235 -0
- package/fesm2022/tinya-code-gas-admin-ui-quick-actions-DCQ6emmF.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-radio-mode-DxvN07DY.mjs +8 -0
- package/fesm2022/tinya-code-gas-admin-ui-radio-mode-DxvN07DY.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-readonly-text-BL7-4qie.mjs +124 -0
- package/fesm2022/tinya-code-gas-admin-ui-readonly-text-BL7-4qie.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-record-list-BiZfnd_7.mjs +249 -0
- package/fesm2022/tinya-code-gas-admin-ui-record-list-BiZfnd_7.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-relation-B3W3Ynsp.mjs +309 -0
- package/fesm2022/tinya-code-gas-admin-ui-relation-B3W3Ynsp.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-relation-drawer.service-B0kT8EiW.mjs +39 -0
- package/fesm2022/tinya-code-gas-admin-ui-relation-drawer.service-B0kT8EiW.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-render-registry-B_D5Jhp9.mjs +546 -0
- package/fesm2022/tinya-code-gas-admin-ui-render-registry-B_D5Jhp9.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-rolldown-runtime-DpJrqANO.mjs +11 -0
- package/fesm2022/tinya-code-gas-admin-ui-schema-catalog-CDrz9pVN.mjs +131 -0
- package/fesm2022/tinya-code-gas-admin-ui-schema-catalog-CDrz9pVN.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-seed-CNbQtREA.mjs +80 -0
- package/fesm2022/tinya-code-gas-admin-ui-seed-CNbQtREA.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-select-DzaRfHXO.mjs +292 -0
- package/fesm2022/tinya-code-gas-admin-ui-select-DzaRfHXO.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-skeleton-DnWK0tcZ.mjs +119 -0
- package/fesm2022/tinya-code-gas-admin-ui-skeleton-DnWK0tcZ.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-slug-DU58cbiY.mjs +158 -0
- package/fesm2022/tinya-code-gas-admin-ui-slug-DU58cbiY.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-source-options-B9R4mw8-.mjs +26 -0
- package/fesm2022/tinya-code-gas-admin-ui-source-options-B9R4mw8-.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-status-progress-DmeG8htE.mjs +205 -0
- package/fesm2022/tinya-code-gas-admin-ui-status-progress-DmeG8htE.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-string-list-gleasqzD.mjs +432 -0
- package/fesm2022/tinya-code-gas-admin-ui-string-list-gleasqzD.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-template-interpolator-ewv7CkNX.mjs +36 -0
- package/fesm2022/tinya-code-gas-admin-ui-template-interpolator-ewv7CkNX.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-text-CUPmL7W_.mjs +107 -0
- package/fesm2022/tinya-code-gas-admin-ui-text-CUPmL7W_.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-textarea-CGLSIW13.mjs +223 -0
- package/fesm2022/tinya-code-gas-admin-ui-textarea-CGLSIW13.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-time-BcHzsTWf.mjs +107 -0
- package/fesm2022/tinya-code-gas-admin-ui-time-BcHzsTWf.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-upload.service-C1g545w5.mjs +60 -0
- package/fesm2022/tinya-code-gas-admin-ui-upload.service-C1g545w5.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui-url-GO4LZi__.mjs +141 -0
- package/fesm2022/tinya-code-gas-admin-ui-url-GO4LZi__.mjs.map +1 -0
- package/fesm2022/tinya-code-gas-admin-ui.mjs +4400 -0
- package/fesm2022/tinya-code-gas-admin-ui.mjs.map +1 -0
- package/package.json +31 -3
- package/types/tinya-code-gas-admin-ui.d.ts +3091 -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"}
|