@tmorrow/cre8-wc 1.1.2 → 1.1.3

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 (435) hide show
  1. package/cdn/cre8-wc.esm.js +1 -1
  2. package/cdn/cre8-wc.esm.js.map +1 -1
  3. package/cdn/cre8-wc.min.js +1 -1
  4. package/cdn/cre8-wc.min.js.map +1 -1
  5. package/lib/cdn-entry.js +129 -0
  6. package/lib/cdn-entry.js.map +1 -0
  7. package/lib/components/accordion/accordion.js +58 -40
  8. package/lib/components/accordion/accordion.js.map +1 -0
  9. package/lib/components/accordion/accordion.styles.js +4 -0
  10. package/lib/components/accordion/accordion.styles.js.map +1 -0
  11. package/lib/components/accordion-item/accordion-item.js +187 -98
  12. package/lib/components/accordion-item/accordion-item.js.map +1 -0
  13. package/lib/components/accordion-item/accordion-item.styles.js +4 -0
  14. package/lib/components/accordion-item/accordion-item.styles.js.map +1 -0
  15. package/lib/components/alert/alert.js +146 -107
  16. package/lib/components/alert/alert.js.map +1 -0
  17. package/lib/components/alert/alert.styles.js +4 -0
  18. package/lib/components/alert/alert.styles.js.map +1 -0
  19. package/lib/components/badge/badge.js +73 -50
  20. package/lib/components/badge/badge.js.map +1 -0
  21. package/lib/components/badge/badge.styles.js +4 -0
  22. package/lib/components/badge/badge.styles.js.map +1 -0
  23. package/lib/components/band/band.js +34 -31
  24. package/lib/components/band/band.js.map +1 -0
  25. package/lib/components/band/band.styles.js +4 -0
  26. package/lib/components/band/band.styles.js.map +1 -0
  27. package/lib/components/breadcrumbs/breadcrumbs.js +52 -28
  28. package/lib/components/breadcrumbs/breadcrumbs.js.map +1 -0
  29. package/lib/components/breadcrumbs/breadcrumbs.styles.js +4 -0
  30. package/lib/components/breadcrumbs/breadcrumbs.styles.js.map +1 -0
  31. package/lib/components/breadcrumbs-item/breadcrumbs-item.js +28 -27
  32. package/lib/components/breadcrumbs-item/breadcrumbs-item.js.map +1 -0
  33. package/lib/components/breadcrumbs-item/breadcrumbs-item.styles.js +4 -0
  34. package/lib/components/breadcrumbs-item/breadcrumbs-item.styles.js.map +1 -0
  35. package/lib/components/button/button.js +297 -1040
  36. package/lib/components/button/button.js.map +1 -0
  37. package/lib/components/button/button.styles.js +885 -0
  38. package/lib/components/button/button.styles.js.map +1 -0
  39. package/lib/components/button-group/button-group.js +30 -27
  40. package/lib/components/button-group/button-group.js.map +1 -0
  41. package/lib/components/button-group/button-group.styles.js +4 -0
  42. package/lib/components/button-group/button-group.styles.js.map +1 -0
  43. package/lib/components/card/card.js +57 -35
  44. package/lib/components/card/card.js.map +1 -0
  45. package/lib/components/card/card.styles.js +4 -0
  46. package/lib/components/card/card.styles.js.map +1 -0
  47. package/lib/components/chart/chart.js +528 -354
  48. package/lib/components/chart/chart.js.map +1 -0
  49. package/lib/components/chart/chart.styles.js +4 -0
  50. package/lib/components/chart/chart.styles.js.map +1 -0
  51. package/lib/components/checkbox-field/checkbox-field.js +66 -53
  52. package/lib/components/checkbox-field/checkbox-field.js.map +1 -0
  53. package/lib/components/checkbox-field/checkbox-field.styles.js +4 -0
  54. package/lib/components/checkbox-field/checkbox-field.styles.js.map +1 -0
  55. package/lib/components/checkbox-field-item/checkbox-field-item.js +252 -183
  56. package/lib/components/checkbox-field-item/checkbox-field-item.js.map +1 -0
  57. package/lib/components/checkbox-field-item/checkbox-field-item.styles.js +4 -0
  58. package/lib/components/checkbox-field-item/checkbox-field-item.styles.js.map +1 -0
  59. package/lib/components/contexts/form-internals-context.js +9 -0
  60. package/lib/components/contexts/form-internals-context.js.map +1 -0
  61. package/lib/components/cre8-element.js +57 -56
  62. package/lib/components/cre8-element.js.map +1 -0
  63. package/lib/components/cre8-form-element.js +212 -244
  64. package/lib/components/cre8-form-element.js.map +1 -0
  65. package/lib/components/danger-button/danger-button.js +274 -147
  66. package/lib/components/danger-button/danger-button.js.map +1 -0
  67. package/lib/components/danger-button/danger-button.styles.js +4 -0
  68. package/lib/components/danger-button/danger-button.styles.js.map +1 -0
  69. package/lib/components/date-picker/calendar/calendar.js +465 -0
  70. package/lib/components/date-picker/calendar/calendar.js.map +1 -0
  71. package/lib/components/date-picker/calendar/calendar.styles.js +4 -0
  72. package/lib/components/date-picker/calendar/calendar.styles.js.map +1 -0
  73. package/lib/components/date-picker/calendar-month-modal/calendar-month-modal.js +76 -0
  74. package/lib/components/date-picker/calendar-month-modal/calendar-month-modal.js.map +1 -0
  75. package/lib/components/date-picker/calendar-month-modal/calendar-month-modal.styles.js +4 -0
  76. package/lib/components/date-picker/calendar-month-modal/calendar-month-modal.styles.js.map +1 -0
  77. package/lib/components/date-picker/calendar-navigation/calendar-navigation.js +110 -0
  78. package/lib/components/date-picker/calendar-navigation/calendar-navigation.js.map +1 -0
  79. package/lib/components/date-picker/calendar-navigation/calendar-navigation.styles.js +4 -0
  80. package/lib/components/date-picker/calendar-navigation/calendar-navigation.styles.js.map +1 -0
  81. package/lib/components/date-picker/calendar-year-modal/calendar-year-modal.js +116 -0
  82. package/lib/components/date-picker/calendar-year-modal/calendar-year-modal.js.map +1 -0
  83. package/lib/components/date-picker/calendar-year-modal/calendar-year-modal.styles.js +4 -0
  84. package/lib/components/date-picker/calendar-year-modal/calendar-year-modal.styles.js.map +1 -0
  85. package/lib/components/date-picker/date-picker.js +91 -784
  86. package/lib/components/date-picker/date-picker.js.map +1 -0
  87. package/lib/components/date-picker/date-picker.styles.js +4 -0
  88. package/lib/components/date-picker/date-picker.styles.js.map +1 -0
  89. package/lib/components/divider/divider.js +45 -35
  90. package/lib/components/divider/divider.js.map +1 -0
  91. package/lib/components/divider/divider.styles.js +4 -0
  92. package/lib/components/divider/divider.styles.js.map +1 -0
  93. package/lib/components/dropdown/dropdown.js +97 -63
  94. package/lib/components/dropdown/dropdown.js.map +1 -0
  95. package/lib/components/dropdown/dropdown.styles.js +4 -0
  96. package/lib/components/dropdown/dropdown.styles.js.map +1 -0
  97. package/lib/components/dropdown-item/dropdown-item.js +38 -31
  98. package/lib/components/dropdown-item/dropdown-item.js.map +1 -0
  99. package/lib/components/dropdown-item/dropdown-item.styles.js +4 -0
  100. package/lib/components/dropdown-item/dropdown-item.styles.js.map +1 -0
  101. package/lib/components/feature/feature.js +40 -35
  102. package/lib/components/feature/feature.js.map +1 -0
  103. package/lib/components/feature/feature.styles.js +4 -0
  104. package/lib/components/feature/feature.styles.js.map +1 -0
  105. package/lib/components/field/field.js +218 -153
  106. package/lib/components/field/field.js.map +1 -0
  107. package/lib/components/field/field.styles.js +4 -0
  108. package/lib/components/field/field.styles.js.map +1 -0
  109. package/lib/components/field-note/field-note.js +58 -45
  110. package/lib/components/field-note/field-note.js.map +1 -0
  111. package/lib/components/field-note/field-note.styles.js +4 -0
  112. package/lib/components/field-note/field-note.styles.js.map +1 -0
  113. package/lib/components/footer/footer.js +25 -18
  114. package/lib/components/footer/footer.js.map +1 -0
  115. package/lib/components/footer/footer.styles.js +4 -0
  116. package/lib/components/footer/footer.styles.js.map +1 -0
  117. package/lib/components/global-nav/global-nav.js +44 -37
  118. package/lib/components/global-nav/global-nav.js.map +1 -0
  119. package/lib/components/global-nav/global-nav.styles.js +4 -0
  120. package/lib/components/global-nav/global-nav.styles.js.map +1 -0
  121. package/lib/components/global-nav-item/global-nav-item.js +149 -112
  122. package/lib/components/global-nav-item/global-nav-item.js.map +1 -0
  123. package/lib/components/global-nav-item/global-nav-item.styles.js +4 -0
  124. package/lib/components/global-nav-item/global-nav-item.styles.js.map +1 -0
  125. package/lib/components/grid/grid.js +48 -45
  126. package/lib/components/grid/grid.js.map +1 -0
  127. package/lib/components/grid/grid.styles.js +4 -0
  128. package/lib/components/grid/grid.styles.js.map +1 -0
  129. package/lib/components/grid-item/grid-item.js +19 -16
  130. package/lib/components/grid-item/grid-item.js.map +1 -0
  131. package/lib/components/grid-item/grid-item.styles.js +4 -0
  132. package/lib/components/grid-item/grid-item.styles.js.map +1 -0
  133. package/lib/components/header/header.js +34 -29
  134. package/lib/components/header/header.js.map +1 -0
  135. package/lib/components/header/header.styles.js +4 -0
  136. package/lib/components/header/header.styles.js.map +1 -0
  137. package/lib/components/heading/heading.js +113 -76
  138. package/lib/components/heading/heading.js.map +1 -0
  139. package/lib/components/heading/heading.styles.js +4 -0
  140. package/lib/components/heading/heading.styles.js.map +1 -0
  141. package/lib/components/hero/hero.js +43 -40
  142. package/lib/components/hero/hero.js.map +1 -0
  143. package/lib/components/hero/hero.styles.js +4 -0
  144. package/lib/components/hero/hero.styles.js.map +1 -0
  145. package/lib/components/icon/icon.js +232 -9
  146. package/lib/components/icon/icon.js.map +1 -0
  147. package/lib/components/icon/icon.styles.js +4 -0
  148. package/lib/components/icon/icon.styles.js.map +1 -0
  149. package/lib/components/inline-alert/inline-alert.js +114 -87
  150. package/lib/components/inline-alert/inline-alert.js.map +1 -0
  151. package/lib/components/inline-alert/inline-alert.styles.js +4 -0
  152. package/lib/components/inline-alert/inline-alert.styles.js.map +1 -0
  153. package/lib/components/layout/layout.js +30 -27
  154. package/lib/components/layout/layout.js.map +1 -0
  155. package/lib/components/layout/layout.styles.js +4 -0
  156. package/lib/components/layout/layout.styles.js.map +1 -0
  157. package/lib/components/layout-container/layout-container.js +30 -27
  158. package/lib/components/layout-container/layout-container.js.map +1 -0
  159. package/lib/components/layout-container/layout-container.styles.js +4 -0
  160. package/lib/components/layout-container/layout-container.styles.js.map +1 -0
  161. package/lib/components/layout-section/layout-section.js +41 -33
  162. package/lib/components/layout-section/layout-section.js.map +1 -0
  163. package/lib/components/layout-section/layout-section.styles.js +4 -0
  164. package/lib/components/layout-section/layout-section.styles.js.map +1 -0
  165. package/lib/components/linelength-container/linelength-container.js +19 -16
  166. package/lib/components/linelength-container/linelength-container.js.map +1 -0
  167. package/lib/components/linelength-container/linelength-container.styles.js +4 -0
  168. package/lib/components/linelength-container/linelength-container.styles.js.map +1 -0
  169. package/lib/components/link/link.js +125 -87
  170. package/lib/components/link/link.js.map +1 -0
  171. package/lib/components/link/link.styles.js +4 -0
  172. package/lib/components/link/link.styles.js.map +1 -0
  173. package/lib/components/link-list/link-list.js +48 -45
  174. package/lib/components/link-list/link-list.js.map +1 -0
  175. package/lib/components/link-list/link-list.styles.js +4 -0
  176. package/lib/components/link-list/link-list.styles.js.map +1 -0
  177. package/lib/components/link-list-item/link-list-item.js +40 -37
  178. package/lib/components/link-list-item/link-list-item.js.map +1 -0
  179. package/lib/components/link-list-item/link-list-item.styles.js +4 -0
  180. package/lib/components/link-list-item/link-list-item.styles.js.map +1 -0
  181. package/lib/components/list/list.js +35 -32
  182. package/lib/components/list/list.js.map +1 -0
  183. package/lib/components/list/list.styles.js +4 -0
  184. package/lib/components/list/list.styles.js.map +1 -0
  185. package/lib/components/list-item/list-item.js +25 -21
  186. package/lib/components/list-item/list-item.js.map +1 -0
  187. package/lib/components/list-item/list-item.styles.js +4 -0
  188. package/lib/components/list-item/list-item.styles.js.map +1 -0
  189. package/lib/components/loading-spinner/loading-spinner.js +126 -71
  190. package/lib/components/loading-spinner/loading-spinner.js.map +1 -0
  191. package/lib/components/loading-spinner/loading-spinner.styles.js +4 -0
  192. package/lib/components/loading-spinner/loading-spinner.styles.js.map +1 -0
  193. package/lib/components/logo/logo.js +28 -25
  194. package/lib/components/logo/logo.js.map +1 -0
  195. package/lib/components/logo/logo.styles.js +4 -0
  196. package/lib/components/logo/logo.styles.js.map +1 -0
  197. package/lib/components/main/main.js +29 -26
  198. package/lib/components/main/main.js.map +1 -0
  199. package/lib/components/main/main.styles.js +4 -0
  200. package/lib/components/main/main.styles.js.map +1 -0
  201. package/lib/components/modal/modal.js +174 -125
  202. package/lib/components/modal/modal.js.map +1 -0
  203. package/lib/components/modal/modal.styles.js +4 -0
  204. package/lib/components/modal/modal.styles.js.map +1 -0
  205. package/lib/components/multi-select/multi-select.js +300 -211
  206. package/lib/components/multi-select/multi-select.js.map +1 -0
  207. package/lib/components/multi-select/multi-select.styles.js +4 -0
  208. package/lib/components/multi-select/multi-select.styles.js.map +1 -0
  209. package/lib/components/nav-container/nav-container.js +19 -16
  210. package/lib/components/nav-container/nav-container.js.map +1 -0
  211. package/lib/components/nav-container/nav-container.styles.js +4 -0
  212. package/lib/components/nav-container/nav-container.styles.js.map +1 -0
  213. package/lib/components/page-header/page-header.js +36 -29
  214. package/lib/components/page-header/page-header.js.map +1 -0
  215. package/lib/components/page-header/page-header.styles.js +4 -0
  216. package/lib/components/page-header/page-header.styles.js.map +1 -0
  217. package/lib/components/pagination/page-counter/page-counter.js +67 -0
  218. package/lib/components/pagination/page-counter/page-counter.js.map +1 -0
  219. package/lib/components/pagination/page-counter/page-counter.styles.js +4 -0
  220. package/lib/components/pagination/page-counter/page-counter.styles.js.map +1 -0
  221. package/lib/components/pagination/pagination.js +282 -237
  222. package/lib/components/pagination/pagination.js.map +1 -0
  223. package/lib/components/pagination/pagination.styles.js +4 -0
  224. package/lib/components/pagination/pagination.styles.js.map +1 -0
  225. package/lib/components/percent-bar/percent-bar.js +56 -48
  226. package/lib/components/percent-bar/percent-bar.js.map +1 -0
  227. package/lib/components/percent-bar/percent-bar.styles.js +4 -0
  228. package/lib/components/percent-bar/percent-bar.styles.js.map +1 -0
  229. package/lib/components/popover/popover.js +304 -179
  230. package/lib/components/popover/popover.js.map +1 -0
  231. package/lib/components/popover/popover.styles.js +4 -0
  232. package/lib/components/popover/popover.styles.js.map +1 -0
  233. package/lib/components/primary-nav/primary-nav.js +44 -37
  234. package/lib/components/primary-nav/primary-nav.js.map +1 -0
  235. package/lib/components/primary-nav/primary-nav.styles.js +4 -0
  236. package/lib/components/primary-nav/primary-nav.styles.js.map +1 -0
  237. package/lib/components/primary-nav-item/primary-nav-item.js +151 -113
  238. package/lib/components/primary-nav-item/primary-nav-item.js.map +1 -0
  239. package/lib/components/primary-nav-item/primary-nav-item.styles.js +4 -0
  240. package/lib/components/primary-nav-item/primary-nav-item.styles.js.map +1 -0
  241. package/lib/components/progress-meter/progress-meter.js +74 -57
  242. package/lib/components/progress-meter/progress-meter.js.map +1 -0
  243. package/lib/components/progress-meter/progress-meter.styles.js +4 -0
  244. package/lib/components/progress-meter/progress-meter.styles.js.map +1 -0
  245. package/lib/components/progress-steps/progress-steps.js +19 -0
  246. package/lib/components/progress-steps/progress-steps.js.map +1 -0
  247. package/lib/components/progress-steps/progress-steps.styles.js +4 -0
  248. package/lib/components/progress-steps/progress-steps.styles.js.map +1 -0
  249. package/lib/components/progress-steps-item/progress-steps-item.js +52 -40
  250. package/lib/components/progress-steps-item/progress-steps-item.js.map +1 -0
  251. package/lib/components/progress-steps-item/progress-steps-item.styles.js +4 -0
  252. package/lib/components/progress-steps-item/progress-steps-item.styles.js.map +1 -0
  253. package/lib/components/radio-field/radio-field.js +59 -49
  254. package/lib/components/radio-field/radio-field.js.map +1 -0
  255. package/lib/components/radio-field/radio-field.styles.js +4 -0
  256. package/lib/components/radio-field/radio-field.styles.js.map +1 -0
  257. package/lib/components/radio-field-item/radio-field-item.js +222 -179
  258. package/lib/components/radio-field-item/radio-field-item.js.map +1 -0
  259. package/lib/components/radio-field-item/radio-field-item.styles.js +4 -0
  260. package/lib/components/radio-field-item/radio-field-item.styles.js.map +1 -0
  261. package/lib/components/remove-tag/remove-tag.js +89 -60
  262. package/lib/components/remove-tag/remove-tag.js.map +1 -0
  263. package/lib/components/remove-tag/remove-tag.styles.js +4 -0
  264. package/lib/components/remove-tag/remove-tag.styles.js.map +1 -0
  265. package/lib/components/section/section.js +46 -27
  266. package/lib/components/section/section.js.map +1 -0
  267. package/lib/components/section/section.styles.js +4 -0
  268. package/lib/components/section/section.styles.js.map +1 -0
  269. package/lib/components/select/select.js +243 -158
  270. package/lib/components/select/select.js.map +1 -0
  271. package/lib/components/select/select.styles.js +4 -0
  272. package/lib/components/select/select.styles.js.map +1 -0
  273. package/lib/components/select-tile/select-tile-checkbox-controller.js +60 -0
  274. package/lib/components/select-tile/select-tile-checkbox-controller.js.map +1 -0
  275. package/lib/components/select-tile/select-tile-radio-controller.js +167 -0
  276. package/lib/components/select-tile/select-tile-radio-controller.js.map +1 -0
  277. package/lib/components/select-tile/select-tile.js +228 -223
  278. package/lib/components/select-tile/select-tile.js.map +1 -0
  279. package/lib/components/select-tile/select-tile.styles.js +4 -0
  280. package/lib/components/select-tile/select-tile.styles.js.map +1 -0
  281. package/lib/components/select-tile-list/select-tile-list.js +76 -62
  282. package/lib/components/select-tile-list/select-tile-list.js.map +1 -0
  283. package/lib/components/select-tile-list/select-tile-list.styles.js +4 -0
  284. package/lib/components/select-tile-list/select-tile-list.styles.js.map +1 -0
  285. package/lib/components/skeleton-loader/skeleton-loader.js +68 -39
  286. package/lib/components/skeleton-loader/skeleton-loader.js.map +1 -0
  287. package/lib/components/skeleton-loader/skeleton-loader.styles.js +4 -0
  288. package/lib/components/skeleton-loader/skeleton-loader.styles.js.map +1 -0
  289. package/lib/components/split-button/split-button.js +51 -46
  290. package/lib/components/split-button/split-button.js.map +1 -0
  291. package/lib/components/split-button/split-button.styles.js +4 -0
  292. package/lib/components/split-button/split-button.styles.js.map +1 -0
  293. package/lib/components/submenu/submenu.js +19 -16
  294. package/lib/components/submenu/submenu.js.map +1 -0
  295. package/lib/components/submenu/submenu.styles.js +4 -0
  296. package/lib/components/submenu/submenu.styles.js.map +1 -0
  297. package/lib/components/submenu-item/submenu-item.js +32 -26
  298. package/lib/components/submenu-item/submenu-item.js.map +1 -0
  299. package/lib/components/submenu-item/submenu-item.styles.js +4 -0
  300. package/lib/components/submenu-item/submenu-item.styles.js.map +1 -0
  301. package/lib/components/tab/tab.js +74 -63
  302. package/lib/components/tab/tab.js.map +1 -0
  303. package/lib/components/tab/tab.styles.js +4 -0
  304. package/lib/components/tab/tab.styles.js.map +1 -0
  305. package/lib/components/tab-panel/tab-panel.js +49 -43
  306. package/lib/components/tab-panel/tab-panel.js.map +1 -0
  307. package/lib/components/tab-panel/tab-panel.styles.js +4 -0
  308. package/lib/components/tab-panel/tab-panel.styles.js.map +1 -0
  309. package/lib/components/table/table.js +46 -41
  310. package/lib/components/table/table.js.map +1 -0
  311. package/lib/components/table/table.styles.js +4 -0
  312. package/lib/components/table/table.styles.js.map +1 -0
  313. package/lib/components/table-body/table-body.js +20 -17
  314. package/lib/components/table-body/table-body.js.map +1 -0
  315. package/lib/components/table-body/table-body.styles.js +4 -0
  316. package/lib/components/table-body/table-body.styles.js.map +1 -0
  317. package/lib/components/table-cell/table-cell.js +39 -36
  318. package/lib/components/table-cell/table-cell.js.map +1 -0
  319. package/lib/components/table-cell/table-cell.styles.js +4 -0
  320. package/lib/components/table-cell/table-cell.styles.js.map +1 -0
  321. package/lib/components/table-header/table-header.js +20 -17
  322. package/lib/components/table-header/table-header.js.map +1 -0
  323. package/lib/components/table-header/table-header.styles.js +4 -0
  324. package/lib/components/table-header/table-header.styles.js.map +1 -0
  325. package/lib/components/table-header-cell/table-header-cell.js +35 -32
  326. package/lib/components/table-header-cell/table-header-cell.js.map +1 -0
  327. package/lib/components/table-header-cell/table-header-cell.styles.js +4 -0
  328. package/lib/components/table-header-cell/table-header-cell.styles.js.map +1 -0
  329. package/lib/components/table-object/table-object.js +21 -18
  330. package/lib/components/table-object/table-object.js.map +1 -0
  331. package/lib/components/table-object/table-object.styles.js +4 -0
  332. package/lib/components/table-object/table-object.styles.js.map +1 -0
  333. package/lib/components/table-row/table-row.js +76 -55
  334. package/lib/components/table-row/table-row.js.map +1 -0
  335. package/lib/components/table-row/table-row.styles.js +4 -0
  336. package/lib/components/table-row/table-row.styles.js.map +1 -0
  337. package/lib/components/tabs/tabs.js +452 -303
  338. package/lib/components/tabs/tabs.js.map +1 -0
  339. package/lib/components/tabs/tabs.styles.js +4 -0
  340. package/lib/components/tabs/tabs.styles.js.map +1 -0
  341. package/lib/components/tag/tag.js +236 -167
  342. package/lib/components/tag/tag.js.map +1 -0
  343. package/lib/components/tag/tag.styles.js +4 -0
  344. package/lib/components/tag/tag.styles.js.map +1 -0
  345. package/lib/components/tag-list/tag-list.js +40 -35
  346. package/lib/components/tag-list/tag-list.js.map +1 -0
  347. package/lib/components/tag-list/tag-list.styles.js +4 -0
  348. package/lib/components/tag-list/tag-list.styles.js.map +1 -0
  349. package/lib/components/tertiary-nav/tertiary-nav.js +40 -33
  350. package/lib/components/tertiary-nav/tertiary-nav.js.map +1 -0
  351. package/lib/components/tertiary-nav/tertiary-nav.styles.js +4 -0
  352. package/lib/components/tertiary-nav/tertiary-nav.styles.js.map +1 -0
  353. package/lib/components/tertiary-nav-item/tertiary-nav-item.js +52 -43
  354. package/lib/components/tertiary-nav-item/tertiary-nav-item.js.map +1 -0
  355. package/lib/components/tertiary-nav-item/tertiary-nav-item.styles.js +4 -0
  356. package/lib/components/tertiary-nav-item/tertiary-nav-item.styles.js.map +1 -0
  357. package/lib/components/text-link/text-link.js +45 -41
  358. package/lib/components/text-link/text-link.js.map +1 -0
  359. package/lib/components/text-link/text-link.styles.js +4 -0
  360. package/lib/components/text-link/text-link.styles.js.map +1 -0
  361. package/lib/components/text-passage/text-passage-light-dom.js +145 -0
  362. package/lib/components/text-passage/text-passage-light-dom.js.map +1 -0
  363. package/lib/components/text-passage/text-passage-light-dom.styles.js +4 -0
  364. package/lib/components/text-passage/text-passage-light-dom.styles.js.map +1 -0
  365. package/lib/components/text-passage/text-passage.js +72 -44
  366. package/lib/components/text-passage/text-passage.js.map +1 -0
  367. package/lib/components/text-passage/text-passage.styles.js +4 -0
  368. package/lib/components/text-passage/text-passage.styles.js.map +1 -0
  369. package/lib/components/tooltip/tooltip.js +278 -173
  370. package/lib/components/tooltip/tooltip.js.map +1 -0
  371. package/lib/components/tooltip/tooltip.styles.js +4 -0
  372. package/lib/components/tooltip/tooltip.styles.js.map +1 -0
  373. package/lib/components/utility-nav/utility-nav.js +40 -33
  374. package/lib/components/utility-nav/utility-nav.js.map +1 -0
  375. package/lib/components/utility-nav/utility-nav.styles.js +4 -0
  376. package/lib/components/utility-nav/utility-nav.styles.js.map +1 -0
  377. package/lib/components/utility-nav-item/utility-nav-item.js +70 -49
  378. package/lib/components/utility-nav-item/utility-nav-item.js.map +1 -0
  379. package/lib/components/utility-nav-item/utility-nav-item.styles.js +4 -0
  380. package/lib/components/utility-nav-item/utility-nav-item.styles.js.map +1 -0
  381. package/lib/design-tokens/brands/blue/css/tokens_blue.module.js +737 -0
  382. package/lib/design-tokens/brands/blue/css/tokens_blue.module.js.map +1 -0
  383. package/lib/design-tokens/brands/bolt/tokens_bolt.theme.js +756 -0
  384. package/lib/design-tokens/brands/bolt/tokens_bolt.theme.js.map +1 -0
  385. package/lib/design-tokens/brands/cre8/css/tokens_cre8.module.js +771 -0
  386. package/lib/design-tokens/brands/cre8/css/tokens_cre8.module.js.map +1 -0
  387. package/lib/design-tokens/brands/cre8-a2ui/css/tokens_cre8-a2ui.module.js +772 -0
  388. package/lib/design-tokens/brands/cre8-a2ui/css/tokens_cre8-a2ui.module.js.map +1 -0
  389. package/lib/design-tokens/brands/cre8-legacy/css/tokens_cre8-legacy.module.js +737 -0
  390. package/lib/design-tokens/brands/cre8-legacy/css/tokens_cre8-legacy.module.js.map +1 -0
  391. package/lib/design-tokens/brands/femmecubator/css/tokens_femmecubator2.module.js +983 -0
  392. package/lib/design-tokens/brands/femmecubator/css/tokens_femmecubator2.module.js.map +1 -0
  393. package/lib/design-tokens/brands/legacy/css/tokens_legacy.module.js +737 -0
  394. package/lib/design-tokens/brands/legacy/css/tokens_legacy.module.js.map +1 -0
  395. package/lib/design-tokens/brands/marketing/css/tokens_marketing.module.js +736 -0
  396. package/lib/design-tokens/brands/marketing/css/tokens_marketing.module.js.map +1 -0
  397. package/lib/design-tokens/brands/minimalist/css/tokens_minimalist.module.js +737 -0
  398. package/lib/design-tokens/brands/minimalist/css/tokens_minimalist.module.js.map +1 -0
  399. package/lib/design-tokens/brands/prisma/tokens_prisma.module.js +771 -0
  400. package/lib/design-tokens/brands/prisma/tokens_prisma.module.js.map +1 -0
  401. package/lib/design-tokens/brands/starbucks/tokens.module.js +552 -0
  402. package/lib/design-tokens/brands/starbucks/tokens.module.js.map +1 -0
  403. package/lib/design-tokens/brands/starbucks/tokens_starbucks.module.js +776 -0
  404. package/lib/design-tokens/brands/starbucks/tokens_starbucks.module.js.map +1 -0
  405. package/lib/design-tokens/brands copy/blue/css/tokens_blue.module.js +253 -0
  406. package/lib/design-tokens/brands copy/blue/css/tokens_blue.module.js.map +1 -0
  407. package/lib/design-tokens/core/scss/theming/head.module.js +6 -0
  408. package/lib/design-tokens/core/scss/theming/head.module.js.map +1 -0
  409. package/lib/design-tokens/tokens_netflix.theme.js +806 -0
  410. package/lib/design-tokens/tokens_netflix.theme.js.map +1 -0
  411. package/lib/directives/if-truthy.js +24 -0
  412. package/lib/directives/if-truthy.js.map +1 -0
  413. package/lib/directives/spread.js +29 -0
  414. package/lib/directives/spread.js.map +1 -0
  415. package/lib/index.js +84 -168
  416. package/lib/index.js.map +1 -0
  417. package/lib/scripts/convert-scss-to-ts.js +25 -0
  418. package/lib/scripts/convert-scss-to-ts.js.map +1 -0
  419. package/lib/scripts/extract-tokens.js +120 -0
  420. package/lib/scripts/extract-tokens.js.map +1 -0
  421. package/lib/scripts/generate-react-wrappers.js +229 -0
  422. package/lib/scripts/generate-react-wrappers.js.map +1 -0
  423. package/lib/scripts/generateWesparkleThemes.js +52 -0
  424. package/lib/scripts/generateWesparkleThemes.js.map +1 -0
  425. package/lib/toBeAccessible.js +18 -0
  426. package/lib/toBeAccessible.js.map +1 -0
  427. package/lib/utilities/is-mobile.js +10 -0
  428. package/lib/utilities/is-mobile.js.map +1 -0
  429. package/lib/utilities/story-helpers.js +14 -0
  430. package/lib/utilities/story-helpers.js.map +1 -0
  431. package/lib/vite.config.cdn.js +85 -0
  432. package/lib/vite.config.cdn.js.map +1 -0
  433. package/lib/vite.config.js +156 -0
  434. package/lib/vite.config.js.map +1 -0
  435. package/package.json +8 -9
@@ -0,0 +1,120 @@
1
+ #!/usr/bin/env node
2
+ import puppeteer from 'puppeteer';
3
+ // @ts-ignore: No types for 'css' package
4
+ import * as css from 'css'; // TODO: No @types/css found, so using 'any' where needed
5
+ import * as fs from 'fs/promises';
6
+ import * as path from 'path';
7
+ // OpenAI will be dynamically imported
8
+ // Launch headless browser, navigate to URL, and collect all CSS text (external + inline)
9
+ async function extractCssFromUrl(url) {
10
+ const browser = await puppeteer.launch();
11
+ const page = await browser.newPage();
12
+ await page.goto(url, { waitUntil: 'networkidle0' });
13
+ const cssText = await page.evaluate(async () => {
14
+ const links = Array.from(document.querySelectorAll('link[rel="stylesheet"]')).map(l => l.href);
15
+ const styles = Array.from(document.querySelectorAll('style')).map(s => s.innerHTML || '');
16
+ const fetched = await Promise.all(links.map(u => fetch(u).then(r => r.text()).catch(() => '')));
17
+ return [...styles, ...fetched].join('\n');
18
+ });
19
+ await browser.close();
20
+ return cssText;
21
+ }
22
+ function parseCss(cssText) {
23
+ // @ts-ignore: No types for 'css' package
24
+ const ast = css.parse(cssText);
25
+ const categories = {
26
+ colors: new Set(),
27
+ backgrounds: new Set(),
28
+ fontSizes: new Set(),
29
+ lineHeights: new Set(),
30
+ spacings: new Set(),
31
+ borderRadiuses: new Set(),
32
+ shadows: new Set(),
33
+ };
34
+ if (ast.stylesheet && ast.stylesheet.rules) {
35
+ for (const rule of ast.stylesheet.rules) {
36
+ if (rule.type !== 'rule' || !rule.declarations)
37
+ continue;
38
+ for (const decl of rule.declarations) {
39
+ if (decl.type !== 'declaration' || !decl.property || !decl.value)
40
+ continue;
41
+ const prop = decl.property;
42
+ const val = decl.value;
43
+ if (/^font-size$/.test(prop))
44
+ categories.fontSizes.add(val);
45
+ else if (/^line-height$/.test(prop))
46
+ categories.lineHeights.add(val);
47
+ else if (/margin|padding/.test(prop))
48
+ categories.spacings.add(val);
49
+ else if (/border-radius/.test(prop))
50
+ categories.borderRadiuses.add(val);
51
+ else if (/box-shadow/.test(prop))
52
+ categories.shadows.add(val);
53
+ else if (/^background(-color)?/.test(prop))
54
+ categories.backgrounds.add(val);
55
+ else if (/color/.test(prop))
56
+ categories.colors.add(val);
57
+ }
58
+ }
59
+ }
60
+ // Convert Sets to Arrays
61
+ const entries = Object.entries(categories).map(([k, set]) => [k, Array.from(set)]);
62
+ const result = Object.fromEntries(entries);
63
+ return {
64
+ colors: result.colors ?? [],
65
+ backgrounds: result.backgrounds ?? [],
66
+ fontSizes: result.fontSizes ?? [],
67
+ lineHeights: result.lineHeights ?? [],
68
+ spacings: result.spacings ?? [],
69
+ borderRadiuses: result.borderRadiuses ?? [],
70
+ shadows: result.shadows ?? [],
71
+ };
72
+ }
73
+ // Use OpenAI to map grouped values into CSS custom properties
74
+ async function generateTokensWithAI(groups) {
75
+ const systemMessage = `You are a **Brand Theming Assistant AI**. Your role is to generate a theme configuration for a web component library based on the design tokens provided in \`@cre8_dev/cre8-design-tokens\`. You will be given groups of raw CSS values (colors, font sizes, spacings, etc.) and you must output a CSS file containing a :root block with CSS custom properties using these tokens and ONLY these tokens.`;
76
+ const userPrompt = `Extracted values:\n` +
77
+ `Colors: ${groups.colors.join(', ')}\n` +
78
+ `Backgrounds: ${groups.backgrounds.join(', ')}\n` +
79
+ `Font sizes: ${groups.fontSizes.join(', ')}\n` +
80
+ `Line heights: ${groups.lineHeights.join(', ')}\n` +
81
+ `Spacings: ${groups.spacings.join(', ')}\n` +
82
+ `Border radiuses: ${groups.borderRadiuses.join(', ')}\n` +
83
+ `Shadows: ${groups.shadows.join(', ')}\n\n` +
84
+ `Please map each category to the appropriate CSS custom properties as defined in \`@cre8_dev/cre8-design-tokens\` and return a complete CSS snippet.`;
85
+ if (!process.env.OPENAI_API_KEY) {
86
+ console.error('Error: OPENAI_API_KEY environment variable is not set.');
87
+ process.exit(1);
88
+ }
89
+ // Dynamic import for ESM-only openai package
90
+ const { OpenAI } = await import('openai');
91
+ const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
92
+ const response = await client.chat.completions.create({
93
+ model: 'gpt-4.1',
94
+ messages: [
95
+ { role: 'system', content: systemMessage },
96
+ { role: 'user', content: userPrompt }
97
+ ]
98
+ });
99
+ return response.choices[0].message.content;
100
+ }
101
+ // Main execution
102
+ (async () => {
103
+ const url = process.argv[2];
104
+ if (!url) {
105
+ console.error('Usage: node extract-tokens.ts <url>');
106
+ process.exit(1);
107
+ }
108
+ console.log(`Extracting CSS from: ${url}`);
109
+ const cssText = await extractCssFromUrl(url);
110
+ console.log('Parsing and categorizing CSS values...');
111
+ const groups = parseCss(cssText);
112
+ console.log('Generating token file via AI...');
113
+ const tokensCss = await generateTokensWithAI(groups);
114
+ const outputPath = path.resolve(process.cwd(), 'tokens.css');
115
+ await fs.writeFile(outputPath, tokensCss, 'utf-8');
116
+ console.log(`Tokens file written to ${outputPath}`);
117
+ })();
118
+ // If you add this file as 'css.d.ts' in the same directory or in a types directory, it will suppress the error.
119
+ // declare module 'css';
120
+ //# sourceMappingURL=extract-tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-tokens.js","sourceRoot":"","sources":["../../scripts/extract-tokens.ts"],"names":[],"mappings":";AAEA,OAAO,SAAS,MAAM,WAAW,CAAC;AAClC,yCAAyC;AACzC,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC,CAAC,yDAAyD;AACrF,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,sCAAsC;AAEtC,yFAAyF;AACzF,KAAK,UAAU,iBAAiB,CAAC,GAAW;IAC1C,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,CAAC;IACzC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACrC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;QAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAqB,CAAC,IAAI,CAAC,CAAC;QACpH,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAsB,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QAChH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAC7D,CAAC;QACF,OAAO,CAAC,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACtB,OAAO,OAAO,CAAC;AACjB,CAAC;AAaD,SAAS,QAAQ,CAAC,OAAe;IAC/B,yCAAyC;IACzC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,UAAU,GAAG;QACjB,MAAM,EAAE,IAAI,GAAG,EAAU;QACzB,WAAW,EAAE,IAAI,GAAG,EAAU;QAC9B,SAAS,EAAE,IAAI,GAAG,EAAU;QAC5B,WAAW,EAAE,IAAI,GAAG,EAAU;QAC9B,QAAQ,EAAE,IAAI,GAAG,EAAU;QAC3B,cAAc,EAAE,IAAI,GAAG,EAAU;QACjC,OAAO,EAAE,IAAI,GAAG,EAAU;KAC3B,CAAC;IAEF,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY;gBAAE,SAAS;YACzD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACrC,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK;oBAAE,SAAS;gBAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;gBACvB,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;qBACvD,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;qBAChE,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;qBAC9D,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;qBACnE,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;qBACzD,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;qBACvE,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnF,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3C,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;QAC3B,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;QACrC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;QACjC,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;QACrC,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;QAC/B,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,EAAE;QAC3C,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;KAC9B,CAAC;AACJ,CAAC;AAED,8DAA8D;AAC9D,KAAK,UAAU,oBAAoB,CAAC,MAAsB;IACxD,MAAM,aAAa,GAAG,4YAA4Y,CAAC;IAEna,MAAM,UAAU,GAAG,qBAAqB;QACtC,WAAW,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QACvC,gBAAgB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QACjD,eAAe,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QAC9C,iBAAiB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QAClD,aAAa,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QAC3C,oBAAoB,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QACxD,YAAY,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;QAC3C,qJAAqJ,CAAC;IAExJ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,6CAA6C;IAC7C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QACpD,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE;YAC1C,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE;SACtC;KACF,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAiB,CAAC;AACvD,CAAC;AAED,iBAAiB;AACjB,CAAC,KAAK,IAAI,EAAE;IACV,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAE7C,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAEjC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAErD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;IAC7D,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAC;AACtD,CAAC,CAAC,EAAE,CAAC;AAEL,gHAAgH;AAChH,yBAAyB","sourcesContent":["#!/usr/bin/env node\n\nimport puppeteer from 'puppeteer';\n// @ts-ignore: No types for 'css' package\nimport * as css from 'css'; // TODO: No @types/css found, so using 'any' where needed\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\n// OpenAI will be dynamically imported\n\n// Launch headless browser, navigate to URL, and collect all CSS text (external + inline)\nasync function extractCssFromUrl(url: string): Promise<string>{\n const browser = await puppeteer.launch();\n const page = await browser.newPage();\n await page.goto(url, { waitUntil: 'networkidle0' });\n const cssText = await page.evaluate(async () => {\n const links = Array.from(document.querySelectorAll('link[rel=\"stylesheet\"]')).map(l => (l as HTMLLinkElement).href);\n const styles = Array.from(document.querySelectorAll('style')).map(s => (s as HTMLStyleElement).innerHTML || '');\n const fetched = await Promise.all(\n links.map(u => fetch(u).then(r => r.text()).catch(() => ''))\n );\n return [...styles, ...fetched].join('\\n');\n });\n await browser.close();\n return cssText;\n}\n\n// Parse CSS text and collect unique values by property category\ninterface CssTokenGroups {\n colors: string[];\n backgrounds: string[];\n fontSizes: string[];\n lineHeights: string[];\n spacings: string[];\n borderRadiuses: string[];\n shadows: string[];\n}\n\nfunction parseCss(cssText: string): CssTokenGroups {\n // @ts-ignore: No types for 'css' package\n const ast = css.parse(cssText);\n const categories = {\n colors: new Set<string>(),\n backgrounds: new Set<string>(),\n fontSizes: new Set<string>(),\n lineHeights: new Set<string>(),\n spacings: new Set<string>(),\n borderRadiuses: new Set<string>(),\n shadows: new Set<string>(),\n };\n\n if (ast.stylesheet && ast.stylesheet.rules) {\n for (const rule of ast.stylesheet.rules) {\n if (rule.type !== 'rule' || !rule.declarations) continue;\n for (const decl of rule.declarations) {\n if (decl.type !== 'declaration' || !decl.property || !decl.value) continue;\n const prop = decl.property;\n const val = decl.value;\n if (/^font-size$/.test(prop)) categories.fontSizes.add(val);\n else if (/^line-height$/.test(prop)) categories.lineHeights.add(val);\n else if (/margin|padding/.test(prop)) categories.spacings.add(val);\n else if (/border-radius/.test(prop)) categories.borderRadiuses.add(val);\n else if (/box-shadow/.test(prop)) categories.shadows.add(val);\n else if (/^background(-color)?/.test(prop)) categories.backgrounds.add(val);\n else if (/color/.test(prop)) categories.colors.add(val);\n }\n }\n }\n\n // Convert Sets to Arrays\n const entries = Object.entries(categories).map(([k, set]) => [k, Array.from(set)]);\n const result = Object.fromEntries(entries);\n return {\n colors: result.colors ?? [],\n backgrounds: result.backgrounds ?? [],\n fontSizes: result.fontSizes ?? [],\n lineHeights: result.lineHeights ?? [],\n spacings: result.spacings ?? [],\n borderRadiuses: result.borderRadiuses ?? [],\n shadows: result.shadows ?? [],\n };\n}\n\n// Use OpenAI to map grouped values into CSS custom properties\nasync function generateTokensWithAI(groups: CssTokenGroups): Promise<string> {\n const systemMessage = `You are a **Brand Theming Assistant AI**. Your role is to generate a theme configuration for a web component library based on the design tokens provided in \\`@cre8_dev/cre8-design-tokens\\`. You will be given groups of raw CSS values (colors, font sizes, spacings, etc.) and you must output a CSS file containing a :root block with CSS custom properties using these tokens and ONLY these tokens.`;\n\n const userPrompt = `Extracted values:\\n` +\n `Colors: ${groups.colors.join(', ')}\\n` +\n `Backgrounds: ${groups.backgrounds.join(', ')}\\n` +\n `Font sizes: ${groups.fontSizes.join(', ')}\\n` +\n `Line heights: ${groups.lineHeights.join(', ')}\\n` +\n `Spacings: ${groups.spacings.join(', ')}\\n` +\n `Border radiuses: ${groups.borderRadiuses.join(', ')}\\n` +\n `Shadows: ${groups.shadows.join(', ')}\\n\\n` +\n `Please map each category to the appropriate CSS custom properties as defined in \\`@cre8_dev/cre8-design-tokens\\` and return a complete CSS snippet.`;\n\n if (!process.env.OPENAI_API_KEY) {\n console.error('Error: OPENAI_API_KEY environment variable is not set.');\n process.exit(1);\n }\n // Dynamic import for ESM-only openai package\n const { OpenAI } = await import('openai');\n const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });\n const response = await client.chat.completions.create({\n model: 'gpt-4.1',\n messages: [\n { role: 'system', content: systemMessage },\n { role: 'user', content: userPrompt }\n ]\n });\n return response.choices[0].message.content as string;\n}\n\n// Main execution\n(async () => {\n const url = process.argv[2];\n if (!url) {\n console.error('Usage: node extract-tokens.ts <url>');\n process.exit(1);\n }\n\n console.log(`Extracting CSS from: ${url}`);\n const cssText = await extractCssFromUrl(url);\n\n console.log('Parsing and categorizing CSS values...');\n const groups = parseCss(cssText);\n\n console.log('Generating token file via AI...');\n const tokensCss = await generateTokensWithAI(groups);\n\n const outputPath = path.resolve(process.cwd(), 'tokens.css');\n await fs.writeFile(outputPath, tokensCss, 'utf-8');\n console.log(`Tokens file written to ${outputPath}`);\n})();\n\n// If you add this file as 'css.d.ts' in the same directory or in a types directory, it will suppress the error.\n// declare module 'css'; "]}
@@ -0,0 +1,229 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ /**
4
+ * Convert CEM v1 (modules/declarations) to the Tag[] format used by the generator.
5
+ */
6
+ function cemToTags(manifest) {
7
+ if (manifest.tags)
8
+ return manifest.tags;
9
+ if (!manifest.modules)
10
+ return [];
11
+ const tags = [];
12
+ for (const mod of manifest.modules) {
13
+ if (!mod.declarations)
14
+ continue;
15
+ for (const decl of mod.declarations) {
16
+ if (decl.kind === 'class' && decl.tagName && decl.customElement) {
17
+ tags.push({
18
+ name: decl.tagName,
19
+ path: './' + mod.path,
20
+ description: decl.description,
21
+ attributes: decl.attributes?.map(a => ({
22
+ ...a,
23
+ type: typeof a.type === 'object' && a.type !== null ? a.type.text : a.type,
24
+ })),
25
+ events: decl.events,
26
+ slots: decl.slots,
27
+ });
28
+ }
29
+ }
30
+ }
31
+ return tags;
32
+ }
33
+ function toPascalCase(str) {
34
+ return str
35
+ .split('-')
36
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
37
+ .join('');
38
+ }
39
+ function getReactPropType(type) {
40
+ if (!type)
41
+ return 'any';
42
+ // Handle truncated types (e.g., "... 5 more ...")
43
+ if (type.includes('...') && type.includes('more')) {
44
+ return 'string';
45
+ }
46
+ // Handle unknown/custom types that aren't standard
47
+ const unknownTypes = [
48
+ 'ChartTypeRegistry', 'CalendarModal', 'status', 'Color', 'Shape',
49
+ 'Cre8SelectOption', 'Cre8SelectOptionGroup', 'Chart'
50
+ ];
51
+ for (const unknownType of unknownTypes) {
52
+ if (type.includes(unknownType)) {
53
+ return 'any';
54
+ }
55
+ }
56
+ // Handle union types with only quoted strings
57
+ if (type.includes('|')) {
58
+ // Check if it's a valid union type (only strings, numbers, booleans, undefined, or quoted values)
59
+ const parts = type.split('|').map(p => p.trim());
60
+ const isValidUnion = parts.every(p => p === 'undefined' ||
61
+ p === 'string' ||
62
+ p === 'number' ||
63
+ p === 'boolean' ||
64
+ p.startsWith('"') ||
65
+ p === 'string | undefined' ||
66
+ p === 'number | undefined' ||
67
+ p === 'boolean | undefined');
68
+ if (isValidUnion) {
69
+ return type;
70
+ }
71
+ return 'any';
72
+ }
73
+ // Handle common types
74
+ switch (type.toLowerCase()) {
75
+ case 'string':
76
+ return 'string';
77
+ case 'number':
78
+ return 'number';
79
+ case 'boolean':
80
+ case 'boolean | undefined':
81
+ return 'boolean';
82
+ default:
83
+ // If it looks like a custom type (starts with capital letter), use any
84
+ if (/^[A-Z]/.test(type)) {
85
+ return 'any';
86
+ }
87
+ return type;
88
+ }
89
+ }
90
+ function toValidEventName(eventName) {
91
+ // Convert dots and dashes to camelCase
92
+ return eventName
93
+ .split(/[.-]/)
94
+ .map((part, index) => index === 0 ? part : part.charAt(0).toUpperCase() + part.slice(1))
95
+ .join('');
96
+ }
97
+ function generateReactWrapper(tag) {
98
+ const componentName = toPascalCase(tag.name);
99
+ const elementClassName = componentName;
100
+ const tagName = tag.name;
101
+ // Get the import path from the tag path
102
+ const importPath = tag.path
103
+ .replace('./components/', '')
104
+ .replace('.ts', '');
105
+ // Generate props interface
106
+ const propsLines = [];
107
+ if (tag.attributes) {
108
+ for (const attr of tag.attributes) {
109
+ const propName = attr.name.includes('-')
110
+ ? attr.name.replace(/-([a-z])/g, (_, c) => c.toUpperCase())
111
+ : attr.name;
112
+ const propType = getReactPropType(attr.type);
113
+ const description = attr.description ? ` /** ${attr.description.trim().replace(/\n/g, ' ')} */\n` : '';
114
+ propsLines.push(`${description} ${propName}?: ${propType};`);
115
+ }
116
+ }
117
+ // Add children prop for slots
118
+ if (tag.slots && tag.slots.length > 0) {
119
+ propsLines.push(' children?: React.ReactNode;');
120
+ }
121
+ // Generate event props
122
+ const eventProps = [];
123
+ if (tag.events) {
124
+ for (const event of tag.events) {
125
+ const validEventName = toValidEventName(event.name);
126
+ const eventPropName = 'on' + validEventName.charAt(0).toUpperCase() + validEventName.slice(1);
127
+ eventProps.push(` ${eventPropName}?: (event: CustomEvent) => void;`);
128
+ }
129
+ }
130
+ const allProps = [...propsLines, ...eventProps].join('\n');
131
+ // Generate the component
132
+ return `import { createComponent } from '@lit/react';
133
+ import { ${elementClassName} as ${elementClassName}Element } from '@tmorrow/cre8-wc/lib/components/${importPath}';
134
+ import React from 'react';
135
+
136
+ export interface ${componentName}Props {
137
+ ${allProps}
138
+ }
139
+
140
+ /**
141
+ * ${tag.description?.trim().split('\n')[0] || componentName + ' component'}
142
+ */
143
+ export const ${componentName} = createComponent({
144
+ react: React,
145
+ tagName: '${tagName}',
146
+ elementClass: ${elementClassName}Element,
147
+ ${tag.events && tag.events.length > 0 ? ` events: {
148
+ ${tag.events.map(e => {
149
+ const validEventName = toValidEventName(e.name);
150
+ const eventPropName = 'on' + validEventName.charAt(0).toUpperCase() + validEventName.slice(1);
151
+ return ` ${eventPropName}: '${e.name}'`;
152
+ }).join(',\n')}
153
+ }` : ''}
154
+ });
155
+
156
+ export default ${componentName};
157
+ `;
158
+ }
159
+ function generateIndexFile(tags) {
160
+ // Track which components are exported from which folder
161
+ const folderExports = new Map();
162
+ for (const tag of tags) {
163
+ if (!tag.name.startsWith('cre8-'))
164
+ continue;
165
+ const componentName = toPascalCase(tag.name);
166
+ const importPath = tag.path
167
+ .replace('./components/', '')
168
+ .replace('.ts', '');
169
+ const folderName = toPascalCase(importPath.split('/')[0]);
170
+ if (!folderExports.has(folderName)) {
171
+ folderExports.set(folderName, []);
172
+ }
173
+ folderExports.get(folderName).push(componentName);
174
+ }
175
+ const exports = [];
176
+ for (const [folderName, components] of folderExports) {
177
+ // Only export the main component (one matching folder name with Cre8 prefix)
178
+ const expectedName = 'Cre8' + folderName;
179
+ const mainComponent = components.find(c => c === expectedName) || components[0];
180
+ exports.push(`export { ${mainComponent} } from './components/${folderName}';`);
181
+ }
182
+ return `// Auto-generated React wrappers
183
+ ${exports.join('\n')}
184
+ `;
185
+ }
186
+ async function main() {
187
+ const manifestPath = path.join(process.cwd(), 'custom-elements.json');
188
+ const outputDir = path.join(process.cwd(), 'react-wrappers');
189
+ // Read manifest
190
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
191
+ // Create output directory
192
+ if (!fs.existsSync(outputDir)) {
193
+ fs.mkdirSync(outputDir, { recursive: true });
194
+ }
195
+ const componentsDir = path.join(outputDir, 'components');
196
+ if (!fs.existsSync(componentsDir)) {
197
+ fs.mkdirSync(componentsDir, { recursive: true });
198
+ }
199
+ // Convert manifest to tags format
200
+ const tags = cemToTags(manifest);
201
+ // Generate wrapper for each tag
202
+ const generatedComponents = [];
203
+ for (const tag of tags) {
204
+ if (!tag.name.startsWith('cre8-'))
205
+ continue;
206
+ const componentName = toPascalCase(tag.name);
207
+ const folderName = tag.path
208
+ .replace('./components/', '')
209
+ .replace('.ts', '')
210
+ .split('/')[0];
211
+ const componentDir = path.join(componentsDir, toPascalCase(folderName));
212
+ if (!fs.existsSync(componentDir)) {
213
+ fs.mkdirSync(componentDir, { recursive: true });
214
+ }
215
+ const wrapperCode = generateReactWrapper(tag);
216
+ const outputPath = path.join(componentDir, `${componentName}.tsx`);
217
+ fs.writeFileSync(outputPath, wrapperCode);
218
+ // Also create index.tsx
219
+ fs.writeFileSync(path.join(componentDir, 'index.tsx'), `export * from './${componentName}';\n`);
220
+ generatedComponents.push(componentName);
221
+ console.log(`Generated: ${componentName}`);
222
+ }
223
+ // Generate main index file
224
+ const indexContent = generateIndexFile(tags);
225
+ fs.writeFileSync(path.join(outputDir, 'index.ts'), indexContent);
226
+ console.log(`\nGenerated ${generatedComponents.length} React wrappers in ${outputDir}`);
227
+ }
228
+ main().catch(console.error);
229
+ //# sourceMappingURL=generate-react-wrappers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-react-wrappers.js","sourceRoot":"","sources":["../../scripts/generate-react-wrappers.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'fs';\nimport * as path from 'path';\n\ninterface Attribute {\n name: string;\n description?: string;\n type?: string;\n default?: string;\n}\n\ninterface Event {\n name: string;\n description?: string;\n}\n\ninterface Slot {\n name: string;\n description?: string;\n}\n\ninterface Tag {\n name: string;\n path: string;\n description?: string;\n attributes?: Attribute[];\n events?: Event[];\n slots?: Slot[];\n}\n\ninterface CustomElementsManifest {\n version?: string;\n schemaVersion?: string;\n tags?: Tag[];\n modules?: CemModule[];\n}\n\ninterface CemModule {\n kind: string;\n path: string;\n declarations?: CemDeclaration[];\n}\n\ninterface CemDeclaration {\n kind: string;\n name: string;\n tagName?: string;\n customElement?: boolean;\n description?: string;\n attributes?: Attribute[];\n events?: Event[];\n slots?: Slot[];\n}\n\n/**\n * Convert CEM v1 (modules/declarations) to the Tag[] format used by the generator.\n */\nfunction cemToTags(manifest: CustomElementsManifest): Tag[] {\n if (manifest.tags) return manifest.tags;\n if (!manifest.modules) return [];\n\n const tags: Tag[] = [];\n for (const mod of manifest.modules) {\n if (!mod.declarations) continue;\n for (const decl of mod.declarations) {\n if (decl.kind === 'class' && decl.tagName && decl.customElement) {\n tags.push({\n name: decl.tagName,\n path: './' + mod.path,\n description: decl.description,\n attributes: decl.attributes?.map(a => ({\n ...a,\n type: typeof a.type === 'object' && a.type !== null ? (a.type as any).text : a.type,\n })),\n events: decl.events,\n slots: decl.slots,\n });\n }\n }\n }\n return tags;\n}\n\nfunction toPascalCase(str: string): string {\n return str\n .split('-')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('');\n}\n\nfunction getReactPropType(type: string | undefined): string {\n if (!type) return 'any';\n\n // Handle truncated types (e.g., \"... 5 more ...\")\n if (type.includes('...') && type.includes('more')) {\n return 'string';\n }\n\n // Handle unknown/custom types that aren't standard\n const unknownTypes = [\n 'ChartTypeRegistry', 'CalendarModal', 'status', 'Color', 'Shape',\n 'Cre8SelectOption', 'Cre8SelectOptionGroup', 'Chart'\n ];\n for (const unknownType of unknownTypes) {\n if (type.includes(unknownType)) {\n return 'any';\n }\n }\n\n // Handle union types with only quoted strings\n if (type.includes('|')) {\n // Check if it's a valid union type (only strings, numbers, booleans, undefined, or quoted values)\n const parts = type.split('|').map(p => p.trim());\n const isValidUnion = parts.every(p =>\n p === 'undefined' ||\n p === 'string' ||\n p === 'number' ||\n p === 'boolean' ||\n p.startsWith('\"') ||\n p === 'string | undefined' ||\n p === 'number | undefined' ||\n p === 'boolean | undefined'\n );\n if (isValidUnion) {\n return type;\n }\n return 'any';\n }\n\n // Handle common types\n switch (type.toLowerCase()) {\n case 'string':\n return 'string';\n case 'number':\n return 'number';\n case 'boolean':\n case 'boolean | undefined':\n return 'boolean';\n default:\n // If it looks like a custom type (starts with capital letter), use any\n if (/^[A-Z]/.test(type)) {\n return 'any';\n }\n return type;\n }\n}\n\nfunction toValidEventName(eventName: string): string {\n // Convert dots and dashes to camelCase\n return eventName\n .split(/[.-]/)\n .map((part, index) =>\n index === 0 ? part : part.charAt(0).toUpperCase() + part.slice(1)\n )\n .join('');\n}\n\nfunction generateReactWrapper(tag: Tag): string {\n const componentName = toPascalCase(tag.name);\n const elementClassName = componentName;\n const tagName = tag.name;\n\n // Get the import path from the tag path\n const importPath = tag.path\n .replace('./components/', '')\n .replace('.ts', '');\n\n // Generate props interface\n const propsLines: string[] = [];\n\n if (tag.attributes) {\n for (const attr of tag.attributes) {\n const propName = attr.name.includes('-')\n ? attr.name.replace(/-([a-z])/g, (_, c) => c.toUpperCase())\n : attr.name;\n const propType = getReactPropType(attr.type);\n const description = attr.description ? ` /** ${attr.description.trim().replace(/\\n/g, ' ')} */\\n` : '';\n propsLines.push(`${description} ${propName}?: ${propType};`);\n }\n }\n\n // Add children prop for slots\n if (tag.slots && tag.slots.length > 0) {\n propsLines.push(' children?: React.ReactNode;');\n }\n\n // Generate event props\n const eventProps: string[] = [];\n if (tag.events) {\n for (const event of tag.events) {\n const validEventName = toValidEventName(event.name);\n const eventPropName = 'on' + validEventName.charAt(0).toUpperCase() + validEventName.slice(1);\n eventProps.push(` ${eventPropName}?: (event: CustomEvent) => void;`);\n }\n }\n\n const allProps = [...propsLines, ...eventProps].join('\\n');\n\n // Generate the component\n return `import { createComponent } from '@lit/react';\nimport { ${elementClassName} as ${elementClassName}Element } from '@tmorrow/cre8-wc/lib/components/${importPath}';\nimport React from 'react';\n\nexport interface ${componentName}Props {\n${allProps}\n}\n\n/**\n * ${tag.description?.trim().split('\\n')[0] || componentName + ' component'}\n */\nexport const ${componentName} = createComponent({\n react: React,\n tagName: '${tagName}',\n elementClass: ${elementClassName}Element,\n${tag.events && tag.events.length > 0 ? ` events: {\n${tag.events.map(e => {\n const validEventName = toValidEventName(e.name);\n const eventPropName = 'on' + validEventName.charAt(0).toUpperCase() + validEventName.slice(1);\n return ` ${eventPropName}: '${e.name}'`;\n }).join(',\\n')}\n }` : ''}\n});\n\nexport default ${componentName};\n`;\n}\n\nfunction generateIndexFile(tags: Tag[]): string {\n // Track which components are exported from which folder\n const folderExports = new Map<string, string[]>();\n\n for (const tag of tags) {\n if (!tag.name.startsWith('cre8-')) continue;\n\n const componentName = toPascalCase(tag.name);\n const importPath = tag.path\n .replace('./components/', '')\n .replace('.ts', '');\n const folderName = toPascalCase(importPath.split('/')[0]);\n\n if (!folderExports.has(folderName)) {\n folderExports.set(folderName, []);\n }\n folderExports.get(folderName)!.push(componentName);\n }\n\n const exports: string[] = [];\n for (const [folderName, components] of folderExports) {\n // Only export the main component (one matching folder name with Cre8 prefix)\n const expectedName = 'Cre8' + folderName;\n const mainComponent = components.find(c => c === expectedName) || components[0];\n exports.push(`export { ${mainComponent} } from './components/${folderName}';`);\n }\n\n return `// Auto-generated React wrappers\n${exports.join('\\n')}\n`;\n}\n\nasync function main() {\n const manifestPath = path.join(process.cwd(), 'custom-elements.json');\n const outputDir = path.join(process.cwd(), 'react-wrappers');\n\n // Read manifest\n const manifest: CustomElementsManifest = JSON.parse(\n fs.readFileSync(manifestPath, 'utf-8')\n );\n\n // Create output directory\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n\n const componentsDir = path.join(outputDir, 'components');\n if (!fs.existsSync(componentsDir)) {\n fs.mkdirSync(componentsDir, { recursive: true });\n }\n\n // Convert manifest to tags format\n const tags = cemToTags(manifest);\n\n // Generate wrapper for each tag\n const generatedComponents: string[] = [];\n\n for (const tag of tags) {\n if (!tag.name.startsWith('cre8-')) continue;\n\n const componentName = toPascalCase(tag.name);\n const folderName = tag.path\n .replace('./components/', '')\n .replace('.ts', '')\n .split('/')[0];\n\n const componentDir = path.join(componentsDir, toPascalCase(folderName));\n if (!fs.existsSync(componentDir)) {\n fs.mkdirSync(componentDir, { recursive: true });\n }\n\n const wrapperCode = generateReactWrapper(tag);\n const outputPath = path.join(componentDir, `${componentName}.tsx`);\n\n fs.writeFileSync(outputPath, wrapperCode);\n\n // Also create index.tsx\n fs.writeFileSync(\n path.join(componentDir, 'index.tsx'),\n `export * from './${componentName}';\\n`\n );\n\n generatedComponents.push(componentName);\n console.log(`Generated: ${componentName}`);\n }\n\n // Generate main index file\n const indexContent = generateIndexFile(tags);\n fs.writeFileSync(path.join(outputDir, 'index.ts'), indexContent);\n\n console.log(`\\nGenerated ${generatedComponents.length} React wrappers in ${outputDir}`);\n}\n\nmain().catch(console.error);\n"]}
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env node
2
+ import fs from 'fs';
3
+ import path from 'path';
4
+ import postcss from 'postcss';
5
+ // Helper to parse CSS variables into an object
6
+ function parseVars(css) {
7
+ const root = postcss.parse(css);
8
+ const vars = {};
9
+ root.walkDecls(function (decl) {
10
+ const prop = decl.prop.trim();
11
+ const val = decl.value.trim();
12
+ if (prop.startsWith('--')) {
13
+ vars[prop] = val;
14
+ }
15
+ });
16
+ return vars;
17
+ }
18
+ // Generate theme CSS by merging templateVars and overrideVars
19
+ function generateTheme(templateVars, overrideVars, themeName) {
20
+ const themeVars = {};
21
+ Object.keys(templateVars).forEach((prop) => {
22
+ // Map override key by stripping the "--cre8-" prefix
23
+ const overrideKey = prop.replace(/^--cre8-/, '--');
24
+ themeVars[prop] = overrideVars[overrideKey] ?? templateVars[prop];
25
+ });
26
+ let out = `/**\n * Generated ${themeName} Theme\n */\n\n:root {\n`;
27
+ Object.entries(themeVars).forEach(([prop, val]) => {
28
+ out += ` ${prop}: ${val};\n`;
29
+ });
30
+ out += `}\n`;
31
+ return out;
32
+ }
33
+ // Paths
34
+ const baseDir = path.resolve(__dirname, '..');
35
+ const templatePath = path.join(baseDir, 'tokens_brand.css');
36
+ const lightPath = path.join(baseDir, 'css-tokens', 'wesparkle-light-theme.css');
37
+ const darkPath = path.join(baseDir, 'css-tokens', 'wesparkle-dark-theme.css');
38
+ // Read source files
39
+ const templateCss = fs.readFileSync(templatePath, 'utf8');
40
+ const lightCss = fs.readFileSync(lightPath, 'utf8');
41
+ const darkCss = fs.readFileSync(darkPath, 'utf8');
42
+ const templateVars = parseVars(templateCss);
43
+ const lightOverride = parseVars(lightCss);
44
+ const darkOverride = parseVars(darkCss);
45
+ // Build new theme CSS
46
+ const newLightCss = generateTheme(templateVars, lightOverride, 'Wesparkle Light');
47
+ const newDarkCss = generateTheme(templateVars, darkOverride, 'Wesparkle Dark');
48
+ // Write back
49
+ fs.writeFileSync(lightPath, newLightCss, 'utf8');
50
+ fs.writeFileSync(darkPath, newDarkCss, 'utf8');
51
+ console.log('Wesparkle themes regenerated with all tokens.');
52
+ //# sourceMappingURL=generateWesparkleThemes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateWesparkleThemes.js","sourceRoot":"","sources":["../../scripts/generateWesparkleThemes.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\nimport fs from 'fs';\nimport path from 'path';\nimport postcss from 'postcss';\n\n// A map of CSS custom properties to their values\ntype Vars = Record<string, string>;\n\n// Helper to parse CSS variables into an object\nfunction parseVars(css: string): Vars {\n const root = postcss.parse(css);\n const vars: Vars = {};\n root.walkDecls(function(decl: { prop: string; value: string; }) {\n const prop = decl.prop.trim();\n const val = decl.value.trim();\n if (prop.startsWith('--')) {\n vars[prop] = val;\n }\n });\n return vars;\n}\n\n// Generate theme CSS by merging templateVars and overrideVars\nfunction generateTheme(templateVars: Vars, overrideVars: Vars, themeName: string): string {\n const themeVars: Vars = {};\n Object.keys(templateVars).forEach((prop) => {\n // Map override key by stripping the \"--cre8-\" prefix\n const overrideKey = prop.replace(/^--cre8-/, '--');\n themeVars[prop] = overrideVars[overrideKey] ?? templateVars[prop];\n });\n\n let out = `/**\\n * Generated ${themeName} Theme\\n */\\n\\n:root {\\n`;\n Object.entries(themeVars).forEach(([prop, val]) => {\n out += ` ${prop}: ${val};\\n`;\n });\n out += `}\\n`;\n return out;\n}\n\n// Paths\nconst baseDir = path.resolve(__dirname, '..');\nconst templatePath = path.join(baseDir, 'tokens_brand.css');\nconst lightPath = path.join(baseDir, 'css-tokens', 'wesparkle-light-theme.css');\nconst darkPath = path.join(baseDir, 'css-tokens', 'wesparkle-dark-theme.css');\n\n// Read source files\nconst templateCss = fs.readFileSync(templatePath, 'utf8');\nconst lightCss = fs.readFileSync(lightPath, 'utf8');\nconst darkCss = fs.readFileSync(darkPath, 'utf8');\n\nconst templateVars = parseVars(templateCss);\nconst lightOverride = parseVars(lightCss);\nconst darkOverride = parseVars(darkCss);\n\n// Build new theme CSS\nconst newLightCss = generateTheme(templateVars, lightOverride, 'Wesparkle Light');\nconst newDarkCss = generateTheme(templateVars, darkOverride, 'Wesparkle Dark');\n\n// Write back\nfs.writeFileSync(lightPath, newLightCss, 'utf8');\nfs.writeFileSync(darkPath, newDarkCss, 'utf8');\n\nconsole.log('Wesparkle themes regenerated with all tokens.'); "]}
@@ -0,0 +1,18 @@
1
+ /* eslint-disable @typescript-eslint/no-namespace */
2
+ import { expect } from '@jest/globals';
3
+ import { axe, toHaveNoViolations } from 'jest-axe';
4
+ const defaultAxeOptions = {
5
+ runOnly: {
6
+ type: 'tag',
7
+ // Note that although WCAG 2.1 is inclusive of WCAG 2.0 in their guidelines, axe-core currently
8
+ // still separates these tags so we must include them for coverage.
9
+ values: ['wcag2a', 'wcag2aa', 'wcag21a', 'wcag21aa'],
10
+ },
11
+ };
12
+ // axeOptions: https://github.com/dequelabs/axe-core/blob/master/doc/API.md#options-parameter
13
+ const toBeAccessible = async (html) => {
14
+ const results = await axe(html, { ...defaultAxeOptions, frameWaitTime: 10000 });
15
+ return toHaveNoViolations.toHaveNoViolations(results);
16
+ };
17
+ expect.extend({ toBeAccessible });
18
+ //# sourceMappingURL=toBeAccessible.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toBeAccessible.js","sourceRoot":"","sources":["../toBeAccessible.ts"],"names":[],"mappings":"AAAA,oDAAoD;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,GAAG,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnD,MAAM,iBAAiB,GAAG;IACtB,OAAO,EAAE;QACL,IAAI,EAAE,KAAc;QACxB,+FAA+F;QAC/F,mEAAmE;QAC/D,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC;KACvD;CACJ,CAAC;AAEF,6FAA6F;AAC7F,MAAM,cAAc,GAAG,KAAK,EAAE,IAAiB,EAAE,EAAE;IAC/C,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,iBAAiB,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;IAChF,OAAO,kBAAkB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-namespace */\n\nimport { expect } from '@jest/globals';\nimport { axe, toHaveNoViolations } from 'jest-axe';\n\nconst defaultAxeOptions = {\n runOnly: {\n type: 'tag' as const,\n // Note that although WCAG 2.1 is inclusive of WCAG 2.0 in their guidelines, axe-core currently\n // still separates these tags so we must include them for coverage.\n values: ['wcag2a', 'wcag2aa', 'wcag21a', 'wcag21aa'],\n },\n};\n\n// axeOptions: https://github.com/dequelabs/axe-core/blob/master/doc/API.md#options-parameter\nconst toBeAccessible = async (html: HTMLElement) => {\n const results = await axe(html, { ...defaultAxeOptions, frameWaitTime: 10000 });\n return toHaveNoViolations.toHaveNoViolations(results);\n};\n\nexpect.extend({ toBeAccessible });\n\n\ndeclare global {\n namespace jest {\n interface Matchers<R> {\n toBeAccessible(): R;\n }\n }\n}\n"]}
@@ -0,0 +1,10 @@
1
+ export const screenSizes = {
2
+ xsm: 375,
3
+ sm: 560,
4
+ md: 768,
5
+ lg: 960,
6
+ xl: 1200,
7
+ xxl: 1600,
8
+ };
9
+ export const isMobile = (screen = '768') => !window.matchMedia(`(min-width: ${screen}px)`).matches;
10
+ //# sourceMappingURL=is-mobile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-mobile.js","sourceRoot":"","sources":["../../utilities/is-mobile.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAEpB;IACA,GAAG,EAAE,GAAG;IACR,EAAE,EAAE,GAAG;IACP,EAAE,EAAE,GAAG;IACP,EAAE,EAAE,GAAG;IACP,EAAE,EAAE,IAAI;IACR,GAAG,EAAE,IAAI;CACZ,CAAC;AAGF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,MAAM,GAAG,KAAK,EAAW,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,MAAM,KAAK,CAAC,CAAC,OAAO,CAAC","sourcesContent":["export const screenSizes: {\n [key: string]: number;\n} = {\n xsm: 375,\n sm: 560,\n md: 768,\n lg: 960,\n xl: 1200,\n xxl: 1600,\n};\n\n\nexport const isMobile = (screen = '768'): boolean => !window.matchMedia(`(min-width: ${screen}px)`).matches;\n"]}
@@ -0,0 +1,14 @@
1
+ import sanitizeHtml from 'sanitize-html';
2
+ // Need to sanitize some fields we show in Storybook via `unsafeHTML` with user provided data
3
+ export const sanitizeInput = (value, ...extraAllowedTags) => sanitizeHtml(value, {
4
+ allowedTags: [...sanitizeHtml.defaults.allowedTags, ...extraAllowedTags],
5
+ allowedAttributes: false,
6
+ });
7
+ /**
8
+ * Adding this default export to satisfy the `import/prefer-default-export` eslint rule.
9
+ *
10
+ * Remove this once more functions are added to this file, OR
11
+ * rename this from `story-helpers.ts` if the only planned function is for sanitizeInput
12
+ */
13
+ export default sanitizeInput;
14
+ //# sourceMappingURL=story-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"story-helpers.js","sourceRoot":"","sources":["../../utilities/story-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AAEzC,6FAA6F;AAC7F,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAa,EAAE,GAAG,gBAA0B,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE;IAC/F,WAAW,EAAE,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,gBAAgB,CAAC;IACxE,iBAAiB,EAAE,KAAK;CAC3B,CAAC,CAAC;AAEH;;;;;GAKG;AACH,eAAe,aAAa,CAAC","sourcesContent":["import sanitizeHtml from 'sanitize-html';\n\n// Need to sanitize some fields we show in Storybook via `unsafeHTML` with user provided data\nexport const sanitizeInput = (value: string, ...extraAllowedTags: string[]) => sanitizeHtml(value, {\n allowedTags: [...sanitizeHtml.defaults.allowedTags, ...extraAllowedTags],\n allowedAttributes: false,\n});\n\n/**\n * Adding this default export to satisfy the `import/prefer-default-export` eslint rule.\n *\n * Remove this once more functions are added to this file, OR\n * rename this from `story-helpers.ts` if the only planned function is for sanitizeInput\n */\nexport default sanitizeInput;\n"]}
@@ -0,0 +1,85 @@
1
+ import { defineConfig } from 'vite';
2
+ import { resolve } from 'path';
3
+ /**
4
+ * CDN Build Configuration
5
+ *
6
+ * This configuration creates a bundled build suitable for CDN deployment.
7
+ * It bundles all dependencies (lit, lit-html, classnames, design tokens)
8
+ * into a single file that can be loaded via <script> tag.
9
+ *
10
+ * Usage:
11
+ * <script src="https://cdn.example.com/cre8-wc.min.js"></script>
12
+ * <!-- All cre8-* components are now available -->
13
+ * <cre8-button>Click me</cre8-button>
14
+ *
15
+ * Or as ES module:
16
+ * <script type="module" src="https://cdn.example.com/cre8-wc.esm.js"></script>
17
+ */
18
+ export default defineConfig({
19
+ build: {
20
+ lib: {
21
+ entry: resolve(__dirname, 'cdn-entry.ts'),
22
+ name: 'Cre8WC',
23
+ formats: ['es', 'iife'],
24
+ fileName: (format) => {
25
+ if (format === 'es')
26
+ return 'cre8-wc.esm.js';
27
+ if (format === 'iife')
28
+ return 'cre8-wc.min.js';
29
+ return `cre8-wc.${format}.js`;
30
+ },
31
+ },
32
+ outDir: 'cdn',
33
+ emptyOutDir: true,
34
+ minify: 'esbuild',
35
+ sourcemap: true,
36
+ rollupOptions: {
37
+ output: {
38
+ // Ensure all code is in one file
39
+ inlineDynamicImports: true,
40
+ // Global variable name for IIFE build
41
+ name: 'Cre8WC',
42
+ // Preserve exports for ES module build
43
+ exports: 'named',
44
+ assetFileNames: (assetInfo) => {
45
+ if (/\.(css|scss)$/.test(assetInfo.name)) {
46
+ return 'cre8-wc.css';
47
+ }
48
+ if (/\.(woff|woff2|eot|ttf|otf)$/.test(assetInfo.name)) {
49
+ return `fonts/[name].[ext]`;
50
+ }
51
+ return `assets/[name].[ext]`;
52
+ },
53
+ },
54
+ // Don't mark anything as external - bundle everything
55
+ external: [],
56
+ },
57
+ // Increase chunk size warning limit since we're bundling everything
58
+ chunkSizeWarningLimit: 2000,
59
+ copyPublicDir: false,
60
+ },
61
+ css: {
62
+ preprocessorOptions: {
63
+ scss: {
64
+ additionalData: `@import "./design-tokens/core/scss/theming/head.module.css";`,
65
+ includePaths: [
66
+ resolve(__dirname, 'node_modules/@tmorrow/cre8-design-tokens'),
67
+ resolve(__dirname, 'node_modules')
68
+ ]
69
+ }
70
+ }
71
+ },
72
+ resolve: {
73
+ extensions: ['.js', '.cjs', '.ts', '.jsx', '.tsx', '.scss', '.css', '.otf', '.ttf', '.yml']
74
+ },
75
+ esbuild: {
76
+ loader: 'ts',
77
+ include: /\.(ts|js)$/,
78
+ exclude: [],
79
+ },
80
+ define: {
81
+ // Ensure lit doesn't try to use dev mode in production
82
+ 'process.env.NODE_ENV': JSON.stringify('production'),
83
+ },
84
+ });
85
+ //# sourceMappingURL=vite.config.cdn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite.config.cdn.js","sourceRoot":"","sources":["../vite.config.cdn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B;;;;;;;;;;;;;;GAcG;AACH,eAAe,YAAY,CAAC;IAC1B,KAAK,EAAE;QACL,GAAG,EAAE;YACH,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC;YACzC,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;YACvB,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;gBACnB,IAAI,MAAM,KAAK,IAAI;oBAAE,OAAO,gBAAgB,CAAC;gBAC7C,IAAI,MAAM,KAAK,MAAM;oBAAE,OAAO,gBAAgB,CAAC;gBAC/C,OAAO,WAAW,MAAM,KAAK,CAAC;YAChC,CAAC;SACF;QACD,MAAM,EAAE,KAAK;QACb,WAAW,EAAE,IAAI;QACjB,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,IAAI;QACf,aAAa,EAAE;YACb,MAAM,EAAE;gBACN,iCAAiC;gBACjC,oBAAoB,EAAE,IAAI;gBAC1B,sCAAsC;gBACtC,IAAI,EAAE,QAAQ;gBACd,uCAAuC;gBACvC,OAAO,EAAE,OAAO;gBAChB,cAAc,EAAE,CAAC,SAAS,EAAE,EAAE;oBAC5B,IAAI,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAK,CAAC,EAAE,CAAC;wBAC1C,OAAO,aAAa,CAAC;oBACvB,CAAC;oBACD,IAAI,6BAA6B,CAAC,IAAI,CAAC,SAAS,CAAC,IAAK,CAAC,EAAE,CAAC;wBACxD,OAAO,oBAAoB,CAAC;oBAC9B,CAAC;oBACD,OAAO,qBAAqB,CAAC;gBAC/B,CAAC;aACF;YACD,sDAAsD;YACtD,QAAQ,EAAE,EAAE;SACb;QACD,oEAAoE;QACpE,qBAAqB,EAAE,IAAI;QAC3B,aAAa,EAAE,KAAK;KACrB;IACD,GAAG,EAAE;QACH,mBAAmB,EAAE;YACnB,IAAI,EAAE;gBACJ,cAAc,EAAE,8DAA8D;gBAC9E,YAAY,EAAE;oBACZ,OAAO,CAAC,SAAS,EAAE,0CAA0C,CAAC;oBAC9D,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC;iBACnC;aACF;SACF;KACF;IACD,OAAO,EAAE;QACP,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;KAC5F;IACD,OAAO,EAAE;QACP,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,YAAY;QACrB,OAAO,EAAE,EAAE;KACZ;IACD,MAAM,EAAE;QACN,uDAAuD;QACvD,sBAAsB,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;KACrD;CACF,CAAC,CAAC","sourcesContent":["import { defineConfig } from 'vite';\nimport { resolve } from 'path';\n\n/**\n * CDN Build Configuration\n *\n * This configuration creates a bundled build suitable for CDN deployment.\n * It bundles all dependencies (lit, lit-html, classnames, design tokens)\n * into a single file that can be loaded via <script> tag.\n *\n * Usage:\n * <script src=\"https://cdn.example.com/cre8-wc.min.js\"></script>\n * <!-- All cre8-* components are now available -->\n * <cre8-button>Click me</cre8-button>\n *\n * Or as ES module:\n * <script type=\"module\" src=\"https://cdn.example.com/cre8-wc.esm.js\"></script>\n */\nexport default defineConfig({\n build: {\n lib: {\n entry: resolve(__dirname, 'cdn-entry.ts'),\n name: 'Cre8WC',\n formats: ['es', 'iife'],\n fileName: (format) => {\n if (format === 'es') return 'cre8-wc.esm.js';\n if (format === 'iife') return 'cre8-wc.min.js';\n return `cre8-wc.${format}.js`;\n },\n },\n outDir: 'cdn',\n emptyOutDir: true,\n minify: 'esbuild',\n sourcemap: true,\n rollupOptions: {\n output: {\n // Ensure all code is in one file\n inlineDynamicImports: true,\n // Global variable name for IIFE build\n name: 'Cre8WC',\n // Preserve exports for ES module build\n exports: 'named',\n assetFileNames: (assetInfo) => {\n if (/\\.(css|scss)$/.test(assetInfo.name!)) {\n return 'cre8-wc.css';\n }\n if (/\\.(woff|woff2|eot|ttf|otf)$/.test(assetInfo.name!)) {\n return `fonts/[name].[ext]`;\n }\n return `assets/[name].[ext]`;\n },\n },\n // Don't mark anything as external - bundle everything\n external: [],\n },\n // Increase chunk size warning limit since we're bundling everything\n chunkSizeWarningLimit: 2000,\n copyPublicDir: false,\n },\n css: {\n preprocessorOptions: {\n scss: {\n additionalData: `@import \"./design-tokens/core/scss/theming/head.module.css\";`,\n includePaths: [\n resolve(__dirname, 'node_modules/@tmorrow/cre8-design-tokens'),\n resolve(__dirname, 'node_modules')\n ]\n }\n }\n },\n resolve: {\n extensions: ['.js', '.cjs', '.ts', '.jsx', '.tsx', '.scss', '.css', '.otf', '.ttf', '.yml']\n },\n esbuild: {\n loader: 'ts',\n include: /\\.(ts|js)$/,\n exclude: [],\n },\n define: {\n // Ensure lit doesn't try to use dev mode in production\n 'process.env.NODE_ENV': JSON.stringify('production'),\n },\n});\n"]}