@easemate/web-kit 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (358) hide show
  1. package/README.md +824 -0
  2. package/build/components/code/index.cjs +152 -0
  3. package/build/components/code/index.d.cts +11 -0
  4. package/build/components/code/index.d.ts +11 -0
  5. package/build/components/code/index.js +148 -0
  6. package/build/components/code/utils/highlight-api.cjs +18 -0
  7. package/build/components/code/utils/highlight-api.d.cts +7 -0
  8. package/build/components/code/utils/highlight-api.d.ts +7 -0
  9. package/build/components/code/utils/highlight-api.js +14 -0
  10. package/build/components/code/utils/syntax-grammars.cjs +62 -0
  11. package/build/components/code/utils/syntax-grammars.d.cts +7 -0
  12. package/build/components/code/utils/syntax-grammars.d.ts +7 -0
  13. package/build/components/code/utils/syntax-grammars.js +59 -0
  14. package/build/components/code/utils/syntax-highlighter-theme.cjs +27 -0
  15. package/build/components/code/utils/syntax-highlighter-theme.d.cts +3 -0
  16. package/build/components/code/utils/syntax-highlighter-theme.d.ts +3 -0
  17. package/build/components/code/utils/syntax-highlighter-theme.js +23 -0
  18. package/build/components/code/utils/syntax-highlighter-types.cjs +2 -0
  19. package/build/components/code/utils/syntax-highlighter-types.d.cts +12 -0
  20. package/build/components/code/utils/syntax-highlighter-types.d.ts +12 -0
  21. package/build/components/code/utils/syntax-highlighter-types.js +1 -0
  22. package/build/components/code/utils/syntax-tokenizer.cjs +63 -0
  23. package/build/components/code/utils/syntax-tokenizer.d.cts +3 -0
  24. package/build/components/code/utils/syntax-tokenizer.d.ts +3 -0
  25. package/build/components/code/utils/syntax-tokenizer.js +58 -0
  26. package/build/components/curve/bezier-conversion.cjs +23 -0
  27. package/build/components/curve/bezier-conversion.d.cts +2 -0
  28. package/build/components/curve/bezier-conversion.d.ts +2 -0
  29. package/build/components/curve/bezier-conversion.js +19 -0
  30. package/build/components/curve/canvas-controls.cjs +300 -0
  31. package/build/components/curve/canvas-controls.d.cts +12 -0
  32. package/build/components/curve/canvas-controls.d.ts +12 -0
  33. package/build/components/curve/canvas-controls.js +296 -0
  34. package/build/components/curve/canvas.cjs +1208 -0
  35. package/build/components/curve/canvas.d.cts +24 -0
  36. package/build/components/curve/canvas.d.ts +24 -0
  37. package/build/components/curve/canvas.js +1204 -0
  38. package/build/components/curve/constants.cjs +203 -0
  39. package/build/components/curve/constants.d.cts +23 -0
  40. package/build/components/curve/constants.d.ts +23 -0
  41. package/build/components/curve/constants.js +200 -0
  42. package/build/components/curve/controls.cjs +942 -0
  43. package/build/components/curve/controls.d.cts +37 -0
  44. package/build/components/curve/controls.d.ts +37 -0
  45. package/build/components/curve/controls.js +938 -0
  46. package/build/components/curve/index.cjs +335 -0
  47. package/build/components/curve/index.d.cts +31 -0
  48. package/build/components/curve/index.d.ts +31 -0
  49. package/build/components/curve/index.js +330 -0
  50. package/build/components/curve/output.cjs +141 -0
  51. package/build/components/curve/output.d.cts +19 -0
  52. package/build/components/curve/output.d.ts +19 -0
  53. package/build/components/curve/output.js +137 -0
  54. package/build/components/curve/styles.cjs +493 -0
  55. package/build/components/curve/styles.d.cts +6 -0
  56. package/build/components/curve/styles.d.ts +6 -0
  57. package/build/components/curve/styles.js +490 -0
  58. package/build/components/curve/svg-renderer.cjs +185 -0
  59. package/build/components/curve/svg-renderer.d.cts +9 -0
  60. package/build/components/curve/svg-renderer.d.ts +9 -0
  61. package/build/components/curve/svg-renderer.js +175 -0
  62. package/build/components/curve/toolbar.cjs +368 -0
  63. package/build/components/curve/toolbar.d.cts +26 -0
  64. package/build/components/curve/toolbar.d.ts +26 -0
  65. package/build/components/curve/toolbar.js +364 -0
  66. package/build/components/curve/types.cjs +10 -0
  67. package/build/components/curve/types.d.cts +33 -0
  68. package/build/components/curve/types.d.ts +33 -0
  69. package/build/components/curve/types.js +7 -0
  70. package/build/components/curve/utils.cjs +541 -0
  71. package/build/components/curve/utils.d.cts +33 -0
  72. package/build/components/curve/utils.d.ts +33 -0
  73. package/build/components/curve/utils.js +521 -0
  74. package/build/components/index.cjs +18 -0
  75. package/build/components/index.d.cts +2 -0
  76. package/build/components/index.d.ts +2 -0
  77. package/build/components/index.js +2 -0
  78. package/build/decorators/Component.cjs +127 -0
  79. package/build/decorators/Component.d.cts +28 -0
  80. package/build/decorators/Component.d.ts +28 -0
  81. package/build/decorators/Component.js +123 -0
  82. package/build/decorators/Listen.cjs +154 -0
  83. package/build/decorators/Listen.d.cts +18 -0
  84. package/build/decorators/Listen.d.ts +18 -0
  85. package/build/decorators/Listen.js +151 -0
  86. package/build/decorators/OutsideClick.cjs +64 -0
  87. package/build/decorators/OutsideClick.d.cts +16 -0
  88. package/build/decorators/OutsideClick.d.ts +16 -0
  89. package/build/decorators/OutsideClick.js +59 -0
  90. package/build/decorators/Prop.cjs +273 -0
  91. package/build/decorators/Prop.d.cts +22 -0
  92. package/build/decorators/Prop.d.ts +22 -0
  93. package/build/decorators/Prop.js +270 -0
  94. package/build/decorators/Query.cjs +79 -0
  95. package/build/decorators/Query.d.cts +27 -0
  96. package/build/decorators/Query.d.ts +27 -0
  97. package/build/decorators/Query.js +76 -0
  98. package/build/decorators/Watch.cjs +52 -0
  99. package/build/decorators/Watch.d.cts +11 -0
  100. package/build/decorators/Watch.d.ts +11 -0
  101. package/build/decorators/Watch.js +49 -0
  102. package/build/decorators/index.cjs +15 -0
  103. package/build/decorators/index.d.cts +6 -0
  104. package/build/decorators/index.d.ts +6 -0
  105. package/build/decorators/index.js +6 -0
  106. package/build/elements/button/index.cjs +214 -0
  107. package/build/elements/button/index.d.cts +11 -0
  108. package/build/elements/button/index.d.ts +11 -0
  109. package/build/elements/button/index.js +210 -0
  110. package/build/elements/checkbox/index.cjs +316 -0
  111. package/build/elements/checkbox/index.d.cts +14 -0
  112. package/build/elements/checkbox/index.d.ts +14 -0
  113. package/build/elements/checkbox/index.js +312 -0
  114. package/build/elements/color/index.cjs +154 -0
  115. package/build/elements/color/index.d.cts +18 -0
  116. package/build/elements/color/index.d.ts +18 -0
  117. package/build/elements/color/index.js +150 -0
  118. package/build/elements/color/picker.cjs +544 -0
  119. package/build/elements/color/picker.d.cts +37 -0
  120. package/build/elements/color/picker.d.ts +37 -0
  121. package/build/elements/color/picker.js +540 -0
  122. package/build/elements/color/utils.cjs +235 -0
  123. package/build/elements/color/utils.d.cts +37 -0
  124. package/build/elements/color/utils.d.ts +37 -0
  125. package/build/elements/color/utils.js +218 -0
  126. package/build/elements/dropdown/index.cjs +875 -0
  127. package/build/elements/dropdown/index.d.cts +30 -0
  128. package/build/elements/dropdown/index.d.ts +30 -0
  129. package/build/elements/dropdown/index.js +871 -0
  130. package/build/elements/field/index.cjs +82 -0
  131. package/build/elements/field/index.d.cts +4 -0
  132. package/build/elements/field/index.d.ts +4 -0
  133. package/build/elements/field/index.js +78 -0
  134. package/build/elements/icons/animation/chevron.cjs +57 -0
  135. package/build/elements/icons/animation/chevron.d.cts +10 -0
  136. package/build/elements/icons/animation/chevron.d.ts +10 -0
  137. package/build/elements/icons/animation/chevron.js +53 -0
  138. package/build/elements/icons/animation/clear.cjs +74 -0
  139. package/build/elements/icons/animation/clear.d.cts +3 -0
  140. package/build/elements/icons/animation/clear.d.ts +3 -0
  141. package/build/elements/icons/animation/clear.js +70 -0
  142. package/build/elements/icons/animation/grid.cjs +77 -0
  143. package/build/elements/icons/animation/grid.d.cts +8 -0
  144. package/build/elements/icons/animation/grid.d.ts +8 -0
  145. package/build/elements/icons/animation/grid.js +73 -0
  146. package/build/elements/icons/animation/loading.cjs +68 -0
  147. package/build/elements/icons/animation/loading.d.cts +3 -0
  148. package/build/elements/icons/animation/loading.d.ts +3 -0
  149. package/build/elements/icons/animation/loading.js +64 -0
  150. package/build/elements/icons/animation/snap.cjs +133 -0
  151. package/build/elements/icons/animation/snap.d.cts +8 -0
  152. package/build/elements/icons/animation/snap.d.ts +8 -0
  153. package/build/elements/icons/animation/snap.js +129 -0
  154. package/build/elements/icons/index.cjs +40 -0
  155. package/build/elements/icons/index.d.cts +24 -0
  156. package/build/elements/icons/index.d.ts +24 -0
  157. package/build/elements/icons/index.js +24 -0
  158. package/build/elements/icons/interface/anchor-add.cjs +35 -0
  159. package/build/elements/icons/interface/anchor-add.d.cts +3 -0
  160. package/build/elements/icons/interface/anchor-add.d.ts +3 -0
  161. package/build/elements/icons/interface/anchor-add.js +31 -0
  162. package/build/elements/icons/interface/anchor-remove.cjs +34 -0
  163. package/build/elements/icons/interface/anchor-remove.d.cts +3 -0
  164. package/build/elements/icons/interface/anchor-remove.d.ts +3 -0
  165. package/build/elements/icons/interface/anchor-remove.js +30 -0
  166. package/build/elements/icons/interface/arrow-up.cjs +30 -0
  167. package/build/elements/icons/interface/arrow-up.d.cts +3 -0
  168. package/build/elements/icons/interface/arrow-up.d.ts +3 -0
  169. package/build/elements/icons/interface/arrow-up.js +26 -0
  170. package/build/elements/icons/interface/arrows-vertical.cjs +30 -0
  171. package/build/elements/icons/interface/arrows-vertical.d.cts +3 -0
  172. package/build/elements/icons/interface/arrows-vertical.d.ts +3 -0
  173. package/build/elements/icons/interface/arrows-vertical.js +26 -0
  174. package/build/elements/icons/interface/bezier-angle.cjs +33 -0
  175. package/build/elements/icons/interface/bezier-angle.d.cts +3 -0
  176. package/build/elements/icons/interface/bezier-angle.d.ts +3 -0
  177. package/build/elements/icons/interface/bezier-angle.js +29 -0
  178. package/build/elements/icons/interface/bezier-distribute.cjs +34 -0
  179. package/build/elements/icons/interface/bezier-distribute.d.cts +3 -0
  180. package/build/elements/icons/interface/bezier-distribute.d.ts +3 -0
  181. package/build/elements/icons/interface/bezier-distribute.js +30 -0
  182. package/build/elements/icons/interface/bezier-length.cjs +31 -0
  183. package/build/elements/icons/interface/bezier-length.d.cts +3 -0
  184. package/build/elements/icons/interface/bezier-length.d.ts +3 -0
  185. package/build/elements/icons/interface/bezier-length.js +27 -0
  186. package/build/elements/icons/interface/bezier-mirror.cjs +31 -0
  187. package/build/elements/icons/interface/bezier-mirror.d.cts +3 -0
  188. package/build/elements/icons/interface/bezier-mirror.d.ts +3 -0
  189. package/build/elements/icons/interface/bezier-mirror.js +27 -0
  190. package/build/elements/icons/interface/bezier.cjs +26 -0
  191. package/build/elements/icons/interface/bezier.d.cts +3 -0
  192. package/build/elements/icons/interface/bezier.d.ts +3 -0
  193. package/build/elements/icons/interface/bezier.js +22 -0
  194. package/build/elements/icons/interface/check.cjs +30 -0
  195. package/build/elements/icons/interface/check.d.cts +3 -0
  196. package/build/elements/icons/interface/check.d.ts +3 -0
  197. package/build/elements/icons/interface/check.js +26 -0
  198. package/build/elements/icons/interface/circle-arrow-left.cjs +30 -0
  199. package/build/elements/icons/interface/circle-arrow-left.d.cts +3 -0
  200. package/build/elements/icons/interface/circle-arrow-left.d.ts +3 -0
  201. package/build/elements/icons/interface/circle-arrow-left.js +26 -0
  202. package/build/elements/icons/interface/circle-arrow-right.cjs +30 -0
  203. package/build/elements/icons/interface/circle-arrow-right.d.cts +3 -0
  204. package/build/elements/icons/interface/circle-arrow-right.d.ts +3 -0
  205. package/build/elements/icons/interface/circle-arrow-right.js +26 -0
  206. package/build/elements/icons/interface/code.cjs +30 -0
  207. package/build/elements/icons/interface/code.d.cts +3 -0
  208. package/build/elements/icons/interface/code.d.ts +3 -0
  209. package/build/elements/icons/interface/code.js +26 -0
  210. package/build/elements/icons/interface/dots.cjs +32 -0
  211. package/build/elements/icons/interface/dots.d.cts +3 -0
  212. package/build/elements/icons/interface/dots.d.ts +3 -0
  213. package/build/elements/icons/interface/dots.js +28 -0
  214. package/build/elements/icons/interface/mention.cjs +30 -0
  215. package/build/elements/icons/interface/mention.d.cts +3 -0
  216. package/build/elements/icons/interface/mention.d.ts +3 -0
  217. package/build/elements/icons/interface/mention.js +26 -0
  218. package/build/elements/icons/interface/minus.cjs +30 -0
  219. package/build/elements/icons/interface/minus.d.cts +3 -0
  220. package/build/elements/icons/interface/minus.d.ts +3 -0
  221. package/build/elements/icons/interface/minus.js +26 -0
  222. package/build/elements/icons/interface/picker.cjs +34 -0
  223. package/build/elements/icons/interface/picker.d.cts +3 -0
  224. package/build/elements/icons/interface/picker.d.ts +3 -0
  225. package/build/elements/icons/interface/picker.js +30 -0
  226. package/build/elements/icons/interface/plus.cjs +30 -0
  227. package/build/elements/icons/interface/plus.d.cts +3 -0
  228. package/build/elements/icons/interface/plus.d.ts +3 -0
  229. package/build/elements/icons/interface/plus.js +26 -0
  230. package/build/elements/icons/interface/settings.cjs +30 -0
  231. package/build/elements/icons/interface/settings.d.cts +3 -0
  232. package/build/elements/icons/interface/settings.d.ts +3 -0
  233. package/build/elements/icons/interface/settings.js +26 -0
  234. package/build/elements/index.cjs +62 -0
  235. package/build/elements/index.d.cts +22 -0
  236. package/build/elements/index.d.ts +22 -0
  237. package/build/elements/index.js +22 -0
  238. package/build/elements/input/index.cjs +273 -0
  239. package/build/elements/input/index.d.cts +17 -0
  240. package/build/elements/input/index.d.ts +17 -0
  241. package/build/elements/input/index.js +269 -0
  242. package/build/elements/logo/index.cjs +732 -0
  243. package/build/elements/logo/index.d.cts +17 -0
  244. package/build/elements/logo/index.d.ts +17 -0
  245. package/build/elements/logo/index.js +728 -0
  246. package/build/elements/monitor/fps.cjs +432 -0
  247. package/build/elements/monitor/fps.d.cts +21 -0
  248. package/build/elements/monitor/fps.d.ts +21 -0
  249. package/build/elements/monitor/fps.js +428 -0
  250. package/build/elements/monitor/index.cjs +670 -0
  251. package/build/elements/monitor/index.d.cts +112 -0
  252. package/build/elements/monitor/index.d.ts +112 -0
  253. package/build/elements/monitor/index.js +666 -0
  254. package/build/elements/number/index.cjs +173 -0
  255. package/build/elements/number/index.d.cts +19 -0
  256. package/build/elements/number/index.d.ts +19 -0
  257. package/build/elements/number/index.js +169 -0
  258. package/build/elements/origin/index.cjs +169 -0
  259. package/build/elements/origin/index.d.cts +12 -0
  260. package/build/elements/origin/index.d.ts +12 -0
  261. package/build/elements/origin/index.js +165 -0
  262. package/build/elements/popover/index.cjs +209 -0
  263. package/build/elements/popover/index.d.cts +19 -0
  264. package/build/elements/popover/index.d.ts +19 -0
  265. package/build/elements/popover/index.js +205 -0
  266. package/build/elements/radio/index.cjs +301 -0
  267. package/build/elements/radio/index.d.cts +13 -0
  268. package/build/elements/radio/index.d.ts +13 -0
  269. package/build/elements/radio/index.js +283 -0
  270. package/build/elements/radio/input.cjs +329 -0
  271. package/build/elements/radio/input.d.cts +15 -0
  272. package/build/elements/radio/input.d.ts +15 -0
  273. package/build/elements/radio/input.js +325 -0
  274. package/build/elements/radio/option.cjs +15 -0
  275. package/build/elements/radio/option.d.cts +3 -0
  276. package/build/elements/radio/option.d.ts +3 -0
  277. package/build/elements/radio/option.js +11 -0
  278. package/build/elements/shared.cjs +66 -0
  279. package/build/elements/shared.d.cts +40 -0
  280. package/build/elements/shared.d.ts +40 -0
  281. package/build/elements/shared.js +59 -0
  282. package/build/elements/slider/index.cjs +232 -0
  283. package/build/elements/slider/index.d.cts +20 -0
  284. package/build/elements/slider/index.d.ts +20 -0
  285. package/build/elements/slider/index.js +228 -0
  286. package/build/elements/state/index.cjs +681 -0
  287. package/build/elements/state/index.d.cts +86 -0
  288. package/build/elements/state/index.d.ts +86 -0
  289. package/build/elements/state/index.js +677 -0
  290. package/build/elements/toggle/index.cjs +151 -0
  291. package/build/elements/toggle/index.d.cts +9 -0
  292. package/build/elements/toggle/index.d.ts +9 -0
  293. package/build/elements/toggle/index.js +147 -0
  294. package/build/elements/tooltip/index.cjs +187 -0
  295. package/build/elements/tooltip/index.d.cts +17 -0
  296. package/build/elements/tooltip/index.d.ts +17 -0
  297. package/build/elements/tooltip/index.js +183 -0
  298. package/build/index.cjs +40 -0
  299. package/build/index.d.cts +6 -0
  300. package/build/index.d.ts +6 -0
  301. package/build/index.js +12 -0
  302. package/build/init.cjs +325 -0
  303. package/build/init.d.cts +157 -0
  304. package/build/init.d.ts +157 -0
  305. package/build/init.js +289 -0
  306. package/build/internal/component-loaders.cjs +206 -0
  307. package/build/internal/component-loaders.d.cts +52 -0
  308. package/build/internal/component-loaders.d.ts +52 -0
  309. package/build/internal/component-loaders.js +167 -0
  310. package/build/internal/fonts.cjs +128 -0
  311. package/build/internal/fonts.d.cts +32 -0
  312. package/build/internal/fonts.d.ts +32 -0
  313. package/build/internal/fonts.js +123 -0
  314. package/build/internal/lazy-load.cjs +89 -0
  315. package/build/internal/lazy-load.d.cts +32 -0
  316. package/build/internal/lazy-load.d.ts +32 -0
  317. package/build/internal/lazy-load.js +86 -0
  318. package/build/internal/style-inject.cjs +236 -0
  319. package/build/internal/style-inject.d.cts +44 -0
  320. package/build/internal/style-inject.d.ts +44 -0
  321. package/build/internal/style-inject.js +226 -0
  322. package/build/register.cjs +36 -0
  323. package/build/register.d.cts +32 -0
  324. package/build/register.d.ts +32 -0
  325. package/build/register.js +34 -0
  326. package/build/theme/index.cjs +452 -0
  327. package/build/theme/index.d.cts +146 -0
  328. package/build/theme/index.d.ts +146 -0
  329. package/build/theme/index.js +423 -0
  330. package/build/theme/presets.cjs +54 -0
  331. package/build/theme/presets.d.cts +19 -0
  332. package/build/theme/presets.d.ts +19 -0
  333. package/build/theme/presets.js +51 -0
  334. package/build/theme/registry.cjs +204 -0
  335. package/build/theme/registry.d.cts +99 -0
  336. package/build/theme/registry.d.ts +99 -0
  337. package/build/theme/registry.js +194 -0
  338. package/build/theme/tokens.cjs +148 -0
  339. package/build/theme/tokens.d.cts +163 -0
  340. package/build/theme/tokens.d.ts +163 -0
  341. package/build/theme/tokens.js +145 -0
  342. package/build/utils/dismiss-controller.cjs +77 -0
  343. package/build/utils/dismiss-controller.d.cts +14 -0
  344. package/build/utils/dismiss-controller.d.ts +14 -0
  345. package/build/utils/dismiss-controller.js +73 -0
  346. package/build/utils/index.cjs +18 -0
  347. package/build/utils/index.d.cts +3 -0
  348. package/build/utils/index.d.ts +3 -0
  349. package/build/utils/index.js +3 -0
  350. package/build/utils/outside-click.cjs +82 -0
  351. package/build/utils/outside-click.d.cts +18 -0
  352. package/build/utils/outside-click.d.ts +18 -0
  353. package/build/utils/outside-click.js +74 -0
  354. package/build/utils/template-helpers.cjs +39 -0
  355. package/build/utils/template-helpers.d.cts +13 -0
  356. package/build/utils/template-helpers.d.ts +13 -0
  357. package/build/utils/template-helpers.js +28 -0
  358. package/package.json +96 -0
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Main initialization API for @easemate/web-kit
3
+ */
4
+ import type { FontConfig } from "./internal/fonts.cjs";
5
+ import type { LazyLoadConfig } from "./internal/lazy-load.cjs";
6
+ import type { StylePreset } from "./internal/style-inject.cjs";
7
+ import { type ThemeInput } from "./theme/registry.cjs";
8
+ /**
9
+ * Theme mode configuration for light/dark switching.
10
+ */
11
+ export interface ThemeModeConfig {
12
+ /** Mode selection: 'light', 'dark', or 'system' for auto-switching */
13
+ mode: 'light' | 'dark' | 'system';
14
+ /** Theme to use in light mode */
15
+ light: ThemeInput;
16
+ /** Theme to use in dark mode */
17
+ dark: ThemeInput;
18
+ /** Persist user preference to localStorage */
19
+ persist?: {
20
+ key: string;
21
+ };
22
+ }
23
+ /**
24
+ * Style injection configuration.
25
+ */
26
+ export type StylesConfig = false | StylePreset | {
27
+ reset?: boolean;
28
+ base?: boolean;
29
+ };
30
+ /**
31
+ * Component replacement configuration.
32
+ * Keys are tag names, values are either:
33
+ * - A custom element constructor
34
+ * - A string tag name to alias to
35
+ */
36
+ export type ReplaceConfig = Record<string, CustomElementConstructor | string>;
37
+ /**
38
+ * initWebKit options.
39
+ */
40
+ export interface InitWebKitOptions {
41
+ /**
42
+ * Tags to include (register only these).
43
+ * If not provided, all components are registered.
44
+ */
45
+ include?: readonly string[];
46
+ /**
47
+ * Tags to exclude (register all except these).
48
+ * Ignored if `include` is provided.
49
+ */
50
+ exclude?: readonly string[];
51
+ /**
52
+ * Replace components with custom implementations.
53
+ * - Constructor: registers your class under the tag name
54
+ * - String: creates a bridge element that renders the aliased tag
55
+ */
56
+ replace?: ReplaceConfig;
57
+ /**
58
+ * Theme to apply.
59
+ * - String: registered theme name (e.g., 'default', 'dark')
60
+ * - WebKitThemeRef: theme reference from registerTheme()
61
+ * - ThemeConfig: inline theme configuration
62
+ * - ThemeModeConfig: light/dark mode configuration
63
+ */
64
+ theme?: ThemeInput | ThemeModeConfig;
65
+ /**
66
+ * Element to scope theme variables to (default: document.documentElement).
67
+ */
68
+ target?: HTMLElement;
69
+ /**
70
+ * Inject global styles.
71
+ * - false: no styles (default)
72
+ * - 'reset': minimal CSS reset
73
+ * - 'base': body/html dark theme styles
74
+ * - 'main': reset + base
75
+ * - { reset?: boolean; base?: boolean }: fine-grained control
76
+ */
77
+ styles?: StylesConfig;
78
+ /**
79
+ * Font loading configuration.
80
+ * - false: no font loading (default)
81
+ * - 'default': load default fonts (Instrument Sans, Geist Mono)
82
+ * - FontConfig: custom font configuration
83
+ */
84
+ fonts?: FontConfig | 'default' | false;
85
+ /**
86
+ * Enable lazy loading of components.
87
+ * - false: eager loading (default)
88
+ * - true: lazy load with default config
89
+ * - LazyLoadConfig: custom lazy load config
90
+ */
91
+ lazyLoad?: boolean | LazyLoadConfig;
92
+ /**
93
+ * CSP nonce for injected style/link elements.
94
+ */
95
+ cspNonce?: string;
96
+ /**
97
+ * Development mode options.
98
+ */
99
+ dev?: {
100
+ /** Warn about unknown tag names in include/exclude */
101
+ warnUnknownTags?: boolean;
102
+ /** Log component loads */
103
+ logLoads?: boolean;
104
+ };
105
+ }
106
+ /**
107
+ * Controller returned by initWebKit.
108
+ */
109
+ export interface WebKitController {
110
+ /** Cleanup all injected styles, fonts, and listeners */
111
+ dispose: () => void;
112
+ /** Theme controller (if theme was configured) */
113
+ theme?: {
114
+ /** Set theme by name or config */
115
+ set: (theme: ThemeInput) => void;
116
+ /** Set theme mode (only for ThemeModeConfig) */
117
+ mode?: (mode: 'light' | 'dark' | 'system') => void;
118
+ };
119
+ /** Promise that resolves when all components are loaded */
120
+ ready: Promise<void>;
121
+ }
122
+ /**
123
+ * Initialize the web-kit.
124
+ *
125
+ * @example
126
+ * ```ts
127
+ * // Basic usage - register all components with default theme
128
+ * initWebKit({ theme: 'default' });
129
+ *
130
+ * // Selective loading
131
+ * initWebKit({
132
+ * include: ['ease-button', 'ease-slider'],
133
+ * theme: 'default'
134
+ * });
135
+ *
136
+ * // With styles
137
+ * initWebKit({
138
+ * theme: 'default',
139
+ * styles: 'main',
140
+ * fonts: 'default'
141
+ * });
142
+ *
143
+ * // Light/dark mode
144
+ * initWebKit({
145
+ * theme: {
146
+ * mode: 'system',
147
+ * light: myLightTheme,
148
+ * dark: 'default'
149
+ * }
150
+ * });
151
+ * ```
152
+ */
153
+ export declare function initWebKit(options?: InitWebKitOptions): WebKitController;
154
+ export type { WebKitComponentTag, WebKitElementTag, WebKitTag } from "./internal/component-loaders.cjs";
155
+ export type { FontConfig, FontSource } from "./internal/fonts.cjs";
156
+ export type { LazyLoadConfig, LazyLoader } from "./internal/lazy-load.cjs";
157
+ export type { StylePreset } from "./internal/style-inject.cjs";
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Main initialization API for @easemate/web-kit
3
+ */
4
+ import type { FontConfig } from "./internal/fonts.js";
5
+ import type { LazyLoadConfig } from "./internal/lazy-load.js";
6
+ import type { StylePreset } from "./internal/style-inject.js";
7
+ import { type ThemeInput } from "./theme/registry.js";
8
+ /**
9
+ * Theme mode configuration for light/dark switching.
10
+ */
11
+ export interface ThemeModeConfig {
12
+ /** Mode selection: 'light', 'dark', or 'system' for auto-switching */
13
+ mode: 'light' | 'dark' | 'system';
14
+ /** Theme to use in light mode */
15
+ light: ThemeInput;
16
+ /** Theme to use in dark mode */
17
+ dark: ThemeInput;
18
+ /** Persist user preference to localStorage */
19
+ persist?: {
20
+ key: string;
21
+ };
22
+ }
23
+ /**
24
+ * Style injection configuration.
25
+ */
26
+ export type StylesConfig = false | StylePreset | {
27
+ reset?: boolean;
28
+ base?: boolean;
29
+ };
30
+ /**
31
+ * Component replacement configuration.
32
+ * Keys are tag names, values are either:
33
+ * - A custom element constructor
34
+ * - A string tag name to alias to
35
+ */
36
+ export type ReplaceConfig = Record<string, CustomElementConstructor | string>;
37
+ /**
38
+ * initWebKit options.
39
+ */
40
+ export interface InitWebKitOptions {
41
+ /**
42
+ * Tags to include (register only these).
43
+ * If not provided, all components are registered.
44
+ */
45
+ include?: readonly string[];
46
+ /**
47
+ * Tags to exclude (register all except these).
48
+ * Ignored if `include` is provided.
49
+ */
50
+ exclude?: readonly string[];
51
+ /**
52
+ * Replace components with custom implementations.
53
+ * - Constructor: registers your class under the tag name
54
+ * - String: creates a bridge element that renders the aliased tag
55
+ */
56
+ replace?: ReplaceConfig;
57
+ /**
58
+ * Theme to apply.
59
+ * - String: registered theme name (e.g., 'default', 'dark')
60
+ * - WebKitThemeRef: theme reference from registerTheme()
61
+ * - ThemeConfig: inline theme configuration
62
+ * - ThemeModeConfig: light/dark mode configuration
63
+ */
64
+ theme?: ThemeInput | ThemeModeConfig;
65
+ /**
66
+ * Element to scope theme variables to (default: document.documentElement).
67
+ */
68
+ target?: HTMLElement;
69
+ /**
70
+ * Inject global styles.
71
+ * - false: no styles (default)
72
+ * - 'reset': minimal CSS reset
73
+ * - 'base': body/html dark theme styles
74
+ * - 'main': reset + base
75
+ * - { reset?: boolean; base?: boolean }: fine-grained control
76
+ */
77
+ styles?: StylesConfig;
78
+ /**
79
+ * Font loading configuration.
80
+ * - false: no font loading (default)
81
+ * - 'default': load default fonts (Instrument Sans, Geist Mono)
82
+ * - FontConfig: custom font configuration
83
+ */
84
+ fonts?: FontConfig | 'default' | false;
85
+ /**
86
+ * Enable lazy loading of components.
87
+ * - false: eager loading (default)
88
+ * - true: lazy load with default config
89
+ * - LazyLoadConfig: custom lazy load config
90
+ */
91
+ lazyLoad?: boolean | LazyLoadConfig;
92
+ /**
93
+ * CSP nonce for injected style/link elements.
94
+ */
95
+ cspNonce?: string;
96
+ /**
97
+ * Development mode options.
98
+ */
99
+ dev?: {
100
+ /** Warn about unknown tag names in include/exclude */
101
+ warnUnknownTags?: boolean;
102
+ /** Log component loads */
103
+ logLoads?: boolean;
104
+ };
105
+ }
106
+ /**
107
+ * Controller returned by initWebKit.
108
+ */
109
+ export interface WebKitController {
110
+ /** Cleanup all injected styles, fonts, and listeners */
111
+ dispose: () => void;
112
+ /** Theme controller (if theme was configured) */
113
+ theme?: {
114
+ /** Set theme by name or config */
115
+ set: (theme: ThemeInput) => void;
116
+ /** Set theme mode (only for ThemeModeConfig) */
117
+ mode?: (mode: 'light' | 'dark' | 'system') => void;
118
+ };
119
+ /** Promise that resolves when all components are loaded */
120
+ ready: Promise<void>;
121
+ }
122
+ /**
123
+ * Initialize the web-kit.
124
+ *
125
+ * @example
126
+ * ```ts
127
+ * // Basic usage - register all components with default theme
128
+ * initWebKit({ theme: 'default' });
129
+ *
130
+ * // Selective loading
131
+ * initWebKit({
132
+ * include: ['ease-button', 'ease-slider'],
133
+ * theme: 'default'
134
+ * });
135
+ *
136
+ * // With styles
137
+ * initWebKit({
138
+ * theme: 'default',
139
+ * styles: 'main',
140
+ * fonts: 'default'
141
+ * });
142
+ *
143
+ * // Light/dark mode
144
+ * initWebKit({
145
+ * theme: {
146
+ * mode: 'system',
147
+ * light: myLightTheme,
148
+ * dark: 'default'
149
+ * }
150
+ * });
151
+ * ```
152
+ */
153
+ export declare function initWebKit(options?: InitWebKitOptions): WebKitController;
154
+ export type { WebKitComponentTag, WebKitElementTag, WebKitTag } from "./internal/component-loaders.js";
155
+ export type { FontConfig, FontSource } from "./internal/fonts.js";
156
+ export type { LazyLoadConfig, LazyLoader } from "./internal/lazy-load.js";
157
+ export type { StylePreset } from "./internal/style-inject.js";
package/build/init.js ADDED
@@ -0,0 +1,289 @@
1
+ /**
2
+ * Main initialization API for @easemate/web-kit
3
+ */
4
+ import { applyTheme, followSystemTheme } from "./theme/index.js";
5
+ import { getTheme, isThemeRef } from "./theme/registry.js";
6
+ // --------------------------
7
+ // Helpers
8
+ // --------------------------
9
+ const isBrowser = () => typeof document !== 'undefined' && typeof window !== 'undefined';
10
+ const isThemeModeConfig = (value) => {
11
+ if (typeof value !== 'object' || value === null) {
12
+ return false;
13
+ }
14
+ const obj = value;
15
+ return obj.mode !== undefined && (obj.light !== undefined || obj.dark !== undefined);
16
+ };
17
+ /**
18
+ * Register replacement components before loading built-in ones.
19
+ */
20
+ function registerReplacements(replace) {
21
+ if (!isBrowser()) {
22
+ return;
23
+ }
24
+ for (const [tag, replacement] of Object.entries(replace)) {
25
+ // Skip if already defined
26
+ if (customElements.get(tag)) {
27
+ continue;
28
+ }
29
+ if (typeof replacement === 'function') {
30
+ // Register custom constructor
31
+ customElements.define(tag, replacement);
32
+ }
33
+ else if (typeof replacement === 'string') {
34
+ // Create a bridge element that renders the aliased tag
35
+ const aliasTag = replacement;
36
+ class BridgeElement extends HTMLElement {
37
+ _inner = null;
38
+ connectedCallback() {
39
+ // Create the aliased element
40
+ this._inner = document.createElement(aliasTag);
41
+ // Copy attributes
42
+ for (const attr of this.attributes) {
43
+ this._inner.setAttribute(attr.name, attr.value);
44
+ }
45
+ // Move children
46
+ while (this.firstChild) {
47
+ this._inner.appendChild(this.firstChild);
48
+ }
49
+ // Use shadow DOM to contain the aliased element
50
+ const shadow = this.attachShadow({ mode: 'open' });
51
+ shadow.appendChild(this._inner);
52
+ }
53
+ disconnectedCallback() {
54
+ this._inner = null;
55
+ }
56
+ }
57
+ customElements.define(tag, BridgeElement);
58
+ }
59
+ }
60
+ }
61
+ /**
62
+ * Resolve and apply styles configuration.
63
+ */
64
+ async function applyStyles(styles, nonce) {
65
+ if (styles === false) {
66
+ return { dispose: () => { } };
67
+ }
68
+ const { injectPreset, removePreset } = await import("./internal/style-inject.js");
69
+ const injected = [];
70
+ if (typeof styles === 'string') {
71
+ injectPreset(styles, nonce);
72
+ injected.push(styles);
73
+ }
74
+ else if (typeof styles === 'object') {
75
+ if (styles.reset) {
76
+ injectPreset('reset', nonce);
77
+ injected.push('reset');
78
+ }
79
+ if (styles.base) {
80
+ injectPreset('base', nonce);
81
+ injected.push('base');
82
+ }
83
+ }
84
+ return {
85
+ dispose: () => {
86
+ for (const preset of injected) {
87
+ removePreset(preset);
88
+ }
89
+ }
90
+ };
91
+ }
92
+ /**
93
+ * Resolve and apply theme configuration.
94
+ */
95
+ function applyThemeConfig(theme, target) {
96
+ if (isThemeModeConfig(theme)) {
97
+ // Light/dark mode configuration
98
+ const lightConfig = getTheme(theme.light);
99
+ const darkConfig = getTheme(theme.dark);
100
+ if (theme.mode === 'system') {
101
+ const cleanup = followSystemTheme({ light: lightConfig, dark: darkConfig }, { element: target });
102
+ return {
103
+ dispose: cleanup,
104
+ controller: {
105
+ set: (t) => {
106
+ const config = getTheme(t);
107
+ applyTheme(config, { element: target });
108
+ },
109
+ mode: (m) => {
110
+ if (m === 'system') {
111
+ // Re-apply system theme
112
+ const systemMode = window.matchMedia('(prefers-color-scheme: light)').matches
113
+ ? 'light'
114
+ : 'dark';
115
+ const config = systemMode === 'light' ? lightConfig : darkConfig;
116
+ applyTheme(config, {
117
+ element: target,
118
+ name: systemMode,
119
+ colorScheme: systemMode
120
+ });
121
+ }
122
+ else {
123
+ const config = m === 'light' ? lightConfig : darkConfig;
124
+ applyTheme(config, {
125
+ element: target,
126
+ name: m,
127
+ colorScheme: m
128
+ });
129
+ }
130
+ }
131
+ }
132
+ };
133
+ }
134
+ // Fixed mode
135
+ const config = theme.mode === 'light' ? lightConfig : darkConfig;
136
+ applyTheme(config, {
137
+ element: target,
138
+ name: theme.mode,
139
+ colorScheme: theme.mode
140
+ });
141
+ return {
142
+ dispose: () => { },
143
+ controller: {
144
+ set: (t) => {
145
+ const resolvedConfig = getTheme(t);
146
+ applyTheme(resolvedConfig, { element: target });
147
+ }
148
+ }
149
+ };
150
+ }
151
+ // Simple theme (name, ref, or config)
152
+ const config = getTheme(theme);
153
+ const name = isThemeRef(theme) ? theme.name : typeof theme === 'string' ? theme : undefined;
154
+ applyTheme(config, {
155
+ element: target,
156
+ name,
157
+ colorScheme: 'dark'
158
+ });
159
+ return {
160
+ dispose: () => { },
161
+ controller: {
162
+ set: (t) => {
163
+ const resolvedConfig = getTheme(t);
164
+ const themeName = isThemeRef(t) ? t.name : typeof t === 'string' ? t : undefined;
165
+ applyTheme(resolvedConfig, { element: target, name: themeName });
166
+ }
167
+ }
168
+ };
169
+ }
170
+ // --------------------------
171
+ // Main API
172
+ // --------------------------
173
+ /**
174
+ * Initialize the web-kit.
175
+ *
176
+ * @example
177
+ * ```ts
178
+ * // Basic usage - register all components with default theme
179
+ * initWebKit({ theme: 'default' });
180
+ *
181
+ * // Selective loading
182
+ * initWebKit({
183
+ * include: ['ease-button', 'ease-slider'],
184
+ * theme: 'default'
185
+ * });
186
+ *
187
+ * // With styles
188
+ * initWebKit({
189
+ * theme: 'default',
190
+ * styles: 'main',
191
+ * fonts: 'default'
192
+ * });
193
+ *
194
+ * // Light/dark mode
195
+ * initWebKit({
196
+ * theme: {
197
+ * mode: 'system',
198
+ * light: myLightTheme,
199
+ * dark: 'default'
200
+ * }
201
+ * });
202
+ * ```
203
+ */
204
+ export function initWebKit(options = {}) {
205
+ // SSR safety - no-op on server
206
+ if (!isBrowser()) {
207
+ return {
208
+ dispose: () => { },
209
+ ready: Promise.resolve()
210
+ };
211
+ }
212
+ const { include, exclude, replace, theme, target, styles = false, fonts = false, lazyLoad = false, cspNonce, dev } = options;
213
+ const disposers = [];
214
+ // Controller object that will be populated
215
+ const controller = {
216
+ dispose: () => {
217
+ for (const dispose of disposers) {
218
+ dispose();
219
+ }
220
+ },
221
+ theme: undefined,
222
+ ready: Promise.resolve()
223
+ };
224
+ // Build the ready promise
225
+ const readyPromise = (async () => {
226
+ // 1. Register replacements first (before loading any components)
227
+ if (replace) {
228
+ registerReplacements(replace);
229
+ }
230
+ // 2. Apply styles
231
+ const stylesResult = await applyStyles(styles, cspNonce);
232
+ disposers.push(stylesResult.dispose);
233
+ // 3. Apply theme
234
+ if (theme) {
235
+ const themeResult = applyThemeConfig(theme, target);
236
+ disposers.push(themeResult.dispose);
237
+ controller.theme = themeResult.controller;
238
+ }
239
+ // 4. Load fonts
240
+ if (fonts !== false) {
241
+ const { injectFonts, removeFonts } = await import("./internal/fonts.js");
242
+ injectFonts(fonts);
243
+ const fontsToRemove = fonts;
244
+ disposers.push(() => removeFonts(fontsToRemove));
245
+ }
246
+ // 5. Load components
247
+ if (lazyLoad) {
248
+ // Lazy loading mode
249
+ const { createLazyLoader } = await import("./internal/lazy-load.js");
250
+ const lazyConfig = typeof lazyLoad === 'object' ? lazyLoad : {};
251
+ // Apply include/exclude to lazy loader
252
+ if (include) {
253
+ lazyConfig.include = include;
254
+ }
255
+ else if (exclude) {
256
+ lazyConfig.exclude = exclude;
257
+ }
258
+ const loader = createLazyLoader(lazyConfig);
259
+ disposers.push(loader.dispose);
260
+ }
261
+ else {
262
+ // Eager loading mode
263
+ const { loadAllComponents, loadComponents, resolveTags } = await import("./internal/component-loaders.js");
264
+ if (include || exclude) {
265
+ const tags = resolveTags({ include, exclude });
266
+ if (dev?.warnUnknownTags) {
267
+ const { WEB_KIT_ALL_TAGS } = await import("./internal/component-loaders.js");
268
+ const allTags = new Set(WEB_KIT_ALL_TAGS);
269
+ const unknown = (include ?? exclude ?? []).filter((t) => !allTags.has(t));
270
+ if (unknown.length > 0) {
271
+ console.warn('[web-kit] Unknown tags:', unknown);
272
+ }
273
+ }
274
+ if (dev?.logLoads) {
275
+ console.log('[web-kit] Loading components:', tags);
276
+ }
277
+ await loadComponents(tags);
278
+ }
279
+ else {
280
+ if (dev?.logLoads) {
281
+ console.log('[web-kit] Loading all components');
282
+ }
283
+ await loadAllComponents();
284
+ }
285
+ }
286
+ })();
287
+ controller.ready = readyPromise;
288
+ return controller;
289
+ }