@graupl/graupl 1.0.0-beta.2 → 1.0.0-beta.21

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 (408) hide show
  1. package/README.md +9 -0
  2. package/dist/css/base/button.css +1 -1
  3. package/dist/css/base/button.css.map +1 -1
  4. package/dist/css/base/form.css +1 -1
  5. package/dist/css/base/form.css.map +1 -1
  6. package/dist/css/base/link.css +1 -1
  7. package/dist/css/base/link.css.map +1 -1
  8. package/dist/css/base/table.css +1 -1
  9. package/dist/css/base/table.css.map +1 -1
  10. package/dist/css/base.css +1 -1
  11. package/dist/css/base.css.map +1 -1
  12. package/dist/css/component/accordion.css +4 -1
  13. package/dist/css/component/accordion.css.map +1 -1
  14. package/dist/css/component/alert.css +1 -1
  15. package/dist/css/component/alert.css.map +1 -1
  16. package/dist/css/component/badge.css +2 -0
  17. package/dist/css/component/badge.css.map +1 -0
  18. package/dist/css/component/card.css +1 -1
  19. package/dist/css/component/card.css.map +1 -1
  20. package/dist/css/component/carousel.css +1 -1
  21. package/dist/css/component/carousel.css.map +1 -1
  22. package/dist/css/component/disclosure.css +2 -0
  23. package/dist/css/component/disclosure.css.map +1 -0
  24. package/dist/css/component/input-group.css.map +1 -1
  25. package/dist/css/component/list.css +1 -1
  26. package/dist/css/component/list.css.map +1 -1
  27. package/dist/css/component/menu.css +1 -1
  28. package/dist/css/component/menu.css.map +1 -1
  29. package/dist/css/component/navigation.css +1 -1
  30. package/dist/css/component/navigation.css.map +1 -1
  31. package/dist/css/component.css +4 -1
  32. package/dist/css/component.css.map +1 -1
  33. package/dist/css/graupl.css +4 -1
  34. package/dist/css/graupl.css.map +1 -1
  35. package/dist/css/init.css.map +1 -1
  36. package/dist/css/layout/columns.css +1 -1
  37. package/dist/css/layout/columns.css.map +1 -1
  38. package/dist/css/layout/container.css +1 -1
  39. package/dist/css/layout/container.css.map +1 -1
  40. package/dist/css/layout/flex-columns.css +1 -1
  41. package/dist/css/layout/flex-columns.css.map +1 -1
  42. package/dist/css/layout.css +4 -1
  43. package/dist/css/layout.css.map +1 -1
  44. package/dist/css/normalize.css.map +1 -1
  45. package/dist/css/state/focus.css +1 -1
  46. package/dist/css/state/focus.css.map +1 -1
  47. package/dist/css/state.css +1 -1
  48. package/dist/css/state.css.map +1 -1
  49. package/dist/css/theme/color.css +1 -1
  50. package/dist/css/theme/color.css.map +1 -1
  51. package/dist/css/theme/typography.css +1 -1
  52. package/dist/css/theme/typography.css.map +1 -1
  53. package/dist/css/theme.css +1 -1
  54. package/dist/css/theme.css.map +1 -1
  55. package/dist/css/utilities/alignment.css.map +1 -1
  56. package/dist/css/utilities/background.css +2 -0
  57. package/dist/css/utilities/background.css.map +1 -0
  58. package/dist/css/utilities/border.css +1 -1
  59. package/dist/css/utilities/border.css.map +1 -1
  60. package/dist/css/utilities/color.css +1 -1
  61. package/dist/css/utilities/color.css.map +1 -1
  62. package/dist/css/utilities/container.css +2 -0
  63. package/dist/css/utilities/container.css.map +1 -0
  64. package/dist/css/utilities/display.css +1 -1
  65. package/dist/css/utilities/display.css.map +1 -1
  66. package/dist/css/utilities/flex.css.map +1 -1
  67. package/dist/css/utilities/gradient.css +2 -0
  68. package/dist/css/utilities/gradient.css.map +1 -0
  69. package/dist/css/utilities/height.css +1 -1
  70. package/dist/css/utilities/height.css.map +1 -1
  71. package/dist/css/utilities/inset.css.map +1 -1
  72. package/dist/css/utilities/justification.css.map +1 -1
  73. package/dist/css/utilities/list.css.map +1 -1
  74. package/dist/css/utilities/order.css.map +1 -1
  75. package/dist/css/utilities/position.css +2 -0
  76. package/dist/css/utilities/position.css.map +1 -0
  77. package/dist/css/utilities/ratio.css +1 -1
  78. package/dist/css/utilities/ratio.css.map +1 -1
  79. package/dist/css/utilities/spacing.css +1 -1
  80. package/dist/css/utilities/spacing.css.map +1 -1
  81. package/dist/css/utilities/typography.css +1 -1
  82. package/dist/css/utilities/typography.css.map +1 -1
  83. package/dist/css/utilities/visibility.css +1 -1
  84. package/dist/css/utilities/visibility.css.map +1 -1
  85. package/dist/css/utilities/visually-hidden.css +2 -0
  86. package/dist/css/utilities/visually-hidden.css.map +1 -0
  87. package/dist/css/utilities/width.css +1 -1
  88. package/dist/css/utilities/width.css.map +1 -1
  89. package/dist/css/utilities/z-index.css +2 -0
  90. package/dist/css/utilities/z-index.css.map +1 -0
  91. package/dist/css/utilities.css +1 -1
  92. package/dist/css/utilities.css.map +1 -1
  93. package/dist/js/accordion.js +5 -0
  94. package/dist/js/accordion.js.map +1 -0
  95. package/dist/js/alert.js +5 -0
  96. package/dist/js/alert.js.map +1 -0
  97. package/dist/js/carousel.js +5 -0
  98. package/dist/js/carousel.js.map +1 -0
  99. package/dist/js/component/accordion.cjs.js +4 -2
  100. package/dist/js/component/accordion.cjs.js.map +1 -0
  101. package/dist/js/component/accordion.es.js +5 -0
  102. package/dist/js/component/accordion.es.js.map +1 -0
  103. package/dist/js/component/accordion.iife.js +4 -2
  104. package/dist/js/component/accordion.iife.js.map +1 -0
  105. package/dist/js/component/alert.cjs.js +4 -2
  106. package/dist/js/component/alert.cjs.js.map +1 -0
  107. package/dist/js/component/alert.es.js +5 -0
  108. package/dist/js/component/alert.es.js.map +1 -0
  109. package/dist/js/component/alert.iife.js +4 -2
  110. package/dist/js/component/alert.iife.js.map +1 -0
  111. package/dist/js/component/carousel.cjs.js +4 -2
  112. package/dist/js/component/carousel.cjs.js.map +1 -0
  113. package/dist/js/component/carousel.es.js +5 -0
  114. package/dist/js/component/carousel.es.js.map +1 -0
  115. package/dist/js/component/carousel.iife.js +4 -2
  116. package/dist/js/component/carousel.iife.js.map +1 -0
  117. package/dist/js/component/disclosure.cjs.js +5 -0
  118. package/dist/js/component/disclosure.cjs.js.map +1 -0
  119. package/dist/js/component/disclosure.es.js +5 -0
  120. package/dist/js/component/disclosure.es.js.map +1 -0
  121. package/dist/js/component/disclosure.iife.js +5 -0
  122. package/dist/js/component/disclosure.iife.js.map +1 -0
  123. package/dist/js/generator/accordion.cjs.js +5 -0
  124. package/dist/js/generator/accordion.cjs.js.map +1 -0
  125. package/dist/js/generator/accordion.es.js +5 -0
  126. package/dist/js/generator/accordion.es.js.map +1 -0
  127. package/dist/js/generator/accordion.iife.js +5 -0
  128. package/dist/js/generator/accordion.iife.js.map +1 -0
  129. package/dist/js/generator/alert.cjs.js +5 -0
  130. package/dist/js/generator/alert.cjs.js.map +1 -0
  131. package/dist/js/generator/alert.es.js +5 -0
  132. package/dist/js/generator/alert.es.js.map +1 -0
  133. package/dist/js/generator/alert.iife.js +5 -0
  134. package/dist/js/generator/alert.iife.js.map +1 -0
  135. package/dist/js/generator/carousel.cjs.js +5 -0
  136. package/dist/js/generator/carousel.cjs.js.map +1 -0
  137. package/dist/js/generator/carousel.es.js +5 -0
  138. package/dist/js/generator/carousel.es.js.map +1 -0
  139. package/dist/js/generator/carousel.iife.js +5 -0
  140. package/dist/js/generator/carousel.iife.js.map +1 -0
  141. package/dist/js/generator/disclosure.cjs.js +5 -0
  142. package/dist/js/generator/disclosure.cjs.js.map +1 -0
  143. package/dist/js/generator/disclosure.es.js +5 -0
  144. package/dist/js/generator/disclosure.es.js.map +1 -0
  145. package/dist/js/generator/disclosure.iife.js +5 -0
  146. package/dist/js/generator/disclosure.iife.js.map +1 -0
  147. package/dist/js/generator/navigation.cjs.js +3 -0
  148. package/dist/js/generator/navigation.cjs.js.map +1 -0
  149. package/dist/js/generator/navigation.es.js +3 -0
  150. package/dist/js/generator/navigation.es.js.map +1 -0
  151. package/dist/js/generator/navigation.iife.js +3 -0
  152. package/dist/js/generator/navigation.iife.js.map +1 -0
  153. package/dist/js/graupl.js +11 -0
  154. package/dist/js/graupl.js.map +1 -0
  155. package/dist/js/navigation.js +3 -0
  156. package/dist/js/navigation.js.map +1 -0
  157. package/package.json +49 -41
  158. package/scss/base/button.scss +1 -1
  159. package/scss/base/form.scss +1 -1
  160. package/scss/base/link.scss +1 -1
  161. package/scss/base/table.scss +1 -1
  162. package/scss/base.scss +1 -1
  163. package/scss/component/accordion.scss +1 -1
  164. package/scss/component/alert.scss +1 -1
  165. package/scss/component/badge.scss +3 -0
  166. package/scss/component/card.scss +1 -1
  167. package/scss/component/carousel.scss +1 -1
  168. package/scss/component/disclosure.scss +3 -0
  169. package/scss/component/input-group.scss +1 -1
  170. package/scss/component/list.scss +1 -1
  171. package/scss/component/menu.scss +1 -1
  172. package/scss/component/navigation.scss +1 -1
  173. package/scss/component.scss +1 -1
  174. package/scss/graupl.scss +1 -1
  175. package/scss/init.scss +1 -1
  176. package/scss/layout/columns.scss +1 -1
  177. package/scss/layout/container.scss +1 -1
  178. package/scss/layout/flex-columns.scss +1 -1
  179. package/scss/layout.scss +1 -1
  180. package/scss/normalize.scss +1 -1
  181. package/scss/state/focus.scss +1 -1
  182. package/scss/state.scss +1 -1
  183. package/scss/theme/color.scss +1 -1
  184. package/scss/theme/typography.scss +1 -1
  185. package/scss/theme.scss +1 -1
  186. package/scss/utilities/alignment.scss +1 -1
  187. package/scss/utilities/background.scss +3 -0
  188. package/scss/utilities/border.scss +1 -1
  189. package/scss/utilities/color.scss +1 -1
  190. package/scss/utilities/container.scss +3 -0
  191. package/scss/utilities/display.scss +1 -1
  192. package/scss/utilities/flex.scss +1 -1
  193. package/scss/utilities/gradient.scss +3 -0
  194. package/scss/utilities/height.scss +1 -1
  195. package/scss/utilities/inset.scss +1 -1
  196. package/scss/utilities/justification.scss +1 -1
  197. package/scss/utilities/list.scss +1 -1
  198. package/scss/utilities/order.scss +1 -1
  199. package/scss/utilities/position.scss +3 -0
  200. package/scss/utilities/ratio.scss +1 -1
  201. package/scss/utilities/spacing.scss +1 -1
  202. package/scss/utilities/typography.scss +1 -1
  203. package/scss/utilities/visibility.scss +1 -1
  204. package/scss/utilities/visually-hidden.scss +3 -0
  205. package/scss/utilities/width.scss +1 -1
  206. package/scss/utilities/z-index.scss +3 -0
  207. package/scss/utilities.scss +1 -1
  208. package/.browserslistrc +0 -3
  209. package/.czrc +0 -3
  210. package/.editorconfig +0 -13
  211. package/.github/CODE_OF_CONDUCT.md +0 -73
  212. package/.github/COMMIT_CONVENTION.md +0 -17
  213. package/.github/CONTRIBUTING.md +0 -86
  214. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -30
  215. package/.github/ISSUE_TEMPLATE/documentation.md +0 -20
  216. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  217. package/.github/SECURITY.md +0 -26
  218. package/.github/dependabot.yml +0 -17
  219. package/.github/pull_request_template.md +0 -5
  220. package/.github/workflows/codeql-analysis.yml +0 -71
  221. package/.github/workflows/docs.yml +0 -59
  222. package/.github/workflows/test.yml +0 -27
  223. package/.husky/commit-msg +0 -3
  224. package/.husky/pre-commit +0 -4
  225. package/.prettierignore +0 -12
  226. package/.stylelintignore +0 -9
  227. package/.versionrc.cjs +0 -61
  228. package/CHANGELOG.md +0 -392
  229. package/build.js +0 -7
  230. package/commitlint.config.js +0 -5
  231. package/dist/css/utilities/postion.css +0 -2
  232. package/dist/css/utilities/postion.css.map +0 -1
  233. package/dist/js/component/accordion.esm.js +0 -1289
  234. package/dist/js/component/alert.esm.js +0 -529
  235. package/dist/js/component/carousel.esm.js +0 -1110
  236. package/dist/js/graupl.cjs.js +0 -5
  237. package/dist/js/graupl.esm.js +0 -1462
  238. package/dist/js/graupl.iife.js +0 -5
  239. package/docs/.vitepress/config.js +0 -78
  240. package/docs/.vitepress/theme/custom.scss +0 -35
  241. package/docs/.vitepress/theme/index.js +0 -4
  242. package/docs/compiling-graupl.md +0 -56
  243. package/docs/components/alert.md +0 -130
  244. package/docs/components/button.md +0 -84
  245. package/docs/components/card.md +0 -369
  246. package/docs/components/index.md +0 -1
  247. package/docs/components/inputgroup.md +0 -159
  248. package/docs/components/menu.md +0 -326
  249. package/docs/components/navigation.md +0 -158
  250. package/docs/content.md +0 -237
  251. package/docs/defaults.md +0 -121
  252. package/docs/forms.md +0 -79
  253. package/docs/functions.md +0 -9
  254. package/docs/getting-started.md +0 -1
  255. package/docs/index.md +0 -1
  256. package/docs/introduction.md +0 -25
  257. package/docs/layout.md +0 -200
  258. package/docs/mixins.md +0 -47
  259. package/docs/state.md +0 -67
  260. package/docs/theme.md +0 -258
  261. package/docs/utilities.md +0 -357
  262. package/eslint.config.js +0 -74
  263. package/index.html +0 -923
  264. package/index.js +0 -12
  265. package/lint-staged.config.js +0 -6
  266. package/postcss.config.cjs +0 -12
  267. package/prettier.config.js +0 -16
  268. package/scss/utilities/postion.scss +0 -3
  269. package/src/js/accordion/Accordion.js +0 -1163
  270. package/src/js/accordion/AccordionItem.js +0 -496
  271. package/src/js/accordion/index.js +0 -10
  272. package/src/js/alert/Alert.js +0 -581
  273. package/src/js/alert/index.js +0 -11
  274. package/src/js/carousel/Carousel.js +0 -1427
  275. package/src/js/carousel/index.js +0 -10
  276. package/src/js/domHelpers.js +0 -37
  277. package/src/js/eventHandlers.js +0 -39
  278. package/src/js/navigation/index.js +0 -36
  279. package/src/js/storage.js +0 -106
  280. package/src/js/validate.js +0 -225
  281. package/src/scss/_defaults.scss +0 -145
  282. package/src/scss/_index.scss +0 -15
  283. package/src/scss/_init.scss +0 -3
  284. package/src/scss/_normalize.scss +0 -197
  285. package/src/scss/_variables.scss +0 -53
  286. package/src/scss/base/_index.scss +0 -6
  287. package/src/scss/base/button/_defaults.scss +0 -60
  288. package/src/scss/base/button/_index.scss +0 -107
  289. package/src/scss/base/button/_mixins.scss +0 -166
  290. package/src/scss/base/button/_variables.scss +0 -176
  291. package/src/scss/base/form/_defaults.scss +0 -17
  292. package/src/scss/base/form/_index.scss +0 -93
  293. package/src/scss/base/form/_variables.scss +0 -153
  294. package/src/scss/base/link/_defaults.scss +0 -50
  295. package/src/scss/base/link/_index.scss +0 -134
  296. package/src/scss/base/link/_variables.scss +0 -262
  297. package/src/scss/base/table/_defaults.scss +0 -53
  298. package/src/scss/base/table/_index.scss +0 -121
  299. package/src/scss/base/table/_variables.scss +0 -135
  300. package/src/scss/component/_index.scss +0 -10
  301. package/src/scss/component/accordion/_defaults.scss +0 -40
  302. package/src/scss/component/accordion/_index.scss +0 -180
  303. package/src/scss/component/accordion/_variables.scss +0 -316
  304. package/src/scss/component/alert/_defaults.scss +0 -49
  305. package/src/scss/component/alert/_index.scss +0 -118
  306. package/src/scss/component/alert/_variables.scss +0 -170
  307. package/src/scss/component/card/_defaults.scss +0 -32
  308. package/src/scss/component/card/_index.scss +0 -178
  309. package/src/scss/component/card/_variables.scss +0 -186
  310. package/src/scss/component/carousel/_defaults.scss +0 -43
  311. package/src/scss/component/carousel/_index.scss +0 -188
  312. package/src/scss/component/carousel/_variables.scss +0 -104
  313. package/src/scss/component/input-group/_defaults.scss +0 -30
  314. package/src/scss/component/input-group/_index.scss +0 -47
  315. package/src/scss/component/input-group/_variables.scss +0 -66
  316. package/src/scss/component/list/_defaults.scss +0 -15
  317. package/src/scss/component/list/_index.scss +0 -50
  318. package/src/scss/component/list/_variables.scss +0 -176
  319. package/src/scss/component/menu/_defaults.scss +0 -66
  320. package/src/scss/component/menu/_index.scss +0 -305
  321. package/src/scss/component/menu/_variables.scss +0 -500
  322. package/src/scss/component/navigation/_defaults.scss +0 -29
  323. package/src/scss/component/navigation/_index.scss +0 -189
  324. package/src/scss/component/navigation/_variables.scss +0 -237
  325. package/src/scss/functions/_important.scss +0 -13
  326. package/src/scss/functions/_screen.scss +0 -38
  327. package/src/scss/functions/_theme.scss +0 -39
  328. package/src/scss/functions/_utility.scss +0 -28
  329. package/src/scss/layout/_index.scss +0 -5
  330. package/src/scss/layout/columns/_defaults.scss +0 -19
  331. package/src/scss/layout/columns/_index.scss +0 -58
  332. package/src/scss/layout/columns/_variables.scss +0 -51
  333. package/src/scss/layout/container/_defaults.scss +0 -17
  334. package/src/scss/layout/container/_index.scss +0 -41
  335. package/src/scss/layout/container/_variables.scss +0 -50
  336. package/src/scss/layout/flex-columns/_defaults.scss +0 -18
  337. package/src/scss/layout/flex-columns/_index.scss +0 -80
  338. package/src/scss/layout/flex-columns/_variables.scss +0 -26
  339. package/src/scss/mixins/_animation.scss +0 -15
  340. package/src/scss/mixins/_layer.scss +0 -16
  341. package/src/scss/mixins/_screen.scss +0 -77
  342. package/src/scss/mixins/_state.scss +0 -18
  343. package/src/scss/mixins/_theme.scss +0 -15
  344. package/src/scss/mixins/_utility.scss +0 -132
  345. package/src/scss/mixins/_visually-hidden.scss +0 -20
  346. package/src/scss/state/_index.scss +0 -3
  347. package/src/scss/state/focus/_defaults.scss +0 -10
  348. package/src/scss/state/focus/_index.scss +0 -13
  349. package/src/scss/state/focus/_mixins.scss +0 -15
  350. package/src/scss/state/focus/_variables.scss +0 -44
  351. package/src/scss/theme/_index.scss +0 -4
  352. package/src/scss/theme/color/_defaults.scss +0 -143
  353. package/src/scss/theme/color/_index.scss +0 -42
  354. package/src/scss/theme/color/_variables.scss +0 -129
  355. package/src/scss/theme/typography/_defaults.scss +0 -54
  356. package/src/scss/theme/typography/_index.scss +0 -111
  357. package/src/scss/theme/typography/_variables.scss +0 -231
  358. package/src/scss/utilities/_index.scss +0 -18
  359. package/src/scss/utilities/alignment/_defaults.scss +0 -64
  360. package/src/scss/utilities/alignment/_index.scss +0 -168
  361. package/src/scss/utilities/alignment/_variables.scss +0 -6
  362. package/src/scss/utilities/border/_defaults.scss +0 -61
  363. package/src/scss/utilities/border/_index.scss +0 -269
  364. package/src/scss/utilities/border/_variables.scss +0 -6
  365. package/src/scss/utilities/color/_defaults.scss +0 -37
  366. package/src/scss/utilities/color/_index.scss +0 -202
  367. package/src/scss/utilities/color/_variables.scss +0 -6
  368. package/src/scss/utilities/display/_defaults.scss +0 -36
  369. package/src/scss/utilities/display/_index.scss +0 -134
  370. package/src/scss/utilities/display/_variables.scss +0 -6
  371. package/src/scss/utilities/flex/_defaults.scss +0 -87
  372. package/src/scss/utilities/flex/_index.scss +0 -255
  373. package/src/scss/utilities/flex/_variables.scss +0 -6
  374. package/src/scss/utilities/height/_defaults.scss +0 -43
  375. package/src/scss/utilities/height/_index.scss +0 -236
  376. package/src/scss/utilities/height/_variables.scss +0 -6
  377. package/src/scss/utilities/inset/_defaults.scss +0 -43
  378. package/src/scss/utilities/inset/_index.scss +0 -90
  379. package/src/scss/utilities/inset/_variables.scss +0 -6
  380. package/src/scss/utilities/justification/_defaults.scss +0 -61
  381. package/src/scss/utilities/justification/_index.scss +0 -168
  382. package/src/scss/utilities/justification/_variables.scss +0 -6
  383. package/src/scss/utilities/list/_defaults.scss +0 -41
  384. package/src/scss/utilities/list/_index.scss +0 -125
  385. package/src/scss/utilities/list/_variables.scss +0 -6
  386. package/src/scss/utilities/order/_defaults.scss +0 -24
  387. package/src/scss/utilities/order/_index.scss +0 -111
  388. package/src/scss/utilities/order/_variables.scss +0 -6
  389. package/src/scss/utilities/position/_defaults.scss +0 -28
  390. package/src/scss/utilities/position/_index.scss +0 -82
  391. package/src/scss/utilities/position/_variables.scss +0 -6
  392. package/src/scss/utilities/ratio/_defaults.scss +0 -30
  393. package/src/scss/utilities/ratio/_index.scss +0 -91
  394. package/src/scss/utilities/ratio/_variables.scss +0 -9
  395. package/src/scss/utilities/spacing/_defaults.scss +0 -51
  396. package/src/scss/utilities/spacing/_index.scss +0 -382
  397. package/src/scss/utilities/spacing/_variables.scss +0 -6
  398. package/src/scss/utilities/typography/_defaults.scss +0 -46
  399. package/src/scss/utilities/typography/_index.scss +0 -658
  400. package/src/scss/utilities/typography/_variables.scss +0 -6
  401. package/src/scss/utilities/visibility/_defaults.scss +0 -27
  402. package/src/scss/utilities/visibility/_index.scss +0 -82
  403. package/src/scss/utilities/visibility/_variables.scss +0 -6
  404. package/src/scss/utilities/width/_defaults.scss +0 -43
  405. package/src/scss/utilities/width/_index.scss +0 -236
  406. package/src/scss/utilities/width/_variables.scss +0 -6
  407. package/stylelint.config.js +0 -22
  408. package/vite.config.js +0 -57
@@ -1,496 +0,0 @@
1
- /**
2
- * @file
3
- * The Accordion Item class.
4
- */
5
-
6
- /* global Accordion */
7
-
8
- import { isTag, isValidType } from "../validate.js";
9
- import { addClass, removeClass } from "../domHelpers.js";
10
-
11
- /**
12
- * Creates a new accordion item.
13
- *
14
- * @class
15
- */
16
- class AccordionItem {
17
- /**
18
- * The HTML elements for the accordion item in the DOM.
19
- *
20
- * @protected
21
- *
22
- * @type {Object<HTMLElement>}
23
- *
24
- * @property {HTMLElement} item - The accordion item element.
25
- * @property {HTMLElement} toggle - The controller element.
26
- * @property {HTMLElement} header - The header element.
27
- * @property {HTMLElement} content - The content element.
28
- */
29
- _dom = {
30
- item: null,
31
- toggle: null,
32
- header: null,
33
- content: null,
34
- };
35
-
36
- /**
37
- * The declared graupl accordion elements within the accordion item.
38
- *
39
- * @protected
40
- *
41
- * @type {Object<Accordion>}
42
- *
43
- * @property {Accordion} parentAccordion - The parent accordion containing this item.
44
- */
45
- _elements = {
46
- parentAccordion: null,
47
- };
48
-
49
- /**
50
- * The open state of the accordion.
51
- *
52
- * @protected
53
- *
54
- * @type {boolean}
55
- */
56
- _open = false;
57
-
58
- /**
59
- * The locked state of the accordions item.
60
- *
61
- * If locked, the accordion item cannot be closed.
62
- *
63
- * @protected
64
- *
65
- * @type {boolean}
66
- */
67
- _locked = false;
68
-
69
- /**
70
- * The event that is triggered when the accordion item is shown.
71
- *
72
- * @protected
73
- *
74
- * @event grauplAccordionItemExpand
75
- *
76
- * @type {CustomEvent}
77
- *
78
- * @property {boolean} bubbles - A flag to bubble the event.
79
- * @property {Object<AccordionItem>} detail - The details object containing the Accordion item itself.
80
- */
81
- _expandEvent = new CustomEvent("grauplAccordionItemExpand", {
82
- bubbles: true,
83
- detail: { item: this },
84
- });
85
-
86
- /**
87
- * The event that is triggered when the accordion item is hidden.
88
- *
89
- * @protected
90
- *
91
- * @event grauplAccordionItemCollapse
92
- *
93
- * @type {CustomEvent}
94
- *
95
- * @property {boolean} bubbles - A flag to bubble the event.
96
- * @property {Object<AccordionItem>} detail - The details object containing the Accordion item itself.
97
- */
98
- _collapseEvent = new CustomEvent("grauplAccordionItemCollapse", {
99
- bubbles: true,
100
- detail: { item: this },
101
- });
102
-
103
- /**
104
- * Constructs a new Accordion item object.
105
- *
106
- * @class
107
- *
108
- * @param {object} options - The options object.
109
- * @param {HTMLElement} options.accordionItemElement - The accordion item element.
110
- * @param {HTMLElement} options.accordionItemToggleElement - The toggle element.
111
- * @param {HTMLElement} options.accordionItemHeaderElement - The header element.
112
- * @param {HTMLElement} options.accordionItemContentElement - The content element.
113
- * @param {Accordion} [options.parentAccordion = null] - The accordion containing this item.
114
- */
115
- constructor({
116
- accordionItemElement,
117
- accordionItemToggleElement,
118
- accordionItemHeaderElement,
119
- accordionItemContentElement,
120
- parentAccordion = null,
121
- }) {
122
- // Set DOM elements.
123
- this._dom.item = accordionItemElement;
124
- this._dom.toggle = accordionItemToggleElement;
125
- this._dom.header = accordionItemHeaderElement;
126
- this._dom.content = accordionItemContentElement;
127
-
128
- // Set the accordion elements.
129
- this._elements.parentAccordion = parentAccordion;
130
- }
131
-
132
- /**
133
- * Initializes the accordion item.
134
- */
135
- initialize() {
136
- // Set the IDs for the accordion item and it's elements if they don't exist.
137
- this._setIds();
138
-
139
- // Set the ARIA attributes for the accordion item and it's elements.
140
- this._setAriaAttributes();
141
-
142
- // Set the initial state of the accordion item.
143
- if (this.dom.toggle.getAttribute("aria-expanded") === "true") {
144
- this.show(false, false);
145
- } else {
146
- this.hide(false, false);
147
- }
148
- }
149
-
150
- /**
151
- * The HTML elements for the accordion item in the DOM.
152
- *
153
- * @readonly
154
- *
155
- * @type {object}
156
- *
157
- * @see _dom
158
- */
159
- get dom() {
160
- return this._dom;
161
- }
162
-
163
- /**
164
- * The declared graupl accordion elements within the accordion item.
165
- *
166
- * @readonly
167
- *
168
- * @type {Object<Accordion>}
169
- *
170
- * @see _elements
171
- */
172
- get elements() {
173
- return this._elements;
174
- }
175
-
176
- /**
177
- * The open state of the accordion.
178
- *
179
- * @readonly
180
- *
181
- * @type {object}
182
- *
183
- * @see _open
184
- */
185
- get isOpen() {
186
- return this._open;
187
- }
188
-
189
- /**
190
- * The locked state of the accordions item.
191
- *
192
- * If locked, the accordion item cannot be closed.
193
- *
194
- * @readonly
195
- *
196
- * @type {boolean}
197
- *
198
- * @see _locked
199
- */
200
- get isLocked() {
201
- return this._locked;
202
- }
203
-
204
- set isOpen(value) {
205
- isValidType("boolean", { value });
206
-
207
- if (this._open !== value) {
208
- this._open = value;
209
- }
210
- }
211
-
212
- /**
213
- * Sets the IDs for the accordion item and it's elements if they don't exist.
214
- *
215
- * The generated IDs use the parent accordion's key and follows the pattern:
216
- * - Accordion item: `accordion-item-{key}-{index}`
217
- * - Accordion item toggle: `accordion-item-toggle-{key}-{index}`
218
- * - Accordion item content: `accordion-item-content-{key}-{index}`
219
- */
220
- _setIds() {
221
- // Get the required information for IDs.
222
- const { key } = this.elements.parentAccordion;
223
- const index = this.elements.parentAccordion.dom.accordionItems.indexOf(
224
- this.dom.item
225
- );
226
-
227
- this.dom.item.id = this.dom.item.id || `accordion-item-${key}-${index}`;
228
- this.dom.toggle.id =
229
- this.dom.toggle.id || `accordion-item-toggle-${key}-${index}`;
230
- this.dom.header.id =
231
- this.dom.header.id || `accordion-item-header-${key}-${index}`;
232
- this.dom.content.id =
233
- this.dom.content.id || `accordion-item-content-${key}-${index}`;
234
- }
235
-
236
- /**
237
- * Sets the ARIA attributes for the accordion item and it's elements.
238
- */
239
- _setAriaAttributes() {
240
- // Set the ARIA attributes for the accordion item toggle.
241
- // If the toggle is not a button, then set the role to "button".
242
- if (!isTag("button", { toggle: this.dom.toggle })) {
243
- this.dom.toggle.setAttribute("role", "button");
244
- }
245
-
246
- // If aria-expanded is not explicitly set to "true", then set it to "false".
247
- if (this.dom.toggle.getAttribute("aria-expanded") !== "true") {
248
- this.dom.toggle.setAttribute("aria-expanded", "false");
249
- }
250
-
251
- // Set the aria-controls attribute for the toggle.
252
- this.dom.toggle.setAttribute("aria-controls", this.dom.content.id);
253
-
254
- // Set the ARIA attributes for the accordion item content.
255
- // If the content is not a section, then set the role to "region".
256
- if (!isTag("section", { content: this.dom.content })) {
257
- this.dom.content.setAttribute("role", "region");
258
- }
259
-
260
- // Set the aria-labelledby attribute for the content.
261
- this.dom.content.setAttribute("aria-labelledby", this.dom.toggle.id);
262
- }
263
-
264
- /**
265
- * Shows the accordion item.
266
- *
267
- * @public
268
- *
269
- * @fires grauplAccordionItemExpand
270
- *
271
- * @param {boolean} [emit = true] - Emit the show event once shown.
272
- * @param {boolean} [transition = true] - Respect the transition class.
273
- */
274
- show(emit = true, transition = true) {
275
- if (this._open) {
276
- return;
277
- }
278
-
279
- const { closeClass, openClass, transitionClass, openDuration } =
280
- this.elements.parentAccordion;
281
-
282
- // Set aria-expanded to true when hiding accordion item.
283
- this.dom.toggle.setAttribute("aria-expanded", "true");
284
-
285
- // If we're dealing with transition classes, then we need to utilize
286
- // requestAnimationFrame to add the transition class, remove the hide class,
287
- // add the show class, and finally remove the transition class.
288
- //
289
- // If `transition` is false, then it doesn't matter if the transition class
290
- // is set. Do not use the transition.
291
- if (transition && transitionClass !== "") {
292
- addClass(transitionClass, this.dom.item);
293
-
294
- requestAnimationFrame(() => {
295
- removeClass(closeClass, this.dom.item);
296
-
297
- this.dom.item.style.height = `${this.dom.header.getBoundingClientRect().height}px`;
298
-
299
- requestAnimationFrame(() => {
300
- addClass(openClass, this.dom.item);
301
-
302
- this.dom.item.style.height = `${this.dom.header.getBoundingClientRect().height + this.dom.content.getBoundingClientRect().height}px`;
303
-
304
- requestAnimationFrame(() => {
305
- setTimeout(() => {
306
- removeClass(transitionClass, this.dom.item);
307
-
308
- this.dom.item.style.height = "";
309
- }, openDuration);
310
- });
311
- });
312
- });
313
- } else {
314
- // Add the show class
315
- addClass(openClass, this.dom.item);
316
-
317
- // Remove the hide class.
318
- removeClass(closeClass, this.dom.item);
319
- }
320
-
321
- this._open = true;
322
-
323
- // If the parent accordion only allows a single item to be open at a time,
324
- // then close all other items.
325
- if (!this.elements.parentAccordion.allowMultipleExpand) {
326
- this.unlockSiblings();
327
- this.closeSiblings();
328
- }
329
-
330
- // If the parent accordion requires at least one item to be open, and this
331
- // is the only open item, then lock it. Otherwise, unlock all siblings.
332
- if (!this.elements.parentAccordion.allowNoExpand) {
333
- if (this.elements.parentAccordion.openAccordionItems.length <= 1) {
334
- this.lock();
335
- } else {
336
- this.unlockSiblings();
337
- }
338
- }
339
-
340
- if (emit) {
341
- this.dom.item.dispatchEvent(this._expandEvent);
342
- }
343
- }
344
-
345
- /**
346
- * Hides the accordion item.
347
- *
348
- * @public
349
- *
350
- * @fires grauplAccordionItemCollapse
351
- *
352
- * @param {boolean} [emit = true] - Emit the show event once shown.
353
- * @param {boolean} [transition = true] - Respect the transition class.
354
- */
355
- hide(emit = true, transition = true) {
356
- if (!this._open) {
357
- return;
358
- }
359
-
360
- if (
361
- !this.elements.parentAccordion.allowNoExpand &&
362
- this.elements.parentAccordion.openAccordionItems.length <= 1
363
- ) {
364
- return;
365
- }
366
-
367
- const { closeClass, openClass, transitionClass, closeDuration } =
368
- this.elements.parentAccordion;
369
-
370
- // Set aria-expanded to false when hiding accordion item.
371
- this.dom.toggle.setAttribute("aria-expanded", "false");
372
-
373
- // If we're dealing with transition classes, then we need to utilize
374
- // requestAnimationFrame to add the transition class, remove the show class,
375
- // add the hide class, and finally remove the transition class.
376
- //
377
- // If `transition` is false, then it doesn't matter if the transition class
378
- // is set. Do not use the transition.
379
- if (transition && transitionClass !== "") {
380
- addClass(transitionClass, this.dom.item);
381
- this.dom.item.style.height = `${this.dom.item.getBoundingClientRect().height}px`;
382
-
383
- requestAnimationFrame(() => {
384
- removeClass(openClass, this.dom.item);
385
- this.dom.item.style.height = `${this.dom.header.getBoundingClientRect().height}px`;
386
-
387
- requestAnimationFrame(() => {
388
- addClass(closeClass, this.dom.item);
389
-
390
- requestAnimationFrame(() => {
391
- setTimeout(() => {
392
- removeClass(transitionClass, this.dom.item);
393
-
394
- this.dom.item.style.height = "";
395
- }, closeDuration);
396
- });
397
- });
398
- });
399
- } else {
400
- // Add the hide class
401
- addClass(closeClass, this.dom.item);
402
-
403
- // Remove the show class.
404
- removeClass(openClass, this.dom.item);
405
- }
406
-
407
- this._open = false;
408
-
409
- // If the parent accordion requires at least one item to be open, and this was
410
- // the second to last open item, then lock to last open item.
411
- if (
412
- !this.elements.parentAccordion.allowNoExpand &&
413
- this.elements.parentAccordion.openAccordionItems.length === 1
414
- ) {
415
- this.elements.parentAccordion.openAccordionItems[0].lock();
416
- }
417
-
418
- if (emit) {
419
- this.dom.item.dispatchEvent(this._collapseEvent);
420
- }
421
- }
422
-
423
- /**
424
- * Toggle the accordion item.
425
- *
426
- * @public
427
- */
428
- toggle() {
429
- this.isOpen ? this.hide() : this.show();
430
- }
431
-
432
- /**
433
- * Focuses the accordion item.
434
- *
435
- * @public
436
- */
437
- focus() {
438
- this.dom.toggle.focus();
439
- }
440
-
441
- /**
442
- * Blurs the accordion item.
443
- *
444
- * @public
445
- */
446
- blur() {
447
- this.dom.toggle.blur();
448
- }
449
-
450
- /**
451
- * Locks the accordion item.
452
- *
453
- * @public
454
- */
455
- lock() {
456
- this._locked = true;
457
- this.dom.toggle.setAttribute("disabled", "true");
458
- }
459
-
460
- /**
461
- * Unlocks the accordion item.
462
- *
463
- * @public
464
- */
465
- unlock() {
466
- this._locked = false;
467
- this.dom.toggle.removeAttribute("disabled");
468
- }
469
-
470
- closeSiblings() {
471
- if (this.elements.parentAccordion) {
472
- this.elements.parentAccordion.elements.accordionItems.forEach((item) => {
473
- if (item !== this) {
474
- item.hide();
475
- }
476
- });
477
- }
478
- }
479
-
480
- /**
481
- * Unlocks the siblings of the accordion item.
482
- *
483
- * @public
484
- */
485
- unlockSiblings() {
486
- if (this.elements.parentAccordion) {
487
- this.elements.parentAccordion.elements.accordionItems.forEach((item) => {
488
- if (item !== this) {
489
- item.unlock();
490
- }
491
- });
492
- }
493
- }
494
- }
495
-
496
- export default AccordionItem;
@@ -1,10 +0,0 @@
1
- import Accordion from "./Accordion.js";
2
-
3
- document.addEventListener("DOMContentLoaded", () => {
4
- document.querySelectorAll(".accordion").forEach((accordionElement) => {
5
- new Accordion({
6
- accordionElement,
7
- initialize: true,
8
- });
9
- });
10
- });