@tolle_/tolle-ui 18.2.24 → 18.2.26

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 (184) hide show
  1. package/esm2022/lib/accordion-item.component.mjs +17 -5
  2. package/esm2022/lib/alert-dialog-dynamic.component.mjs +1 -1
  3. package/esm2022/lib/alert-dialog.component.mjs +48 -10
  4. package/esm2022/lib/alert-dialog.service.mjs +13 -2
  5. package/esm2022/lib/alert.component.mjs +5 -5
  6. package/esm2022/lib/avatar.component.mjs +30 -9
  7. package/esm2022/lib/badge.component.mjs +41 -15
  8. package/esm2022/lib/breadcrumb-link.component.mjs +5 -5
  9. package/esm2022/lib/button.component.mjs +14 -3
  10. package/esm2022/lib/calendar.component.mjs +99 -17
  11. package/esm2022/lib/card.component.mjs +29 -9
  12. package/esm2022/lib/carousel/carousel.component.mjs +19 -3
  13. package/esm2022/lib/checkbox.component.mjs +44 -21
  14. package/esm2022/lib/collapsible.component.mjs +12 -4
  15. package/esm2022/lib/country-selector.component.mjs +140 -20
  16. package/esm2022/lib/data-table.component.mjs +27 -16
  17. package/esm2022/lib/date-picker.component.mjs +24 -4
  18. package/esm2022/lib/date-range-picker.component.mjs +37 -9
  19. package/esm2022/lib/dropdown-item.component.mjs +19 -5
  20. package/esm2022/lib/dropdown-label.component.mjs +3 -3
  21. package/esm2022/lib/dropdown-menu.component.mjs +3 -3
  22. package/esm2022/lib/dropdown-separator.component.mjs +3 -3
  23. package/esm2022/lib/dropdown-trigger.directive.mjs +7 -3
  24. package/esm2022/lib/empty-state.component.mjs +3 -3
  25. package/esm2022/lib/hover-card.component.mjs +4 -2
  26. package/esm2022/lib/input.component.mjs +7 -5
  27. package/esm2022/lib/label.component.mjs +2 -2
  28. package/esm2022/lib/masked-input.component.mjs +3 -3
  29. package/esm2022/lib/modal.component.mjs +58 -22
  30. package/esm2022/lib/modal.service.mjs +13 -1
  31. package/esm2022/lib/multi-select.component.mjs +228 -20
  32. package/esm2022/lib/otp.component.mjs +6 -3
  33. package/esm2022/lib/pagination.component.mjs +19 -9
  34. package/esm2022/lib/progress.component.mjs +8 -5
  35. package/esm2022/lib/radio-group.component.mjs +51 -3
  36. package/esm2022/lib/radio-item.component.mjs +46 -8
  37. package/esm2022/lib/radio-service.mjs +60 -1
  38. package/esm2022/lib/range-calendar.component.mjs +317 -98
  39. package/esm2022/lib/resizable-panel.component.mjs +5 -4
  40. package/esm2022/lib/scroll-area.component.mjs +5 -5
  41. package/esm2022/lib/segment.component.mjs +73 -7
  42. package/esm2022/lib/select-item.component.mjs +20 -2
  43. package/esm2022/lib/select-separator.component.mjs +3 -3
  44. package/esm2022/lib/select.component.mjs +221 -14
  45. package/esm2022/lib/separator.component.mjs +12 -6
  46. package/esm2022/lib/sheet-ref.mjs +8 -1
  47. package/esm2022/lib/sheet-wrapper.component.mjs +27 -11
  48. package/esm2022/lib/sheet.component.mjs +57 -16
  49. package/esm2022/lib/sheet.service.mjs +5 -1
  50. package/esm2022/lib/sidebar.component.mjs +73 -15
  51. package/esm2022/lib/skeleton.component.mjs +19 -5
  52. package/esm2022/lib/switch.component.mjs +59 -53
  53. package/esm2022/lib/tabs.component.mjs +75 -13
  54. package/esm2022/lib/tag-input.component.mjs +6 -3
  55. package/esm2022/lib/textarea.component.mjs +9 -7
  56. package/esm2022/lib/theme.service.mjs +114 -138
  57. package/esm2022/lib/toaster.component.mjs +19 -9
  58. package/esm2022/lib/toggle-group.component.mjs +76 -4
  59. package/esm2022/lib/tolle-config.mjs +1 -1
  60. package/esm2022/lib/tooltip.directive.mjs +41 -17
  61. package/esm2022/lib/utils/color.mjs +324 -0
  62. package/esm2022/public-api.mjs +2 -1
  63. package/fesm2022/tolle-ui.mjs +2645 -637
  64. package/fesm2022/tolle-ui.mjs.map +1 -1
  65. package/lib/alert-dialog.component.d.ts +10 -1
  66. package/lib/avatar.component.d.ts +16 -3
  67. package/lib/badge.component.d.ts +17 -5
  68. package/lib/button.component.d.ts +10 -3
  69. package/lib/calendar.component.d.ts +21 -3
  70. package/lib/card.component.d.ts +6 -0
  71. package/lib/carousel/carousel.component.d.ts +1 -0
  72. package/lib/checkbox.component.d.ts +12 -4
  73. package/lib/country-selector.component.d.ts +11 -2
  74. package/lib/date-picker.component.d.ts +1 -0
  75. package/lib/date-range-picker.component.d.ts +4 -1
  76. package/lib/dropdown-item.component.d.ts +4 -2
  77. package/lib/dropdown-trigger.directive.d.ts +1 -1
  78. package/lib/modal.component.d.ts +6 -0
  79. package/lib/multi-select.component.d.ts +20 -0
  80. package/lib/otp.component.d.ts +1 -0
  81. package/lib/progress.component.d.ts +1 -0
  82. package/lib/radio-group.component.d.ts +8 -0
  83. package/lib/radio-item.component.d.ts +10 -4
  84. package/lib/radio-service.d.ts +29 -0
  85. package/lib/range-calendar.component.d.ts +33 -4
  86. package/lib/segment.component.d.ts +13 -0
  87. package/lib/select-item.component.d.ts +4 -1
  88. package/lib/select.component.d.ts +20 -0
  89. package/lib/separator.component.d.ts +2 -0
  90. package/lib/sheet-wrapper.component.d.ts +4 -0
  91. package/lib/sheet.component.d.ts +10 -1
  92. package/lib/sidebar.component.d.ts +2 -0
  93. package/lib/skeleton.component.d.ts +9 -3
  94. package/lib/switch.component.d.ts +13 -20
  95. package/lib/tabs.component.d.ts +11 -1
  96. package/lib/theme.service.d.ts +21 -6
  97. package/lib/toaster.component.d.ts +2 -2
  98. package/lib/toggle-group.component.d.ts +20 -2
  99. package/lib/toggle.component.d.ts +1 -1
  100. package/lib/tolle-config.d.ts +8 -0
  101. package/lib/tooltip.directive.d.ts +3 -0
  102. package/lib/utils/color.d.ts +87 -0
  103. package/package.json +4 -1
  104. package/preset.js +28 -0
  105. package/public-api.d.ts +1 -0
  106. package/registry/docs-content.json +4214 -0
  107. package/registry/llms-full.txt +1599 -0
  108. package/registry/llms.txt +83 -0
  109. package/registry/manifest.json +4925 -0
  110. package/registry/r/accordion-item.json +21 -0
  111. package/registry/r/accordion.json +23 -0
  112. package/registry/r/alert-dialog-dynamic.json +31 -0
  113. package/registry/r/alert-dialog.json +26 -0
  114. package/registry/r/alert.json +23 -0
  115. package/registry/r/aspect-ratio.json +21 -0
  116. package/registry/r/avatar-fallback.json +16 -0
  117. package/registry/r/avatar.json +23 -0
  118. package/registry/r/badge.json +23 -0
  119. package/registry/r/breadcrumb-item.json +16 -0
  120. package/registry/r/breadcrumb-link.json +16 -0
  121. package/registry/r/breadcrumb-separator.json +16 -0
  122. package/registry/r/breadcrumb.json +21 -0
  123. package/registry/r/button-group.json +21 -0
  124. package/registry/r/button.json +23 -0
  125. package/registry/r/calendar.json +23 -0
  126. package/registry/r/card.json +21 -0
  127. package/registry/r/carousel.json +18 -0
  128. package/registry/r/checkbox.json +23 -0
  129. package/registry/r/collapsible.json +21 -0
  130. package/registry/r/context-menu-trigger.json +23 -0
  131. package/registry/r/context-menu.json +28 -0
  132. package/registry/r/country-selector.json +31 -0
  133. package/registry/r/data-table.json +38 -0
  134. package/registry/r/date-picker.json +27 -0
  135. package/registry/r/date-range-picker.json +32 -0
  136. package/registry/r/dropdown-item.json +21 -0
  137. package/registry/r/dropdown-label.json +16 -0
  138. package/registry/r/dropdown-menu.json +16 -0
  139. package/registry/r/dropdown-separator.json +16 -0
  140. package/registry/r/dropdown-trigger.json +20 -0
  141. package/registry/r/empty-state.json +23 -0
  142. package/registry/r/hover-card.json +23 -0
  143. package/registry/r/input.json +21 -0
  144. package/registry/r/label.json +21 -0
  145. package/registry/r/masked-input.json +21 -0
  146. package/registry/r/modal.json +36 -0
  147. package/registry/r/multi-select.json +33 -0
  148. package/registry/r/otp-group.json +16 -0
  149. package/registry/r/otp-slot.json +21 -0
  150. package/registry/r/otp.json +21 -0
  151. package/registry/r/pagination.json +32 -0
  152. package/registry/r/phone-number-input.json +34 -0
  153. package/registry/r/popover-content.json +21 -0
  154. package/registry/r/popover.json +18 -0
  155. package/registry/r/progress.json +21 -0
  156. package/registry/r/radio-group.json +26 -0
  157. package/registry/r/radio-item.json +26 -0
  158. package/registry/r/range-calendar.json +28 -0
  159. package/registry/r/resizable-panel-item.json +23 -0
  160. package/registry/r/resizable-panel.json +23 -0
  161. package/registry/r/resizable.json +21 -0
  162. package/registry/r/scroll-area.json +21 -0
  163. package/registry/r/segment.json +21 -0
  164. package/registry/r/select-group.json +21 -0
  165. package/registry/r/select-item.json +26 -0
  166. package/registry/r/select-separator.json +21 -0
  167. package/registry/r/select.json +31 -0
  168. package/registry/r/separator.json +21 -0
  169. package/registry/r/sheet-wrapper.json +31 -0
  170. package/registry/r/sheet.json +21 -0
  171. package/registry/r/sidebar.json +21 -0
  172. package/registry/r/skeleton.json +23 -0
  173. package/registry/r/slider.json +21 -0
  174. package/registry/r/switch.json +23 -0
  175. package/registry/r/tabs.json +23 -0
  176. package/registry/r/tag-input.json +25 -0
  177. package/registry/r/textarea.json +21 -0
  178. package/registry/r/toaster.json +26 -0
  179. package/registry/r/toggle-group.json +25 -0
  180. package/registry/r/toggle.json +23 -0
  181. package/registry/r/tolle-cell.json +16 -0
  182. package/registry/r/tooltip.json +23 -0
  183. package/registry/registry.json +1540 -0
  184. package/theme.css +56 -1
@@ -0,0 +1,324 @@
1
+ /**
2
+ * Pure color + theme-token math for Tolle UI.
3
+ *
4
+ * Framework- and DOM-free so it can back both the runtime `ThemeService` and a
5
+ * build-time theme generator (the shadcn-style "copy this CSS block" flow), and
6
+ * to centralize the math ahead of a future oklch migration. No side effects.
7
+ */
8
+ /** Parse a #RGB or #RRGGBB hex string to RGB, or null if malformed. */
9
+ export function hexToRgb(hex) {
10
+ const c = hex.replace('#', '');
11
+ if (c.length === 3) {
12
+ return {
13
+ r: parseInt(c[0] + c[0], 16),
14
+ g: parseInt(c[1] + c[1], 16),
15
+ b: parseInt(c[2] + c[2], 16),
16
+ };
17
+ }
18
+ if (c.length === 6) {
19
+ return {
20
+ r: parseInt(c.substring(0, 2), 16),
21
+ g: parseInt(c.substring(2, 4), 16),
22
+ b: parseInt(c.substring(4, 6), 16),
23
+ };
24
+ }
25
+ return null;
26
+ }
27
+ /** Space-separated RGB triplet for a hex color (Tailwind `<alpha-value>` form). */
28
+ export function rgbTriplet(hex, fallback = '37 99 235') {
29
+ const rgb = hexToRgb(hex);
30
+ return rgb ? `${rgb.r} ${rgb.g} ${rgb.b}` : fallback;
31
+ }
32
+ /** Black or white, whichever contrasts better with the given color. */
33
+ export function getContrastColor(hex) {
34
+ const rgb = hexToRgb(hex);
35
+ if (!rgb)
36
+ return '#ffffff';
37
+ const luminance = (0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b) / 255;
38
+ return luminance > 0.5 ? '#000000' : '#ffffff';
39
+ }
40
+ /** Contrast color as an RGB triplet (for `--primary-foreground`). */
41
+ export function contrastTriplet(hex) {
42
+ return rgbTriplet(getContrastColor(hex), '255 255 255');
43
+ }
44
+ /** Lighten a hex color toward white by `percent` (0–100). */
45
+ export function lightenColor(hex, percent) {
46
+ const rgb = hexToRgb(hex);
47
+ if (!rgb)
48
+ return hex;
49
+ const r = Math.min(255, Math.floor(rgb.r + (255 - rgb.r) * (percent / 100)));
50
+ const g = Math.min(255, Math.floor(rgb.g + (255 - rgb.g) * (percent / 100)));
51
+ const b = Math.min(255, Math.floor(rgb.b + (255 - rgb.b) * (percent / 100)));
52
+ return `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1)}`;
53
+ }
54
+ function clamp(n, min, max) {
55
+ return Math.min(max, Math.max(min, n));
56
+ }
57
+ /** Convert a hex color to HSL (h 0–360, s/l 0–100), or null if malformed. */
58
+ export function hexToHsl(hex) {
59
+ const rgb = hexToRgb(hex);
60
+ if (!rgb)
61
+ return null;
62
+ const r = rgb.r / 255, g = rgb.g / 255, b = rgb.b / 255;
63
+ const max = Math.max(r, g, b), min = Math.min(r, g, b);
64
+ let h = 0;
65
+ let s = 0;
66
+ const l = (max + min) / 2;
67
+ if (max !== min) {
68
+ const d = max - min;
69
+ s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
70
+ switch (max) {
71
+ case r:
72
+ h = (g - b) / d + (g < b ? 6 : 0);
73
+ break;
74
+ case g:
75
+ h = (b - r) / d + 2;
76
+ break;
77
+ default:
78
+ h = (r - g) / d + 4;
79
+ }
80
+ h /= 6;
81
+ }
82
+ return { h: h * 360, s: s * 100, l: l * 100 };
83
+ }
84
+ /** Convert HSL (h 0–360, s/l 0–100) to a #RRGGBB hex string. */
85
+ export function hslToHex(h, s, l) {
86
+ h = ((h % 360) + 360) % 360 / 360;
87
+ s = clamp(s, 0, 100) / 100;
88
+ l = clamp(l, 0, 100) / 100;
89
+ const hue2rgb = (p, q, t) => {
90
+ if (t < 0)
91
+ t += 1;
92
+ if (t > 1)
93
+ t -= 1;
94
+ if (t < 1 / 6)
95
+ return p + (q - p) * 6 * t;
96
+ if (t < 1 / 2)
97
+ return q;
98
+ if (t < 2 / 3)
99
+ return p + (q - p) * (2 / 3 - t) * 6;
100
+ return p;
101
+ };
102
+ let r, g, b;
103
+ if (s === 0) {
104
+ r = g = b = l;
105
+ }
106
+ else {
107
+ const q = l < 0.5 ? l * (1 + s) : l + s - l * s;
108
+ const p = 2 * l - q;
109
+ r = hue2rgb(p, q, h + 1 / 3);
110
+ g = hue2rgb(p, q, h);
111
+ b = hue2rgb(p, q, h - 1 / 3);
112
+ }
113
+ const to = (x) => Math.round(x * 255).toString(16).padStart(2, '0');
114
+ return `#${to(r)}${to(g)}${to(b)}`;
115
+ }
116
+ /** Darken a hex color toward black by `percent` (0–100). */
117
+ export function darkenColor(hex, percent) {
118
+ const rgb = hexToRgb(hex);
119
+ if (!rgb)
120
+ return hex;
121
+ const factor = 1 - percent / 100;
122
+ const r = Math.max(0, Math.floor(rgb.r * factor));
123
+ const g = Math.max(0, Math.floor(rgb.g * factor));
124
+ const b = Math.max(0, Math.floor(rgb.b * factor));
125
+ return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;
126
+ }
127
+ /** Derived radius scale from a base radius (e.g. '0.5rem'), or null if malformed. */
128
+ export function radiusScale(radius) {
129
+ const m = radius.match(/^(\d*\.?\d+)([a-z]+|%)$/);
130
+ if (!m)
131
+ return null;
132
+ const n = parseFloat(m[1]);
133
+ const u = m[2];
134
+ return {
135
+ '--radius': radius,
136
+ '--radius-sm': `${n * 0.5}${u}`,
137
+ '--radius-md': `${n}${u}`,
138
+ '--radius-lg': `${n * 1.5}${u}`,
139
+ '--radius-xl': `${n * 2}${u}`,
140
+ '--radius-2xl': `${n * 3}${u}`,
141
+ '--radius-3xl': `${n * 4}${u}`,
142
+ '--radius-full': '9999px',
143
+ };
144
+ }
145
+ /**
146
+ * Generate the `:root` + `.dark` CSS custom-property block for a primary color
147
+ * (full 50–900 ramp, contrast foreground, focus ring, and radius scale). This is
148
+ * the theme-generator engine — identical to what `ThemeService` injects at runtime,
149
+ * and suitable for emitting a copy-paste block a consumer can commit.
150
+ *
151
+ * Pass `fonts` to also emit `--font-sans` / `--font-serif` / `--font-mono` (they
152
+ * do not vary between light and dark, so they land in `:root` only).
153
+ */
154
+ export function generateThemeCss(primaryHex, radius = '0.5rem', fonts) {
155
+ const base = rgbTriplet(primaryHex);
156
+ const ringLight = rgbTriplet(lightenColor(primaryHex, 40), '96 165 250');
157
+ const ringDark = rgbTriplet(lightenColor(primaryHex, 20), '147 197 253');
158
+ const fg = contrastTriplet(primaryHex);
159
+ const scale = radiusScale(radius);
160
+ const radiusVars = scale
161
+ ? Object.entries(scale)
162
+ .map(([k, v]) => `${k}: ${v};`)
163
+ .join('\n ')
164
+ : `--radius: ${radius};`;
165
+ const fontVars = fonts
166
+ ? [
167
+ fonts.sans ? `--font-sans: ${fonts.sans};` : '',
168
+ fonts.serif ? `--font-serif: ${fonts.serif};` : '',
169
+ fonts.mono ? `--font-mono: ${fonts.mono};` : '',
170
+ ]
171
+ .filter(Boolean)
172
+ .join('\n ')
173
+ : '';
174
+ return `
175
+ :root {
176
+ --primary: ${base};
177
+ --primary-foreground: ${fg};
178
+ ${radiusVars}${fontVars ? '\n ' + fontVars : ''}
179
+ --primary-50: ${rgbTriplet(lightenColor(primaryHex, 90))};
180
+ --primary-100: ${rgbTriplet(lightenColor(primaryHex, 80))};
181
+ --primary-200: ${rgbTriplet(lightenColor(primaryHex, 60))};
182
+ --primary-300: ${rgbTriplet(lightenColor(primaryHex, 40))};
183
+ --primary-400: ${rgbTriplet(lightenColor(primaryHex, 20))};
184
+ --primary-500: ${base};
185
+ --primary-600: ${rgbTriplet(darkenColor(primaryHex, 20))};
186
+ --primary-700: ${rgbTriplet(darkenColor(primaryHex, 40))};
187
+ --primary-800: ${rgbTriplet(darkenColor(primaryHex, 60))};
188
+ --primary-900: ${rgbTriplet(darkenColor(primaryHex, 80))};
189
+ --ring: ${ringLight};
190
+ }
191
+
192
+ .dark {
193
+ --primary: ${base};
194
+ --primary-foreground: ${fg};
195
+ ${radiusVars}
196
+ --primary-50: ${rgbTriplet(darkenColor(primaryHex, 85))};
197
+ --primary-100: ${rgbTriplet(darkenColor(primaryHex, 75))};
198
+ --primary-200: ${rgbTriplet(darkenColor(primaryHex, 65))};
199
+ --primary-300: ${rgbTriplet(darkenColor(primaryHex, 55))};
200
+ --primary-400: ${rgbTriplet(darkenColor(primaryHex, 45))};
201
+ --primary-500: ${base};
202
+ --primary-600: ${rgbTriplet(lightenColor(primaryHex, 20))};
203
+ --primary-700: ${rgbTriplet(lightenColor(primaryHex, 35))};
204
+ --primary-800: ${rgbTriplet(lightenColor(primaryHex, 50))};
205
+ --primary-900: ${rgbTriplet(lightenColor(primaryHex, 65))};
206
+ --ring: ${ringDark};
207
+ }
208
+ `;
209
+ }
210
+ /** Build a light+dark neutral palette from a Tailwind-style shade ramp. */
211
+ function neutralPalette(s) {
212
+ return {
213
+ light: {
214
+ background: '255 255 255',
215
+ foreground: s[950],
216
+ card: '255 255 255',
217
+ cardForeground: s[950],
218
+ popover: '255 255 255',
219
+ popoverForeground: s[950],
220
+ muted: s[100],
221
+ mutedForeground: s[500],
222
+ accent: s[100],
223
+ accentForeground: s[900],
224
+ secondary: s[100],
225
+ secondaryForeground: s[900],
226
+ border: s[200],
227
+ input: s[200],
228
+ },
229
+ dark: {
230
+ background: s[950],
231
+ foreground: s[50],
232
+ card: s[950],
233
+ cardForeground: s[50],
234
+ popover: s[950],
235
+ popoverForeground: s[50],
236
+ muted: s[800],
237
+ mutedForeground: s[400],
238
+ accent: s[800],
239
+ accentForeground: s[50],
240
+ secondary: s[800],
241
+ secondaryForeground: s[50],
242
+ border: s[800],
243
+ input: s[800],
244
+ },
245
+ };
246
+ }
247
+ /**
248
+ * Neutral base-color families (RGB triplets), matching Tailwind's Zinc / Slate /
249
+ * Gray / Neutral / Stone ramps. `zinc` reproduces the library's shipped defaults.
250
+ */
251
+ export const BASE_PALETTES = {
252
+ zinc: neutralPalette({ 50: '250 250 250', 100: '244 244 245', 200: '228 228 231', 400: '161 161 170', 500: '113 113 122', 800: '39 39 42', 900: '24 24 27', 950: '9 9 11' }),
253
+ slate: neutralPalette({ 50: '248 250 252', 100: '241 245 249', 200: '226 232 240', 400: '148 163 184', 500: '100 116 139', 800: '30 41 59', 900: '15 23 42', 950: '2 6 23' }),
254
+ gray: neutralPalette({ 50: '249 250 251', 100: '243 244 246', 200: '229 231 235', 400: '156 163 175', 500: '107 114 128', 800: '31 41 55', 900: '17 24 39', 950: '3 7 18' }),
255
+ neutral: neutralPalette({ 50: '250 250 250', 100: '245 245 245', 200: '229 229 229', 400: '163 163 163', 500: '115 115 115', 800: '38 38 38', 900: '23 23 23', 950: '10 10 10' }),
256
+ stone: neutralPalette({ 50: '250 250 249', 100: '245 245 244', 200: '231 229 228', 400: '168 162 158', 500: '120 113 108', 800: '41 37 36', 900: '28 25 23', 950: '12 10 9' }),
257
+ };
258
+ function baseTokenBlock(t) {
259
+ return Object.entries({
260
+ '--background': t.background,
261
+ '--foreground': t.foreground,
262
+ '--card': t.card,
263
+ '--card-foreground': t.cardForeground,
264
+ '--popover': t.popover,
265
+ '--popover-foreground': t.popoverForeground,
266
+ '--muted': t.muted,
267
+ '--muted-foreground': t.mutedForeground,
268
+ '--accent': t.accent,
269
+ '--accent-foreground': t.accentForeground,
270
+ '--secondary': t.secondary,
271
+ '--secondary-foreground': t.secondaryForeground,
272
+ '--border': t.border,
273
+ '--input': t.input,
274
+ })
275
+ .map(([k, v]) => `${k}: ${v};`)
276
+ .join('\n ');
277
+ }
278
+ /** Emit the `:root` + `.dark` neutral-token block for a base color id. */
279
+ export function generateBaseCss(baseId) {
280
+ const p = BASE_PALETTES[baseId] ?? BASE_PALETTES['zinc'];
281
+ return `
282
+ :root {
283
+ ${baseTokenBlock(p.light)}
284
+ }
285
+
286
+ .dark {
287
+ ${baseTokenBlock(p.dark)}
288
+ }
289
+ `;
290
+ }
291
+ /* -------------------------------------------------------------------------- */
292
+ /* Chart palette */
293
+ /* -------------------------------------------------------------------------- */
294
+ /**
295
+ * Derive 5 harmonious chart colors from one base hex — the base hue plus
296
+ * analogous hues at ±30°/±60°, with paired lightness shifts for separation.
297
+ * Returns RGB triplets for `--chart-1`…`--chart-5`.
298
+ */
299
+ export function generateChartRamp(hex) {
300
+ const hsl = hexToHsl(hex) ?? { h: 220, s: 70, l: 55 };
301
+ const defs = [
302
+ { dh: 0, s: hsl.s, l: hsl.l },
303
+ { dh: 32, s: hsl.s * 0.9, l: clamp(hsl.l + 8, 32, 74) },
304
+ { dh: -28, s: hsl.s * 0.95, l: clamp(hsl.l - 8, 28, 70) },
305
+ { dh: 64, s: hsl.s * 0.82, l: clamp(hsl.l + 15, 38, 80) },
306
+ { dh: -58, s: hsl.s, l: clamp(hsl.l - 16, 24, 66) },
307
+ ];
308
+ return defs.map((d) => rgbTriplet(hslToHex(hsl.h + d.dh, clamp(d.s, 24, 92), d.l)));
309
+ }
310
+ /** Emit the `:root` + `.dark` `--chart-1…5` block for a chart base color. */
311
+ export function generateChartCss(hex) {
312
+ const ramp = generateChartRamp(hex);
313
+ const vars = ramp.map((t, i) => `--chart-${i + 1}: ${t};`).join('\n ');
314
+ return `
315
+ :root {
316
+ ${vars}
317
+ }
318
+
319
+ .dark {
320
+ ${vars}
321
+ }
322
+ `;
323
+ }
324
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL3V0aWxzL2NvbG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQVFILHVFQUF1RTtBQUN2RSxNQUFNLFVBQVUsUUFBUSxDQUFDLEdBQVc7SUFDbEMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDL0IsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ25CLE9BQU87WUFDTCxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzVCLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDNUIsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztTQUM3QixDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNuQixPQUFPO1lBQ0wsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbEMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbEMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7U0FDbkMsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxtRkFBbUY7QUFDbkYsTUFBTSxVQUFVLFVBQVUsQ0FBQyxHQUFXLEVBQUUsUUFBUSxHQUFHLFdBQVc7SUFDNUQsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUN2RCxDQUFDO0FBRUQsdUVBQXVFO0FBQ3ZFLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUFXO0lBQzFDLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQixJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzNCLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDeEUsT0FBTyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNqRCxDQUFDO0FBRUQscUVBQXFFO0FBQ3JFLE1BQU0sVUFBVSxlQUFlLENBQUMsR0FBVztJQUN6QyxPQUFPLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQsNkRBQTZEO0FBQzdELE1BQU0sVUFBVSxZQUFZLENBQUMsR0FBVyxFQUFFLE9BQWU7SUFDdkQsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTyxHQUFHLENBQUM7SUFDckIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0UsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0UsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0UsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzVFLENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxDQUFTLEVBQUUsR0FBVyxFQUFFLEdBQVc7SUFDaEQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFRRCw2RUFBNkU7QUFDN0UsTUFBTSxVQUFVLFFBQVEsQ0FBQyxHQUFXO0lBQ2xDLE1BQU0sR0FBRyxH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QUM7SUFDNUUsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDckMsQ0FBQztBQUVELDREQUE0RDtBQUM1RCxNQUFNLFVBQVUsV0FBVyxDQUFDLEdBQVcsRUFBRSxPQUFlO0lBQ3RELE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQixJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sR0FBRyxDQUFDO0lBQ3JCLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2xELE9BQU8sSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ25ILENBQUM7QUFFRCxxRkFBcUY7QUFDckYsTUFBTSxV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QUU7UUFDekQsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtRQUN6RCxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtLQUNwRCxDQUFDO0lBQ0YsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RixDQUFDO0FBRUQsNkVBQTZFO0FBQzdFLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUFXO0lBQzFDLE1BQU0sSUFBSSxHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDOUUsT0FBTzs7VUFFQyxJQUFJOzs7O1VBSUosSUFBSTs7S0FFVCxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHVyZSBjb2xvciArIHRoZW1lLXRva2VuIG1hdGggZm9yIFRvbGxlIFVJLlxuICpcbiAqIEZyYW1ld29yay0gYW5kIERPTS1mcmVlIHNvIGl0IGNhbiBiYWNrIGJvdGggdGhlIHJ1bnRpbWUgYFRoZW1lU2VydmljZWAgYW5kIGFcbiAqIGJ1aWxkLXRpbWUgdGhlbWUgZ2VuZXJhdG9yICh0aGUgc2hhZGNuLXN0eWxlIFwiY29weSB0aGlzIENTUyBibG9ja1wiIGZsb3cpLCBhbmRcbiAqIHRvIGNlbnRyYWxpemUgdGhlIG1hdGggYWhlYWQgb2YgYSBmdXR1cmUgb2tsY2ggbWlncmF0aW9uLiBObyBzaWRlIGVmZmVjdHMuXG4gKi9cblxuZXhwb3J0IGludGVyZmFjZSBSZ2Ige1xuICByOiBudW1iZXI7XG4gIGc6IG51bWJlcjtcbiAgYjogbnVtYmVyO1xufVxuXG4vKiogUGFyc2UgYSAjUkdCIG9yICNSUkdHQkIgaGV4IHN0cmluZyB0byBSR0IsIG9yIG51bGwgaWYgbWFsZm9ybWVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhleFRvUmdiKGhleDogc3RyaW5nKTogUmdiIHwgbnVsbCB7XG4gIGNvbnN0IGMgPSBoZXgucmVwbGFjZSgnIycsICcnKTtcbiAgaWYgKGMubGVuZ3RoID09PSAzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHI6IHBhcnNlSW50KGNbMF0gKyBjWzBdLCAxNiksXG4gICAgICBnOiBwYXJzZUludChjWzFdICsgY1sxXSwgMTYpLFxuICAgICAgYjogcGFyc2VJbnQoY1syXSArIGNbMl0sIDE2KSxcbiAgICB9O1xuICB9XG4gIGlmIChjLmxlbmd0aCA9PT0gNikge1xuICAgIHJldHVybiB7XG4gICAgICByOiBwYXJzZUludChjLnN1YnN0cmluZygwLCAyKSwgMTYpLFxuICAgICAgZzogcGFyc2VJbnQoYy5zdWJzdHJpbmcoMiwgNCksIDE2KSxcbiAgICAgIGI6IHBhcnNlSW50KGMuc3Vic3RyaW5nKDQsIDYpLCAxNiksXG4gICAgfTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqIFNwYWNlLXNlcGFyYXRlZCBSR0IgdHJpcGxldCBmb3IgYSBoZXggY29sb3IgKFRhaWx3aW5kIGA8YWxwaGEtdmFsdWU+YCBmb3JtKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZ2JUcmlwbGV0KGhleDogc3RyaW5nLCBmYWxsYmFjayA9ICczNyA5OSAyMzUnKTogc3RyaW5nIHtcbiAgY29uc3QgcmdiID0gaGV4VG9SZ2IoaGV4KTtcbiAgcmV0dXJuIHJnYiA/IGAke3JnYi5yfSAke3JnYi5nfSAke3JnYi5ifWAgOiBmYWxsYmFjaztcbn1cblxuLyoqIEJsYWNrIG9yIHdoaXRlLCB3aGljaGV2ZXIgY29udHJhc3RzIGJldHRlciB3aXRoIHRoZSBnaXZlbiBjb2xvci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250cmFzdENvbG9yKGhleDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmdiID0gaGV4VG9SZ2IoaGV4KTtcbiAgaWYgKCFyZ2IpIHJldHVybiAnI2ZmZmZmZic7XG4gIGNvbnN0IGx1bWluYW5jZSA9ICgwLjI5OSAqIHJnYi5yICsgMC41ODcgKiByZ2IuZyArIDAuMTE0ICogcmdiLmIpIC8gMjU1O1xuICByZXR1cm4gbHVtaW5hbmNlID4gMC41ID8gJyMwMDAwMDAnIDogJyNmZmZmZmYnO1xufVxuXG4vKiogQ29udHJhc3QgY29sb3IgYXMgYW4gUkdCIHRyaXBsZXQgKGZvciBgLS1wcmltYXJ5LWZvcmVncm91bmRgKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb250cmFzdFRyaXBsZXQoaGV4OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmdiVHJpcGxldChnZXRDb250cmFzdENvbG9yKGhleCksICcyNTUgMjU1IDI1NScpO1xufVxuXG4vKiogTGlnaHRlbiBhIGhleCBjb2xvciB0b3dhcmQgd2hpdGUgYnkgYHBlcmNlbnRgICgw4oCTMTAwKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaWdodGVuQ29sb3IoaGV4OiBzdHJpbmcsIHBlcmNlbnQ6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IHJnYiA9IGhleFRvUmdiKGhleCk7XG4gIGlmICghcmdiKSByZXR1cm4gaGV4O1xuICBjb25zdCByID0gTWF0aC5taW4oMjU1LCBNYXRoLmZsb29yKHJnYi5yICsgKDI1NSAtIHJnYi5yKSAqIChwZXJjZW50IC8gMTAwKSkpO1xuICBjb25zdCBnID0gTWF0aC5taW4oMjU1LCBNYXRoLmZsb29yKHJnYi5nICsgKDI1NSAtIHJnYi5nKSAqIChwZXJjZW50IC8gMTAwKSkpO1xuICBjb25zdCBiID0gTWF0aC5taW4oMjU1LCBNYXRoLmZsb29yKHJnYi5iICsgKDI1NSAtIHJnYi5iKSAqIChwZXJjZW50IC8gMTAwKSkpO1xuICByZXR1cm4gYCMkeygoMSA8PCAyNCkgKyAociA8PCAxNikgKyAoZyA8PCA4KSArIGIpLnRvU3RyaW5nKDE2KS5zbGljZSgxKX1gO1xufVxuXG5mdW5jdGlvbiBjbGFtcChuOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLm1pbihtYXgsIE1hdGgubWF4KG1pbiwgbikpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhzbCB7XG4gIGg6IG51bWJlcjtcbiAgczogbnVtYmVyO1xuICBsOiBudW1iZXI7XG59XG5cbi8qKiBDb252ZXJ0IGEgaGV4IGNvbG9yIHRvIEhTTCAoaCAw4oCTMzYwLCBzL2wgMOKAkzEwMCksIG9yIG51bGwgaWYgbWFsZm9ybWVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhleFRvSHNsKGhleDogc3RyaW5nKTogSHNsIHwgbnVsbCB7XG4gIGNvbnN0IHJnYiA9IGhleFRvUmdiKGhleCk7XG4gIGlmICghcmdiKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgciA9IHJnYi5yIC8gMjU1LFxuICAgIGcgPSByZ2IuZyAvIDI1NSxcbiAgICBiID0gcmdiLmIgLyAyNTU7XG4gIGNvbnN0IG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLFxuICAgIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpO1xuICBsZXQgaCA9IDA7XG4gIGxldCBzID0gMDtcbiAgY29uc3QgbCA9IChtYXggKyBtaW4pIC8gMjtcbiAgaWYgKG1heCAhPT0gbWluKSB7XG4gICAgY29uc3QgZCA9IG1heCAtIG1pbjtcbiAgICBzID0gbCA+IDAuNSA/IGQgLyAoMiAtIG1heCAtIG1pbikgOiBkIC8gKG1heCArIG1pbik7XG4gICAgc3dpdGNoIChtYXgpIHtcbiAgICAgIGNhc2UgcjpcbiAgICAgICAgaCA9IChnIC0gYikgLyBkICsgKGcgPCBiID8gNiA6IDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZzpcbiAgICAgICAgaCA9IChiIC0gcikgLyBkICsgMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBoID0gKHIgLSBnKSAvIGQgKyA0O1xuICAgIH1cbiAgICBoIC89IDY7XG4gIH1cbiAgcmV0dXJuIHsgaDogaCAqIDM2MCwgczogcyAqIDEwMCwgbDogbCAqIDEwMCB9O1xufVxuXG4vKiogQ29udmVydCBIU0wgKGggMOKAkzM2MCwgcy9sIDDigJMxMDApIHRvIGEgI1JSR0dCQiBoZXggc3RyaW5nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhzbFRvSGV4KGg6IG51bWJlciwgczogbnVtYmVyLCBsOiBudW1iZXIpOiBzdHJpbmcge1xuICBoID0gKChoICUgMzYwKSArIDM2MCkgJSAzNjAgLyAzNjA7XG4gIHMgPSBjbGFtcChzLCAwLCAxMDApIC8gMTAwO1xuICBsID0gY2xhbXAobCwgMCwgMTAwKSAvIDEwMDtcbiAgY29uc3QgaHVlMnJnYiA9IChwOiBudW1iZXIsIHE6IG51bWJlciwgdDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKHQgPCAwKSB0ICs9IDE7XG4gICAgaWYgKHQgPiAxKSB0IC09IDE7XG4gICAgaWYgKHQgPCAxIC8gNikgcmV0dXJuIHAgKyAocSAtIHApICogNiAqIHQ7XG4gICAgaWYgKHQgPCAxIC8gMikgcmV0dXJuIHE7XG4gICAgaWYgKHQgPCAyIC8gMykgcmV0dXJuIHAgKyAocSAtIHApICogKDIgLyAzIC0gdCkgKiA2O1xuICAgIHJldHVybiBwO1xuICB9O1xuICBsZXQgcjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlcjtcbiAgaWYgKHMgPT09IDApIHtcbiAgICByID0gZyA9IGIgPSBsO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHEgPSBsIDwgMC41ID8gbCAqICgxICsgcykgOiBsICsgcyAtIGwgKiBzO1xuICAgIGNvbnN0IHAgPSAyICogbCAtIHE7XG4gICAgciA9IGh1ZTJyZ2IocCwgcSwgaCArIDEgLyAzKTtcbiAgICBnID0gaHVlMnJnYihwLCBxLCBoKTtcbiAgICBiID0gaHVlMnJnYihwLCBxLCBoIC0gMSAvIDMpO1xuICB9XG4gIGNvbnN0IHRvID0gKHg6IG51bWJlcikgPT4gTWF0aC5yb3VuZCh4ICogMjU1KS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKTtcbiAgcmV0dXJuIGAjJHt0byhyKX0ke3RvKGcpfSR7dG8oYil9YDtcbn1cblxuLyoqIERhcmtlbiBhIGhleCBjb2xvciB0b3dhcmQgYmxhY2sgYnkgYHBlcmNlbnRgICgw4oCTMTAwKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXJrZW5Db2xvcihoZXg6IHN0cmluZywgcGVyY2VudDogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgcmdiID0gaGV4VG9SZ2IoaGV4KTtcbiAgaWYgKCFyZ2IpIHJldHVybiBoZXg7XG4gIGNvbnN0IGZhY3RvciA9IDEgLSBwZXJjZW50IC8gMTAwO1xuICBjb25zdCByID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcihyZ2IuciAqIGZhY3RvcikpO1xuICBjb25zdCBnID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcihyZ2IuZyAqIGZhY3RvcikpO1xuICBjb25zdCBiID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcihyZ2IuYiAqIGZhY3RvcikpO1xuICByZXR1cm4gYCMke3IudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJyl9JHtnLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpfSR7Yi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKX1gO1xufVxuXG4vKiogRGVyaXZlZCByYWRpdXMgc2NhbGUgZnJvbSBhIGJhc2UgcmFkaXVzIChlLmcuICcwLjVyZW0nKSwgb3IgbnVsbCBpZiBtYWxmb3JtZWQuICovXG5leHBvcnQgZnVuY3Rpb24gcmFkaXVzU2NhbGUocmFkaXVzOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgbnVsbCB7XG4gIGNvbnN0IG0gPSByYWRpdXMubWF0Y2goL14oXFxkKlxcLj9cXGQrKShbYS16XSt8JSkkLyk7XG4gIGlmICghbSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IG4gPSBwYXJzZUZsb2F0KG1bMV0pO1xuICBjb25zdCB1ID0gbVsyXTtcbiAgcmV0dXJuIHtcbiAgICAnLS1yYWRpdXMnOiByYWRpdXMsXG4gICAgJy0tcmFkaXVzLXNtJzogYCR7biAqIDAuNX0ke3V9YCxcbiAgICAnLS1yYWRpdXMtbWQnOiBgJHtufSR7dX1gLFxuICAgICctLXJhZGl1cy1sZyc6IGAke24gKiAxLjV9JHt1fWAsXG4gICAgJy0tcmFkaXVzLXhsJzogYCR7biAqIDJ9JHt1fWAsXG4gICAgJy0tcmFkaXVzLTJ4bCc6IGAke24gKiAzfSR7dX1gLFxuICAgICctLXJhZGl1cy0zeGwnOiBgJHtuICogNH0ke3V9YCxcbiAgICAnLS1yYWRpdXMtZnVsbCc6ICc5OTk5cHgnLFxuICB9O1xufVxuXG4vKiogT3B0aW9uYWwgdHlwb2dyYXBoeSBzdGFja3MgZm9yIHRoZSB0aGVtZSBnZW5lcmF0b3IuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvbnRUb2tlbnMge1xuICBzYW5zPzogc3RyaW5nO1xuICBzZXJpZj86IHN0cmluZztcbiAgbW9ubz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgYDpyb290YCArIGAuZGFya2AgQ1NTIGN1c3RvbS1wcm9wZXJ0eSBibG9jayBmb3IgYSBwcmltYXJ5IGNvbG9yXG4gKiAoZnVsbCA1MOKAkzkwMCByYW1wLCBjb250cmFzdCBmb3JlZ3JvdW5kLCBmb2N1cyByaW5nLCBhbmQgcmFkaXVzIHNjYWxlKS4gVGhpcyBpc1xuICogdGhlIHRoZW1lLWdlbmVyYXRvciBlbmdpbmUg4oCUIGlkZW50aWNhbCB0byB3aGF0IGBUaGVtZVNlcnZpY2VgIGluamVjdHMgYXQgcnVudGltZSxcbiAqIGFuZCBzdWl0YWJsZSBmb3IgZW1pdHRpbmcgYSBjb3B5LXBhc3RlIGJsb2NrIGEgY29uc3VtZXIgY2FuIGNvbW1pdC5cbiAqXG4gKiBQYXNzIGBmb250c2AgdG8gYWxzbyBlbWl0IGAtLWZvbnQtc2Fuc2AgLyBgLS1mb250LXNlcmlmYCAvIGAtLWZvbnQtbW9ub2AgKHRoZXlcbiAqIGRvIG5vdCB2YXJ5IGJldHdlZW4gbGlnaHQgYW5kIGRhcmssIHNvIHRoZXkgbGFuZCBpbiBgOnJvb3RgIG9ubHkpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVUaGVtZUNzcyhwcmltYXJ5SGV4OiBzdHJpbmcsIHJhZGl1cyA9ICcwLjVyZW0nLCBmb250cz86IEZvbnRUb2tlbnMpOiBzdHJpbmcge1xuICBjb25zdCBiYXNlID0gcmdiVHJpcGxldChwcmltYXJ5SGV4KTtcbiAgY29uc3QgcmluZ0xpZ2h0ID0gcmdiVHJpcGxldChsaWdodGVuQ29sb3IocHJpbWFyeUhleCwgNDApLCAnOTYgMTY1IDI1MCcpO1xuICBjb25zdCByaW5nRGFyayA9IHJnYlRyaXBsZXQobGlnaHRlbkNvbG9yKHByaW1hcnlIZXgsIDIwKSwgJzE0NyAxOTcgMjUzJyk7XG4gIGNvbnN0IGZnID0gY29udHJhc3RUcmlwbGV0KHByaW1hcnlIZXgpO1xuXG4gIGNvbnN0IHNjYWxlID0gcmFkaXVzU2NhbGUocmFkaXVzKTtcbiAgY29uc3QgcmFkaXVzVmFycyA9IHNjYWxlXG4gICAgPyBPYmplY3QuZW50cmllcyhzY2FsZSlcbiAgICAgICAgLm1hcCgoW2ssIHZdKSA9PiBgJHtrfTogJHt2fTtgKVxuICAgICAgICAuam9pbignXFxuICAgICAgICAnKVxuICAgIDogYC0tcmFkaXVzOiAke3JhZGl1c307YDtcblxuICBjb25zdCBmb250VmFycyA9IGZvbnRzXG4gICAgPyBbXG4gICAgICAgIGZvbnRzLnNhbnMgPyBgLS1mb250LXNhbnM6ICR7Zm9udHMuc2Fuc307YCA6ICcnLFxuICAgICAgICBmb250cy5zZXJpZiA/IGAtLWZvbnQtc2VyaWY6ICR7Zm9udHMuc2VyaWZ9O2AgOiAnJyxcbiAgICAgICAgZm9udHMubW9ubyA/IGAtLWZvbnQtbW9ubzogJHtmb250cy5tb25vfTtgIDogJycsXG4gICAgICBdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oJ1xcbiAgICAgICAgJylcbiAgICA6ICcnO1xuXG4gIHJldHVybiBgXG4gICAgICA6cm9vdCB7XG4gICAgICAgIC0tcHJpbWFyeTogJHtiYXNlfTtcbiAgICAgICAgLS1wcmltYXJ5LWZvcmVncm91bmQ6ICR7Zmd9O1xuICAgICAgICAke3JhZGl1c1ZhcnN9JHtmb250VmFycyA/ICdcXG4gICAgICAgICcgKyBmb250VmFycyA6ICcnfVxuICAgICAgICAtLXByaW1hcnktNTA6ICR7cmdiVHJpcGxldChsaWdodGVuQ29sb3IocHJpbWFyeUhleCwgOTApKX07XG4gICAgICAgIC0tcHJpbWFyeS0xMDA6ICR7cmdiVHJpcGxldChsaWdodGVuQ29sb3IocHJpbWFyeUhleCwgODApKX07XG4gICAgICAgIC0tcHJpbWFyeS0yMDA6ICR7cmdiVHJpcGxldChsaWdodGVuQ29sb3IocHJpbWFyeUhleCwgNjApKX07XG4gICAgICAgIC0tcHJpbWFyeS0zMDA6ICR7cmdiVHJpcGxldChsaWdodGVuQ29sb3IocHJpbWFyeUhleCwgNDApKX07XG4gICAgICAgIC0tcHJpbWFyeS00MDA6ICR7cmdiVHJpcGxldChsaWdodGVuQ29sb3IocHJpbWFyeUhleCwgMjApKX07XG4gICAgICAgIC0tcHJpbWFyeS01MDA6ICR7YmFzZX07XG4gICAgICAgIC0tcHJpbWFyeS02MDA6ICR7cmdiVHJpcGxldChkYXJrZW5Db2xvcihwcmltYXJ5SGV4LCAyMCkpfTtcbiAgICAgICAgLS1wcmltYXJ5LTcwMDogJHtyZ2JUcmlwbGV0KGRhcmtlbkNvbG9yKHByaW1hcnlIZXgsIDQwKSl9O1xuICAgICAgICAtLXByaW1hcnktODAwOiAke3JnYlRyaXBsZXQoZGFya2VuQ29sb3IocHJpbWFyeUhleCwgNjApKX07XG4gICAgICAgIC0tcHJpbWFyeS05MDA6ICR7cmdiVHJpcGxldChkYXJrZW5Db2xvcihwcmltYXJ5SGV4LCA4MCkpfTtcbiAgICAgICAgLS1yaW5nOiAke3JpbmdMaWdodH07XG4gICAgICB9XG5cbiAgICAgIC5kYXJrIHtcbiAgICAgICAgLS1wcmltYXJ5OiAke2Jhc2V9O1xuICAgICAgICAtLXByaW1hcnktZm9yZWdyb3VuZDogJHtmZ307XG4gICAgICAgICR7cmFkaXVzVmFyc31cbiAgICAgICAgLS1wcmltYXJ5LTUwOiAke3JnYlRyaXBsZXQoZGFya2VuQ29sb3IocHJpbWFyeUhleCwgODUpKX07XG4gICAgICAgIC0tcHJpbWFyeS0xMDA6ICR7cmdiVHJpcGxldChkYXJrZW5Db2xvcihwcmltYXJ5SGV4LCA3NSkpfTtcbiAgICAgICAgLS1wcmltYXJ5LTIwMDogJHtyZ2JUcmlwbGV0KGRhcmtlbkNvbG9yKHByaW1hcnlIZXgsIDY1KSl9O1xuICAgICAgICAtLXByaW1hcnktMzAwOiAke3JnYlRyaXBsZXQoZGFya2VuQ29sb3IocHJpbWFyeUhleCwgNTUpKX07XG4gICAgICAgIC0tcHJpbWFyeS00MDA6ICR7cmdiVHJpcGxldChkYXJrZW5Db2xvcihwcmltYXJ5SGV4LCA0NSkpfTtcbiAgICAgICAgLS1wcmltYXJ5LTUwMDogJHtiYXNlfTtcbiAgICAgICAgLS1wcmltYXJ5LTYwMDogJHtyZ2JUcmlwbGV0KGxpZ2h0ZW5Db2xvcihwcmltYXJ5SGV4LCAyMCkpfTtcbiAgICAgICAgLS1wcmltYXJ5LTcwMDogJHtyZ2JUcmlwbGV0KGxpZ2h0ZW5Db2xvcihwcmltYXJ5SGV4LCAzNSkpfTtcbiAgICAgICAgLS1wcmltYXJ5LTgwMDogJHtyZ2JUcmlwbGV0KGxpZ2h0ZW5Db2xvcihwcmltYXJ5SGV4LCA1MCkpfTtcbiAgICAgICAgLS1wcmltYXJ5LTkwMDogJHtyZ2JUcmlwbGV0KGxpZ2h0ZW5Db2xvcihwcmltYXJ5SGV4LCA2NSkpfTtcbiAgICAgICAgLS1yaW5nOiAke3JpbmdEYXJrfTtcbiAgICAgIH1cbiAgICBgO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLyogQmFzZSAobmV1dHJhbCkgY29sb3IgZmFtaWxpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKiBUaGUgbmV1dHJhbCBzdXJmYWNlL2ZvcmVncm91bmQgdG9rZW5zIGEgYmFzZSBjb2xvciBkcml2ZXMgKG9uZSBhcHBlYXJhbmNlKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZVRva2VucyB7XG4gIGJhY2tncm91bmQ6IHN0cmluZztcbiAgZm9yZWdyb3VuZDogc3RyaW5nO1xuICBjYXJkOiBzdHJpbmc7XG4gIGNhcmRGb3JlZ3JvdW5kOiBzdHJpbmc7XG4gIHBvcG92ZXI6IHN0cmluZztcbiAgcG9wb3ZlckZvcmVncm91bmQ6IHN0cmluZztcbiAgbXV0ZWQ6IHN0cmluZztcbiAgbXV0ZWRGb3JlZ3JvdW5kOiBzdHJpbmc7XG4gIGFjY2VudDogc3RyaW5nO1xuICBhY2NlbnRGb3JlZ3JvdW5kOiBzdHJpbmc7XG4gIHNlY29uZGFyeTogc3RyaW5nO1xuICBzZWNvbmRhcnlGb3JlZ3JvdW5kOiBzdHJpbmc7XG4gIGJvcmRlcjogc3RyaW5nO1xuICBpbnB1dDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VQYWxldHRlIHtcbiAgbGlnaHQ6IEJhc2VUb2tlbnM7XG4gIGRhcms6IEJhc2VUb2tlbnM7XG59XG5cbi8qKiBCdWlsZCBhIGxpZ2h0K2RhcmsgbmV1dHJhbCBwYWxldHRlIGZyb20gYSBUYWlsd2luZC1zdHlsZSBzaGFkZSByYW1wLiAqL1xuZnVuY3Rpb24gbmV1dHJhbFBhbGV0dGUoczogUmVjb3JkPDUwIHwgMTAwIHwgMjAwIHwgNDAwIHwgNTAwIHwgODAwIHwgOTAwIHwgOTUwLCBzdHJpbmc+KTogQmFzZVBhbGV0dGUge1xuICByZXR1cm4ge1xuICAgIGxpZ2h0OiB7XG4gICAgICBiYWNrZ3JvdW5kOiAnMjU1IDI1NSAyNTUnLFxuICAgICAgZm9yZWdyb3VuZDogc1s5NTBdLFxuICAgICAgY2FyZDogJzI1NSAyNTUgMjU1JyxcbiAgICAgIGNhcmRGb3JlZ3JvdW5kOiBzWzk1MF0sXG4gICAgICBwb3BvdmVyOiAnMjU1IDI1NSAyNTUnLFxuICAgICAgcG9wb3ZlckZvcmVncm91bmQ6IHNbOTUwXSxcbiAgICAgIG11dGVkOiBzWzEwMF0sXG4gICAgICBtdXRlZEZvcmVncm91bmQ6IHNbNTAwXSxcbiAgICAgIGFjY2VudDogc1sxMDBdLFxuICAgICAgYWNjZW50Rm9yZWdyb3VuZDogc1s5MDBdLFxuICAgICAgc2Vjb25kYXJ5OiBzWzEwMF0sXG4gICAgICBzZWNvbmRhcnlGb3JlZ3JvdW5kOiBzWzkwMF0sXG4gICAgICBib3JkZXI6IHNbMjAwXSxcbiAgICAgIGlucHV0OiBzWzIwMF0sXG4gICAgfSxcbiAgICBkYXJrOiB7XG4gICAgICBiYWNrZ3JvdW5kOiBzWzk1MF0sXG4gICAgICBmb3JlZ3JvdW5kOiBzWzUwXSxcbiAgICAgIGNhcmQ6IHNbOTUwXSxcbiAgICAgIGNhcmRGb3JlZ3JvdW5kOiBzWzUwXSxcbiAgICAgIHBvcG92ZXI6IHNbOTUwXSxcbiAgICAgIHBvcG92ZXJGb3JlZ3JvdW5kOiBzWzUwXSxcbiAgICAgIG11dGVkOiBzWzgwMF0sXG4gICAgICBtdXRlZEZvcmVncm91bmQ6IHNbNDAwXSxcbiAgICAgIGFjY2VudDogc1s4MDBdLFxuICAgICAgYWNjZW50Rm9yZWdyb3VuZDogc1s1MF0sXG4gICAgICBzZWNvbmRhcnk6IHNbODAwXSxcbiAgICAgIHNlY29uZGFyeUZvcmVncm91bmQ6IHNbNTBdLFxuICAgICAgYm9yZGVyOiBzWzgwMF0sXG4gICAgICBpbnB1dDogc1s4MDBdLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogTmV1dHJhbCBiYXNlLWNvbG9yIGZhbWlsaWVzIChSR0IgdHJpcGxldHMpLCBtYXRjaGluZyBUYWlsd2luZCdzIFppbmMgLyBTbGF0ZSAvXG4gKiBHcmF5IC8gTmV1dHJhbCAvIFN0b25lIHJhbXBzLiBgemluY2AgcmVwcm9kdWNlcyB0aGUgbGlicmFyeSdzIHNoaXBwZWQgZGVmYXVsdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBCQVNFX1BBTEVUVEVTOiBSZWNvcmQ8c3RyaW5nLCBCYXNlUGFsZXR0ZT4gPSB7XG4gIHppbmM6IG5ldXRyYWxQYWxldHRlKHsgNTA6ICcyNTAgMjUwIDI1MCcsIDEwMDogJzI0NCAyNDQgMjQ1JywgMjAwOiAnMjI4IDIyOCAyMzEnLCA0MDA6ICcxNjEgMTYxIDE3MCcsIDUwMDogJzExMyAxMTMgMTIyJywgODAwOiAnMzkgMzkgNDInLCA5MDA6ICcyNCAyNCAyNycsIDk1MDogJzkgOSAxMScgfSksXG4gIHNsYXRlOiBuZXV0cmFsUGFsZXR0ZSh7IDUwOiAnMjQ4IDI1MCAyNTInLCAxMDA6ICcyNDEgMjQ1IDI0OScsIDIwMDogJzIyNiAyMzIgMjQwJywgNDAwOiAnMTQ4IDE2MyAxODQnLCA1MDA6ICcxMDAgMTE2IDEzOScsIDgwMDogJzMwIDQxIDU5JywgOTAwOiAnMTUgMjMgNDInLCA5NTA6ICcyIDYgMjMnIH0pLFxuICBncmF5OiBuZXV0cmFsUGFsZXR0ZSh7IDUwOiAnMjQ5IDI1MCAyNTEnLCAxMDA6ICcyNDMgMjQ0IDI0NicsIDIwMDogJzIyOSAyMzEgMjM1JywgNDAwOiAnMTU2IDE2MyAxNzUnLCA1MDA6ICcxMDcgMTE0IDEyOCcsIDgwMDogJzMxIDQxIDU1JywgOTAwOiAnMTcgMjQgMzknLCA5NTA6ICczIDcgMTgnIH0pLFxuICBuZXV0cmFsOiBuZXV0cmFsUGFsZXR0ZSh7IDUwOiAnMjUwIDI1MCAyNTAnLCAxMDA6ICcyNDUgMjQ1IDI0NScsIDIwMDogJzIyOSAyMjkgMjI5JywgNDAwOiAnMTYzIDE2MyAxNjMnLCA1MDA6ICcxMTUgMTE1IDExNScsIDgwMDogJzM4IDM4IDM4JywgOTAwOiAnMjMgMjMgMjMnLCA5NTA6ICcxMCAxMCAxMCcgfSksXG4gIHN0b25lOiBuZXV0cmFsUGFsZXR0ZSh7IDUwOiAnMjUwIDI1MCAyNDknLCAxMDA6ICcyNDUgMjQ1IDI0NCcsIDIwMDogJzIzMSAyMjkgMjI4JywgNDAwOiAnMTY4IDE2MiAxNTgnLCA1MDA6ICcxMjAgMTEzIDEwOCcsIDgwMDogJzQxIDM3IDM2JywgOTAwOiAnMjggMjUgMjMnLCA5NTA6ICcxMiAxMCA5JyB9KSxcbn07XG5cbmZ1bmN0aW9uIGJhc2VUb2tlbkJsb2NrKHQ6IEJhc2VUb2tlbnMpOiBzdHJpbmcge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoe1xuICAgICctLWJhY2tncm91bmQnOiB0LmJhY2tncm91bmQsXG4gICAgJy0tZm9yZWdyb3VuZCc6IHQuZm9yZWdyb3VuZCxcbiAgICAnLS1jYXJkJzogdC5jYXJkLFxuICAgICctLWNhcmQtZm9yZWdyb3VuZCc6IHQuY2FyZEZvcmVncm91bmQsXG4gICAgJy0tcG9wb3Zlcic6IHQucG9wb3ZlcixcbiAgICAnLS1wb3BvdmVyLWZvcmVncm91bmQnOiB0LnBvcG92ZXJGb3JlZ3JvdW5kLFxuICAgICctLW11dGVkJzogdC5tdXRlZCxcbiAgICAnLS1tdXRlZC1mb3JlZ3JvdW5kJzogdC5tdXRlZEZvcmVncm91bmQsXG4gICAgJy0tYWNjZW50JzogdC5hY2NlbnQsXG4gICAgJy0tYWNjZW50LWZvcmVncm91bmQnOiB0LmFjY2VudEZvcmVncm91bmQsXG4gICAgJy0tc2Vjb25kYXJ5JzogdC5zZWNvbmRhcnksXG4gICAgJy0tc2Vjb25kYXJ5LWZvcmVncm91bmQnOiB0LnNlY29uZGFyeUZvcmVncm91bmQsXG4gICAgJy0tYm9yZGVyJzogdC5ib3JkZXIsXG4gICAgJy0taW5wdXQnOiB0LmlucHV0LFxuICB9KVxuICAgIC5tYXAoKFtrLCB2XSkgPT4gYCR7a306ICR7dn07YClcbiAgICAuam9pbignXFxuICAgICAgICAnKTtcbn1cblxuLyoqIEVtaXQgdGhlIGA6cm9vdGAgKyBgLmRhcmtgIG5ldXRyYWwtdG9rZW4gYmxvY2sgZm9yIGEgYmFzZSBjb2xvciBpZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUJhc2VDc3MoYmFzZUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwID0gQkFTRV9QQUxFVFRFU1tiYXNlSWRdID8/IEJBU0VfUEFMRVRURVNbJ3ppbmMnXTtcbiAgcmV0dXJuIGBcbiAgICAgIDpyb290IHtcbiAgICAgICAgJHtiYXNlVG9rZW5CbG9jayhwLmxpZ2h0KX1cbiAgICAgIH1cblxuICAgICAgLmRhcmsge1xuICAgICAgICAke2Jhc2VUb2tlbkJsb2NrKHAuZGFyayl9XG4gICAgICB9XG4gICAgYDtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi8qIENoYXJ0IHBhbGV0dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIERlcml2ZSA1IGhhcm1vbmlvdXMgY2hhcnQgY29sb3JzIGZyb20gb25lIGJhc2UgaGV4IOKAlCB0aGUgYmFzZSBodWUgcGx1c1xuICogYW5hbG9nb3VzIGh1ZXMgYXQgwrEzMMKwL8KxNjDCsCwgd2l0aCBwYWlyZWQgbGlnaHRuZXNzIHNoaWZ0cyBmb3Igc2VwYXJhdGlvbi5cbiAqIFJldHVybnMgUkdCIHRyaXBsZXRzIGZvciBgLS1jaGFydC0xYOKApmAtLWNoYXJ0LTVgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVDaGFydFJhbXAoaGV4OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGhzbCA9IGhleFRvSHNsKGhleCkgPz8geyBoOiAyMjAsIHM6IDcwLCBsOiA1NSB9O1xuICBjb25zdCBkZWZzID0gW1xuICAgIHsgZGg6IDAsIHM6IGhzbC5zLCBsOiBoc2wubCB9LFxuICAgIHsgZGg6IDMyLCBzOiBoc2wucyAqIDAuOSwgbDogY2xhbXAoaHNsLmwgKyA4LCAzMiwgNzQpIH0sXG4gICAgeyBkaDogLTI4LCBzOiBoc2wucyAqIDAuOTUsIGw6IGNsYW1wKGhzbC5sIC0gOCwgMjgsIDcwKSB9LFxuICAgIHsgZGg6IDY0LCBzOiBoc2wucyAqIDAuODIsIGw6IGNsYW1wKGhzbC5sICsgMTUsIDM4LCA4MCkgfSxcbiAgICB7IGRoOiAtNTgsIHM6IGhzbC5zLCBsOiBjbGFtcChoc2wubCAtIDE2LCAyNCwgNjYpIH0sXG4gIF07XG4gIHJldHVybiBkZWZzLm1hcCgoZCkgPT4gcmdiVHJpcGxldChoc2xUb0hleChoc2wuaCArIGQuZGgsIGNsYW1wKGQucywgMjQsIDkyKSwgZC5sKSkpO1xufVxuXG4vKiogRW1pdCB0aGUgYDpyb290YCArIGAuZGFya2AgYC0tY2hhcnQtMeKApjVgIGJsb2NrIGZvciBhIGNoYXJ0IGJhc2UgY29sb3IuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVDaGFydENzcyhoZXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHJhbXAgPSBnZW5lcmF0ZUNoYXJ0UmFtcChoZXgpO1xuICBjb25zdCB2YXJzID0gcmFtcC5tYXAoKHQsIGkpID0+IGAtLWNoYXJ0LSR7aSArIDF9OiAke3R9O2ApLmpvaW4oJ1xcbiAgICAgICAgJyk7XG4gIHJldHVybiBgXG4gICAgICA6cm9vdCB7XG4gICAgICAgICR7dmFyc31cbiAgICAgIH1cblxuICAgICAgLmRhcmsge1xuICAgICAgICAke3ZhcnN9XG4gICAgICB9XG4gICAgYDtcbn1cbiJdfQ==
@@ -2,6 +2,7 @@
2
2
  * Public API Surface of tolle
3
3
  */
4
4
  export * from './lib/utils/cn';
5
+ export * from './lib/utils/color';
5
6
  export * from './lib/button.component';
6
7
  export * from './lib/input.component';
7
8
  export * from './lib/card.component';
@@ -85,4 +86,4 @@ export * from './lib/phone-number.service';
85
86
  export * from './lib/country-codes.service';
86
87
  export * from './lib/resizable-panel.component';
87
88
  export * from './lib/resizable-panel-item.component';
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMscUJBQXFCLENBQUE7QUFDbkMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsOEJBQThCLENBQUE7QUFDNUMsY0FBYywwQkFBMEIsQ0FBQTtBQUN4QyxjQUFjLDhCQUE4QixDQUFBO0FBQzVDLGNBQWMsNkJBQTZCLENBQUE7QUFDM0MsY0FBYyw0QkFBNEIsQ0FBQTtBQUMxQyxjQUFjLDRCQUE0QixDQUFBO0FBQzFDLGNBQWMsNEJBQTRCLENBQUE7QUFDMUMsY0FBYyxnQ0FBZ0MsQ0FBQTtBQUM5QyxjQUFjLDJCQUEyQixDQUFBO0FBQ3pDLGNBQWMsdUJBQXVCLENBQUE7QUFDckMsY0FBYyxpQkFBaUIsQ0FBQTtBQUMvQixjQUFjLHFCQUFxQixDQUFBO0FBQ25DLGNBQWMsMkJBQTJCLENBQUE7QUFDekMsY0FBYyxhQUFhLENBQUE7QUFDM0IsY0FBYyw4QkFBOEIsQ0FBQTtBQUM1QyxjQUFjLG1DQUFtQyxDQUFBO0FBQ2pELGNBQWMsZ0NBQWdDLENBQUE7QUFDOUMsY0FBYyxxQkFBcUIsQ0FBQTtBQUNuQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsZ0NBQWdDLENBQUE7QUFDOUMsY0FBYywrQkFBK0IsQ0FBQTtBQUM3QyxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLHNDQUFzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiB0b2xsZVxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL2NuJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2J1dHRvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaW5wdXQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NhcmQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlbGVjdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VsZWN0LWl0ZW0uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlbGVjdC1ncm91cC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VsZWN0LXNlcGFyYXRvci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3dpdGNoLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9iYWRnZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2tlbGV0b24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NoZWNrYm94LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWctaW5wdXQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Rvb2x0aXAuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RvYXN0LnNlcnZpY2UnXG5leHBvcnQgKiBmcm9tICcuL2xpYi90b2FzdGVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90b2xsZS1jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbXVsdGktc2VsZWN0LmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NhbGVuZGFyLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL21hc2tlZC1pbnB1dC5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kYXRlLXBpY2tlci5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9wYWdpbmF0aW9uLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGEtdGFibGUuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9sbGUtY2VsbC5kaXJlY3RpdmUnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9hY2NvcmRpb24taXRlbS5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9hY2NvcmRpb24uY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kYWwuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kYWwtcmVmJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kYWwuc2VydmljZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGFsLXN0YWNrLnNlcnZpY2UnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RhbCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2J1dHRvbi1ncm91cC5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9yYW5nZS1jYWxlbmRhci5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi90aGVtZS5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZHJvcGRvd24taXRlbS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZHJvcGRvd24tbGFiZWwuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZHJvcGRvd24tbWVudS5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kcm9wZG93bi1zZXBhcmF0b3IuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Ryb3Bkb3duLXRyaWdnZXIuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RleHRhcmVhLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hbGVydC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXZhdGFyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdmF0YXItZmFsbGJhY2suY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2JyZWFkY3J1bWIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2JyZWFkY3J1bWItbGluay5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnJlYWRjcnVtYi1zZXBhcmF0b3IuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2JyZWFkY3J1bWItaXRlbS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZW1wdHktc3RhdGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL290cC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvb3RwLXNsb3QuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL290cC1ncm91cC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcG9wb3Zlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcG9wb3Zlci1jb250ZW50LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yYWRpby1ncm91cC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmFkaW8taXRlbS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VnbWVudC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2lkZWJhci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2Fyb3VzZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbGFiZWwuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcGFyYXRvci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJvZ3Jlc3MuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NsaWRlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9nZ2xlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90b2dnbGUtZ3JvdXAuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2hvdmVyLWNhcmQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYnMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbGxhcHNpYmxlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zY3JvbGwtYXJlYS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYWxlcnQtZGlhbG9nLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hbGVydC1kaWFsb2cuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hbGVydC1kaWFsb2cudHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYWxlcnQtZGlhbG9nLWR5bmFtaWMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoZWV0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGVldC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoZWV0LXJlZic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGVldC50eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGVldC13cmFwcGVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3VudHJ5LXNlbGVjdG9yLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9waG9uZS1udW1iZXItaW5wdXQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Bob25lLW51bWJlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvdW50cnktY29kZXMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yZXNpemFibGUtcGFuZWwuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Jlc2l6YWJsZS1wYW5lbC1pdGVtLmNvbXBvbmVudCc7Il19
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxxQkFBcUIsQ0FBQTtBQUNuQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyw4QkFBOEIsQ0FBQTtBQUM1QyxjQUFjLDBCQUEwQixDQUFBO0FBQ3hDLGNBQWMsOEJBQThCLENBQUE7QUFDNUMsY0FBYyw2QkFBNkIsQ0FBQTtBQUMzQyxjQUFjLDRCQUE0QixDQUFBO0FBQzFDLGNBQWMsNEJBQTRCLENBQUE7QUFDMUMsY0FBYyw0QkFBNEIsQ0FBQTtBQUMxQyxjQUFjLGdDQUFnQyxDQUFBO0FBQzlDLGNBQWMsMkJBQTJCLENBQUE7QUFDekMsY0FBYyx1QkFBdUIsQ0FBQTtBQUNyQyxjQUFjLGlCQUFpQixDQUFBO0FBQy9CLGNBQWMscUJBQXFCLENBQUE7QUFDbkMsY0FBYywyQkFBMkIsQ0FBQTtBQUN6QyxjQUFjLGFBQWEsQ0FBQTtBQUMzQixjQUFjLDhCQUE4QixDQUFBO0FBQzVDLGNBQWMsbUNBQW1DLENBQUE7QUFDakQsY0FBYyxnQ0FBZ0MsQ0FBQTtBQUM5QyxjQUFjLHFCQUFxQixDQUFBO0FBQ25DLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxnQ0FBZ0MsQ0FBQTtBQUM5QyxjQUFjLCtCQUErQixDQUFBO0FBQzdDLGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsc0NBQXNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIHRvbGxlXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvY24nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvY29sb3InO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnV0dG9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnB1dC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2FyZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VsZWN0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZWxlY3QtaXRlbS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VsZWN0LWdyb3VwLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZWxlY3Qtc2VwYXJhdG9yLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zd2l0Y2guY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2JhZGdlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9za2VsZXRvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2hlY2tib3guY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhZy1pbnB1dC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9vbHRpcC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9hc3Quc2VydmljZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RvYXN0ZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RvbGxlLWNvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tdWx0aS1zZWxlY3QuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2FsZW5kYXIuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWFza2VkLWlucHV0LmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGUtcGlja2VyLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BhZ2luYXRpb24uY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0YS10YWJsZS5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi90b2xsZS1jZWxsLmRpcmVjdGl2ZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FjY29yZGlvbi1pdGVtLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FjY29yZGlvbi5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RhbC5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RhbC1yZWYnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RhbC5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kYWwtc3RhY2suc2VydmljZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGFsJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnV0dG9uLWdyb3VwLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JhbmdlLWNhbGVuZGFyLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RoZW1lLnNlcnZpY2UnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kcm9wZG93bi1pdGVtLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kcm9wZG93bi1sYWJlbC5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kcm9wZG93bi1tZW51LmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Ryb3Bkb3duLXNlcGFyYXRvci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZHJvcGRvd24tdHJpZ2dlci5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGV4dGFyZWEuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FsZXJ0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdmF0YXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F2YXRhci1mYWxsYmFjay5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnJlYWRjcnVtYi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnJlYWRjcnVtYi1saW5rLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9icmVhZGNydW1iLXNlcGFyYXRvci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnJlYWRjcnVtYi1pdGVtLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9lbXB0eS1zdGF0ZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvb3RwLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9vdHAtc2xvdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvb3RwLWdyb3VwLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wb3BvdmVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wb3BvdmVyLWNvbnRlbnQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JhZGlvLWdyb3VwLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yYWRpby1pdGVtLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZWdtZW50LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaWRlYmFyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jYXJvdXNlbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9sYWJlbC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VwYXJhdG9yLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcm9ncmVzcy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2xpZGVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90b2dnbGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RvZ2dsZS1ncm91cC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaG92ZXItY2FyZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFicy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29sbGFwc2libGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Njcm9sbC1hcmVhLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hbGVydC1kaWFsb2cuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FsZXJ0LWRpYWxvZy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FsZXJ0LWRpYWxvZy50eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hbGVydC1kaWFsb2ctZHluYW1pYy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hlZXQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoZWV0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hlZXQtcmVmJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoZWV0LnR5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoZWV0LXdyYXBwZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvdW50cnktc2VsZWN0b3IuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Bob25lLW51bWJlci1pbnB1dC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGhvbmUtbnVtYmVyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY291bnRyeS1jb2Rlcy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Jlc2l6YWJsZS1wYW5lbC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmVzaXphYmxlLXBhbmVsLWl0ZW0uY29tcG9uZW50JzsiXX0=