@star-ng/ui 0.0.0-stage → 0.1.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 (217) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +148 -2
  3. package/fesm2022/star-ng-ui-accordion.mjs +376 -0
  4. package/fesm2022/star-ng-ui-accordion.mjs.map +1 -0
  5. package/fesm2022/star-ng-ui-autocomplete.mjs +782 -0
  6. package/fesm2022/star-ng-ui-autocomplete.mjs.map +1 -0
  7. package/fesm2022/star-ng-ui-avatar.mjs +154 -0
  8. package/fesm2022/star-ng-ui-avatar.mjs.map +1 -0
  9. package/fesm2022/star-ng-ui-badge.mjs +153 -0
  10. package/fesm2022/star-ng-ui-badge.mjs.map +1 -0
  11. package/fesm2022/star-ng-ui-breadcrumb.mjs +199 -0
  12. package/fesm2022/star-ng-ui-breadcrumb.mjs.map +1 -0
  13. package/fesm2022/star-ng-ui-button.mjs +282 -0
  14. package/fesm2022/star-ng-ui-button.mjs.map +1 -0
  15. package/fesm2022/star-ng-ui-card.mjs +112 -0
  16. package/fesm2022/star-ng-ui-card.mjs.map +1 -0
  17. package/fesm2022/star-ng-ui-chart.mjs +1904 -0
  18. package/fesm2022/star-ng-ui-chart.mjs.map +1 -0
  19. package/fesm2022/star-ng-ui-checkbox.mjs +345 -0
  20. package/fesm2022/star-ng-ui-checkbox.mjs.map +1 -0
  21. package/fesm2022/star-ng-ui-core.mjs +392 -0
  22. package/fesm2022/star-ng-ui-core.mjs.map +1 -0
  23. package/fesm2022/star-ng-ui-data-display.mjs +1556 -0
  24. package/fesm2022/star-ng-ui-data-display.mjs.map +1 -0
  25. package/fesm2022/star-ng-ui-date-picker.mjs +2786 -0
  26. package/fesm2022/star-ng-ui-date-picker.mjs.map +1 -0
  27. package/fesm2022/star-ng-ui-dialog.mjs +948 -0
  28. package/fesm2022/star-ng-ui-dialog.mjs.map +1 -0
  29. package/fesm2022/star-ng-ui-drawer.mjs +158 -0
  30. package/fesm2022/star-ng-ui-drawer.mjs.map +1 -0
  31. package/fesm2022/star-ng-ui-editor.mjs +416 -0
  32. package/fesm2022/star-ng-ui-editor.mjs.map +1 -0
  33. package/fesm2022/star-ng-ui-field.mjs +378 -0
  34. package/fesm2022/star-ng-ui-field.mjs.map +1 -0
  35. package/fesm2022/star-ng-ui-file-upload.mjs +762 -0
  36. package/fesm2022/star-ng-ui-file-upload.mjs.map +1 -0
  37. package/fesm2022/star-ng-ui-i18n-de.mjs +179 -0
  38. package/fesm2022/star-ng-ui-i18n-de.mjs.map +1 -0
  39. package/fesm2022/star-ng-ui-i18n-es.mjs +179 -0
  40. package/fesm2022/star-ng-ui-i18n-es.mjs.map +1 -0
  41. package/fesm2022/star-ng-ui-input-group.mjs +188 -0
  42. package/fesm2022/star-ng-ui-input-group.mjs.map +1 -0
  43. package/fesm2022/star-ng-ui-input-mask.mjs +434 -0
  44. package/fesm2022/star-ng-ui-input-mask.mjs.map +1 -0
  45. package/fesm2022/star-ng-ui-input-number.mjs +691 -0
  46. package/fesm2022/star-ng-ui-input-number.mjs.map +1 -0
  47. package/fesm2022/star-ng-ui-input-otp.mjs +343 -0
  48. package/fesm2022/star-ng-ui-input-otp.mjs.map +1 -0
  49. package/fesm2022/star-ng-ui-input-tags.mjs +616 -0
  50. package/fesm2022/star-ng-ui-input-tags.mjs.map +1 -0
  51. package/fesm2022/star-ng-ui-knob.mjs +514 -0
  52. package/fesm2022/star-ng-ui-knob.mjs.map +1 -0
  53. package/fesm2022/star-ng-ui-layout.mjs +608 -0
  54. package/fesm2022/star-ng-ui-layout.mjs.map +1 -0
  55. package/fesm2022/star-ng-ui-listbox.mjs +978 -0
  56. package/fesm2022/star-ng-ui-listbox.mjs.map +1 -0
  57. package/fesm2022/star-ng-ui-media.mjs +833 -0
  58. package/fesm2022/star-ng-ui-media.mjs.map +1 -0
  59. package/fesm2022/star-ng-ui-menu.mjs +1840 -0
  60. package/fesm2022/star-ng-ui-menu.mjs.map +1 -0
  61. package/fesm2022/star-ng-ui-message.mjs +191 -0
  62. package/fesm2022/star-ng-ui-message.mjs.map +1 -0
  63. package/fesm2022/star-ng-ui-paginator.mjs +387 -0
  64. package/fesm2022/star-ng-ui-paginator.mjs.map +1 -0
  65. package/fesm2022/star-ng-ui-panel.mjs +324 -0
  66. package/fesm2022/star-ng-ui-panel.mjs.map +1 -0
  67. package/fesm2022/star-ng-ui-password.mjs +517 -0
  68. package/fesm2022/star-ng-ui-password.mjs.map +1 -0
  69. package/fesm2022/star-ng-ui-popover.mjs +241 -0
  70. package/fesm2022/star-ng-ui-popover.mjs.map +1 -0
  71. package/fesm2022/star-ng-ui-progress-bar.mjs +183 -0
  72. package/fesm2022/star-ng-ui-progress-bar.mjs.map +1 -0
  73. package/fesm2022/star-ng-ui-radio.mjs +411 -0
  74. package/fesm2022/star-ng-ui-radio.mjs.map +1 -0
  75. package/fesm2022/star-ng-ui-rating.mjs +211 -0
  76. package/fesm2022/star-ng-ui-rating.mjs.map +1 -0
  77. package/fesm2022/star-ng-ui-select-button.mjs +613 -0
  78. package/fesm2022/star-ng-ui-select-button.mjs.map +1 -0
  79. package/fesm2022/star-ng-ui-select.mjs +2523 -0
  80. package/fesm2022/star-ng-ui-select.mjs.map +1 -0
  81. package/fesm2022/star-ng-ui-skeleton.mjs +160 -0
  82. package/fesm2022/star-ng-ui-skeleton.mjs.map +1 -0
  83. package/fesm2022/star-ng-ui-slider.mjs +552 -0
  84. package/fesm2022/star-ng-ui-slider.mjs.map +1 -0
  85. package/fesm2022/star-ng-ui-spinner.mjs +148 -0
  86. package/fesm2022/star-ng-ui-spinner.mjs.map +1 -0
  87. package/fesm2022/star-ng-ui-stepper.mjs +360 -0
  88. package/fesm2022/star-ng-ui-stepper.mjs.map +1 -0
  89. package/fesm2022/star-ng-ui-table.mjs +3477 -0
  90. package/fesm2022/star-ng-ui-table.mjs.map +1 -0
  91. package/fesm2022/star-ng-ui-tabs.mjs +464 -0
  92. package/fesm2022/star-ng-ui-tabs.mjs.map +1 -0
  93. package/fesm2022/star-ng-ui-tag.mjs +129 -0
  94. package/fesm2022/star-ng-ui-tag.mjs.map +1 -0
  95. package/fesm2022/star-ng-ui-theme-switch.mjs +105 -0
  96. package/fesm2022/star-ng-ui-theme-switch.mjs.map +1 -0
  97. package/fesm2022/star-ng-ui-theme.mjs +98 -0
  98. package/fesm2022/star-ng-ui-theme.mjs.map +1 -0
  99. package/fesm2022/star-ng-ui-toast.mjs +298 -0
  100. package/fesm2022/star-ng-ui-toast.mjs.map +1 -0
  101. package/fesm2022/star-ng-ui-toggle-switch.mjs +316 -0
  102. package/fesm2022/star-ng-ui-toggle-switch.mjs.map +1 -0
  103. package/fesm2022/star-ng-ui-tooltip.mjs +297 -0
  104. package/fesm2022/star-ng-ui-tooltip.mjs.map +1 -0
  105. package/fesm2022/star-ng-ui-transloco.mjs +40 -0
  106. package/fesm2022/star-ng-ui-transloco.mjs.map +1 -0
  107. package/fesm2022/star-ng-ui-tree.mjs +1446 -0
  108. package/fesm2022/star-ng-ui-tree.mjs.map +1 -0
  109. package/fesm2022/star-ng-ui-utility.mjs +2134 -0
  110. package/fesm2022/star-ng-ui-utility.mjs.map +1 -0
  111. package/fesm2022/star-ng-ui.mjs +51 -0
  112. package/package.json +281 -3
  113. package/styles/_base.scss +70 -0
  114. package/styles/_shared.scss +2 -0
  115. package/styles/_tokens.scss +190 -0
  116. package/styles/controls/_accordion.scss +75 -0
  117. package/styles/controls/_autocomplete.scss +44 -0
  118. package/styles/controls/_avatar.scss +39 -0
  119. package/styles/controls/_breadcrumb.scss +45 -0
  120. package/styles/controls/_button.scss +137 -0
  121. package/styles/controls/_card.scss +38 -0
  122. package/styles/controls/_chart.scss +214 -0
  123. package/styles/controls/_chip.scss +51 -0
  124. package/styles/controls/_choice.scss +153 -0
  125. package/styles/controls/_data-display.scss +118 -0
  126. package/styles/controls/_date-picker.scss +300 -0
  127. package/styles/controls/_dialog.scss +123 -0
  128. package/styles/controls/_drawer.scss +118 -0
  129. package/styles/controls/_editor.scss +74 -0
  130. package/styles/controls/_field.scss +92 -0
  131. package/styles/controls/_file-upload.scss +136 -0
  132. package/styles/controls/_input-group.scss +104 -0
  133. package/styles/controls/_input-mask.scss +46 -0
  134. package/styles/controls/_input-number.scss +125 -0
  135. package/styles/controls/_knob.scss +76 -0
  136. package/styles/controls/_layout.scss +182 -0
  137. package/styles/controls/_listbox.scss +38 -0
  138. package/styles/controls/_media.scss +222 -0
  139. package/styles/controls/_menu.scss +254 -0
  140. package/styles/controls/_message.scss +48 -0
  141. package/styles/controls/_org-chart.scss +128 -0
  142. package/styles/controls/_paginator.scss +59 -0
  143. package/styles/controls/_panel.scss +83 -0
  144. package/styles/controls/_popover.scss +40 -0
  145. package/styles/controls/_progress-bar.scss +74 -0
  146. package/styles/controls/_select-button.scss +61 -0
  147. package/styles/controls/_select.scss +216 -0
  148. package/styles/controls/_skeleton.scss +43 -0
  149. package/styles/controls/_slider.scss +163 -0
  150. package/styles/controls/_spinner.scss +34 -0
  151. package/styles/controls/_stepper.scss +109 -0
  152. package/styles/controls/_table.scss +523 -0
  153. package/styles/controls/_tabs.scss +93 -0
  154. package/styles/controls/_tag.scss +84 -0
  155. package/styles/controls/_toast.scss +141 -0
  156. package/styles/controls/_tooltip.scss +14 -0
  157. package/styles/controls/_tree.scss +113 -0
  158. package/styles/controls/_utility.scss +654 -0
  159. package/styles/star-ng.css +5803 -0
  160. package/styles/star-ng.min.css +1 -0
  161. package/styles/star-ng.scss +50 -0
  162. package/theme/star-theme-first-paint.js +1 -0
  163. package/types/star-ng-ui-accordion.d.ts +82 -0
  164. package/types/star-ng-ui-autocomplete.d.ts +171 -0
  165. package/types/star-ng-ui-avatar.d.ts +43 -0
  166. package/types/star-ng-ui-badge.d.ts +46 -0
  167. package/types/star-ng-ui-breadcrumb.d.ts +39 -0
  168. package/types/star-ng-ui-button.d.ts +79 -0
  169. package/types/star-ng-ui-card.d.ts +29 -0
  170. package/types/star-ng-ui-chart.d.ts +337 -0
  171. package/types/star-ng-ui-checkbox.d.ts +92 -0
  172. package/types/star-ng-ui-core.d.ts +310 -0
  173. package/types/star-ng-ui-data-display.d.ts +339 -0
  174. package/types/star-ng-ui-date-picker.d.ts +701 -0
  175. package/types/star-ng-ui-dialog.d.ts +254 -0
  176. package/types/star-ng-ui-drawer.d.ts +29 -0
  177. package/types/star-ng-ui-editor.d.ts +96 -0
  178. package/types/star-ng-ui-field.d.ts +146 -0
  179. package/types/star-ng-ui-file-upload.d.ts +192 -0
  180. package/types/star-ng-ui-i18n-de.d.ts +7 -0
  181. package/types/star-ng-ui-i18n-es.d.ts +7 -0
  182. package/types/star-ng-ui-input-group.d.ts +58 -0
  183. package/types/star-ng-ui-input-mask.d.ts +126 -0
  184. package/types/star-ng-ui-input-number.d.ts +193 -0
  185. package/types/star-ng-ui-input-otp.d.ts +86 -0
  186. package/types/star-ng-ui-input-tags.d.ts +159 -0
  187. package/types/star-ng-ui-knob.d.ts +121 -0
  188. package/types/star-ng-ui-layout.d.ts +154 -0
  189. package/types/star-ng-ui-listbox.d.ts +197 -0
  190. package/types/star-ng-ui-media.d.ts +161 -0
  191. package/types/star-ng-ui-menu.d.ts +332 -0
  192. package/types/star-ng-ui-message.d.ts +52 -0
  193. package/types/star-ng-ui-paginator.d.ts +85 -0
  194. package/types/star-ng-ui-panel.d.ts +65 -0
  195. package/types/star-ng-ui-password.d.ts +129 -0
  196. package/types/star-ng-ui-popover.d.ts +57 -0
  197. package/types/star-ng-ui-progress-bar.d.ts +49 -0
  198. package/types/star-ng-ui-radio.d.ts +116 -0
  199. package/types/star-ng-ui-rating.d.ts +52 -0
  200. package/types/star-ng-ui-select-button.d.ts +169 -0
  201. package/types/star-ng-ui-select.d.ts +540 -0
  202. package/types/star-ng-ui-skeleton.d.ts +47 -0
  203. package/types/star-ng-ui-slider.d.ts +145 -0
  204. package/types/star-ng-ui-spinner.d.ts +29 -0
  205. package/types/star-ng-ui-stepper.d.ts +89 -0
  206. package/types/star-ng-ui-table.d.ts +829 -0
  207. package/types/star-ng-ui-tabs.d.ts +109 -0
  208. package/types/star-ng-ui-tag.d.ts +35 -0
  209. package/types/star-ng-ui-theme-switch.d.ts +36 -0
  210. package/types/star-ng-ui-theme.d.ts +95 -0
  211. package/types/star-ng-ui-toast.d.ts +84 -0
  212. package/types/star-ng-ui-toggle-switch.d.ts +81 -0
  213. package/types/star-ng-ui-tooltip.d.ts +66 -0
  214. package/types/star-ng-ui-transloco.d.ts +14 -0
  215. package/types/star-ng-ui-tree.d.ts +310 -0
  216. package/types/star-ng-ui-utility.d.ts +533 -0
  217. package/types/star-ng-ui.d.ts +51 -0
@@ -0,0 +1,514 @@
1
+ import { _IdGenerator } from "@angular/cdk/a11y";
2
+ import * as i0 from "@angular/core";
3
+ import { ChangeDetectionStrategy, Component, booleanAttribute, computed, inject, input, model, output } from "@angular/core";
4
+ import { STAR_UI_TEXT } from "@star-ng/ui/core";
5
+ var StarKnob = class StarKnob {
6
+ value = model(0, ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
7
+ min = input(0, ...ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []);
8
+ max = input(100, ...ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []);
9
+ step = input(1, ...ngDevMode ? [{ debugName: "step" }] : /* istanbul ignore next */ []);
10
+ size = input(120, ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
11
+ valueTemplate = input("{value}", ...ngDevMode ? [{ debugName: "valueTemplate" }] : /* istanbul ignore next */ []);
12
+ ariaLabel = input(null, ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
13
+ disabled = input(false, {
14
+ ...ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {},
15
+ transform: booleanAttribute
16
+ });
17
+ readonly = input(false, {
18
+ ...ngDevMode ? { debugName: "readonly" } : /* istanbul ignore next */ {},
19
+ transform: booleanAttribute
20
+ });
21
+ touch = output();
22
+ id = inject(_IdGenerator).getId("star-knob-");
23
+ lowest = computed(() => this.min() ?? 0, ...ngDevMode ? [{ debugName: "lowest" }] : /* istanbul ignore next */ []);
24
+ highest = computed(() => this.max() ?? 100, ...ngDevMode ? [{ debugName: "highest" }] : /* istanbul ignore next */ []);
25
+ ratio = computed(() => (this.value() - this.lowest()) / Math.max(1, this.highest() - this.lowest()), ...ngDevMode ? [{ debugName: "ratio" }] : /* istanbul ignore next */ []);
26
+ text = computed(() => this.valueTemplate().replace("{value}", String(this.value())), ...ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []);
27
+ arc(ratio) {
28
+ const start = 135 * Math.PI / 180;
29
+ const end = start + Math.max(1e-4, ratio) * 1.5 * Math.PI;
30
+ const p = (a) => `${(50 + 40 * Math.cos(a)).toFixed(2)} ${(50 + 40 * Math.sin(a)).toFixed(2)}`;
31
+ return `M ${p(start)} A 40 40 0 ${end - start > Math.PI ? 1 : 0} 1 ${p(end)}`;
32
+ }
33
+ set(next) {
34
+ if (this.disabled() || this.readonly()) return;
35
+ const stepped = Math.round(next / this.step()) * this.step();
36
+ this.value.set(Math.min(this.highest(), Math.max(this.lowest(), stepped)));
37
+ }
38
+ onKeydown(event) {
39
+ const big = (this.highest() - this.lowest()) / 10;
40
+ const moves = {
41
+ ArrowUp: this.step(),
42
+ ArrowRight: this.step(),
43
+ ArrowDown: -this.step(),
44
+ ArrowLeft: -this.step(),
45
+ PageUp: big,
46
+ PageDown: -big
47
+ };
48
+ if (event.key in moves) {
49
+ event.preventDefault();
50
+ this.set(this.value() + moves[event.key]);
51
+ } else if (event.key === "Home" || event.key === "End") {
52
+ event.preventDefault();
53
+ this.set(event.key === "Home" ? this.lowest() : this.highest());
54
+ }
55
+ }
56
+ onPointer(event) {
57
+ const box = event.currentTarget.getBoundingClientRect();
58
+ let degrees = Math.atan2(event.clientY - (box.top + box.height / 2), event.clientX - (box.left + box.width / 2)) * 180 / Math.PI - 135;
59
+ if (degrees < 0) degrees += 360;
60
+ if (degrees > 270) return;
61
+ this.set(this.lowest() + degrees / 270 * (this.highest() - this.lowest()));
62
+ }
63
+ static ɵfac = i0.ɵɵngDeclareFactory({
64
+ minVersion: "12.0.0",
65
+ version: "22.2.6",
66
+ ngImport: i0,
67
+ type: StarKnob,
68
+ deps: [],
69
+ target: i0.ɵɵFactoryTarget.Component
70
+ });
71
+ static ɵcmp = i0.ɵɵngDeclareComponent({
72
+ minVersion: "17.1.0",
73
+ version: "22.2.6",
74
+ type: StarKnob,
75
+ isStandalone: true,
76
+ selector: "star-knob",
77
+ inputs: {
78
+ value: {
79
+ classPropertyName: "value",
80
+ publicName: "value",
81
+ isSignal: true,
82
+ isRequired: false,
83
+ transformFunction: null
84
+ },
85
+ min: {
86
+ classPropertyName: "min",
87
+ publicName: "min",
88
+ isSignal: true,
89
+ isRequired: false,
90
+ transformFunction: null
91
+ },
92
+ max: {
93
+ classPropertyName: "max",
94
+ publicName: "max",
95
+ isSignal: true,
96
+ isRequired: false,
97
+ transformFunction: null
98
+ },
99
+ step: {
100
+ classPropertyName: "step",
101
+ publicName: "step",
102
+ isSignal: true,
103
+ isRequired: false,
104
+ transformFunction: null
105
+ },
106
+ size: {
107
+ classPropertyName: "size",
108
+ publicName: "size",
109
+ isSignal: true,
110
+ isRequired: false,
111
+ transformFunction: null
112
+ },
113
+ valueTemplate: {
114
+ classPropertyName: "valueTemplate",
115
+ publicName: "valueTemplate",
116
+ isSignal: true,
117
+ isRequired: false,
118
+ transformFunction: null
119
+ },
120
+ ariaLabel: {
121
+ classPropertyName: "ariaLabel",
122
+ publicName: "ariaLabel",
123
+ isSignal: true,
124
+ isRequired: false,
125
+ transformFunction: null
126
+ },
127
+ disabled: {
128
+ classPropertyName: "disabled",
129
+ publicName: "disabled",
130
+ isSignal: true,
131
+ isRequired: false,
132
+ transformFunction: null
133
+ },
134
+ readonly: {
135
+ classPropertyName: "readonly",
136
+ publicName: "readonly",
137
+ isSignal: true,
138
+ isRequired: false,
139
+ transformFunction: null
140
+ }
141
+ },
142
+ outputs: {
143
+ value: "valueChange",
144
+ touch: "touch"
145
+ },
146
+ host: {
147
+ properties: { "class.star-knob--disabled": "disabled()" },
148
+ classAttribute: "star-knob"
149
+ },
150
+ ngImport: i0,
151
+ template: `
152
+ <svg
153
+ viewBox="0 0 100 100"
154
+ [attr.width]="size()"
155
+ [attr.height]="size()"
156
+ role="slider"
157
+ [attr.tabindex]="disabled() ? -1 : 0"
158
+ [attr.aria-label]="ariaLabel()"
159
+ [attr.aria-valuemin]="lowest()"
160
+ [attr.aria-valuemax]="highest()"
161
+ [attr.aria-valuenow]="value()"
162
+ [attr.aria-valuetext]="text()"
163
+ [attr.aria-disabled]="disabled() || null"
164
+ (keydown)="onKeydown($event)"
165
+ (pointerdown)="onPointer($event)"
166
+ (pointermove)="$event.buttons === 1 && onPointer($event)"
167
+ (blur)="touch.emit()"
168
+ >
169
+ <path class="star-knob__track" [attr.d]="arc(1)" />
170
+ <path class="star-knob__value" [attr.d]="arc(ratio())" />
171
+ <text class="star-knob__text" x="50" y="57" text-anchor="middle">{{ text() }}</text>
172
+ </svg>
173
+ `,
174
+ isInline: true,
175
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
176
+ });
177
+ };
178
+ i0.ɵɵngDeclareClassMetadata({
179
+ minVersion: "12.0.0",
180
+ version: "22.2.6",
181
+ ngImport: i0,
182
+ type: StarKnob,
183
+ decorators: [{
184
+ type: Component,
185
+ args: [{
186
+ selector: "star-knob",
187
+ changeDetection: ChangeDetectionStrategy.OnPush,
188
+ host: {
189
+ class: "star-knob",
190
+ "[class.star-knob--disabled]": "disabled()"
191
+ },
192
+ template: `
193
+ <svg
194
+ viewBox="0 0 100 100"
195
+ [attr.width]="size()"
196
+ [attr.height]="size()"
197
+ role="slider"
198
+ [attr.tabindex]="disabled() ? -1 : 0"
199
+ [attr.aria-label]="ariaLabel()"
200
+ [attr.aria-valuemin]="lowest()"
201
+ [attr.aria-valuemax]="highest()"
202
+ [attr.aria-valuenow]="value()"
203
+ [attr.aria-valuetext]="text()"
204
+ [attr.aria-disabled]="disabled() || null"
205
+ (keydown)="onKeydown($event)"
206
+ (pointerdown)="onPointer($event)"
207
+ (pointermove)="$event.buttons === 1 && onPointer($event)"
208
+ (blur)="touch.emit()"
209
+ >
210
+ <path class="star-knob__track" [attr.d]="arc(1)" />
211
+ <path class="star-knob__value" [attr.d]="arc(ratio())" />
212
+ <text class="star-knob__text" x="50" y="57" text-anchor="middle">{{ text() }}</text>
213
+ </svg>
214
+ `
215
+ }]
216
+ }],
217
+ propDecorators: {
218
+ value: [{
219
+ type: i0.Input,
220
+ args: [{
221
+ isSignal: true,
222
+ alias: "value",
223
+ required: false
224
+ }]
225
+ }, {
226
+ type: i0.Output,
227
+ args: ["valueChange"]
228
+ }],
229
+ min: [{
230
+ type: i0.Input,
231
+ args: [{
232
+ isSignal: true,
233
+ alias: "min",
234
+ required: false
235
+ }]
236
+ }],
237
+ max: [{
238
+ type: i0.Input,
239
+ args: [{
240
+ isSignal: true,
241
+ alias: "max",
242
+ required: false
243
+ }]
244
+ }],
245
+ step: [{
246
+ type: i0.Input,
247
+ args: [{
248
+ isSignal: true,
249
+ alias: "step",
250
+ required: false
251
+ }]
252
+ }],
253
+ size: [{
254
+ type: i0.Input,
255
+ args: [{
256
+ isSignal: true,
257
+ alias: "size",
258
+ required: false
259
+ }]
260
+ }],
261
+ valueTemplate: [{
262
+ type: i0.Input,
263
+ args: [{
264
+ isSignal: true,
265
+ alias: "valueTemplate",
266
+ required: false
267
+ }]
268
+ }],
269
+ ariaLabel: [{
270
+ type: i0.Input,
271
+ args: [{
272
+ isSignal: true,
273
+ alias: "ariaLabel",
274
+ required: false
275
+ }]
276
+ }],
277
+ disabled: [{
278
+ type: i0.Input,
279
+ args: [{
280
+ isSignal: true,
281
+ alias: "disabled",
282
+ required: false
283
+ }]
284
+ }],
285
+ readonly: [{
286
+ type: i0.Input,
287
+ args: [{
288
+ isSignal: true,
289
+ alias: "readonly",
290
+ required: false
291
+ }]
292
+ }],
293
+ touch: [{
294
+ type: i0.Output,
295
+ args: ["touch"]
296
+ }]
297
+ }
298
+ });
299
+ const SWATCHES = [
300
+ "#4f46e5",
301
+ "#0369a1",
302
+ "#16a34a",
303
+ "#d97706",
304
+ "#dc2626",
305
+ "#6250d6",
306
+ "#0f172a",
307
+ "#64748b"
308
+ ];
309
+ var StarColorPicker = class StarColorPicker {
310
+ text = inject(STAR_UI_TEXT);
311
+ value = model("#4f46e5", ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
312
+ swatches = input(SWATCHES, ...ngDevMode ? [{ debugName: "swatches" }] : /* istanbul ignore next */ []);
313
+ ariaLabel = input(null, ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
314
+ disabled = input(false, {
315
+ ...ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {},
316
+ transform: booleanAttribute
317
+ });
318
+ touch = output();
319
+ onHex(input) {
320
+ const raw = input.value.trim();
321
+ const hex = raw.startsWith("#") ? raw : `#${raw}`;
322
+ if (/^#[0-9a-f]{6}$/i.test(hex)) this.value.set(hex.toLowerCase());
323
+ else input.value = this.value();
324
+ }
325
+ static ɵfac = i0.ɵɵngDeclareFactory({
326
+ minVersion: "12.0.0",
327
+ version: "22.2.6",
328
+ ngImport: i0,
329
+ type: StarColorPicker,
330
+ deps: [],
331
+ target: i0.ɵɵFactoryTarget.Component
332
+ });
333
+ static ɵcmp = i0.ɵɵngDeclareComponent({
334
+ minVersion: "17.0.0",
335
+ version: "22.2.6",
336
+ type: StarColorPicker,
337
+ isStandalone: true,
338
+ selector: "star-color-picker",
339
+ inputs: {
340
+ value: {
341
+ classPropertyName: "value",
342
+ publicName: "value",
343
+ isSignal: true,
344
+ isRequired: false,
345
+ transformFunction: null
346
+ },
347
+ swatches: {
348
+ classPropertyName: "swatches",
349
+ publicName: "swatches",
350
+ isSignal: true,
351
+ isRequired: false,
352
+ transformFunction: null
353
+ },
354
+ ariaLabel: {
355
+ classPropertyName: "ariaLabel",
356
+ publicName: "ariaLabel",
357
+ isSignal: true,
358
+ isRequired: false,
359
+ transformFunction: null
360
+ },
361
+ disabled: {
362
+ classPropertyName: "disabled",
363
+ publicName: "disabled",
364
+ isSignal: true,
365
+ isRequired: false,
366
+ transformFunction: null
367
+ }
368
+ },
369
+ outputs: {
370
+ value: "valueChange",
371
+ touch: "touch"
372
+ },
373
+ host: { classAttribute: "star-color" },
374
+ ngImport: i0,
375
+ template: `
376
+ <div
377
+ class="star-color__swatches"
378
+ role="radiogroup"
379
+ [attr.aria-label]="ariaLabel() ?? text.colorLabel"
380
+ >
381
+ @for (swatch of swatches(); track swatch) {
382
+ <button
383
+ type="button"
384
+ role="radio"
385
+ class="star-color__swatch"
386
+ [style.background]="swatch"
387
+ [attr.aria-checked]="swatch.toLowerCase() === value().toLowerCase()"
388
+ [attr.aria-label]="swatch"
389
+ [disabled]="disabled()"
390
+ (click)="value.set(swatch)"
391
+ ></button>
392
+ }
393
+ </div>
394
+ <label class="star-color__custom">
395
+ <input
396
+ type="color"
397
+ class="star-color__native"
398
+ [value]="value()"
399
+ [disabled]="disabled()"
400
+ (input)="value.set($any($event.target).value)"
401
+ (blur)="touch.emit()"
402
+ />
403
+ <span class="star-sr-only">{{ text.customColor }}</span>
404
+ </label>
405
+ <input
406
+ class="star-input star-input--sm star-color__hex"
407
+ [value]="value()"
408
+ [disabled]="disabled()"
409
+ [attr.aria-label]="text.hexValue(ariaLabel() ?? text.colorLabel)"
410
+ maxlength="7"
411
+ (change)="onHex($any($event.target))"
412
+ />
413
+ `,
414
+ isInline: true,
415
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
416
+ });
417
+ };
418
+ i0.ɵɵngDeclareClassMetadata({
419
+ minVersion: "12.0.0",
420
+ version: "22.2.6",
421
+ ngImport: i0,
422
+ type: StarColorPicker,
423
+ decorators: [{
424
+ type: Component,
425
+ args: [{
426
+ selector: "star-color-picker",
427
+ changeDetection: ChangeDetectionStrategy.OnPush,
428
+ host: { class: "star-color" },
429
+ template: `
430
+ <div
431
+ class="star-color__swatches"
432
+ role="radiogroup"
433
+ [attr.aria-label]="ariaLabel() ?? text.colorLabel"
434
+ >
435
+ @for (swatch of swatches(); track swatch) {
436
+ <button
437
+ type="button"
438
+ role="radio"
439
+ class="star-color__swatch"
440
+ [style.background]="swatch"
441
+ [attr.aria-checked]="swatch.toLowerCase() === value().toLowerCase()"
442
+ [attr.aria-label]="swatch"
443
+ [disabled]="disabled()"
444
+ (click)="value.set(swatch)"
445
+ ></button>
446
+ }
447
+ </div>
448
+ <label class="star-color__custom">
449
+ <input
450
+ type="color"
451
+ class="star-color__native"
452
+ [value]="value()"
453
+ [disabled]="disabled()"
454
+ (input)="value.set($any($event.target).value)"
455
+ (blur)="touch.emit()"
456
+ />
457
+ <span class="star-sr-only">{{ text.customColor }}</span>
458
+ </label>
459
+ <input
460
+ class="star-input star-input--sm star-color__hex"
461
+ [value]="value()"
462
+ [disabled]="disabled()"
463
+ [attr.aria-label]="text.hexValue(ariaLabel() ?? text.colorLabel)"
464
+ maxlength="7"
465
+ (change)="onHex($any($event.target))"
466
+ />
467
+ `
468
+ }]
469
+ }],
470
+ propDecorators: {
471
+ value: [{
472
+ type: i0.Input,
473
+ args: [{
474
+ isSignal: true,
475
+ alias: "value",
476
+ required: false
477
+ }]
478
+ }, {
479
+ type: i0.Output,
480
+ args: ["valueChange"]
481
+ }],
482
+ swatches: [{
483
+ type: i0.Input,
484
+ args: [{
485
+ isSignal: true,
486
+ alias: "swatches",
487
+ required: false
488
+ }]
489
+ }],
490
+ ariaLabel: [{
491
+ type: i0.Input,
492
+ args: [{
493
+ isSignal: true,
494
+ alias: "ariaLabel",
495
+ required: false
496
+ }]
497
+ }],
498
+ disabled: [{
499
+ type: i0.Input,
500
+ args: [{
501
+ isSignal: true,
502
+ alias: "disabled",
503
+ required: false
504
+ }]
505
+ }],
506
+ touch: [{
507
+ type: i0.Output,
508
+ args: ["touch"]
509
+ }]
510
+ }
511
+ });
512
+ export { StarColorPicker, StarKnob };
513
+
514
+ //# sourceMappingURL=star-ng-ui-knob.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"star-ng-ui-knob.mjs","names":[],"sources":["../../../projects/star-ng/knob/knob.ts"],"sourcesContent":["import { _IdGenerator } from '@angular/cdk/a11y';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n model,\n output,\n} from '@angular/core';\nimport type { FormValueControl } from '@angular/forms/signals';\nimport { STAR_UI_TEXT } from '@star-ng/ui/core';\n\n/**\n * Knob (PrimeNG `p-knob`): circular value dial, `role=\"slider\"` with Arrow / PageUp / PageDown /\n * Home / End keys; drag around the dial with a pointer.\n * `<star-knob [(value)]=\"completion\" [max]=\"100\" valueTemplate=\"{value}%\" ariaLabel=\"Completion\" />`\n */\n@Component({\n selector: 'star-knob',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'star-knob', '[class.star-knob--disabled]': 'disabled()' },\n template: `\n <svg\n viewBox=\"0 0 100 100\"\n [attr.width]=\"size()\"\n [attr.height]=\"size()\"\n role=\"slider\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-valuemin]=\"lowest()\"\n [attr.aria-valuemax]=\"highest()\"\n [attr.aria-valuenow]=\"value()\"\n [attr.aria-valuetext]=\"text()\"\n [attr.aria-disabled]=\"disabled() || null\"\n (keydown)=\"onKeydown($event)\"\n (pointerdown)=\"onPointer($event)\"\n (pointermove)=\"$event.buttons === 1 && onPointer($event)\"\n (blur)=\"touch.emit()\"\n >\n <path class=\"star-knob__track\" [attr.d]=\"arc(1)\" />\n <path class=\"star-knob__value\" [attr.d]=\"arc(ratio())\" />\n <text class=\"star-knob__text\" x=\"50\" y=\"57\" text-anchor=\"middle\">{{ text() }}</text>\n </svg>\n `,\n})\nexport class StarKnob implements FormValueControl<number> {\n readonly value = model(0);\n readonly min = input<number | undefined>(0);\n readonly max = input<number | undefined>(100);\n readonly step = input(1);\n readonly size = input(120);\n /** `{value}` is replaced by the number, for example `{value}%`. */\n readonly valueTemplate = input('{value}');\n readonly ariaLabel = input<string | null>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly readonly = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n protected readonly id = inject(_IdGenerator).getId('star-knob-');\n\n protected readonly lowest = computed(() => this.min() ?? 0);\n protected readonly highest = computed(() => this.max() ?? 100);\n protected readonly ratio = computed(\n () => (this.value() - this.lowest()) / Math.max(1, this.highest() - this.lowest()),\n );\n protected readonly text = computed(() =>\n this.valueTemplate().replace('{value}', String(this.value())),\n );\n\n /** 270° arc from the lower left, clockwise. */\n protected arc(ratio: number): string {\n const start = (135 * Math.PI) / 180;\n const end = start + Math.max(0.0001, ratio) * 1.5 * Math.PI;\n const p = (a: number) =>\n `${(50 + 40 * Math.cos(a)).toFixed(2)} ${(50 + 40 * Math.sin(a)).toFixed(2)}`;\n return `M ${p(start)} A 40 40 0 ${end - start > Math.PI ? 1 : 0} 1 ${p(end)}`;\n }\n\n private set(next: number): void {\n if (this.disabled() || this.readonly()) return;\n const stepped = Math.round(next / this.step()) * this.step();\n this.value.set(Math.min(this.highest(), Math.max(this.lowest(), stepped)));\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const big = (this.highest() - this.lowest()) / 10;\n const moves: Record<string, number> = {\n ArrowUp: this.step(),\n ArrowRight: this.step(),\n ArrowDown: -this.step(),\n ArrowLeft: -this.step(),\n PageUp: big,\n PageDown: -big,\n };\n if (event.key in moves) {\n event.preventDefault();\n this.set(this.value() + moves[event.key]);\n } else if (event.key === 'Home' || event.key === 'End') {\n event.preventDefault();\n this.set(event.key === 'Home' ? this.lowest() : this.highest());\n }\n }\n\n protected onPointer(event: PointerEvent): void {\n const svg = event.currentTarget as SVGSVGElement;\n const box = svg.getBoundingClientRect();\n const angle = Math.atan2(\n event.clientY - (box.top + box.height / 2),\n event.clientX - (box.left + box.width / 2),\n );\n let degrees = (angle * 180) / Math.PI - 135;\n if (degrees < 0) degrees += 360;\n if (degrees > 270) return;\n this.set(this.lowest() + (degrees / 270) * (this.highest() - this.lowest()));\n }\n}\n\nconst SWATCHES = [\n '#4f46e5',\n '#0369a1',\n '#16a34a',\n '#d97706',\n '#dc2626',\n '#6250d6',\n '#0f172a',\n '#64748b',\n];\n\n/**\n * Color picker (PrimeNG `p-colorpicker`): preset swatches, the native color dialog and a\n * hex field. Value: `#rrggbb`.\n * `<star-color-picker [(value)]=\"tagColor\" ariaLabel=\"Tag color\" />`\n */\n@Component({\n selector: 'star-color-picker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'star-color' },\n template: `\n <div\n class=\"star-color__swatches\"\n role=\"radiogroup\"\n [attr.aria-label]=\"ariaLabel() ?? text.colorLabel\"\n >\n @for (swatch of swatches(); track swatch) {\n <button\n type=\"button\"\n role=\"radio\"\n class=\"star-color__swatch\"\n [style.background]=\"swatch\"\n [attr.aria-checked]=\"swatch.toLowerCase() === value().toLowerCase()\"\n [attr.aria-label]=\"swatch\"\n [disabled]=\"disabled()\"\n (click)=\"value.set(swatch)\"\n ></button>\n }\n </div>\n <label class=\"star-color__custom\">\n <input\n type=\"color\"\n class=\"star-color__native\"\n [value]=\"value()\"\n [disabled]=\"disabled()\"\n (input)=\"value.set($any($event.target).value)\"\n (blur)=\"touch.emit()\"\n />\n <span class=\"star-sr-only\">{{ text.customColor }}</span>\n </label>\n <input\n class=\"star-input star-input--sm star-color__hex\"\n [value]=\"value()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"text.hexValue(ariaLabel() ?? text.colorLabel)\"\n maxlength=\"7\"\n (change)=\"onHex($any($event.target))\"\n />\n `,\n})\nexport class StarColorPicker implements FormValueControl<string> {\n protected readonly text = inject(STAR_UI_TEXT);\n readonly value = model('#4f46e5');\n readonly swatches = input<readonly string[]>(SWATCHES);\n readonly ariaLabel = input<string | null>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly touch = output<void>();\n\n protected onHex(input: HTMLInputElement): void {\n const raw = input.value.trim();\n const hex = raw.startsWith('#') ? raw : `#${raw}`;\n if (/^#[0-9a-f]{6}$/i.test(hex)) this.value.set(hex.toLowerCase());\n else input.value = this.value();\n }\n}\n"],"mappings":";;;;AA+CA,IAAa,WAAb,MAAa,SAAQ;CACV,QAAQ,MAAM,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAChB,MAAM,MAA0B,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,MAAA,CAAA,+BAAA,CAAA,CAAA;CAClC,MAAM,MAA0B,KAAI,GAAA,YAAA,CAAA,EAAA,WAAA,MAAA,CAAA,+BAAA,CAAA,CAAA;CACpC,OAAO,MAAM,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CACf,OAAO,MAAM,KAAI,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAEjB,gBAAgB,MAAM,WAAU,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;CAChC,YAAY,MAAqB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;CACtC,WAAW,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,WAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CACrD,WAAW,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,WAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CACrD,QAAQ,OAAM;CACJ,KAAK,OAAO,YAAY,CAAC,CAAC,MAAM,YAAY;CAE5C,SAAS,eAAe,KAAK,IAAG,KAAM,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CACxC,UAAU,eAAe,KAAK,IAAG,KAAM,KAAI,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAC3C,QAAQ,gBAClB,KAAK,MAAK,IAAK,KAAK,OAAM,KAAM,KAAK,IAAI,GAAG,KAAK,QAAO,IAAK,KAAK,OAAM,CAAE,GAClF,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CACkB,OAAO,eACxB,KAAK,cAAa,CAAE,CAAC,QAAQ,WAAW,OAAO,KAAK,MAAK,CAAE,CAAC,GAC7D,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAGS,IAAI,OAAa;EACzB,MAAM,QAAS,MAAM,KAAK,KAAM;EAChC,MAAM,MAAM,QAAQ,KAAK,IAAI,MAAQ,KAAK,IAAI,MAAM,KAAK;EACzD,MAAM,KAAK,MACT,IAAI,KAAK,KAAK,KAAK,IAAI,CAAC,EAAA,CAAG,QAAQ,CAAC,EAAC,IAAK,KAAK,KAAK,KAAK,IAAI,CAAC,EAAA,CAAG,QAAQ,CAAC;EAC5E,OAAO,KAAK,EAAE,KAAK,EAAC,aAAc,MAAM,QAAQ,KAAK,KAAK,IAAI,EAAC,KAAM,EAAE,GAAG;CAC5E;CAEQ,IAAI,MAAY;EACtB,IAAI,KAAK,SAAQ,KAAM,KAAK,SAAQ,GAAI;EACxC,MAAM,UAAU,KAAK,MAAM,OAAO,KAAK,KAAI,CAAE,IAAI,KAAK,KAAI;EAC1D,KAAK,MAAM,IAAI,KAAK,IAAI,KAAK,QAAO,GAAI,KAAK,IAAI,KAAK,OAAM,GAAI,OAAO,CAAC,CAAC;CAC3E;CAEU,UAAU,OAAoB;EACtC,MAAM,OAAO,KAAK,QAAO,IAAK,KAAK,OAAM,KAAM;EAC/C,MAAM,QAAgC;GACpC,SAAS,KAAK,KAAI;GAClB,YAAY,KAAK,KAAI;GACrB,WAAW,CAAC,KAAK,KAAI;GACrB,WAAW,CAAC,KAAK,KAAI;GACrB,QAAQ;GACR,UAAU,CAAC;EACZ;EACD,IAAI,MAAM,OAAO,OAAO;GACtB,MAAM,eAAc;GACpB,KAAK,IAAI,KAAK,MAAK,IAAK,MAAM,MAAM,IAAI;EAC1C,OAAO,IAAI,MAAM,QAAQ,UAAU,MAAM,QAAQ,OAAO;GACtD,MAAM,eAAc;GACpB,KAAK,IAAI,MAAM,QAAQ,SAAS,KAAK,OAAM,IAAK,KAAK,QAAO,CAAE;EAChE;CACF;CAEU,UAAU,OAAmB;EAErC,MAAM,MADM,MAAM,cACF,sBAAqB;EAKrC,IAAI,UAJU,KAAK,MACjB,MAAM,WAAW,IAAI,MAAM,IAAI,SAAS,IACxC,MAAM,WAAW,IAAI,OAAO,IAAI,QAAQ,EAE3B,IAAQ,MAAO,KAAK,KAAK;EACxC,IAAI,UAAU,GAAG,WAAW;EAC5B,IAAI,UAAU,KAAK;EACnB,KAAK,IAAI,KAAK,OAAM,IAAM,UAAU,OAAQ,KAAK,QAAO,IAAK,KAAK,OAAM,EAAG;CAC7E;CApEW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAQ,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAR,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAQ,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,KAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,KAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,eAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,SAAA;GAAA,OAAA;GAAA,OAAA;EAAA;EAAA,MAAA;GAAA,YAAA,EAAA,6BAAA,aAAA;GAAA,gBAAA;EAAA;EAAA,UAAA;EAAA,UAxBT;;;;;;;;;;;;;;;;;;;;;;;EAsBT,UAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAEU,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAQ,YAAA,CAAA;EA5BpB,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,iBAAiB,wBAAwB;GACzC,MAAM;IAAE,OAAO;IAAa,+BAA+B;GAAY;GACvE,UAAU;;;;;;;;;;;;;;;;;;;;;;;EAuBX,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwED,MAAM,WAAW;CACf;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD;AAmDD,IAAa,kBAAb,MAAa,gBAAe;CACP,OAAO,OAAO,YAAY;CACpC,QAAQ,MAAM,WAAU,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CACxB,WAAW,MAAyB,UAAS,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;CAC7C,YAAY,MAAqB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;CACtC,WAAW,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,WAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CACrD,QAAQ,OAAM;CAEb,MAAM,OAAuB;EACrC,MAAM,MAAM,MAAM,MAAM,KAAI;EAC5B,MAAM,MAAM,IAAI,WAAW,GAAG,IAAI,MAAM,IAAI;EAC5C,IAAI,kBAAkB,KAAK,GAAG,GAAG,KAAK,MAAM,IAAI,IAAI,YAAW,CAAE;OAC5D,MAAM,QAAQ,KAAK,MAAK;CAC/B;CAbW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAe,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAf,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAe,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,SAAA;GAAA,OAAA;GAAA,OAAA;EAAA;EAAA,MAAA,EAAA,gBAAA,aAAA;EAAA,UAAA;EAAA,UAxChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsCT,UAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAEU,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAe,YAAA,CAAA;EA5C3B,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,iBAAiB,wBAAwB;GACzC,MAAM,EAAE,OAAO,aAAY;GAC3B,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuCX,CAAA"}