@foxeltech/angular-ui 0.3.1 → 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 +773 -1382
  8. package/fesm2022/foxeltech-angular-ui.mjs.map +1 -1
  9. package/fx-icons.svg +97 -0
  10. package/package.json +14 -8
  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 +49 -27
  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 +1 -1
  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 +1 -1
  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 +3 -3
  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 +1 -1
  30. package/src/lib/ui/components/section-card/section-card.component.html +1 -1
  31. package/src/lib/ui/components/select/select.component.html +6 -6
  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 +7 -7
  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 +4 -4
  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 +7 -7
  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 +2 -2
  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/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
@@ -1,8 +1,8 @@
1
- <div class="flex flex-col text-left mb-4 w-full" [class]="class">
1
+ <div class="flex flex-col text-left mb-4 w-full" [class]="class()">
2
2
  <!-- A radiogroup has no single control a <label> could point at — name it via aria-labelledby. -->
3
3
  @if(label){<span class="txt-field-label" [id]="groupId + '-label'">
4
4
  {{ label }}
5
- @if(required) {<span class="txt-required" aria-hidden="true">*</span>} </span
5
+ @if(required()) {<span class="txt-required" aria-hidden="true">*</span>} </span
6
6
  >}
7
7
 
8
8
  <div
@@ -10,7 +10,7 @@
10
10
  role="radiogroup"
11
11
  [attr.aria-labelledby]="label ? groupId + '-label' : null"
12
12
  >
13
- @for(opt of options; track opt){<button
13
+ @for(opt of options(); track opt){<button
14
14
  type="button"
15
15
  role="radio"
16
16
  [attr.aria-checked]="value === opt.value"
@@ -3,7 +3,7 @@
3
3
  <input
4
4
  type="text"
5
5
  class="input-default px-9"
6
- [attr.placeholder]="placeholder"
6
+ [attr.placeholder]="placeholder()"
7
7
  [disabled]="disabled"
8
8
  [value]="value"
9
9
  (input)="onValueChange($any($event.target).value)"
@@ -3,7 +3,7 @@
3
3
  @if (icon) {
4
4
  <fx-ui-hero-icon [ngClass]="iconClass" [icon]="icon" [size]="18"></fx-ui-hero-icon>
5
5
  }
6
- <span class="txt-heading-06">{{ title }}</span>
6
+ <span class="txt-heading-06">{{ title() }}</span>
7
7
  </div>
8
8
  <ng-content></ng-content>
9
9
  </div>
@@ -1,8 +1,8 @@
1
- <div class="mb-4 text-left w-full" [class]="class">
1
+ <div class="mb-4 text-left w-full" [class]="class()">
2
2
  @if (label) {
3
3
  <label class="block txt-field-label" [attr.for]="fieldId">
4
4
  {{ label }}
5
- @if (required) {
5
+ @if (required()) {
6
6
  <span class="txt-required" aria-hidden="true">*</span>
7
7
  }
8
8
  @if (tooltip) {
@@ -25,18 +25,18 @@
25
25
  >
26
26
  <mat-select
27
27
  [id]="fieldId"
28
- [required]="!!required"
28
+ [required]="!!required()"
29
29
  [attr.aria-invalid]="invalid || null"
30
30
  [attr.aria-describedby]="invalid ? fieldId + '-error' : null"
31
- [placeholder]="placeholder"
31
+ [placeholder]="placeholder()"
32
32
  [disabled]="disabled"
33
- [multiple]="multiple"
33
+ [multiple]="multiple()"
34
34
  [value]="value"
35
35
  (selectionChange)="onSelectionChange($event.value)"
36
36
  (openedChange)="onOpened($event)"
37
37
  (blur)="onTouched()"
38
38
  >
39
- @if (enableSearch) {
39
+ @if (enableSearch()) {
40
40
  <div class="px-semi w-full">
41
41
  <input
42
42
  type="text"
@@ -9,11 +9,11 @@
9
9
  </div>
10
10
  </div>
11
11
 
12
- @for (c of range(cards); track c) {
12
+ @for (c of range(cards()); track c) {
13
13
  <div class="card-common flex flex-col gap-large">
14
14
  <div class="h-4 w-1/3 rounded bg-bg-hover"></div>
15
15
  <div class="flex flex-col gap-normal">
16
- @for (r of range(rows); track r) {
16
+ @for (r of range(rows()); track r) {
17
17
  <div class="h-3 rounded bg-bg-hover" [style.width.%]="rowWidth(r)"></div>
18
18
  }
19
19
  </div>
@@ -1,5 +1,5 @@
1
1
  <div class="flex flex-col gap-normal animate-pulse">
2
- @for (r of range(rows); track r) {
2
+ @for (r of range(rows()); track r) {
3
3
  <div class="rounded-lg border border-border-default p-semi">
4
4
  <div class="flex items-center gap-normal mb-small">
5
5
  <div class="w-8 h-8 rounded-lg bg-bg-hover shrink-0"></div>
@@ -1,19 +1,19 @@
1
1
  <div class="w-full animate-pulse space-y-normal">
2
2
  <div
3
3
  class="grid gap-small"
4
- [ngStyle]="{ 'grid-template-columns': 'repeat(' + columns + ', minmax(0, 1fr))' }"
4
+ [ngStyle]="{ 'grid-template-columns': 'repeat(' + columns() + ', minmax(0, 1fr))' }"
5
5
  >
6
- @for(col of [].constructor(columns); track col) {
6
+ @for(col of [].constructor(columns()); track col) {
7
7
  <div class="h-6 bg-bg-hover rounded"></div>
8
8
  }
9
9
  </div>
10
10
 
11
- @for(row of [].constructor(rows); track row) {
11
+ @for(row of [].constructor(rows()); track row) {
12
12
  <div
13
13
  class="grid gap-small"
14
- [ngStyle]="{ 'grid-template-columns': 'repeat(' + columns + ', minmax(0, 1fr))' }"
14
+ [ngStyle]="{ 'grid-template-columns': 'repeat(' + columns() + ', minmax(0, 1fr))' }"
15
15
  >
16
- @for(col of [].constructor(columns); track col) {
16
+ @for(col of [].constructor(columns()); track col) {
17
17
  <div class="h-7 bg-bg-hover rounded"></div>
18
18
  }
19
19
  </div>
@@ -11,24 +11,24 @@
11
11
  class="relative touch-none py-4"
12
12
  (click)="onTrackClick($event)"
13
13
  [attr.aria-disabled]="disabled"
14
- [attr.aria-orientation]="vertical ? 'vertical' : 'horizontal'"
14
+ [attr.aria-orientation]="vertical() ? 'vertical' : 'horizontal'"
15
15
  >
16
16
  <div
17
17
  class="relative flex items-center"
18
- [ngClass]="{ 'flex-col h-48': vertical }"
18
+ [ngClass]="{ 'flex-col h-48': vertical() }"
19
19
  >
20
20
  <div
21
21
  class="relative flex-1 rounded-full bg-gray-600 h-2"
22
- [ngClass]="{ 'w-1 rotate-0 h-full w-auto bg-border-gray-700': vertical }"
22
+ [ngClass]="{ 'w-1 rotate-0 h-full w-auto bg-border-gray-700': vertical() }"
23
23
  >
24
- @if (!vertical) {
24
+ @if (!vertical()) {
25
25
  <div
26
26
  class="absolute left-0 top-0 h-full rounded-full bg-primary"
27
27
  [style.width.%]="percent"
28
28
  ></div>
29
29
  }
30
30
 
31
- @if (vertical) {
31
+ @if (vertical()) {
32
32
  <div
33
33
  class="absolute bottom-0 left-0 w-full rounded-full bg-primary"
34
34
  [style.height.%]="percent"
@@ -43,8 +43,8 @@
43
43
  [ngStyle]="thumbStyle()"
44
44
  role="slider"
45
45
  aria-label="Slider"
46
- [attr.aria-valuemin]="min"
47
- [attr.aria-valuemax]="max"
46
+ [attr.aria-valuemin]="min()"
47
+ [attr.aria-valuemax]="max()"
48
48
  [attr.aria-valuenow]="value"
49
49
  [attr.aria-disabled]="disabled"
50
50
  tabindex="0"
@@ -1,5 +1,5 @@
1
1
  <div class="grid gap-normal" [ngStyle]="{ 'grid-template-columns': gridColumns }">
2
- @for (card of cards; track card.label) {
2
+ @for (card of cards(); track card.label) {
3
3
  <div class="card-common flex items-center gap-normal">
4
4
  @if (card.icon) {
5
5
  <div
@@ -2,7 +2,7 @@
2
2
  type="button"
3
3
  role="switch"
4
4
  [attr.aria-checked]="!!value"
5
- [attr.aria-label]="ariaLabel || null"
5
+ [attr.aria-label]="ariaLabel() || null"
6
6
  [disabled]="disabled"
7
7
  class="relative flex items-center w-10 h-5 rounded-full transition-colors duration-300 cursor-pointer disabled:cursor-not-allowed focus-visible:ring-2 focus-visible:ring-primary/50"
8
8
  [ngClass]="{
@@ -28,7 +28,7 @@
28
28
  class="relative flex overflow-x-auto no-scrollbar scroll-smooth"
29
29
  (scroll)="onScroll()"
30
30
  >
31
- @for (tab of tabs.toArray(); track tab; let i = $index) {
31
+ @for (tab of tabs(); track tab; let i = $index) {
32
32
  <button
33
33
  type="button"
34
34
  role="tab"
@@ -55,7 +55,7 @@
55
55
  i === activeIndex ? 'txt-field-label text-gradient-primary-start' : 'txt-placeholder'
56
56
  "
57
57
  >
58
- {{ tab.label }}
58
+ {{ tab.label() }}
59
59
  </div>
60
60
  </div>
61
61
  </button>
@@ -89,10 +89,10 @@
89
89
 
90
90
  <!-- Tab content -->
91
91
  <div class="transition-all duration-300 ease-in-out mt-4">
92
- @for (tab of tabs.toArray(); track tab; let i = $index) {
92
+ @for (tab of tabs(); track tab; let i = $index) {
93
93
  @if (i === activeIndex) {
94
94
  <div role="tabpanel" class="animate-fadeIn">
95
- <ng-container *ngTemplateOutlet="tab.content"></ng-container>
95
+ <ng-container *ngTemplateOutlet="tab.content()"></ng-container>
96
96
  </div>
97
97
  }
98
98
  }
@@ -1,7 +1,7 @@
1
- @if (!loading) {
1
+ @if (!loading()) {
2
2
  <div animate.enter="fade-in-animation" class="inline-block my-normal">
3
3
  <ng-content />
4
4
  </div>
5
5
  } @else {
6
- <div animate.enter="fade-in-animation" class="skeleton-load my-semi" [class]="skeletonClass"></div>
6
+ <div animate.enter="fade-in-animation" class="skeleton-load my-semi" [class]="skeletonClass()"></div>
7
7
  }
@@ -6,18 +6,18 @@
6
6
  [attr.role]="clicked.observed ? 'button' : null"
7
7
  [attr.tabindex]="clicked.observed ? 0 : null"
8
8
  [class]="
9
- `flex flex-row gap-small ${rounded ? 'tag-round' : 'tag-square'} tag-${type}${solid ? '-solid' : ''}${clicked.observed ? ' cursor-pointer focus-visible:ring-2 focus-visible:ring-primary/50' : ''}`
9
+ `flex flex-row gap-small ${rounded() ? 'tag-round' : 'tag-square'} tag-${type()}${solid() ? '-solid' : ''}${clicked.observed ? ' cursor-pointer focus-visible:ring-2 focus-visible:ring-primary/50' : ''}`
10
10
  "
11
11
  >
12
12
  @if (icon) {
13
13
  <fx-ui-hero-icon
14
- [class]="`flex txt-tag-${type} ${solid && type !== 'default' ? 'text-white' : ''}`"
14
+ [class]="`flex txt-tag-${type()} ${solid() && type() !== 'default' ? 'text-white' : ''}`"
15
15
  [icon]="icon"
16
16
  [size]="18"
17
17
  ></fx-ui-hero-icon>
18
18
  }
19
19
 
20
- <div [class]="`txt-tag-${type} ${solid && type !== 'default' ? 'text-white font-medium' : ''}`">
21
- {{ label }}
20
+ <div [class]="`txt-tag-${type()} ${solid() && type() !== 'default' ? 'text-white font-medium' : ''}`">
21
+ {{ label() }}
22
22
  </div>
23
23
  </div>
@@ -1,17 +1,17 @@
1
1
  <div
2
2
  animate.enter="horizontal-fade-in-animation"
3
3
  animate.leave="horizontal-fade-out-animation"
4
- [attr.role]="type === 'error' ? 'alert' : 'status'"
4
+ [attr.role]="type() === 'error' ? 'alert' : 'status'"
5
5
  class="flex border-l-[3px] items-center bg-bg-primary gap-semi min-w-[250px] max-w-[400px] px-large py-semi rounded shadow-lg transition-all duration-300 ease-in-out transform opacity-100 translate-y-0"
6
6
  [ngClass]="{
7
- 'border-success': type === 'success',
8
- 'border-critical': type === 'error',
9
- 'border-warning': type === 'warning',
10
- 'border-information': type === 'info'
7
+ 'border-success': type() === 'success',
8
+ 'border-critical': type() === 'error',
9
+ 'border-warning': type() === 'warning',
10
+ 'border-information': type() === 'info'
11
11
  }"
12
12
  >
13
13
  <div class="" aria-hidden="true">
14
- @switch (type) { @case('success') {
14
+ @switch (type()) { @case('success') {
15
15
  <fx-ui-hero-icon
16
16
  icon="check-circle"
17
17
  [solid]="true"
@@ -46,6 +46,6 @@
46
46
  @if (title) {
47
47
  <strong class="txt-field-label">{{ title }}</strong>
48
48
  }
49
- <p class="txt-default">{{ message }}</p>
49
+ <p class="txt-default">{{ message() }}</p>
50
50
  </div>
51
51
  </div>
@@ -4,6 +4,7 @@
4
4
  @for (toast of toasts; track toast) {
5
5
  <fx-ui-toast
6
6
  class="pointer-events-auto"
7
+ [toastId]="toast.id"
7
8
  [message]="toast.message"
8
9
  [title]="toast.title"
9
10
  [type]="toast.type"
@@ -5,12 +5,12 @@
5
5
  #root
6
6
  class="mx-auto w-fit bg-blue-600 text-white px-7 py-3 rounded-md font-semibold text-center"
7
7
  >
8
- {{ data.label }}
8
+ {{ data().label }}
9
9
  </div>
10
10
 
11
11
  <!-- CHILDREN -->
12
12
  <div class="mt-16 flex justify-center gap-16">
13
- @for (child of data.children; track child) {
13
+ @for (child of data().children; track child) {
14
14
  <div
15
15
  #child
16
16
  class="w-48 bg-rose-600 text-white px-4 py-4 rounded-lg text-center"
package/tailwind.css CHANGED
@@ -8,7 +8,6 @@
8
8
  @import './components.css' layer(components);
9
9
  @import './dialogs.css' layer(components);
10
10
  @import './animations.css';
11
- @import '@danielmoncada/angular-datetime-picker/assets/style/picker.min.css';
12
11
 
13
12
  html,
14
13
  body {
@@ -0,0 +1,53 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { OnChanges, AfterViewInit, OnDestroy, ElementRef, ChangeDetectorRef } from '@angular/core';
3
+ import { EChartsOption, ECharts } from 'echarts';
4
+
5
+ type IChartType = 'bar' | 'pie' | 'sunburst' | 'auto';
6
+ declare class ChartComponent implements OnChanges, AfterViewInit, OnDestroy {
7
+ private ref;
8
+ private cdr;
9
+ readonly type: _angular_core.InputSignal<IChartType>;
10
+ readonly data: _angular_core.InputSignal<any>;
11
+ readonly options: _angular_core.InputSignal<EChartsOption | undefined>;
12
+ readonly palette: _angular_core.InputSignal<string[] | undefined>;
13
+ readonly height: _angular_core.InputSignal<string>;
14
+ readonly loading: _angular_core.InputSignal<boolean>;
15
+ readonly pieLegendAlign: _angular_core.InputSignal<string | number>;
16
+ readonly pieLegendPosition: _angular_core.InputSignal<string | number>;
17
+ readonly showPieLabel: _angular_core.InputSignal<boolean>;
18
+ readonly mobileWidth: _angular_core.InputSignal<number>;
19
+ readonly labelFontFamily: _angular_core.InputSignal<string>;
20
+ readonly emptyText: _angular_core.InputSignal<string>;
21
+ readonly chartClick: _angular_core.OutputEmitterRef<any>;
22
+ readonly chartInit: _angular_core.OutputEmitterRef<ECharts>;
23
+ chartOptions: EChartsOption;
24
+ isEmpty: boolean;
25
+ labelFontSize: number;
26
+ private chartInstance?;
27
+ private resizeObserver?;
28
+ private intersectionObserver?;
29
+ private canInit;
30
+ private isMobile;
31
+ private containerWidth;
32
+ constructor(ref: ElementRef<HTMLElement>, cdr: ChangeDetectorRef);
33
+ ngAfterViewInit(): void;
34
+ ngOnChanges(): void;
35
+ ngOnDestroy(): void;
36
+ onThemeChange(): void;
37
+ onChartClick(event: any): void;
38
+ onChartInit(chart: any): void;
39
+ private updateResponsiveState;
40
+ private forceMediaRecalc;
41
+ private rebuildChart;
42
+ private checkEmpty;
43
+ private registry;
44
+ private calcPieLayout;
45
+ private detectType;
46
+ private buildOptions;
47
+ private resolvePalette;
48
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChartComponent, never>;
49
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChartComponent, "fx-ui-chart", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "palette": { "alias": "palette"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "pieLegendAlign": { "alias": "pieLegendAlign"; "required": false; "isSignal": true; }; "pieLegendPosition": { "alias": "pieLegendPosition"; "required": false; "isSignal": true; }; "showPieLabel": { "alias": "showPieLabel"; "required": false; "isSignal": true; }; "mobileWidth": { "alias": "mobileWidth"; "required": false; "isSignal": true; }; "labelFontFamily": { "alias": "labelFontFamily"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; }, { "chartClick": "chartClick"; "chartInit": "chartInit"; }, never, never, true, never>;
50
+ }
51
+
52
+ export { ChartComponent };
53
+ export type { IChartType };
@@ -0,0 +1,14 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { Node, Edge, Connection } from 'ngx-vflow';
3
+
4
+ declare class FlowConnection {
5
+ readonly nodes: _angular_core.InputSignal<Node[]>;
6
+ edges: Edge[];
7
+ readonly backgroundColor: _angular_core.InputSignal<any>;
8
+ readonly view: _angular_core.InputSignal<any>;
9
+ handleConnection(connection: Connection): void;
10
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlowConnection, never>;
11
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlowConnection, "fx-ui-flow-connection", never, { "nodes": { "alias": "nodes"; "required": false; "isSignal": true; }; "edges": { "alias": "edges"; "required": false; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; "isSignal": true; }; "view": { "alias": "view"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
12
+ }
13
+
14
+ export { FlowConnection };
@@ -0,0 +1,35 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { AfterViewInit, ElementRef } from '@angular/core';
3
+ import { FxComponent } from '@foxeltech/angular-ui';
4
+
5
+ declare class QuillStyleLoaderService {
6
+ private platformId;
7
+ private loaded;
8
+ private loadingPromise;
9
+ constructor(platformId: object);
10
+ /**
11
+ * Load Quill CSS (only in browser). Returns a promise that resolves when
12
+ * the CSS links have been appended.
13
+ */
14
+ load(): Promise<void>;
15
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<QuillStyleLoaderService, never>;
16
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<QuillStyleLoaderService>;
17
+ }
18
+
19
+ declare class RichTextAreaComponent extends FxComponent<any> implements AfterViewInit {
20
+ private styleLoader;
21
+ private platformId;
22
+ readonly editorContainer: _angular_core.Signal<ElementRef<HTMLDivElement>>;
23
+ readonly placeholder: _angular_core.InputSignal<string>;
24
+ readonly toolbarOptions: _angular_core.InputSignal<any>;
25
+ readonly contentChange: _angular_core.OutputEmitterRef<string>;
26
+ private quillInstance;
27
+ constructor(styleLoader: QuillStyleLoaderService, platformId: object);
28
+ ngAfterViewInit(): Promise<void>;
29
+ writeValue(value: any): void;
30
+ setDisabledState(isDisabled: boolean): void;
31
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RichTextAreaComponent, never>;
32
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RichTextAreaComponent, "fx-ui-rich-text-area", never, { "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "toolbarOptions": { "alias": "toolbarOptions"; "required": false; "isSignal": true; }; }, { "contentChange": "contentChange"; }, never, never, true, never>;
33
+ }
34
+
35
+ export { QuillStyleLoaderService, RichTextAreaComponent };