@weeehaoooz/talos-ui 0.1.1 → 0.1.2

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 (190) hide show
  1. package/README.md +2 -0
  2. package/fesm2022/{weeehaoooz-talos-ui-button-button-group.mjs → weeehaoooz-talos-ui-button.mjs} +91 -15
  3. package/fesm2022/weeehaoooz-talos-ui-button.mjs.map +1 -0
  4. package/fesm2022/weeehaoooz-talos-ui-data-display.mjs +3110 -0
  5. package/fesm2022/weeehaoooz-talos-ui-data-display.mjs.map +1 -0
  6. package/fesm2022/weeehaoooz-talos-ui-data-viz.mjs +2414 -0
  7. package/fesm2022/weeehaoooz-talos-ui-data-viz.mjs.map +1 -0
  8. package/fesm2022/weeehaoooz-talos-ui-dropdown.mjs +1039 -0
  9. package/fesm2022/weeehaoooz-talos-ui-dropdown.mjs.map +1 -0
  10. package/fesm2022/weeehaoooz-talos-ui-feedback.mjs +2885 -0
  11. package/fesm2022/weeehaoooz-talos-ui-feedback.mjs.map +1 -0
  12. package/fesm2022/weeehaoooz-talos-ui-form.mjs +10799 -0
  13. package/fesm2022/weeehaoooz-talos-ui-form.mjs.map +1 -0
  14. package/fesm2022/weeehaoooz-talos-ui-layout.mjs +1316 -7
  15. package/fesm2022/weeehaoooz-talos-ui-layout.mjs.map +1 -1
  16. package/fesm2022/weeehaoooz-talos-ui-nav.mjs +3 -3
  17. package/fesm2022/weeehaoooz-talos-ui-nav.mjs.map +1 -1
  18. package/fesm2022/weeehaoooz-talos-ui.mjs +21592 -16293
  19. package/fesm2022/weeehaoooz-talos-ui.mjs.map +1 -1
  20. package/package.json +20 -139
  21. package/styles/_breadcrumb.scss +16 -0
  22. package/styles/_button-group.scss +2 -1
  23. package/styles/_buttons.scss +51 -0
  24. package/styles/_dropdown.scss +438 -0
  25. package/styles/_form-controls.scss +13 -0
  26. package/styles/_progress-bar.scss +43 -0
  27. package/styles/_skeleton.scss +176 -0
  28. package/styles/_spinner.scss +58 -0
  29. package/styles/_variables.scss +33 -0
  30. package/styles/index.scss +6 -1
  31. package/types/weeehaoooz-talos-ui-button.d.ts +92 -0
  32. package/types/weeehaoooz-talos-ui-button.d.ts.map +1 -0
  33. package/types/weeehaoooz-talos-ui-data-display.d.ts +1018 -0
  34. package/types/weeehaoooz-talos-ui-data-display.d.ts.map +1 -0
  35. package/types/weeehaoooz-talos-ui-data-viz.d.ts +839 -0
  36. package/types/weeehaoooz-talos-ui-data-viz.d.ts.map +1 -0
  37. package/types/weeehaoooz-talos-ui-dropdown.d.ts +187 -0
  38. package/types/weeehaoooz-talos-ui-dropdown.d.ts.map +1 -0
  39. package/types/weeehaoooz-talos-ui-feedback.d.ts +1495 -0
  40. package/types/weeehaoooz-talos-ui-feedback.d.ts.map +1 -0
  41. package/types/weeehaoooz-talos-ui-form.d.ts +2639 -0
  42. package/types/weeehaoooz-talos-ui-form.d.ts.map +1 -0
  43. package/types/weeehaoooz-talos-ui-layout.d.ts +851 -3
  44. package/types/weeehaoooz-talos-ui-layout.d.ts.map +1 -1
  45. package/types/weeehaoooz-talos-ui-nav.d.ts +1 -1
  46. package/types/weeehaoooz-talos-ui.d.ts +7148 -4629
  47. package/types/weeehaoooz-talos-ui.d.ts.map +1 -1
  48. package/fesm2022/weeehaoooz-talos-ui-button-button-group.mjs.map +0 -1
  49. package/fesm2022/weeehaoooz-talos-ui-button-button.mjs +0 -94
  50. package/fesm2022/weeehaoooz-talos-ui-button-button.mjs.map +0 -1
  51. package/fesm2022/weeehaoooz-talos-ui-data-display-badge.mjs +0 -233
  52. package/fesm2022/weeehaoooz-talos-ui-data-display-badge.mjs.map +0 -1
  53. package/fesm2022/weeehaoooz-talos-ui-data-display-data-grid.mjs +0 -1627
  54. package/fesm2022/weeehaoooz-talos-ui-data-display-data-grid.mjs.map +0 -1
  55. package/fesm2022/weeehaoooz-talos-ui-data-display-status-tag.mjs +0 -361
  56. package/fesm2022/weeehaoooz-talos-ui-data-display-status-tag.mjs.map +0 -1
  57. package/fesm2022/weeehaoooz-talos-ui-data-display-timeline.mjs +0 -312
  58. package/fesm2022/weeehaoooz-talos-ui-data-display-timeline.mjs.map +0 -1
  59. package/fesm2022/weeehaoooz-talos-ui-data-display-trend-indicator.mjs +0 -235
  60. package/fesm2022/weeehaoooz-talos-ui-data-display-trend-indicator.mjs.map +0 -1
  61. package/fesm2022/weeehaoooz-talos-ui-data-viz-category-bar.mjs +0 -462
  62. package/fesm2022/weeehaoooz-talos-ui-data-viz-category-bar.mjs.map +0 -1
  63. package/fesm2022/weeehaoooz-talos-ui-data-viz-heatmap.mjs +0 -805
  64. package/fesm2022/weeehaoooz-talos-ui-data-viz-heatmap.mjs.map +0 -1
  65. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-donut.mjs +0 -267
  66. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-donut.mjs.map +0 -1
  67. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-gauge.mjs +0 -351
  68. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-gauge.mjs.map +0 -1
  69. package/fesm2022/weeehaoooz-talos-ui-data-viz-sparkline.mjs +0 -566
  70. package/fesm2022/weeehaoooz-talos-ui-data-viz-sparkline.mjs.map +0 -1
  71. package/fesm2022/weeehaoooz-talos-ui-feedback-alert.mjs +0 -534
  72. package/fesm2022/weeehaoooz-talos-ui-feedback-alert.mjs.map +0 -1
  73. package/fesm2022/weeehaoooz-talos-ui-feedback-dialog.mjs +0 -446
  74. package/fesm2022/weeehaoooz-talos-ui-feedback-dialog.mjs.map +0 -1
  75. package/fesm2022/weeehaoooz-talos-ui-feedback-snackbar.mjs +0 -376
  76. package/fesm2022/weeehaoooz-talos-ui-feedback-snackbar.mjs.map +0 -1
  77. package/fesm2022/weeehaoooz-talos-ui-feedback-tooltip.mjs +0 -147
  78. package/fesm2022/weeehaoooz-talos-ui-feedback-tooltip.mjs.map +0 -1
  79. package/fesm2022/weeehaoooz-talos-ui-form-affix.mjs +0 -242
  80. package/fesm2022/weeehaoooz-talos-ui-form-affix.mjs.map +0 -1
  81. package/fesm2022/weeehaoooz-talos-ui-form-autocomplete.mjs +0 -514
  82. package/fesm2022/weeehaoooz-talos-ui-form-autocomplete.mjs.map +0 -1
  83. package/fesm2022/weeehaoooz-talos-ui-form-checkbox.mjs +0 -548
  84. package/fesm2022/weeehaoooz-talos-ui-form-checkbox.mjs.map +0 -1
  85. package/fesm2022/weeehaoooz-talos-ui-form-chips.mjs +0 -692
  86. package/fesm2022/weeehaoooz-talos-ui-form-chips.mjs.map +0 -1
  87. package/fesm2022/weeehaoooz-talos-ui-form-color-picker.mjs +0 -761
  88. package/fesm2022/weeehaoooz-talos-ui-form-color-picker.mjs.map +0 -1
  89. package/fesm2022/weeehaoooz-talos-ui-form-date-picker.mjs +0 -896
  90. package/fesm2022/weeehaoooz-talos-ui-form-date-picker.mjs.map +0 -1
  91. package/fesm2022/weeehaoooz-talos-ui-form-date-range-picker.mjs +0 -872
  92. package/fesm2022/weeehaoooz-talos-ui-form-date-range-picker.mjs.map +0 -1
  93. package/fesm2022/weeehaoooz-talos-ui-form-date-time-picker.mjs +0 -119
  94. package/fesm2022/weeehaoooz-talos-ui-form-date-time-picker.mjs.map +0 -1
  95. package/fesm2022/weeehaoooz-talos-ui-form-date-time-range-picker.mjs +0 -135
  96. package/fesm2022/weeehaoooz-talos-ui-form-date-time-range-picker.mjs.map +0 -1
  97. package/fesm2022/weeehaoooz-talos-ui-form-drop-zone.mjs +0 -666
  98. package/fesm2022/weeehaoooz-talos-ui-form-drop-zone.mjs.map +0 -1
  99. package/fesm2022/weeehaoooz-talos-ui-form-form-field.mjs +0 -147
  100. package/fesm2022/weeehaoooz-talos-ui-form-form-field.mjs.map +0 -1
  101. package/fesm2022/weeehaoooz-talos-ui-form-input.mjs +0 -33
  102. package/fesm2022/weeehaoooz-talos-ui-form-input.mjs.map +0 -1
  103. package/fesm2022/weeehaoooz-talos-ui-form-otp.mjs +0 -455
  104. package/fesm2022/weeehaoooz-talos-ui-form-otp.mjs.map +0 -1
  105. package/fesm2022/weeehaoooz-talos-ui-form-password-input.mjs +0 -379
  106. package/fesm2022/weeehaoooz-talos-ui-form-password-input.mjs.map +0 -1
  107. package/fesm2022/weeehaoooz-talos-ui-form-radio.mjs +0 -297
  108. package/fesm2022/weeehaoooz-talos-ui-form-radio.mjs.map +0 -1
  109. package/fesm2022/weeehaoooz-talos-ui-form-range-input.mjs +0 -661
  110. package/fesm2022/weeehaoooz-talos-ui-form-range-input.mjs.map +0 -1
  111. package/fesm2022/weeehaoooz-talos-ui-form-rating.mjs +0 -346
  112. package/fesm2022/weeehaoooz-talos-ui-form-rating.mjs.map +0 -1
  113. package/fesm2022/weeehaoooz-talos-ui-form-select-input.mjs +0 -896
  114. package/fesm2022/weeehaoooz-talos-ui-form-select-input.mjs.map +0 -1
  115. package/fesm2022/weeehaoooz-talos-ui-form-slide-toggle.mjs +0 -252
  116. package/fesm2022/weeehaoooz-talos-ui-form-slide-toggle.mjs.map +0 -1
  117. package/fesm2022/weeehaoooz-talos-ui-form-transfer-list.mjs +0 -916
  118. package/fesm2022/weeehaoooz-talos-ui-form-transfer-list.mjs.map +0 -1
  119. package/types/weeehaoooz-talos-ui-button-button-group.d.ts +0 -62
  120. package/types/weeehaoooz-talos-ui-button-button-group.d.ts.map +0 -1
  121. package/types/weeehaoooz-talos-ui-button-button.d.ts +0 -38
  122. package/types/weeehaoooz-talos-ui-button-button.d.ts.map +0 -1
  123. package/types/weeehaoooz-talos-ui-data-display-badge.d.ts +0 -119
  124. package/types/weeehaoooz-talos-ui-data-display-badge.d.ts.map +0 -1
  125. package/types/weeehaoooz-talos-ui-data-display-data-grid.d.ts +0 -272
  126. package/types/weeehaoooz-talos-ui-data-display-data-grid.d.ts.map +0 -1
  127. package/types/weeehaoooz-talos-ui-data-display-status-tag.d.ts +0 -135
  128. package/types/weeehaoooz-talos-ui-data-display-status-tag.d.ts.map +0 -1
  129. package/types/weeehaoooz-talos-ui-data-display-timeline.d.ts +0 -144
  130. package/types/weeehaoooz-talos-ui-data-display-timeline.d.ts.map +0 -1
  131. package/types/weeehaoooz-talos-ui-data-display-trend-indicator.d.ts +0 -83
  132. package/types/weeehaoooz-talos-ui-data-display-trend-indicator.d.ts.map +0 -1
  133. package/types/weeehaoooz-talos-ui-data-viz-category-bar.d.ts +0 -255
  134. package/types/weeehaoooz-talos-ui-data-viz-category-bar.d.ts.map +0 -1
  135. package/types/weeehaoooz-talos-ui-data-viz-heatmap.d.ts +0 -204
  136. package/types/weeehaoooz-talos-ui-data-viz-heatmap.d.ts.map +0 -1
  137. package/types/weeehaoooz-talos-ui-data-viz-mini-donut.d.ts +0 -101
  138. package/types/weeehaoooz-talos-ui-data-viz-mini-donut.d.ts.map +0 -1
  139. package/types/weeehaoooz-talos-ui-data-viz-mini-gauge.d.ts +0 -138
  140. package/types/weeehaoooz-talos-ui-data-viz-mini-gauge.d.ts.map +0 -1
  141. package/types/weeehaoooz-talos-ui-data-viz-sparkline.d.ts +0 -161
  142. package/types/weeehaoooz-talos-ui-data-viz-sparkline.d.ts.map +0 -1
  143. package/types/weeehaoooz-talos-ui-feedback-alert.d.ts +0 -212
  144. package/types/weeehaoooz-talos-ui-feedback-alert.d.ts.map +0 -1
  145. package/types/weeehaoooz-talos-ui-feedback-dialog.d.ts +0 -259
  146. package/types/weeehaoooz-talos-ui-feedback-dialog.d.ts.map +0 -1
  147. package/types/weeehaoooz-talos-ui-feedback-snackbar.d.ts +0 -147
  148. package/types/weeehaoooz-talos-ui-feedback-snackbar.d.ts.map +0 -1
  149. package/types/weeehaoooz-talos-ui-feedback-tooltip.d.ts +0 -32
  150. package/types/weeehaoooz-talos-ui-feedback-tooltip.d.ts.map +0 -1
  151. package/types/weeehaoooz-talos-ui-form-affix.d.ts +0 -88
  152. package/types/weeehaoooz-talos-ui-form-affix.d.ts.map +0 -1
  153. package/types/weeehaoooz-talos-ui-form-autocomplete.d.ts +0 -113
  154. package/types/weeehaoooz-talos-ui-form-autocomplete.d.ts.map +0 -1
  155. package/types/weeehaoooz-talos-ui-form-checkbox.d.ts +0 -165
  156. package/types/weeehaoooz-talos-ui-form-checkbox.d.ts.map +0 -1
  157. package/types/weeehaoooz-talos-ui-form-chips.d.ts +0 -152
  158. package/types/weeehaoooz-talos-ui-form-chips.d.ts.map +0 -1
  159. package/types/weeehaoooz-talos-ui-form-color-picker.d.ts +0 -144
  160. package/types/weeehaoooz-talos-ui-form-color-picker.d.ts.map +0 -1
  161. package/types/weeehaoooz-talos-ui-form-date-picker.d.ts +0 -138
  162. package/types/weeehaoooz-talos-ui-form-date-picker.d.ts.map +0 -1
  163. package/types/weeehaoooz-talos-ui-form-date-range-picker.d.ts +0 -148
  164. package/types/weeehaoooz-talos-ui-form-date-range-picker.d.ts.map +0 -1
  165. package/types/weeehaoooz-talos-ui-form-date-time-picker.d.ts +0 -44
  166. package/types/weeehaoooz-talos-ui-form-date-time-picker.d.ts.map +0 -1
  167. package/types/weeehaoooz-talos-ui-form-date-time-range-picker.d.ts +0 -48
  168. package/types/weeehaoooz-talos-ui-form-date-time-range-picker.d.ts.map +0 -1
  169. package/types/weeehaoooz-talos-ui-form-drop-zone.d.ts +0 -227
  170. package/types/weeehaoooz-talos-ui-form-drop-zone.d.ts.map +0 -1
  171. package/types/weeehaoooz-talos-ui-form-form-field.d.ts +0 -42
  172. package/types/weeehaoooz-talos-ui-form-form-field.d.ts.map +0 -1
  173. package/types/weeehaoooz-talos-ui-form-input.d.ts +0 -15
  174. package/types/weeehaoooz-talos-ui-form-input.d.ts.map +0 -1
  175. package/types/weeehaoooz-talos-ui-form-otp.d.ts +0 -111
  176. package/types/weeehaoooz-talos-ui-form-otp.d.ts.map +0 -1
  177. package/types/weeehaoooz-talos-ui-form-password-input.d.ts +0 -145
  178. package/types/weeehaoooz-talos-ui-form-password-input.d.ts.map +0 -1
  179. package/types/weeehaoooz-talos-ui-form-radio.d.ts +0 -84
  180. package/types/weeehaoooz-talos-ui-form-radio.d.ts.map +0 -1
  181. package/types/weeehaoooz-talos-ui-form-range-input.d.ts +0 -181
  182. package/types/weeehaoooz-talos-ui-form-range-input.d.ts.map +0 -1
  183. package/types/weeehaoooz-talos-ui-form-rating.d.ts +0 -110
  184. package/types/weeehaoooz-talos-ui-form-rating.d.ts.map +0 -1
  185. package/types/weeehaoooz-talos-ui-form-select-input.d.ts +0 -195
  186. package/types/weeehaoooz-talos-ui-form-select-input.d.ts.map +0 -1
  187. package/types/weeehaoooz-talos-ui-form-slide-toggle.d.ts +0 -79
  188. package/types/weeehaoooz-talos-ui-form-slide-toggle.d.ts.map +0 -1
  189. package/types/weeehaoooz-talos-ui-form-transfer-list.d.ts +0 -192
  190. package/types/weeehaoooz-talos-ui-form-transfer-list.d.ts.map +0 -1
@@ -1,761 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { inject, ElementRef, input, output, computed, signal, effect, forwardRef, ViewChild, Component, NgModule } from '@angular/core';
3
- import * as i2 from '@angular/forms';
4
- import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
5
- import { NgTemplateOutlet } from '@angular/common';
6
- import * as i1 from '@angular/cdk/overlay';
7
- import { OverlayModule, CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';
8
- import { hsvToRgb, rgbToHsl, rgbToHex, isLightColor, formatColor, parseColor, rgbToHsv, clamp, round, hexToRgb, hslToRgb } from '@weeehaoooz/talos-ui/core';
9
-
10
- const DEFAULT_COLOR_PRESETS = [
11
- {
12
- label: 'Talos Brand',
13
- colors: [
14
- '#3b82f6', // Blue
15
- '#6366f1', // Indigo
16
- '#8b5cf6', // Violet
17
- '#ec4899', // Pink
18
- '#f43f5e', // Rose
19
- '#ef4444', // Red
20
- '#f97316', // Orange
21
- '#eab308', // Yellow
22
- '#10b981', // Emerald
23
- '#06b6d4', // Cyan
24
- '#64748b', // Slate
25
- '#0f172a' // Dark
26
- ]
27
- },
28
- {
29
- label: 'Pastel & Muted',
30
- colors: [
31
- '#93c5fd', // Light Blue
32
- '#a5b4fc', // Light Indigo
33
- '#c4b5fd', // Light Violet
34
- '#f9a8d4', // Light Pink
35
- '#fda4af', // Light Rose
36
- '#fca5a5', // Light Red
37
- '#fdba74', // Light Orange
38
- '#fde047', // Light Yellow
39
- '#6ee7b7', // Light Emerald
40
- '#67e8f9', // Light Cyan
41
- '#cbd5e1', // Light Slate
42
- '#ffffff' // Pure White
43
- ]
44
- }
45
- ];
46
-
47
- let uniqueColorPickerIdCounter = 0;
48
- class TalosColorPickerComponent {
49
- elementRef = inject((ElementRef));
50
- // Signal Inputs
51
- value = input('#3b82f6', /* @ts-ignore */
52
- ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
53
- format = input('hex', /* @ts-ignore */
54
- ...(ngDevMode ? [{ debugName: "format" }] : /* istanbul ignore next */ []));
55
- showAlpha = input(true, /* @ts-ignore */
56
- ...(ngDevMode ? [{ debugName: "showAlpha" }] : /* istanbul ignore next */ []));
57
- presets = input(DEFAULT_COLOR_PRESETS, /* @ts-ignore */
58
- ...(ngDevMode ? [{ debugName: "presets" }] : /* istanbul ignore next */ []));
59
- showPresets = input(true, /* @ts-ignore */
60
- ...(ngDevMode ? [{ debugName: "showPresets" }] : /* istanbul ignore next */ []));
61
- showRecent = input(true, /* @ts-ignore */
62
- ...(ngDevMode ? [{ debugName: "showRecent" }] : /* istanbul ignore next */ []));
63
- showEyeDropper = input(true, /* @ts-ignore */
64
- ...(ngDevMode ? [{ debugName: "showEyeDropper" }] : /* istanbul ignore next */ []));
65
- showInputs = input(true, /* @ts-ignore */
66
- ...(ngDevMode ? [{ debugName: "showInputs" }] : /* istanbul ignore next */ []));
67
- showFormatSwitcher = input(true, /* @ts-ignore */
68
- ...(ngDevMode ? [{ debugName: "showFormatSwitcher" }] : /* istanbul ignore next */ []));
69
- inline = input(false, /* @ts-ignore */
70
- ...(ngDevMode ? [{ debugName: "inline" }] : /* istanbul ignore next */ []));
71
- disabled = input(false, /* @ts-ignore */
72
- ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
73
- readonly = input(false, /* @ts-ignore */
74
- ...(ngDevMode ? [{ debugName: "readonly" }] : /* istanbul ignore next */ []));
75
- label = input('', /* @ts-ignore */
76
- ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
77
- placeholder = input('Select color', /* @ts-ignore */
78
- ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
79
- size = input('md', /* @ts-ignore */
80
- ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
81
- clearable = input(false, /* @ts-ignore */
82
- ...(ngDevMode ? [{ debugName: "clearable" }] : /* istanbul ignore next */ []));
83
- floatingLabel = input(false, /* @ts-ignore */
84
- ...(ngDevMode ? [{ debugName: "floatingLabel" }] : /* istanbul ignore next */ []));
85
- id = input('', /* @ts-ignore */
86
- ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
87
- // Signal Outputs
88
- colorChange = output();
89
- colorDetailsChange = output();
90
- formatChange = output();
91
- opened = output();
92
- closed = output();
93
- cleared = output();
94
- // View Children
95
- satValCanvas;
96
- hueTrack;
97
- alphaTrack;
98
- triggerBtn;
99
- triggerInput;
100
- // Component IDs
101
- autoId = `talos-color-picker-${uniqueColorPickerIdCounter++}`;
102
- componentId = computed(() => this.id() || this.autoId, /* @ts-ignore */
103
- ...(ngDevMode ? [{ debugName: "componentId" }] : /* istanbul ignore next */ []));
104
- inputId = computed(() => `${this.componentId()}-input`, /* @ts-ignore */
105
- ...(ngDevMode ? [{ debugName: "inputId" }] : /* istanbul ignore next */ []));
106
- // ControlValueAccessor internal state
107
- formControlDisabled = signal(false, /* @ts-ignore */
108
- ...(ngDevMode ? [{ debugName: "formControlDisabled" }] : /* istanbul ignore next */ []));
109
- effectiveDisabled = computed(() => this.disabled() || this.formControlDisabled(), /* @ts-ignore */
110
- ...(ngDevMode ? [{ debugName: "effectiveDisabled" }] : /* istanbul ignore next */ []));
111
- // Reactive State
112
- isOpen = signal(false, /* @ts-ignore */
113
- ...(ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []));
114
- isInputFocused = signal(false, /* @ts-ignore */
115
- ...(ngDevMode ? [{ debugName: "isInputFocused" }] : /* istanbul ignore next */ []));
116
- manualInputValue = signal('', /* @ts-ignore */
117
- ...(ngDevMode ? [{ debugName: "manualInputValue" }] : /* istanbul ignore next */ []));
118
- currentHsva = signal({ h: 217, s: 76, v: 96, a: 1 }, /* @ts-ignore */
119
- ...(ngDevMode ? [{ debugName: "currentHsva" }] : /* istanbul ignore next */ []));
120
- currentFormat = signal('hex', /* @ts-ignore */
121
- ...(ngDevMode ? [{ debugName: "currentFormat" }] : /* istanbul ignore next */ []));
122
- recentColors = signal([], /* @ts-ignore */
123
- ...(ngDevMode ? [{ debugName: "recentColors" }] : /* istanbul ignore next */ []));
124
- copied = signal(false, /* @ts-ignore */
125
- ...(ngDevMode ? [{ debugName: "copied" }] : /* istanbul ignore next */ []));
126
- // Input editing temporary state
127
- inputHex = signal('#3b82f6', /* @ts-ignore */
128
- ...(ngDevMode ? [{ debugName: "inputHex" }] : /* istanbul ignore next */ []));
129
- inputR = signal(59, /* @ts-ignore */
130
- ...(ngDevMode ? [{ debugName: "inputR" }] : /* istanbul ignore next */ []));
131
- inputG = signal(130, /* @ts-ignore */
132
- ...(ngDevMode ? [{ debugName: "inputG" }] : /* istanbul ignore next */ []));
133
- inputB = signal(246, /* @ts-ignore */
134
- ...(ngDevMode ? [{ debugName: "inputB" }] : /* istanbul ignore next */ []));
135
- inputA = signal(100, /* @ts-ignore */
136
- ...(ngDevMode ? [{ debugName: "inputA" }] : /* istanbul ignore next */ []));
137
- inputH = signal(217, /* @ts-ignore */
138
- ...(ngDevMode ? [{ debugName: "inputH" }] : /* istanbul ignore next */ []));
139
- inputS = signal(91, /* @ts-ignore */
140
- ...(ngDevMode ? [{ debugName: "inputS" }] : /* istanbul ignore next */ []));
141
- inputL = signal(60, /* @ts-ignore */
142
- ...(ngDevMode ? [{ debugName: "inputL" }] : /* istanbul ignore next */ []));
143
- // Dragging interaction state
144
- isDraggingSatVal = false;
145
- isDraggingHue = false;
146
- isDraggingAlpha = false;
147
- // Overlay positions
148
- overlayPositions = [
149
- {
150
- originX: 'start',
151
- originY: 'bottom',
152
- overlayX: 'start',
153
- overlayY: 'top',
154
- offsetY: 6
155
- },
156
- {
157
- originX: 'start',
158
- originY: 'top',
159
- overlayX: 'start',
160
- overlayY: 'bottom',
161
- offsetY: -6
162
- },
163
- {
164
- originX: 'end',
165
- originY: 'bottom',
166
- overlayX: 'end',
167
- overlayY: 'top',
168
- offsetY: 6
169
- },
170
- {
171
- originX: 'end',
172
- originY: 'top',
173
- overlayX: 'end',
174
- overlayY: 'bottom',
175
- offsetY: -6
176
- }
177
- ];
178
- // Derived Color representations
179
- currentRgba = computed(() => hsvToRgb(this.currentHsva()), /* @ts-ignore */
180
- ...(ngDevMode ? [{ debugName: "currentRgba" }] : /* istanbul ignore next */ []));
181
- currentHsla = computed(() => rgbToHsl(this.currentRgba()), /* @ts-ignore */
182
- ...(ngDevMode ? [{ debugName: "currentHsla" }] : /* istanbul ignore next */ []));
183
- currentHex = computed(() => rgbToHex(this.currentRgba(), this.showAlpha()), /* @ts-ignore */
184
- ...(ngDevMode ? [{ debugName: "currentHex" }] : /* istanbul ignore next */ []));
185
- pureHueHex = computed(() => rgbToHex(hsvToRgb({ h: this.currentHsva().h, s: 100, v: 100, a: 1 }), false), /* @ts-ignore */
186
- ...(ngDevMode ? [{ debugName: "pureHueHex" }] : /* istanbul ignore next */ []));
187
- isLight = computed(() => isLightColor(this.currentRgba()), /* @ts-ignore */
188
- ...(ngDevMode ? [{ debugName: "isLight" }] : /* istanbul ignore next */ []));
189
- isFloated = computed(() => !!this.formattedColor() || this.isOpen() || this.isInputFocused(), /* @ts-ignore */
190
- ...(ngDevMode ? [{ debugName: "isFloated" }] : /* istanbul ignore next */ []));
191
- formattedColor = computed(() => {
192
- return formatColor(this.currentRgba(), this.currentFormat(), this.showAlpha());
193
- }, /* @ts-ignore */
194
- ...(ngDevMode ? [{ debugName: "formattedColor" }] : /* istanbul ignore next */ []));
195
- rgbaString = computed(() => {
196
- const rgba = this.currentRgba();
197
- return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;
198
- }, /* @ts-ignore */
199
- ...(ngDevMode ? [{ debugName: "rgbaString" }] : /* istanbul ignore next */ []));
200
- hasEyeDropper = computed(() => {
201
- return typeof window !== 'undefined' && 'EyeDropper' in window;
202
- }, /* @ts-ignore */
203
- ...(ngDevMode ? [{ debugName: "hasEyeDropper" }] : /* istanbul ignore next */ []));
204
- // Normalized preset palettes
205
- normalizedPresets = computed(() => {
206
- const raw = this.presets();
207
- if (!raw || raw.length === 0)
208
- return [];
209
- const groups = [];
210
- let standardGroup = [];
211
- for (const item of raw) {
212
- if (typeof item === 'string') {
213
- standardGroup.push(item);
214
- }
215
- else if (item && typeof item === 'object' && Array.isArray(item.colors)) {
216
- if (standardGroup.length > 0) {
217
- groups.push({ label: 'Palette', colors: standardGroup });
218
- standardGroup = [];
219
- }
220
- groups.push(item);
221
- }
222
- }
223
- if (standardGroup.length > 0) {
224
- groups.push({ label: 'Palette', colors: standardGroup });
225
- }
226
- return groups;
227
- }, /* @ts-ignore */
228
- ...(ngDevMode ? [{ debugName: "normalizedPresets" }] : /* istanbul ignore next */ []));
229
- // ControlValueAccessor Callbacks
230
- onChange = () => { };
231
- onTouched = () => { };
232
- constructor() {
233
- // Sync initial format
234
- effect(() => {
235
- this.currentFormat.set(this.format());
236
- });
237
- // Sync input value if provided
238
- effect(() => {
239
- const val = this.value();
240
- if (val) {
241
- this.setColorFromExternal(val, false);
242
- }
243
- });
244
- // Keep editing input fields in sync with current color
245
- effect(() => {
246
- const rgba = this.currentRgba();
247
- const hsla = this.currentHsla();
248
- const hex = this.currentHex();
249
- this.inputHex.set(hex);
250
- this.inputR.set(rgba.r);
251
- this.inputG.set(rgba.g);
252
- this.inputB.set(rgba.b);
253
- this.inputA.set(Math.round(rgba.a * 100));
254
- this.inputH.set(Math.round(hsla.h));
255
- this.inputS.set(Math.round(hsla.s));
256
- this.inputL.set(Math.round(hsla.l));
257
- });
258
- }
259
- // --- ControlValueAccessor Methods ---
260
- writeValue(value) {
261
- if (value) {
262
- this.setColorFromExternal(value, false);
263
- }
264
- }
265
- registerOnChange(fn) {
266
- this.onChange = fn;
267
- }
268
- registerOnTouched(fn) {
269
- this.onTouched = fn;
270
- }
271
- setDisabledState(isDisabled) {
272
- this.formControlDisabled.set(isDisabled);
273
- }
274
- // --- External and Internal Color Updates ---
275
- setColorFromExternal(colorStr, emit = true) {
276
- const parsed = parseColor(colorStr);
277
- if (!parsed)
278
- return;
279
- const hsva = rgbToHsv(parsed);
280
- this.currentHsva.set(hsva);
281
- if (emit) {
282
- this.notifyColorChange();
283
- }
284
- }
285
- updateHsva(newHsva, emit = true) {
286
- this.currentHsva.update(current => {
287
- const updated = {
288
- h: newHsva.h !== undefined ? (newHsva.h % 360 + 360) % 360 : current.h,
289
- s: newHsva.s !== undefined ? clamp(newHsva.s, 0, 100) : current.s,
290
- v: newHsva.v !== undefined ? clamp(newHsva.v, 0, 100) : current.v,
291
- a: newHsva.a !== undefined ? clamp(newHsva.a, 0, 1) : current.a
292
- };
293
- return updated;
294
- });
295
- if (emit) {
296
- this.notifyColorChange();
297
- }
298
- }
299
- notifyColorChange() {
300
- const formatted = this.formattedColor();
301
- const hex = this.currentHex();
302
- const rgba = this.currentRgba();
303
- const hsla = this.currentHsla();
304
- const hsva = this.currentHsva();
305
- this.onChange(formatted);
306
- this.colorChange.emit(formatted);
307
- this.colorDetailsChange.emit({
308
- value: formatted,
309
- hex,
310
- rgba,
311
- hsla,
312
- hsva
313
- });
314
- }
315
- // --- Dropdown Management ---
316
- toggleDropdown(event) {
317
- if (event)
318
- event.stopPropagation();
319
- if (this.effectiveDisabled() || this.readonly() || this.inline())
320
- return;
321
- if (this.isOpen()) {
322
- this.close();
323
- }
324
- else {
325
- this.open();
326
- }
327
- }
328
- open() {
329
- if (this.effectiveDisabled() || this.readonly() || this.isOpen() || this.inline())
330
- return;
331
- this.isOpen.set(true);
332
- this.opened.emit();
333
- }
334
- close() {
335
- if (!this.isOpen() || this.inline())
336
- return;
337
- this.isOpen.set(false);
338
- this.onTouched();
339
- this.recordRecentColor(this.formattedColor());
340
- this.closed.emit();
341
- }
342
- onDocumentClick(event) {
343
- if (this.inline() || !this.isOpen())
344
- return;
345
- const target = event.target;
346
- if (!this.elementRef.nativeElement.contains(target)) {
347
- this.close();
348
- }
349
- }
350
- clear(event) {
351
- if (event)
352
- event.stopPropagation();
353
- if (this.effectiveDisabled() || this.readonly())
354
- return;
355
- this.manualInputValue.set('');
356
- this.currentHsva.set({ h: 217, s: 76, v: 96, a: 1 });
357
- this.onChange('');
358
- this.cleared.emit();
359
- this.colorChange.emit('');
360
- }
361
- // --- Trigger Input Handlers ---
362
- onTriggerFocus() {
363
- if (this.effectiveDisabled() || this.readonly())
364
- return;
365
- this.isInputFocused.set(true);
366
- this.manualInputValue.set(this.formattedColor());
367
- }
368
- onTriggerBlur(event) {
369
- this.isInputFocused.set(false);
370
- const target = event.target;
371
- const val = target.value.trim();
372
- if (val) {
373
- const parsed = parseColor(val);
374
- if (parsed) {
375
- const hsva = rgbToHsv(parsed);
376
- this.currentHsva.set(hsva);
377
- this.notifyColorChange();
378
- }
379
- else {
380
- target.value = this.formattedColor();
381
- }
382
- }
383
- else if (this.clearable()) {
384
- this.clear();
385
- }
386
- else {
387
- target.value = this.formattedColor();
388
- }
389
- this.onTouched();
390
- }
391
- onTriggerInput(event) {
392
- const target = event.target;
393
- const val = target.value;
394
- this.manualInputValue.set(val);
395
- const trimmed = val.trim();
396
- if (trimmed) {
397
- const parsed = parseColor(trimmed);
398
- if (parsed) {
399
- const hsva = rgbToHsv(parsed);
400
- this.currentHsva.set(hsva);
401
- this.notifyColorChange();
402
- }
403
- }
404
- }
405
- onTriggerEnter(event) {
406
- const target = event.target;
407
- target.blur();
408
- }
409
- // --- Saturation & Value 2D Canvas Handlers ---
410
- onSatValMouseDown(event) {
411
- if (this.effectiveDisabled() || this.readonly())
412
- return;
413
- event.preventDefault();
414
- this.isDraggingSatVal = true;
415
- this.updateSatValFromCoord(event.clientX, event.clientY);
416
- const onMouseMove = (moveEvent) => {
417
- if (this.isDraggingSatVal) {
418
- this.updateSatValFromCoord(moveEvent.clientX, moveEvent.clientY);
419
- }
420
- };
421
- const onMouseUp = () => {
422
- this.isDraggingSatVal = false;
423
- window.removeEventListener('mousemove', onMouseMove);
424
- window.removeEventListener('mouseup', onMouseUp);
425
- };
426
- window.addEventListener('mousemove', onMouseMove);
427
- window.addEventListener('mouseup', onMouseUp);
428
- }
429
- onSatValTouchStart(event) {
430
- if (this.effectiveDisabled() || this.readonly() || !event.touches[0])
431
- return;
432
- this.isDraggingSatVal = true;
433
- this.updateSatValFromCoord(event.touches[0].clientX, event.touches[0].clientY);
434
- const onTouchMove = (moveEvent) => {
435
- if (this.isDraggingSatVal && moveEvent.touches[0]) {
436
- this.updateSatValFromCoord(moveEvent.touches[0].clientX, moveEvent.touches[0].clientY);
437
- }
438
- };
439
- const onTouchEnd = () => {
440
- this.isDraggingSatVal = false;
441
- window.removeEventListener('touchmove', onTouchMove);
442
- window.removeEventListener('touchend', onTouchEnd);
443
- };
444
- window.addEventListener('touchmove', onTouchMove, { passive: true });
445
- window.addEventListener('touchend', onTouchEnd);
446
- }
447
- updateSatValFromCoord(clientX, clientY) {
448
- const el = this.satValCanvas?.nativeElement;
449
- if (!el)
450
- return;
451
- const rect = el.getBoundingClientRect();
452
- const x = clamp(clientX - rect.left, 0, rect.width);
453
- const y = clamp(clientY - rect.top, 0, rect.height);
454
- const s = round((x / rect.width) * 100, 1);
455
- const v = round((1 - y / rect.height) * 100, 1);
456
- this.updateHsva({ s, v });
457
- }
458
- onSatValKeyDown(event) {
459
- if (this.effectiveDisabled() || this.readonly())
460
- return;
461
- const step = event.shiftKey ? 10 : 1;
462
- let s = this.currentHsva().s;
463
- let v = this.currentHsva().v;
464
- let handled = false;
465
- switch (event.key) {
466
- case 'ArrowLeft':
467
- s = clamp(s - step, 0, 100);
468
- handled = true;
469
- break;
470
- case 'ArrowRight':
471
- s = clamp(s + step, 0, 100);
472
- handled = true;
473
- break;
474
- case 'ArrowUp':
475
- v = clamp(v + step, 0, 100);
476
- handled = true;
477
- break;
478
- case 'ArrowDown':
479
- v = clamp(v - step, 0, 100);
480
- handled = true;
481
- break;
482
- }
483
- if (handled) {
484
- event.preventDefault();
485
- this.updateHsva({ s, v });
486
- }
487
- }
488
- // --- Hue Slider Handlers ---
489
- onHueMouseDown(event) {
490
- if (this.effectiveDisabled() || this.readonly())
491
- return;
492
- event.preventDefault();
493
- this.isDraggingHue = true;
494
- this.updateHueFromCoord(event.clientX);
495
- const onMouseMove = (moveEvent) => {
496
- if (this.isDraggingHue) {
497
- this.updateHueFromCoord(moveEvent.clientX);
498
- }
499
- };
500
- const onMouseUp = () => {
501
- this.isDraggingHue = false;
502
- window.removeEventListener('mousemove', onMouseMove);
503
- window.removeEventListener('mouseup', onMouseUp);
504
- };
505
- window.addEventListener('mousemove', onMouseMove);
506
- window.addEventListener('mouseup', onMouseUp);
507
- }
508
- onHueTouchStart(event) {
509
- if (this.effectiveDisabled() || this.readonly() || !event.touches[0])
510
- return;
511
- this.isDraggingHue = true;
512
- this.updateHueFromCoord(event.touches[0].clientX);
513
- const onTouchMove = (moveEvent) => {
514
- if (this.isDraggingHue && moveEvent.touches[0]) {
515
- this.updateHueFromCoord(moveEvent.touches[0].clientX);
516
- }
517
- };
518
- const onTouchEnd = () => {
519
- this.isDraggingHue = false;
520
- window.removeEventListener('touchmove', onTouchMove);
521
- window.removeEventListener('touchend', onTouchEnd);
522
- };
523
- window.addEventListener('touchmove', onTouchMove, { passive: true });
524
- window.addEventListener('touchend', onTouchEnd);
525
- }
526
- updateHueFromCoord(clientX) {
527
- const el = this.hueTrack?.nativeElement;
528
- if (!el)
529
- return;
530
- const rect = el.getBoundingClientRect();
531
- const x = clamp(clientX - rect.left, 0, rect.width);
532
- const h = round((x / rect.width) * 360, 1);
533
- this.updateHsva({ h });
534
- }
535
- onHueKeyDown(event) {
536
- if (this.effectiveDisabled() || this.readonly())
537
- return;
538
- const step = event.shiftKey ? 10 : 1;
539
- let h = this.currentHsva().h;
540
- let handled = false;
541
- if (event.key === 'ArrowLeft' || event.key === 'ArrowDown') {
542
- h = (h - step % 360 + 360) % 360;
543
- handled = true;
544
- }
545
- else if (event.key === 'ArrowRight' || event.key === 'ArrowUp') {
546
- h = (h + step) % 360;
547
- handled = true;
548
- }
549
- if (handled) {
550
- event.preventDefault();
551
- this.updateHsva({ h });
552
- }
553
- }
554
- // --- Alpha Slider Handlers ---
555
- onAlphaMouseDown(event) {
556
- if (this.effectiveDisabled() || this.readonly())
557
- return;
558
- event.preventDefault();
559
- this.isDraggingAlpha = true;
560
- this.updateAlphaFromCoord(event.clientX);
561
- const onMouseMove = (moveEvent) => {
562
- if (this.isDraggingAlpha) {
563
- this.updateAlphaFromCoord(moveEvent.clientX);
564
- }
565
- };
566
- const onMouseUp = () => {
567
- this.isDraggingAlpha = false;
568
- window.removeEventListener('mousemove', onMouseMove);
569
- window.removeEventListener('mouseup', onMouseUp);
570
- };
571
- window.addEventListener('mousemove', onMouseMove);
572
- window.addEventListener('mouseup', onMouseUp);
573
- }
574
- onAlphaTouchStart(event) {
575
- if (this.effectiveDisabled() || this.readonly() || !event.touches[0])
576
- return;
577
- this.isDraggingAlpha = true;
578
- this.updateAlphaFromCoord(event.touches[0].clientX);
579
- const onTouchMove = (moveEvent) => {
580
- if (this.isDraggingAlpha && moveEvent.touches[0]) {
581
- this.updateAlphaFromCoord(moveEvent.touches[0].clientX);
582
- }
583
- };
584
- const onTouchEnd = () => {
585
- this.isDraggingAlpha = false;
586
- window.removeEventListener('touchmove', onTouchMove);
587
- window.removeEventListener('touchend', onTouchEnd);
588
- };
589
- window.addEventListener('touchmove', onTouchMove, { passive: true });
590
- window.addEventListener('touchend', onTouchEnd);
591
- }
592
- updateAlphaFromCoord(clientX) {
593
- const el = this.alphaTrack?.nativeElement;
594
- if (!el)
595
- return;
596
- const rect = el.getBoundingClientRect();
597
- const x = clamp(clientX - rect.left, 0, rect.width);
598
- const a = round(x / rect.width, 2);
599
- this.updateHsva({ a });
600
- }
601
- onAlphaKeyDown(event) {
602
- if (this.effectiveDisabled() || this.readonly())
603
- return;
604
- const step = event.shiftKey ? 0.1 : 0.01;
605
- let a = this.currentHsva().a;
606
- let handled = false;
607
- if (event.key === 'ArrowLeft' || event.key === 'ArrowDown') {
608
- a = clamp(a - step, 0, 1);
609
- handled = true;
610
- }
611
- else if (event.key === 'ArrowRight' || event.key === 'ArrowUp') {
612
- a = clamp(a + step, 0, 1);
613
- handled = true;
614
- }
615
- if (handled) {
616
- event.preventDefault();
617
- this.updateHsva({ a });
618
- }
619
- }
620
- // --- EyeDropper Integration ---
621
- async pickWithEyeDropper() {
622
- if (this.effectiveDisabled() || this.readonly() || !this.hasEyeDropper())
623
- return;
624
- try {
625
- // @ts-expect-error EyeDropper is a modern browser API
626
- const eyeDropper = new window.EyeDropper();
627
- const result = await eyeDropper.open();
628
- if (result && result.sRGBHex) {
629
- this.setColorFromExternal(result.sRGBHex);
630
- }
631
- }
632
- catch {
633
- // EyeDropper cancelled or dismissed
634
- }
635
- }
636
- // --- Copy to Clipboard ---
637
- async copyColor() {
638
- if (typeof navigator === 'undefined' || !navigator.clipboard)
639
- return;
640
- try {
641
- await navigator.clipboard.writeText(this.formattedColor());
642
- this.copied.set(true);
643
- setTimeout(() => {
644
- this.copied.set(false);
645
- }, 1800);
646
- }
647
- catch {
648
- // Copy failed
649
- }
650
- }
651
- // --- Format Switcher ---
652
- switchFormat(format) {
653
- this.currentFormat.set(format);
654
- this.formatChange.emit(format);
655
- this.notifyColorChange();
656
- }
657
- // --- Direct Inputs ---
658
- onHexInputChange(val) {
659
- const trimmed = val.trim();
660
- if (hexToRgb(trimmed)) {
661
- this.setColorFromExternal(trimmed);
662
- }
663
- }
664
- onRgbaInputChange() {
665
- const r = clamp(this.inputR() || 0, 0, 255);
666
- const g = clamp(this.inputG() || 0, 0, 255);
667
- const b = clamp(this.inputB() || 0, 0, 255);
668
- const a = clamp((this.inputA() ?? 100) / 100, 0, 1);
669
- const hsva = rgbToHsv({ r, g, b, a });
670
- this.currentHsva.set(hsva);
671
- this.notifyColorChange();
672
- }
673
- onHslaInputChange() {
674
- const h = (this.inputH() || 0) % 360;
675
- const s = clamp(this.inputS() || 0, 0, 100);
676
- const l = clamp(this.inputL() || 0, 0, 100);
677
- const a = clamp((this.inputA() ?? 100) / 100, 0, 1);
678
- const rgba = hslToRgb({ h, s, l, a });
679
- const hsva = rgbToHsv(rgba);
680
- this.currentHsva.set(hsva);
681
- this.notifyColorChange();
682
- }
683
- // --- Swatch Preset Click & Recent Storage ---
684
- selectPreset(color) {
685
- if (this.effectiveDisabled() || this.readonly())
686
- return;
687
- this.setColorFromExternal(color);
688
- }
689
- recordRecentColor(color) {
690
- if (!this.showRecent() || !color)
691
- return;
692
- const currentList = this.recentColors();
693
- const filtered = currentList.filter(c => c.toLowerCase() !== color.toLowerCase());
694
- this.recentColors.set([color, ...filtered].slice(0, 8));
695
- }
696
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosColorPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
697
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: TalosColorPickerComponent, isStandalone: true, selector: "talos-color-picker", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, format: { classPropertyName: "format", publicName: "format", isSignal: true, isRequired: false, transformFunction: null }, showAlpha: { classPropertyName: "showAlpha", publicName: "showAlpha", isSignal: true, isRequired: false, transformFunction: null }, presets: { classPropertyName: "presets", publicName: "presets", isSignal: true, isRequired: false, transformFunction: null }, showPresets: { classPropertyName: "showPresets", publicName: "showPresets", isSignal: true, isRequired: false, transformFunction: null }, showRecent: { classPropertyName: "showRecent", publicName: "showRecent", isSignal: true, isRequired: false, transformFunction: null }, showEyeDropper: { classPropertyName: "showEyeDropper", publicName: "showEyeDropper", isSignal: true, isRequired: false, transformFunction: null }, showInputs: { classPropertyName: "showInputs", publicName: "showInputs", isSignal: true, isRequired: false, transformFunction: null }, showFormatSwitcher: { classPropertyName: "showFormatSwitcher", publicName: "showFormatSwitcher", isSignal: true, isRequired: false, transformFunction: null }, inline: { classPropertyName: "inline", publicName: "inline", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, floatingLabel: { classPropertyName: "floatingLabel", publicName: "floatingLabel", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { colorChange: "colorChange", colorDetailsChange: "colorDetailsChange", formatChange: "formatChange", opened: "opened", closed: "closed", cleared: "cleared" }, host: { properties: { "class.is-open": "isOpen()", "class.is-inline": "inline()", "class.is-disabled": "effectiveDisabled()", "class.is-readonly": "readonly()", "class.has-label": "!!label()", "class.is-floating": "floatingLabel()", "class.is-floated": "isFloated()", "class.color-picker-sm": "size() === \"sm\"", "class.color-picker-md": "size() === \"md\"", "class.color-picker-lg": "size() === \"lg\"" }, classAttribute: "talos-color-picker-host" }, providers: [
698
- {
699
- provide: NG_VALUE_ACCESSOR,
700
- useExisting: forwardRef(() => TalosColorPickerComponent),
701
- multi: true
702
- }
703
- ], viewQueries: [{ propertyName: "satValCanvas", first: true, predicate: ["satValCanvas"], descendants: true }, { propertyName: "hueTrack", first: true, predicate: ["hueTrack"], descendants: true }, { propertyName: "alphaTrack", first: true, predicate: ["alphaTrack"], descendants: true }, { propertyName: "triggerBtn", first: true, predicate: ["triggerBtn"], descendants: true }, { propertyName: "triggerInput", first: true, predicate: ["triggerInput"], descendants: true }], ngImport: i0, template: "@if (!inline()) {\n<!-- Standard Trigger Button / Popover Mode -->\n<div class=\"talos-color-picker-wrapper\" [class.is-floating]=\"floatingLabel()\">\n @if (label() && !floatingLabel()) {\n <label [for]=\"inputId()\" class=\"talos-field-label\">{{ label() }}</label>\n }\n\n <div #triggerBtn cdkOverlayOrigin #origin=\"cdkOverlayOrigin\" class=\"talos-color-picker-trigger\"\n [class.is-focused]=\"isOpen()\" [class.is-disabled]=\"effectiveDisabled()\"\n [attr.tabindex]=\"effectiveDisabled() ? -1 : 0\" [attr.role]=\"'button'\" [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-expanded]=\"isOpen()\" [attr.aria-label]=\"label() || placeholder()\" (click)=\"toggleDropdown()\"\n (keydown.enter)=\"toggleDropdown()\" (keydown.space)=\"toggleDropdown()\">\n\n <!-- Swatch Pill Preview -->\n <div class=\"swatch-preview-box\" role=\"button\" tabindex=\"-1\" aria-label=\"Open color palette\" (click)=\"toggleDropdown($event)\">\n <div class=\"swatch-checkerboard\"></div>\n <div class=\"swatch-fill\" [style.background-color]=\"rgbaString()\"></div>\n </div>\n\n <!-- Color Value Input Field -->\n <input\n #triggerInput\n [id]=\"inputId()\"\n type=\"text\"\n class=\"color-picker-input\"\n [value]=\"isInputFocused() ? manualInputValue() : formattedColor()\"\n [placeholder]=\"floatingLabel() && !isFloated() ? '' : placeholder()\"\n [disabled]=\"effectiveDisabled()\"\n [readonly]=\"readonly()\"\n (input)=\"onTriggerInput($event)\"\n (focus)=\"onTriggerFocus()\"\n (blur)=\"onTriggerBlur($event)\"\n (keydown.enter)=\"onTriggerEnter($event)\"\n [attr.aria-label]=\"label() || placeholder()\"\n />\n\n <!-- Clear Button -->\n @if (clearable() && formattedColor() && !effectiveDisabled() && !readonly()) {\n <button type=\"button\" class=\"clear-button\" aria-label=\"Clear color\" (click)=\"clear($event)\">\n <svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n }\n\n <!-- Dropdown Chevron Indicator -->\n <button type=\"button\" class=\"dropdown-chevron-icon\" [class.is-rotated]=\"isOpen()\"\n aria-label=\"Toggle color palette\" tabindex=\"-1\" (click)=\"toggleDropdown($event)\">\n <svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n </button>\n\n @if (label() && floatingLabel()) {\n <label [for]=\"inputId()\" class=\"talos-floating-label\" [class.is-floated]=\"isFloated()\">{{ label() }}</label>\n }\n </div>\n\n <!-- CDK Connected Popover Overlay -->\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"origin\" [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\" (overlayOutsideClick)=\"close()\" (detach)=\"close()\">\n <div class=\"talos-color-picker-panel talos-popover-panel\" (click)=\"$event.stopPropagation()\">\n <ng-container *ngTemplateOutlet=\"pickerContentTpl\"></ng-container>\n </div>\n </ng-template>\n</div>\n} @else {\n<!-- Inline / Embedded Mode -->\n<div class=\"talos-color-picker-panel talos-inline-panel\">\n @if (label()) {\n <div class=\"panel-header-title\">{{ label() }}</div>\n }\n <ng-container *ngTemplateOutlet=\"pickerContentTpl\"></ng-container>\n</div>\n}\n\n<!-- Main Color Picker Content Template -->\n<ng-template #pickerContentTpl>\n <div class=\"picker-inner-container\">\n\n <!-- 1. Saturation & Value 2D Canvas -->\n <div #satValCanvas class=\"sat-val-canvas\" [style.background-color]=\"pureHueHex()\" tabindex=\"0\" role=\"slider\"\n aria-label=\"Color saturation and brightness\"\n [attr.aria-valuetext]=\"'Saturation ' + currentHsva().s + '%, Brightness ' + currentHsva().v + '%'\"\n (mousedown)=\"onSatValMouseDown($event)\" (touchstart)=\"onSatValTouchStart($event)\"\n (keydown)=\"onSatValKeyDown($event)\">\n <div class=\"sat-gradient-white\"></div>\n <div class=\"val-gradient-black\"></div>\n\n <!-- Handle Pin -->\n <div class=\"sat-val-handle\" [class.is-light-handle]=\"!isLight()\" [style.left.%]=\"currentHsva().s\"\n [style.top.%]=\"100 - currentHsva().v\" [style.background-color]=\"rgbaString()\">\n </div>\n </div>\n\n <!-- 2. Sliders & Action Bar -->\n <div class=\"sliders-action-bar\">\n <!-- Sliders Column -->\n <div class=\"sliders-column\">\n <!-- Hue Rainbow Slider Track -->\n <div #hueTrack class=\"hue-slider-track\" tabindex=\"0\" role=\"slider\" aria-label=\"Hue spectrum\" aria-valuemin=\"0\"\n aria-valuemax=\"360\" [attr.aria-valuenow]=\"currentHsva().h\" (mousedown)=\"onHueMouseDown($event)\"\n (touchstart)=\"onHueTouchStart($event)\" (keydown)=\"onHueKeyDown($event)\">\n <div class=\"slider-thumb\" [style.left.%]=\"(currentHsva().h / 360) * 100\"\n [style.background-color]=\"pureHueHex()\">\n </div>\n </div>\n\n <!-- Alpha Opacity Slider Track -->\n @if (showAlpha()) {\n <div #alphaTrack class=\"alpha-slider-track\" tabindex=\"0\" role=\"slider\" aria-label=\"Color opacity\"\n aria-valuemin=\"0\" aria-valuemax=\"1\" [attr.aria-valuenow]=\"currentHsva().a\"\n (mousedown)=\"onAlphaMouseDown($event)\" (touchstart)=\"onAlphaTouchStart($event)\"\n (keydown)=\"onAlphaKeyDown($event)\">\n <div class=\"alpha-checkerboard-bg\"></div>\n <div class=\"alpha-gradient-overlay\"\n [style.background]=\"'linear-gradient(to right, transparent, ' + pureHueHex() + ')'\">\n </div>\n <div class=\"slider-thumb\" [style.left.%]=\"currentHsva().a * 100\" [style.background-color]=\"rgbaString()\">\n </div>\n </div>\n }\n </div>\n\n <!-- Action & Preview Column -->\n <div class=\"action-preview-column\">\n <!-- Color Preview Circle -->\n <div class=\"swatch-circle-preview\" [title]=\"formattedColor()\">\n <div class=\"swatch-checkerboard\"></div>\n <div class=\"swatch-fill\" [style.background-color]=\"rgbaString()\"></div>\n </div>\n\n <!-- Quick Action Buttons -->\n <div class=\"quick-actions-row\">\n @if (showEyeDropper() && hasEyeDropper()) {\n <button type=\"button\" class=\"icon-action-button\" title=\"Pick color from screen\"\n aria-label=\"Pick color from screen\" (click)=\"pickWithEyeDropper()\">\n <svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path\n d=\"m12 9-8.414 8.414A2 2 0 0 0 3 18.828v1.344a2 2 0 0 1-.586 1.414A2 2 0 0 1 3.828 21h1.344a2 2 0 0 0 1.414-.586L15 12\" />\n <path d=\"m18 9 .4.4a1 1 0 1 1-3 3l-3.8-3.8a1 1 0 1 1 3-3l.4.4 3.4-3.4a1 1 0 1 1 3 3z\" />\n <path d=\"m2 22 .414-.414\" />\n </svg>\n </button>\n }\n\n <button type=\"button\" class=\"icon-action-button\" [class.is-copied]=\"copied()\"\n [title]=\"copied() ? 'Copied to clipboard!' : 'Copy color string'\" aria-label=\"Copy color string\"\n (click)=\"copyColor()\">\n @if (copied()) {\n <svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"copy-success-icon\">\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"></rect>\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"></path>\n </svg>\n }\n </button>\n </div>\n </div>\n </div>\n\n <!-- 3. Format Switcher & Channel Inputs -->\n @if (showInputs()) {\n <div class=\"inputs-section\">\n @if (showFormatSwitcher()) {\n <div class=\"format-tabs-bar\">\n <button type=\"button\" class=\"format-tab-btn\" [class.is-active]=\"currentFormat() === 'hex'\"\n (click)=\"switchFormat('hex')\">\n HEX\n </button>\n <button type=\"button\" class=\"format-tab-btn\" [class.is-active]=\"currentFormat() === 'rgb'\"\n (click)=\"switchFormat('rgb')\">\n RGB\n </button>\n <button type=\"button\" class=\"format-tab-btn\" [class.is-active]=\"currentFormat() === 'hsl'\"\n (click)=\"switchFormat('hsl')\">\n HSL\n </button>\n </div>\n }\n\n <!-- Channel Inputs Grid -->\n <div class=\"channel-inputs-grid\">\n @if (currentFormat() === 'hex') {\n <!-- HEX Input -->\n <div class=\"input-field-group hex-field\">\n <input type=\"text\" class=\"channel-input hex-input\" [ngModel]=\"inputHex()\"\n (ngModelChange)=\"onHexInputChange($event)\" placeholder=\"#3B82F6\" aria-label=\"Hex color value\" />\n <span class=\"field-caption\">HEX</span>\n </div>\n } @else if (currentFormat() === 'rgb') {\n <!-- RGB Inputs -->\n <div class=\"input-field-group\">\n <input type=\"number\" min=\"0\" max=\"255\" class=\"channel-input\" [(ngModel)]=\"inputR\"\n (ngModelChange)=\"onRgbaInputChange()\" aria-label=\"Red\" />\n <span class=\"field-caption\">R</span>\n </div>\n <div class=\"input-field-group\">\n <input type=\"number\" min=\"0\" max=\"255\" class=\"channel-input\" [(ngModel)]=\"inputG\"\n (ngModelChange)=\"onRgbaInputChange()\" aria-label=\"Green\" />\n <span class=\"field-caption\">G</span>\n </div>\n <div class=\"input-field-group\">\n <input type=\"number\" min=\"0\" max=\"255\" class=\"channel-input\" [(ngModel)]=\"inputB\"\n (ngModelChange)=\"onRgbaInputChange()\" aria-label=\"Blue\" />\n <span class=\"field-caption\">B</span>\n </div>\n } @else if (currentFormat() === 'hsl') {\n <!-- HSL Inputs -->\n <div class=\"input-field-group\">\n <input type=\"number\" min=\"0\" max=\"360\" class=\"channel-input\" [(ngModel)]=\"inputH\"\n (ngModelChange)=\"onHslaInputChange()\" aria-label=\"Hue\" />\n <span class=\"field-caption\">H</span>\n </div>\n <div class=\"input-field-group\">\n <input type=\"number\" min=\"0\" max=\"100\" class=\"channel-input\" [(ngModel)]=\"inputS\"\n (ngModelChange)=\"onHslaInputChange()\" aria-label=\"Saturation\" />\n <span class=\"field-caption\">S%</span>\n </div>\n <div class=\"input-field-group\">\n <input type=\"number\" min=\"0\" max=\"100\" class=\"channel-input\" [(ngModel)]=\"inputL\"\n (ngModelChange)=\"onHslaInputChange()\" aria-label=\"Lightness\" />\n <span class=\"field-caption\">L%</span>\n </div>\n }\n\n <!-- Alpha Input (Common for all non-hex or with alpha) -->\n @if (showAlpha()) {\n <div class=\"input-field-group alpha-field\">\n <input type=\"number\" min=\"0\" max=\"100\" class=\"channel-input\" [(ngModel)]=\"inputA\"\n (ngModelChange)=\"currentFormat() === 'hsl' ? onHslaInputChange() : onRgbaInputChange()\"\n aria-label=\"Opacity Percentage\" />\n <span class=\"field-caption\">A%</span>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- 4. Preset Color Swatches -->\n @if (showPresets() && normalizedPresets().length > 0) {\n <div class=\"presets-section\">\n @for (group of normalizedPresets(); track group.label) {\n @if (normalizedPresets().length > 1) {\n <div class=\"preset-group-title\">{{ group.label }}</div>\n }\n <div class=\"swatches-grid\">\n @for (color of group.colors; track color) {\n <button type=\"button\" class=\"swatch-btn\"\n [class.is-selected]=\"currentHex().toLowerCase() === color.toLowerCase()\" [style.background-color]=\"color\"\n [title]=\"color\" [attr.aria-label]=\"'Select preset color ' + color\" (click)=\"selectPreset(color)\">\n @if (currentHex().toLowerCase() === color.toLowerCase()) {\n <svg viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" stroke=\"currentColor\" stroke-width=\"3\" fill=\"none\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"swatch-check-icon\">\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n }\n </button>\n }\n </div>\n }\n </div>\n }\n\n <!-- 5. Recent Colors -->\n @if (showRecent() && recentColors().length > 0) {\n <div class=\"recent-section\">\n <div class=\"recent-group-title\">Recent Colors</div>\n <div class=\"swatches-grid recent-grid\">\n @for (color of recentColors(); track color) {\n <button type=\"button\" class=\"swatch-btn\"\n [class.is-selected]=\"currentHex().toLowerCase() === color.toLowerCase()\" [style.background-color]=\"color\"\n [title]=\"color\" [attr.aria-label]=\"'Select recent color ' + color\" (click)=\"selectPreset(color)\">\n </button>\n }\n </div>\n </div>\n }\n\n </div>\n</ng-template>", styles: [":host{display:inline-block;position:relative;width:100%;max-width:100%;font-family:inherit;box-sizing:border-box}:host *,:host *:before,:host *:after{box-sizing:border-box}:host.color-picker-sm{--talos-control-height: var(--talos-height-sm, 2rem);--tcp-width: 250px;--tcp-canvas-height: 130px;--tcp-font-size: var(--talos-font-size-xs, .75rem)}:host.color-picker-md{--talos-control-height: var(--talos-height-md, 2.25rem);--tcp-width: 280px;--tcp-canvas-height: 150px;--tcp-font-size: var(--talos-font-size-sm, .8125rem)}:host.color-picker-lg{--talos-control-height: var(--talos-height-lg, 2.625rem);--tcp-width: 310px;--tcp-canvas-height: 170px;--tcp-font-size: var(--talos-font-size-md, .875rem)}.talos-field-label{display:inline-flex;align-items:center;font-size:var(--talos-control-font-size, .8125rem);font-weight:var(--talos-font-weight-semibold, 600);color:var(--talos-text-primary, #0f172a);margin-bottom:.375rem;cursor:pointer;-webkit-user-select:none;user-select:none;transition:color var(--talos-transition, .18s ease)}.talos-field-label .required-star{color:var(--talos-error-color, #ef4444);margin-left:.25rem}.talos-color-picker-wrapper{position:relative;width:100%;display:flex;flex-direction:column}.talos-color-picker-trigger{position:relative;display:flex;align-items:center;gap:.625rem;width:100%;height:var(--talos-control-height, 2.25rem);min-height:var(--talos-control-height, 2.25rem);padding:0 var(--talos-control-padding-x, .625rem);background-color:var(--talos-input-bg, var(--talos-bg-surface, #ffffff));border:1px solid var(--talos-input-border, var(--talos-border-default, #cbd5e1));border-radius:var(--talos-border-radius, var(--talos-radius-md, .375rem));color:var(--talos-input-color, var(--talos-text-primary, #0f172a));font-size:var(--talos-control-font-size, .8125rem);cursor:text;outline:none;-webkit-user-select:none;user-select:none;transition:border-color var(--talos-transition, .18s ease),box-shadow var(--talos-transition, .18s ease),background-color var(--talos-transition, .18s ease)}.talos-color-picker-trigger:hover:not(.is-disabled){border-color:var(--talos-input-border-hover, var(--talos-border-hover, #94a3b8))}.talos-color-picker-trigger:focus-within,.talos-color-picker-trigger.is-focused,.talos-color-picker-trigger:focus-visible{border-color:var(--talos-input-border-focus, var(--talos-primary, #2563eb));box-shadow:var(--talos-focus-ring, 0 0 0 3px rgba(37, 99, 235, .18))}.talos-color-picker-trigger.is-disabled{background-color:var(--talos-input-disabled-bg, var(--talos-bg-subtle, #f1f5f9));border-color:var(--talos-input-disabled-border, var(--talos-border-subtle, #e2e8f0));color:var(--talos-input-disabled-color, var(--talos-text-muted, #94a3b8));cursor:not-allowed;opacity:.65}.swatch-preview-box{position:relative;width:1.1rem;height:1.1rem;min-width:1.1rem;border-radius:var(--talos-radius-xs, .25rem);overflow:hidden;border:1px solid var(--talos-border-default, rgba(0, 0, 0, .15));box-shadow:inset 0 0 2px #0000001a;cursor:pointer;flex-shrink:0;transition:transform .12s ease}.swatch-preview-box:hover{transform:scale(1.08)}.swatch-checkerboard,.alpha-checkerboard-bg{position:absolute;inset:0;background-image:linear-gradient(45deg,var(--talos-border-default, #cbd5e1) 25%,transparent 25%),linear-gradient(-45deg,var(--talos-border-default, #cbd5e1) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--talos-border-default, #cbd5e1) 75%),linear-gradient(-45deg,transparent 75%,var(--talos-border-default, #cbd5e1) 75%);background-size:8px 8px;background-position:0 0,0 4px,4px -4px,-4px 0px;background-color:var(--talos-bg-surface, #ffffff)}.swatch-fill{position:absolute;inset:0;transition:background-color .1s ease}.color-picker-input{flex:1;min-width:0;width:100%;height:100%;background:transparent;border:none;outline:none;padding:0;margin:0;font-family:inherit;font-size:var(--talos-control-font-size, .8125rem);font-weight:var(--talos-font-weight-medium, 500);font-variant-numeric:tabular-nums;letter-spacing:.02em;color:var(--talos-input-color, var(--talos-text-primary, #0f172a));line-height:normal}.color-picker-input::placeholder{color:var(--talos-input-placeholder-color, var(--talos-text-muted, #94a3b8));opacity:1;font-weight:var(--talos-font-weight-normal, 400)}.color-picker-input:disabled{cursor:not-allowed}.clear-button{display:inline-flex;align-items:center;justify-content:center;background:transparent;border:none;padding:.25rem;color:var(--talos-text-muted, #94a3b8);border-radius:var(--talos-radius-full, 9999px);cursor:pointer;transition:color var(--talos-transition, .18s ease),background-color var(--talos-transition, .18s ease)}.clear-button:hover{color:var(--talos-error-color, #ef4444);background-color:#ef444426}.dropdown-chevron-icon{display:inline-flex;align-items:center;justify-content:center;background:transparent;border:none;padding:0;color:var(--talos-text-muted, #94a3b8);cursor:pointer;transition:transform var(--talos-transition, .18s cubic-bezier(.4, 0, .2, 1)),color var(--talos-transition, .18s ease)}.dropdown-chevron-icon.is-rotated{transform:rotate(180deg);color:var(--talos-primary, #2563eb)}.dropdown-chevron-icon:hover{color:var(--talos-text-primary, #0f172a)}.talos-floating-label{position:absolute;left:calc(var(--talos-control-padding-x, .625rem) + 1.375rem + .625rem);top:50%;transform:translateY(-50%);font-size:var(--talos-control-font-size, .8125rem);font-weight:var(--talos-font-weight-medium, 500);color:var(--talos-input-placeholder-color, var(--talos-text-muted, #94a3b8));pointer-events:none;-webkit-user-select:none;user-select:none;background-color:var(--talos-input-bg, var(--talos-bg-surface, #ffffff));padding:0 .25rem;border-radius:var(--talos-radius-xs, .25rem);line-height:1;z-index:2;transition:transform var(--talos-transition, .18s cubic-bezier(.4, 0, .2, 1)),font-size var(--talos-transition, .18s cubic-bezier(.4, 0, .2, 1)),color var(--talos-transition, .18s cubic-bezier(.4, 0, .2, 1)),top var(--talos-transition, .18s cubic-bezier(.4, 0, .2, 1)),left var(--talos-transition, .18s cubic-bezier(.4, 0, .2, 1))}.talos-floating-label.is-floated{top:0;left:var(--talos-control-padding-x, .625rem);transform:translateY(-50%) scale(.85);font-size:.75rem;font-weight:var(--talos-font-weight-semibold, 600);color:var(--talos-text-muted, #64748b)}:host(.is-open) .talos-floating-label.is-floated,:host(.is-floated) .talos-floating-label.is-floated,.talos-color-picker-trigger:focus-within .talos-floating-label.is-floated,.talos-color-picker-trigger.is-focused .talos-floating-label.is-floated{color:var(--talos-primary, #2563eb)}.talos-color-picker-panel{width:var(--tcp-width, 280px);max-width:calc(100vw - 2rem);background-color:var(--talos-dropdown-bg, var(--talos-bg-surface, #ffffff));border:1px solid var(--talos-dropdown-border, var(--talos-border-default, #cbd5e1));border-radius:var(--talos-border-radius, var(--talos-radius-lg, .5rem));overflow:hidden;box-sizing:border-box}.talos-color-picker-panel.talos-popover-panel{box-shadow:var(--talos-dropdown-shadow, var(--talos-shadow-dropdown, 0 16px 32px -4px rgba(0, 0, 0, .25)));-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);animation:tcp-slide-in var(--talos-transition, .18s cubic-bezier(.16, 1, .3, 1));z-index:1050}.talos-color-picker-panel.talos-inline-panel{box-shadow:var(--talos-shadow-xs, 0 1px 2px rgba(0, 0, 0, .05))}.talos-color-picker-panel .panel-header-title{padding:.75rem .875rem 0;font-size:var(--talos-control-font-size, .8125rem);font-weight:var(--talos-font-weight-semibold, 600);color:var(--talos-text-primary, #0f172a)}.picker-inner-container{display:flex;flex-direction:column;padding:.75rem;gap:.75rem}.sat-val-canvas{position:relative;width:100%;height:var(--tcp-canvas-height, 150px);border-radius:calc(var(--talos-border-radius, var(--talos-radius-md, .375rem)) - 1px);overflow:hidden;cursor:crosshair;outline:none;-webkit-user-select:none;user-select:none;touch-action:none;box-shadow:inset 0 0 1px #0000004d}.sat-val-canvas:focus-visible{box-shadow:0 0 0 2px var(--talos-primary, #2563eb),inset 0 0 1px #0000004d}.sat-gradient-white{position:absolute;inset:0;background:linear-gradient(to right,#ffffff,transparent)}.val-gradient-black{position:absolute;inset:0;background:linear-gradient(to top,#000000,transparent)}.sat-val-handle{position:absolute;width:14px;height:14px;border-radius:var(--talos-radius-full, 9999px);border:2px solid #ffffff;box-shadow:0 0 2px #0009,inset 0 0 1px #0006;transform:translate(-50%,-50%);pointer-events:none;transition:transform .05s ease}.sat-val-handle.is-light-handle{border-color:#0f172a}.sliders-action-bar{display:flex;align-items:center;gap:.625rem}.sliders-column{flex:1;display:flex;flex-direction:column;gap:.5rem}.hue-slider-track,.alpha-slider-track{position:relative;width:100%;height:.75rem;border-radius:var(--talos-radius-full, 9999px);cursor:pointer;outline:none;-webkit-user-select:none;user-select:none;touch-action:none}.hue-slider-track:focus-visible,.alpha-slider-track:focus-visible{box-shadow:0 0 0 2px var(--talos-primary, #2563eb)}.hue-slider-track{background:linear-gradient(to right,red,#ff0 17%,#0f0 33%,#0ff,#00f 67%,#f0f 83%,red)}.alpha-slider-track{overflow:hidden}.alpha-slider-track .alpha-gradient-overlay{position:absolute;inset:0;border-radius:var(--talos-radius-full, 9999px)}.slider-thumb{position:absolute;top:50%;width:14px;height:14px;border-radius:var(--talos-radius-full, 9999px);border:2px solid #ffffff;box-shadow:0 1px 3px #0006;transform:translate(-50%,-50%);pointer-events:none}.action-preview-column{display:flex;flex-direction:column;align-items:center;gap:.375rem}.swatch-circle-preview{position:relative;width:1.75rem;height:1.75rem;border-radius:var(--talos-radius-full, 9999px);overflow:hidden;border:1px solid var(--talos-border-default, rgba(0, 0, 0, .15));box-shadow:var(--talos-shadow-xs, 0 1px 2px rgba(0, 0, 0, .05))}.quick-actions-row{display:flex;align-items:center;gap:.25rem}.icon-action-button{display:inline-flex;align-items:center;justify-content:center;width:1.625rem;height:1.625rem;padding:0;background-color:transparent;border:1px solid transparent;border-radius:var(--talos-radius-sm, .25rem);color:var(--talos-text-muted, #94a3b8);cursor:pointer;transition:all var(--talos-transition, .18s ease)}.icon-action-button:hover{color:var(--talos-text-primary, #0f172a);background-color:var(--talos-bg-subtle, #f1f5f9);border-color:var(--talos-border-subtle, #e2e8f0)}.icon-action-button.is-copied{color:var(--talos-success, #16a34a)}.icon-action-button .copy-success-icon{animation:tcp-scale-up .2s ease}.inputs-section{display:flex;flex-direction:column;gap:.5rem}.format-tabs-bar{display:flex;align-items:center;background-color:var(--talos-bg-subtle, #f1f5f9);padding:2px;border-radius:var(--talos-radius-md, .375rem);gap:2px;border:1px solid var(--talos-border-subtle, rgba(0, 0, 0, .04))}.format-tab-btn{flex:1;padding:.25rem 0;font-size:var(--talos-font-size-2xs, .6875rem);font-weight:var(--talos-font-weight-semibold, 600);letter-spacing:.03em;background:transparent;border:none;border-radius:var(--talos-radius-xs, .25rem);color:var(--talos-text-muted, #94a3b8);cursor:pointer;transition:all var(--talos-transition, .18s ease)}.format-tab-btn.is-active{background-color:var(--talos-bg-surface, #ffffff);color:var(--talos-text-primary, #0f172a);box-shadow:0 1px 2px #0000001a}.format-tab-btn:hover:not(.is-active){color:var(--talos-text-primary, #0f172a)}.channel-inputs-grid{display:flex;align-items:center;gap:.375rem}.input-field-group{flex:1;display:flex;flex-direction:column;align-items:center;gap:.125rem}.input-field-group.hex-field{flex:2.5}.input-field-group .channel-input{width:100%;height:1.75rem;padding:0 .25rem;font-size:var(--talos-font-size-xs, .75rem);font-weight:var(--talos-font-weight-medium, 500);font-family:inherit;text-align:center;color:var(--talos-text-primary, #0f172a);background-color:var(--talos-bg-subtle, #f1f5f9);border:1px solid var(--talos-border-default, #cbd5e1);border-radius:var(--talos-radius-xs, .25rem);outline:none;transition:border-color var(--talos-transition, .18s ease),box-shadow var(--talos-transition, .18s ease),background-color var(--talos-transition, .18s ease)}.input-field-group .channel-input::-webkit-inner-spin-button,.input-field-group .channel-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.input-field-group .channel-input{-moz-appearance:textfield}.input-field-group .channel-input:focus{border-color:var(--talos-primary, #2563eb);box-shadow:var(--talos-focus-ring, 0 0 0 3px rgba(37, 99, 235, .18));background-color:var(--talos-bg-surface, #ffffff)}.input-field-group .field-caption{font-size:.625rem;font-weight:var(--talos-font-weight-bold, 700);color:var(--talos-text-muted, #94a3b8);text-transform:uppercase}.presets-section,.recent-section{display:flex;flex-direction:column;gap:.375rem;border-top:1px solid var(--talos-border-subtle, #e2e8f0);padding-top:.5rem}.preset-group-title,.recent-group-title{font-size:var(--talos-font-size-2xs, .6875rem);font-weight:var(--talos-font-weight-semibold, 600);color:var(--talos-text-muted, #64748b)}.swatches-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:.375rem}.swatch-btn{position:relative;aspect-ratio:1;border:1px solid var(--talos-border-default, rgba(0, 0, 0, .12));border-radius:var(--talos-radius-xs, .25rem);cursor:pointer;outline:none;padding:0;display:flex;align-items:center;justify-content:center;transition:transform .12s ease,box-shadow .12s ease}.swatch-btn:hover{transform:scale(1.12);z-index:2;box-shadow:0 2px 6px #00000040}.swatch-btn:focus-visible{box-shadow:0 0 0 2px var(--talos-primary, #2563eb)}.swatch-btn.is-selected{box-shadow:0 0 0 2px var(--talos-bg-surface, #ffffff),0 0 0 4px var(--talos-primary, #3b82f6);z-index:1}.swatch-btn .swatch-check-icon{color:#fff;filter:drop-shadow(0 0 1.5px rgba(0,0,0,.8))}@keyframes tcp-slide-in{0%{opacity:0;transform:translateY(-4px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes tcp-scale-up{0%{transform:scale(.7)}50%{transform:scale(1.2)}to{transform:scale(1)}}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number]:not([ngNoCva])[formControlName],input[type=number]:not([ngNoCva])[formControl],input[type=number]:not([ngNoCva])[ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i2.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
704
- }
705
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosColorPickerComponent, decorators: [{
706
- type: Component,
707
- args: [{ selector: 'talos-color-picker', imports: [OverlayModule, CdkConnectedOverlay, CdkOverlayOrigin, FormsModule, NgTemplateOutlet], providers: [
708
- {
709
- provide: NG_VALUE_ACCESSOR,
710
- useExisting: forwardRef(() => TalosColorPickerComponent),
711
- multi: true
712
- }
713
- ], host: {
714
- 'class': 'talos-color-picker-host',
715
- '[class.is-open]': 'isOpen()',
716
- '[class.is-inline]': 'inline()',
717
- '[class.is-disabled]': 'effectiveDisabled()',
718
- '[class.is-readonly]': 'readonly()',
719
- '[class.has-label]': '!!label()',
720
- '[class.is-floating]': 'floatingLabel()',
721
- '[class.is-floated]': 'isFloated()',
722
- '[class.color-picker-sm]': 'size() === "sm"',
723
- '[class.color-picker-md]': 'size() === "md"',
724
- '[class.color-picker-lg]': 'size() === "lg"'
725
- }, template: "@if (!inline()) {\n<!-- Standard Trigger Button / Popover Mode -->\n<div class=\"talos-color-picker-wrapper\" [class.is-floating]=\"floatingLabel()\">\n @if (label() && !floatingLabel()) {\n <label [for]=\"inputId()\" class=\"talos-field-label\">{{ label() }}</label>\n }\n\n <div #triggerBtn cdkOverlayOrigin #origin=\"cdkOverlayOrigin\" class=\"talos-color-picker-trigger\"\n [class.is-focused]=\"isOpen()\" [class.is-disabled]=\"effectiveDisabled()\"\n [attr.tabindex]=\"effectiveDisabled() ? -1 : 0\" [attr.role]=\"'button'\" [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-expanded]=\"isOpen()\" [attr.aria-label]=\"label() || placeholder()\" (click)=\"toggleDropdown()\"\n (keydown.enter)=\"toggleDropdown()\" (keydown.space)=\"toggleDropdown()\">\n\n <!-- Swatch Pill Preview -->\n <div class=\"swatch-preview-box\" role=\"button\" tabindex=\"-1\" aria-label=\"Open color palette\" (click)=\"toggleDropdown($event)\">\n <div class=\"swatch-checkerboard\"></div>\n <div class=\"swatch-fill\" [style.background-color]=\"rgbaString()\"></div>\n </div>\n\n <!-- Color Value Input Field -->\n <input\n #triggerInput\n [id]=\"inputId()\"\n type=\"text\"\n class=\"color-picker-input\"\n [value]=\"isInputFocused() ? manualInputValue() : formattedColor()\"\n [placeholder]=\"floatingLabel() && !isFloated() ? '' : placeholder()\"\n [disabled]=\"effectiveDisabled()\"\n [readonly]=\"readonly()\"\n (input)=\"onTriggerInput($event)\"\n (focus)=\"onTriggerFocus()\"\n (blur)=\"onTriggerBlur($event)\"\n (keydown.enter)=\"onTriggerEnter($event)\"\n [attr.aria-label]=\"label() || placeholder()\"\n />\n\n <!-- Clear Button -->\n @if (clearable() && formattedColor() && !effectiveDisabled() && !readonly()) {\n <button type=\"button\" class=\"clear-button\" aria-label=\"Clear color\" (click)=\"clear($event)\">\n <svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n }\n\n <!-- Dropdown Chevron Indicator -->\n <button type=\"button\" class=\"dropdown-chevron-icon\" [class.is-rotated]=\"isOpen()\"\n aria-label=\"Toggle color palette\" tabindex=\"-1\" (click)=\"toggleDropdown($event)\">\n <svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n </button>\n\n @if (label() && floatingLabel()) {\n <label [for]=\"inputId()\" class=\"talos-floating-label\" [class.is-floated]=\"isFloated()\">{{ label() }}</label>\n }\n </div>\n\n <!-- CDK Connected Popover Overlay -->\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"origin\" [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\" (overlayOutsideClick)=\"close()\" (detach)=\"close()\">\n <div class=\"talos-color-picker-panel talos-popover-panel\" (click)=\"$event.stopPropagation()\">\n <ng-container *ngTemplateOutlet=\"pickerContentTpl\"></ng-container>\n </div>\n </ng-template>\n</div>\n} @else {\n<!-- Inline / Embedded Mode -->\n<div class=\"talos-color-picker-panel talos-inline-panel\">\n @if (label()) {\n <div class=\"panel-header-title\">{{ label() }}</div>\n }\n <ng-container *ngTemplateOutlet=\"pickerContentTpl\"></ng-container>\n</div>\n}\n\n<!-- Main Color Picker Content Template -->\n<ng-template #pickerContentTpl>\n <div class=\"picker-inner-container\">\n\n <!-- 1. Saturation & Value 2D Canvas -->\n <div #satValCanvas class=\"sat-val-canvas\" [style.background-color]=\"pureHueHex()\" tabindex=\"0\" role=\"slider\"\n aria-label=\"Color saturation and brightness\"\n [attr.aria-valuetext]=\"'Saturation ' + currentHsva().s + '%, Brightness ' + currentHsva().v + '%'\"\n (mousedown)=\"onSatValMouseDown($event)\" (touchstart)=\"onSatValTouchStart($event)\"\n (keydown)=\"onSatValKeyDown($event)\">\n <div class=\"sat-gradient-white\"></div>\n <div class=\"val-gradient-black\"></div>\n\n <!-- Handle Pin -->\n <div class=\"sat-val-handle\" [class.is-light-handle]=\"!isLight()\" [style.left.%]=\"currentHsva().s\"\n [style.top.%]=\"100 - currentHsva().v\" [style.background-color]=\"rgbaString()\">\n </div>\n </div>\n\n <!-- 2. Sliders & Action Bar -->\n <div class=\"sliders-action-bar\">\n <!-- Sliders Column -->\n <div class=\"sliders-column\">\n <!-- Hue Rainbow Slider Track -->\n <div #hueTrack class=\"hue-slider-track\" tabindex=\"0\" role=\"slider\" aria-label=\"Hue spectrum\" aria-valuemin=\"0\"\n aria-valuemax=\"360\" [attr.aria-valuenow]=\"currentHsva().h\" (mousedown)=\"onHueMouseDown($event)\"\n (touchstart)=\"onHueTouchStart($event)\" (keydown)=\"onHueKeyDown($event)\">\n <div class=\"slider-thumb\" [style.left.%]=\"(currentHsva().h / 360) * 100\"\n [style.background-color]=\"pureHueHex()\">\n </div>\n </div>\n\n <!-- Alpha Opacity Slider Track -->\n @if (showAlpha()) {\n <div #alphaTrack class=\"alpha-slider-track\" tabindex=\"0\" role=\"slider\" aria-label=\"Color opacity\"\n aria-valuemin=\"0\" aria-valuemax=\"1\" [attr.aria-valuenow]=\"currentHsva().a\"\n (mousedown)=\"onAlphaMouseDown($event)\" (touchstart)=\"onAlphaTouchStart($event)\"\n (keydown)=\"onAlphaKeyDown($event)\">\n <div class=\"alpha-checkerboard-bg\"></div>\n <div class=\"alpha-gradient-overlay\"\n [style.background]=\"'linear-gradient(to right, transparent, ' + pureHueHex() + ')'\">\n </div>\n <div class=\"slider-thumb\" [style.left.%]=\"currentHsva().a * 100\" [style.background-color]=\"rgbaString()\">\n </div>\n </div>\n }\n </div>\n\n <!-- Action & Preview Column -->\n <div class=\"action-preview-column\">\n <!-- Color Preview Circle -->\n <div class=\"swatch-circle-preview\" [title]=\"formattedColor()\">\n <div class=\"swatch-checkerboard\"></div>\n <div class=\"swatch-fill\" [style.background-color]=\"rgbaString()\"></div>\n </div>\n\n <!-- Quick Action Buttons -->\n <div class=\"quick-actions-row\">\n @if (showEyeDropper() && hasEyeDropper()) {\n <button type=\"button\" class=\"icon-action-button\" title=\"Pick color from screen\"\n aria-label=\"Pick color from screen\" (click)=\"pickWithEyeDropper()\">\n <svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path\n d=\"m12 9-8.414 8.414A2 2 0 0 0 3 18.828v1.344a2 2 0 0 1-.586 1.414A2 2 0 0 1 3.828 21h1.344a2 2 0 0 0 1.414-.586L15 12\" />\n <path d=\"m18 9 .4.4a1 1 0 1 1-3 3l-3.8-3.8a1 1 0 1 1 3-3l.4.4 3.4-3.4a1 1 0 1 1 3 3z\" />\n <path d=\"m2 22 .414-.414\" />\n </svg>\n </button>\n }\n\n <button type=\"button\" class=\"icon-action-button\" [class.is-copied]=\"copied()\"\n [title]=\"copied() ? 'Copied to clipboard!' : 'Copy color string'\" aria-label=\"Copy color string\"\n (click)=\"copyColor()\">\n @if (copied()) {\n <svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"copy-success-icon\">\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"></rect>\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"></path>\n </svg>\n }\n </button>\n </div>\n </div>\n </div>\n\n <!-- 3. Format Switcher & Channel Inputs -->\n @if (showInputs()) {\n <div class=\"inputs-section\">\n @if (showFormatSwitcher()) {\n <div class=\"format-tabs-bar\">\n <button type=\"button\" class=\"format-tab-btn\" [class.is-active]=\"currentFormat() === 'hex'\"\n (click)=\"switchFormat('hex')\">\n HEX\n </button>\n <button type=\"button\" class=\"format-tab-btn\" [class.is-active]=\"currentFormat() === 'rgb'\"\n (click)=\"switchFormat('rgb')\">\n RGB\n </button>\n <button type=\"button\" class=\"format-tab-btn\" [class.is-active]=\"currentFormat() === 'hsl'\"\n (click)=\"switchFormat('hsl')\">\n HSL\n </button>\n </div>\n }\n\n <!-- Channel Inputs Grid -->\n <div class=\"channel-inputs-grid\">\n @if (currentFormat() === 'hex') {\n <!-- HEX Input -->\n <div class=\"input-field-group hex-field\">\n <input type=\"text\" class=\"channel-input hex-input\" [ngModel]=\"inputHex()\"\n (ngModelChange)=\"onHexInputChange($event)\" placeholder=\"#3B82F6\" aria-label=\"Hex color value\" />\n <span class=\"field-caption\">HEX</span>\n </div>\n } @else if (currentFormat() === 'rgb') {\n <!-- RGB Inputs -->\n <div class=\"input-field-group\">\n <input type=\"number\" min=\"0\" max=\"255\" class=\"channel-input\" [(ngModel)]=\"inputR\"\n (ngModelChange)=\"onRgbaInputChange()\" aria-label=\"Red\" />\n <span class=\"field-caption\">R</span>\n </div>\n <div class=\"input-field-group\">\n <input type=\"number\" min=\"0\" max=\"255\" class=\"channel-input\" [(ngModel)]=\"inputG\"\n (ngModelChange)=\"onRgbaInputChange()\" aria-label=\"Green\" />\n <span class=\"field-caption\">G</span>\n </div>\n <div class=\"input-field-group\">\n <input type=\"number\" min=\"0\" max=\"255\" class=\"channel-input\" [(ngModel)]=\"inputB\"\n (ngModelChange)=\"onRgbaInputChange()\" aria-label=\"Blue\" />\n <span class=\"field-caption\">B</span>\n </div>\n } @else if (currentFormat() === 'hsl') {\n <!-- HSL Inputs -->\n <div class=\"input-field-group\">\n <input type=\"number\" min=\"0\" max=\"360\" class=\"channel-input\" [(ngModel)]=\"inputH\"\n (ngModelChange)=\"onHslaInputChange()\" aria-label=\"Hue\" />\n <span class=\"field-caption\">H</span>\n </div>\n <div class=\"input-field-group\">\n <input type=\"number\" min=\"0\" max=\"100\" class=\"channel-input\" [(ngModel)]=\"inputS\"\n (ngModelChange)=\"onHslaInputChange()\" aria-label=\"Saturation\" />\n <span class=\"field-caption\">S%</span>\n </div>\n <div class=\"input-field-group\">\n <input type=\"number\" min=\"0\" max=\"100\" class=\"channel-input\" [(ngModel)]=\"inputL\"\n (ngModelChange)=\"onHslaInputChange()\" aria-label=\"Lightness\" />\n <span class=\"field-caption\">L%</span>\n </div>\n }\n\n <!-- Alpha Input (Common for all non-hex or with alpha) -->\n @if (showAlpha()) {\n <div class=\"input-field-group alpha-field\">\n <input type=\"number\" min=\"0\" max=\"100\" class=\"channel-input\" [(ngModel)]=\"inputA\"\n (ngModelChange)=\"currentFormat() === 'hsl' ? onHslaInputChange() : onRgbaInputChange()\"\n aria-label=\"Opacity Percentage\" />\n <span class=\"field-caption\">A%</span>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- 4. Preset Color Swatches -->\n @if (showPresets() && normalizedPresets().length > 0) {\n <div class=\"presets-section\">\n @for (group of normalizedPresets(); track group.label) {\n @if (normalizedPresets().length > 1) {\n <div class=\"preset-group-title\">{{ group.label }}</div>\n }\n <div class=\"swatches-grid\">\n @for (color of group.colors; track color) {\n <button type=\"button\" class=\"swatch-btn\"\n [class.is-selected]=\"currentHex().toLowerCase() === color.toLowerCase()\" [style.background-color]=\"color\"\n [title]=\"color\" [attr.aria-label]=\"'Select preset color ' + color\" (click)=\"selectPreset(color)\">\n @if (currentHex().toLowerCase() === color.toLowerCase()) {\n <svg viewBox=\"0 0 24 24\" width=\"12\" height=\"12\" stroke=\"currentColor\" stroke-width=\"3\" fill=\"none\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"swatch-check-icon\">\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n }\n </button>\n }\n </div>\n }\n </div>\n }\n\n <!-- 5. Recent Colors -->\n @if (showRecent() && recentColors().length > 0) {\n <div class=\"recent-section\">\n <div class=\"recent-group-title\">Recent Colors</div>\n <div class=\"swatches-grid recent-grid\">\n @for (color of recentColors(); track color) {\n <button type=\"button\" class=\"swatch-btn\"\n [class.is-selected]=\"currentHex().toLowerCase() === color.toLowerCase()\" [style.background-color]=\"color\"\n [title]=\"color\" [attr.aria-label]=\"'Select recent color ' + color\" (click)=\"selectPreset(color)\">\n </button>\n }\n </div>\n </div>\n }\n\n </div>\n</ng-template>", styles: [":host{display:inline-block;position:relative;width:100%;max-width:100%;font-family:inherit;box-sizing:border-box}:host *,:host *:before,:host *:after{box-sizing:border-box}:host.color-picker-sm{--talos-control-height: var(--talos-height-sm, 2rem);--tcp-width: 250px;--tcp-canvas-height: 130px;--tcp-font-size: var(--talos-font-size-xs, .75rem)}:host.color-picker-md{--talos-control-height: var(--talos-height-md, 2.25rem);--tcp-width: 280px;--tcp-canvas-height: 150px;--tcp-font-size: var(--talos-font-size-sm, .8125rem)}:host.color-picker-lg{--talos-control-height: var(--talos-height-lg, 2.625rem);--tcp-width: 310px;--tcp-canvas-height: 170px;--tcp-font-size: var(--talos-font-size-md, .875rem)}.talos-field-label{display:inline-flex;align-items:center;font-size:var(--talos-control-font-size, .8125rem);font-weight:var(--talos-font-weight-semibold, 600);color:var(--talos-text-primary, #0f172a);margin-bottom:.375rem;cursor:pointer;-webkit-user-select:none;user-select:none;transition:color var(--talos-transition, .18s ease)}.talos-field-label .required-star{color:var(--talos-error-color, #ef4444);margin-left:.25rem}.talos-color-picker-wrapper{position:relative;width:100%;display:flex;flex-direction:column}.talos-color-picker-trigger{position:relative;display:flex;align-items:center;gap:.625rem;width:100%;height:var(--talos-control-height, 2.25rem);min-height:var(--talos-control-height, 2.25rem);padding:0 var(--talos-control-padding-x, .625rem);background-color:var(--talos-input-bg, var(--talos-bg-surface, #ffffff));border:1px solid var(--talos-input-border, var(--talos-border-default, #cbd5e1));border-radius:var(--talos-border-radius, var(--talos-radius-md, .375rem));color:var(--talos-input-color, var(--talos-text-primary, #0f172a));font-size:var(--talos-control-font-size, .8125rem);cursor:text;outline:none;-webkit-user-select:none;user-select:none;transition:border-color var(--talos-transition, .18s ease),box-shadow var(--talos-transition, .18s ease),background-color var(--talos-transition, .18s ease)}.talos-color-picker-trigger:hover:not(.is-disabled){border-color:var(--talos-input-border-hover, var(--talos-border-hover, #94a3b8))}.talos-color-picker-trigger:focus-within,.talos-color-picker-trigger.is-focused,.talos-color-picker-trigger:focus-visible{border-color:var(--talos-input-border-focus, var(--talos-primary, #2563eb));box-shadow:var(--talos-focus-ring, 0 0 0 3px rgba(37, 99, 235, .18))}.talos-color-picker-trigger.is-disabled{background-color:var(--talos-input-disabled-bg, var(--talos-bg-subtle, #f1f5f9));border-color:var(--talos-input-disabled-border, var(--talos-border-subtle, #e2e8f0));color:var(--talos-input-disabled-color, var(--talos-text-muted, #94a3b8));cursor:not-allowed;opacity:.65}.swatch-preview-box{position:relative;width:1.1rem;height:1.1rem;min-width:1.1rem;border-radius:var(--talos-radius-xs, .25rem);overflow:hidden;border:1px solid var(--talos-border-default, rgba(0, 0, 0, .15));box-shadow:inset 0 0 2px #0000001a;cursor:pointer;flex-shrink:0;transition:transform .12s ease}.swatch-preview-box:hover{transform:scale(1.08)}.swatch-checkerboard,.alpha-checkerboard-bg{position:absolute;inset:0;background-image:linear-gradient(45deg,var(--talos-border-default, #cbd5e1) 25%,transparent 25%),linear-gradient(-45deg,var(--talos-border-default, #cbd5e1) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--talos-border-default, #cbd5e1) 75%),linear-gradient(-45deg,transparent 75%,var(--talos-border-default, #cbd5e1) 75%);background-size:8px 8px;background-position:0 0,0 4px,4px -4px,-4px 0px;background-color:var(--talos-bg-surface, #ffffff)}.swatch-fill{position:absolute;inset:0;transition:background-color .1s ease}.color-picker-input{flex:1;min-width:0;width:100%;height:100%;background:transparent;border:none;outline:none;padding:0;margin:0;font-family:inherit;font-size:var(--talos-control-font-size, .8125rem);font-weight:var(--talos-font-weight-medium, 500);font-variant-numeric:tabular-nums;letter-spacing:.02em;color:var(--talos-input-color, var(--talos-text-primary, #0f172a));line-height:normal}.color-picker-input::placeholder{color:var(--talos-input-placeholder-color, var(--talos-text-muted, #94a3b8));opacity:1;font-weight:var(--talos-font-weight-normal, 400)}.color-picker-input:disabled{cursor:not-allowed}.clear-button{display:inline-flex;align-items:center;justify-content:center;background:transparent;border:none;padding:.25rem;color:var(--talos-text-muted, #94a3b8);border-radius:var(--talos-radius-full, 9999px);cursor:pointer;transition:color var(--talos-transition, .18s ease),background-color var(--talos-transition, .18s ease)}.clear-button:hover{color:var(--talos-error-color, #ef4444);background-color:#ef444426}.dropdown-chevron-icon{display:inline-flex;align-items:center;justify-content:center;background:transparent;border:none;padding:0;color:var(--talos-text-muted, #94a3b8);cursor:pointer;transition:transform var(--talos-transition, .18s cubic-bezier(.4, 0, .2, 1)),color var(--talos-transition, .18s ease)}.dropdown-chevron-icon.is-rotated{transform:rotate(180deg);color:var(--talos-primary, #2563eb)}.dropdown-chevron-icon:hover{color:var(--talos-text-primary, #0f172a)}.talos-floating-label{position:absolute;left:calc(var(--talos-control-padding-x, .625rem) + 1.375rem + .625rem);top:50%;transform:translateY(-50%);font-size:var(--talos-control-font-size, .8125rem);font-weight:var(--talos-font-weight-medium, 500);color:var(--talos-input-placeholder-color, var(--talos-text-muted, #94a3b8));pointer-events:none;-webkit-user-select:none;user-select:none;background-color:var(--talos-input-bg, var(--talos-bg-surface, #ffffff));padding:0 .25rem;border-radius:var(--talos-radius-xs, .25rem);line-height:1;z-index:2;transition:transform var(--talos-transition, .18s cubic-bezier(.4, 0, .2, 1)),font-size var(--talos-transition, .18s cubic-bezier(.4, 0, .2, 1)),color var(--talos-transition, .18s cubic-bezier(.4, 0, .2, 1)),top var(--talos-transition, .18s cubic-bezier(.4, 0, .2, 1)),left var(--talos-transition, .18s cubic-bezier(.4, 0, .2, 1))}.talos-floating-label.is-floated{top:0;left:var(--talos-control-padding-x, .625rem);transform:translateY(-50%) scale(.85);font-size:.75rem;font-weight:var(--talos-font-weight-semibold, 600);color:var(--talos-text-muted, #64748b)}:host(.is-open) .talos-floating-label.is-floated,:host(.is-floated) .talos-floating-label.is-floated,.talos-color-picker-trigger:focus-within .talos-floating-label.is-floated,.talos-color-picker-trigger.is-focused .talos-floating-label.is-floated{color:var(--talos-primary, #2563eb)}.talos-color-picker-panel{width:var(--tcp-width, 280px);max-width:calc(100vw - 2rem);background-color:var(--talos-dropdown-bg, var(--talos-bg-surface, #ffffff));border:1px solid var(--talos-dropdown-border, var(--talos-border-default, #cbd5e1));border-radius:var(--talos-border-radius, var(--talos-radius-lg, .5rem));overflow:hidden;box-sizing:border-box}.talos-color-picker-panel.talos-popover-panel{box-shadow:var(--talos-dropdown-shadow, var(--talos-shadow-dropdown, 0 16px 32px -4px rgba(0, 0, 0, .25)));-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);animation:tcp-slide-in var(--talos-transition, .18s cubic-bezier(.16, 1, .3, 1));z-index:1050}.talos-color-picker-panel.talos-inline-panel{box-shadow:var(--talos-shadow-xs, 0 1px 2px rgba(0, 0, 0, .05))}.talos-color-picker-panel .panel-header-title{padding:.75rem .875rem 0;font-size:var(--talos-control-font-size, .8125rem);font-weight:var(--talos-font-weight-semibold, 600);color:var(--talos-text-primary, #0f172a)}.picker-inner-container{display:flex;flex-direction:column;padding:.75rem;gap:.75rem}.sat-val-canvas{position:relative;width:100%;height:var(--tcp-canvas-height, 150px);border-radius:calc(var(--talos-border-radius, var(--talos-radius-md, .375rem)) - 1px);overflow:hidden;cursor:crosshair;outline:none;-webkit-user-select:none;user-select:none;touch-action:none;box-shadow:inset 0 0 1px #0000004d}.sat-val-canvas:focus-visible{box-shadow:0 0 0 2px var(--talos-primary, #2563eb),inset 0 0 1px #0000004d}.sat-gradient-white{position:absolute;inset:0;background:linear-gradient(to right,#ffffff,transparent)}.val-gradient-black{position:absolute;inset:0;background:linear-gradient(to top,#000000,transparent)}.sat-val-handle{position:absolute;width:14px;height:14px;border-radius:var(--talos-radius-full, 9999px);border:2px solid #ffffff;box-shadow:0 0 2px #0009,inset 0 0 1px #0006;transform:translate(-50%,-50%);pointer-events:none;transition:transform .05s ease}.sat-val-handle.is-light-handle{border-color:#0f172a}.sliders-action-bar{display:flex;align-items:center;gap:.625rem}.sliders-column{flex:1;display:flex;flex-direction:column;gap:.5rem}.hue-slider-track,.alpha-slider-track{position:relative;width:100%;height:.75rem;border-radius:var(--talos-radius-full, 9999px);cursor:pointer;outline:none;-webkit-user-select:none;user-select:none;touch-action:none}.hue-slider-track:focus-visible,.alpha-slider-track:focus-visible{box-shadow:0 0 0 2px var(--talos-primary, #2563eb)}.hue-slider-track{background:linear-gradient(to right,red,#ff0 17%,#0f0 33%,#0ff,#00f 67%,#f0f 83%,red)}.alpha-slider-track{overflow:hidden}.alpha-slider-track .alpha-gradient-overlay{position:absolute;inset:0;border-radius:var(--talos-radius-full, 9999px)}.slider-thumb{position:absolute;top:50%;width:14px;height:14px;border-radius:var(--talos-radius-full, 9999px);border:2px solid #ffffff;box-shadow:0 1px 3px #0006;transform:translate(-50%,-50%);pointer-events:none}.action-preview-column{display:flex;flex-direction:column;align-items:center;gap:.375rem}.swatch-circle-preview{position:relative;width:1.75rem;height:1.75rem;border-radius:var(--talos-radius-full, 9999px);overflow:hidden;border:1px solid var(--talos-border-default, rgba(0, 0, 0, .15));box-shadow:var(--talos-shadow-xs, 0 1px 2px rgba(0, 0, 0, .05))}.quick-actions-row{display:flex;align-items:center;gap:.25rem}.icon-action-button{display:inline-flex;align-items:center;justify-content:center;width:1.625rem;height:1.625rem;padding:0;background-color:transparent;border:1px solid transparent;border-radius:var(--talos-radius-sm, .25rem);color:var(--talos-text-muted, #94a3b8);cursor:pointer;transition:all var(--talos-transition, .18s ease)}.icon-action-button:hover{color:var(--talos-text-primary, #0f172a);background-color:var(--talos-bg-subtle, #f1f5f9);border-color:var(--talos-border-subtle, #e2e8f0)}.icon-action-button.is-copied{color:var(--talos-success, #16a34a)}.icon-action-button .copy-success-icon{animation:tcp-scale-up .2s ease}.inputs-section{display:flex;flex-direction:column;gap:.5rem}.format-tabs-bar{display:flex;align-items:center;background-color:var(--talos-bg-subtle, #f1f5f9);padding:2px;border-radius:var(--talos-radius-md, .375rem);gap:2px;border:1px solid var(--talos-border-subtle, rgba(0, 0, 0, .04))}.format-tab-btn{flex:1;padding:.25rem 0;font-size:var(--talos-font-size-2xs, .6875rem);font-weight:var(--talos-font-weight-semibold, 600);letter-spacing:.03em;background:transparent;border:none;border-radius:var(--talos-radius-xs, .25rem);color:var(--talos-text-muted, #94a3b8);cursor:pointer;transition:all var(--talos-transition, .18s ease)}.format-tab-btn.is-active{background-color:var(--talos-bg-surface, #ffffff);color:var(--talos-text-primary, #0f172a);box-shadow:0 1px 2px #0000001a}.format-tab-btn:hover:not(.is-active){color:var(--talos-text-primary, #0f172a)}.channel-inputs-grid{display:flex;align-items:center;gap:.375rem}.input-field-group{flex:1;display:flex;flex-direction:column;align-items:center;gap:.125rem}.input-field-group.hex-field{flex:2.5}.input-field-group .channel-input{width:100%;height:1.75rem;padding:0 .25rem;font-size:var(--talos-font-size-xs, .75rem);font-weight:var(--talos-font-weight-medium, 500);font-family:inherit;text-align:center;color:var(--talos-text-primary, #0f172a);background-color:var(--talos-bg-subtle, #f1f5f9);border:1px solid var(--talos-border-default, #cbd5e1);border-radius:var(--talos-radius-xs, .25rem);outline:none;transition:border-color var(--talos-transition, .18s ease),box-shadow var(--talos-transition, .18s ease),background-color var(--talos-transition, .18s ease)}.input-field-group .channel-input::-webkit-inner-spin-button,.input-field-group .channel-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.input-field-group .channel-input{-moz-appearance:textfield}.input-field-group .channel-input:focus{border-color:var(--talos-primary, #2563eb);box-shadow:var(--talos-focus-ring, 0 0 0 3px rgba(37, 99, 235, .18));background-color:var(--talos-bg-surface, #ffffff)}.input-field-group .field-caption{font-size:.625rem;font-weight:var(--talos-font-weight-bold, 700);color:var(--talos-text-muted, #94a3b8);text-transform:uppercase}.presets-section,.recent-section{display:flex;flex-direction:column;gap:.375rem;border-top:1px solid var(--talos-border-subtle, #e2e8f0);padding-top:.5rem}.preset-group-title,.recent-group-title{font-size:var(--talos-font-size-2xs, .6875rem);font-weight:var(--talos-font-weight-semibold, 600);color:var(--talos-text-muted, #64748b)}.swatches-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:.375rem}.swatch-btn{position:relative;aspect-ratio:1;border:1px solid var(--talos-border-default, rgba(0, 0, 0, .12));border-radius:var(--talos-radius-xs, .25rem);cursor:pointer;outline:none;padding:0;display:flex;align-items:center;justify-content:center;transition:transform .12s ease,box-shadow .12s ease}.swatch-btn:hover{transform:scale(1.12);z-index:2;box-shadow:0 2px 6px #00000040}.swatch-btn:focus-visible{box-shadow:0 0 0 2px var(--talos-primary, #2563eb)}.swatch-btn.is-selected{box-shadow:0 0 0 2px var(--talos-bg-surface, #ffffff),0 0 0 4px var(--talos-primary, #3b82f6);z-index:1}.swatch-btn .swatch-check-icon{color:#fff;filter:drop-shadow(0 0 1.5px rgba(0,0,0,.8))}@keyframes tcp-slide-in{0%{opacity:0;transform:translateY(-4px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes tcp-scale-up{0%{transform:scale(.7)}50%{transform:scale(1.2)}to{transform:scale(1)}}\n"] }]
726
- }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], format: [{ type: i0.Input, args: [{ isSignal: true, alias: "format", required: false }] }], showAlpha: [{ type: i0.Input, args: [{ isSignal: true, alias: "showAlpha", required: false }] }], presets: [{ type: i0.Input, args: [{ isSignal: true, alias: "presets", required: false }] }], showPresets: [{ type: i0.Input, args: [{ isSignal: true, alias: "showPresets", required: false }] }], showRecent: [{ type: i0.Input, args: [{ isSignal: true, alias: "showRecent", required: false }] }], showEyeDropper: [{ type: i0.Input, args: [{ isSignal: true, alias: "showEyeDropper", required: false }] }], showInputs: [{ type: i0.Input, args: [{ isSignal: true, alias: "showInputs", required: false }] }], showFormatSwitcher: [{ type: i0.Input, args: [{ isSignal: true, alias: "showFormatSwitcher", required: false }] }], inline: [{ type: i0.Input, args: [{ isSignal: true, alias: "inline", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], clearable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearable", required: false }] }], floatingLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "floatingLabel", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], colorChange: [{ type: i0.Output, args: ["colorChange"] }], colorDetailsChange: [{ type: i0.Output, args: ["colorDetailsChange"] }], formatChange: [{ type: i0.Output, args: ["formatChange"] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }], cleared: [{ type: i0.Output, args: ["cleared"] }], satValCanvas: [{
727
- type: ViewChild,
728
- args: ['satValCanvas']
729
- }], hueTrack: [{
730
- type: ViewChild,
731
- args: ['hueTrack']
732
- }], alphaTrack: [{
733
- type: ViewChild,
734
- args: ['alphaTrack']
735
- }], triggerBtn: [{
736
- type: ViewChild,
737
- args: ['triggerBtn']
738
- }], triggerInput: [{
739
- type: ViewChild,
740
- args: ['triggerInput']
741
- }] } });
742
-
743
- class TalosColorPickerModule {
744
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosColorPickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
745
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.1.1", ngImport: i0, type: TalosColorPickerModule, imports: [TalosColorPickerComponent], exports: [TalosColorPickerComponent] });
746
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosColorPickerModule, imports: [TalosColorPickerComponent] });
747
- }
748
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosColorPickerModule, decorators: [{
749
- type: NgModule,
750
- args: [{
751
- imports: [TalosColorPickerComponent],
752
- exports: [TalosColorPickerComponent]
753
- }]
754
- }] });
755
-
756
- /**
757
- * Generated bundle index. Do not edit.
758
- */
759
-
760
- export { DEFAULT_COLOR_PRESETS, TalosColorPickerComponent, TalosColorPickerModule };
761
- //# sourceMappingURL=weeehaoooz-talos-ui-form-color-picker.mjs.map