@m3e/core 1.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (357) hide show
  1. package/LICENSE +22 -0
  2. package/NOTICE.md +8 -0
  3. package/README.md +59 -0
  4. package/cem.config.mjs +16 -0
  5. package/demo/index.html +58 -0
  6. package/dist/a11y.js +1431 -0
  7. package/dist/a11y.js.map +1 -0
  8. package/dist/a11y.min.js +87 -0
  9. package/dist/a11y.min.js.map +1 -0
  10. package/dist/anchoring.js +1748 -0
  11. package/dist/anchoring.js.map +1 -0
  12. package/dist/anchoring.min.js +7 -0
  13. package/dist/anchoring.min.js.map +1 -0
  14. package/dist/bidi.js +106 -0
  15. package/dist/bidi.js.map +1 -0
  16. package/dist/bidi.min.js +16 -0
  17. package/dist/bidi.min.js.map +1 -0
  18. package/dist/css-custom-data.json +257 -0
  19. package/dist/custom-elements.json +13504 -0
  20. package/dist/html-custom-data.json +199 -0
  21. package/dist/index.js +4342 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/index.min.js +520 -0
  24. package/dist/index.min.js.map +1 -0
  25. package/dist/layout.js +64 -0
  26. package/dist/layout.js.map +1 -0
  27. package/dist/layout.min.js +15 -0
  28. package/dist/layout.min.js.map +1 -0
  29. package/dist/platform.js +56 -0
  30. package/dist/platform.js.map +1 -0
  31. package/dist/platform.min.js +15 -0
  32. package/dist/platform.min.js.map +1 -0
  33. package/dist/src/a11y/AriaDescriber.d.ts +31 -0
  34. package/dist/src/a11y/AriaDescriber.d.ts.map +1 -0
  35. package/dist/src/a11y/FocusTrapElement.d.ts +25 -0
  36. package/dist/src/a11y/FocusTrapElement.d.ts.map +1 -0
  37. package/dist/src/a11y/InteractivityChecker.d.ts +22 -0
  38. package/dist/src/a11y/InteractivityChecker.d.ts.map +1 -0
  39. package/dist/src/a11y/LiveAnnouncer.d.ts +56 -0
  40. package/dist/src/a11y/LiveAnnouncer.d.ts.map +1 -0
  41. package/dist/src/a11y/aria-reference.d.ts +30 -0
  42. package/dist/src/a11y/aria-reference.d.ts.map +1 -0
  43. package/dist/src/a11y/index.d.ts +8 -0
  44. package/dist/src/a11y/index.d.ts.map +1 -0
  45. package/dist/src/a11y/keycodes/KeyCode.d.ts +118 -0
  46. package/dist/src/a11y/keycodes/KeyCode.d.ts.map +1 -0
  47. package/dist/src/a11y/keycodes/ModifierKeys.d.ts +5 -0
  48. package/dist/src/a11y/keycodes/ModifierKeys.d.ts.map +1 -0
  49. package/dist/src/a11y/keycodes/getKeyCode.d.ts +7 -0
  50. package/dist/src/a11y/keycodes/getKeyCode.d.ts.map +1 -0
  51. package/dist/src/a11y/keycodes/hasModifierKey.d.ts +9 -0
  52. package/dist/src/a11y/keycodes/hasModifierKey.d.ts.map +1 -0
  53. package/dist/src/a11y/keycodes/index.d.ts +6 -0
  54. package/dist/src/a11y/keycodes/index.d.ts.map +1 -0
  55. package/dist/src/a11y/keycodes/isModifierAllowed.d.ts +9 -0
  56. package/dist/src/a11y/keycodes/isModifierAllowed.d.ts.map +1 -0
  57. package/dist/src/a11y/list-key/FocusKeyManager.d.ts +17 -0
  58. package/dist/src/a11y/list-key/FocusKeyManager.d.ts.map +1 -0
  59. package/dist/src/a11y/list-key/ListKeyManager.d.ts +114 -0
  60. package/dist/src/a11y/list-key/ListKeyManager.d.ts.map +1 -0
  61. package/dist/src/a11y/list-key/ListManager.d.ts +37 -0
  62. package/dist/src/a11y/list-key/ListManager.d.ts.map +1 -0
  63. package/dist/src/a11y/list-key/RadioKeyManager.d.ts +20 -0
  64. package/dist/src/a11y/list-key/RadioKeyManager.d.ts.map +1 -0
  65. package/dist/src/a11y/list-key/RovingTabIndexManager.d.ts +22 -0
  66. package/dist/src/a11y/list-key/RovingTabIndexManager.d.ts.map +1 -0
  67. package/dist/src/a11y/list-key/SelectionManager.d.ts +46 -0
  68. package/dist/src/a11y/list-key/SelectionManager.d.ts.map +1 -0
  69. package/dist/src/a11y/list-key/Typeahead.d.ts +64 -0
  70. package/dist/src/a11y/list-key/Typeahead.d.ts.map +1 -0
  71. package/dist/src/a11y/list-key/index.d.ts +8 -0
  72. package/dist/src/a11y/list-key/index.d.ts.map +1 -0
  73. package/dist/src/a11y/visuallyHide.d.ts +6 -0
  74. package/dist/src/a11y/visuallyHide.d.ts.map +1 -0
  75. package/dist/src/anchoring/AnchorOptions.d.ts +15 -0
  76. package/dist/src/anchoring/AnchorOptions.d.ts.map +1 -0
  77. package/dist/src/anchoring/AnchorPosition.d.ts +3 -0
  78. package/dist/src/anchoring/AnchorPosition.d.ts.map +1 -0
  79. package/dist/src/anchoring/index.d.ts +4 -0
  80. package/dist/src/anchoring/index.d.ts.map +1 -0
  81. package/dist/src/anchoring/positionAnchor.d.ts +12 -0
  82. package/dist/src/anchoring/positionAnchor.d.ts.map +1 -0
  83. package/dist/src/bidi/Directionality.d.ts +27 -0
  84. package/dist/src/bidi/Directionality.d.ts.map +1 -0
  85. package/dist/src/bidi/index.d.ts +2 -0
  86. package/dist/src/bidi/index.d.ts.map +1 -0
  87. package/dist/src/index.d.ts +2 -0
  88. package/dist/src/index.d.ts.map +1 -0
  89. package/dist/src/layout/Breakpoint.d.ts +26 -0
  90. package/dist/src/layout/Breakpoint.d.ts.map +1 -0
  91. package/dist/src/layout/BreakpointObserver.d.ts +18 -0
  92. package/dist/src/layout/BreakpointObserver.d.ts.map +1 -0
  93. package/dist/src/layout/index.d.ts +3 -0
  94. package/dist/src/layout/index.d.ts.map +1 -0
  95. package/dist/src/platform/Platform.d.ts +34 -0
  96. package/dist/src/platform/Platform.d.ts.map +1 -0
  97. package/dist/src/platform/index.d.ts +2 -0
  98. package/dist/src/platform/index.d.ts.map +1 -0
  99. package/dist/src/shared/controllers/FocusController.d.ts +30 -0
  100. package/dist/src/shared/controllers/FocusController.d.ts.map +1 -0
  101. package/dist/src/shared/controllers/HoverController.d.ts +40 -0
  102. package/dist/src/shared/controllers/HoverController.d.ts.map +1 -0
  103. package/dist/src/shared/controllers/IntersectionController.d.ts +40 -0
  104. package/dist/src/shared/controllers/IntersectionController.d.ts.map +1 -0
  105. package/dist/src/shared/controllers/LongPressController.d.ts +32 -0
  106. package/dist/src/shared/controllers/LongPressController.d.ts.map +1 -0
  107. package/dist/src/shared/controllers/MonitorControllerBase.d.ts +62 -0
  108. package/dist/src/shared/controllers/MonitorControllerBase.d.ts.map +1 -0
  109. package/dist/src/shared/controllers/MutationController.d.ts +37 -0
  110. package/dist/src/shared/controllers/MutationController.d.ts.map +1 -0
  111. package/dist/src/shared/controllers/PressedController.d.ts +45 -0
  112. package/dist/src/shared/controllers/PressedController.d.ts.map +1 -0
  113. package/dist/src/shared/controllers/ResizeController.d.ts +40 -0
  114. package/dist/src/shared/controllers/ResizeController.d.ts.map +1 -0
  115. package/dist/src/shared/controllers/ScrollController.d.ts +34 -0
  116. package/dist/src/shared/controllers/ScrollController.d.ts.map +1 -0
  117. package/dist/src/shared/controllers/index.d.ts +9 -0
  118. package/dist/src/shared/controllers/index.d.ts.map +1 -0
  119. package/dist/src/shared/decorators/debounce.d.ts +7 -0
  120. package/dist/src/shared/decorators/debounce.d.ts.map +1 -0
  121. package/dist/src/shared/decorators/index.d.ts +2 -0
  122. package/dist/src/shared/decorators/index.d.ts.map +1 -0
  123. package/dist/src/shared/directives/index.d.ts +2 -0
  124. package/dist/src/shared/directives/index.d.ts.map +1 -0
  125. package/dist/src/shared/directives/safeStyleMap.d.ts +44 -0
  126. package/dist/src/shared/directives/safeStyleMap.d.ts.map +1 -0
  127. package/dist/src/shared/index.d.ts +8 -0
  128. package/dist/src/shared/index.d.ts.map +1 -0
  129. package/dist/src/shared/mixins/AttachInternals.d.ts +24 -0
  130. package/dist/src/shared/mixins/AttachInternals.d.ts.map +1 -0
  131. package/dist/src/shared/mixins/Checked.d.ts +24 -0
  132. package/dist/src/shared/mixins/Checked.d.ts.map +1 -0
  133. package/dist/src/shared/mixins/CheckedIndeterminate.d.ts +25 -0
  134. package/dist/src/shared/mixins/CheckedIndeterminate.d.ts.map +1 -0
  135. package/dist/src/shared/mixins/CheckedOrSelected.d.ts +23 -0
  136. package/dist/src/shared/mixins/CheckedOrSelected.d.ts.map +1 -0
  137. package/dist/src/shared/mixins/ConstraintValidation.d.ts +48 -0
  138. package/dist/src/shared/mixins/ConstraintValidation.d.ts.map +1 -0
  139. package/dist/src/shared/mixins/Constructor.d.ts +3 -0
  140. package/dist/src/shared/mixins/Constructor.d.ts.map +1 -0
  141. package/dist/src/shared/mixins/Dirty.d.ts +27 -0
  142. package/dist/src/shared/mixins/Dirty.d.ts.map +1 -0
  143. package/dist/src/shared/mixins/Disabled.d.ts +25 -0
  144. package/dist/src/shared/mixins/Disabled.d.ts.map +1 -0
  145. package/dist/src/shared/mixins/DisabledInteractive.d.ts +25 -0
  146. package/dist/src/shared/mixins/DisabledInteractive.d.ts.map +1 -0
  147. package/dist/src/shared/mixins/EventAttribute.d.ts +11 -0
  148. package/dist/src/shared/mixins/EventAttribute.d.ts.map +1 -0
  149. package/dist/src/shared/mixins/Focusable.d.ts +11 -0
  150. package/dist/src/shared/mixins/Focusable.d.ts.map +1 -0
  151. package/dist/src/shared/mixins/FormAssociated.d.ts +34 -0
  152. package/dist/src/shared/mixins/FormAssociated.d.ts.map +1 -0
  153. package/dist/src/shared/mixins/FormSubmitter.d.ts +31 -0
  154. package/dist/src/shared/mixins/FormSubmitter.d.ts.map +1 -0
  155. package/dist/src/shared/mixins/HtmlFor.d.ts +30 -0
  156. package/dist/src/shared/mixins/HtmlFor.d.ts.map +1 -0
  157. package/dist/src/shared/mixins/KeyboardClick.d.ts +11 -0
  158. package/dist/src/shared/mixins/KeyboardClick.d.ts.map +1 -0
  159. package/dist/src/shared/mixins/Labelled.d.ts +22 -0
  160. package/dist/src/shared/mixins/Labelled.d.ts.map +1 -0
  161. package/dist/src/shared/mixins/LinkButton.d.ts +36 -0
  162. package/dist/src/shared/mixins/LinkButton.d.ts.map +1 -0
  163. package/dist/src/shared/mixins/ReadOnly.d.ts +25 -0
  164. package/dist/src/shared/mixins/ReadOnly.d.ts.map +1 -0
  165. package/dist/src/shared/mixins/Required.d.ts +26 -0
  166. package/dist/src/shared/mixins/Required.d.ts.map +1 -0
  167. package/dist/src/shared/mixins/RequiredConstraintValidation.d.ts +21 -0
  168. package/dist/src/shared/mixins/RequiredConstraintValidation.d.ts.map +1 -0
  169. package/dist/src/shared/mixins/Role.d.ts +13 -0
  170. package/dist/src/shared/mixins/Role.d.ts.map +1 -0
  171. package/dist/src/shared/mixins/Selected.d.ts +24 -0
  172. package/dist/src/shared/mixins/Selected.d.ts.map +1 -0
  173. package/dist/src/shared/mixins/Touched.d.ts +27 -0
  174. package/dist/src/shared/mixins/Touched.d.ts.map +1 -0
  175. package/dist/src/shared/mixins/Vertical.d.ts +24 -0
  176. package/dist/src/shared/mixins/Vertical.d.ts.map +1 -0
  177. package/dist/src/shared/mixins/hasKeys.d.ts +9 -0
  178. package/dist/src/shared/mixins/hasKeys.d.ts.map +1 -0
  179. package/dist/src/shared/mixins/index.d.ts +25 -0
  180. package/dist/src/shared/mixins/index.d.ts.map +1 -0
  181. package/dist/src/shared/primitives/CollapsibleElement.d.ts +58 -0
  182. package/dist/src/shared/primitives/CollapsibleElement.d.ts.map +1 -0
  183. package/dist/src/shared/primitives/ElevationElement.d.ts +88 -0
  184. package/dist/src/shared/primitives/ElevationElement.d.ts.map +1 -0
  185. package/dist/src/shared/primitives/ElevationLevel.d.ts +3 -0
  186. package/dist/src/shared/primitives/ElevationLevel.d.ts.map +1 -0
  187. package/dist/src/shared/primitives/ElevationToken.d.ts +15 -0
  188. package/dist/src/shared/primitives/ElevationToken.d.ts.map +1 -0
  189. package/dist/src/shared/primitives/FocusRingElement.d.ts +78 -0
  190. package/dist/src/shared/primitives/FocusRingElement.d.ts.map +1 -0
  191. package/dist/src/shared/primitives/FocusRingToken.d.ts +17 -0
  192. package/dist/src/shared/primitives/FocusRingToken.d.ts.map +1 -0
  193. package/dist/src/shared/primitives/PseudoCheckboxElement.d.ts +50 -0
  194. package/dist/src/shared/primitives/PseudoCheckboxElement.d.ts.map +1 -0
  195. package/dist/src/shared/primitives/PseudoRadioElement.d.ts +41 -0
  196. package/dist/src/shared/primitives/PseudoRadioElement.d.ts.map +1 -0
  197. package/dist/src/shared/primitives/RippleElement.d.ts +110 -0
  198. package/dist/src/shared/primitives/RippleElement.d.ts.map +1 -0
  199. package/dist/src/shared/primitives/RippleToken.d.ts +12 -0
  200. package/dist/src/shared/primitives/RippleToken.d.ts.map +1 -0
  201. package/dist/src/shared/primitives/ScrollContainerElement.d.ts +64 -0
  202. package/dist/src/shared/primitives/ScrollContainerElement.d.ts.map +1 -0
  203. package/dist/src/shared/primitives/ScrollDividers.d.ts +3 -0
  204. package/dist/src/shared/primitives/ScrollDividers.d.ts.map +1 -0
  205. package/dist/src/shared/primitives/SlideElement.d.ts +48 -0
  206. package/dist/src/shared/primitives/SlideElement.d.ts.map +1 -0
  207. package/dist/src/shared/primitives/StateLayerElement.d.ts +77 -0
  208. package/dist/src/shared/primitives/StateLayerElement.d.ts.map +1 -0
  209. package/dist/src/shared/primitives/StateLayerToken.d.ts +13 -0
  210. package/dist/src/shared/primitives/StateLayerToken.d.ts.map +1 -0
  211. package/dist/src/shared/primitives/TextOverflowElement.d.ts +39 -0
  212. package/dist/src/shared/primitives/TextOverflowElement.d.ts.map +1 -0
  213. package/dist/src/shared/primitives/index.d.ts +13 -0
  214. package/dist/src/shared/primitives/index.d.ts.map +1 -0
  215. package/dist/src/shared/tokens/ColorToken.d.ts +96 -0
  216. package/dist/src/shared/tokens/ColorToken.d.ts.map +1 -0
  217. package/dist/src/shared/tokens/DensityToken.d.ts +15 -0
  218. package/dist/src/shared/tokens/DensityToken.d.ts.map +1 -0
  219. package/dist/src/shared/tokens/DesignToken.d.ts +366 -0
  220. package/dist/src/shared/tokens/DesignToken.d.ts.map +1 -0
  221. package/dist/src/shared/tokens/ElevationToken.d.ts +16 -0
  222. package/dist/src/shared/tokens/ElevationToken.d.ts.map +1 -0
  223. package/dist/src/shared/tokens/MotionToken.d.ts +69 -0
  224. package/dist/src/shared/tokens/MotionToken.d.ts.map +1 -0
  225. package/dist/src/shared/tokens/ScrollbarToken.d.ts +10 -0
  226. package/dist/src/shared/tokens/ScrollbarToken.d.ts.map +1 -0
  227. package/dist/src/shared/tokens/ShapeToken.d.ts +79 -0
  228. package/dist/src/shared/tokens/ShapeToken.d.ts.map +1 -0
  229. package/dist/src/shared/tokens/StateToken.d.ts +10 -0
  230. package/dist/src/shared/tokens/StateToken.d.ts.map +1 -0
  231. package/dist/src/shared/tokens/TypescaleToken.d.ts +220 -0
  232. package/dist/src/shared/tokens/TypescaleToken.d.ts.map +1 -0
  233. package/dist/src/shared/tokens/index.d.ts +2 -0
  234. package/dist/src/shared/tokens/index.d.ts.map +1 -0
  235. package/dist/src/shared/utils/getTextContent.d.ts +8 -0
  236. package/dist/src/shared/utils/getTextContent.d.ts.map +1 -0
  237. package/dist/src/shared/utils/guid.d.ts +6 -0
  238. package/dist/src/shared/utils/guid.d.ts.map +1 -0
  239. package/dist/src/shared/utils/hasAssignedNodes.d.ts +7 -0
  240. package/dist/src/shared/utils/hasAssignedNodes.d.ts.map +1 -0
  241. package/dist/src/shared/utils/index.d.ts +6 -0
  242. package/dist/src/shared/utils/index.d.ts.map +1 -0
  243. package/dist/src/shared/utils/prefersReducedMotion.d.ts +6 -0
  244. package/dist/src/shared/utils/prefersReducedMotion.d.ts.map +1 -0
  245. package/dist/src/shared/utils/scrollIntoViewIfNeeded.d.ts +8 -0
  246. package/dist/src/shared/utils/scrollIntoViewIfNeeded.d.ts.map +1 -0
  247. package/eslint.config.mjs +21 -0
  248. package/package.json +87 -0
  249. package/rollup.config.js +132 -0
  250. package/src/a11y/AriaDescriber.ts +130 -0
  251. package/src/a11y/FocusTrapElement.ts +136 -0
  252. package/src/a11y/InteractivityChecker.ts +62 -0
  253. package/src/a11y/LiveAnnouncer.ts +143 -0
  254. package/src/a11y/aria-reference.ts +51 -0
  255. package/src/a11y/index.ts +8 -0
  256. package/src/a11y/keycodes/KeyCode.ts +128 -0
  257. package/src/a11y/keycodes/ModifierKeys.ts +5 -0
  258. package/src/a11y/keycodes/getKeyCode.ts +8 -0
  259. package/src/a11y/keycodes/hasModifierKey.ts +11 -0
  260. package/src/a11y/keycodes/index.ts +5 -0
  261. package/src/a11y/keycodes/isModifierAllowed.ts +12 -0
  262. package/src/a11y/list-key/FocusKeyManager.ts +25 -0
  263. package/src/a11y/list-key/ListKeyManager.ts +350 -0
  264. package/src/a11y/list-key/ListManager.ts +66 -0
  265. package/src/a11y/list-key/RadioKeyManager.ts +49 -0
  266. package/src/a11y/list-key/RovingTabIndexManager.ts +56 -0
  267. package/src/a11y/list-key/SelectionManager.ts +132 -0
  268. package/src/a11y/list-key/Typeahead.ts +131 -0
  269. package/src/a11y/list-key/index.ts +7 -0
  270. package/src/a11y/visuallyHide.ts +18 -0
  271. package/src/anchoring/AnchorOptions.ts +19 -0
  272. package/src/anchoring/AnchorPosition.ts +14 -0
  273. package/src/anchoring/index.ts +3 -0
  274. package/src/anchoring/positionAnchor.ts +53 -0
  275. package/src/bidi/Directionality.ts +85 -0
  276. package/src/bidi/index.ts +1 -0
  277. package/src/index.ts +1 -0
  278. package/src/layout/Breakpoint.ts +26 -0
  279. package/src/layout/BreakpointObserver.ts +44 -0
  280. package/src/layout/index.ts +2 -0
  281. package/src/platform/Platform.ts +67 -0
  282. package/src/platform/index.ts +1 -0
  283. package/src/shared/controllers/FocusController.ts +60 -0
  284. package/src/shared/controllers/HoverController.ts +140 -0
  285. package/src/shared/controllers/IntersectionController.ts +81 -0
  286. package/src/shared/controllers/LongPressController.ts +87 -0
  287. package/src/shared/controllers/MonitorControllerBase.ts +99 -0
  288. package/src/shared/controllers/MutationController.ts +89 -0
  289. package/src/shared/controllers/PressedController.ts +137 -0
  290. package/src/shared/controllers/ResizeController.ts +83 -0
  291. package/src/shared/controllers/ScrollController.ts +100 -0
  292. package/src/shared/controllers/index.ts +8 -0
  293. package/src/shared/decorators/debounce.ts +19 -0
  294. package/src/shared/decorators/index.ts +1 -0
  295. package/src/shared/directives/index.ts +1 -0
  296. package/src/shared/directives/safeStyleMap.ts +108 -0
  297. package/src/shared/index.ts +7 -0
  298. package/src/shared/mixins/AttachInternals.ts +48 -0
  299. package/src/shared/mixins/Checked.ts +50 -0
  300. package/src/shared/mixins/CheckedIndeterminate.ts +47 -0
  301. package/src/shared/mixins/CheckedOrSelected.ts +36 -0
  302. package/src/shared/mixins/ConstraintValidation.ts +213 -0
  303. package/src/shared/mixins/Constructor.ts +2 -0
  304. package/src/shared/mixins/Dirty.ts +71 -0
  305. package/src/shared/mixins/Disabled.ts +49 -0
  306. package/src/shared/mixins/DisabledInteractive.ts +78 -0
  307. package/src/shared/mixins/EventAttribute.ts +25 -0
  308. package/src/shared/mixins/Focusable.ts +52 -0
  309. package/src/shared/mixins/FormAssociated.ts +152 -0
  310. package/src/shared/mixins/FormSubmitter.ts +123 -0
  311. package/src/shared/mixins/HtmlFor.ts +89 -0
  312. package/src/shared/mixins/KeyboardClick.ts +46 -0
  313. package/src/shared/mixins/Labelled.ts +88 -0
  314. package/src/shared/mixins/LinkButton.ts +169 -0
  315. package/src/shared/mixins/ReadOnly.ts +48 -0
  316. package/src/shared/mixins/Required.ts +50 -0
  317. package/src/shared/mixins/RequiredConstraintValidation.ts +45 -0
  318. package/src/shared/mixins/Role.ts +134 -0
  319. package/src/shared/mixins/Selected.ts +50 -0
  320. package/src/shared/mixins/Touched.ts +71 -0
  321. package/src/shared/mixins/Vertical.ts +44 -0
  322. package/src/shared/mixins/hasKeys.ts +10 -0
  323. package/src/shared/mixins/index.ts +24 -0
  324. package/src/shared/primitives/CollapsibleElement.ts +227 -0
  325. package/src/shared/primitives/ElevationElement.ts +254 -0
  326. package/src/shared/primitives/ElevationLevel.ts +2 -0
  327. package/src/shared/primitives/ElevationToken.ts +18 -0
  328. package/src/shared/primitives/FocusRingElement.ts +199 -0
  329. package/src/shared/primitives/FocusRingToken.ts +24 -0
  330. package/src/shared/primitives/PseudoCheckboxElement.ts +116 -0
  331. package/src/shared/primitives/PseudoRadioElement.ts +83 -0
  332. package/src/shared/primitives/RippleElement.ts +289 -0
  333. package/src/shared/primitives/RippleToken.ts +15 -0
  334. package/src/shared/primitives/ScrollContainerElement.ts +151 -0
  335. package/src/shared/primitives/ScrollDividers.ts +2 -0
  336. package/src/shared/primitives/SlideElement.ts +128 -0
  337. package/src/shared/primitives/StateLayerElement.ts +191 -0
  338. package/src/shared/primitives/StateLayerToken.ts +16 -0
  339. package/src/shared/primitives/TextOverflowElement.ts +60 -0
  340. package/src/shared/primitives/index.ts +12 -0
  341. package/src/shared/tokens/ColorToken.ts +142 -0
  342. package/src/shared/tokens/DensityToken.ts +23 -0
  343. package/src/shared/tokens/DesignToken.ts +35 -0
  344. package/src/shared/tokens/ElevationToken.ts +115 -0
  345. package/src/shared/tokens/MotionToken.ts +107 -0
  346. package/src/shared/tokens/ScrollbarToken.ts +13 -0
  347. package/src/shared/tokens/ShapeToken.ts +138 -0
  348. package/src/shared/tokens/StateToken.ts +13 -0
  349. package/src/shared/tokens/TypescaleToken.ts +230 -0
  350. package/src/shared/tokens/index.ts +1 -0
  351. package/src/shared/utils/getTextContent.ts +31 -0
  352. package/src/shared/utils/guid.ts +11 -0
  353. package/src/shared/utils/hasAssignedNodes.ts +8 -0
  354. package/src/shared/utils/index.ts +5 -0
  355. package/src/shared/utils/prefersReducedMotion.ts +9 -0
  356. package/src/shared/utils/scrollIntoViewIfNeeded.ts +18 -0
  357. package/tsconfig.json +9 -0
@@ -0,0 +1,83 @@
1
+ import { isServer, ReactiveControllerHost } from "lit";
2
+
3
+ import { MonitorControllerBase, MonitorControllerOptions } from "./MonitorControllerBase";
4
+
5
+ /** The callback function for a `ResizeController`. */
6
+ export type ResizeControllerCallback = (...args: Parameters<ResizeObserverCallback>) => void;
7
+
8
+ /** Encapsulates options used to configure a `ResizeController`. */
9
+ export interface ResizeControllerOptions extends MonitorControllerOptions {
10
+ /** The callback used to process detected changes. */
11
+ callback: ResizeControllerCallback;
12
+
13
+ /**
14
+ * By default, the `callback` is invoked without changes when a
15
+ * target is observed in order to help maintain initial state. Use
16
+ * `skipInitial` to skip this step.
17
+ */
18
+ skipInitial?: boolean;
19
+
20
+ /** The configuration object for the underlying `ResizeObserver`. */
21
+ config?: ResizeObserverOptions;
22
+ }
23
+
24
+ /** A `ReactiveController` used to monitor when an element is resized. */
25
+ export class ResizeController extends MonitorControllerBase {
26
+ /** @private */ readonly #host: ReactiveControllerHost;
27
+ /** @private */ readonly #callback: ResizeControllerCallback;
28
+ /** @private */ readonly #skipInitial: boolean;
29
+ /** @private */ readonly #config?: ResizeObserverOptions;
30
+ /** @private */ readonly #observer?: ResizeObserver;
31
+ /** @private */ #unobservedUpdate = true;
32
+
33
+ /**
34
+ * Initializes a new instance of the `ResizeController` class.
35
+ * @param {ReactiveControllerHost & HTMLElement} host The host element to which this controller will be added.
36
+ * @param {ResizeControllerOptions} options Options used to configure this controller.
37
+ */
38
+ constructor(host: ReactiveControllerHost & HTMLElement, options: ResizeControllerOptions) {
39
+ super(host, options);
40
+
41
+ this.#host = host;
42
+ this.#callback = options.callback;
43
+ this.#skipInitial = options.skipInitial ?? false;
44
+ this.#config = options.config;
45
+
46
+ if (isServer) return;
47
+ if (!window.ResizeObserver) {
48
+ console.warn("ResizeController error: the browser does not support ResizeObserver.");
49
+ return;
50
+ }
51
+
52
+ this.#observer = new ResizeObserver((entries, observer) => {
53
+ this.#callback(entries, observer);
54
+ this.#host.requestUpdate();
55
+ });
56
+ }
57
+
58
+ /** @inheritdoc */
59
+ override async hostUpdated(): Promise<void> {
60
+ if (this.#observer && !this.#skipInitial && this.#unobservedUpdate) {
61
+ this.#callback([], this.#observer);
62
+ }
63
+ this.#unobservedUpdate = false;
64
+ }
65
+
66
+ /**
67
+ * Starts observing the specified element.
68
+ * @param {HTMLElement} target The element to start observing.
69
+ */
70
+ protected override _observe(target: HTMLElement): void {
71
+ this.#observer?.observe(target, this.#config);
72
+ this.#unobservedUpdate = true;
73
+ this.#host.requestUpdate();
74
+ }
75
+
76
+ /**
77
+ * Stops observing the specified element.
78
+ * @param {HTMLElement} target The element to stop observing.
79
+ */
80
+ protected override _unobserve(target: HTMLElement): void {
81
+ this.#observer?.unobserve(target);
82
+ }
83
+ }
@@ -0,0 +1,100 @@
1
+ import { ReactiveControllerHost } from "lit";
2
+
3
+ import { MonitorControllerBase, MonitorControllerOptions } from "./MonitorControllerBase";
4
+ import { debounce } from "../decorators";
5
+
6
+ /** The callback function invoked when a scrollable ancestor is scrolled. */
7
+ export type ScrollControllerCallback = (target: Element) => void;
8
+
9
+ /** Encapsulates options used to configure a `ScrollController`. */
10
+ export interface ScrollControllerOptions extends MonitorControllerOptions {
11
+ /** The callback invoked a scrollable ancestor is scrolled. */
12
+ callback: ScrollControllerCallback;
13
+
14
+ /** Whether to debounce scroll events. */
15
+ debounce?: boolean;
16
+ }
17
+
18
+ /** A `ReactiveController` used to monitor when a scroll event is emitted from a scrollable ancestor. */
19
+ export class ScrollController extends MonitorControllerBase {
20
+ /** @private */ readonly #debounce: boolean;
21
+ /** @private */ readonly #callback: ScrollControllerCallback;
22
+ /** @private */ readonly #scrollHandler = (e: Event) => this.#handleScroll(e);
23
+ /** @private */ readonly #scrollContainers = new Map<HTMLElement, Element[]>();
24
+
25
+ /**
26
+ * Initializes a new instance of the `ScrollController` class.
27
+ * @param {ReactiveControllerHost & HTMLElement} host The host element to which this controller will be added.
28
+ * @param {ScrollControllerOptions} options Options used to configure this controller.
29
+ */
30
+ constructor(host: ReactiveControllerHost & HTMLElement, options: ScrollControllerOptions) {
31
+ super(host, options);
32
+ this.#debounce = options.debounce === true;
33
+ this.#callback = options.callback;
34
+ }
35
+
36
+ /**
37
+ * Returns the scrollable ancestors for a target element currently being observed by this controller.
38
+ * @param target The element whose scroll containers are currently being observed.
39
+ * @returns {Element[] | undefined} The scrollable ancestors, or `undefined` if `target` is not being observed.
40
+ */
41
+ getScrollContainers(target: HTMLElement): Element[] | undefined {
42
+ return this.#scrollContainers.get(target);
43
+ }
44
+
45
+ /** @inheritdoc */
46
+ protected override _observe(target: HTMLElement): void {
47
+ const scrollableAncestors = this.#getScrollContainers(target);
48
+ if (scrollableAncestors.length > 0) {
49
+ this.#scrollContainers.set(target, scrollableAncestors);
50
+ for (const ancestor of scrollableAncestors) {
51
+ (ancestor === document.documentElement ? document : ancestor).addEventListener("scroll", this.#scrollHandler, {
52
+ passive: true,
53
+ });
54
+ }
55
+ }
56
+ }
57
+
58
+ /** @inheritdoc */
59
+ protected override _unobserve(target: HTMLElement): void {
60
+ if (this.#scrollContainers.has(target)) {
61
+ for (const ancestor of this.#scrollContainers.get(target)!) {
62
+ (ancestor === document.documentElement ? document : ancestor).removeEventListener(
63
+ "scroll",
64
+ this.#scrollHandler
65
+ );
66
+ }
67
+ this.#scrollContainers.delete(target);
68
+ }
69
+ }
70
+
71
+ /** @private */
72
+ #getScrollContainers(element: Element): Element[] {
73
+ const ancestors = new Array<Element>();
74
+ let ancestor: Element | null = element;
75
+ while (ancestor) {
76
+ const style = getComputedStyle(ancestor);
77
+ if (/(auto|scroll)/.test(style.overflow + style.overflowY + style.overflowX)) {
78
+ ancestors.push(ancestor);
79
+ }
80
+ ancestor = ancestor.parentElement;
81
+ }
82
+ return ancestors;
83
+ }
84
+
85
+ /** @private */
86
+ #handleScroll(e: Event): void {
87
+ const target = e.target === document ? document.documentElement : e.target;
88
+ if (this.#debounce) {
89
+ this._debounceCallback(target as Element);
90
+ } else {
91
+ this.#callback(target as Element);
92
+ }
93
+ }
94
+
95
+ /** @private */
96
+ @debounce(40)
97
+ private _debounceCallback(target: Element): void {
98
+ this.#callback(target);
99
+ }
100
+ }
@@ -0,0 +1,8 @@
1
+ export * from "./FocusController";
2
+ export * from "./HoverController";
3
+ export * from "./IntersectionController";
4
+ export * from "./LongPressController";
5
+ export * from "./MutationController";
6
+ export * from "./PressedController";
7
+ export * from "./ResizeController";
8
+ export * from "./ScrollController";
@@ -0,0 +1,19 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ /**
3
+ * A decorator that runs a function once after a given "cooldown" period.
4
+ * @param {number} timeout The timeout, in milliseconds, after which the function is invoked.
5
+ * @returns {MethodDecorator} The decorator that runs a function once after a given "cooldown" period.
6
+ */
7
+ export function debounce(timeout: number): MethodDecorator {
8
+ const _id = Symbol("_id");
9
+ return (_: any, __: PropertyKey | symbol, descriptor: PropertyDescriptor) => {
10
+ const orig = descriptor.value;
11
+ descriptor.value = function (...args: any[]) {
12
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
13
+ const self: any = this;
14
+ clearTimeout(self[_id]);
15
+ self[_id] = setTimeout(() => orig.apply(this, args), timeout);
16
+ };
17
+ return descriptor;
18
+ };
19
+ }
@@ -0,0 +1 @@
1
+ export * from "./debounce";
@@ -0,0 +1 @@
1
+ export * from "./safeStyleMap";
@@ -0,0 +1,108 @@
1
+ import { noChange, nothing } from "lit";
2
+ import { AttributePart, directive, Directive, DirectiveParameters, PartInfo, PartType } from "lit/directive.js";
3
+
4
+ /**
5
+ * A key-value set of CSS properties and values.
6
+ *
7
+ * The key should be either a valid CSS property name string, like
8
+ * `'background-color'`, or a valid JavaScript camel case property name
9
+ * for CSSStyleDeclaration like `backgroundColor`.
10
+ */
11
+ export interface StyleInfo {
12
+ [name: string]: string | number | undefined | null;
13
+ }
14
+
15
+ const important = "important";
16
+ // The leading space is important
17
+ const importantFlag = " !" + important;
18
+ // How many characters to remove from a value, as a negative number
19
+ const flagTrim = 0 - importantFlag.length;
20
+
21
+ class SafeStyleMapDirective extends Directive {
22
+ private _previousStyleProperties?: Set<string>;
23
+
24
+ constructor(partInfo: PartInfo) {
25
+ super(partInfo);
26
+ if (partInfo.type !== PartType.ATTRIBUTE || partInfo.name !== "style" || (partInfo.strings?.length as number) > 2) {
27
+ throw new Error(
28
+ "The `styleMap` directive must be used in the `style` attribute " +
29
+ "and must be the only part in the attribute."
30
+ );
31
+ }
32
+ }
33
+
34
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
35
+ render(_: Readonly<StyleInfo>) {
36
+ return nothing;
37
+ }
38
+
39
+ override update(part: AttributePart, [styleInfo]: DirectiveParameters<this>) {
40
+ const { style } = part.element as HTMLElement;
41
+
42
+ if (this._previousStyleProperties === undefined) {
43
+ this._previousStyleProperties = new Set(Object.keys(styleInfo));
44
+ }
45
+
46
+ // Remove old properties that no longer exist in styleInfo
47
+ for (const name of this._previousStyleProperties) {
48
+ // If the name isn't in styleInfo or it's null/undefined
49
+ if (styleInfo[name] == null) {
50
+ this._previousStyleProperties!.delete(name);
51
+ if (name.includes("-")) {
52
+ style.removeProperty(name);
53
+ } else {
54
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
55
+ (style as any)[name] = null;
56
+ }
57
+ }
58
+ }
59
+
60
+ // Add or update properties
61
+ for (const name in styleInfo) {
62
+ const value = styleInfo[name];
63
+ if (value != null) {
64
+ this._previousStyleProperties.add(name);
65
+ const isImportant = typeof value === "string" && value.endsWith(importantFlag);
66
+ if (name.includes("-") || isImportant) {
67
+ style.setProperty(
68
+ name,
69
+ isImportant ? (value as string).slice(0, flagTrim) : (value as string),
70
+ isImportant ? important : ""
71
+ );
72
+ } else {
73
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
74
+ (style as any)[name] = value;
75
+ }
76
+ }
77
+ }
78
+ return noChange;
79
+ }
80
+ }
81
+
82
+ /**
83
+ * A directive that applies CSS properties to an element.
84
+ *
85
+ * `safeStyleMap` can only be used in the `style` attribute and must be the only
86
+ * expression in the attribute. It takes the property names in the
87
+ * {@link StyleInfo styleInfo} object and adds the properties to the inline
88
+ * style of the element.
89
+ *
90
+ * Property names with dashes (`-`) are assumed to be valid CSS
91
+ * property names and set on the element's style object using `setProperty()`.
92
+ * Names without dashes are assumed to be camelCased JavaScript property names
93
+ * and set on the element's style object using property assignment, allowing the
94
+ * style object to translate JavaScript-style names to CSS property names.
95
+ *
96
+ * For example `safeStyleMap({backgroundColor: 'red', 'border-top': '5px', '--size':
97
+ * '0'})` sets the `background-color`, `border-top` and `--size` properties.
98
+ *
99
+ * @param styleInfo
100
+ * @see {@link https://lit.dev/docs/templates/directives/#stylemap styleMap code samples on Lit.dev}
101
+ */
102
+ export const safeStyleMap = directive(SafeStyleMapDirective);
103
+
104
+ /**
105
+ * The type of the class that powers this directive. Necessary for naming the
106
+ * directive's return type.
107
+ */
108
+ export type { SafeStyleMapDirective };
@@ -0,0 +1,7 @@
1
+ export * from "./controllers";
2
+ export * from "./decorators";
3
+ export * from "./directives";
4
+ export * from "./mixins";
5
+ export * from "./primitives";
6
+ export * from "./tokens";
7
+ export * from "./utils";
@@ -0,0 +1,48 @@
1
+ import { LitElement } from "lit";
2
+
3
+ import { Constructor } from "./Constructor";
4
+ import { hasKeys } from "./hasKeys";
5
+
6
+ /** A symbol through which to access the `ElementInternals` attached to an element. */
7
+ export const internals = Symbol("internals");
8
+
9
+ /** Defines functionality for an element attached to `ElementInternals`. */
10
+ export interface AttachInternalsMixin {
11
+ /** The `ElementInternals` attached to the element. */
12
+ readonly [internals]: ElementInternals;
13
+ }
14
+
15
+ /**
16
+ * Determines whether a value is an `AttachInternalsMixin`.
17
+ * @param {unknown} value The value to test.
18
+ * @returns Whether `value` is an `AttachInternalsMixin`.
19
+ */
20
+ export function isAttachInternalsMixin(value: unknown): value is AttachInternalsMixin {
21
+ return hasKeys<AttachInternalsMixin>(value, internals);
22
+ }
23
+
24
+ const _internals = Symbol("_internals");
25
+
26
+ /**
27
+ * Mixin to augment an element with behavior that attaches to `ElementInternals`.
28
+ * @template T The type of the base class.
29
+ * @param {T} base The base class.
30
+ * @param {boolean | undefined} formAssociated Whether the element is "Form Associated".
31
+ * @returns {Constructor<AttachInternalsMixin> & T} A constructor that implements `AttachInternalsMixin`.
32
+ */
33
+ export function AttachInternals<T extends Constructor<LitElement>>(
34
+ base: T,
35
+ formAssociated?: boolean
36
+ ): Constructor<AttachInternalsMixin> & T {
37
+ abstract class _AttachInternals extends base implements AttachInternalsMixin {
38
+ static readonly formAssociated = formAssociated;
39
+
40
+ private [_internals]?: ElementInternals;
41
+
42
+ get [internals](): ElementInternals {
43
+ return this[_internals] ?? (this[_internals] = this.attachInternals());
44
+ }
45
+ }
46
+
47
+ return _AttachInternals;
48
+ }
@@ -0,0 +1,50 @@
1
+ import { LitElement, PropertyValues } from "lit";
2
+ import { property } from "lit/decorators.js";
3
+
4
+ import { Constructor } from "./Constructor";
5
+ import { hasKeys } from "./hasKeys";
6
+
7
+ /** Defines functionality for an element which supports a checked state. */
8
+ export interface CheckedMixin {
9
+ /**
10
+ * Whether the element is checked.
11
+ * @default false
12
+ */
13
+ checked: boolean;
14
+ }
15
+
16
+ /**
17
+ * Determines whether a value is a `CheckedMixin`.
18
+ * @param {unknown} value The value to test.
19
+ * @returns Whether `value` is a `CheckedMixin`.
20
+ */
21
+ export function isCheckedMixin(value: unknown): value is CheckedMixin {
22
+ return hasKeys<CheckedMixin>(value, "checked");
23
+ }
24
+
25
+ /**
26
+ * Mixin to augment an element with behavior that supports a checked state.
27
+ * @template T The type of the base class.
28
+ * @param {T} base The base class.
29
+ * @returns {Constructor<CheckedMixin> & T} A constructor that implements `CheckedMixin`.
30
+ */
31
+ export function Checked<T extends Constructor<LitElement>>(base: T): Constructor<CheckedMixin> & T {
32
+ abstract class _CheckedMixin extends base implements CheckedMixin {
33
+ @property({ type: Boolean, reflect: true }) checked = false;
34
+
35
+ protected override update(changedProperties: PropertyValues<this>): void {
36
+ super.update(changedProperties);
37
+
38
+ if (changedProperties.has("checked")) {
39
+ if (this.role === "button") {
40
+ this.ariaPressed = `${this.checked}`;
41
+ this.ariaChecked = null;
42
+ } else if (this.role && this.role !== "none" && this.role !== "presentation") {
43
+ this.ariaChecked = `${this.checked}`;
44
+ this.ariaPressed = null;
45
+ }
46
+ }
47
+ }
48
+ }
49
+ return _CheckedMixin;
50
+ }
@@ -0,0 +1,47 @@
1
+ import { LitElement, PropertyValues } from "lit";
2
+ import { property } from "lit/decorators.js";
3
+
4
+ import { Checked, CheckedMixin, isCheckedMixin } from "./Checked";
5
+ import { Constructor } from "./Constructor";
6
+ import { hasKeys } from "./hasKeys";
7
+
8
+ /** Defines functionality for an element which supports a mixed checked state. */
9
+ export interface CheckedIndeterminateMixin extends CheckedMixin {
10
+ /**
11
+ * Whether the element's checked state is indeterminate.
12
+ * @default false
13
+ */
14
+ indeterminate: boolean;
15
+ }
16
+
17
+ /**
18
+ * Determines whether a value is a `CheckedIndeterminateMixin`.
19
+ * @param {unknown} value The value to test.
20
+ * @returns Whether `value` is a `CheckedIndeterminateMixin`.
21
+ */
22
+ export function isCheckedIndeterminateMixin(value: unknown): value is CheckedIndeterminateMixin {
23
+ return hasKeys<CheckedIndeterminateMixin>(value, "indeterminate") && isCheckedMixin(value);
24
+ }
25
+
26
+ /**
27
+ * Mixin to augment an element with behavior that supports a mixed checked state.
28
+ * @template T The type of the base class.
29
+ * @param {T} base The base class.
30
+ * @returns {Constructor<CheckedIndeterminateMixin> & T} A constructor that implements `CheckedIndeterminateMixin`.
31
+ */
32
+ export function CheckedIndeterminate<T extends Constructor<LitElement>>(
33
+ base: T
34
+ ): Constructor<CheckedIndeterminateMixin> & T {
35
+ abstract class _CheckedIndeterminateMixin extends Checked(base) implements CheckedIndeterminateMixin {
36
+ @property({ type: Boolean, reflect: true }) indeterminate = false;
37
+
38
+ protected override update(changedProperties: PropertyValues<this>): void {
39
+ super.update(changedProperties);
40
+
41
+ if (changedProperties.has("indeterminate") && this.role && this.role !== "none" && this.role !== "presentation") {
42
+ this.ariaChecked = !this.checked && this.indeterminate ? "mixed" : `${this.checked}`;
43
+ }
44
+ }
45
+ }
46
+ return _CheckedIndeterminateMixin;
47
+ }
@@ -0,0 +1,36 @@
1
+ import { CheckedMixin, isCheckedMixin } from "./Checked";
2
+ import { isSelectedMixin, SelectedMixin } from "./Selected";
3
+
4
+ /** Defines functionality for an element which supports either a checked or selected state. */
5
+ export type CheckedOrSelectedMixin = CheckedMixin | SelectedMixin;
6
+
7
+ /**
8
+ * Determines whether a value is a `CheckedOrSelectedMixin`.
9
+ * @param {unknown} value The value to test.
10
+ * @returns Whether `value` is a `CheckedOrSelectedMixin`.
11
+ */
12
+ export function isCheckedOrSelectedMixin(value: unknown): value is CheckedOrSelectedMixin {
13
+ return isCheckedMixin(value) || isSelectedMixin(value);
14
+ }
15
+
16
+ /**
17
+ * Determines whether the state of an element is checked or selected.
18
+ * @param {CheckedOrSelectedMixin} element The element to test.
19
+ * @return {boolean} Whether `element` is checked or selected.
20
+ */
21
+ export function isCheckedOrSelected(element: CheckedOrSelectedMixin): boolean {
22
+ return (isCheckedMixin(element) && element.checked) || (isSelectedMixin(element) && element.selected);
23
+ }
24
+
25
+ /**
26
+ * Sets the checked or selected state of an element.
27
+ * @param {CheckedOrSelectedMixin} element The element for which to set the checked or selected state.
28
+ * @param {boolean} checkedOrSelected The checked or selected state.
29
+ */
30
+ export function checkOrSelect(element: CheckedOrSelectedMixin, checkedOrSelected: boolean): void {
31
+ if (isCheckedMixin(element)) {
32
+ element.checked = checkedOrSelected;
33
+ } else {
34
+ element.selected = checkedOrSelected;
35
+ }
36
+ }