uni-component-tw 1.2.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.md +1 -1
  2. package/esm2022/lib/uni-article/uni-article.component.mjs +40 -0
  3. package/esm2022/lib/uni-header/uni-header.component.mjs +24 -0
  4. package/esm2022/lib/uni-login-modal/uni-login-modal.component.mjs +53 -0
  5. package/esm2022/lib/uni-pie-chart/uni-pie-chart.component.mjs +61 -0
  6. package/esm2022/lib/uni-side-menu/uni-side-menu.component.mjs +79 -0
  7. package/esm2022/public-api.mjs +9 -0
  8. package/esm2022/uni-component-tw.mjs +2 -2
  9. package/fesm2022/uni-component-tw.mjs +237 -3
  10. package/fesm2022/uni-component-tw.mjs.map +1 -1
  11. package/index.d.ts +5 -1
  12. package/{uni-login-modal/src → lib/uni-login-modal}/uni-login-modal.component.d.ts +4 -4
  13. package/{uni-pie-chart/src → lib/uni-pie-chart}/uni-pie-chart.component.d.ts +3 -3
  14. package/{uni-side-menu/src → lib/uni-side-menu}/uni-side-menu.component.d.ts +6 -6
  15. package/package.json +2 -40
  16. package/public-api.d.ts +5 -0
  17. package/esm2022/index.mjs +0 -5
  18. package/esm2022/uni-article/index.mjs +0 -2
  19. package/esm2022/uni-article/src/uni-article.component.mjs +0 -108
  20. package/esm2022/uni-article/uni-component-tw-uni-article.mjs +0 -5
  21. package/esm2022/uni-header/index.mjs +0 -2
  22. package/esm2022/uni-header/src/uni-header.component.mjs +0 -66
  23. package/esm2022/uni-header/uni-component-tw-uni-header.mjs +0 -5
  24. package/esm2022/uni-login-modal/index.mjs +0 -2
  25. package/esm2022/uni-login-modal/src/uni-login-modal.component.mjs +0 -146
  26. package/esm2022/uni-login-modal/uni-component-tw-uni-login-modal.mjs +0 -5
  27. package/esm2022/uni-pie-chart/index.mjs +0 -2
  28. package/esm2022/uni-pie-chart/src/uni-pie-chart.component.mjs +0 -159
  29. package/esm2022/uni-pie-chart/uni-component-tw-uni-pie-chart.mjs +0 -5
  30. package/esm2022/uni-side-menu/index.mjs +0 -2
  31. package/esm2022/uni-side-menu/src/uni-side-menu.component.mjs +0 -317
  32. package/esm2022/uni-side-menu/uni-component-tw-uni-side-menu.mjs +0 -5
  33. package/esm2022/uni-wrapper-chart/index.mjs +0 -2
  34. package/esm2022/uni-wrapper-chart/src/uni-wrapper-chart.component.mjs +0 -36
  35. package/esm2022/uni-wrapper-chart/uni-component-tw-uni-wrapper-chart.mjs +0 -5
  36. package/fesm2022/uni-component-tw-uni-article.mjs +0 -115
  37. package/fesm2022/uni-component-tw-uni-article.mjs.map +0 -1
  38. package/fesm2022/uni-component-tw-uni-header.mjs +0 -73
  39. package/fesm2022/uni-component-tw-uni-header.mjs.map +0 -1
  40. package/fesm2022/uni-component-tw-uni-login-modal.mjs +0 -152
  41. package/fesm2022/uni-component-tw-uni-login-modal.mjs.map +0 -1
  42. package/fesm2022/uni-component-tw-uni-pie-chart.mjs +0 -166
  43. package/fesm2022/uni-component-tw-uni-pie-chart.mjs.map +0 -1
  44. package/fesm2022/uni-component-tw-uni-side-menu.mjs +0 -324
  45. package/fesm2022/uni-component-tw-uni-side-menu.mjs.map +0 -1
  46. package/fesm2022/uni-component-tw-uni-wrapper-chart.mjs +0 -43
  47. package/fesm2022/uni-component-tw-uni-wrapper-chart.mjs.map +0 -1
  48. package/uni-article/index.d.ts +0 -1
  49. package/uni-header/index.d.ts +0 -1
  50. package/uni-login-modal/index.d.ts +0 -1
  51. package/uni-pie-chart/index.d.ts +0 -1
  52. package/uni-side-menu/index.d.ts +0 -1
  53. package/uni-wrapper-chart/index.d.ts +0 -1
  54. package/uni-wrapper-chart/src/uni-wrapper-chart.component.d.ts +0 -13
  55. /package/{uni-article/src → lib/uni-article}/uni-article.component.d.ts +0 -0
  56. /package/{uni-header/src → lib/uni-header}/uni-header.component.d.ts +0 -0
@@ -1,324 +0,0 @@
1
- import * as i1 from '@angular/common';
2
- import { CommonModule, NgOptimizedImage } from '@angular/common';
3
- import * as i0 from '@angular/core';
4
- import { inject, input, output, signal, Component, ChangeDetectionStrategy } from '@angular/core';
5
- import { Router, RouterLink, RouterLinkActive } from '@angular/router';
6
- import * as i2 from 'devextreme-angular/ui/button';
7
- import { DxButtonModule } from 'devextreme-angular/ui/button';
8
- import * as i3 from 'devextreme-angular/ui/switch';
9
- import { DxSwitchModule } from 'devextreme-angular/ui/switch';
10
- import * as i4 from 'devextreme-angular/ui/select-box';
11
- import { DxSelectBoxModule } from 'devextreme-angular/ui/select-box';
12
- import { FaIconComponent } from '@fortawesome/angular-fontawesome';
13
- import { faUser, faArrowRightToBracket, faArrowRightFromBracket, faSun, faMoon, faLanguage } from '@fortawesome/free-solid-svg-icons';
14
- import { UNITranslateService, UNITranslatePipe } from 'uni-service/translate';
15
- import { UNIAuthService } from 'uni-service/auth';
16
-
17
- /* eslint-disable @typescript-eslint/no-explicit-any */
18
- class UniSideMenuComponent {
19
- constructor() {
20
- /* Service */
21
- this.router = inject(Router);
22
- this.authService = inject(UNIAuthService);
23
- this.translateService = inject(UNITranslateService);
24
- /* Input */
25
- this.pathBrandLogo = input.required();
26
- this.menuItems = input([]);
27
- this.menuInteractions = input([]);
28
- this.user = input.required();
29
- /* Output */
30
- this.evtToggleMenu = output();
31
- /* Variables */
32
- this.darkMode = signal(localStorage.getItem('uni-theme') === 'dark');
33
- /* Icons */
34
- this.ICON = {
35
- USER: faUser,
36
- LOGIN: faArrowRightToBracket,
37
- LOGOUT: faArrowRightFromBracket,
38
- LIGHT_MODE: faSun,
39
- DARK_MODE: faMoon,
40
- LANGUAGE: faLanguage,
41
- };
42
- }
43
- /* ---------------------- Methods ---------------------- */
44
- updateTheme(e) {
45
- localStorage.setItem('uni-theme', e.value ? 'dark' : 'light');
46
- window.location.reload();
47
- }
48
- updateLanguage(e) {
49
- this.translateService.setLanguage(e.value);
50
- window.location.reload();
51
- }
52
- goToLogin() {
53
- this.evtToggleMenu.emit(false);
54
- this.router.navigate(['login']);
55
- }
56
- logout() {
57
- this.authService.logout$().subscribe(() => {
58
- const firstItem = this.menuItems().find((item) => item.visible && !item.disabled);
59
- this.evtToggleMenu.emit(false);
60
- this.router.navigate([firstItem?.path ?? 'login']);
61
- });
62
- }
63
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: UniSideMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
64
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: UniSideMenuComponent, isStandalone: true, selector: "uni-side-menu", inputs: { pathBrandLogo: { classPropertyName: "pathBrandLogo", publicName: "pathBrandLogo", isSignal: true, isRequired: true, transformFunction: null }, menuItems: { classPropertyName: "menuItems", publicName: "menuItems", isSignal: true, isRequired: false, transformFunction: null }, menuInteractions: { classPropertyName: "menuInteractions", publicName: "menuInteractions", isSignal: true, isRequired: false, transformFunction: null }, user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { evtToggleMenu: "evtToggleMenu" }, ngImport: i0, template: `
65
- <aside
66
- class="flex h-screen w-[250px] flex-col gap-4 overflow-hidden rounded bg-zinc-800/60 p-4 shadow backdrop-blur-xl">
67
- <!-- user -->
68
- <div class="flex w-full items-center gap-4">
69
- <div class="flex flex-1 gap-2">
70
- @if (user(); as user) {
71
- <fa-icon [icon]="ICON.USER"></fa-icon>
72
- <span class="flex-1 truncate">{{ user.username }}</span>
73
- }
74
- </div>
75
- <dx-button [icon]="'close'" (onClick)="evtToggleMenu.emit(false)"></dx-button>
76
- </div>
77
-
78
- <!-- menu -->
79
- @if (menuItems().length) {
80
- <nav class="mt-8">
81
- <ul class="flex flex-col gap-2">
82
- @for (item of menuItems(); track item.id) {
83
- @if (item.visible) {
84
- <li>
85
- <a
86
- class="flex gap-2 rounded p-2 !text-white"
87
- [ngClass]="{
88
- 'hover:bg-zinc-600/60': !item.disabled,
89
- 'cursor-auto !opacity-25': item.disabled,
90
- }"
91
- [routerLink]="item.disabled ? null : item.path"
92
- routerLinkActive="bg-zinc-600/60"
93
- (click)="evtToggleMenu.emit(false)">
94
- <fa-icon class="basis-6" [icon]="item.icon"></fa-icon>
95
- <span class="flex-1 truncate">{{ item.label }}</span>
96
- </a>
97
- </li>
98
- }
99
- }
100
- </ul>
101
- </nav>
102
- }
103
-
104
- @if (menuInteractions().length) {
105
- <hr class="my-4 h-px border-0 bg-gray-600" />
106
-
107
- <ul class="flex flex-col gap-2">
108
- @for (item of menuInteractions(); track item.id) {
109
- @if (item.data.type === 'button') {
110
- <li class="item-setting-button">
111
- <button
112
- type="button"
113
- class="dx-theme-material-typography flex h-12 w-full items-center gap-2 rounded p-4"
114
- [class]="item.class"
115
- (click)="item.fun()">
116
- <fa-icon class="basis-6" [icon]="item.data.icon"></fa-icon>
117
- <span class="flex-1 truncate">{{ item.label }}</span>
118
- </button>
119
- </li>
120
- } @else if (item.data.type === 'select') {
121
- <li class="flex h-12 items-center gap-4 rounded bg-zinc-600/60 p-3 shadow">
122
- <span class="truncate">{{ item.label }}</span>
123
- <dx-select-box
124
- class="flex-1 basis-24"
125
- valueExpr="id"
126
- displayExpr="description"
127
- [items]="item.data.combos"
128
- [value]="item.data.value"
129
- stylingMode="underlined"
130
- placeholder=""
131
- (onValueChanged)="item.fun($event)"></dx-select-box>
132
- </li>
133
- }
134
- }
135
- </ul>
136
- }
137
-
138
- <!-- setting -->
139
- <hr class="my-4 h-px border-0 bg-gray-600" />
140
-
141
- <ul class="flex flex-col gap-2">
142
- <li class="flex h-12 items-center gap-2 rounded bg-zinc-600/60 p-4 text-white shadow">
143
- <fa-icon class="basis-6" [icon]="darkMode() ? ICON.DARK_MODE : ICON.LIGHT_MODE"></fa-icon>
144
- <span class="flex-1 truncate">{{ 'lblDarkMode' | translate }}</span>
145
- <dx-switch [value]="darkMode()" (onValueChanged)="updateTheme($event)"></dx-switch>
146
- </li>
147
- <li class="flex h-12 items-center gap-2 rounded bg-zinc-600/60 p-4 text-white shadow">
148
- <fa-icon class="basis-6" [icon]="ICON.LANGUAGE"></fa-icon>
149
- <span class="flex-1 truncate">{{ 'lblLanguage' | translate }}</span>
150
- <dx-select-box
151
- class="basis-12"
152
- [items]="translateService.translateInfo().languagesSupported"
153
- [value]="translateService.translateInfo().language"
154
- stylingMode="underlined"
155
- (onValueChanged)="updateLanguage($event)"></dx-select-box>
156
- </li>
157
- <!-- User | null | undefined -->
158
- @if (user() !== undefined) {
159
- <li>
160
- <button
161
- class="flex w-full items-center gap-2 rounded border border-white p-4 text-white shadow transition duration-300 ease-in-out hover:bg-white hover:text-gray-800"
162
- (click)="user() ? logout() : goToLogin()">
163
- <fa-icon [icon]="user() ? ICON.LOGOUT : ICON.LOGIN"></fa-icon>
164
- <span class="flex-1 truncate">{{
165
- (user() ? 'lblLogout' : 'lblLogin') | translate
166
- }}</span>
167
- </button>
168
- </li>
169
- }
170
- </ul>
171
-
172
- <!-- logo -->
173
- <div class="mt-auto flex content-end border-b border-white">
174
- <img
175
- class="ml-auto h-12"
176
- [ngSrc]="pathBrandLogo()"
177
- alt="Brand logo"
178
- [height]="30"
179
- [width]="125"
180
- priority />
181
- </div>
182
- </aside>
183
- `, isInline: true, styles: ["@tailwind base;@tailwind components;@tailwind utilities;:host{position:fixed;top:0;right:0;z-index:999}.item-setting-button button{box-shadow:inset 0 3px 6px #0009,inset 0 -3px 6px #0000004d,0 3px 6px #0006;transition:all .1s ease}.item-setting-button button:active{transform:translateY(1px);box-shadow:inset 0 3px 6px #0009,inset 0 -3px 6px #0000004d}:host ::ng-deep .dx-texteditor.dx-editor-underlined .dx-texteditor-input{padding:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: NgOptimizedImage, selector: "img[ngSrc]", inputs: ["ngSrc", "ngSrcset", "sizes", "width", "height", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "placeholder", "placeholderConfig", "src", "srcset"] }, { kind: "ngmodule", type: DxButtonModule }, { kind: "component", type: i2.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "ngmodule", type: DxSwitchModule }, { kind: "component", type: i3.DxSwitchComponent, selector: "dx-switch", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "isDirty", "isValid", "name", "readOnly", "rtlEnabled", "switchedOffText", "switchedOnText", "tabIndex", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "isDirtyChange", "isValidChange", "nameChange", "readOnlyChange", "rtlEnabledChange", "switchedOffTextChange", "switchedOnTextChange", "tabIndexChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "ngmodule", type: DxSelectBoxModule }, { kind: "component", type: i4.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "customItemCreateEvent", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isDirty", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "customItemCreateEventChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isDirtyChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "pipe", type: UNITranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
184
- }
185
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: UniSideMenuComponent, decorators: [{
186
- type: Component,
187
- args: [{ selector: 'uni-side-menu', standalone: true, imports: [
188
- CommonModule,
189
- RouterLink,
190
- RouterLinkActive,
191
- NgOptimizedImage,
192
- DxButtonModule,
193
- DxSwitchModule,
194
- DxSelectBoxModule,
195
- FaIconComponent,
196
- UNITranslatePipe,
197
- ], template: `
198
- <aside
199
- class="flex h-screen w-[250px] flex-col gap-4 overflow-hidden rounded bg-zinc-800/60 p-4 shadow backdrop-blur-xl">
200
- <!-- user -->
201
- <div class="flex w-full items-center gap-4">
202
- <div class="flex flex-1 gap-2">
203
- @if (user(); as user) {
204
- <fa-icon [icon]="ICON.USER"></fa-icon>
205
- <span class="flex-1 truncate">{{ user.username }}</span>
206
- }
207
- </div>
208
- <dx-button [icon]="'close'" (onClick)="evtToggleMenu.emit(false)"></dx-button>
209
- </div>
210
-
211
- <!-- menu -->
212
- @if (menuItems().length) {
213
- <nav class="mt-8">
214
- <ul class="flex flex-col gap-2">
215
- @for (item of menuItems(); track item.id) {
216
- @if (item.visible) {
217
- <li>
218
- <a
219
- class="flex gap-2 rounded p-2 !text-white"
220
- [ngClass]="{
221
- 'hover:bg-zinc-600/60': !item.disabled,
222
- 'cursor-auto !opacity-25': item.disabled,
223
- }"
224
- [routerLink]="item.disabled ? null : item.path"
225
- routerLinkActive="bg-zinc-600/60"
226
- (click)="evtToggleMenu.emit(false)">
227
- <fa-icon class="basis-6" [icon]="item.icon"></fa-icon>
228
- <span class="flex-1 truncate">{{ item.label }}</span>
229
- </a>
230
- </li>
231
- }
232
- }
233
- </ul>
234
- </nav>
235
- }
236
-
237
- @if (menuInteractions().length) {
238
- <hr class="my-4 h-px border-0 bg-gray-600" />
239
-
240
- <ul class="flex flex-col gap-2">
241
- @for (item of menuInteractions(); track item.id) {
242
- @if (item.data.type === 'button') {
243
- <li class="item-setting-button">
244
- <button
245
- type="button"
246
- class="dx-theme-material-typography flex h-12 w-full items-center gap-2 rounded p-4"
247
- [class]="item.class"
248
- (click)="item.fun()">
249
- <fa-icon class="basis-6" [icon]="item.data.icon"></fa-icon>
250
- <span class="flex-1 truncate">{{ item.label }}</span>
251
- </button>
252
- </li>
253
- } @else if (item.data.type === 'select') {
254
- <li class="flex h-12 items-center gap-4 rounded bg-zinc-600/60 p-3 shadow">
255
- <span class="truncate">{{ item.label }}</span>
256
- <dx-select-box
257
- class="flex-1 basis-24"
258
- valueExpr="id"
259
- displayExpr="description"
260
- [items]="item.data.combos"
261
- [value]="item.data.value"
262
- stylingMode="underlined"
263
- placeholder=""
264
- (onValueChanged)="item.fun($event)"></dx-select-box>
265
- </li>
266
- }
267
- }
268
- </ul>
269
- }
270
-
271
- <!-- setting -->
272
- <hr class="my-4 h-px border-0 bg-gray-600" />
273
-
274
- <ul class="flex flex-col gap-2">
275
- <li class="flex h-12 items-center gap-2 rounded bg-zinc-600/60 p-4 text-white shadow">
276
- <fa-icon class="basis-6" [icon]="darkMode() ? ICON.DARK_MODE : ICON.LIGHT_MODE"></fa-icon>
277
- <span class="flex-1 truncate">{{ 'lblDarkMode' | translate }}</span>
278
- <dx-switch [value]="darkMode()" (onValueChanged)="updateTheme($event)"></dx-switch>
279
- </li>
280
- <li class="flex h-12 items-center gap-2 rounded bg-zinc-600/60 p-4 text-white shadow">
281
- <fa-icon class="basis-6" [icon]="ICON.LANGUAGE"></fa-icon>
282
- <span class="flex-1 truncate">{{ 'lblLanguage' | translate }}</span>
283
- <dx-select-box
284
- class="basis-12"
285
- [items]="translateService.translateInfo().languagesSupported"
286
- [value]="translateService.translateInfo().language"
287
- stylingMode="underlined"
288
- (onValueChanged)="updateLanguage($event)"></dx-select-box>
289
- </li>
290
- <!-- User | null | undefined -->
291
- @if (user() !== undefined) {
292
- <li>
293
- <button
294
- class="flex w-full items-center gap-2 rounded border border-white p-4 text-white shadow transition duration-300 ease-in-out hover:bg-white hover:text-gray-800"
295
- (click)="user() ? logout() : goToLogin()">
296
- <fa-icon [icon]="user() ? ICON.LOGOUT : ICON.LOGIN"></fa-icon>
297
- <span class="flex-1 truncate">{{
298
- (user() ? 'lblLogout' : 'lblLogin') | translate
299
- }}</span>
300
- </button>
301
- </li>
302
- }
303
- </ul>
304
-
305
- <!-- logo -->
306
- <div class="mt-auto flex content-end border-b border-white">
307
- <img
308
- class="ml-auto h-12"
309
- [ngSrc]="pathBrandLogo()"
310
- alt="Brand logo"
311
- [height]="30"
312
- [width]="125"
313
- priority />
314
- </div>
315
- </aside>
316
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@tailwind base;@tailwind components;@tailwind utilities;:host{position:fixed;top:0;right:0;z-index:999}.item-setting-button button{box-shadow:inset 0 3px 6px #0009,inset 0 -3px 6px #0000004d,0 3px 6px #0006;transition:all .1s ease}.item-setting-button button:active{transform:translateY(1px);box-shadow:inset 0 3px 6px #0009,inset 0 -3px 6px #0000004d}:host ::ng-deep .dx-texteditor.dx-editor-underlined .dx-texteditor-input{padding:0}\n"] }]
317
- }] });
318
-
319
- /**
320
- * Generated bundle index. Do not edit.
321
- */
322
-
323
- export { UniSideMenuComponent };
324
- //# sourceMappingURL=uni-component-tw-uni-side-menu.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"uni-component-tw-uni-side-menu.mjs","sources":["../../../projects/uni-component-tw/uni-side-menu/src/uni-side-menu.component.ts","../../../projects/uni-component-tw/uni-side-menu/uni-component-tw-uni-side-menu.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { CommonModule, NgOptimizedImage } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, inject, input, output, signal } from '@angular/core';\r\nimport { Router, RouterLink, RouterLinkActive } from '@angular/router';\r\nimport { DxButtonModule } from 'devextreme-angular/ui/button';\r\nimport { DxSwitchModule } from 'devextreme-angular/ui/switch';\r\nimport { DxSelectBoxModule } from 'devextreme-angular/ui/select-box';\r\nimport { ValueChangedEvent as SwitchValueChangedEvent } from 'devextreme/ui/switch_types';\r\nimport { ValueChangedEvent as SelectBoxValueChangedEvent } from 'devextreme/ui/select_box_types';\r\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\r\nimport {\r\n IconDefinition,\r\n faArrowRightFromBracket,\r\n faArrowRightToBracket,\r\n faLanguage,\r\n faMoon,\r\n faSun,\r\n faUser,\r\n} from '@fortawesome/free-solid-svg-icons';\r\nimport { UNITranslatePipe, UNITranslateService } from 'uni-service/translate';\r\nimport { UNIAuthService, User } from 'uni-service/auth';\r\n\r\nexport type Combo = {\r\n id: number;\r\n code: string;\r\n description: string;\r\n};\r\n\r\nexport type MenuItem = {\r\n id: number;\r\n icon: IconDefinition;\r\n label: string;\r\n path: string;\r\n visible: boolean;\r\n disabled: boolean;\r\n};\r\n\r\nexport type MenuInteraction = {\r\n id: number;\r\n data:\r\n | { type: 'button'; icon: IconDefinition }\r\n | { type: 'select'; combos: Combo[]; value: number | null };\r\n label: string;\r\n class: string;\r\n fun: (...args: any) => void;\r\n visible: boolean;\r\n disabled: boolean;\r\n};\r\n\r\n@Component({\r\n selector: 'uni-side-menu',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n RouterLink,\r\n RouterLinkActive,\r\n NgOptimizedImage,\r\n DxButtonModule,\r\n DxSwitchModule,\r\n DxSelectBoxModule,\r\n FaIconComponent,\r\n UNITranslatePipe,\r\n ],\r\n template: `\r\n <aside\r\n class=\"flex h-screen w-[250px] flex-col gap-4 overflow-hidden rounded bg-zinc-800/60 p-4 shadow backdrop-blur-xl\">\r\n <!-- user -->\r\n <div class=\"flex w-full items-center gap-4\">\r\n <div class=\"flex flex-1 gap-2\">\r\n @if (user(); as user) {\r\n <fa-icon [icon]=\"ICON.USER\"></fa-icon>\r\n <span class=\"flex-1 truncate\">{{ user.username }}</span>\r\n }\r\n </div>\r\n <dx-button [icon]=\"'close'\" (onClick)=\"evtToggleMenu.emit(false)\"></dx-button>\r\n </div>\r\n\r\n <!-- menu -->\r\n @if (menuItems().length) {\r\n <nav class=\"mt-8\">\r\n <ul class=\"flex flex-col gap-2\">\r\n @for (item of menuItems(); track item.id) {\r\n @if (item.visible) {\r\n <li>\r\n <a\r\n class=\"flex gap-2 rounded p-2 !text-white\"\r\n [ngClass]=\"{\r\n 'hover:bg-zinc-600/60': !item.disabled,\r\n 'cursor-auto !opacity-25': item.disabled,\r\n }\"\r\n [routerLink]=\"item.disabled ? null : item.path\"\r\n routerLinkActive=\"bg-zinc-600/60\"\r\n (click)=\"evtToggleMenu.emit(false)\">\r\n <fa-icon class=\"basis-6\" [icon]=\"item.icon\"></fa-icon>\r\n <span class=\"flex-1 truncate\">{{ item.label }}</span>\r\n </a>\r\n </li>\r\n }\r\n }\r\n </ul>\r\n </nav>\r\n }\r\n\r\n @if (menuInteractions().length) {\r\n <hr class=\"my-4 h-px border-0 bg-gray-600\" />\r\n\r\n <ul class=\"flex flex-col gap-2\">\r\n @for (item of menuInteractions(); track item.id) {\r\n @if (item.data.type === 'button') {\r\n <li class=\"item-setting-button\">\r\n <button\r\n type=\"button\"\r\n class=\"dx-theme-material-typography flex h-12 w-full items-center gap-2 rounded p-4\"\r\n [class]=\"item.class\"\r\n (click)=\"item.fun()\">\r\n <fa-icon class=\"basis-6\" [icon]=\"item.data.icon\"></fa-icon>\r\n <span class=\"flex-1 truncate\">{{ item.label }}</span>\r\n </button>\r\n </li>\r\n } @else if (item.data.type === 'select') {\r\n <li class=\"flex h-12 items-center gap-4 rounded bg-zinc-600/60 p-3 shadow\">\r\n <span class=\"truncate\">{{ item.label }}</span>\r\n <dx-select-box\r\n class=\"flex-1 basis-24\"\r\n valueExpr=\"id\"\r\n displayExpr=\"description\"\r\n [items]=\"item.data.combos\"\r\n [value]=\"item.data.value\"\r\n stylingMode=\"underlined\"\r\n placeholder=\"\"\r\n (onValueChanged)=\"item.fun($event)\"></dx-select-box>\r\n </li>\r\n }\r\n }\r\n </ul>\r\n }\r\n\r\n <!-- setting -->\r\n <hr class=\"my-4 h-px border-0 bg-gray-600\" />\r\n\r\n <ul class=\"flex flex-col gap-2\">\r\n <li class=\"flex h-12 items-center gap-2 rounded bg-zinc-600/60 p-4 text-white shadow\">\r\n <fa-icon class=\"basis-6\" [icon]=\"darkMode() ? ICON.DARK_MODE : ICON.LIGHT_MODE\"></fa-icon>\r\n <span class=\"flex-1 truncate\">{{ 'lblDarkMode' | translate }}</span>\r\n <dx-switch [value]=\"darkMode()\" (onValueChanged)=\"updateTheme($event)\"></dx-switch>\r\n </li>\r\n <li class=\"flex h-12 items-center gap-2 rounded bg-zinc-600/60 p-4 text-white shadow\">\r\n <fa-icon class=\"basis-6\" [icon]=\"ICON.LANGUAGE\"></fa-icon>\r\n <span class=\"flex-1 truncate\">{{ 'lblLanguage' | translate }}</span>\r\n <dx-select-box\r\n class=\"basis-12\"\r\n [items]=\"translateService.translateInfo().languagesSupported\"\r\n [value]=\"translateService.translateInfo().language\"\r\n stylingMode=\"underlined\"\r\n (onValueChanged)=\"updateLanguage($event)\"></dx-select-box>\r\n </li>\r\n <!-- User | null | undefined -->\r\n @if (user() !== undefined) {\r\n <li>\r\n <button\r\n class=\"flex w-full items-center gap-2 rounded border border-white p-4 text-white shadow transition duration-300 ease-in-out hover:bg-white hover:text-gray-800\"\r\n (click)=\"user() ? logout() : goToLogin()\">\r\n <fa-icon [icon]=\"user() ? ICON.LOGOUT : ICON.LOGIN\"></fa-icon>\r\n <span class=\"flex-1 truncate\">{{\r\n (user() ? 'lblLogout' : 'lblLogin') | translate\r\n }}</span>\r\n </button>\r\n </li>\r\n }\r\n </ul>\r\n\r\n <!-- logo -->\r\n <div class=\"mt-auto flex content-end border-b border-white\">\r\n <img\r\n class=\"ml-auto h-12\"\r\n [ngSrc]=\"pathBrandLogo()\"\r\n alt=\"Brand logo\"\r\n [height]=\"30\"\r\n [width]=\"125\"\r\n priority />\r\n </div>\r\n </aside>\r\n `,\r\n styleUrl: './uni-side-menu.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UniSideMenuComponent {\r\n /* Service */\r\n readonly router = inject(Router);\r\n readonly authService = inject(UNIAuthService);\r\n readonly translateService = inject(UNITranslateService);\r\n\r\n /* Input */\r\n pathBrandLogo = input.required<string>();\r\n menuItems = input<MenuItem[]>([]);\r\n menuInteractions = input<MenuInteraction[]>([]);\r\n user = input.required<User | null | undefined>();\r\n\r\n /* Output */\r\n evtToggleMenu = output<false>();\r\n\r\n /* Variables */\r\n darkMode = signal<boolean>(localStorage.getItem('uni-theme') === 'dark');\r\n\r\n /* Icons */\r\n readonly ICON = {\r\n USER: faUser,\r\n LOGIN: faArrowRightToBracket,\r\n LOGOUT: faArrowRightFromBracket,\r\n LIGHT_MODE: faSun,\r\n DARK_MODE: faMoon,\r\n LANGUAGE: faLanguage,\r\n };\r\n\r\n /* ---------------------- Methods ---------------------- */\r\n protected updateTheme(e: SwitchValueChangedEvent): void {\r\n localStorage.setItem('uni-theme', e.value ? 'dark' : 'light');\r\n window.location.reload();\r\n }\r\n\r\n protected updateLanguage(e: SelectBoxValueChangedEvent): void {\r\n this.translateService.setLanguage(e.value);\r\n window.location.reload();\r\n }\r\n\r\n protected goToLogin(): void {\r\n this.evtToggleMenu.emit(false);\r\n this.router.navigate(['login']);\r\n }\r\n\r\n protected logout(): void {\r\n this.authService.logout$().subscribe(() => {\r\n const firstItem = this.menuItems().find((item) => item.visible && !item.disabled);\r\n this.evtToggleMenu.emit(false);\r\n this.router.navigate([firstItem?.path ?? 'login']);\r\n });\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,43 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import * as i0 from '@angular/core';
3
- import { input, viewChild, effect, Component, ChangeDetectionStrategy } from '@angular/core';
4
-
5
- class UniWrapperChartComponent {
6
- /* ----------------------- Constructor & lifecycle --------------------------- */
7
- constructor() {
8
- /* Inputs & outputs */
9
- this.title = input();
10
- this.gridTemplateColumns = input('1fr');
11
- this.gridTitle = input('1rem');
12
- this.gridGap = input('1rem');
13
- /* Ref */
14
- this.containerDataSource = viewChild.required('container_datasource');
15
- this.containerWithAside = viewChild('container_with_aside');
16
- effect(() => {
17
- this.containerDataSource().nativeElement.style.gridTemplateRows = this.title()
18
- ? 'min-content 1fr'
19
- : '1fr';
20
- this.containerDataSource().nativeElement.style.gap = this.title() ? this.gridTitle() : '0rem';
21
- });
22
- effect(() => {
23
- if (this.containerWithAside()) {
24
- this.containerWithAside().nativeElement.style.gridTemplateColumns =
25
- this.gridTemplateColumns();
26
- this.containerWithAside().nativeElement.style.gap = this.gridGap();
27
- }
28
- });
29
- }
30
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: UniWrapperChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
31
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: UniWrapperChartComponent, isStandalone: true, selector: "uni-wrapper-chart", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, gridTemplateColumns: { classPropertyName: "gridTemplateColumns", publicName: "gridTemplateColumns", isSignal: true, isRequired: false, transformFunction: null }, gridTitle: { classPropertyName: "gridTitle", publicName: "gridTitle", isSignal: true, isRequired: false, transformFunction: null }, gridGap: { classPropertyName: "gridGap", publicName: "gridGap", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "containerDataSource", first: true, predicate: ["container_datasource"], descendants: true, isSignal: true }, { propertyName: "containerWithAside", first: true, predicate: ["container_with_aside"], descendants: true, isSignal: true }], ngImport: i0, template: "<div #container_datasource class=\"container-datasource\">\r\n @if (title(); as title) {\r\n <h5>{{ title }}</h5>\r\n }\r\n\r\n @if (gridTemplateColumns() !== '1fr') {\r\n <div #container_with_aside class=\"container-with-aside\">\r\n <ng-content select=\"[aside]\"></ng-content>\r\n <div class=\"container-chart\">\r\n <ng-content select=\"[chart]\"></ng-content>\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"container-chart\">\r\n <ng-content></ng-content>\r\n </div>\r\n }\r\n</div>\r\n\r\n", styles: [":host{display:block;height:100%;width:100%;overflow:hidden}.container-datasource{height:100%;display:grid;grid-template-columns:1fr;gap:.5rem;overflow:hidden}.container-with-aside{height:100%;width:100%;display:grid;grid-template-rows:1fr;overflow:hidden}.container-chart{overflow:hidden}:host ::ng-deep .container-chart>*{height:100%;width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
32
- }
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: UniWrapperChartComponent, decorators: [{
34
- type: Component,
35
- args: [{ selector: 'uni-wrapper-chart', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #container_datasource class=\"container-datasource\">\r\n @if (title(); as title) {\r\n <h5>{{ title }}</h5>\r\n }\r\n\r\n @if (gridTemplateColumns() !== '1fr') {\r\n <div #container_with_aside class=\"container-with-aside\">\r\n <ng-content select=\"[aside]\"></ng-content>\r\n <div class=\"container-chart\">\r\n <ng-content select=\"[chart]\"></ng-content>\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"container-chart\">\r\n <ng-content></ng-content>\r\n </div>\r\n }\r\n</div>\r\n\r\n", styles: [":host{display:block;height:100%;width:100%;overflow:hidden}.container-datasource{height:100%;display:grid;grid-template-columns:1fr;gap:.5rem;overflow:hidden}.container-with-aside{height:100%;width:100%;display:grid;grid-template-rows:1fr;overflow:hidden}.container-chart{overflow:hidden}:host ::ng-deep .container-chart>*{height:100%;width:100%}\n"] }]
36
- }], ctorParameters: () => [] });
37
-
38
- /**
39
- * Generated bundle index. Do not edit.
40
- */
41
-
42
- export { UniWrapperChartComponent };
43
- //# sourceMappingURL=uni-component-tw-uni-wrapper-chart.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"uni-component-tw-uni-wrapper-chart.mjs","sources":["../../../projects/uni-component-tw/uni-wrapper-chart/src/uni-wrapper-chart.component.ts","../../../projects/uni-component-tw/uni-wrapper-chart/src/uni-wrapper-chart.component.html","../../../projects/uni-component-tw/uni-wrapper-chart/uni-component-tw-uni-wrapper-chart.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n effect,\r\n input,\r\n viewChild,\r\n} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'uni-wrapper-chart',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './uni-wrapper-chart.component.html',\r\n styleUrls: ['./uni-wrapper-chart.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UniWrapperChartComponent {\r\n /* Inputs & outputs */\r\n public readonly title = input<string>();\r\n public readonly gridTemplateColumns = input<string>('1fr');\r\n public readonly gridTitle = input<string>('1rem');\r\n public readonly gridGap = input<string>('1rem');\r\n\r\n /* Ref */\r\n protected readonly containerDataSource =\r\n viewChild.required<ElementRef<HTMLDivElement>>('container_datasource');\r\n protected readonly containerWithAside =\r\n viewChild<ElementRef<HTMLDivElement>>('container_with_aside');\r\n\r\n /* ----------------------- Constructor & lifecycle --------------------------- */\r\n constructor() {\r\n effect(() => {\r\n this.containerDataSource().nativeElement.style.gridTemplateRows = this.title()\r\n ? 'min-content 1fr'\r\n : '1fr';\r\n this.containerDataSource().nativeElement.style.gap = this.title() ? this.gridTitle() : '0rem';\r\n });\r\n effect(() => {\r\n if (this.containerWithAside()) {\r\n this.containerWithAside()!.nativeElement.style.gridTemplateColumns =\r\n this.gridTemplateColumns();\r\n this.containerWithAside()!.nativeElement.style.gap = this.gridGap();\r\n }\r\n });\r\n }\r\n}\r\n","<div #container_datasource class=\"container-datasource\">\r\n @if (title(); as title) {\r\n <h5>{{ title }}</h5>\r\n }\r\n\r\n @if (gridTemplateColumns() !== '1fr') {\r\n <div #container_with_aside class=\"container-with-aside\">\r\n <ng-content select=\"[aside]\"></ng-content>\r\n <div class=\"container-chart\">\r\n <ng-content select=\"[chart]\"></ng-content>\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"container-chart\">\r\n <ng-content></ng-content>\r\n </div>\r\n }\r\n</div>\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export * from './src/uni-article.component';
@@ -1 +0,0 @@
1
- export * from './src/uni-header.component';
@@ -1 +0,0 @@
1
- export * from './src/uni-login-modal.component';
@@ -1 +0,0 @@
1
- export * from './src/uni-pie-chart.component';
@@ -1 +0,0 @@
1
- export * from './src/uni-side-menu.component';
@@ -1 +0,0 @@
1
- export * from './src/uni-wrapper-chart.component';
@@ -1,13 +0,0 @@
1
- import { ElementRef } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export declare class UniWrapperChartComponent {
4
- readonly title: import("@angular/core").InputSignal<string | undefined>;
5
- readonly gridTemplateColumns: import("@angular/core").InputSignal<string>;
6
- readonly gridTitle: import("@angular/core").InputSignal<string>;
7
- readonly gridGap: import("@angular/core").InputSignal<string>;
8
- protected readonly containerDataSource: import("@angular/core").Signal<ElementRef<HTMLDivElement>>;
9
- protected readonly containerWithAside: import("@angular/core").Signal<ElementRef<HTMLDivElement> | undefined>;
10
- constructor();
11
- static ɵfac: i0.ɵɵFactoryDeclaration<UniWrapperChartComponent, never>;
12
- static ɵcmp: i0.ɵɵComponentDeclaration<UniWrapperChartComponent, "uni-wrapper-chart", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "gridTemplateColumns": { "alias": "gridTemplateColumns"; "required": false; "isSignal": true; }; "gridTitle": { "alias": "gridTitle"; "required": false; "isSignal": true; }; "gridGap": { "alias": "gridGap"; "required": false; "isSignal": true; }; }, {}, never, ["[aside]", "[chart]", "*"], true, never>;
13
- }