@foxeltech/angular-ui 0.3.0 → 0.4.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 (54) hide show
  1. package/fesm2022/foxeltech-angular-ui-chart.mjs +392 -0
  2. package/fesm2022/foxeltech-angular-ui-chart.mjs.map +1 -0
  3. package/fesm2022/foxeltech-angular-ui-flow.mjs +38 -0
  4. package/fesm2022/foxeltech-angular-ui-flow.mjs.map +1 -0
  5. package/fesm2022/foxeltech-angular-ui-rich-text.mjs +156 -0
  6. package/fesm2022/foxeltech-angular-ui-rich-text.mjs.map +1 -0
  7. package/fesm2022/foxeltech-angular-ui.mjs +890 -1499
  8. package/fesm2022/foxeltech-angular-ui.mjs.map +1 -1
  9. package/fx-icons.svg +97 -0
  10. package/package.json +23 -16
  11. package/src/lib/styles/tailwind.css +0 -1
  12. package/src/lib/ui/components/button/button.component.html +14 -14
  13. package/src/lib/ui/components/checkbox/checkbox.component.html +2 -2
  14. package/src/lib/ui/components/circle-progress-bar/circle-progress-bar.component.html +2 -2
  15. package/src/lib/ui/components/datetime-picker/datetime-picker.component.html +54 -28
  16. package/src/lib/ui/components/datetime-picker/datetime-picker.component.scss +25 -137
  17. package/src/lib/ui/components/dnd-upload/dnd-upload.component.html +3 -3
  18. package/src/lib/ui/components/drawer/drawer.component.html +75 -61
  19. package/src/lib/ui/components/empty-state/empty-state.component.html +2 -2
  20. package/src/lib/ui/components/hero-icon/hero-icon.component.html +10 -9
  21. package/src/lib/ui/components/info-field/info-field.component.html +1 -1
  22. package/src/lib/ui/components/input/input.component.html +6 -6
  23. package/src/lib/ui/components/kanban-board/kanban-board.component.html +1 -1
  24. package/src/lib/ui/components/loading-panel/loading-panel.component.html +53 -53
  25. package/src/lib/ui/components/master-detail/master-detail.component.html +9 -9
  26. package/src/lib/ui/components/menu/menu.component.html +27 -0
  27. package/src/lib/ui/components/radio-button/radio-button.component.html +26 -26
  28. package/src/lib/ui/components/radio-button-toggle/radio-button-toggle.component.html +3 -3
  29. package/src/lib/ui/components/search-bar/search-bar.component.html +12 -11
  30. package/src/lib/ui/components/section-card/section-card.component.html +1 -1
  31. package/src/lib/ui/components/select/select.component.html +14 -12
  32. package/src/lib/ui/components/skeleton-detail/skeleton-detail.component.html +2 -2
  33. package/src/lib/ui/components/skeleton-list/skeleton-list.component.html +1 -1
  34. package/src/lib/ui/components/skeleton-table-loading/skeleton-table-loading.component.html +5 -5
  35. package/src/lib/ui/components/slider/slider.component.html +22 -20
  36. package/src/lib/ui/components/stat-cards/stat-cards.component.html +1 -1
  37. package/src/lib/ui/components/switch/switch.component.html +1 -1
  38. package/src/lib/ui/components/tab-group/tab-group.component.html +35 -32
  39. package/src/lib/ui/components/table-cell/table-cell.component.html +2 -2
  40. package/src/lib/ui/components/tag/tag.component.html +4 -4
  41. package/src/lib/ui/components/toast/toast.component.html +42 -40
  42. package/src/lib/ui/components/toast-container/toast-container.component.html +1 -0
  43. package/src/lib/ui/components/tree-diagram/tree-diagram.component.html +22 -20
  44. package/tailwind.css +0 -1
  45. package/types/foxeltech-angular-ui-chart.d.ts +53 -0
  46. package/types/foxeltech-angular-ui-flow.d.ts +14 -0
  47. package/types/foxeltech-angular-ui-rich-text.d.ts +35 -0
  48. package/{index.d.ts → types/foxeltech-angular-ui.d.ts} +394 -387
  49. package/src/lib/ui/components/chart/chart.component.html +0 -20
  50. package/src/lib/ui/components/chart/chart.component.scss +0 -49
  51. package/src/lib/ui/components/flow-connection/flow-connection.component.html +0 -10
  52. package/src/lib/ui/components/flow-connection/flow-connection.component.scss +0 -0
  53. package/src/lib/ui/components/rich-text-area/rich-text-area.component.html +0 -3
  54. package/src/lib/ui/components/rich-text-area/rich-text-area.component.scss +0 -18
@@ -0,0 +1,156 @@
1
+ import * as i0 from '@angular/core';
2
+ import { PLATFORM_ID, Inject, Injectable, viewChild, input, output, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { FxComponent, FxUtils } from '@foxeltech/angular-ui';
4
+ import { isPlatformBrowser } from '@angular/common';
5
+
6
+ class QuillStyleLoaderService {
7
+ platformId;
8
+ loaded = false;
9
+ loadingPromise = null;
10
+ constructor(platformId) {
11
+ this.platformId = platformId;
12
+ }
13
+ /**
14
+ * Load Quill CSS (only in browser). Returns a promise that resolves when
15
+ * the CSS links have been appended.
16
+ */
17
+ load() {
18
+ if (!isPlatformBrowser(this.platformId)) {
19
+ // Server: do nothing and resolve immediately.
20
+ return Promise.resolve();
21
+ }
22
+ if (this.loaded)
23
+ return Promise.resolve();
24
+ if (this.loadingPromise)
25
+ return this.loadingPromise;
26
+ this.loadingPromise = new Promise((resolve) => {
27
+ const cssUrls = [
28
+ // Using CDN is simplest — no consumer angular.json edits needed.
29
+ 'https://cdn.jsdelivr.net/npm/quill/dist/quill.core.css',
30
+ 'https://cdn.jsdelivr.net/npm/quill/dist/quill.snow.css'
31
+ ];
32
+ let remaining = cssUrls.length;
33
+ const onLoad = () => {
34
+ remaining -= 1;
35
+ if (remaining === 0) {
36
+ this.loaded = true;
37
+ resolve();
38
+ }
39
+ };
40
+ cssUrls.forEach((href) => {
41
+ // Do not add duplicate links
42
+ if (document.querySelector(`link[href="${href}"]`)) {
43
+ onLoad();
44
+ return;
45
+ }
46
+ const link = document.createElement('link');
47
+ link.rel = 'stylesheet';
48
+ link.href = href;
49
+ link.onload = () => onLoad();
50
+ link.onerror = () => {
51
+ // still count it as loaded to avoid hanging if CDN fails
52
+ console.warn(`[QuillStyleLoader] failed to load: ${href}`);
53
+ onLoad();
54
+ };
55
+ document.head.appendChild(link);
56
+ });
57
+ });
58
+ return this.loadingPromise;
59
+ }
60
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: QuillStyleLoaderService, deps: [{ token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable });
61
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: QuillStyleLoaderService, providedIn: 'root' });
62
+ }
63
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: QuillStyleLoaderService, decorators: [{
64
+ type: Injectable,
65
+ args: [{ providedIn: 'root' }]
66
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
67
+ type: Inject,
68
+ args: [PLATFORM_ID]
69
+ }] }] });
70
+
71
+ class RichTextAreaComponent extends FxComponent {
72
+ styleLoader;
73
+ platformId;
74
+ editorContainer = viewChild.required('editorContainer');
75
+ placeholder = input('Write something...', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
76
+ toolbarOptions = input([
77
+ // ['undo', 'redo'],
78
+ [{ 'header': [1, 2, 3, 4, 5, 6, false] }],
79
+ [{ 'font': [] }],
80
+ [{ 'size': ['small', false, 'large', 'huge'] }],
81
+ [{ 'align': [] }],
82
+ [{ 'color': [] }, { 'background': [] }],
83
+ ['bold', 'italic', 'underline', 'strike'],
84
+ ['blockquote', 'code-block'],
85
+ [{ 'list': 'ordered' }, { 'list': 'bullet' }],
86
+ [{ 'indent': '-1' }, { 'indent': '+1' }],
87
+ ['link', 'image'],
88
+ ['clean']
89
+ ], ...(ngDevMode ? [{ debugName: "toolbarOptions" }] : /* istanbul ignore next */ []));
90
+ contentChange = output();
91
+ quillInstance;
92
+ constructor(styleLoader, platformId) {
93
+ super();
94
+ this.styleLoader = styleLoader;
95
+ this.platformId = platformId;
96
+ }
97
+ async ngAfterViewInit() {
98
+ if (!isPlatformBrowser(this.platformId))
99
+ return;
100
+ await this.styleLoader.load();
101
+ const QuillModule = await import('quill');
102
+ const Quill = QuillModule.default || QuillModule;
103
+ const icons = Quill.import('ui/icons');
104
+ // icons['undo'] = `<svg viewBox="0 0 18 18"><path d="M6.4 5.2H3L6.8 1l3.8 4.2H7.9C10.2 5.4 12 7.4 12 9.8c0 2.7-2.2 4.9-4.9 4.9S2.2 12.5 2.2 9.8H0c0 3.8 3.1 6.9 6.9 6.9s6.9-3.1 6.9-6.9S10.7 3 7 3v2.2z"></path></svg>`;
105
+ // icons['redo'] = `<svg viewBox="0 0 18 18"><path d="M11.6 5.2H15L11.2 1 7.4 5.2h2.7C7.8 5.4 6 7.4 6 9.8c0 2.7 2.2 4.9 4.9 4.9s4.9-2.2 4.9-4.9H18c0 3.8-3.1 6.9-6.9 6.9S4.2 13.6 4.2 9.8 7.3 3 11 3v2.2z"></path></svg>`;
106
+ this.quillInstance = new Quill(this.editorContainer().nativeElement, {
107
+ theme: 'snow',
108
+ placeholder: this.placeholder(),
109
+ modules: {
110
+ history: true,
111
+ toolbar: this.toolbarOptions(),
112
+ }
113
+ });
114
+ this.quillInstance.root.style.color = FxUtils.convertColorFromVariable('--text-primary');
115
+ const toolbar = this.quillInstance.getModule('toolbar');
116
+ toolbar.addHandler('undo', () => this.quillInstance.history.undo());
117
+ toolbar.addHandler('redo', () => this.quillInstance.history.redo());
118
+ if (this.value) {
119
+ this.quillInstance.root.innerHTML = this.value;
120
+ }
121
+ this.quillInstance.on('text-change', () => {
122
+ const html = this.quillInstance.root.innerHTML || '';
123
+ this.value = html;
124
+ this.onChange(html);
125
+ this.contentChange.emit(html);
126
+ });
127
+ }
128
+ writeValue(value) {
129
+ this.value = value || '';
130
+ if (this.quillInstance) {
131
+ this.quillInstance.root.innerHTML = this.value;
132
+ }
133
+ }
134
+ setDisabledState(isDisabled) {
135
+ this.disabled = isDisabled;
136
+ if (this.quillInstance) {
137
+ this.quillInstance.enable(!isDisabled);
138
+ }
139
+ }
140
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: RichTextAreaComponent, deps: [{ token: QuillStyleLoaderService }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component });
141
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.20", type: RichTextAreaComponent, isStandalone: true, selector: "fx-ui-rich-text-area", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, toolbarOptions: { classPropertyName: "toolbarOptions", publicName: "toolbarOptions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { contentChange: "contentChange" }, viewQueries: [{ propertyName: "editorContainer", first: true, predicate: ["editorContainer"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"w-full rounded-2xl shadow-sm p-1 bg-bg-primary\">\n <div #editorContainer class=\"min-h-[200px] text-base\"></div>\n</div>", styles: ["@charset \"UTF-8\";@layer properties;:host{display:block}.ql-toolbar{border-top-left-radius:.25rem;border-top-right-radius:.25rem;border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgb(var(--border-default));padding:calc(var(--spacing, .25rem) * 2)}.ql-container{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.ql-editor{min-height:200px;padding:calc(var(--spacing, .25rem) * 3);font-size:1rem;line-height:var(--tw-leading, var(--text-base--line-height, 1.5 ))}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
142
+ }
143
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: RichTextAreaComponent, decorators: [{
144
+ type: Component,
145
+ args: [{ selector: 'fx-ui-rich-text-area', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"w-full rounded-2xl shadow-sm p-1 bg-bg-primary\">\n <div #editorContainer class=\"min-h-[200px] text-base\"></div>\n</div>", styles: ["@charset \"UTF-8\";@layer properties;:host{display:block}.ql-toolbar{border-top-left-radius:.25rem;border-top-right-radius:.25rem;border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgb(var(--border-default));padding:calc(var(--spacing, .25rem) * 2)}.ql-container{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.ql-editor{min-height:200px;padding:calc(var(--spacing, .25rem) * 3);font-size:1rem;line-height:var(--tw-leading, var(--text-base--line-height, 1.5 ))}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
146
+ }], ctorParameters: () => [{ type: QuillStyleLoaderService }, { type: undefined, decorators: [{
147
+ type: Inject,
148
+ args: [PLATFORM_ID]
149
+ }] }], propDecorators: { editorContainer: [{ type: i0.ViewChild, args: ['editorContainer', { isSignal: true }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], toolbarOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "toolbarOptions", required: false }] }], contentChange: [{ type: i0.Output, args: ["contentChange"] }] } });
150
+
151
+ /**
152
+ * Generated bundle index. Do not edit.
153
+ */
154
+
155
+ export { QuillStyleLoaderService, RichTextAreaComponent };
156
+ //# sourceMappingURL=foxeltech-angular-ui-rich-text.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foxeltech-angular-ui-rich-text.mjs","sources":["../../../projects/ui/rich-text/src/quill-style-loader.service.ts","../../../projects/ui/rich-text/src/rich-text-area/rich-text-area.component.ts","../../../projects/ui/rich-text/src/rich-text-area/rich-text-area.component.html","../../../projects/ui/rich-text/src/foxeltech-angular-ui-rich-text.ts"],"sourcesContent":["import { Inject, Injectable, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\n@Injectable({ providedIn: 'root' })\nexport class QuillStyleLoaderService {\n private loaded = false;\n private loadingPromise: Promise<void> | null = null;\n\n constructor(@Inject(PLATFORM_ID) private platformId: object) {}\n\n /**\n * Load Quill CSS (only in browser). Returns a promise that resolves when\n * the CSS links have been appended.\n */\n load(): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n // Server: do nothing and resolve immediately.\n return Promise.resolve();\n }\n\n if (this.loaded) return Promise.resolve();\n if (this.loadingPromise) return this.loadingPromise;\n\n this.loadingPromise = new Promise<void>((resolve) => {\n const cssUrls = [\n // Using CDN is simplest — no consumer angular.json edits needed.\n 'https://cdn.jsdelivr.net/npm/quill/dist/quill.core.css',\n 'https://cdn.jsdelivr.net/npm/quill/dist/quill.snow.css'\n ];\n\n let remaining = cssUrls.length;\n\n const onLoad = () => {\n remaining -= 1;\n if (remaining === 0) {\n this.loaded = true;\n resolve();\n }\n };\n\n cssUrls.forEach((href) => {\n // Do not add duplicate links\n if (document.querySelector(`link[href=\"${href}\"]`)) {\n onLoad();\n return;\n }\n\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = href;\n link.onload = () => onLoad();\n link.onerror = () => {\n // still count it as loaded to avoid hanging if CDN fails\n console.warn(`[QuillStyleLoader] failed to load: ${href}`);\n onLoad();\n };\n document.head.appendChild(link);\n });\n });\n\n return this.loadingPromise;\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Inject,\n PLATFORM_ID,\n ChangeDetectionStrategy,\n input,\n output,\n viewChild\n} from '@angular/core';\nimport { FxComponent, FxUtils } from '@foxeltech/angular-ui';\nimport { QuillStyleLoaderService } from '../quill-style-loader.service';\nimport { isPlatformBrowser } from '@angular/common';\n\n\n@Component({\n selector: 'fx-ui-rich-text-area',\n templateUrl: './rich-text-area.component.html',\n styleUrl: './rich-text-area.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RichTextAreaComponent extends FxComponent<any> implements AfterViewInit {\n readonly editorContainer = viewChild.required<ElementRef<HTMLDivElement>>('editorContainer');\n\n readonly placeholder = input('Write something...');\n\n readonly toolbarOptions = input<any>([\n // ['undo', 'redo'],\n [{ 'header': [1, 2, 3, 4, 5, 6, false] }],\n [{ 'font': [] }],\n [{ 'size': ['small', false, 'large', 'huge'] }],\n [{ 'align': [] }],\n [{ 'color': [] }, { 'background': [] }],\n ['bold', 'italic', 'underline', 'strike'],\n ['blockquote', 'code-block'],\n [{ 'list': 'ordered' }, { 'list': 'bullet' }],\n [{ 'indent': '-1' }, { 'indent': '+1' }],\n ['link', 'image'],\n ['clean']\n]);\n\n readonly contentChange = output<string>();\n\n private quillInstance: any;\n\n constructor(\n private styleLoader: QuillStyleLoaderService,\n @Inject(PLATFORM_ID) private platformId: object\n ) {\n super();\n }\n\n async ngAfterViewInit(): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) return;\n\n await this.styleLoader.load();\n\n const QuillModule = await import('quill');\n const Quill = (QuillModule as any).default || QuillModule;\n\n const icons = Quill.import('ui/icons');\n // icons['undo'] = `<svg viewBox=\"0 0 18 18\"><path d=\"M6.4 5.2H3L6.8 1l3.8 4.2H7.9C10.2 5.4 12 7.4 12 9.8c0 2.7-2.2 4.9-4.9 4.9S2.2 12.5 2.2 9.8H0c0 3.8 3.1 6.9 6.9 6.9s6.9-3.1 6.9-6.9S10.7 3 7 3v2.2z\"></path></svg>`;\n // icons['redo'] = `<svg viewBox=\"0 0 18 18\"><path d=\"M11.6 5.2H15L11.2 1 7.4 5.2h2.7C7.8 5.4 6 7.4 6 9.8c0 2.7 2.2 4.9 4.9 4.9s4.9-2.2 4.9-4.9H18c0 3.8-3.1 6.9-6.9 6.9S4.2 13.6 4.2 9.8 7.3 3 11 3v2.2z\"></path></svg>`;\n\n this.quillInstance = new Quill(this.editorContainer().nativeElement, {\n theme: 'snow',\n placeholder: this.placeholder(),\n modules: {\n history: true,\n toolbar: this.toolbarOptions(),\n }\n });\n this.quillInstance.root.style.color = FxUtils.convertColorFromVariable('--text-primary')\n\n const toolbar = this.quillInstance.getModule('toolbar');\n toolbar.addHandler('undo', () => this.quillInstance.history.undo());\n toolbar.addHandler('redo', () => this.quillInstance.history.redo());\n\n if (this.value) {\n this.quillInstance.root.innerHTML = this.value;\n }\n\n this.quillInstance.on('text-change', () => {\n const html = this.quillInstance.root.innerHTML || '';\n this.value = html;\n this.onChange(html);\n this.contentChange.emit(html);\n });\n }\n\n override writeValue(value: any): void {\n this.value = value || '';\n if (this.quillInstance) {\n this.quillInstance.root.innerHTML = this.value;\n }\n }\n\n override setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n if (this.quillInstance) {\n this.quillInstance.enable(!isDisabled);\n }\n }\n}\n","<div class=\"w-full rounded-2xl shadow-sm p-1 bg-bg-primary\">\n <div #editorContainer class=\"min-h-[200px] text-base\"></div>\n</div>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}