vc-create-dashboard 3.0.80 → 3.0.82
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/esm2022/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.mjs +79 -290
- package/esm2022/lib/create-dashboard-container/configure-widgets/configure-widgets/widget.interface.mjs +1 -1
- package/esm2022/lib/create-dashboard-container/constants/assets.constant.mjs +1 -1
- package/esm2022/lib/create-dashboard-container/create-dashboard.component.mjs +826 -404
- package/esm2022/lib/create-dashboard-container/create-dashboard.module.mjs +7 -3
- package/esm2022/lib/create-dashboard-container/pipes/search-program.pipe.mjs +37 -0
- package/esm2022/lib/create-dashboard-container/program-list/constant.mjs +31 -0
- package/esm2022/lib/create-dashboard-container/program-list/information-block/information-block.component.mjs +13 -0
- package/esm2022/lib/create-dashboard-container/program-list/interfaces/list-item.interface.mjs +2 -0
- package/esm2022/lib/create-dashboard-container/program-list/list-container/list-container.component.mjs +50 -0
- package/esm2022/lib/create-dashboard-container/program-list/pipes/check-selected-items.pipes.mjs +23 -0
- package/esm2022/lib/create-dashboard-container/program-list/program-list/program-list.component.mjs +294 -0
- package/esm2022/lib/create-dashboard-container/program-list/program-list.module.mjs +60 -0
- package/esm2022/lib/create-dashboard-container/program-list/services/list-utils.service.mjs +27 -0
- package/esm2022/lib/create-dashboard-container/program-list/services/program-list-api.service.mjs +35 -0
- package/esm2022/lib/create-dashboard-container/services/configure-widgets.service.mjs +80 -72
- package/esm2022/lib/create-dashboard-container/services/create-dashboard.service.mjs +87 -4
- package/esm2022/lib/create-dashboard-container/utils/dashboard-edit.utils.mjs +181 -0
- package/esm2022/lib/ui-kit/dialog/dialog.component.mjs +8 -11
- package/esm2022/lib/ui-kit/loaders/loaders.module.mjs +24 -0
- package/esm2022/lib/ui-kit/loaders/table-loader/table-loader.component.mjs +18 -0
- package/fesm2022/vc-create-dashboard.mjs +3555 -2515
- package/fesm2022/vc-create-dashboard.mjs.map +1 -1
- package/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.d.ts +6 -16
- package/lib/create-dashboard-container/configure-widgets/configure-widgets/widget.interface.d.ts +1 -1
- package/lib/create-dashboard-container/create-dashboard.component.d.ts +62 -23
- package/lib/create-dashboard-container/create-dashboard.module.d.ts +2 -1
- package/lib/create-dashboard-container/pipes/search-program.pipe.d.ts +7 -0
- package/lib/create-dashboard-container/program-list/constant.d.ts +24 -0
- package/lib/create-dashboard-container/program-list/information-block/information-block.component.d.ts +6 -0
- package/lib/create-dashboard-container/program-list/interfaces/list-item.interface.d.ts +5 -0
- package/lib/create-dashboard-container/program-list/list-container/list-container.component.d.ts +9 -0
- package/lib/create-dashboard-container/program-list/pipes/check-selected-items.pipes.d.ts +7 -0
- package/lib/create-dashboard-container/program-list/program-list/program-list.component.d.ts +119 -0
- package/lib/create-dashboard-container/program-list/program-list.module.d.ts +17 -0
- package/lib/create-dashboard-container/program-list/services/list-utils.service.d.ts +7 -0
- package/lib/create-dashboard-container/program-list/services/program-list-api.service.d.ts +14 -0
- package/lib/create-dashboard-container/services/configure-widgets.service.d.ts +1 -16
- package/lib/create-dashboard-container/services/create-dashboard.service.d.ts +38 -1
- package/lib/create-dashboard-container/utils/dashboard-edit.utils.d.ts +16 -0
- package/lib/ui-kit/loaders/loaders.module.d.ts +8 -0
- package/lib/ui-kit/loaders/table-loader/table-loader.component.d.ts +9 -0
- package/package.json +1 -1
- package/esm2022/lib/create-dashboard-container/services/urlConfig.service.mjs +0 -29
- package/lib/create-dashboard-container/services/urlConfig.service.d.ts +0 -10
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/** Shared helpers for custom dashboard create/edit form hydration. */
|
|
2
|
+
export function normalizeIdArray(value) {
|
|
3
|
+
if (value == null || value === '') {
|
|
4
|
+
return [];
|
|
5
|
+
}
|
|
6
|
+
const items = Array.isArray(value) ? value : [value];
|
|
7
|
+
return items
|
|
8
|
+
.map((item) => {
|
|
9
|
+
if (typeof item === 'number' || typeof item === 'string') {
|
|
10
|
+
return Number(item);
|
|
11
|
+
}
|
|
12
|
+
if (typeof item === 'object' && item != null) {
|
|
13
|
+
const obj = item;
|
|
14
|
+
return Number(obj['id'] ??
|
|
15
|
+
obj['programId'] ??
|
|
16
|
+
obj['rcid'] ??
|
|
17
|
+
obj['rc_id'] ??
|
|
18
|
+
obj['rcId'] ??
|
|
19
|
+
obj['item_id']);
|
|
20
|
+
}
|
|
21
|
+
return NaN;
|
|
22
|
+
})
|
|
23
|
+
.filter((id) => !Number.isNaN(id));
|
|
24
|
+
}
|
|
25
|
+
export function extractProgramIdsFromDashboard(data) {
|
|
26
|
+
if (!data) {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
const direct = normalizeIdArray(data.programs ?? data.programId ?? data.program?.programId ?? data.programIds);
|
|
30
|
+
if (direct.length) {
|
|
31
|
+
return direct;
|
|
32
|
+
}
|
|
33
|
+
const allPrograms = data.program?.all_programs;
|
|
34
|
+
if (!Array.isArray(allPrograms) || !allPrograms.length) {
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
if (typeof allPrograms[0] === 'object') {
|
|
38
|
+
const fromObjects = [
|
|
39
|
+
...new Set(allPrograms
|
|
40
|
+
.map((item) => Number(item?.programId ?? item?.program_id ?? item?.parentId))
|
|
41
|
+
.filter((id) => !Number.isNaN(id))),
|
|
42
|
+
];
|
|
43
|
+
if (fromObjects.length) {
|
|
44
|
+
return fromObjects;
|
|
45
|
+
}
|
|
46
|
+
return normalizeIdArray(allPrograms);
|
|
47
|
+
}
|
|
48
|
+
return normalizeIdArray(allPrograms);
|
|
49
|
+
}
|
|
50
|
+
export function extractCategoryIdsFromDashboard(data) {
|
|
51
|
+
if (!data) {
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
54
|
+
return normalizeIdArray(data.responsibility_category ??
|
|
55
|
+
data.responsibilityCategory ??
|
|
56
|
+
data.responsibilityCategoryId ??
|
|
57
|
+
data.compliance_category ??
|
|
58
|
+
data.categoryId ??
|
|
59
|
+
data.categoryIds ??
|
|
60
|
+
[]);
|
|
61
|
+
}
|
|
62
|
+
export function extractRcIdsFromDashboard(data) {
|
|
63
|
+
if (!data) {
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
const fromRcId = normalizeIdArray(data.rcId);
|
|
67
|
+
if (fromRcId.length) {
|
|
68
|
+
return fromRcId;
|
|
69
|
+
}
|
|
70
|
+
return normalizeIdArray(data.responsibilityCenters ??
|
|
71
|
+
data.responsibilityCenterId ??
|
|
72
|
+
data.responsibility_center ??
|
|
73
|
+
data.responsibility_centers ??
|
|
74
|
+
data.rcs ??
|
|
75
|
+
[]);
|
|
76
|
+
}
|
|
77
|
+
export function hasProgramSelectionInMap(map) {
|
|
78
|
+
if (!map || typeof map !== 'object' || Array.isArray(map)) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
return Object.keys(map).some((key) => (map[key] ?? []).length > 0);
|
|
82
|
+
}
|
|
83
|
+
export function normalizeProgramCategories(categories) {
|
|
84
|
+
return categories.map((category) => ({
|
|
85
|
+
...category,
|
|
86
|
+
category_id: category.category_id ?? category.id,
|
|
87
|
+
item_name: category.item_name ?? category.name,
|
|
88
|
+
}));
|
|
89
|
+
}
|
|
90
|
+
export function flattenProgramSelectionMap(selections) {
|
|
91
|
+
return Object.keys(selections ?? {}).reduce((acc, key) => acc.concat(selections[key] ?? []), []);
|
|
92
|
+
}
|
|
93
|
+
export function normalizeProgramSelectionMap(map) {
|
|
94
|
+
const normalized = {};
|
|
95
|
+
Object.keys(map ?? {}).forEach((programKey) => {
|
|
96
|
+
normalized[String(programKey)] = (map[programKey] ?? []).map((cat) => {
|
|
97
|
+
if (typeof cat === 'number' || typeof cat === 'string') {
|
|
98
|
+
return {
|
|
99
|
+
id: String(cat),
|
|
100
|
+
category_id: Number(cat),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
...cat,
|
|
105
|
+
id: String(cat?.id ?? cat?.category_id),
|
|
106
|
+
name: cat?.name ?? cat?.item_name,
|
|
107
|
+
};
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
return hasProgramSelectionInMap(normalized) ? normalized : null;
|
|
111
|
+
}
|
|
112
|
+
export function resolveCategoryProgramId(cat, complianceCatalog = []) {
|
|
113
|
+
const direct = cat?.programId ?? cat?.program_id ?? cat?.parentId ?? cat?.program?.id;
|
|
114
|
+
if (direct != null && direct !== '') {
|
|
115
|
+
return String(direct);
|
|
116
|
+
}
|
|
117
|
+
const catId = Number(cat?.category_id ?? cat?.id);
|
|
118
|
+
if (!Number.isNaN(catId)) {
|
|
119
|
+
const found = complianceCatalog.find((c) => Number(c?.category_id ?? c?.id) === catId);
|
|
120
|
+
if (found) {
|
|
121
|
+
return String(found?.programId ?? found?.program_id ?? found?.parentId ?? '');
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return '';
|
|
125
|
+
}
|
|
126
|
+
export function buildProgramSelectionMapFromCategories(categories, complianceCatalog = []) {
|
|
127
|
+
const map = {};
|
|
128
|
+
(categories ?? []).forEach((cat) => {
|
|
129
|
+
const programKey = resolveCategoryProgramId(cat, complianceCatalog);
|
|
130
|
+
if (!programKey || programKey === 'undefined' || programKey === 'NaN') {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
if (!map[programKey]) {
|
|
134
|
+
map[programKey] = [];
|
|
135
|
+
}
|
|
136
|
+
map[programKey].push({
|
|
137
|
+
...cat,
|
|
138
|
+
id: String(cat?.id ?? cat?.category_id),
|
|
139
|
+
name: cat?.name ?? cat?.item_name,
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
return map;
|
|
143
|
+
}
|
|
144
|
+
export function parseSailsProgramList(res) {
|
|
145
|
+
if (Array.isArray(res?.data?.programs)) {
|
|
146
|
+
return res.data.programs;
|
|
147
|
+
}
|
|
148
|
+
if (Array.isArray(res?.programs)) {
|
|
149
|
+
return res.programs;
|
|
150
|
+
}
|
|
151
|
+
return [];
|
|
152
|
+
}
|
|
153
|
+
export function getEditDashboardCdid(data, dashboardDetails, dashboardId) {
|
|
154
|
+
const row = data ?? dashboardDetails ?? {};
|
|
155
|
+
const core = row?.dashboard_details ?? row?.dashboard ?? row;
|
|
156
|
+
const cdid = core?.cdid ??
|
|
157
|
+
core?.cddid ??
|
|
158
|
+
row?.cdid ??
|
|
159
|
+
row?.cddid ??
|
|
160
|
+
dashboardDetails?.cdid ??
|
|
161
|
+
dashboardDetails?.cddid;
|
|
162
|
+
if (cdid != null && cdid !== '') {
|
|
163
|
+
return String(cdid);
|
|
164
|
+
}
|
|
165
|
+
const fallback = dashboardId ?? '';
|
|
166
|
+
if (fallback && !/^\d+$/.test(String(fallback))) {
|
|
167
|
+
return String(fallback);
|
|
168
|
+
}
|
|
169
|
+
return '';
|
|
170
|
+
}
|
|
171
|
+
export function getSelectedProgramsMap(data) {
|
|
172
|
+
const map = data?.program?.selected_programs;
|
|
173
|
+
if (map && typeof map === 'object' && !Array.isArray(map)) {
|
|
174
|
+
return map;
|
|
175
|
+
}
|
|
176
|
+
return undefined;
|
|
177
|
+
}
|
|
178
|
+
export function filterActiveWidgets(widgets) {
|
|
179
|
+
return (widgets ?? []).filter((w) => !w?.state || w.state === 'ACTIVE');
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLWVkaXQudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcmVhdGUtZGFzaGJvYXJkL3NyYy9saWIvY3JlYXRlLWRhc2hib2FyZC1jb250YWluZXIvdXRpbHMvZGFzaGJvYXJkLWVkaXQudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0VBQXNFO0FBSXRFLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUFjO0lBQzdDLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFFO1FBQ2pDLE9BQU8sRUFBRSxDQUFDO0tBQ1g7SUFDRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckQsT0FBTyxLQUFLO1NBQ1QsR0FBRyxDQUFDLENBQUMsSUFBYSxFQUFFLEVBQUU7UUFDckIsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQ3hELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3JCO1FBQ0QsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtZQUM1QyxNQUFNLEdBQUcsR0FBRyxJQUErQixDQUFDO1lBQzVDLE9BQU8sTUFBTSxDQUNYLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ1AsR0FBRyxDQUFDLFdBQVcsQ0FBQztnQkFDaEIsR0FBRyxDQUFDLE1BQU0sQ0FBQztnQkFDWCxHQUFHLENBQUMsT0FBTyxDQUFDO2dCQUNaLEdBQUcsQ0FBQyxNQUFNLENBQUM7Z0JBQ1gsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUNqQixDQUFDO1NBQ0g7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsQ0FBQztT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QyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDekQsT0FBTyxHQUFHLENBQUM7S0FDWjtJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsT0FBYztJQUNoRCxPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUM7QUFDMUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBTaGFyZWQgaGVscGVycyBmb3IgY3VzdG9tIGRhc2hib2FyZCBjcmVhdGUvZWRpdCBmb3JtIGh5ZHJhdGlvbi4gKi9cblxuZXhwb3J0IHR5cGUgUHJvZ3JhbVNlbGVjdGlvbk1hcCA9IFJlY29yZDxzdHJpbmcsIGFueVtdPjtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUlkQXJyYXkodmFsdWU6IHVua25vd24pOiBudW1iZXJbXSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCBpdGVtcyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xuICByZXR1cm4gaXRlbXNcbiAgICAubWFwKChpdGVtOiB1bmtub3duKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdudW1iZXInIHx8IHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gTnVtYmVyKGl0ZW0pO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiBpdGVtICE9IG51bGwpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gaXRlbSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgcmV0dXJuIE51bWJlcihcbiAgICAgICAgICBvYmpbJ2lkJ10gPz9cbiAgICAgICAgICAgIG9ialsncHJvZ3JhbUlkJ10gPz9cbiAgICAgICAgICAgIG9ialsncmNpZCddID8/XG4gICAgICAgICAgICBvYmpbJ3JjX2lkJ10gPz9cbiAgICAgICAgICAgIG9ialsncmNJZCddID8/XG4gICAgICAgICAgICBvYmpbJ2l0ZW1faWQnXVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIE5hTjtcbiAgICB9KVxuICAgIC5maWx0ZXIoKGlkOiBudW1iZXIpID0+ICFOdW1iZXIuaXNOYU4oaWQpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RQcm9ncmFtSWRzRnJvbURhc2hib2FyZChkYXRhOiBhbnkpOiBudW1iZXJbXSB7XG4gIGlmICghZGF0YSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCBkaXJlY3QgPSBub3JtYWxpemVJZEFycmF5KFxuICAgIGRhdGEucHJvZ3JhbXMgPz8gZGF0YS5wcm9ncmFtSWQgPz8gZGF0YS5wcm9ncmFtPy5wcm9ncmFtSWQgPz8gZGF0YS5wcm9ncmFtSWRzXG4gICk7XG4gIGlmIChkaXJlY3QubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGRpcmVjdDtcbiAgfVxuICBjb25zdCBhbGxQcm9ncmFtcyA9IGRhdGEucHJvZ3JhbT8uYWxsX3Byb2dyYW1zO1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYWxsUHJvZ3JhbXMpIHx8ICFhbGxQcm9ncmFtcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgaWYgKHR5cGVvZiBhbGxQcm9ncmFtc1swXSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBmcm9tT2JqZWN0cyA9IFtcbiAgICAgIC4uLm5ldyBTZXQoXG4gICAgICAgIGFsbFByb2dyYW1zXG4gICAgICAgICAgLm1hcCgoaXRlbTogYW55KSA9PlxuICAgICAgICAgICAgTnVtYmVyKGl0ZW0/LnByb2dyYW1JZCA/PyBpdGVtPy5wcm9ncmFtX2lkID8/IGl0ZW0/LnBhcmVudElkKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKChpZDogbnVtYmVyKSA9PiAhTnVtYmVyLmlzTmFOKGlkKSlcbiAgICAgICksXG4gICAgXTtcbiAgICBpZiAoZnJvbU9iamVjdHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZnJvbU9iamVjdHM7XG4gICAgfVxuICAgIHJldHVybiBub3JtYWxpemVJZEFycmF5KGFsbFByb2dyYW1zKTtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplSWRBcnJheShhbGxQcm9ncmFtcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0Q2F0ZWdvcnlJZHNGcm9tRGFzaGJvYXJkKGRhdGE6IGFueSk6IG51bWJlcltdIHtcbiAgaWYgKCFkYXRhKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVJZEFycmF5KFxuICAgIGRhdGEucmVzcG9uc2liaWxpdHlfY2F0ZWdvcnkgPz9cbiAgICAgIGRhdGEucmVzcG9uc2liaWxpdHlDYXRlZ29yeSA/P1xuICAgICAgZGF0YS5yZXNwb25zaWJpbGl0eUNhdGVnb3J5SWQgPz9cbiAgICAgIGRhdGEuY29tcGxpYW5jZV9jYXRlZ29yeSA/P1xuICAgICAgZGF0YS5jYXRlZ29yeUlkID8/XG4gICAgICBkYXRhLmNhdGVnb3J5SWRzID8/XG4gICAgICBbXVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFJjSWRzRnJvbURhc2hib2FyZChkYXRhOiBhbnkpOiBudW1iZXJbXSB7XG4gIGlmICghZGF0YSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCBmcm9tUmNJZCA9IG5vcm1hbGl6ZUlkQXJyYXkoZGF0YS5yY0lkKTtcbiAgaWYgKGZyb21SY0lkLmxlbmd0aCkge1xuICAgIHJldHVybiBmcm9tUmNJZDtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplSWRBcnJheShcbiAgICBkYXRhLnJlc3BvbnNpYmlsaXR5Q2VudGVycyA/P1xuICAgICAgZGF0YS5yZXNwb25zaWJpbGl0eUNlbnRlcklkID8/XG4gICAgICBkYXRhLnJlc3BvbnNpYmlsaXR5X2NlbnRlciA/P1xuICAgICAgZGF0YS5yZXNwb25zaWJpbGl0eV9jZW50ZXJzID8/XG4gICAgICBkYXRhLnJjcyA/P1xuICAgICAgW11cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Byb2dyYW1TZWxlY3Rpb25Jbk1hcChcbiAgbWFwOiBQcm9ncmFtU2VsZWN0aW9uTWFwIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogYm9vbGVhbiB7XG4gIGlmICghbWFwIHx8IHR5cGVvZiBtYXAgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkobWFwKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmtleXMobWFwKS5zb21lKChrZXkpID0+IChtYXBba2V5XSA/PyBbXSkubGVuZ3RoID4gMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVQcm9ncmFtQ2F0ZWdvcmllcyhjYXRlZ29yaWVzOiBhbnlbXSk6IGFueVtdIHtcbiAgcmV0dXJuIGNhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4gKHtcbiAgICAuLi5jYXRlZ29yeSxcbiAgICBjYXRlZ29yeV9pZDogY2F0ZWdvcnkuY2F0ZWdvcnlfaWQgPz8gY2F0ZWdvcnkuaWQsXG4gICAgaXRlbV9uYW1lOiBjYXRlZ29yeS5pdGVtX25hbWUgPz8gY2F0ZWdvcnkubmFtZSxcbiAgfSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlblByb2dyYW1TZWxlY3Rpb25NYXAoXG4gIHNlbGVjdGlvbnM6IFByb2dyYW1TZWxlY3Rpb25NYXBcbik6IGFueVtdIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHNlbGVjdGlvbnMgPz8ge30pLnJlZHVjZShcbiAgICAoYWNjOiBhbnlbXSwga2V5OiBzdHJpbmcpID0+IGFjYy5jb25jYXQoc2VsZWN0aW9uc1trZXldID8/IFtdKSxcbiAgICBbXVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUHJvZ3JhbVNlbGVjdGlvbk1hcChcbiAgbWFwOiBQcm9ncmFtU2VsZWN0aW9uTWFwXG4pOiBQcm9ncmFtU2VsZWN0aW9uTWFwIHwgbnVsbCB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQ6IFByb2dyYW1TZWxlY3Rpb25NYXAgPSB7fTtcbiAgT2JqZWN0LmtleXMobWFwID8/IHt9KS5mb3JFYWNoKChwcm9ncmFtS2V5KSA9PiB7XG4gICAgbm9ybWFsaXplZFtTdHJpbmcocHJvZ3JhbUtleSldID0gKG1hcFtwcm9ncmFtS2V5XSA/PyBbXSkubWFwKChjYXQpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgY2F0ID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgY2F0ID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlkOiBTdHJpbmcoY2F0KSxcbiAgICAgICAgICBjYXRlZ29yeV9pZDogTnVtYmVyKGNhdCksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5jYXQsXG4gICAgICAgIGlkOiBTdHJpbmcoY2F0Py5pZCA/PyBjYXQ/LmNhdGVnb3J5X2lkKSxcbiAgICAgICAgbmFtZTogY2F0Py5uYW1lID8/IGNhdD8uaXRlbV9uYW1lLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBoYXNQcm9ncmFtU2VsZWN0aW9uSW5NYXAobm9ybWFsaXplZCkgPyBub3JtYWxpemVkIDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVDYXRlZ29yeVByb2dyYW1JZChcbiAgY2F0OiBhbnksXG4gIGNvbXBsaWFuY2VDYXRhbG9nOiBhbnlbXSA9IFtdXG4pOiBzdHJpbmcge1xuICBjb25zdCBkaXJlY3QgPVxuICAgIGNhdD8ucHJvZ3JhbUlkID8/IGNhdD8ucHJvZ3JhbV9pZCA/PyBjYXQ/LnBhcmVudElkID8/IGNhdD8ucHJvZ3JhbT8uaWQ7XG4gIGlmIChkaXJlY3QgIT0gbnVsbCAmJiBkaXJlY3QgIT09ICcnKSB7XG4gICAgcmV0dXJuIFN0cmluZyhkaXJlY3QpO1xuICB9XG4gIGNvbnN0IGNhdElkID0gTnVtYmVyKGNhdD8uY2F0ZWdvcnlfaWQgPz8gY2F0Py5pZCk7XG4gIGlmICghTnVtYmVyLmlzTmFOKGNhdElkKSkge1xuICAgIGNvbnN0IGZvdW5kID0gY29tcGxpYW5jZUNhdGFsb2cuZmluZChcbiAgICAgIChjOiBhbnkpID0+IE51bWJlcihjPy5jYXRlZ29yeV9pZCA/PyBjPy5pZCkgPT09IGNhdElkXG4gICAgKTtcbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIHJldHVybiBTdHJpbmcoXG4gICAgICAgIGZvdW5kPy5wcm9ncmFtSWQgPz8gZm91bmQ/LnByb2dyYW1faWQgPz8gZm91bmQ/LnBhcmVudElkID8/ICcnXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByb2dyYW1TZWxlY3Rpb25NYXBGcm9tQ2F0ZWdvcmllcyhcbiAgY2F0ZWdvcmllczogYW55W10sXG4gIGNvbXBsaWFuY2VDYXRhbG9nOiBhbnlbXSA9IFtdXG4pOiBQcm9ncmFtU2VsZWN0aW9uTWFwIHtcbiAgY29uc3QgbWFwOiBQcm9ncmFtU2VsZWN0aW9uTWFwID0ge307XG4gIChjYXRlZ29yaWVzID8/IFtdKS5mb3JFYWNoKChjYXQpID0+IHtcbiAgICBjb25zdCBwcm9ncmFtS2V5ID0gcmVzb2x2ZUNhdGVnb3J5UHJvZ3JhbUlkKGNhdCwgY29tcGxpYW5jZUNhdGFsb2cpO1xuICAgIGlmICghcHJvZ3JhbUtleSB8fCBwcm9ncmFtS2V5ID09PSAndW5kZWZpbmVkJyB8fCBwcm9ncmFtS2V5ID09PSAnTmFOJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIW1hcFtwcm9ncmFtS2V5XSkge1xuICAgICAgbWFwW3Byb2dyYW1LZXldID0gW107XG4gICAgfVxuICAgIG1hcFtwcm9ncmFtS2V5XS5wdXNoKHtcbiAgICAgIC4uLmNhdCxcbiAgICAgIGlkOiBTdHJpbmcoY2F0Py5pZCA/PyBjYXQ/LmNhdGVnb3J5X2lkKSxcbiAgICAgIG5hbWU6IGNhdD8ubmFtZSA/PyBjYXQ/Lml0ZW1fbmFtZSxcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBtYXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNhaWxzUHJvZ3JhbUxpc3QocmVzOiBhbnkpOiBhbnlbXSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHJlcz8uZGF0YT8ucHJvZ3JhbXMpKSB7XG4gICAgcmV0dXJuIHJlcy5kYXRhLnByb2dyYW1zO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHJlcz8ucHJvZ3JhbXMpKSB7XG4gICAgcmV0dXJuIHJlcy5wcm9ncmFtcztcbiAgfVxuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFZGl0RGFzaGJvYXJkQ2RpZChcbiAgZGF0YTogYW55LFxuICBkYXNoYm9hcmREZXRhaWxzOiBhbnksXG4gIGRhc2hib2FyZElkOiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIGNvbnN0IHJvdyA9IGRhdGEgPz8gZGFzaGJvYXJkRGV0YWlscyA/PyB7fTtcbiAgY29uc3QgY29yZSA9IHJvdz8uZGFzaGJvYXJkX2RldGFpbHMgPz8gcm93Py5kYXNoYm9hcmQgPz8gcm93O1xuICBjb25zdCBjZGlkID1cbiAgICBjb3JlPy5jZGlkID8/XG4gICAgY29yZT8uY2RkaWQgPz9cbiAgICByb3c/LmNkaWQgPz9cbiAgICByb3c/LmNkZGlkID8/XG4gICAgZGFzaGJvYXJkRGV0YWlscz8uY2RpZCA/P1xuICAgIGRhc2hib2FyZERldGFpbHM/LmNkZGlkO1xuICBpZiAoY2RpZCAhPSBudWxsICYmIGNkaWQgIT09ICcnKSB7XG4gICAgcmV0dXJuIFN0cmluZyhjZGlkKTtcbiAgfVxuICBjb25zdCBmYWxsYmFjayA9IGRhc2hib2FyZElkID8/ICcnO1xuICBpZiAoZmFsbGJhY2sgJiYgIS9eXFxkKyQvLnRlc3QoU3RyaW5nKGZhbGxiYWNrKSkpIHtcbiAgICByZXR1cm4gU3RyaW5nKGZhbGxiYWNrKTtcbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3RlZFByb2dyYW1zTWFwKFxuICBkYXRhOiBhbnlcbik6IFByb2dyYW1TZWxlY3Rpb25NYXAgfCB1bmRlZmluZWQge1xuICBjb25zdCBtYXAgPSBkYXRhPy5wcm9ncmFtPy5zZWxlY3RlZF9wcm9ncmFtcztcbiAgaWYgKG1hcCAmJiB0eXBlb2YgbWFwID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShtYXApKSB7XG4gICAgcmV0dXJuIG1hcDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyQWN0aXZlV2lkZ2V0cyh3aWRnZXRzOiBhbnlbXSk6IGFueVtdIHtcbiAgcmV0dXJuICh3aWRnZXRzID8/IFtdKS5maWx0ZXIoKHcpID0+ICF3Py5zdGF0ZSB8fCB3LnN0YXRlID09PSAnQUNUSVZFJyk7XG59XG4iXX0=
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { Component, ViewChild,
|
|
1
|
+
import { Component, ViewChild, } from '@angular/core';
|
|
2
2
|
import { InsertionDirective } from './insertion.directive';
|
|
3
3
|
import { Subject } from 'rxjs';
|
|
4
4
|
import { NavigationEnd, NavigationError, NavigationStart, } from '@angular/router';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import * as i1 from "./dialog-ref";
|
|
7
7
|
import * as i2 from "./dialog-config";
|
|
8
|
-
import * as i3 from "@angular/
|
|
9
|
-
import * as i4 from "
|
|
10
|
-
import * as i5 from "
|
|
8
|
+
import * as i3 from "@angular/router";
|
|
9
|
+
import * as i4 from "@angular/common";
|
|
10
|
+
import * as i5 from "./insertion.directive";
|
|
11
11
|
export class DialogComponent {
|
|
12
12
|
componentFactoryResolver;
|
|
13
13
|
cd;
|
|
@@ -83,17 +83,14 @@ export class DialogComponent {
|
|
|
83
83
|
this.onDialogClose.next(data);
|
|
84
84
|
document.body.style.overflow = 'auto';
|
|
85
85
|
}
|
|
86
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DialogComponent, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.ChangeDetectorRef }, { token: i1.DialogRef }, { token: i2.DialogConfig }, { token:
|
|
87
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DialogComponent, selector: "app-dialog", viewQueries: [{ propertyName: "insertionPoint", first: true, predicate: InsertionDirective, descendants: true, static: true }], ngImport: i0, template: "<div\n class=\"overlay\"\n (click)=\"onOverlayClicked($event)\"\n [ngClass]=\"{\n top: position === 'TOP',\n right: position === 'RIGHT',\n bottom: position === 'BOTTOM',\n left: position === 'LEFT',\n center: position === 'CENTER',\n black: background === 'black'\n }\" [class.pointer-none]=\"pointer === 'none'\"\n>\n <div\n class=\"dialog\"\n [class.animate]=\"animation\"\n (click)=\"onDialogClicked($event)\"\n [ngClass]=\"{\n top: position === 'TOP',\n right: position === 'RIGHT',\n bottom: position === 'BOTTOM',\n left: position === 'LEFT',\n center: position === 'CENTER'\n }\"\n >\n <ng-template appInsertion></ng-template>\n </div>\n</div>\n", styles: [".overlay{display:flex;position:fixed;inset:0;align-items:center;justify-content:center;z-index:9}.overlay.low{z-index:1}.overlay.black{background:#000000b3}.overlay.top{align-items:flex-start}.overlay.right{justify-content:flex-end}.overlay.bottom{align-items:flex-end}.overlay.left{justify-content:flex-start}.dialog{position:relative}.dialog.animate.top{animation:animate-top .2s cubic-bezier(.25,.46,.45,.94) both}@keyframes animate-top{0%{transform:translateY(-100px)}to{transform:translateY(0)}}.dialog.animate.right{animation:animate-right .2s cubic-bezier(.25,.46,.45,.94) both}@keyframes animate-right{0%{transform:translate(100%)}to{transform:translate(0)}}.pointer-none{pointer-events:none}\n"], dependencies: [{ kind: "directive", type:
|
|
86
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DialogComponent, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.ChangeDetectorRef }, { token: i1.DialogRef }, { token: i2.DialogConfig }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
87
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DialogComponent, selector: "app-dialog", viewQueries: [{ propertyName: "insertionPoint", first: true, predicate: InsertionDirective, descendants: true, static: true }], ngImport: i0, template: "<div\n class=\"overlay\"\n (click)=\"onOverlayClicked($event)\"\n [ngClass]=\"{\n top: position === 'TOP',\n right: position === 'RIGHT',\n bottom: position === 'BOTTOM',\n left: position === 'LEFT',\n center: position === 'CENTER',\n black: background === 'black'\n }\" [class.pointer-none]=\"pointer === 'none'\"\n>\n <div\n class=\"dialog\"\n [class.animate]=\"animation\"\n (click)=\"onDialogClicked($event)\"\n [ngClass]=\"{\n top: position === 'TOP',\n right: position === 'RIGHT',\n bottom: position === 'BOTTOM',\n left: position === 'LEFT',\n center: position === 'CENTER'\n }\"\n >\n <ng-template appInsertion></ng-template>\n </div>\n</div>\n", styles: [".overlay{display:flex;position:fixed;inset:0;align-items:center;justify-content:center;z-index:9}.overlay.low{z-index:1}.overlay.black{background:#000000b3}.overlay.top{align-items:flex-start}.overlay.right{justify-content:flex-end}.overlay.bottom{align-items:flex-end}.overlay.left{justify-content:flex-start}.dialog{position:relative}.dialog.animate.top{animation:animate-top .2s cubic-bezier(.25,.46,.45,.94) both}@keyframes animate-top{0%{transform:translateY(-100px)}to{transform:translateY(0)}}.dialog.animate.right{animation:animate-right .2s cubic-bezier(.25,.46,.45,.94) both}@keyframes animate-right{0%{transform:translate(100%)}to{transform:translate(0)}}.pointer-none{pointer-events:none}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.InsertionDirective, selector: "[appInsertion]" }] });
|
|
88
88
|
}
|
|
89
89
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DialogComponent, decorators: [{
|
|
90
90
|
type: Component,
|
|
91
91
|
args: [{ selector: 'app-dialog', template: "<div\n class=\"overlay\"\n (click)=\"onOverlayClicked($event)\"\n [ngClass]=\"{\n top: position === 'TOP',\n right: position === 'RIGHT',\n bottom: position === 'BOTTOM',\n left: position === 'LEFT',\n center: position === 'CENTER',\n black: background === 'black'\n }\" [class.pointer-none]=\"pointer === 'none'\"\n>\n <div\n class=\"dialog\"\n [class.animate]=\"animation\"\n (click)=\"onDialogClicked($event)\"\n [ngClass]=\"{\n top: position === 'TOP',\n right: position === 'RIGHT',\n bottom: position === 'BOTTOM',\n left: position === 'LEFT',\n center: position === 'CENTER'\n }\"\n >\n <ng-template appInsertion></ng-template>\n </div>\n</div>\n", styles: [".overlay{display:flex;position:fixed;inset:0;align-items:center;justify-content:center;z-index:9}.overlay.low{z-index:1}.overlay.black{background:#000000b3}.overlay.top{align-items:flex-start}.overlay.right{justify-content:flex-end}.overlay.bottom{align-items:flex-end}.overlay.left{justify-content:flex-start}.dialog{position:relative}.dialog.animate.top{animation:animate-top .2s cubic-bezier(.25,.46,.45,.94) both}@keyframes animate-top{0%{transform:translateY(-100px)}to{transform:translateY(0)}}.dialog.animate.right{animation:animate-right .2s cubic-bezier(.25,.46,.45,.94) both}@keyframes animate-right{0%{transform:translate(100%)}to{transform:translate(0)}}.pointer-none{pointer-events:none}\n"] }]
|
|
92
|
-
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.ChangeDetectorRef }, { type: i1.DialogRef }, { type: i2.DialogConfig }, { type:
|
|
93
|
-
type: Inject,
|
|
94
|
-
args: ['router']
|
|
95
|
-
}] }]; }, propDecorators: { insertionPoint: [{
|
|
92
|
+
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.ChangeDetectorRef }, { type: i1.DialogRef }, { type: i2.DialogConfig }, { type: i3.Router }]; }, propDecorators: { insertionPoint: [{
|
|
96
93
|
type: ViewChild,
|
|
97
94
|
args: [InsertionDirective, { static: true }]
|
|
98
95
|
}] } });
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NyZWF0ZS1kYXNoYm9hcmQvc3JjL2xpYi91aS1raXQvZGlhbG9nL2RpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcmVhdGUtZGFzaGJvYXJkL3NyYy9saWIvdWkta2l0L2RpYWxvZy9kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFHVCxTQUFTLEdBTVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUcvQixPQUFPLEVBQ0wsYUFBYSxFQUNiLGVBQWUsRUFDZixlQUFlLEdBRWhCLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7QUFPekIsTUFBTSxPQUFPLGVBQWU7SUFlaEI7SUFDQTtJQUNBO0lBQ0Q7SUFDQztJQWxCVixZQUFZLENBQXFCO0lBQ2pDLFFBQVEsQ0FBTTtJQUNkLFVBQVUsQ0FBTTtJQUNoQixPQUFPLENBQU07SUFFYixjQUFjLENBQXNCO0lBQ3BDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFFQSxhQUFhLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztJQUM3QyxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVuRCxrQkFBa0IsQ0FBYTtJQUUvQixZQUNVLHdCQUFrRCxFQUNsRCxFQUFxQixFQUNyQixTQUFvQixFQUNyQixNQUFvQixFQUNuQixNQUFjO1FBSmQsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNyQixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQWM7UUFDbkIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUV0Qix5Q0FBeUM7UUFDekMsaUNBQWlDO1FBQ2pDLDhDQUE4QztRQUM5QyxzREFBc0Q7SUFDeEQsQ0FBQztJQUNELFFBQVE7UUFDTixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDekMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN4QyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDMUMsSUFBSSxLQUFLLFlBQVksZUFBZSxFQUFFO2dCQUNwQyx5QkFBeUI7YUFDMUI7WUFDRCxJQUFJLEtBQUssWUFBWSxhQUFhLEVBQUU7Z0JBQ2xDLHlCQUF5QjtnQkFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUN4QjtZQUNELElBQUksS0FBSyxZQUFZLGVBQWUsRUFBRTtnQkFDcEMseUJBQXlCO2dCQUN6Qix3QkFBd0I7YUFDekI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBQWU7UUFDOUIsMEJBQTBCO0lBQzVCLENBQUM7SUFFRCxlQUFlLENBQUMsR0FBZTtRQUM3QixHQUFHLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELGtCQUFrQixDQUFDLGFBQXdCO1FBQ3pDLE1BQU0sZ0JBQWdCLEdBQ3BCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV2RSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7UUFDOUQsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFekIsSUFBSSxDQUFDLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFVO1FBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztJQUN4QyxDQUFDO3dHQW5GVSxlQUFlOzRGQUFmLGVBQWUsa0dBS2Ysa0JBQWtCLDhEQ2hDL0IsbXRCQTJCQTs7NEZEQWEsZUFBZTtrQkFMM0IsU0FBUzsrQkFDRSxZQUFZO3VOQVV0QixjQUFjO3NCQURiLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBUeXBlLFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIFZpZXdDaGlsZCxcbiAgT25EZXN0cm95LFxuICBDb21wb25lbnRSZWYsXG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW5zZXJ0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi9pbnNlcnRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERpYWxvZ1JlZiB9IGZyb20gJy4vZGlhbG9nLXJlZic7XG5pbXBvcnQgeyBEaWFsb2dDb25maWcgfSBmcm9tICcuL2RpYWxvZy1jb25maWcnO1xuaW1wb3J0IHtcbiAgTmF2aWdhdGlvbkVuZCxcbiAgTmF2aWdhdGlvbkVycm9yLFxuICBOYXZpZ2F0aW9uU3RhcnQsXG4gIFJvdXRlcixcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWRpYWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kaWFsb2cuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uSW5pdCB7XG4gIGNvbXBvbmVudFJlZiE6IENvbXBvbmVudFJlZjxhbnk+O1xuICBwb3NpdGlvbjogYW55O1xuICBiYWNrZ3JvdW5kOiBhbnk7XG4gIHBvaW50ZXI6IGFueTtcbiAgQFZpZXdDaGlsZChJbnNlcnRpb25EaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGluc2VydGlvblBvaW50ITogSW5zZXJ0aW9uRGlyZWN0aXZlO1xuICBhbmltYXRpb24gPSB0cnVlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgb25EaWFsb2dDbG9zZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgcHVibGljIG9uQ2xvc2UgPSB0aGlzLm9uRGlhbG9nQ2xvc2UuYXNPYnNlcnZhYmxlKCk7XG5cbiAgY2hpbGRDb21wb25lbnRUeXBlITogVHlwZTxhbnk+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBkaWFsb2dSZWY6IERpYWxvZ1JlZixcbiAgICBwdWJsaWMgY29uZmlnOiBEaWFsb2dDb25maWcsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICApIHtcbiAgICAvLyB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMuY29tcG9uZW50UmVmO1xuICAgIC8vIHRoaXMuYW5pbWF0ZSA9ICAgdGhpcy5hbmltYXRlO1xuICAgIC8vIHRoaXMuaW5zZXJ0aW9uUG9pbnQgPSAgdGhpcy5pbnNlcnRpb25Qb2ludDtcbiAgICAvLyB0aGlzLmNoaWxkQ29tcG9uZW50VHlwZSA9ICB0aGlzLmNoaWxkQ29tcG9uZW50VHlwZTtcbiAgfVxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy5jb25maWcucG9zaXRpb247XG4gICAgdGhpcy5iYWNrZ3JvdW5kID0gdGhpcy5jb25maWcuYmFja2dyb3VuZDtcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmFuaW1hdGlvbiA9IGZhbHNlO1xuICAgIH0sIDIwMCk7XG4gICAgdGhpcy5yb3V0ZUFjdGlvbigpO1xuICB9XG5cbiAgcm91dGVBY3Rpb24oKSB7XG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KSB7XG4gICAgICAgIC8vIFNob3cgbG9hZGluZyBpbmRpY2F0b3JcbiAgICAgIH1cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcbiAgICAgICAgLy8gSGlkZSBsb2FkaW5nIGluZGljYXRvclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVycm9yKSB7XG4gICAgICAgIC8vIEhpZGUgbG9hZGluZyBpbmRpY2F0b3JcbiAgICAgICAgLy8gUHJlc2VudCBlcnJvciB0byB1c2VyXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMubG9hZENoaWxkQ29tcG9uZW50KHRoaXMuY2hpbGRDb21wb25lbnRUeXBlKTtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG9uT3ZlcmxheUNsaWNrZWQoZXZ0OiBNb3VzZUV2ZW50KSB7XG4gICAgLy8gdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgfVxuXG4gIG9uRGlhbG9nQ2xpY2tlZChldnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBsb2FkQ2hpbGRDb21wb25lbnQoY29tcG9uZW50VHlwZTogVHlwZTxhbnk+KSB7XG4gICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9XG4gICAgICB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnRUeXBlKTtcblxuICAgIGNvbnN0IHZpZXdDb250YWluZXJSZWYgPSB0aGlzLmluc2VydGlvblBvaW50LnZpZXdDb250YWluZXJSZWY7XG4gICAgdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuXG4gICAgdGhpcy5jb21wb25lbnRSZWYgPSB2aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRGYWN0b3J5KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlKGRhdGE/OiBhbnkpIHtcbiAgICB0aGlzLm9uRGlhbG9nQ2xvc2UubmV4dChkYXRhKTtcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwib3ZlcmxheVwiXG4gIChjbGljayk9XCJvbk92ZXJsYXlDbGlja2VkKCRldmVudClcIlxuICBbbmdDbGFzc109XCJ7XG4gICAgdG9wOiBwb3NpdGlvbiA9PT0gJ1RPUCcsXG4gICAgcmlnaHQ6IHBvc2l0aW9uID09PSAnUklHSFQnLFxuICAgIGJvdHRvbTogcG9zaXRpb24gPT09ICdCT1RUT00nLFxuICAgIGxlZnQ6IHBvc2l0aW9uID09PSAnTEVGVCcsXG4gICAgY2VudGVyOiBwb3NpdGlvbiA9PT0gJ0NFTlRFUicsXG4gICAgYmxhY2s6IGJhY2tncm91bmQgPT09ICdibGFjaydcbiAgfVwiIFtjbGFzcy5wb2ludGVyLW5vbmVdPVwicG9pbnRlciA9PT0gJ25vbmUnXCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZGlhbG9nXCJcbiAgICBbY2xhc3MuYW5pbWF0ZV09XCJhbmltYXRpb25cIlxuICAgIChjbGljayk9XCJvbkRpYWxvZ0NsaWNrZWQoJGV2ZW50KVwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgdG9wOiBwb3NpdGlvbiA9PT0gJ1RPUCcsXG4gICAgICByaWdodDogcG9zaXRpb24gPT09ICdSSUdIVCcsXG4gICAgICBib3R0b206IHBvc2l0aW9uID09PSAnQk9UVE9NJyxcbiAgICAgIGxlZnQ6IHBvc2l0aW9uID09PSAnTEVGVCcsXG4gICAgICBjZW50ZXI6IHBvc2l0aW9uID09PSAnQ0VOVEVSJ1xuICAgIH1cIlxuICA+XG4gICAgPG5nLXRlbXBsYXRlIGFwcEluc2VydGlvbj48L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { TableLoaderComponent } from './table-loader/table-loader.component';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class LoadersModule {
|
|
6
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LoadersModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
7
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: LoadersModule, declarations: [TableLoaderComponent], imports: [CommonModule], exports: [TableLoaderComponent] });
|
|
8
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LoadersModule, imports: [CommonModule] });
|
|
9
|
+
}
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LoadersModule, decorators: [{
|
|
11
|
+
type: NgModule,
|
|
12
|
+
args: [{
|
|
13
|
+
declarations: [
|
|
14
|
+
TableLoaderComponent
|
|
15
|
+
],
|
|
16
|
+
imports: [
|
|
17
|
+
CommonModule
|
|
18
|
+
],
|
|
19
|
+
exports: [
|
|
20
|
+
TableLoaderComponent
|
|
21
|
+
]
|
|
22
|
+
}]
|
|
23
|
+
}] });
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVycy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcmVhdGUtZGFzaGJvYXJkL3NyYy9saWIvdWkta2l0L2xvYWRlcnMvbG9hZGVycy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7O0FBZTdFLE1BQU0sT0FBTyxhQUFhO3dHQUFiLGFBQWE7eUdBQWIsYUFBYSxpQkFUdEIsb0JBQW9CLGFBR3BCLFlBQVksYUFHWixvQkFBb0I7eUdBR1gsYUFBYSxZQU50QixZQUFZOzs0RkFNSCxhQUFhO2tCQVh6QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixvQkFBb0I7cUJBQ3JCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3FCQUNiO29CQUNELE9BQU8sRUFBRTt3QkFDUCxvQkFBb0I7cUJBQ3JCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUYWJsZUxvYWRlckNvbXBvbmVudCB9IGZyb20gJy4vdGFibGUtbG9hZGVyL3RhYmxlLWxvYWRlci5jb21wb25lbnQnO1xuXG5cblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgVGFibGVMb2FkZXJDb21wb25lbnRcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgVGFibGVMb2FkZXJDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBMb2FkZXJzTW9kdWxlIHsgfVxuIl19
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
export class TableLoaderComponent {
|
|
5
|
+
listSize = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
|
|
6
|
+
constructor() { }
|
|
7
|
+
ngOnInit() {
|
|
8
|
+
}
|
|
9
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableLoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TableLoaderComponent, selector: "app-table-loader", inputs: { listSize: "listSize" }, ngImport: i0, template: "<div class=\"table\">\n <table class=\"table-loader\">\n <tbody>\n <tr *ngFor=\"let data of listSize\">\n <td class=\"serial\">\n <span class=\"serial\"></span>\n </td>\n <td class=\"name\" width=\"50%\">\n <span class=\"loader\"></span>\n </td>\n <td class=\"action\" width=\"50%\">\n <span class=\"loader\"></span>\n </td>\n </tr>\n </tbody>\n </table>\n</div>", styles: [".table table.table-loader{width:100%;position:relative;border-collapse:separate;border-spacing:0 .1875rem;border:none;table-layout:auto}.table table.table-loader thead tr th{font-size:.6875rem;padding:.75rem .625rem;background:#f1f1f1;text-transform:uppercase;color:#747576;font-weight:600;line-height:1.0625rem;text-align:left;position:sticky;top:.1875rem;font-weight:400;white-space:nowrap;z-index:2}.table table.table-loader thead tr th:before{height:.3125rem;content:\"\";position:absolute;top:-.1875rem;right:0;left:0;background:#f1f1f1;z-index:1}.table table.table-loader thead tr th:first-child{border-radius:2px 0 0;text-align:center;width:2.75rem}.table table.table-loader thead tr th:last-child{border-radius:0 2px 0 0}.table table.table-loader thead tr th:last-child:before{border-radius:0 2px 0 0}.table table.table-loader tbody tr{margin-bottom:.1875rem;table-layout:auto;position:relative;transition:all .2s ease-in-out}.table table.table-loader tbody tr td{background:#fff;padding:0 .5rem;height:3.125rem;max-width:15.625rem;border:none;width:50%;table-layout:auto}.table table.table-loader tbody tr td.serial{width:2rem}.table table.table-loader tbody tr td span.serial{width:1rem;margin:0;background:#f8f8f8;writing-mode:vertical-lr;color:#747576;font-size:.625rem;display:flex;align-items:center;justify-content:center;height:3.125rem;font-weight:500}.table table.table-loader tbody tr td span.loader{display:block;width:100%;height:.75rem;border-radius:.75rem;background:#f3f3f3}.table table.table-loader tbody tr td.name{width:calc(100% - 31.25rem);padding-left:0}.table table.table-loader tbody tr td:first-child{border-radius:2px 0 0 2px}.table table.table-loader tbody tr td:last-child{text-align:right;border-radius:0 2px 2px 0}.table table.table-loader tbody tr td:last-child .loader{border-radius:.5rem;width:1.5rem;float:right}.table table.table-loader tbody tr:hover{box-shadow:0 0 15px #1e5dd359;z-index:2}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
11
|
+
}
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableLoaderComponent, decorators: [{
|
|
13
|
+
type: Component,
|
|
14
|
+
args: [{ selector: 'app-table-loader', template: "<div class=\"table\">\n <table class=\"table-loader\">\n <tbody>\n <tr *ngFor=\"let data of listSize\">\n <td class=\"serial\">\n <span class=\"serial\"></span>\n </td>\n <td class=\"name\" width=\"50%\">\n <span class=\"loader\"></span>\n </td>\n <td class=\"action\" width=\"50%\">\n <span class=\"loader\"></span>\n </td>\n </tr>\n </tbody>\n </table>\n</div>", styles: [".table table.table-loader{width:100%;position:relative;border-collapse:separate;border-spacing:0 .1875rem;border:none;table-layout:auto}.table table.table-loader thead tr th{font-size:.6875rem;padding:.75rem .625rem;background:#f1f1f1;text-transform:uppercase;color:#747576;font-weight:600;line-height:1.0625rem;text-align:left;position:sticky;top:.1875rem;font-weight:400;white-space:nowrap;z-index:2}.table table.table-loader thead tr th:before{height:.3125rem;content:\"\";position:absolute;top:-.1875rem;right:0;left:0;background:#f1f1f1;z-index:1}.table table.table-loader thead tr th:first-child{border-radius:2px 0 0;text-align:center;width:2.75rem}.table table.table-loader thead tr th:last-child{border-radius:0 2px 0 0}.table table.table-loader thead tr th:last-child:before{border-radius:0 2px 0 0}.table table.table-loader tbody tr{margin-bottom:.1875rem;table-layout:auto;position:relative;transition:all .2s ease-in-out}.table table.table-loader tbody tr td{background:#fff;padding:0 .5rem;height:3.125rem;max-width:15.625rem;border:none;width:50%;table-layout:auto}.table table.table-loader tbody tr td.serial{width:2rem}.table table.table-loader tbody tr td span.serial{width:1rem;margin:0;background:#f8f8f8;writing-mode:vertical-lr;color:#747576;font-size:.625rem;display:flex;align-items:center;justify-content:center;height:3.125rem;font-weight:500}.table table.table-loader tbody tr td span.loader{display:block;width:100%;height:.75rem;border-radius:.75rem;background:#f3f3f3}.table table.table-loader tbody tr td.name{width:calc(100% - 31.25rem);padding-left:0}.table table.table-loader tbody tr td:first-child{border-radius:2px 0 0 2px}.table table.table-loader tbody tr td:last-child{text-align:right;border-radius:0 2px 2px 0}.table table.table-loader tbody tr td:last-child .loader{border-radius:.5rem;width:1.5rem;float:right}.table table.table-loader tbody tr:hover{box-shadow:0 0 15px #1e5dd359;z-index:2}\n"] }]
|
|
15
|
+
}], ctorParameters: function () { return []; }, propDecorators: { listSize: [{
|
|
16
|
+
type: Input
|
|
17
|
+
}] } });
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbG9hZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NyZWF0ZS1kYXNoYm9hcmQvc3JjL2xpYi91aS1raXQvbG9hZGVycy90YWJsZS1sb2FkZXIvdGFibGUtbG9hZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NyZWF0ZS1kYXNoYm9hcmQvc3JjL2xpYi91aS1raXQvbG9hZGVycy90YWJsZS1sb2FkZXIvdGFibGUtbG9hZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7QUFPekQsTUFBTSxPQUFPLG9CQUFvQjtJQUV0QixRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU1RCxnQkFBZ0IsQ0FBQztJQUVqQixRQUFRO0lBQ1IsQ0FBQzt3R0FQVSxvQkFBb0I7NEZBQXBCLG9CQUFvQiwwRkNQakMseWlCQWdCTTs7NEZEVE8sb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGtCQUFrQjswRUFNbkIsUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtdGFibGUtbG9hZGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLWxvYWRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLWxvYWRlci5jb21wb25lbnQubGVzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlTG9hZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASW5wdXQoKSBsaXN0U2l6ZSA9IFsxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxXTtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0YWJsZVwiPlxuICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlLWxvYWRlclwiPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGRhdGEgb2YgbGlzdFNpemVcIj5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJzZXJpYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZXJpYWxcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJuYW1lXCIgd2lkdGg9XCI1MCVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsb2FkZXJcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhY3Rpb25cIiB3aWR0aD1cIjUwJVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxvYWRlclwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPlxuPC9kaXY+Il19
|