@cdevhub/ngx-tw 0.5.0 → 0.6.1

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 +28 -4
  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 +111 -36
  140. package/theme/_high-contrast-dark.css +367 -0
  141. package/theme/_high-contrast.css +13 -2
  142. package/theme/_light.css +332 -0
  143. package/theme/_semantic.css +60 -26
  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.1",
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,71 @@
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 `docs/research/2026-09-audit/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*` were NOT changed here: both
215
+ high-contrast schemes already cleared 3:1 on every role (4.94–10.34), and
216
+ `_light.css` failed the same floor WORSE (1.40–1.92) — a change to the
217
+ default scheme's outline tier with its own visual blast radius, so it was
218
+ reported separately rather than smuggled in here. It landed on 2026-09-04;
219
+ `_light.css` carries its own table and its own rule, derived from this one.
152
220
  */
153
221
 
154
222
  /* ----- Primary ----- */
@@ -157,11 +225,12 @@
157
225
  --color-primary-soft-fg: var(--color-blue-100);
158
226
  --color-primary-soft-fg-muted: var(--color-blue-300);
159
227
  /* `-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. */
228
+ 3.91:1 (AA fail). blue-400 lifts that to 5.58:1 with the same fg.
229
+ (Was "~7.8:1" — an estimate, and wrong; measured 2026-09-03.) */
161
230
  --color-primary-solid: var(--color-blue-400);
162
231
  --color-primary-solid-hover: var(--color-blue-300);
163
232
  --color-primary-solid-fg: var(--color-blue-950);
164
- --color-primary-border: var(--color-blue-800);
233
+ --color-primary-border: var(--color-blue-600);
165
234
  --color-primary-border-strong: var(--color-blue-500);
166
235
  --color-primary-fg: var(--color-blue-300);
167
236
  --color-primary-icon: var(--color-blue-400);
@@ -174,7 +243,7 @@
174
243
  --color-secondary-solid: var(--color-slate-300);
175
244
  --color-secondary-solid-hover: var(--color-slate-200);
176
245
  --color-secondary-solid-fg: var(--color-slate-900);
177
- --color-secondary-border: var(--color-slate-700);
246
+ --color-secondary-border: var(--color-slate-500);
178
247
  --color-secondary-border-strong: var(--color-slate-400);
179
248
  --color-secondary-fg: var(--color-slate-300);
180
249
  --color-secondary-icon: var(--color-slate-400);
@@ -184,11 +253,11 @@
184
253
  --color-accent-soft-hover: var(--color-violet-900);
185
254
  --color-accent-soft-fg: var(--color-violet-100);
186
255
  --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. */
256
+ /* violet-500/violet-950 = 3.47:1 (AA fail); -400 lifts to 5.36:1. */
188
257
  --color-accent-solid: var(--color-violet-400);
189
258
  --color-accent-solid-hover: var(--color-violet-300);
190
259
  --color-accent-solid-fg: var(--color-violet-950);
191
- --color-accent-border: var(--color-violet-800);
260
+ --color-accent-border: var(--color-violet-600);
192
261
  --color-accent-border-strong: var(--color-violet-500);
193
262
  --color-accent-fg: var(--color-violet-300);
194
263
  --color-accent-icon: var(--color-violet-400);
@@ -214,7 +283,7 @@
214
283
  --color-info-solid: var(--color-sky-500);
215
284
  --color-info-solid-hover: var(--color-sky-400);
216
285
  --color-info-solid-fg: var(--color-sky-950);
217
- --color-info-border: var(--color-sky-800);
286
+ --color-info-border: var(--color-sky-700);
218
287
  --color-info-border-strong: var(--color-sky-500);
219
288
  --color-info-fg: var(--color-sky-300);
220
289
  --color-info-icon: var(--color-sky-400);
@@ -227,7 +296,7 @@
227
296
  --color-success-solid: var(--color-green-500);
228
297
  --color-success-solid-hover: var(--color-green-400);
229
298
  --color-success-solid-fg: var(--color-green-950);
230
- --color-success-border: var(--color-green-800);
299
+ --color-success-border: var(--color-green-700);
231
300
  --color-success-border-strong: var(--color-green-500);
232
301
  --color-success-fg: var(--color-green-300);
233
302
  --color-success-icon: var(--color-green-400);
@@ -240,7 +309,7 @@
240
309
  --color-warning-solid: var(--color-amber-400);
241
310
  --color-warning-solid-hover: var(--color-amber-300);
242
311
  --color-warning-solid-fg: var(--color-amber-950);
243
- --color-warning-border: var(--color-amber-800);
312
+ --color-warning-border: var(--color-amber-700);
244
313
  --color-warning-border-strong: var(--color-amber-500);
245
314
  --color-warning-fg: var(--color-amber-300);
246
315
  --color-warning-icon: var(--color-amber-400);
@@ -250,11 +319,12 @@
250
319
  --color-error-soft-hover: var(--color-red-900);
251
320
  --color-error-soft-fg: var(--color-red-100);
252
321
  --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. */
322
+ /* red-500/red-950 = 4.23:1 (just AA fail). red-400 lifts to 5.58:1.
323
+ (Was "4.14 / ~5.8" — both estimates; measured 2026-09-03.) */
254
324
  --color-error-solid: var(--color-red-400);
255
325
  --color-error-solid-hover: var(--color-red-300);
256
326
  --color-error-solid-fg: var(--color-red-950);
257
- --color-error-border: var(--color-red-800);
327
+ --color-error-border: var(--color-red-600);
258
328
  --color-error-border-strong: var(--color-red-500);
259
329
  --color-error-fg: var(--color-red-300);
260
330
  --color-error-icon: var(--color-red-400);
@@ -271,7 +341,9 @@
271
341
  }
272
342
 
273
343
  @media (prefers-color-scheme: dark) {
274
- :root:not([data-theme="light"]):not([data-theme="high-contrast"]) {
344
+ :root:not([data-theme="light"]):not([data-theme="high-contrast"]):not(
345
+ [data-theme="high-contrast-dark"]
346
+ ) {
275
347
  /* ===== Surface ===== */
276
348
  --color-surface: var(--color-gray-950);
277
349
  --color-surface-raised: var(--color-gray-900);
@@ -284,10 +356,13 @@
284
356
  --color-fg-muted: var(--color-gray-300);
285
357
  --color-fg-subtle: var(--color-gray-400);
286
358
 
287
- /* ===== Border ===== */
288
- --color-border: var(--color-gray-600);
359
+ /* ===== Border =====
360
+ Must stay in lock-step with the `[data-theme="dark"]` block above; the
361
+ two are hand-duplicated and a token that drifts between them renders
362
+ differently for a user on system-dark than for one who chose dark. */
363
+ --color-border: var(--color-gray-500);
289
364
  --color-border-muted: var(--color-gray-700);
290
- --color-border-strong: var(--color-gray-500);
365
+ --color-border-strong: var(--color-gray-400);
291
366
 
292
367
  /* ===== Primary ===== */
293
368
  --color-primary-50: var(--color-blue-950);
@@ -405,7 +480,7 @@
405
480
  --color-primary-solid: var(--color-blue-400);
406
481
  --color-primary-solid-hover: var(--color-blue-300);
407
482
  --color-primary-solid-fg: var(--color-blue-950);
408
- --color-primary-border: var(--color-blue-800);
483
+ --color-primary-border: var(--color-blue-600);
409
484
  --color-primary-border-strong: var(--color-blue-500);
410
485
  --color-primary-fg: var(--color-blue-300);
411
486
  --color-primary-icon: var(--color-blue-400);
@@ -418,7 +493,7 @@
418
493
  --color-secondary-solid: var(--color-slate-300);
419
494
  --color-secondary-solid-hover: var(--color-slate-200);
420
495
  --color-secondary-solid-fg: var(--color-slate-900);
421
- --color-secondary-border: var(--color-slate-700);
496
+ --color-secondary-border: var(--color-slate-500);
422
497
  --color-secondary-border-strong: var(--color-slate-400);
423
498
  --color-secondary-fg: var(--color-slate-300);
424
499
  --color-secondary-icon: var(--color-slate-400);
@@ -431,7 +506,7 @@
431
506
  --color-accent-solid: var(--color-violet-400);
432
507
  --color-accent-solid-hover: var(--color-violet-300);
433
508
  --color-accent-solid-fg: var(--color-violet-950);
434
- --color-accent-border: var(--color-violet-800);
509
+ --color-accent-border: var(--color-violet-600);
435
510
  --color-accent-border-strong: var(--color-violet-500);
436
511
  --color-accent-fg: var(--color-violet-300);
437
512
  --color-accent-icon: var(--color-violet-400);
@@ -457,7 +532,7 @@
457
532
  --color-info-solid: var(--color-sky-500);
458
533
  --color-info-solid-hover: var(--color-sky-400);
459
534
  --color-info-solid-fg: var(--color-sky-950);
460
- --color-info-border: var(--color-sky-800);
535
+ --color-info-border: var(--color-sky-700);
461
536
  --color-info-border-strong: var(--color-sky-500);
462
537
  --color-info-fg: var(--color-sky-300);
463
538
  --color-info-icon: var(--color-sky-400);
@@ -470,7 +545,7 @@
470
545
  --color-success-solid: var(--color-green-500);
471
546
  --color-success-solid-hover: var(--color-green-400);
472
547
  --color-success-solid-fg: var(--color-green-950);
473
- --color-success-border: var(--color-green-800);
548
+ --color-success-border: var(--color-green-700);
474
549
  --color-success-border-strong: var(--color-green-500);
475
550
  --color-success-fg: var(--color-green-300);
476
551
  --color-success-icon: var(--color-green-400);
@@ -483,7 +558,7 @@
483
558
  --color-warning-solid: var(--color-amber-400);
484
559
  --color-warning-solid-hover: var(--color-amber-300);
485
560
  --color-warning-solid-fg: var(--color-amber-950);
486
- --color-warning-border: var(--color-amber-800);
561
+ --color-warning-border: var(--color-amber-700);
487
562
  --color-warning-border-strong: var(--color-amber-500);
488
563
  --color-warning-fg: var(--color-amber-300);
489
564
  --color-warning-icon: var(--color-amber-400);
@@ -496,7 +571,7 @@
496
571
  --color-error-solid: var(--color-red-400);
497
572
  --color-error-solid-hover: var(--color-red-300);
498
573
  --color-error-solid-fg: var(--color-red-950);
499
- --color-error-border: var(--color-red-800);
574
+ --color-error-border: var(--color-red-600);
500
575
  --color-error-border-strong: var(--color-red-500);
501
576
  --color-error-fg: var(--color-red-300);
502
577
  --color-error-icon: var(--color-red-400);