@haiilo/catalyst 0.5.4 → 0.5.7

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 (297) hide show
  1. package/README.md +1 -1
  2. package/dist/catalyst/assets/fonts/AzeretMono-Regular.woff2 +0 -0
  3. package/dist/catalyst/assets/fonts/DMSans-Bold.woff2 +0 -0
  4. package/dist/catalyst/assets/fonts/DMSans-BoldItalic.woff2 +0 -0
  5. package/dist/catalyst/assets/fonts/DMSans-Italic.woff2 +0 -0
  6. package/dist/catalyst/assets/fonts/DMSans-Medium.woff2 +0 -0
  7. package/dist/catalyst/assets/fonts/DMSans-MediumItalic.woff2 +0 -0
  8. package/dist/catalyst/assets/fonts/DMSans-Regular.woff2 +0 -0
  9. package/dist/catalyst/assets/fonts/Lato-Black.woff +0 -0
  10. package/dist/catalyst/assets/fonts/Lato-Black.woff2 +0 -0
  11. package/dist/catalyst/assets/fonts/Lato-BlackItalic.woff +0 -0
  12. package/dist/catalyst/assets/fonts/Lato-BlackItalic.woff2 +0 -0
  13. package/dist/catalyst/assets/fonts/Lato-Bold.woff +0 -0
  14. package/dist/catalyst/assets/fonts/Lato-Bold.woff2 +0 -0
  15. package/dist/catalyst/assets/fonts/Lato-BoldItalic.woff +0 -0
  16. package/dist/catalyst/assets/fonts/Lato-BoldItalic.woff2 +0 -0
  17. package/dist/catalyst/assets/fonts/Lato-Hairline.woff +0 -0
  18. package/dist/catalyst/assets/fonts/Lato-Hairline.woff2 +0 -0
  19. package/dist/catalyst/assets/fonts/Lato-HairlineItalic.woff +0 -0
  20. package/dist/catalyst/assets/fonts/Lato-HairlineItalic.woff2 +0 -0
  21. package/dist/catalyst/assets/fonts/Lato-Heavy.woff +0 -0
  22. package/dist/catalyst/assets/fonts/Lato-Heavy.woff2 +0 -0
  23. package/dist/catalyst/assets/fonts/Lato-HeavyItalic.woff +0 -0
  24. package/dist/catalyst/assets/fonts/Lato-HeavyItalic.woff2 +0 -0
  25. package/dist/catalyst/assets/fonts/Lato-Italic.woff +0 -0
  26. package/dist/catalyst/assets/fonts/Lato-Italic.woff2 +0 -0
  27. package/dist/catalyst/assets/fonts/Lato-Light.woff +0 -0
  28. package/dist/catalyst/assets/fonts/Lato-Light.woff2 +0 -0
  29. package/dist/catalyst/assets/fonts/Lato-LightItalic.woff +0 -0
  30. package/dist/catalyst/assets/fonts/Lato-LightItalic.woff2 +0 -0
  31. package/dist/catalyst/assets/fonts/Lato-Medium.woff +0 -0
  32. package/dist/catalyst/assets/fonts/Lato-Medium.woff2 +0 -0
  33. package/dist/catalyst/assets/fonts/Lato-MediumItalic.woff +0 -0
  34. package/dist/catalyst/assets/fonts/Lato-MediumItalic.woff2 +0 -0
  35. package/dist/catalyst/assets/fonts/Lato-Regular.woff +0 -0
  36. package/dist/catalyst/assets/fonts/Lato-Regular.woff2 +0 -0
  37. package/dist/catalyst/assets/fonts/Lato-Semibold.woff +0 -0
  38. package/dist/catalyst/assets/fonts/Lato-Semibold.woff2 +0 -0
  39. package/dist/catalyst/assets/fonts/Lato-SemiboldItalic.woff +0 -0
  40. package/dist/catalyst/assets/fonts/Lato-SemiboldItalic.woff2 +0 -0
  41. package/dist/catalyst/assets/fonts/Lato-Thin.woff +0 -0
  42. package/dist/catalyst/assets/fonts/Lato-Thin.woff2 +0 -0
  43. package/dist/catalyst/assets/fonts/Lato-ThinItalic.woff +0 -0
  44. package/dist/catalyst/assets/fonts/Lato-ThinItalic.woff2 +0 -0
  45. package/dist/catalyst/catalyst.css +1 -0
  46. package/dist/catalyst/catalyst.esm.js +2 -0
  47. package/dist/catalyst/catalyst.esm.js.map +1 -0
  48. package/dist/catalyst/index.cdn.js +21 -0
  49. package/dist/catalyst/index.esm.js +2 -0
  50. package/dist/catalyst/index.esm.js.map +1 -0
  51. package/dist/catalyst/p-9a3c2375.js +2 -0
  52. package/dist/catalyst/p-9a3c2375.js.map +1 -0
  53. package/dist/catalyst/p-a6b8ebe9.entry.js +10 -0
  54. package/dist/catalyst/p-a6b8ebe9.entry.js.map +1 -0
  55. package/dist/catalyst/p-bfc656ca.js +2 -0
  56. package/dist/catalyst/p-bfc656ca.js.map +1 -0
  57. package/dist/catalyst/p-e82b63e9.js +2 -0
  58. package/dist/catalyst/p-e82b63e9.js.map +1 -0
  59. package/dist/cjs/app-globals-2a30d681.js +256 -0
  60. package/dist/cjs/app-globals-2a30d681.js.map +1 -0
  61. package/dist/cjs/cat-alert_15.cjs.entry.js +4651 -0
  62. package/dist/cjs/cat-alert_15.cjs.entry.js.map +1 -0
  63. package/dist/cjs/cat-icon-registry-b3a95a6b.js +442 -0
  64. package/dist/cjs/cat-icon-registry-b3a95a6b.js.map +1 -0
  65. package/dist/cjs/catalyst.cjs.js +24 -0
  66. package/dist/cjs/catalyst.cjs.js.map +1 -0
  67. package/dist/cjs/index-5d72f0e4.js +1347 -0
  68. package/dist/cjs/index-5d72f0e4.js.map +1 -0
  69. package/dist/cjs/index.cjs.js +12 -0
  70. package/dist/cjs/index.cjs.js.map +1 -0
  71. package/dist/cjs/loader.cjs.js +26 -0
  72. package/dist/cjs/loader.cjs.js.map +1 -0
  73. package/dist/collection/assets/fonts/AzeretMono-Regular.woff2 +0 -0
  74. package/dist/collection/assets/fonts/DMSans-Bold.woff2 +0 -0
  75. package/dist/collection/assets/fonts/DMSans-BoldItalic.woff2 +0 -0
  76. package/dist/collection/assets/fonts/DMSans-Italic.woff2 +0 -0
  77. package/dist/collection/assets/fonts/DMSans-Medium.woff2 +0 -0
  78. package/dist/collection/assets/fonts/DMSans-MediumItalic.woff2 +0 -0
  79. package/dist/collection/assets/fonts/DMSans-Regular.woff2 +0 -0
  80. package/dist/collection/assets/fonts/Lato-Black.woff +0 -0
  81. package/dist/collection/assets/fonts/Lato-Black.woff2 +0 -0
  82. package/dist/collection/assets/fonts/Lato-BlackItalic.woff +0 -0
  83. package/dist/collection/assets/fonts/Lato-BlackItalic.woff2 +0 -0
  84. package/dist/collection/assets/fonts/Lato-Bold.woff +0 -0
  85. package/dist/collection/assets/fonts/Lato-Bold.woff2 +0 -0
  86. package/dist/collection/assets/fonts/Lato-BoldItalic.woff +0 -0
  87. package/dist/collection/assets/fonts/Lato-BoldItalic.woff2 +0 -0
  88. package/dist/collection/assets/fonts/Lato-Hairline.woff +0 -0
  89. package/dist/collection/assets/fonts/Lato-Hairline.woff2 +0 -0
  90. package/dist/collection/assets/fonts/Lato-HairlineItalic.woff +0 -0
  91. package/dist/collection/assets/fonts/Lato-HairlineItalic.woff2 +0 -0
  92. package/dist/collection/assets/fonts/Lato-Heavy.woff +0 -0
  93. package/dist/collection/assets/fonts/Lato-Heavy.woff2 +0 -0
  94. package/dist/collection/assets/fonts/Lato-HeavyItalic.woff +0 -0
  95. package/dist/collection/assets/fonts/Lato-HeavyItalic.woff2 +0 -0
  96. package/dist/collection/assets/fonts/Lato-Italic.woff +0 -0
  97. package/dist/collection/assets/fonts/Lato-Italic.woff2 +0 -0
  98. package/dist/collection/assets/fonts/Lato-Light.woff +0 -0
  99. package/dist/collection/assets/fonts/Lato-Light.woff2 +0 -0
  100. package/dist/collection/assets/fonts/Lato-LightItalic.woff +0 -0
  101. package/dist/collection/assets/fonts/Lato-LightItalic.woff2 +0 -0
  102. package/dist/collection/assets/fonts/Lato-Medium.woff +0 -0
  103. package/dist/collection/assets/fonts/Lato-Medium.woff2 +0 -0
  104. package/dist/collection/assets/fonts/Lato-MediumItalic.woff +0 -0
  105. package/dist/collection/assets/fonts/Lato-MediumItalic.woff2 +0 -0
  106. package/dist/collection/assets/fonts/Lato-Regular.woff +0 -0
  107. package/dist/collection/assets/fonts/Lato-Regular.woff2 +0 -0
  108. package/dist/collection/assets/fonts/Lato-Semibold.woff +0 -0
  109. package/dist/collection/assets/fonts/Lato-Semibold.woff2 +0 -0
  110. package/dist/collection/assets/fonts/Lato-SemiboldItalic.woff +0 -0
  111. package/dist/collection/assets/fonts/Lato-SemiboldItalic.woff2 +0 -0
  112. package/dist/collection/assets/fonts/Lato-Thin.woff +0 -0
  113. package/dist/collection/assets/fonts/Lato-Thin.woff2 +0 -0
  114. package/dist/collection/assets/fonts/Lato-ThinItalic.woff +0 -0
  115. package/dist/collection/assets/fonts/Lato-ThinItalic.woff2 +0 -0
  116. package/dist/collection/collection-manifest.json +27 -0
  117. package/dist/collection/components/cat-alert/cat-alert.css +61 -0
  118. package/dist/collection/components/cat-alert/cat-alert.js +61 -0
  119. package/dist/collection/components/cat-alert/cat-alert.js.map +1 -0
  120. package/dist/collection/components/cat-badge/cat-badge.css +154 -0
  121. package/dist/collection/components/cat-badge/cat-badge.js +143 -0
  122. package/dist/collection/components/cat-badge/cat-badge.js.map +1 -0
  123. package/dist/collection/components/cat-button/cat-button.css +333 -0
  124. package/dist/collection/components/cat-button/cat-button.js +615 -0
  125. package/dist/collection/components/cat-button/cat-button.js.map +1 -0
  126. package/dist/collection/components/cat-card/cat-card.css +24 -0
  127. package/dist/collection/components/cat-card/cat-card.js +20 -0
  128. package/dist/collection/components/cat-card/cat-card.js.map +1 -0
  129. package/dist/collection/components/cat-checkbox/cat-checkbox.css +105 -0
  130. package/dist/collection/components/cat-checkbox/cat-checkbox.js +314 -0
  131. package/dist/collection/components/cat-checkbox/cat-checkbox.js.map +1 -0
  132. package/dist/collection/components/cat-i18n/cat-i18n-registry.js +70 -0
  133. package/dist/collection/components/cat-i18n/cat-i18n-registry.js.map +1 -0
  134. package/dist/collection/components/cat-icon/cat-icon-registry.js +55 -0
  135. package/dist/collection/components/cat-icon/cat-icon-registry.js.map +1 -0
  136. package/dist/collection/components/cat-icon/cat-icon.css +50 -0
  137. package/dist/collection/components/cat-icon/cat-icon.js +91 -0
  138. package/dist/collection/components/cat-icon/cat-icon.js.map +1 -0
  139. package/dist/collection/components/cat-input/cat-input.css +131 -0
  140. package/dist/collection/components/cat-input/cat-input.js +606 -0
  141. package/dist/collection/components/cat-input/cat-input.js.map +1 -0
  142. package/dist/collection/components/cat-menu/cat-menu.css +34 -0
  143. package/dist/collection/components/cat-menu/cat-menu.js +184 -0
  144. package/dist/collection/components/cat-menu/cat-menu.js.map +1 -0
  145. package/dist/collection/components/cat-radio/cat-radio.css +84 -0
  146. package/dist/collection/components/cat-radio/cat-radio.js +283 -0
  147. package/dist/collection/components/cat-radio/cat-radio.js.map +1 -0
  148. package/dist/collection/components/cat-scrollable/cat-scrollable.css +69 -0
  149. package/dist/collection/components/cat-scrollable/cat-scrollable.js +311 -0
  150. package/dist/collection/components/cat-scrollable/cat-scrollable.js.map +1 -0
  151. package/dist/collection/components/cat-skeleton/cat-skeleton.css +177 -0
  152. package/dist/collection/components/cat-skeleton/cat-skeleton.js +131 -0
  153. package/dist/collection/components/cat-skeleton/cat-skeleton.js.map +1 -0
  154. package/dist/collection/components/cat-spinner/cat-spinner.css +63 -0
  155. package/dist/collection/components/cat-spinner/cat-spinner.js +65 -0
  156. package/dist/collection/components/cat-spinner/cat-spinner.js.map +1 -0
  157. package/dist/collection/components/cat-textarea/cat-textarea.css +72 -0
  158. package/dist/collection/components/cat-textarea/cat-textarea.js +393 -0
  159. package/dist/collection/components/cat-textarea/cat-textarea.js.map +1 -0
  160. package/dist/collection/components/cat-toggle/cat-toggle.css +93 -0
  161. package/dist/collection/components/cat-toggle/cat-toggle.js +283 -0
  162. package/dist/collection/components/cat-toggle/cat-toggle.js.map +1 -0
  163. package/dist/collection/components/cat-tooltip/cat-tooltip.css +41 -0
  164. package/dist/collection/components/cat-tooltip/cat-tooltip.js +254 -0
  165. package/dist/collection/components/cat-tooltip/cat-tooltip.js.map +1 -0
  166. package/dist/collection/index.cdn.js +21 -0
  167. package/dist/collection/index.js +3 -0
  168. package/dist/collection/index.js.map +1 -0
  169. package/dist/collection/init.js +17 -0
  170. package/dist/collection/init.js.map +1 -0
  171. package/dist/collection/utils/breakpoints.js +12 -0
  172. package/dist/collection/utils/breakpoints.js.map +1 -0
  173. package/dist/collection/utils/first-tabbable.js +6 -0
  174. package/dist/collection/utils/first-tabbable.js.map +1 -0
  175. package/dist/collection/utils/is-touch-screen.js +3 -0
  176. package/dist/collection/utils/is-touch-screen.js.map +1 -0
  177. package/dist/collection/utils/media-matcher.js +55 -0
  178. package/dist/collection/utils/media-matcher.js.map +1 -0
  179. package/dist/collection/utils/platform.js +50 -0
  180. package/dist/collection/utils/platform.js.map +1 -0
  181. package/dist/components/cat-alert.d.ts +11 -0
  182. package/dist/components/cat-alert.js +53 -0
  183. package/dist/components/cat-alert.js.map +1 -0
  184. package/dist/components/cat-badge.d.ts +11 -0
  185. package/dist/components/cat-badge.js +68 -0
  186. package/dist/components/cat-badge.js.map +1 -0
  187. package/dist/components/cat-button.d.ts +11 -0
  188. package/dist/components/cat-button.js +8 -0
  189. package/dist/components/cat-button.js.map +1 -0
  190. package/dist/components/cat-button2.js +346 -0
  191. package/dist/components/cat-button2.js.map +1 -0
  192. package/dist/components/cat-card.d.ts +11 -0
  193. package/dist/components/cat-card.js +35 -0
  194. package/dist/components/cat-card.js.map +1 -0
  195. package/dist/components/cat-checkbox.d.ts +11 -0
  196. package/dist/components/cat-checkbox.js +103 -0
  197. package/dist/components/cat-checkbox.js.map +1 -0
  198. package/dist/components/cat-i18n-registry.js +74 -0
  199. package/dist/components/cat-i18n-registry.js.map +1 -0
  200. package/dist/components/cat-icon-registry.js +59 -0
  201. package/dist/components/cat-icon-registry.js.map +1 -0
  202. package/dist/components/cat-icon.d.ts +11 -0
  203. package/dist/components/cat-icon.js +8 -0
  204. package/dist/components/cat-icon.js.map +1 -0
  205. package/dist/components/cat-icon2.js +49 -0
  206. package/dist/components/cat-icon2.js.map +1 -0
  207. package/dist/components/cat-input.d.ts +11 -0
  208. package/dist/components/cat-input.js +172 -0
  209. package/dist/components/cat-input.js.map +1 -0
  210. package/dist/components/cat-menu.d.ts +11 -0
  211. package/dist/components/cat-menu.js +870 -0
  212. package/dist/components/cat-menu.js.map +1 -0
  213. package/dist/components/cat-radio.d.ts +11 -0
  214. package/dist/components/cat-radio.js +93 -0
  215. package/dist/components/cat-radio.js.map +1 -0
  216. package/dist/components/cat-scrollable.d.ts +11 -0
  217. package/dist/components/cat-scrollable.js +1362 -0
  218. package/dist/components/cat-scrollable.js.map +1 -0
  219. package/dist/components/cat-skeleton.d.ts +11 -0
  220. package/dist/components/cat-skeleton.js +78 -0
  221. package/dist/components/cat-skeleton.js.map +1 -0
  222. package/dist/components/cat-spinner.d.ts +11 -0
  223. package/dist/components/cat-spinner.js +8 -0
  224. package/dist/components/cat-spinner.js.map +1 -0
  225. package/dist/components/cat-spinner2.js +41 -0
  226. package/dist/components/cat-spinner2.js.map +1 -0
  227. package/dist/components/cat-textarea.d.ts +11 -0
  228. package/dist/components/cat-textarea.js +119 -0
  229. package/dist/components/cat-textarea.js.map +1 -0
  230. package/dist/components/cat-toggle.d.ts +11 -0
  231. package/dist/components/cat-toggle.js +93 -0
  232. package/dist/components/cat-toggle.js.map +1 -0
  233. package/dist/components/cat-tooltip.d.ts +11 -0
  234. package/dist/components/cat-tooltip.js +154 -0
  235. package/dist/components/cat-tooltip.js.map +1 -0
  236. package/dist/components/first-tabbable.js +1495 -0
  237. package/dist/components/first-tabbable.js.map +1 -0
  238. package/dist/components/index.d.ts +26 -0
  239. package/dist/components/index.js +258 -0
  240. package/dist/components/index.js.map +1 -0
  241. package/dist/components/loglevel.js +315 -0
  242. package/dist/components/loglevel.js.map +1 -0
  243. package/dist/esm/app-globals-77cd8c8e.js +254 -0
  244. package/dist/esm/app-globals-77cd8c8e.js.map +1 -0
  245. package/dist/esm/cat-alert_15.entry.js +4633 -0
  246. package/dist/esm/cat-alert_15.entry.js.map +1 -0
  247. package/dist/esm/cat-icon-registry-a7acd6f7.js +438 -0
  248. package/dist/esm/cat-icon-registry-a7acd6f7.js.map +1 -0
  249. package/dist/esm/catalyst.js +22 -0
  250. package/dist/esm/catalyst.js.map +1 -0
  251. package/dist/esm/index-fd12be19.js +1320 -0
  252. package/dist/esm/index-fd12be19.js.map +1 -0
  253. package/dist/esm/index.js +3 -0
  254. package/dist/esm/index.js.map +1 -0
  255. package/dist/esm/loader.js +22 -0
  256. package/dist/esm/loader.js.map +1 -0
  257. package/dist/esm/polyfills/core-js.js +11 -0
  258. package/dist/esm/polyfills/css-shim.js +1 -0
  259. package/dist/esm/polyfills/dom.js +79 -0
  260. package/dist/esm/polyfills/es5-html-element.js +1 -0
  261. package/dist/esm/polyfills/index.js +34 -0
  262. package/dist/esm/polyfills/system.js +6 -0
  263. package/dist/index.cjs.js +1 -0
  264. package/dist/index.js +1 -0
  265. package/dist/types/components/cat-alert/cat-alert.d.ts +14 -0
  266. package/dist/types/components/cat-badge/cat-badge.d.ts +29 -0
  267. package/dist/types/components/cat-button/cat-button.d.ts +134 -0
  268. package/dist/types/components/cat-card/cat-card.d.ts +7 -0
  269. package/dist/types/components/cat-checkbox/cat-checkbox.d.ts +69 -0
  270. package/dist/types/components/cat-i18n/cat-i18n-registry.d.ts +18 -0
  271. package/dist/types/components/cat-icon/cat-icon-registry.d.ts +15 -0
  272. package/dist/types/components/cat-icon/cat-icon.d.ts +23 -0
  273. package/dist/types/components/cat-input/cat-input.d.ts +130 -0
  274. package/dist/types/components/cat-menu/cat-menu.d.ts +31 -0
  275. package/dist/types/components/cat-radio/cat-radio.d.ts +63 -0
  276. package/dist/types/components/cat-scrollable/cat-scrollable.d.ts +52 -0
  277. package/dist/types/components/cat-skeleton/cat-skeleton.d.ts +28 -0
  278. package/dist/types/components/cat-spinner/cat-spinner.d.ts +15 -0
  279. package/dist/types/components/cat-textarea/cat-textarea.d.ts +85 -0
  280. package/dist/types/components/cat-toggle/cat-toggle.d.ts +64 -0
  281. package/dist/types/components/cat-tooltip/cat-tooltip.d.ts +46 -0
  282. package/dist/types/components.d.ts +1167 -0
  283. package/dist/types/index.d.ts +3 -0
  284. package/dist/types/init.d.ts +1 -0
  285. package/dist/types/stencil-public-runtime.d.ts +1565 -0
  286. package/dist/types/utils/breakpoints.d.ts +7 -0
  287. package/dist/types/utils/first-tabbable.d.ts +4 -0
  288. package/dist/types/utils/is-touch-screen.d.ts +2 -0
  289. package/dist/types/utils/media-matcher.d.ts +13 -0
  290. package/dist/types/utils/platform.d.ts +18 -0
  291. package/loader/cdn.js +3 -0
  292. package/loader/index.cjs.js +3 -0
  293. package/loader/index.d.ts +12 -0
  294. package/loader/index.es2017.js +3 -0
  295. package/loader/index.js +4 -0
  296. package/loader/package.json +10 -0
  297. package/package.json +2 -2
@@ -0,0 +1,184 @@
1
+ import { autoUpdate, computePosition, flip, offset } from '@floating-ui/dom';
2
+ import { Component, Event, h, Host, Listen, Prop } from '@stencil/core';
3
+ import * as focusTrap from 'focus-trap';
4
+ import { tabbable } from 'tabbable';
5
+ import firstTabbable from '../../utils/first-tabbable';
6
+ let nextUniqueId = 0;
7
+ export class CatMenu {
8
+ constructor() {
9
+ this.id = nextUniqueId++;
10
+ /**
11
+ * The placement of the menu.
12
+ */
13
+ this.placement = 'bottom-start';
14
+ }
15
+ clickHandler(event) {
16
+ var _a;
17
+ // hide menu on button click
18
+ if (this.content && event.composedPath().includes(this.content)) {
19
+ (_a = this.trap) === null || _a === void 0 ? void 0 : _a.deactivate();
20
+ this.hide();
21
+ }
22
+ }
23
+ componentDidLoad() {
24
+ var _a, _b, _c, _d, _e;
25
+ this.trigger = firstTabbable(this.triggerSlot);
26
+ (_a = this.trigger) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-haspopup', 'true');
27
+ (_b = this.trigger) === null || _b === void 0 ? void 0 : _b.setAttribute('aria-expanded', 'false');
28
+ (_c = this.trigger) === null || _c === void 0 ? void 0 : _c.setAttribute('aria-controls', this.contentId);
29
+ (_d = this.content) === null || _d === void 0 ? void 0 : _d.setAttribute('id', this.contentId);
30
+ if (this.trigger && this.content) {
31
+ (_e = this.trigger) === null || _e === void 0 ? void 0 : _e.addEventListener('click', () => this.show());
32
+ autoUpdate(this.trigger, this.content, () => this.update());
33
+ }
34
+ this.keyListener = event => {
35
+ if (this.content && ['ArrowDown', 'ArrowUp'].includes(event.key)) {
36
+ const targetElements = tabbable(this.content, { includeContainer: false, getShadowRoot: true });
37
+ const activeElement = firstTabbable(document.activeElement);
38
+ const activeIdx = activeElement ? targetElements.indexOf(activeElement) : -1;
39
+ const activeOff = event.key === 'ArrowDown' ? 1 : -1;
40
+ const targetIdx = activeIdx < 0 ? 0 : (activeIdx + activeOff + targetElements.length) % targetElements.length;
41
+ targetElements[targetIdx].focus();
42
+ event.preventDefault();
43
+ }
44
+ };
45
+ document.addEventListener('keydown', this.keyListener);
46
+ }
47
+ disconnectedCallback() {
48
+ if (this.keyListener) {
49
+ document.removeEventListener('keydown', this.keyListener);
50
+ }
51
+ }
52
+ render() {
53
+ return (h(Host, null,
54
+ h("slot", { name: "trigger", ref: el => (this.triggerSlot = el) }),
55
+ h("div", { class: "content", ref: el => (this.content = el) },
56
+ h("slot", { name: "content" }))));
57
+ }
58
+ get contentId() {
59
+ return `cat-menu-${this.id}`;
60
+ }
61
+ show() {
62
+ var _a;
63
+ if (this.content) {
64
+ this.content.style.display = 'block';
65
+ (_a = this.trigger) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-expanded', 'true');
66
+ this.catOpen.emit();
67
+ this.trap = this.trap
68
+ ? this.trap.updateContainerElements(this.content)
69
+ : focusTrap.createFocusTrap(this.content, {
70
+ tabbableOptions: {
71
+ getShadowRoot: true
72
+ },
73
+ allowOutsideClick: true,
74
+ clickOutsideDeactivates: event => !this.content || !event.composedPath().includes(this.content),
75
+ onPostDeactivate: () => this.hide()
76
+ });
77
+ this.trap.activate();
78
+ }
79
+ }
80
+ hide() {
81
+ var _a;
82
+ if (this.content) {
83
+ this.content.style.display = '';
84
+ (_a = this.trigger) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-expanded', 'false');
85
+ this.catClose.emit();
86
+ }
87
+ }
88
+ update() {
89
+ if (this.trigger && this.content) {
90
+ computePosition(this.trigger, this.content, {
91
+ placement: this.placement,
92
+ middleware: [offset(CatMenu.OFFSET), flip()]
93
+ }).then(({ x, y }) => {
94
+ if (this.content) {
95
+ Object.assign(this.content.style, {
96
+ left: `${x}px`,
97
+ top: `${y}px`
98
+ });
99
+ }
100
+ });
101
+ }
102
+ }
103
+ static get is() { return "cat-menu"; }
104
+ static get encapsulation() { return "shadow"; }
105
+ static get originalStyleUrls() { return {
106
+ "$": ["cat-menu.scss"]
107
+ }; }
108
+ static get styleUrls() { return {
109
+ "$": ["cat-menu.css"]
110
+ }; }
111
+ static get properties() { return {
112
+ "placement": {
113
+ "type": "string",
114
+ "mutable": false,
115
+ "complexType": {
116
+ "original": "Placement",
117
+ "resolved": "\"bottom\" | \"bottom-end\" | \"bottom-start\" | \"left\" | \"left-end\" | \"left-start\" | \"right\" | \"right-end\" | \"right-start\" | \"top\" | \"top-end\" | \"top-start\"",
118
+ "references": {
119
+ "Placement": {
120
+ "location": "import",
121
+ "path": "@floating-ui/dom"
122
+ }
123
+ }
124
+ },
125
+ "required": false,
126
+ "optional": false,
127
+ "docs": {
128
+ "tags": [],
129
+ "text": "The placement of the menu."
130
+ },
131
+ "attribute": "placement",
132
+ "reflect": false,
133
+ "defaultValue": "'bottom-start'"
134
+ }
135
+ }; }
136
+ static get events() { return [{
137
+ "method": "catOpen",
138
+ "name": "catOpen",
139
+ "bubbles": true,
140
+ "cancelable": true,
141
+ "composed": true,
142
+ "docs": {
143
+ "tags": [],
144
+ "text": "Emitted when the menu is opened."
145
+ },
146
+ "complexType": {
147
+ "original": "FocusEvent",
148
+ "resolved": "FocusEvent",
149
+ "references": {
150
+ "FocusEvent": {
151
+ "location": "global"
152
+ }
153
+ }
154
+ }
155
+ }, {
156
+ "method": "catClose",
157
+ "name": "catClose",
158
+ "bubbles": true,
159
+ "cancelable": true,
160
+ "composed": true,
161
+ "docs": {
162
+ "tags": [],
163
+ "text": "Emitted when the menu is closed."
164
+ },
165
+ "complexType": {
166
+ "original": "FocusEvent",
167
+ "resolved": "FocusEvent",
168
+ "references": {
169
+ "FocusEvent": {
170
+ "location": "global"
171
+ }
172
+ }
173
+ }
174
+ }]; }
175
+ static get listeners() { return [{
176
+ "name": "catClick",
177
+ "method": "clickHandler",
178
+ "target": undefined,
179
+ "capture": false,
180
+ "passive": false
181
+ }]; }
182
+ }
183
+ CatMenu.OFFSET = 4;
184
+ //# sourceMappingURL=cat-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cat-menu.js","sourceRoot":"","sources":["../../../src/components/cat-menu/cat-menu.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAa,MAAM,kBAAkB,CAAC;AACxF,OAAO,EAAE,SAAS,EAAE,KAAK,EAAgB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,KAAK,SAAS,MAAM,YAAY,CAAC;AACxC,OAAO,EAAoB,QAAQ,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,aAAa,MAAM,4BAA4B,CAAC;AAEvD,IAAI,YAAY,GAAG,CAAC,CAAC;AAOrB,MAAM,OAAO,OAAO;EALpB;IAOmB,OAAE,GAAG,YAAY,EAAE,CAAC;IAOrC;;OAEG;IACK,cAAS,GAAc,cAAc,CAAC;GA6G/C;EAhGC,YAAY,CAAC,KAA8B;;IACzC,4BAA4B;IAC5B,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;MAC/D,MAAA,IAAI,CAAC,IAAI,0CAAE,UAAU,EAAE,CAAC;MACxB,IAAI,CAAC,IAAI,EAAE,CAAC;KACb;EACH,CAAC;EAED,gBAAgB;;IACd,IAAI,CAAC,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAA,IAAI,CAAC,OAAO,0CAAE,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IACpD,MAAA,IAAI,CAAC,OAAO,0CAAE,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IACrD,MAAA,IAAI,CAAC,OAAO,0CAAE,YAAY,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5D,MAAA,IAAI,CAAC,OAAO,0CAAE,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACjD,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE;MAChC,MAAA,IAAI,CAAC,OAAO,0CAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;MAC3D,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;KAC7D;IAED,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,EAAE;MACzB,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QAChE,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAChG,MAAM,aAAa,GAAG,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC;QAC9G,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;QAClC,KAAK,CAAC,cAAc,EAAE,CAAC;OACxB;IACH,CAAC,CAAC;IACF,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;EACzD,CAAC;EAED,oBAAoB;IAClB,IAAI,IAAI,CAAC,WAAW,EAAE;MACpB,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;KAC3D;EACH,CAAC;EAED,MAAM;IACJ,OAAO,CACL,EAAC,IAAI;MACH,YAAM,IAAI,EAAC,SAAS,EAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,GAAS;MAChE,WAAK,KAAK,EAAC,SAAS,EAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QACjD,YAAM,IAAI,EAAC,SAAS,GAAQ,CACxB,CACD,CACR,CAAC;EACJ,CAAC;EAED,IAAY,SAAS;IACnB,OAAO,YAAY,IAAI,CAAC,EAAE,EAAE,CAAC;EAC/B,CAAC;EAEO,IAAI;;IACV,IAAI,IAAI,CAAC,OAAO,EAAE;MAChB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;MACrC,MAAA,IAAI,CAAC,OAAO,0CAAE,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;MACpD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;MACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;QACnB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC;QACjD,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE;UACtC,eAAe,EAAE;YACf,aAAa,EAAE,IAAI;WACpB;UACD,iBAAiB,EAAE,IAAI;UACvB,uBAAuB,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;UAC/F,gBAAgB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE;SACpC,CAAC,CAAC;MACP,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;KACtB;EACH,CAAC;EAEO,IAAI;;IACV,IAAI,IAAI,CAAC,OAAO,EAAE;MAChB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;MAChC,MAAA,IAAI,CAAC,OAAO,0CAAE,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;MACrD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KACtB;EACH,CAAC;EAEO,MAAM;IACZ,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE;MAChC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;QAC1C,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,UAAU,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC;OAC7C,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;QACnB,IAAI,IAAI,CAAC,OAAO,EAAE;UAChB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YAChC,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,GAAG,EAAE,GAAG,CAAC,IAAI;WACd,CAAC,CAAC;SACJ;MACH,CAAC,CAAC,CAAC;KACJ;EACH,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAvHuB,cAAM,GAAG,CAAE,CAAA","sourcesContent":["import { autoUpdate, computePosition, flip, offset, Placement } from '@floating-ui/dom';\nimport { Component, Event, EventEmitter, h, Host, Listen, Prop } from '@stencil/core';\nimport * as focusTrap from 'focus-trap';\nimport { FocusableElement, tabbable } from 'tabbable';\nimport firstTabbable from '../../utils/first-tabbable';\n\nlet nextUniqueId = 0;\n\n@Component({\n tag: 'cat-menu',\n styleUrl: 'cat-menu.scss',\n shadow: true\n})\nexport class CatMenu {\n private static readonly OFFSET = 4;\n private readonly id = nextUniqueId++;\n private triggerSlot?: Element;\n private trigger?: FocusableElement;\n private content?: HTMLElement;\n private trap?: focusTrap.FocusTrap;\n private keyListener?: (event: KeyboardEvent) => void;\n\n /**\n * The placement of the menu.\n */\n @Prop() placement: Placement = 'bottom-start';\n\n /**\n * Emitted when the menu is opened.\n */\n @Event() catOpen!: EventEmitter<FocusEvent>;\n\n /**\n * Emitted when the menu is closed.\n */\n @Event() catClose!: EventEmitter<FocusEvent>;\n\n @Listen('catClick')\n clickHandler(event: CustomEvent<MouseEvent>) {\n // hide menu on button click\n if (this.content && event.composedPath().includes(this.content)) {\n this.trap?.deactivate();\n this.hide();\n }\n }\n\n componentDidLoad(): void {\n this.trigger = firstTabbable(this.triggerSlot);\n this.trigger?.setAttribute('aria-haspopup', 'true');\n this.trigger?.setAttribute('aria-expanded', 'false');\n this.trigger?.setAttribute('aria-controls', this.contentId);\n this.content?.setAttribute('id', this.contentId);\n if (this.trigger && this.content) {\n this.trigger?.addEventListener('click', () => this.show());\n autoUpdate(this.trigger, this.content, () => this.update());\n }\n\n this.keyListener = event => {\n if (this.content && ['ArrowDown', 'ArrowUp'].includes(event.key)) {\n const targetElements = tabbable(this.content, { includeContainer: false, getShadowRoot: true });\n const activeElement = firstTabbable(document.activeElement);\n const activeIdx = activeElement ? targetElements.indexOf(activeElement) : -1;\n const activeOff = event.key === 'ArrowDown' ? 1 : -1;\n const targetIdx = activeIdx < 0 ? 0 : (activeIdx + activeOff + targetElements.length) % targetElements.length;\n targetElements[targetIdx].focus();\n event.preventDefault();\n }\n };\n document.addEventListener('keydown', this.keyListener);\n }\n\n disconnectedCallback(): void {\n if (this.keyListener) {\n document.removeEventListener('keydown', this.keyListener);\n }\n }\n\n render() {\n return (\n <Host>\n <slot name=\"trigger\" ref={el => (this.triggerSlot = el)}></slot>\n <div class=\"content\" ref={el => (this.content = el)}>\n <slot name=\"content\"></slot>\n </div>\n </Host>\n );\n }\n\n private get contentId() {\n return `cat-menu-${this.id}`;\n }\n\n private show() {\n if (this.content) {\n this.content.style.display = 'block';\n this.trigger?.setAttribute('aria-expanded', 'true');\n this.catOpen.emit();\n this.trap = this.trap\n ? this.trap.updateContainerElements(this.content)\n : focusTrap.createFocusTrap(this.content, {\n tabbableOptions: {\n getShadowRoot: true\n },\n allowOutsideClick: true,\n clickOutsideDeactivates: event => !this.content || !event.composedPath().includes(this.content),\n onPostDeactivate: () => this.hide()\n });\n this.trap.activate();\n }\n }\n\n private hide() {\n if (this.content) {\n this.content.style.display = '';\n this.trigger?.setAttribute('aria-expanded', 'false');\n this.catClose.emit();\n }\n }\n\n private update() {\n if (this.trigger && this.content) {\n computePosition(this.trigger, this.content, {\n placement: this.placement,\n middleware: [offset(CatMenu.OFFSET), flip()]\n }).then(({ x, y }) => {\n if (this.content) {\n Object.assign(this.content.style, {\n left: `${x}px`,\n top: `${y}px`\n });\n }\n });\n }\n }\n}\n"]}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Auto-generated file. Do not edit directly.
3
+ */
4
+ /* stylelint-disable value-keyword-case */
5
+ /* stylelint-enable value-keyword-case */
6
+ :host {
7
+ display: flex;
8
+ margin-bottom: 1rem;
9
+ }
10
+
11
+ :host([hidden]) {
12
+ display: none;
13
+ }
14
+
15
+ label {
16
+ display: flex;
17
+ gap: 0.5rem;
18
+ font-size: 0.9375rem;
19
+ line-height: 1.25rem;
20
+ cursor: pointer;
21
+ }
22
+
23
+ .radio {
24
+ display: flex;
25
+ position: relative;
26
+ }
27
+
28
+ .circle {
29
+ position: absolute;
30
+ width: 0.75rem;
31
+ height: 0.75rem;
32
+ background-color: rgb(var(--cat-primary-bg, 32, 127, 138));
33
+ border-radius: 10rem;
34
+ top: calc(50% - 0.375rem);
35
+ left: calc(50% - 0.375rem);
36
+ visibility: hidden;
37
+ }
38
+
39
+ input {
40
+ margin: 0;
41
+ width: 1.25rem;
42
+ height: 1.25rem;
43
+ appearance: none;
44
+ background-color: white;
45
+ border: 1px solid #d7dbe0;
46
+ border-radius: 10rem;
47
+ cursor: inherit;
48
+ }
49
+ input:checked {
50
+ border-color: rgb(var(--cat-primary-bg, 32, 127, 138));
51
+ }
52
+ input:checked + .circle {
53
+ visibility: visible;
54
+ }
55
+ input:focus-visible {
56
+ outline: 2px solid rgb(var(--cat-border-color-focus, 0, 113, 255));
57
+ outline-offset: 1px;
58
+ }
59
+
60
+ .is-hidden .label {
61
+ position: absolute !important;
62
+ width: 1px !important;
63
+ height: 1px !important;
64
+ padding: 0 !important;
65
+ margin: -1px !important;
66
+ overflow: hidden !important;
67
+ clip: rect(0, 0, 0, 0) !important;
68
+ white-space: nowrap !important;
69
+ border: 0 !important;
70
+ }
71
+
72
+ .is-disabled {
73
+ cursor: not-allowed;
74
+ color: rgb(var(--cat-font-color-muted, 105, 118, 135));
75
+ }
76
+ .is-disabled input {
77
+ background-color: #f8f8fb;
78
+ }
79
+ .is-disabled input:checked {
80
+ border-color: #d7dbe0;
81
+ }
82
+ .is-disabled .circle {
83
+ background-color: #d7dbe0;
84
+ }
@@ -0,0 +1,283 @@
1
+ import { Component, Event, h, Prop, Method } from '@stencil/core';
2
+ import log from 'loglevel';
3
+ let nextUniqueId = 0;
4
+ /**
5
+ * Radio Buttons are graphical interface elements that allow user to choose
6
+ * only one of a predefined set of mutually exclusive options.
7
+ *
8
+ * @part label - The label content.
9
+ */
10
+ export class CatRadio {
11
+ constructor() {
12
+ this.id = `cat-radio-${++nextUniqueId}`;
13
+ /**
14
+ * Whether this radio is checked.
15
+ */
16
+ this.checked = false;
17
+ /**
18
+ * Whether this radio is disabled.
19
+ */
20
+ this.disabled = false;
21
+ /**
22
+ * The label of the radio that is visible.
23
+ */
24
+ this.label = '';
25
+ /**
26
+ * Visually hide the label, but still show it to assistive technologies like screen readers.
27
+ */
28
+ this.labelHidden = false;
29
+ /**
30
+ * Whether the radio is required.
31
+ */
32
+ this.required = false;
33
+ }
34
+ componentWillRender() {
35
+ if (!this.label) {
36
+ log.error('[A11y] Missing ARIA label on radio', this);
37
+ }
38
+ }
39
+ /**
40
+ * Sets focus on the radio. Use this method instead of `radio.focus()`.
41
+ *
42
+ * @param options An optional object providing options to control aspects of
43
+ * the focusing process.
44
+ */
45
+ async setFocus(options) {
46
+ this.input.focus(options);
47
+ }
48
+ render() {
49
+ return (h("label", { htmlFor: this.id, class: { 'is-hidden': this.labelHidden, 'is-disabled': this.disabled } },
50
+ h("span", { class: "radio" },
51
+ h("input", { ref: el => (this.input = el), id: this.id, type: "radio", name: this.name, value: this.value, checked: this.checked, required: this.required, disabled: this.disabled, onInput: this.onChange.bind(this), onFocus: this.onFocus.bind(this), onBlur: this.onBlur.bind(this) }),
52
+ h("span", { class: "circle" })),
53
+ h("span", { class: "label", part: "label" }, this.label)));
54
+ }
55
+ onChange(event) {
56
+ this.catChange.emit(event);
57
+ }
58
+ onFocus(event) {
59
+ this.catFocus.emit(event);
60
+ }
61
+ onBlur(event) {
62
+ this.catBlur.emit(event);
63
+ }
64
+ static get is() { return "cat-radio"; }
65
+ static get encapsulation() { return "shadow"; }
66
+ static get originalStyleUrls() { return {
67
+ "$": ["cat-radio.scss"]
68
+ }; }
69
+ static get styleUrls() { return {
70
+ "$": ["cat-radio.css"]
71
+ }; }
72
+ static get properties() { return {
73
+ "checked": {
74
+ "type": "boolean",
75
+ "mutable": false,
76
+ "complexType": {
77
+ "original": "boolean",
78
+ "resolved": "boolean",
79
+ "references": {}
80
+ },
81
+ "required": false,
82
+ "optional": false,
83
+ "docs": {
84
+ "tags": [],
85
+ "text": "Whether this radio is checked."
86
+ },
87
+ "attribute": "checked",
88
+ "reflect": false,
89
+ "defaultValue": "false"
90
+ },
91
+ "disabled": {
92
+ "type": "boolean",
93
+ "mutable": false,
94
+ "complexType": {
95
+ "original": "boolean",
96
+ "resolved": "boolean",
97
+ "references": {}
98
+ },
99
+ "required": false,
100
+ "optional": false,
101
+ "docs": {
102
+ "tags": [],
103
+ "text": "Whether this radio is disabled."
104
+ },
105
+ "attribute": "disabled",
106
+ "reflect": false,
107
+ "defaultValue": "false"
108
+ },
109
+ "label": {
110
+ "type": "string",
111
+ "mutable": false,
112
+ "complexType": {
113
+ "original": "string",
114
+ "resolved": "string",
115
+ "references": {}
116
+ },
117
+ "required": false,
118
+ "optional": false,
119
+ "docs": {
120
+ "tags": [],
121
+ "text": "The label of the radio that is visible."
122
+ },
123
+ "attribute": "label",
124
+ "reflect": false,
125
+ "defaultValue": "''"
126
+ },
127
+ "labelHidden": {
128
+ "type": "boolean",
129
+ "mutable": false,
130
+ "complexType": {
131
+ "original": "boolean",
132
+ "resolved": "boolean",
133
+ "references": {}
134
+ },
135
+ "required": false,
136
+ "optional": false,
137
+ "docs": {
138
+ "tags": [],
139
+ "text": "Visually hide the label, but still show it to assistive technologies like screen readers."
140
+ },
141
+ "attribute": "label-hidden",
142
+ "reflect": false,
143
+ "defaultValue": "false"
144
+ },
145
+ "name": {
146
+ "type": "string",
147
+ "mutable": false,
148
+ "complexType": {
149
+ "original": "string",
150
+ "resolved": "string | undefined",
151
+ "references": {}
152
+ },
153
+ "required": false,
154
+ "optional": true,
155
+ "docs": {
156
+ "tags": [],
157
+ "text": "The name of the radio component."
158
+ },
159
+ "attribute": "name",
160
+ "reflect": false
161
+ },
162
+ "required": {
163
+ "type": "boolean",
164
+ "mutable": false,
165
+ "complexType": {
166
+ "original": "boolean",
167
+ "resolved": "boolean",
168
+ "references": {}
169
+ },
170
+ "required": false,
171
+ "optional": false,
172
+ "docs": {
173
+ "tags": [],
174
+ "text": "Whether the radio is required."
175
+ },
176
+ "attribute": "required",
177
+ "reflect": false,
178
+ "defaultValue": "false"
179
+ },
180
+ "value": {
181
+ "type": "string",
182
+ "mutable": false,
183
+ "complexType": {
184
+ "original": "string",
185
+ "resolved": "string | undefined",
186
+ "references": {}
187
+ },
188
+ "required": false,
189
+ "optional": true,
190
+ "docs": {
191
+ "tags": [],
192
+ "text": "The value of the radio component."
193
+ },
194
+ "attribute": "value",
195
+ "reflect": false
196
+ }
197
+ }; }
198
+ static get events() { return [{
199
+ "method": "catChange",
200
+ "name": "catChange",
201
+ "bubbles": true,
202
+ "cancelable": true,
203
+ "composed": true,
204
+ "docs": {
205
+ "tags": [],
206
+ "text": "Emitted when the radio is changed."
207
+ },
208
+ "complexType": {
209
+ "original": "any",
210
+ "resolved": "any",
211
+ "references": {}
212
+ }
213
+ }, {
214
+ "method": "catFocus",
215
+ "name": "catFocus",
216
+ "bubbles": true,
217
+ "cancelable": true,
218
+ "composed": true,
219
+ "docs": {
220
+ "tags": [],
221
+ "text": "Emitted when the radio received focus."
222
+ },
223
+ "complexType": {
224
+ "original": "FocusEvent",
225
+ "resolved": "FocusEvent",
226
+ "references": {
227
+ "FocusEvent": {
228
+ "location": "global"
229
+ }
230
+ }
231
+ }
232
+ }, {
233
+ "method": "catBlur",
234
+ "name": "catBlur",
235
+ "bubbles": true,
236
+ "cancelable": true,
237
+ "composed": true,
238
+ "docs": {
239
+ "tags": [],
240
+ "text": "Emitted when the radio loses focus."
241
+ },
242
+ "complexType": {
243
+ "original": "FocusEvent",
244
+ "resolved": "FocusEvent",
245
+ "references": {
246
+ "FocusEvent": {
247
+ "location": "global"
248
+ }
249
+ }
250
+ }
251
+ }]; }
252
+ static get methods() { return {
253
+ "setFocus": {
254
+ "complexType": {
255
+ "signature": "(options?: FocusOptions | undefined) => Promise<void>",
256
+ "parameters": [{
257
+ "tags": [{
258
+ "name": "param",
259
+ "text": "options An optional object providing options to control aspects of\nthe focusing process."
260
+ }],
261
+ "text": "An optional object providing options to control aspects of\nthe focusing process."
262
+ }],
263
+ "references": {
264
+ "Promise": {
265
+ "location": "global"
266
+ },
267
+ "FocusOptions": {
268
+ "location": "global"
269
+ }
270
+ },
271
+ "return": "Promise<void>"
272
+ },
273
+ "docs": {
274
+ "text": "Sets focus on the radio. Use this method instead of `radio.focus()`.",
275
+ "tags": [{
276
+ "name": "param",
277
+ "text": "options An optional object providing options to control aspects of\nthe focusing process."
278
+ }]
279
+ }
280
+ }
281
+ }; }
282
+ }
283
+ //# sourceMappingURL=cat-radio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cat-radio.js","sourceRoot":"","sources":["../../../src/components/cat-radio/cat-radio.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAgB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,GAAG,MAAM,UAAU,CAAC;AAE3B,IAAI,YAAY,GAAG,CAAC,CAAC;AAErB;;;;;GAKG;AAMH,MAAM,OAAO,QAAQ;EALrB;IAMmB,OAAE,GAAG,aAAa,EAAE,YAAY,EAAE,CAAC;IAGpD;;OAEG;IACK,YAAO,GAAG,KAAK,CAAC;IAExB;;OAEG;IACK,aAAQ,GAAG,KAAK,CAAC;IAEzB;;OAEG;IACK,UAAK,GAAG,EAAE,CAAC;IAEnB;;OAEG;IACK,gBAAW,GAAG,KAAK,CAAC;IAO5B;;OAEG;IACK,aAAQ,GAAG,KAAK,CAAC;GA4E1B;EAtDC,mBAAmB;IACjB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;MACf,GAAG,CAAC,KAAK,CAAC,oCAAoC,EAAE,IAAI,CAAC,CAAC;KACvD;EACH,CAAC;EAED;;;;;KAKG;EAEH,KAAK,CAAC,QAAQ,CAAC,OAAsB;IACnC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;EAC5B,CAAC;EAED,MAAM;IACJ,OAAO,CACL,aAAO,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,IAAI,CAAC,QAAQ,EAAE;MAC7F,YAAM,KAAK,EAAC,OAAO;QACjB,aACE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,EAAsB,CAAC,EAChD,EAAE,EAAE,IAAI,CAAC,EAAE,EACX,IAAI,EAAC,OAAO,EACZ,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EACjC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAChC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAC9B;QACF,YAAM,KAAK,EAAC,QAAQ,GAAQ,CACvB;MACP,YAAM,KAAK,EAAC,OAAO,EAAC,IAAI,EAAC,OAAO,IAC7B,IAAI,CAAC,KAAK,CACN,CACD,CACT,CAAC;EACJ,CAAC;EAEO,QAAQ,CAAC,KAAY;IAC3B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EAC7B,CAAC;EAEO,OAAO,CAAC,KAAiB;IAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EAC5B,CAAC;EAEO,MAAM,CAAC,KAAiB;IAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EAC3B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Event, EventEmitter, h, Prop, Method } from '@stencil/core';\nimport log from 'loglevel';\n\nlet nextUniqueId = 0;\n\n/**\n * Radio Buttons are graphical interface elements that allow user to choose\n * only one of a predefined set of mutually exclusive options.\n *\n * @part label - The label content.\n */\n@Component({\n tag: 'cat-radio',\n styleUrl: 'cat-radio.scss',\n shadow: true\n})\nexport class CatRadio {\n private readonly id = `cat-radio-${++nextUniqueId}`;\n private input!: HTMLInputElement;\n\n /**\n * Whether this radio is checked.\n */\n @Prop() checked = false;\n\n /**\n * Whether this radio is disabled.\n */\n @Prop() disabled = false;\n\n /**\n * The label of the radio that is visible.\n */\n @Prop() label = '';\n\n /**\n * Visually hide the label, but still show it to assistive technologies like screen readers.\n */\n @Prop() labelHidden = false;\n\n /**\n * The name of the radio component.\n */\n @Prop() name?: string;\n\n /**\n * Whether the radio is required.\n */\n @Prop() required = false;\n\n /**\n * The value of the radio component.\n */\n @Prop() value?: string;\n\n /**\n * Emitted when the radio is changed.\n */\n @Event() catChange!: EventEmitter;\n\n /**\n * Emitted when the radio received focus.\n */\n @Event() catFocus!: EventEmitter<FocusEvent>;\n\n /**\n * Emitted when the radio loses focus.\n */\n @Event() catBlur!: EventEmitter<FocusEvent>;\n\n componentWillRender(): void {\n if (!this.label) {\n log.error('[A11y] Missing ARIA label on radio', this);\n }\n }\n\n /**\n * Sets focus on the radio. Use this method instead of `radio.focus()`.\n *\n * @param options An optional object providing options to control aspects of\n * the focusing process.\n */\n @Method()\n async setFocus(options?: FocusOptions): Promise<void> {\n this.input.focus(options);\n }\n\n render() {\n return (\n <label htmlFor={this.id} class={{ 'is-hidden': this.labelHidden, 'is-disabled': this.disabled }}>\n <span class=\"radio\">\n <input\n ref={el => (this.input = el as HTMLInputElement)}\n id={this.id}\n type=\"radio\"\n name={this.name}\n value={this.value}\n checked={this.checked}\n required={this.required}\n disabled={this.disabled}\n onInput={this.onChange.bind(this)}\n onFocus={this.onFocus.bind(this)}\n onBlur={this.onBlur.bind(this)}\n />\n <span class=\"circle\"></span>\n </span>\n <span class=\"label\" part=\"label\">\n {this.label}\n </span>\n </label>\n );\n }\n\n private onChange(event: Event) {\n this.catChange.emit(event);\n }\n\n private onFocus(event: FocusEvent) {\n this.catFocus.emit(event);\n }\n\n private onBlur(event: FocusEvent) {\n this.catBlur.emit(event);\n }\n}\n"]}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Auto-generated file. Do not edit directly.
3
+ */
4
+ /* stylelint-disable value-keyword-case */
5
+ /* stylelint-enable value-keyword-case */
6
+ :host {
7
+ overflow: hidden;
8
+ position: relative;
9
+ display: flex;
10
+ }
11
+
12
+ :host([hidden]) {
13
+ display: none;
14
+ }
15
+
16
+ .shadow-bottom, .shadow-right, .shadow-left, .shadow-top {
17
+ position: absolute;
18
+ transition: box-shadow 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);
19
+ }
20
+
21
+ .shadow-top {
22
+ z-index: 2;
23
+ width: 100%;
24
+ top: 0;
25
+ }
26
+
27
+ .shadow-left {
28
+ z-index: 4;
29
+ height: 100%;
30
+ left: 0;
31
+ }
32
+
33
+ .shadow-right {
34
+ z-index: 4;
35
+ height: 100%;
36
+ right: 0;
37
+ }
38
+
39
+ .shadow-bottom {
40
+ z-index: 2;
41
+ width: 100%;
42
+ bottom: 0;
43
+ }
44
+
45
+ .scrollable-wrapper {
46
+ position: absolute;
47
+ top: 0;
48
+ left: 0;
49
+ right: 0;
50
+ bottom: 0;
51
+ pointer-events: none;
52
+ }
53
+ .scrollable-wrapper.cat-scrollable-top .shadow-top, .scrollable-wrapper.cat-scrollable-bottom .shadow-bottom, .scrollable-wrapper.cat-scrollable-left .shadow-left, .scrollable-wrapper.cat-scrollable-right .shadow-right {
54
+ box-shadow: 0 0 4px 1px rgba(16, 29, 48, 0.2);
55
+ }
56
+
57
+ .scrollable-content {
58
+ overflow: hidden;
59
+ white-space: nowrap;
60
+ }
61
+ .scrollable-content.scroll-x {
62
+ overflow-x: auto;
63
+ }
64
+ .scrollable-content.scroll-y {
65
+ overflow-y: auto;
66
+ }
67
+ .scrollable-content.no-overscroll {
68
+ overscroll-behavior: contain;
69
+ }