@cdevhub/ngx-tw 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/README.md +78 -15
  2. package/fesm2022/cdevhub-ngx-tw-accordion.mjs +16 -5
  3. package/fesm2022/cdevhub-ngx-tw-accordion.mjs.map +1 -1
  4. package/fesm2022/cdevhub-ngx-tw-avatar.mjs +26 -15
  5. package/fesm2022/cdevhub-ngx-tw-avatar.mjs.map +1 -1
  6. package/fesm2022/cdevhub-ngx-tw-badge.mjs +17 -5
  7. package/fesm2022/cdevhub-ngx-tw-badge.mjs.map +1 -1
  8. package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs +27 -6
  9. package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs.map +1 -1
  10. package/fesm2022/cdevhub-ngx-tw-button.mjs +23 -11
  11. package/fesm2022/cdevhub-ngx-tw-button.mjs.map +1 -1
  12. package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs +5 -5
  13. package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs.map +1 -1
  14. package/fesm2022/cdevhub-ngx-tw-calendar-testing.mjs +3 -3
  15. package/fesm2022/cdevhub-ngx-tw-calendar-testing.mjs.map +1 -1
  16. package/fesm2022/cdevhub-ngx-tw-calendar.mjs +427 -122
  17. package/fesm2022/cdevhub-ngx-tw-calendar.mjs.map +1 -1
  18. package/fesm2022/cdevhub-ngx-tw-card.mjs +21 -11
  19. package/fesm2022/cdevhub-ngx-tw-card.mjs.map +1 -1
  20. package/fesm2022/cdevhub-ngx-tw-carousel.mjs +215 -96
  21. package/fesm2022/cdevhub-ngx-tw-carousel.mjs.map +1 -1
  22. package/fesm2022/cdevhub-ngx-tw-checkbox.mjs +108 -64
  23. package/fesm2022/cdevhub-ngx-tw-checkbox.mjs.map +1 -1
  24. package/fesm2022/cdevhub-ngx-tw-code-block.mjs +18 -6
  25. package/fesm2022/cdevhub-ngx-tw-code-block.mjs.map +1 -1
  26. package/fesm2022/cdevhub-ngx-tw-collapsible.mjs +55 -30
  27. package/fesm2022/cdevhub-ngx-tw-collapsible.mjs.map +1 -1
  28. package/fesm2022/cdevhub-ngx-tw-combobox-testing.mjs +218 -0
  29. package/fesm2022/cdevhub-ngx-tw-combobox-testing.mjs.map +1 -0
  30. package/fesm2022/cdevhub-ngx-tw-combobox.mjs +236 -211
  31. package/fesm2022/cdevhub-ngx-tw-combobox.mjs.map +1 -1
  32. package/fesm2022/cdevhub-ngx-tw-command-palette-testing.mjs +200 -0
  33. package/fesm2022/cdevhub-ngx-tw-command-palette-testing.mjs.map +1 -0
  34. package/fesm2022/cdevhub-ngx-tw-command-palette.mjs +34 -7
  35. package/fesm2022/cdevhub-ngx-tw-command-palette.mjs.map +1 -1
  36. package/fesm2022/cdevhub-ngx-tw-core.mjs +135 -15
  37. package/fesm2022/cdevhub-ngx-tw-core.mjs.map +1 -1
  38. package/fesm2022/cdevhub-ngx-tw-date-picker-testing.mjs +203 -0
  39. package/fesm2022/cdevhub-ngx-tw-date-picker-testing.mjs.map +1 -0
  40. package/fesm2022/cdevhub-ngx-tw-date-picker.mjs +160 -102
  41. package/fesm2022/cdevhub-ngx-tw-date-picker.mjs.map +1 -1
  42. package/fesm2022/cdevhub-ngx-tw-date-range-picker-testing.mjs +209 -0
  43. package/fesm2022/cdevhub-ngx-tw-date-range-picker-testing.mjs.map +1 -0
  44. package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs +182 -107
  45. package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs.map +1 -1
  46. package/fesm2022/cdevhub-ngx-tw-dialog-testing.mjs +122 -0
  47. package/fesm2022/cdevhub-ngx-tw-dialog-testing.mjs.map +1 -0
  48. package/fesm2022/cdevhub-ngx-tw-dialog.mjs +11 -2
  49. package/fesm2022/cdevhub-ngx-tw-dialog.mjs.map +1 -1
  50. package/fesm2022/cdevhub-ngx-tw-empty-state.mjs +1 -1
  51. package/fesm2022/cdevhub-ngx-tw-empty-state.mjs.map +1 -1
  52. package/fesm2022/cdevhub-ngx-tw-file-upload-testing.mjs +149 -0
  53. package/fesm2022/cdevhub-ngx-tw-file-upload-testing.mjs.map +1 -0
  54. package/fesm2022/cdevhub-ngx-tw-file-upload.mjs +57 -67
  55. package/fesm2022/cdevhub-ngx-tw-file-upload.mjs.map +1 -1
  56. package/fesm2022/cdevhub-ngx-tw-flip-card.mjs +42 -24
  57. package/fesm2022/cdevhub-ngx-tw-flip-card.mjs.map +1 -1
  58. package/fesm2022/cdevhub-ngx-tw-form-field.mjs +114 -21
  59. package/fesm2022/cdevhub-ngx-tw-form-field.mjs.map +1 -1
  60. package/fesm2022/cdevhub-ngx-tw-icon.mjs +16 -6
  61. package/fesm2022/cdevhub-ngx-tw-icon.mjs.map +1 -1
  62. package/fesm2022/cdevhub-ngx-tw-input.mjs +52 -61
  63. package/fesm2022/cdevhub-ngx-tw-input.mjs.map +1 -1
  64. package/fesm2022/cdevhub-ngx-tw-item.mjs +18 -3
  65. package/fesm2022/cdevhub-ngx-tw-item.mjs.map +1 -1
  66. package/fesm2022/cdevhub-ngx-tw-menu-testing.mjs +168 -0
  67. package/fesm2022/cdevhub-ngx-tw-menu-testing.mjs.map +1 -0
  68. package/fesm2022/cdevhub-ngx-tw-menu.mjs +58 -21
  69. package/fesm2022/cdevhub-ngx-tw-menu.mjs.map +1 -1
  70. package/fesm2022/cdevhub-ngx-tw-number-input.mjs +34 -1
  71. package/fesm2022/cdevhub-ngx-tw-number-input.mjs.map +1 -1
  72. package/fesm2022/cdevhub-ngx-tw-paginator.mjs +95 -45
  73. package/fesm2022/cdevhub-ngx-tw-paginator.mjs.map +1 -1
  74. package/fesm2022/cdevhub-ngx-tw-popover.mjs +81 -32
  75. package/fesm2022/cdevhub-ngx-tw-popover.mjs.map +1 -1
  76. package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs +1 -1
  77. package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs.map +1 -1
  78. package/fesm2022/cdevhub-ngx-tw-radio.mjs +131 -98
  79. package/fesm2022/cdevhub-ngx-tw-radio.mjs.map +1 -1
  80. package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs +207 -42
  81. package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs.map +1 -1
  82. package/fesm2022/cdevhub-ngx-tw-select-testing.mjs +165 -0
  83. package/fesm2022/cdevhub-ngx-tw-select-testing.mjs.map +1 -0
  84. package/fesm2022/cdevhub-ngx-tw-select.mjs +386 -210
  85. package/fesm2022/cdevhub-ngx-tw-select.mjs.map +1 -1
  86. package/fesm2022/{cdevhub-ngx-tw-sheet-sheet-renderer-ByyNluUd.mjs → cdevhub-ngx-tw-sheet-sheet-renderer-CqVJwgmp.mjs} +3 -3
  87. package/fesm2022/cdevhub-ngx-tw-sheet-sheet-renderer-CqVJwgmp.mjs.map +1 -0
  88. package/fesm2022/cdevhub-ngx-tw-sheet-testing.mjs +129 -0
  89. package/fesm2022/cdevhub-ngx-tw-sheet-testing.mjs.map +1 -0
  90. package/fesm2022/cdevhub-ngx-tw-sheet.mjs +23 -7
  91. package/fesm2022/cdevhub-ngx-tw-sheet.mjs.map +1 -1
  92. package/fesm2022/cdevhub-ngx-tw-slider.mjs +89 -54
  93. package/fesm2022/cdevhub-ngx-tw-slider.mjs.map +1 -1
  94. package/fesm2022/cdevhub-ngx-tw-sort.mjs +122 -17
  95. package/fesm2022/cdevhub-ngx-tw-sort.mjs.map +1 -1
  96. package/fesm2022/cdevhub-ngx-tw-split.mjs +72 -19
  97. package/fesm2022/cdevhub-ngx-tw-split.mjs.map +1 -1
  98. package/fesm2022/cdevhub-ngx-tw-stat.mjs +63 -25
  99. package/fesm2022/cdevhub-ngx-tw-stat.mjs.map +1 -1
  100. package/fesm2022/cdevhub-ngx-tw-stepper.mjs +35 -8
  101. package/fesm2022/cdevhub-ngx-tw-stepper.mjs.map +1 -1
  102. package/fesm2022/cdevhub-ngx-tw-switch.mjs +54 -48
  103. package/fesm2022/cdevhub-ngx-tw-switch.mjs.map +1 -1
  104. package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs +12 -15
  105. package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs.map +1 -1
  106. package/fesm2022/cdevhub-ngx-tw-table.mjs +74 -13
  107. package/fesm2022/cdevhub-ngx-tw-table.mjs.map +1 -1
  108. package/fesm2022/cdevhub-ngx-tw-tabs.mjs +84 -30
  109. package/fesm2022/cdevhub-ngx-tw-tabs.mjs.map +1 -1
  110. package/fesm2022/cdevhub-ngx-tw-tags-input-testing.mjs +172 -0
  111. package/fesm2022/cdevhub-ngx-tw-tags-input-testing.mjs.map +1 -0
  112. package/fesm2022/cdevhub-ngx-tw-tags-input.mjs +107 -71
  113. package/fesm2022/cdevhub-ngx-tw-tags-input.mjs.map +1 -1
  114. package/fesm2022/cdevhub-ngx-tw-textarea.mjs +41 -9
  115. package/fesm2022/cdevhub-ngx-tw-textarea.mjs.map +1 -1
  116. package/fesm2022/cdevhub-ngx-tw-theme.mjs +257 -45
  117. package/fesm2022/cdevhub-ngx-tw-theme.mjs.map +1 -1
  118. package/fesm2022/cdevhub-ngx-tw-time-picker-testing.mjs +201 -0
  119. package/fesm2022/cdevhub-ngx-tw-time-picker-testing.mjs.map +1 -0
  120. package/fesm2022/cdevhub-ngx-tw-time-picker.mjs +184 -77
  121. package/fesm2022/cdevhub-ngx-tw-time-picker.mjs.map +1 -1
  122. package/fesm2022/cdevhub-ngx-tw-timeline.mjs +110 -27
  123. package/fesm2022/cdevhub-ngx-tw-timeline.mjs.map +1 -1
  124. package/fesm2022/{cdevhub-ngx-tw-toast-toast-renderer-DSu4YoTy.mjs → cdevhub-ngx-tw-toast-toast-renderer-BlDxemsU.mjs} +107 -19
  125. package/fesm2022/cdevhub-ngx-tw-toast-toast-renderer-BlDxemsU.mjs.map +1 -0
  126. package/fesm2022/cdevhub-ngx-tw-toast.mjs +21 -13
  127. package/fesm2022/cdevhub-ngx-tw-toast.mjs.map +1 -1
  128. package/fesm2022/cdevhub-ngx-tw-tooltip.mjs +102 -15
  129. package/fesm2022/cdevhub-ngx-tw-tooltip.mjs.map +1 -1
  130. package/fesm2022/cdevhub-ngx-tw-transfer-testing.mjs +219 -0
  131. package/fesm2022/cdevhub-ngx-tw-transfer-testing.mjs.map +1 -0
  132. package/fesm2022/cdevhub-ngx-tw-transfer.mjs +88 -69
  133. package/fesm2022/cdevhub-ngx-tw-transfer.mjs.map +1 -1
  134. package/fesm2022/cdevhub-ngx-tw-tree.mjs +68 -19
  135. package/fesm2022/cdevhub-ngx-tw-tree.mjs.map +1 -1
  136. package/index.json +1 -1
  137. package/package.json +63 -2
  138. package/theme/_base.css +13 -0
  139. package/theme/_dark.css +110 -36
  140. package/theme/_high-contrast-dark.css +367 -0
  141. package/theme/_high-contrast.css +13 -2
  142. package/theme/_light.css +276 -0
  143. package/theme/_semantic.css +47 -12
  144. package/theme/_typography.css +17 -0
  145. package/theme/index.css +86 -7
  146. package/types/cdevhub-ngx-tw-accordion.d.ts +12 -4
  147. package/types/cdevhub-ngx-tw-avatar.d.ts +10 -3
  148. package/types/cdevhub-ngx-tw-button.d.ts +1 -0
  149. package/types/cdevhub-ngx-tw-calendar-luxon.d.ts +2 -2
  150. package/types/cdevhub-ngx-tw-calendar-testing.d.ts +1 -1
  151. package/types/cdevhub-ngx-tw-calendar.d.ts +179 -73
  152. package/types/cdevhub-ngx-tw-card.d.ts +11 -3
  153. package/types/cdevhub-ngx-tw-carousel.d.ts +89 -20
  154. package/types/cdevhub-ngx-tw-checkbox.d.ts +40 -12
  155. package/types/cdevhub-ngx-tw-code-block.d.ts +11 -2
  156. package/types/cdevhub-ngx-tw-collapsible.d.ts +32 -5
  157. package/types/cdevhub-ngx-tw-combobox-testing.d.ts +157 -0
  158. package/types/cdevhub-ngx-tw-combobox.d.ts +94 -53
  159. package/types/cdevhub-ngx-tw-command-palette-testing.d.ts +136 -0
  160. package/types/cdevhub-ngx-tw-command-palette.d.ts +33 -5
  161. package/types/cdevhub-ngx-tw-core.d.ts +152 -21
  162. package/types/cdevhub-ngx-tw-date-picker-testing.d.ts +141 -0
  163. package/types/cdevhub-ngx-tw-date-picker.d.ts +37 -29
  164. package/types/cdevhub-ngx-tw-date-range-picker-testing.d.ts +148 -0
  165. package/types/cdevhub-ngx-tw-date-range-picker.d.ts +36 -29
  166. package/types/cdevhub-ngx-tw-dialog-testing.d.ts +98 -0
  167. package/types/cdevhub-ngx-tw-dialog.d.ts +12 -3
  168. package/types/cdevhub-ngx-tw-file-upload-testing.d.ts +120 -0
  169. package/types/cdevhub-ngx-tw-file-upload.d.ts +8 -10
  170. package/types/cdevhub-ngx-tw-flip-card.d.ts +18 -11
  171. package/types/cdevhub-ngx-tw-form-field.d.ts +19 -2
  172. package/types/cdevhub-ngx-tw-icon.d.ts +3 -3
  173. package/types/cdevhub-ngx-tw-input.d.ts +5 -8
  174. package/types/cdevhub-ngx-tw-item.d.ts +2 -0
  175. package/types/cdevhub-ngx-tw-menu-testing.d.ts +131 -0
  176. package/types/cdevhub-ngx-tw-menu.d.ts +2 -2
  177. package/types/cdevhub-ngx-tw-number-input.d.ts +20 -0
  178. package/types/cdevhub-ngx-tw-paginator.d.ts +58 -24
  179. package/types/cdevhub-ngx-tw-popover.d.ts +41 -10
  180. package/types/cdevhub-ngx-tw-progress-bar.d.ts +1 -1
  181. package/types/cdevhub-ngx-tw-radio.d.ts +68 -25
  182. package/types/cdevhub-ngx-tw-segmented-control.d.ts +79 -16
  183. package/types/cdevhub-ngx-tw-select-testing.d.ts +114 -0
  184. package/types/cdevhub-ngx-tw-select.d.ts +104 -33
  185. package/types/cdevhub-ngx-tw-sheet-testing.d.ts +104 -0
  186. package/types/cdevhub-ngx-tw-sheet.d.ts +19 -3
  187. package/types/cdevhub-ngx-tw-slider.d.ts +79 -25
  188. package/types/cdevhub-ngx-tw-sort.d.ts +45 -4
  189. package/types/cdevhub-ngx-tw-split.d.ts +32 -2
  190. package/types/cdevhub-ngx-tw-stat.d.ts +14 -4
  191. package/types/cdevhub-ngx-tw-stepper.d.ts +16 -2
  192. package/types/cdevhub-ngx-tw-switch.d.ts +35 -13
  193. package/types/cdevhub-ngx-tw-tab-nav.d.ts +7 -6
  194. package/types/cdevhub-ngx-tw-table.d.ts +53 -10
  195. package/types/cdevhub-ngx-tw-tabs.d.ts +41 -10
  196. package/types/cdevhub-ngx-tw-tags-input-testing.d.ts +135 -0
  197. package/types/cdevhub-ngx-tw-tags-input.d.ts +26 -11
  198. package/types/cdevhub-ngx-tw-textarea.d.ts +3 -2
  199. package/types/cdevhub-ngx-tw-theme.d.ts +245 -39
  200. package/types/cdevhub-ngx-tw-time-picker-testing.d.ts +129 -0
  201. package/types/cdevhub-ngx-tw-time-picker.d.ts +76 -19
  202. package/types/cdevhub-ngx-tw-timeline.d.ts +36 -12
  203. package/types/cdevhub-ngx-tw-toast.d.ts +20 -6
  204. package/types/cdevhub-ngx-tw-tooltip.d.ts +28 -6
  205. package/types/cdevhub-ngx-tw-transfer-testing.d.ts +152 -0
  206. package/types/cdevhub-ngx-tw-transfer.d.ts +21 -8
  207. package/types/cdevhub-ngx-tw-tree.d.ts +6 -1
  208. package/fesm2022/cdevhub-ngx-tw-sheet-sheet-renderer-ByyNluUd.mjs.map +0 -1
  209. package/fesm2022/cdevhub-ngx-tw-toast-toast-renderer-DSu4YoTy.mjs.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cdevhub/ngx-tw",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "Angular component library for Tailwind CSS v4 — accessible, signal-based, built on Angular CDK.",
5
5
  "keywords": [
6
6
  "angular",
@@ -97,10 +97,18 @@
97
97
  "types": "./types/cdevhub-ngx-tw-combobox.d.ts",
98
98
  "default": "./fesm2022/cdevhub-ngx-tw-combobox.mjs"
99
99
  },
100
+ "./combobox/testing": {
101
+ "types": "./types/cdevhub-ngx-tw-combobox-testing.d.ts",
102
+ "default": "./fesm2022/cdevhub-ngx-tw-combobox-testing.mjs"
103
+ },
100
104
  "./command-palette": {
101
105
  "types": "./types/cdevhub-ngx-tw-command-palette.d.ts",
102
106
  "default": "./fesm2022/cdevhub-ngx-tw-command-palette.mjs"
103
107
  },
108
+ "./command-palette/testing": {
109
+ "types": "./types/cdevhub-ngx-tw-command-palette-testing.d.ts",
110
+ "default": "./fesm2022/cdevhub-ngx-tw-command-palette-testing.mjs"
111
+ },
104
112
  "./core": {
105
113
  "types": "./types/cdevhub-ngx-tw-core.d.ts",
106
114
  "default": "./fesm2022/cdevhub-ngx-tw-core.mjs"
@@ -109,14 +117,26 @@
109
117
  "types": "./types/cdevhub-ngx-tw-date-picker.d.ts",
110
118
  "default": "./fesm2022/cdevhub-ngx-tw-date-picker.mjs"
111
119
  },
120
+ "./date-picker/testing": {
121
+ "types": "./types/cdevhub-ngx-tw-date-picker-testing.d.ts",
122
+ "default": "./fesm2022/cdevhub-ngx-tw-date-picker-testing.mjs"
123
+ },
112
124
  "./date-range-picker": {
113
125
  "types": "./types/cdevhub-ngx-tw-date-range-picker.d.ts",
114
126
  "default": "./fesm2022/cdevhub-ngx-tw-date-range-picker.mjs"
115
127
  },
128
+ "./date-range-picker/testing": {
129
+ "types": "./types/cdevhub-ngx-tw-date-range-picker-testing.d.ts",
130
+ "default": "./fesm2022/cdevhub-ngx-tw-date-range-picker-testing.mjs"
131
+ },
116
132
  "./dialog": {
117
133
  "types": "./types/cdevhub-ngx-tw-dialog.d.ts",
118
134
  "default": "./fesm2022/cdevhub-ngx-tw-dialog.mjs"
119
135
  },
136
+ "./dialog/testing": {
137
+ "types": "./types/cdevhub-ngx-tw-dialog-testing.d.ts",
138
+ "default": "./fesm2022/cdevhub-ngx-tw-dialog-testing.mjs"
139
+ },
120
140
  "./empty-state": {
121
141
  "types": "./types/cdevhub-ngx-tw-empty-state.d.ts",
122
142
  "default": "./fesm2022/cdevhub-ngx-tw-empty-state.mjs"
@@ -125,6 +145,10 @@
125
145
  "types": "./types/cdevhub-ngx-tw-file-upload.d.ts",
126
146
  "default": "./fesm2022/cdevhub-ngx-tw-file-upload.mjs"
127
147
  },
148
+ "./file-upload/testing": {
149
+ "types": "./types/cdevhub-ngx-tw-file-upload-testing.d.ts",
150
+ "default": "./fesm2022/cdevhub-ngx-tw-file-upload-testing.mjs"
151
+ },
128
152
  "./flip-card": {
129
153
  "types": "./types/cdevhub-ngx-tw-flip-card.d.ts",
130
154
  "default": "./fesm2022/cdevhub-ngx-tw-flip-card.mjs"
@@ -153,6 +177,10 @@
153
177
  "types": "./types/cdevhub-ngx-tw-menu.d.ts",
154
178
  "default": "./fesm2022/cdevhub-ngx-tw-menu.mjs"
155
179
  },
180
+ "./menu/testing": {
181
+ "types": "./types/cdevhub-ngx-tw-menu-testing.d.ts",
182
+ "default": "./fesm2022/cdevhub-ngx-tw-menu-testing.mjs"
183
+ },
156
184
  "./number-input": {
157
185
  "types": "./types/cdevhub-ngx-tw-number-input.d.ts",
158
186
  "default": "./fesm2022/cdevhub-ngx-tw-number-input.mjs"
@@ -181,6 +209,10 @@
181
209
  "types": "./types/cdevhub-ngx-tw-select.d.ts",
182
210
  "default": "./fesm2022/cdevhub-ngx-tw-select.mjs"
183
211
  },
212
+ "./select/testing": {
213
+ "types": "./types/cdevhub-ngx-tw-select-testing.d.ts",
214
+ "default": "./fesm2022/cdevhub-ngx-tw-select-testing.mjs"
215
+ },
184
216
  "./separator": {
185
217
  "types": "./types/cdevhub-ngx-tw-separator.d.ts",
186
218
  "default": "./fesm2022/cdevhub-ngx-tw-separator.mjs"
@@ -189,6 +221,10 @@
189
221
  "types": "./types/cdevhub-ngx-tw-sheet.d.ts",
190
222
  "default": "./fesm2022/cdevhub-ngx-tw-sheet.mjs"
191
223
  },
224
+ "./sheet/testing": {
225
+ "types": "./types/cdevhub-ngx-tw-sheet-testing.d.ts",
226
+ "default": "./fesm2022/cdevhub-ngx-tw-sheet-testing.mjs"
227
+ },
192
228
  "./skeleton": {
193
229
  "types": "./types/cdevhub-ngx-tw-skeleton.d.ts",
194
230
  "default": "./fesm2022/cdevhub-ngx-tw-skeleton.mjs"
@@ -237,6 +273,10 @@
237
273
  "types": "./types/cdevhub-ngx-tw-tags-input.d.ts",
238
274
  "default": "./fesm2022/cdevhub-ngx-tw-tags-input.mjs"
239
275
  },
276
+ "./tags-input/testing": {
277
+ "types": "./types/cdevhub-ngx-tw-tags-input-testing.d.ts",
278
+ "default": "./fesm2022/cdevhub-ngx-tw-tags-input-testing.mjs"
279
+ },
240
280
  "./textarea": {
241
281
  "types": "./types/cdevhub-ngx-tw-textarea.d.ts",
242
282
  "default": "./fesm2022/cdevhub-ngx-tw-textarea.mjs"
@@ -249,6 +289,10 @@
249
289
  "types": "./types/cdevhub-ngx-tw-time-picker.d.ts",
250
290
  "default": "./fesm2022/cdevhub-ngx-tw-time-picker.mjs"
251
291
  },
292
+ "./time-picker/testing": {
293
+ "types": "./types/cdevhub-ngx-tw-time-picker-testing.d.ts",
294
+ "default": "./fesm2022/cdevhub-ngx-tw-time-picker-testing.mjs"
295
+ },
252
296
  "./timeline": {
253
297
  "types": "./types/cdevhub-ngx-tw-timeline.d.ts",
254
298
  "default": "./fesm2022/cdevhub-ngx-tw-timeline.mjs"
@@ -265,6 +309,10 @@
265
309
  "types": "./types/cdevhub-ngx-tw-transfer.d.ts",
266
310
  "default": "./fesm2022/cdevhub-ngx-tw-transfer.mjs"
267
311
  },
312
+ "./transfer/testing": {
313
+ "types": "./types/cdevhub-ngx-tw-transfer-testing.d.ts",
314
+ "default": "./fesm2022/cdevhub-ngx-tw-transfer-testing.mjs"
315
+ },
268
316
  "./tree": {
269
317
  "types": "./types/cdevhub-ngx-tw-tree.d.ts",
270
318
  "default": "./fesm2022/cdevhub-ngx-tw-tree.mjs"
@@ -274,8 +322,21 @@
274
322
  "@angular/common": "^22.0.0",
275
323
  "@angular/core": "^22.0.0",
276
324
  "@angular/cdk": "^22.0.0",
325
+ "@angular/forms": "^22.0.0",
326
+ "rxjs": "^6.5.3 || ^7.4.0",
277
327
  "tailwindcss": "^4.0.0",
278
- "tailwind-variants": "^0.3.0"
328
+ "tailwind-variants": "^0.3.0",
329
+ "tailwind-merge": "^2.5.4",
330
+ "luxon": "^3.0.0",
331
+ "lucide": "^1.0.0"
332
+ },
333
+ "peerDependenciesMeta": {
334
+ "luxon": {
335
+ "optional": true
336
+ },
337
+ "lucide": {
338
+ "optional": true
339
+ }
279
340
  },
280
341
  "dependencies": {
281
342
  "tslib": "^2.3.0"
package/theme/_base.css CHANGED
@@ -1,7 +1,20 @@
1
+ /* `color-scheme` drives the UA's own chrome — scrollbars, native form
2
+ controls, the canvas behind the page. It inherits, so it has to be restated
3
+ at every theme boundary or a themed subtree keeps its ancestor's native
4
+ rendering: a `[twTheme]="'light'"` preview pane inside a dark page would
5
+ otherwise show dark scrollbars and dark `<select>` popups. The light and
6
+ high-contrast rules below are no-ops at the root (`:root` already resolves
7
+ `light` there) and only matter for subtrees. High-contrast is light-based —
8
+ see `_high-contrast.css`. */
1
9
  :root {
2
10
  color-scheme: light;
3
11
  }
4
12
 
13
+ [data-theme="light"],
14
+ [data-theme="high-contrast"] {
15
+ color-scheme: light;
16
+ }
17
+
5
18
  [data-theme="dark"] {
6
19
  color-scheme: dark;
7
20
  }
package/theme/_dark.css CHANGED
@@ -2,10 +2,21 @@
2
2
  Two activation paths, identical body:
3
3
  1. `[data-theme="dark"]` — explicit opt-in. Always wins.
4
4
  2. `@media (prefers-color-scheme: dark)` against a root that has NOT been
5
- explicitly tagged with `data-theme="light"` or `data-theme="high-contrast"`.
5
+ explicitly tagged with `data-theme="light"`, `data-theme="high-contrast"`
6
+ or `data-theme="high-contrast-dark"`.
6
7
  This gives pre-hydration screens, SSG snapshots, and consumers that skip
7
8
  `provideTheme()` automatic OS-driven dark mode without JavaScript.
8
9
 
10
+ Each `:not()` in that branch is doing real work, not defensive padding.
11
+ The branch is `:root:not(…):not(…):not(…)` — specificity 0,4,0 — while
12
+ every scheme's own block is a bare `[data-theme=…]` at 0,1,0. So on a
13
+ dark-preferring OS this rule beats all three of them regardless of import
14
+ order, and the only way an explicitly-tagged root can keep its own scheme
15
+ is to be excluded here by name. `high-contrast-dark` was added to that
16
+ list when `_high-contrast-dark.css` landed; dropping it does not break
17
+ loudly, it silently serves plain dark to exactly the users that scheme
18
+ exists for.
19
+
9
20
  The body is duplicated rather than aliased because CSS does not allow a
10
21
  single rule body to be applied via both a selector and a media query. Keep
11
22
  the two blocks in lock-step. */
@@ -23,10 +34,13 @@
23
34
  --color-fg-muted: var(--color-gray-300);
24
35
  --color-fg-subtle: var(--color-gray-400);
25
36
 
26
- /* ===== Border ===== */
27
- --color-border: var(--color-gray-600);
37
+ /* ===== Border =====
38
+ Same SC 1.4.11 rule as light — see the note in `_semantic.css`. gray-600
39
+ measured 2.66:1 against the dark surface and failed; `border-muted` stays
40
+ decorative and unchanged. */
41
+ --color-border: var(--color-gray-500);
28
42
  --color-border-muted: var(--color-gray-700);
29
- --color-border-strong: var(--color-gray-500);
43
+ --color-border-strong: var(--color-gray-400);
30
44
 
31
45
  /* ===== Primary ===== */
32
46
  --color-primary-50: var(--color-blue-950);
@@ -138,17 +152,70 @@
138
152
  (e.g. `green-300 + white` ≈ 1.7:1 ✗). Each pairing has been picked to meet
139
153
  WCAG AA against the matched surface (typically gray-950).
140
154
 
141
- Dark-mode contrast notes:
142
- sky-950 sky-100 ≈ 12.5:1 ✓ AA
143
- sky-950 sky-300 ≈ 7.7:1 ✓ AA
144
- sky-500 ↔ sky-950 ≈ 7.4:1 ✓ AA (info-solid)
145
- sky-300 gray-950 ≈ 11:1 ✓ AA (info-fg on surface)
146
- green-500green-950 ≈ 8.1:1 AA
147
- amber-400amber-950 ≈ 11.2:1 AA (yellow signage preserved)
148
- red-500red-950 ≈ 5.4:1 AA
149
- blue-500blue-950 ≈ 5.8:1 AA
150
- violet-500violet-950 ≈ 6.0:1 ✓ AA
151
- slate-300slate-950 ≈ 11.6:1AA
155
+ Dark-mode contrast notes. Every number below is MEASURED, not estimated:
156
+ Tailwind v4's oklch palette → sRGB (gamut-clamped) WCAG relative
157
+ luminance ratio. Reproduce with `scratchpad/p6-contrast.mjs dark light`.
158
+
159
+ `-solid-fg` on `-solid` the shipped pairings (AA body text, floor 4.5):
160
+ blue-950blue-400 5.58 (primary-solid)
161
+ slate-900slate-300 12.02 ✓ (secondary-solid)
162
+ violet-950violet-400 5.36 (accent-solid)
163
+ sky-950sky-500 5.12 (info-solid)
164
+ green-950green-500 6.71 ✓ (success-solid)
165
+ amber-950amber-400 8.73 (warning-solid, yellow signage kept)
166
+ red-950 ↔ red-400 5.58 ✓ (error-solid)
167
+
168
+ `-soft-fg` on `-soft`, and `-fg` on `surface` (representative rows):
169
+ sky-100 ↔ sky-950 12.10 ✓ (info-soft-fg on info-soft)
170
+ sky-300 ↔ gray-950 12.08 ✓ (info-fg on surface)
171
+
172
+ Rejected `-500` solid candidates — these are why `-solid` is `-400` for
173
+ three roles. They are AA FAILURES and are listed as such:
174
+ blue-500 ↔ blue-950 3.91 ✗
175
+ violet-500 ↔ violet-950 3.47 ✗
176
+ red-500 ↔ red-950 4.23 ✗
177
+
178
+ > This table previously listed those three rejected candidates under a
179
+ > "✓ AA" column at 5.8 / 6.0 / 5.4 — numbers that contradicted the file's
180
+ > own inline comments 20 lines below (3.92 / 3.46 / 4.14) and marked as
181
+ > passing the exact pairings this file rejects. Every one of its ten rows
182
+ > was wrong; it was rewritten against the harness on 2026-09-03, and the
183
+ > two surviving inline estimates ("~7.8", "~5.8") were corrected at the
184
+ > same time. Do not hand-estimate a row here.
185
+
186
+ ===== `-border`: raised for SC 1.4.11 on 2026-09-03 =====
187
+
188
+ The seven coloured `-border` tokens were `{hue}-800`, measuring 1.95–2.84:1
189
+ against `--color-surface` — below the 3:1 non-text-contrast floor. They are
190
+ the ONLY boundary of the alert `outline` variant (`alert.ts:50` —
191
+ transparent background, so nothing else marks the container), which makes
192
+ them identifying, not decorative. The neutral sibling in the same slot,
193
+ `--color-neutral-border` → `--color-border`, was raised to `gray-500` for
194
+ exactly this reason (see `_semantic.css`); these seven were left behind.
195
+
196
+ Rule for picking a value — the dimmest palette step measuring **≥ 3.4:1**
197
+ against `--color-surface` (gray-950). The 0.4 margin over the 3:1 floor
198
+ stops a palette retune dropping the token below it silently. Applied to
199
+ grey, this rule re-derives `gray-500` — the value `--color-border` already
200
+ ships — which is what makes it the right rule rather than a fitted one.
201
+
202
+ role was now ratio step below (fails)
203
+ primary blue-800 blue-600 3.83 blue-700 2.95
204
+ secondary slate-700 slate-500 4.22 slate-600 2.66
205
+ accent violet-800 violet-600 3.42 violet-700 2.76
206
+ info sky-800 sky-700 3.44 sky-800 2.68
207
+ success green-800 green-700 4.07 green-800 2.84
208
+ warning amber-800 amber-700 3.99 amber-800 2.82
209
+ error red-800 red-600 4.22 red-700 3.14
210
+ neutral (--color-border, gray-500) 4.16 gray-600 2.66
211
+
212
+ Each new value stays strictly dimmer than that role's `-border-strong`
213
+ (`{hue}-500`, secondary `slate-400`), so the two border tiers remain
214
+ visually distinct. `light` and `high-contrast*` are NOT changed here: both
215
+ high-contrast schemes already clear 3:1 on every role (4.94–10.34), and
216
+ `_light.css` fails the same floor WORSE (1.40–1.92) — that is a change to
217
+ the default scheme's outline tier with its own visual blast radius and is
218
+ reported separately rather than smuggled in here.
152
219
  */
153
220
 
154
221
  /* ----- Primary ----- */
@@ -157,11 +224,12 @@
157
224
  --color-primary-soft-fg: var(--color-blue-100);
158
225
  --color-primary-soft-fg-muted: var(--color-blue-300);
159
226
  /* `-400` not `-500` — blue-500/#2b7fff on blue-950/#162456 only hits
160
- 3.92:1 (AA fail). blue-400 lifts that to ~7.8:1 with the same fg. */
227
+ 3.91:1 (AA fail). blue-400 lifts that to 5.58:1 with the same fg.
228
+ (Was "~7.8:1" — an estimate, and wrong; measured 2026-09-03.) */
161
229
  --color-primary-solid: var(--color-blue-400);
162
230
  --color-primary-solid-hover: var(--color-blue-300);
163
231
  --color-primary-solid-fg: var(--color-blue-950);
164
- --color-primary-border: var(--color-blue-800);
232
+ --color-primary-border: var(--color-blue-600);
165
233
  --color-primary-border-strong: var(--color-blue-500);
166
234
  --color-primary-fg: var(--color-blue-300);
167
235
  --color-primary-icon: var(--color-blue-400);
@@ -174,7 +242,7 @@
174
242
  --color-secondary-solid: var(--color-slate-300);
175
243
  --color-secondary-solid-hover: var(--color-slate-200);
176
244
  --color-secondary-solid-fg: var(--color-slate-900);
177
- --color-secondary-border: var(--color-slate-700);
245
+ --color-secondary-border: var(--color-slate-500);
178
246
  --color-secondary-border-strong: var(--color-slate-400);
179
247
  --color-secondary-fg: var(--color-slate-300);
180
248
  --color-secondary-icon: var(--color-slate-400);
@@ -184,11 +252,11 @@
184
252
  --color-accent-soft-hover: var(--color-violet-900);
185
253
  --color-accent-soft-fg: var(--color-violet-100);
186
254
  --color-accent-soft-fg-muted: var(--color-violet-300);
187
- /* violet-500/violet-950 = 3.46:1 (AA fail); -400 lifts to ~5.4:1. */
255
+ /* violet-500/violet-950 = 3.47:1 (AA fail); -400 lifts to 5.36:1. */
188
256
  --color-accent-solid: var(--color-violet-400);
189
257
  --color-accent-solid-hover: var(--color-violet-300);
190
258
  --color-accent-solid-fg: var(--color-violet-950);
191
- --color-accent-border: var(--color-violet-800);
259
+ --color-accent-border: var(--color-violet-600);
192
260
  --color-accent-border-strong: var(--color-violet-500);
193
261
  --color-accent-fg: var(--color-violet-300);
194
262
  --color-accent-icon: var(--color-violet-400);
@@ -214,7 +282,7 @@
214
282
  --color-info-solid: var(--color-sky-500);
215
283
  --color-info-solid-hover: var(--color-sky-400);
216
284
  --color-info-solid-fg: var(--color-sky-950);
217
- --color-info-border: var(--color-sky-800);
285
+ --color-info-border: var(--color-sky-700);
218
286
  --color-info-border-strong: var(--color-sky-500);
219
287
  --color-info-fg: var(--color-sky-300);
220
288
  --color-info-icon: var(--color-sky-400);
@@ -227,7 +295,7 @@
227
295
  --color-success-solid: var(--color-green-500);
228
296
  --color-success-solid-hover: var(--color-green-400);
229
297
  --color-success-solid-fg: var(--color-green-950);
230
- --color-success-border: var(--color-green-800);
298
+ --color-success-border: var(--color-green-700);
231
299
  --color-success-border-strong: var(--color-green-500);
232
300
  --color-success-fg: var(--color-green-300);
233
301
  --color-success-icon: var(--color-green-400);
@@ -240,7 +308,7 @@
240
308
  --color-warning-solid: var(--color-amber-400);
241
309
  --color-warning-solid-hover: var(--color-amber-300);
242
310
  --color-warning-solid-fg: var(--color-amber-950);
243
- --color-warning-border: var(--color-amber-800);
311
+ --color-warning-border: var(--color-amber-700);
244
312
  --color-warning-border-strong: var(--color-amber-500);
245
313
  --color-warning-fg: var(--color-amber-300);
246
314
  --color-warning-icon: var(--color-amber-400);
@@ -250,11 +318,12 @@
250
318
  --color-error-soft-hover: var(--color-red-900);
251
319
  --color-error-soft-fg: var(--color-red-100);
252
320
  --color-error-soft-fg-muted: var(--color-red-300);
253
- /* red-500/red-950 = 4.14:1 (just AA fail). red-400 lifts to ~5.8:1. */
321
+ /* red-500/red-950 = 4.23:1 (just AA fail). red-400 lifts to 5.58:1.
322
+ (Was "4.14 / ~5.8" — both estimates; measured 2026-09-03.) */
254
323
  --color-error-solid: var(--color-red-400);
255
324
  --color-error-solid-hover: var(--color-red-300);
256
325
  --color-error-solid-fg: var(--color-red-950);
257
- --color-error-border: var(--color-red-800);
326
+ --color-error-border: var(--color-red-600);
258
327
  --color-error-border-strong: var(--color-red-500);
259
328
  --color-error-fg: var(--color-red-300);
260
329
  --color-error-icon: var(--color-red-400);
@@ -271,7 +340,9 @@
271
340
  }
272
341
 
273
342
  @media (prefers-color-scheme: dark) {
274
- :root:not([data-theme="light"]):not([data-theme="high-contrast"]) {
343
+ :root:not([data-theme="light"]):not([data-theme="high-contrast"]):not(
344
+ [data-theme="high-contrast-dark"]
345
+ ) {
275
346
  /* ===== Surface ===== */
276
347
  --color-surface: var(--color-gray-950);
277
348
  --color-surface-raised: var(--color-gray-900);
@@ -284,10 +355,13 @@
284
355
  --color-fg-muted: var(--color-gray-300);
285
356
  --color-fg-subtle: var(--color-gray-400);
286
357
 
287
- /* ===== Border ===== */
288
- --color-border: var(--color-gray-600);
358
+ /* ===== Border =====
359
+ Must stay in lock-step with the `[data-theme="dark"]` block above; the
360
+ two are hand-duplicated and a token that drifts between them renders
361
+ differently for a user on system-dark than for one who chose dark. */
362
+ --color-border: var(--color-gray-500);
289
363
  --color-border-muted: var(--color-gray-700);
290
- --color-border-strong: var(--color-gray-500);
364
+ --color-border-strong: var(--color-gray-400);
291
365
 
292
366
  /* ===== Primary ===== */
293
367
  --color-primary-50: var(--color-blue-950);
@@ -405,7 +479,7 @@
405
479
  --color-primary-solid: var(--color-blue-400);
406
480
  --color-primary-solid-hover: var(--color-blue-300);
407
481
  --color-primary-solid-fg: var(--color-blue-950);
408
- --color-primary-border: var(--color-blue-800);
482
+ --color-primary-border: var(--color-blue-600);
409
483
  --color-primary-border-strong: var(--color-blue-500);
410
484
  --color-primary-fg: var(--color-blue-300);
411
485
  --color-primary-icon: var(--color-blue-400);
@@ -418,7 +492,7 @@
418
492
  --color-secondary-solid: var(--color-slate-300);
419
493
  --color-secondary-solid-hover: var(--color-slate-200);
420
494
  --color-secondary-solid-fg: var(--color-slate-900);
421
- --color-secondary-border: var(--color-slate-700);
495
+ --color-secondary-border: var(--color-slate-500);
422
496
  --color-secondary-border-strong: var(--color-slate-400);
423
497
  --color-secondary-fg: var(--color-slate-300);
424
498
  --color-secondary-icon: var(--color-slate-400);
@@ -431,7 +505,7 @@
431
505
  --color-accent-solid: var(--color-violet-400);
432
506
  --color-accent-solid-hover: var(--color-violet-300);
433
507
  --color-accent-solid-fg: var(--color-violet-950);
434
- --color-accent-border: var(--color-violet-800);
508
+ --color-accent-border: var(--color-violet-600);
435
509
  --color-accent-border-strong: var(--color-violet-500);
436
510
  --color-accent-fg: var(--color-violet-300);
437
511
  --color-accent-icon: var(--color-violet-400);
@@ -457,7 +531,7 @@
457
531
  --color-info-solid: var(--color-sky-500);
458
532
  --color-info-solid-hover: var(--color-sky-400);
459
533
  --color-info-solid-fg: var(--color-sky-950);
460
- --color-info-border: var(--color-sky-800);
534
+ --color-info-border: var(--color-sky-700);
461
535
  --color-info-border-strong: var(--color-sky-500);
462
536
  --color-info-fg: var(--color-sky-300);
463
537
  --color-info-icon: var(--color-sky-400);
@@ -470,7 +544,7 @@
470
544
  --color-success-solid: var(--color-green-500);
471
545
  --color-success-solid-hover: var(--color-green-400);
472
546
  --color-success-solid-fg: var(--color-green-950);
473
- --color-success-border: var(--color-green-800);
547
+ --color-success-border: var(--color-green-700);
474
548
  --color-success-border-strong: var(--color-green-500);
475
549
  --color-success-fg: var(--color-green-300);
476
550
  --color-success-icon: var(--color-green-400);
@@ -483,7 +557,7 @@
483
557
  --color-warning-solid: var(--color-amber-400);
484
558
  --color-warning-solid-hover: var(--color-amber-300);
485
559
  --color-warning-solid-fg: var(--color-amber-950);
486
- --color-warning-border: var(--color-amber-800);
560
+ --color-warning-border: var(--color-amber-700);
487
561
  --color-warning-border-strong: var(--color-amber-500);
488
562
  --color-warning-fg: var(--color-amber-300);
489
563
  --color-warning-icon: var(--color-amber-400);
@@ -496,7 +570,7 @@
496
570
  --color-error-solid: var(--color-red-400);
497
571
  --color-error-solid-hover: var(--color-red-300);
498
572
  --color-error-solid-fg: var(--color-red-950);
499
- --color-error-border: var(--color-red-800);
573
+ --color-error-border: var(--color-red-600);
500
574
  --color-error-border-strong: var(--color-red-500);
501
575
  --color-error-fg: var(--color-red-300);
502
576
  --color-error-icon: var(--color-red-400);