@nationalarchives/frontend 0.1.63 → 0.1.65

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 (162) hide show
  1. package/config/.babelrc.json +19 -0
  2. package/config/.eslintrc.js +25 -0
  3. package/config/.htmlvalidate.json +10 -0
  4. package/config/stylelint.config.js +239 -0
  5. package/nationalarchives/all.css +1 -3
  6. package/nationalarchives/all.css.map +1 -1
  7. package/nationalarchives/all.js +1 -1
  8. package/nationalarchives/all.js.map +1 -1
  9. package/nationalarchives/all.mjs +34 -0
  10. package/nationalarchives/all.scss +0 -2
  11. package/nationalarchives/components/_index.scss +1 -0
  12. package/nationalarchives/components/accordion/accordion.css +1 -1
  13. package/nationalarchives/components/accordion/accordion.css.map +1 -1
  14. package/nationalarchives/components/accordion/accordion.js +1 -1
  15. package/nationalarchives/components/accordion/accordion.js.map +1 -1
  16. package/nationalarchives/components/accordion/accordion.mjs +92 -24
  17. package/nationalarchives/components/accordion/accordion.scss +56 -18
  18. package/nationalarchives/components/accordion/accordion.stories.js +31 -9
  19. package/nationalarchives/components/accordion/fixtures.json +34 -7
  20. package/nationalarchives/components/accordion/macro-options.json +14 -2
  21. package/nationalarchives/components/accordion/template.njk +7 -5
  22. package/nationalarchives/components/breadcrumbs/breadcrumbs.css +1 -1
  23. package/nationalarchives/components/breadcrumbs/breadcrumbs.css.map +1 -1
  24. package/nationalarchives/components/breadcrumbs/breadcrumbs.scss +0 -10
  25. package/nationalarchives/components/breadcrumbs/template.njk +1 -1
  26. package/nationalarchives/components/button/button.css +1 -1
  27. package/nationalarchives/components/button/button.css.map +1 -1
  28. package/nationalarchives/components/button/button.scss +23 -1
  29. package/nationalarchives/components/button/button.stories.js +3 -0
  30. package/nationalarchives/components/button/macro-options.json +6 -0
  31. package/nationalarchives/components/button/template.njk +3 -1
  32. package/nationalarchives/components/card/card.css.map +1 -1
  33. package/nationalarchives/components/card/template.njk +5 -5
  34. package/nationalarchives/components/checkboxes/checkboxes.css.map +1 -1
  35. package/nationalarchives/components/checkboxes/checkboxes.njk +1 -1
  36. package/nationalarchives/components/checkboxes/template.njk +1 -1
  37. package/nationalarchives/components/compound-filters/compound-filters.css.map +1 -1
  38. package/nationalarchives/components/compound-filters/template.njk +1 -1
  39. package/nationalarchives/components/cookie-banner/cookie-banner.css +1 -1
  40. package/nationalarchives/components/cookie-banner/cookie-banner.css.map +1 -1
  41. package/nationalarchives/components/cookie-banner/cookie-banner.scss +0 -2
  42. package/nationalarchives/components/cookie-banner/template.njk +1 -2
  43. package/nationalarchives/components/date-input/date-input.css.map +1 -1
  44. package/nationalarchives/components/date-input/template.njk +1 -1
  45. package/nationalarchives/components/date-search/date-search.css.map +1 -1
  46. package/nationalarchives/components/date-search/date-search.njk +2 -2
  47. package/nationalarchives/components/date-search/template.njk +1 -1
  48. package/nationalarchives/components/details/details.css.map +1 -1
  49. package/nationalarchives/components/details/template.njk +1 -1
  50. package/nationalarchives/components/error-summary/error-summary.css +1 -1
  51. package/nationalarchives/components/error-summary/error-summary.css.map +1 -1
  52. package/nationalarchives/components/error-summary/template.njk +1 -1
  53. package/nationalarchives/components/featured-records/featured-records.css +1 -1
  54. package/nationalarchives/components/featured-records/featured-records.css.map +1 -1
  55. package/nationalarchives/components/featured-records/featured-records.scss +1 -1
  56. package/nationalarchives/components/featured-records/template.njk +1 -1
  57. package/nationalarchives/components/files/_index.scss +1 -0
  58. package/nationalarchives/components/files/files.css +1 -0
  59. package/nationalarchives/components/files/files.css.map +1 -0
  60. package/nationalarchives/components/files/files.scss +79 -0
  61. package/nationalarchives/components/files/files.stories.js +59 -0
  62. package/nationalarchives/components/files/fixtures.json +71 -0
  63. package/nationalarchives/components/files/macro-options.json +58 -0
  64. package/nationalarchives/components/files/macro.njk +3 -0
  65. package/nationalarchives/components/files/template.njk +33 -0
  66. package/nationalarchives/components/footer/footer.css +1 -1
  67. package/nationalarchives/components/footer/footer.css.map +1 -1
  68. package/nationalarchives/components/footer/footer.scss +0 -2
  69. package/nationalarchives/components/footer/macro-options.json +0 -6
  70. package/nationalarchives/components/footer/template.njk +1 -1
  71. package/nationalarchives/components/gallery/fixtures.json +35 -1
  72. package/nationalarchives/components/gallery/gallery.css +1 -1
  73. package/nationalarchives/components/gallery/gallery.css.map +1 -1
  74. package/nationalarchives/components/gallery/gallery.js +1 -1
  75. package/nationalarchives/components/gallery/gallery.js.map +1 -1
  76. package/nationalarchives/components/gallery/gallery.mjs +192 -53
  77. package/nationalarchives/components/gallery/gallery.scss +318 -56
  78. package/nationalarchives/components/gallery/gallery.stories.js +45 -32
  79. package/nationalarchives/components/gallery/macro-options.json +34 -49
  80. package/nationalarchives/components/gallery/template.njk +70 -33
  81. package/nationalarchives/components/global-header/global-header.css +1 -1
  82. package/nationalarchives/components/global-header/global-header.css.map +1 -1
  83. package/nationalarchives/components/global-header/global-header.scss +0 -2
  84. package/nationalarchives/components/global-header/template.njk +1 -1
  85. package/nationalarchives/components/grid/grid.css +1 -1
  86. package/nationalarchives/components/grid/grid.css.map +1 -1
  87. package/nationalarchives/components/grid/grid.scss +2 -2
  88. package/nationalarchives/components/grid/template.njk +1 -1
  89. package/nationalarchives/components/header/header.css +1 -1
  90. package/nationalarchives/components/header/header.css.map +1 -1
  91. package/nationalarchives/components/header/header.scss +3 -5
  92. package/nationalarchives/components/header/template.njk +1 -1
  93. package/nationalarchives/components/hero/hero.css.map +1 -1
  94. package/nationalarchives/components/hero/template.njk +1 -1
  95. package/nationalarchives/components/index-grid/index-grid.css.map +1 -1
  96. package/nationalarchives/components/index-grid/template.njk +3 -3
  97. package/nationalarchives/components/pagination/pagination.css +1 -1
  98. package/nationalarchives/components/pagination/pagination.css.map +1 -1
  99. package/nationalarchives/components/pagination/pagination.scss +1 -1
  100. package/nationalarchives/components/pagination/template.njk +1 -1
  101. package/nationalarchives/components/phase-banner/phase-banner.css +1 -1
  102. package/nationalarchives/components/phase-banner/phase-banner.css.map +1 -1
  103. package/nationalarchives/components/phase-banner/phase-banner.scss +0 -2
  104. package/nationalarchives/components/phase-banner/template.njk +1 -1
  105. package/nationalarchives/components/picture/picture.css.map +1 -1
  106. package/nationalarchives/components/picture/picture.js +1 -1
  107. package/nationalarchives/components/picture/picture.js.map +1 -1
  108. package/nationalarchives/components/picture/picture.mjs +2 -2
  109. package/nationalarchives/components/picture/template.njk +1 -1
  110. package/nationalarchives/components/quick-filters/quick-filters.css.map +1 -1
  111. package/nationalarchives/components/quick-filters/template.njk +1 -1
  112. package/nationalarchives/components/radios/radios.css.map +1 -1
  113. package/nationalarchives/components/radios/radios.njk +1 -1
  114. package/nationalarchives/components/radios/template.njk +1 -1
  115. package/nationalarchives/components/search-field/search-field.css +1 -1
  116. package/nationalarchives/components/search-field/search-field.css.map +1 -1
  117. package/nationalarchives/components/search-field/search-field.scss +2 -1
  118. package/nationalarchives/components/search-field/template.njk +2 -2
  119. package/nationalarchives/components/search-filters/search-filters.css.map +1 -1
  120. package/nationalarchives/components/search-filters/template.njk +1 -1
  121. package/nationalarchives/components/select/select.css.map +1 -1
  122. package/nationalarchives/components/select/template.njk +2 -2
  123. package/nationalarchives/components/sensitive-image/sensitive-image.css +1 -1
  124. package/nationalarchives/components/sensitive-image/sensitive-image.css.map +1 -1
  125. package/nationalarchives/components/sensitive-image/sensitive-image.scss +1 -1
  126. package/nationalarchives/components/sensitive-image/template.njk +1 -1
  127. package/nationalarchives/components/sidebar/fixtures.json +6 -6
  128. package/nationalarchives/components/sidebar/macro-options.json +9 -2
  129. package/nationalarchives/components/sidebar/sidebar.css.map +1 -1
  130. package/nationalarchives/components/sidebar/sidebar.stories.js +9 -6
  131. package/nationalarchives/components/sidebar/template.njk +3 -3
  132. package/nationalarchives/components/skip-link/skip-link.css +1 -1
  133. package/nationalarchives/components/skip-link/skip-link.css.map +1 -1
  134. package/nationalarchives/components/skip-link/skip-link.scss +0 -2
  135. package/nationalarchives/components/skip-link/template.njk +1 -1
  136. package/nationalarchives/components/tabs/tabs.css +1 -1
  137. package/nationalarchives/components/tabs/tabs.css.map +1 -1
  138. package/nationalarchives/components/tabs/tabs.scss +0 -12
  139. package/nationalarchives/components/tabs/template.njk +1 -1
  140. package/nationalarchives/components/text-input/template.njk +1 -1
  141. package/nationalarchives/components/text-input/text-input.css.map +1 -1
  142. package/nationalarchives/components/text-input/text-input.njk +2 -2
  143. package/nationalarchives/components/textarea/template.njk +2 -2
  144. package/nationalarchives/components/textarea/textarea.css.map +1 -1
  145. package/nationalarchives/components/warning/template.njk +1 -1
  146. package/nationalarchives/components/warning/warning.css.map +1 -1
  147. package/nationalarchives/components/warning/warning.scss +1 -0
  148. package/nationalarchives/global-header-package.css +1 -1
  149. package/nationalarchives/global-header-package.css.map +1 -1
  150. package/nationalarchives/print.css +6 -0
  151. package/nationalarchives/print.css.map +1 -0
  152. package/nationalarchives/print.scss +44 -0
  153. package/nationalarchives/prototype-kit.css +1 -3
  154. package/nationalarchives/prototype-kit.css.map +1 -1
  155. package/nationalarchives/stories/utilities/colour-schemes/colour-themes.stories.js +28 -50
  156. package/nationalarchives/templates/layouts/_generic.njk +6 -6
  157. package/nationalarchives/tools/_a11y.scss +4 -0
  158. package/nationalarchives/tools/_colour.scss +52 -31
  159. package/nationalarchives/tools/_media.scss +0 -10
  160. package/nationalarchives/utilities/_overrides.scss +6 -0
  161. package/nationalarchives/utilities/_typography.scss +11 -10
  162. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sourceRoot":"","sources":["../../../../src/nationalarchives/tools/_spacing.scss","../../../../src/nationalarchives/components/accordion/accordion.scss","../../../../src/nationalarchives/tools/_colour.scss","../../../../src/nationalarchives/tools/_typography.scss","../../../../src/nationalarchives/variables/_typography.scss"],"names":[],"mappings":"CAUA,eACE,gBAEA,2BACE,aCTJ,eCiEM,wDD1DJ,wBC0DI,2DDvDF,kBACA,UAGF,2DACE,UAGF,wBACE,0BAGA,kBEJF,YCYsB,IHLpB,gBAEA,mBAEA,eAEA,gDACE,aAGF,gCACE,WAEA,QACA,SAEA,kBACA,gCACA,aAEA,2CACA,8DACA,mBAGF,8BEOF,0BACA,0BCpCsC,MF2BtC,4DDKI,sCACE,0DAKN,wBACE,aAEA,gEACE,gBACA,eAGF,2CACE,gBACA,eAEA,OAGF,mCACE,wBACA,kBACA,iBAEA,4CACE,cACA,oBAEA,kBACA,oBACA,gBACA,iBAMJ,8DACE,2CC4UJ,8BDtUI,gCACE,YAEA,WACA,YAEA,sBAEA,iBAEA,YAKF,8DACE,YAEA","file":"accordion.css","sourcesContent":["@use \"sass:map\";\n@use \"sass:math\";\n@use \"../variables/spacing\";\n@use \"../variables/typography\";\n@use \"../tools/media\";\n\n@function space($size) {\n @return #{$size * spacing.$spacing-unit-px}px;\n}\n\n%space-above {\n margin-top: space(2);\n\n &:first-child {\n margin-top: 0;\n }\n}\n\n%space-only-above {\n margin: #{space(2)} 0 0;\n\n &:first-child {\n margin-top: 0;\n }\n}\n\n@mixin space-above($zero-other-margins: false) {\n @if $zero-other-margins {\n @extend %space-only-above;\n } @else {\n @extend %space-above;\n }\n}\n\n@mixin no-spacing-generator($suffix: \"\") {\n @if $suffix != \"\" {\n $suffix: \"-\" + $suffix;\n }\n @each $property in margin, padding {\n @each $direction in top, bottom {\n $combined-direction: \"\";\n @if $direction == top or $direction == bottom {\n $combined-direction: vertical;\n } @else if $direction == right or $direction == left {\n $combined-direction: horizontal;\n }\n @if $combined-direction {\n .tna-\\!--no-#{$property}-#{$direction}#{$suffix},\n .tna-\\!--no-#{$property}-#{$combined-direction}#{$suffix} {\n #{$property}-#{$direction}: 0 !important;\n }\n } @else {\n .tna-\\!--no-#{$property}-#{$direction}#{$suffix} {\n #{$property}-#{$direction}: 0 !important;\n }\n }\n }\n }\n}\n\n@mixin spacing-generator($suffix: \"\") {\n @each $property in margin, padding {\n @each $direction in top, bottom {\n @each $size, $amount in spacing.$spacing {\n @if $direction == all {\n .tna-\\!--#{$property}-#{$size} {\n #{$property}: #{space($amount)} !important;\n }\n } @else {\n $combined-direction: \"\";\n @if $direction == top or $direction == bottom {\n $combined-direction: vertical;\n } @else if $direction == right or $direction == left {\n $combined-direction: horizontal;\n }\n @if $combined-direction {\n .tna-\\!--#{$property}-#{$direction}-#{$size},\n .tna-\\!--#{$property}-#{$combined-direction}-#{$size} {\n #{$property}-#{$direction}: #{space($amount)} !important;\n }\n } @else {\n .tna-\\!--#{$property}-#{$direction}-#{$size} {\n #{$property}-#{$direction}: #{space($amount)} !important;\n }\n }\n }\n }\n }\n }\n\n @include media.on-mobile {\n @each $property in margin, padding {\n @each $direction in top, bottom {\n @each $size, $amount in spacing.$spacing-mobile {\n @if $direction == all {\n .tna-\\!--#{$property}-#{$size} {\n #{$property}: #{space($amount)} !important;\n }\n } @else {\n $combined-direction: \"\";\n @if $direction == top or $direction == bottom {\n $combined-direction: vertical;\n } @else if $direction == right or $direction == left {\n $combined-direction: horizontal;\n }\n @if $combined-direction {\n .tna-\\!--#{$property}-#{$direction}-#{$size},\n .tna-\\!--#{$property}-#{$combined-direction}-#{$size} {\n #{$property}-#{$direction}: #{space($amount)} !important;\n }\n } @else {\n .tna-\\!--#{$property}-#{$direction}-#{$size} {\n #{$property}-#{$direction}: #{space($amount)} !important;\n }\n }\n }\n }\n }\n }\n }\n}\n","@use \"sass:math\";\n@use \"../../tools/colour\";\n@use \"../../tools/spacing\";\n@use \"../../tools/typography\";\n\n.tna-accordion {\n @include spacing.space-above;\n\n @include colour.colour-border(\"keyline\", 1px, solid, top);\n // @include colour.thick-keyline-dark(top);\n // @include colour.thick-keyline-accent(top);\n\n &__details {\n @include colour.colour-border(\"keyline\", 1px, solid, bottom);\n\n position: relative;\n z-index: 1;\n }\n\n &__details:has(&__summary:focus) {\n z-index: 2;\n }\n\n &__summary {\n padding: spacing.space(0.5) spacing.space(3) spacing.space(0.5)\n spacing.space(1);\n\n position: relative;\n\n @include typography.main-font-weight-bold;\n list-style: none;\n\n border-radius: 0.1px;\n\n cursor: pointer;\n\n &::-webkit-details-marker {\n display: none;\n }\n\n &::before {\n content: \"\";\n\n width: 0;\n height: 0;\n\n position: absolute;\n top: calc(50% - #{math.div(math.sqrt(3), 4)}rem);\n right: 0.75rem;\n\n border-width: #{math.div(math.sqrt(3), 2)}rem 0.5rem 0 0.5rem;\n border-color: colour.colour-var(\"font-light\") transparent;\n border-style: solid;\n }\n\n &:hover {\n @include typography.interacted-text-decoration;\n @include colour.colour-background(\"background-tint\");\n\n &::before {\n border-color: colour.colour-var(\"font-dark\") transparent;\n }\n }\n }\n\n &__content {\n padding: spacing.space(1);\n\n &:has(.tna-table-wrapper):has(.tna-table) {\n padding-right: 0;\n padding-left: 0;\n }\n\n .tna-table-wrapper {\n padding-right: 0;\n padding-left: 0;\n\n left: 0;\n }\n\n .tna-table {\n width: calc(100% - #{spacing.space(2)});\n margin-right: spacing.space(1);\n margin-left: spacing.space(1);\n\n &__caption {\n padding-top: 0;\n padding-bottom: spacing.space(1);\n\n font-size: inherit;\n line-height: inherit;\n text-align: left;\n caption-side: top;\n }\n }\n }\n\n &__details[open] &__summary {\n &::before {\n border-width: 0 0.5rem #{math.div(math.sqrt(3), 2)}rem 0.5rem;\n }\n }\n\n @include colour.on-forced-colours {\n &__summary {\n &::before {\n content: \"\\2193\";\n\n width: auto;\n height: auto;\n\n top: calc(50% - 0.5rem);\n\n line-height: 1rem;\n\n border: none;\n }\n }\n\n &__details[open] &__summary {\n &::before {\n content: \"\\2191\";\n\n border: none;\n }\n }\n }\n}\n","@use \"sass:list\";\n@use \"sass:map\";\n@use \"../variables/borders\";\n@use \"../variables/colour\";\n@use \"../tools/media\";\n\n@function brand-colour($colour, $opacity: 1) {\n @return colour.brand-colour($colour, $opacity);\n}\n\n@mixin colour-css-vars($excludes...) {\n @each $name, $value in colour.$colour-palette-default {\n @if not list.index($excludes, $name) {\n --#{$name}: #{$value};\n }\n }\n}\n\n@mixin colour-css-vars-dark($excludes...) {\n @each $name, $value in colour.$colour-palette-dark {\n @if not list.index($excludes, $name) {\n --#{$name}: #{$value};\n }\n }\n}\n\n@mixin colour-css-vars-high-contrast($excludes...) {\n @each $name, $value in colour.$colour-palette-high-contrast {\n @if not list.index($excludes, $name) {\n --#{$name}: #{$value};\n }\n }\n}\n\n@mixin colour-css-vars-high-contrast-dark($excludes...) {\n @each $name, $value in colour.$colour-palette-high-contrast-dark {\n @if not list.index($excludes, $name) {\n --#{$name}: #{$value};\n }\n }\n}\n\n@function colour-var($colour) {\n @return var(\n --#{$colour},\n #{map.get(colour.$colour-palette-default, $colour)}\n );\n}\n\n@mixin colour-font($colour, $important: false) {\n color: colour-var($colour) if($important, !important, null);\n}\n\n@mixin colour-background($colour, $important: false) {\n background-color: colour-var($colour) if($important, !important, null);\n}\n\n@mixin colour-background-brand($brandColour, $important: false) {\n background-color: #{brand-colour($brandColour)} if($important, !important, null);\n}\n\n@mixin colour-border(\n $colour,\n $width: \"\",\n $style: solid,\n $direction: \"\",\n $important: false\n) {\n @if $direction != \"\" {\n @if $width != \"\" {\n border-#{$direction}: $width\n colour-var($colour)\n $style\n if($important, !important, null);\n } @else {\n border-#{$direction}-color: colour-var($colour)\n if($important, !important, null);\n }\n } @else {\n @if $width != \"\" {\n border: $width\n colour-var($colour)\n $style\n if($important, !important, null);\n } @else {\n border-color: var(\n --#{$colour},\n #{map.get(colour.$colour-palette-default, $colour)}\n )\n if($important, !important, null);\n }\n }\n}\n\n@mixin colour-outline($colour, $width: \"\", $style: solid, $important: false) {\n @if $width != \"\" {\n outline: $width colour-var($colour) $style if($important, !important, null);\n } @else {\n outline-color: colour-var($colour) if($important, !important, null);\n }\n}\n\n@mixin colour-fill($colour, $important: false) {\n fill: colour-var($colour) if($important, !important, null);\n}\n\n@mixin thick-keyline($direction) {\n @include colour-border(\n \"keyline\",\n borders.$thick-border-width,\n solid,\n $direction\n );\n}\n\n@mixin thick-keyline-dark($direction) {\n @include colour-border(\n \"keyline-dark\",\n borders.$thick-border-width,\n solid,\n $direction\n );\n}\n\n@mixin thick-keyline-accent($direction) {\n @include colour-border(\n \"accent-border\",\n borders.$thick-border-width,\n solid,\n $direction\n );\n}\n\n@mixin thick-keyline-error($direction) {\n @include colour-border(\n \"form-error\",\n borders.$thick-border-width,\n solid,\n $direction\n );\n}\n\n@mixin thick-keyline-brand($direction, $brandColour) {\n border-#{$direction}: borders.$thick-border-width #{brand-colour($brandColour)}\n solid;\n}\n\n// Use light theme colours (except for \"form-error\")\n%light {\n @include colour-css-vars(\"form-error\");\n\n @media (prefers-contrast: more) {\n @include colour-css-vars-high-contrast(\"form-error\");\n }\n}\n\n@mixin light {\n @extend %light;\n}\n\n%contrast {\n --background: var(--contrast-background);\n --font-base: var(--contrast-font-base);\n --font-dark: var(--contrast-font-dark);\n --font-light: var(--contrast-font-light);\n --icon-light: var(--contrast-icon-light);\n --link: var(--contrast-link);\n --link-visited: var(--contrast-link-visited);\n --keyline: var(--contrast-keyline);\n --keyline-dark: var(--contrast-keyline-dark);\n --button-text: var(--contrast-button-text);\n --button-background: var(--contrast-button-background);\n --button-hover-text: var(--contrast-button-hover-text);\n --button-hover-background: var(--contrast-button-hover-background);\n --accent-list-marker: var(--accent-border);\n // --accent-list-marker: var(--font-base);\n\n @include colour-background(\"background\");\n\n @include colour-font(\"font-base\");\n}\n\n@mixin contrast {\n @extend %contrast;\n}\n\n%contrast-on-mobile {\n @include media.on-mobile {\n --background: var(--contrast-background);\n --font-base: var(--contrast-font-base);\n --font-dark: var(--contrast-font-dark);\n --font-light: var(--contrast-font-light);\n --icon-light: var(--contrast-icon-light);\n --link: var(--contrast-link);\n --link-visited: var(--contrast-link-visited);\n --keyline: var(--contrast-keyline);\n --keyline-dark: var(--contrast-keyline-dark);\n --button-text: var(--contrast-button-text);\n --button-background: var(--contrast-button-background);\n --button-hover-text: var(--contrast-button-hover-text);\n --button-hover-background: var(--contrast-button-hover-background);\n --accent-list-marker: var(--accent-border);\n // --accent-list-marker: var(--font-base);\n\n @include colour-background(\"background\");\n\n @include colour-font(\"font-base\");\n }\n}\n\n@mixin contrast-on-mobile {\n @extend %contrast-on-mobile;\n}\n\n%tint {\n --background: var(--background-tint);\n\n @include colour-background(\"background\");\n\n @include colour-font(\"font-base\");\n}\n\n@mixin tint {\n @extend %tint;\n}\n\n%accent {\n --background: var(--accent-background);\n --font-base: var(--accent-font-base);\n --font-dark: var(--accent-font-dark);\n --font-light: var(--accent-font-light);\n --icon-light: var(--accent-icon-light);\n --link: var(--accent-link);\n --link-visited: var(--accent-link);\n --keyline: var(--accent-keyline);\n --keyline-dark: var(--accent-keyline-dark);\n --accent-list-marker: var(--accent-font-base);\n --accent-border: var(--accent-font-dark);\n\n @include colour-background(\"background\");\n\n @include colour-font(\"font-base\");\n}\n\n@mixin accent {\n @extend %accent;\n}\n\n%accent-light {\n --background: var(--accent-background-light);\n --font-base: #{map.get(colour.$colour-palette-default, \"font-base\")};\n --font-dark: #{map.get(colour.$colour-palette-default, \"font-dark\")};\n --font-light: #{map.get(colour.$colour-palette-default, \"font-light\")};\n --icon-light: #{map.get(colour.$colour-palette-default, \"icon-light\")};\n --keyline: #{map.get(colour.$colour-palette-default, \"keyline\")};\n --keyline-dark: #{map.get(colour.$colour-palette-default, \"keyline-dark\")};\n --button-text: #{map.get(colour.$colour-palette-default, \"button-text\")};\n --button-background: #{map.get(\n colour.$colour-palette-default,\n \"button-background\"\n )};\n --button-hover-text: #{map.get(\n colour.$colour-palette-default,\n \"button-hover-text\"\n )};\n --button-hover-background: #{map.get(\n colour.$colour-palette-default,\n \"button-hover-background\"\n )};\n --accent-border: var(--font-base);\n --accent-list-marker: var(--font-base);\n\n .tna-template--system-theme & {\n @media (prefers-color-scheme: dark) {\n --link: #{map.get(colour.$colour-palette-default, \"link\")};\n --link-visited: #{map.get(colour.$colour-palette-default, \"link-visited\")};\n }\n }\n\n .tna-template--dark-theme & {\n --link: #{map.get(colour.$colour-palette-default, \"link\")};\n --link-visited: #{map.get(colour.$colour-palette-default, \"link-visited\")};\n }\n\n @include colour-background(\"background\");\n @include colour-font(\"font-base\");\n}\n\n@mixin accent-light {\n @extend %accent-light;\n}\n\n// Remove accent and contrast values (except for \"form-error\")\n%plain {\n @include colour-css-vars(\"form-error\");\n\n @media (prefers-contrast: more) {\n @include colour-css-vars-high-contrast(\"form-error\");\n }\n\n .tna-template--system-theme & {\n @media (prefers-color-scheme: dark) {\n @include colour-css-vars-dark(\"form-error\");\n }\n\n @media (prefers-contrast: more) and (prefers-color-scheme: dark) {\n @include colour-css-vars-high-contrast-dark(\"form-error\");\n }\n }\n\n .tna-template--dark-theme & {\n @include colour-css-vars-dark(\"form-error\");\n\n @media (prefers-contrast: more) {\n @include colour-css-vars-high-contrast-dark(\"form-error\");\n }\n }\n\n @include colour-background(\"background\");\n}\n\n@mixin plain {\n @extend %plain;\n}\n\n%yellow-accent {\n --accent-background: #{colour.brand-colour(\"yellow\")} !important;\n --accent-background-light: #{colour.brand-colour(\"cream\")} !important;\n --accent-border: #{colour.brand-colour(\"yellow\")} !important;\n --accent-list-marker: #{colour.brand-colour(\"brown\")} !important;\n --accent-font-base: #{colour.brand-colour(\"black\")} !important;\n --accent-font-dark: #{colour.brand-colour(\"black\")} !important;\n --accent-font-light: #{colour.brand-colour(\"black\", 0.7)} !important;\n --accent-icon-light: #{colour.brand-colour(\"black\", 0.45)} !important;\n --accent-link: #{colour.brand-colour(\"black\")} !important;\n --accent-link-visited: #{colour.brand-colour(\"black\")} !important;\n --accent-keyline: #{colour.brand-colour(\"black\", 0.5)} !important;\n --accent-keyline-dark: #{colour.brand-colour(\"black\", 0.8)} !important;\n --button-accent-text: #{colour.brand-colour(\"white\")} !important;\n --button-accent-background: #{colour.brand-colour(\"brown\")} !important;\n}\n\n@mixin yellow-accent {\n @extend %yellow-accent;\n}\n\n%accent-lighter-text {\n --accent-font-base: #{colour.brand-colour(\"white\")} !important;\n --accent-font-dark: #{colour.brand-colour(\"white\")} !important;\n --accent-font-light: #{colour.brand-colour(\"white\", 0.7)} !important;\n --accent-icon-light: #{colour.brand-colour(\"white\", 0.45)} !important;\n --accent-link: #{colour.brand-colour(\"white\")} !important;\n --accent-link-visited: #{colour.brand-colour(\"white\")} !important;\n --accent-keyline: #{colour.brand-colour(\"white\", 0.5)} !important;\n --accent-keyline-dark: #{colour.brand-colour(\"white\", 0.8)} !important;\n --button-accent-text: #{colour.brand-colour(\"white\")} !important;\n}\n\n%black-accent {\n --accent-background: #{colour.brand-colour(\"black\")} !important;\n --accent-background-light: #{colour.brand-colour(\"light-grey\")} !important;\n --accent-border: #{colour.brand-colour(\"black\")} !important;\n --accent-list-marker: #{colour.brand-colour(\"grey\")} !important;\n --button-accent-text: #{colour.brand-colour(\"black\")} !important;\n --button-accent-background: #{colour.brand-colour(\"grey\")} !important;\n}\n\n@mixin black-accent {\n @extend %accent-lighter-text;\n @extend %black-accent;\n}\n\n%pink-accent {\n --accent-background: #{colour.brand-colour(\"maroon\")} !important;\n --accent-background-light: #{colour.brand-colour(\"pastel-pink\")} !important;\n --accent-border: #{colour.brand-colour(\"pink\")} !important;\n --accent-list-marker: #{colour.brand-colour(\"pink\")} !important;\n --button-accent-background: #{colour.brand-colour(\"maroon\")} !important;\n}\n\n@mixin pink-accent {\n @extend %accent-lighter-text;\n @extend %pink-accent;\n}\n\n%orange-accent {\n --accent-background: #{colour.brand-colour(\"chestnut\")} !important;\n --accent-background-light: #{colour.brand-colour(\"pastel-orange\")} !important;\n --accent-border: #{colour.brand-colour(\"orange\")} !important;\n --accent-list-marker: #{colour.brand-colour(\"orange\")} !important;\n --button-accent-background: #{colour.brand-colour(\"chestnut\")} !important;\n}\n\n@mixin orange-accent {\n @extend %accent-lighter-text;\n @extend %orange-accent;\n}\n\n%green-accent {\n --accent-background: #{colour.brand-colour(\"forest\")} !important;\n --accent-background-light: #{colour.brand-colour(\"pastel-green\")} !important;\n --accent-border: #{colour.brand-colour(\"green\")} !important;\n --accent-list-marker: #{colour.brand-colour(\"green\")} !important;\n --button-accent-background: #{colour.brand-colour(\"forest\")} !important;\n}\n\n@mixin green-accent {\n @extend %accent-lighter-text;\n @extend %green-accent;\n}\n\n%blue-accent {\n --accent-background: #{colour.brand-colour(\"navy\")} !important;\n --accent-background-light: #{colour.brand-colour(\"pastel-blue\")} !important;\n --accent-border: #{colour.brand-colour(\"blue\")} !important;\n --accent-list-marker: #{colour.brand-colour(\"blue\")} !important;\n --button-accent-background: #{colour.brand-colour(\"navy\")} !important;\n}\n\n@mixin blue-accent {\n @extend %accent-lighter-text;\n @extend %blue-accent;\n}\n\n@mixin on-high-contrast {\n @media (prefers-contrast: more) {\n @content;\n }\n}\n\n@mixin on-forced-colours {\n @media (forced-colors: active) {\n @content;\n }\n}\n\n@mixin on-high-contrast-and-forced-colours {\n @include on-forced-colours {\n @content;\n }\n\n @include on-high-contrast {\n @content;\n }\n}\n","@use \"sass:math\";\n@use \"../variables/typography\";\n@use \"colour\";\n@use \"media\";\n\n@mixin font-size($font-size-px) {\n font-size: #{math.div($font-size-px, typography.$relative-1rem-px)}rem;\n}\n\n@mixin relative-font-size($font-size-px) {\n @warn \"relative-font-size() will soon be deprecated in favour of font-size().\";\n @include font-size($font-size-px);\n}\n\n@mixin main-font-weight {\n font-weight: typography.$main-font-weight;\n}\n\n@mixin main-font-weight-medium {\n font-weight: typography.$main-font-weight-medium;\n}\n\n@mixin main-font-weight-bold {\n font-weight: typography.$main-font-weight-bold;\n}\n\n@mixin main-font($bold: false) {\n font-family: typography.$main-font-family;\n font-style: normal;\n font-optical-sizing: auto;\n font-variation-settings: \"wdth\" 100;\n @if $bold {\n @include main-font-weight-bold;\n } @else {\n @include main-font-weight;\n }\n}\n\n@mixin heading-font {\n font-family: typography.$heading-font-family;\n font-weight: typography.$heading-font-weight;\n}\n\n@mixin detail-font($bold: false) {\n font-family: typography.$detail-font-family;\n font-style: normal;\n font-optical-sizing: auto;\n @if $bold {\n font-weight: typography.$detail-font-weight-bold;\n } @else {\n font-weight: typography.$detail-font-weight;\n }\n}\n\n@mixin detail-font-small {\n @include detail-font;\n @include font-size(14);\n line-height: 1.1;\n text-transform: uppercase;\n}\n\n@mixin interacted-text-decoration {\n text-decoration: underline;\n text-decoration-thickness: typography.$interactive-text-decoration-thickness;\n}\n\n@mixin heading-generator(\n $font-size-default,\n $font-size-medium,\n $font-size-small,\n $font-size-tiny,\n $line-height\n) {\n $small-and-tiny-identical: $font-size-small == $font-size-tiny;\n $medium-small-and-tiny-identical: $font-size-medium == $font-size-small and\n $small-and-tiny-identical;\n $all-identical: $font-size-default == $font-size-medium and\n $medium-small-and-tiny-identical and $small-and-tiny-identical;\n line-height: $line-height;\n @include font-size($font-size-default);\n\n @if $all-identical != true {\n @if $medium-small-and-tiny-identical != true {\n @include media.on-medium {\n @include font-size($font-size-medium);\n }\n\n @if $small-and-tiny-identical != true {\n @include media.on-small {\n @include font-size($font-size-small);\n }\n\n @include media.on-tiny {\n @include font-size($font-size-tiny);\n }\n } @else {\n @include media.on-mobile {\n @include font-size($font-size-small);\n }\n }\n } @else {\n @include media.on-smaller-than-large {\n @include font-size($font-size-medium);\n }\n }\n }\n}\n","/*\n * ------------------------------------------\n * The typefaces, sizes and spacings that are\n * defined in this file have been selected to\n * ensure 100% match with the latest National\n * Archives brand guidelines - avoid changing\n * or overwriting any of these values without\n * signing off with the Digital Services team\n * first\n * ------------------------------------------\n */\n\n$relative-1rem-px: 16; // 16px = 1rem\n\n/*\n * ------------------------------------------\n * When true, use the included font files for\n * Open Sans and Roboto Mono, rather than the\n * versions hosted by Google Fonts\n * ------------------------------------------\n */\n$use-local-fonts: false !default;\n\n$body-font-size-px: 18 !default;\n$body-font-size-px-mobile: 17 !default;\n$body-line-height: 1.75 !default;\n\n$interactive-text-decoration-thickness: 3.5px !default;\n\n$main-font-family-name: \"Open Sans\" !default;\n$main-font-family:\n #{$main-font-family-name},\n sans-serif;\n$main-font-weight: 400 !default;\n$main-font-weight-medium: 600 !default;\n$main-font-weight-bold: 700 !default;\n$main-font-file: \"OpenSans-Regular.ttf\" !default;\n$main-font-file-medium: \"OpenSans-SemiBold.ttf\" !default;\n$main-font-file-bold: \"OpenSans-Bold.ttf\" !default;\n\n/*\n * ------------------------------------------\n * To use Supria Sans Condensed (which is the\n * approved heading typeface for The National\n * Archives), you need to obtain a licence to\n * properly embed the CSS files with the font\n * definitions in your service - check with a\n * member of the Digital Services team on how\n * to get a licence\n * ------------------------------------------\n */\n$heading-font-family-name: \"supria-sans-condensed\" !default;\n$heading-font-family:\n #{$heading-font-family-name},\n \"Arial Narrow\",\n sans-serif;\n$heading-font-weight: 500 !default;\n\n/*\n * ------------------------------------------\n * The detail font should be a monospace font\n * and is used for chips, supertitles as well\n * as the date search component\n * ------------------------------------------\n */\n$detail-font-family-name: \"Roboto Mono\" !default;\n$detail-font-family:\n #{$detail-font-family-name},\n monospace;\n$detail-font-weight: 400 !default;\n$detail-font-weight-bold: 500 !default;\n$detail-font-file: \"RobotoMono-Regular.ttf\" !default;\n$detail-font-file-bold: \"RobotoMono-Medium.ttf\" !default;\n\n$heading-xl-font-size-default: 64 !default;\n$heading-xl-font-size-medium: 48 !default;\n$heading-xl-font-size-small: 36 !default;\n$heading-xl-font-size-tiny: $heading-xl-font-size-small !default;\n$heading-xl-line-height: 1.1 !default;\n\n$heading-l-font-size-default: 36 !default;\n$heading-l-font-size-medium: 30 !default;\n$heading-l-font-size-small: 28 !default;\n$heading-l-font-size-tiny: 25 !default;\n$heading-l-line-height: 1.3 !default;\n\n$heading-m-font-size-default: 22 !default;\n$heading-m-font-size-medium: 21 !default;\n$heading-m-font-size-small: 20 !default;\n$heading-m-font-size-tiny: 19 !default;\n$heading-m-line-height: 1.6 !default;\n\n$heading-s-font-size-default: 18 !default;\n$heading-s-font-size-medium: $heading-s-font-size-default !default;\n$heading-s-font-size-small: $heading-s-font-size-default !default;\n$heading-s-font-size-tiny: $heading-s-font-size-default !default;\n$heading-s-line-height: 1.6 !default;\n"]}
1
+ {"version":3,"sourceRoot":"","sources":["../../../../src/nationalarchives/tools/_spacing.scss","../../../../src/nationalarchives/components/accordion/accordion.scss","../../../../src/nationalarchives/tools/_colour.scss","../../../../src/nationalarchives/tools/_typography.scss","../../../../src/nationalarchives/variables/_typography.scss"],"names":[],"mappings":"CAUA,oCACE,gBAEA,4DACE,aCDF,wBACE,iBAGF,qBACE,iBAIF,wBCgDI,2DD7CF,kBACA,UAEA,oCC0CE,wDDnCJ,sHAEE,UAGF,wBACE,WACA,SACA,0BAGA,cAEA,kBAEA,oBACA,gBAEA,gBAEA,yBAEA,YACA,mBAEA,eCVF,qCC5CA,mBAqBA,YCIA,qBDHA,kBACA,yBACA,mCAPA,YCYsB,IH+BpB,0BACE,kBAGF,gCACE,WAEA,QACA,SAEA,kBACA,gCACA,aAEA,2CACA,8DACA,mBAGF,8BEvBF,0BACA,0BCpCsC,MF2BtC,4DDmCI,sCACE,0DAKF,oDACE,2CAKN,wBACE,aAEA,kBAEA,mBAEA,8BACE,UAGF,gEACE,gBACA,eAGF,2CACE,gBACA,eAEA,OAGF,mCACE,wBACA,kBACA,iBAEA,4CACE,cACA,oBAEA,kBACA,oBACA,gBACA,iBC4TN,8BDrTI,gCACE,YAEA,WACA,YAEA,sBAEA,iBAEA,YAIA,oDACE,YAEA","file":"accordion.css","sourcesContent":["@use \"sass:map\";\n@use \"sass:math\";\n@use \"../variables/spacing\";\n@use \"../variables/typography\";\n@use \"../tools/media\";\n\n@function space($size) {\n @return #{$size * spacing.$spacing-unit-px}px;\n}\n\n%space-above {\n margin-top: space(2);\n\n &:first-child {\n margin-top: 0;\n }\n}\n\n%space-only-above {\n margin: #{space(2)} 0 0;\n\n &:first-child {\n margin-top: 0;\n }\n}\n\n@mixin space-above($zero-other-margins: false) {\n @if $zero-other-margins {\n @extend %space-only-above;\n } @else {\n @extend %space-above;\n }\n}\n\n@mixin no-spacing-generator($suffix: \"\") {\n @if $suffix != \"\" {\n $suffix: \"-\" + $suffix;\n }\n @each $property in margin, padding {\n @each $direction in top, bottom {\n $combined-direction: \"\";\n @if $direction == top or $direction == bottom {\n $combined-direction: vertical;\n } @else if $direction == right or $direction == left {\n $combined-direction: horizontal;\n }\n @if $combined-direction {\n .tna-\\!--no-#{$property}-#{$direction}#{$suffix},\n .tna-\\!--no-#{$property}-#{$combined-direction}#{$suffix} {\n #{$property}-#{$direction}: 0 !important;\n }\n } @else {\n .tna-\\!--no-#{$property}-#{$direction}#{$suffix} {\n #{$property}-#{$direction}: 0 !important;\n }\n }\n }\n }\n}\n\n@mixin spacing-generator($suffix: \"\") {\n @each $property in margin, padding {\n @each $direction in top, bottom {\n @each $size, $amount in spacing.$spacing {\n @if $direction == all {\n .tna-\\!--#{$property}-#{$size} {\n #{$property}: #{space($amount)} !important;\n }\n } @else {\n $combined-direction: \"\";\n @if $direction == top or $direction == bottom {\n $combined-direction: vertical;\n } @else if $direction == right or $direction == left {\n $combined-direction: horizontal;\n }\n @if $combined-direction {\n .tna-\\!--#{$property}-#{$direction}-#{$size},\n .tna-\\!--#{$property}-#{$combined-direction}-#{$size} {\n #{$property}-#{$direction}: #{space($amount)} !important;\n }\n } @else {\n .tna-\\!--#{$property}-#{$direction}-#{$size} {\n #{$property}-#{$direction}: #{space($amount)} !important;\n }\n }\n }\n }\n }\n }\n\n @include media.on-mobile {\n @each $property in margin, padding {\n @each $direction in top, bottom {\n @each $size, $amount in spacing.$spacing-mobile {\n @if $direction == all {\n .tna-\\!--#{$property}-#{$size} {\n #{$property}: #{space($amount)} !important;\n }\n } @else {\n $combined-direction: \"\";\n @if $direction == top or $direction == bottom {\n $combined-direction: vertical;\n } @else if $direction == right or $direction == left {\n $combined-direction: horizontal;\n }\n @if $combined-direction {\n .tna-\\!--#{$property}-#{$direction}-#{$size},\n .tna-\\!--#{$property}-#{$combined-direction}-#{$size} {\n #{$property}-#{$direction}: #{space($amount)} !important;\n }\n } @else {\n .tna-\\!--#{$property}-#{$direction}-#{$size} {\n #{$property}-#{$direction}: #{space($amount)} !important;\n }\n }\n }\n }\n }\n }\n }\n}\n","@use \"sass:math\";\n@use \"../../tools/colour\";\n@use \"../../tools/spacing\";\n@use \"../../tools/typography\";\n\n.tna-accordion {\n @include spacing.space-above;\n\n // NON INTERACTIVE\n &__item {\n @include spacing.space-above;\n }\n\n &__heading {\n padding-top: spacing.space(1);\n }\n\n &__body {\n padding-top: spacing.space(1);\n }\n\n // INTERACTIVE\n &__details {\n @include colour.colour-border(\"keyline\", 1px, solid, bottom);\n\n position: relative;\n z-index: 1;\n\n &:first-child {\n @include colour.colour-border(\"keyline\", 1px, solid, top);\n // @include colour.thick-keyline-dark(top);\n // @include colour.thick-keyline-accent(top);\n }\n }\n\n &__details:has(&__summary:focus),\n &__details:has(&__content:focus) {\n z-index: 2;\n }\n\n &__summary {\n width: 100%;\n margin: 0;\n padding: spacing.space(0.5) spacing.space(3) spacing.space(0.5)\n spacing.space(1);\n\n display: block;\n\n position: relative;\n\n line-height: inherit;\n text-align: left;\n\n list-style: none;\n\n background: transparent;\n\n border: none;\n border-radius: 0.1px;\n\n cursor: pointer;\n\n @include colour.colour-font(\"font-dark\");\n @include typography.font-size(18);\n @include typography.main-font(true);\n\n * {\n font-size: inherit;\n }\n\n &::before {\n content: \"\";\n\n width: 0;\n height: 0;\n\n position: absolute;\n top: calc(50% - #{math.div(math.sqrt(3), 4)}rem);\n right: 0.75rem;\n\n border-width: #{math.div(math.sqrt(3), 2)}rem 0.5rem 0 0.5rem;\n border-color: colour.colour-var(\"font-light\") transparent;\n border-style: solid;\n }\n\n &:hover {\n @include typography.interacted-text-decoration;\n @include colour.colour-background(\"background-tint\");\n\n &::before {\n border-color: colour.colour-var(\"font-dark\") transparent;\n }\n }\n\n &[aria-expanded=\"true\"] {\n &::before {\n border-width: 0 0.5rem #{math.div(math.sqrt(3), 2)}rem 0.5rem;\n }\n }\n }\n\n &__content {\n padding: spacing.space(1);\n\n position: relative;\n\n border-radius: 0.1px;\n\n &:focus {\n z-index: 2;\n }\n\n &:has(.tna-table-wrapper):has(.tna-table) {\n padding-right: 0;\n padding-left: 0;\n }\n\n .tna-table-wrapper {\n padding-right: 0;\n padding-left: 0;\n\n left: 0;\n }\n\n .tna-table {\n width: calc(100% - #{spacing.space(2)});\n margin-right: spacing.space(1);\n margin-left: spacing.space(1);\n\n &__caption {\n padding-top: 0;\n padding-bottom: spacing.space(1);\n\n font-size: inherit;\n line-height: inherit;\n text-align: left;\n caption-side: top;\n }\n }\n }\n\n @include colour.on-forced-colours {\n &__summary {\n &::before {\n content: \"\\2193\";\n\n width: auto;\n height: auto;\n\n top: calc(50% - 0.5rem);\n\n line-height: 1rem;\n\n border: none;\n }\n\n &[aria-expanded=\"true\"] {\n &::before {\n content: \"\\2191\";\n\n border: none;\n }\n }\n }\n }\n}\n","@use \"sass:list\";\n@use \"sass:map\";\n@use \"../variables/borders\";\n@use \"../variables/colour\";\n@use \"../tools/media\";\n\n@function brand-colour($colour, $opacity: 1) {\n @return colour.brand-colour($colour, $opacity);\n}\n\n@mixin colour-css-vars($excludes...) {\n @each $name, $value in colour.$colour-palette-default {\n @if not list.index($excludes, $name) {\n --#{$name}: #{$value};\n }\n }\n}\n\n@mixin colour-css-vars-dark($excludes...) {\n @each $name, $value in colour.$colour-palette-dark {\n @if not list.index($excludes, $name) {\n --#{$name}: #{$value};\n }\n }\n}\n\n@mixin colour-css-vars-high-contrast($excludes...) {\n @each $name, $value in colour.$colour-palette-high-contrast {\n @if not list.index($excludes, $name) {\n --#{$name}: #{$value};\n }\n }\n}\n\n@mixin colour-css-vars-high-contrast-dark($excludes...) {\n @each $name, $value in colour.$colour-palette-high-contrast-dark {\n @if not list.index($excludes, $name) {\n --#{$name}: #{$value};\n }\n }\n}\n\n@function colour-var($colour) {\n @return var(\n --#{$colour},\n #{map.get(colour.$colour-palette-default, $colour)}\n );\n}\n\n@mixin colour-font($colour, $important: false) {\n color: colour-var($colour) if($important, !important, null);\n}\n\n@mixin colour-background($colour, $important: false) {\n background-color: colour-var($colour) if($important, !important, null);\n}\n\n@mixin colour-background-brand($brandColour, $important: false) {\n background-color: #{brand-colour($brandColour)} if($important, !important, null);\n}\n\n@mixin colour-border(\n $colour,\n $width: \"\",\n $style: solid,\n $direction: \"\",\n $important: false\n) {\n @if $direction != \"\" {\n @if $width != \"\" {\n border-#{$direction}: $width\n colour-var($colour)\n $style\n if($important, !important, null);\n } @else {\n border-#{$direction}-color: colour-var($colour)\n if($important, !important, null);\n }\n } @else {\n @if $width != \"\" {\n border: $width\n colour-var($colour)\n $style\n if($important, !important, null);\n } @else {\n border-color: var(\n --#{$colour},\n #{map.get(colour.$colour-palette-default, $colour)}\n )\n if($important, !important, null);\n }\n }\n}\n\n@mixin colour-outline($colour, $width: \"\", $style: solid, $important: false) {\n @if $width != \"\" {\n outline: $width colour-var($colour) $style if($important, !important, null);\n } @else {\n outline-color: colour-var($colour) if($important, !important, null);\n }\n}\n\n@mixin colour-fill($colour, $important: false) {\n fill: colour-var($colour) if($important, !important, null);\n}\n\n@mixin thick-keyline($direction: \"\") {\n @if $direction != \"\" {\n @include colour-border(\n \"keyline\",\n borders.$thick-border-width,\n solid,\n $direction\n );\n } @else {\n @include colour-border(\"keyline\", borders.$thick-border-width, solid);\n }\n}\n\n@mixin thick-keyline-dark($direction: \"\") {\n @if $direction != \"\" {\n @include colour-border(\n \"keyline-dark\",\n borders.$thick-border-width,\n solid,\n $direction\n );\n } @else {\n @include colour-border(\"keyline-dark\", borders.$thick-border-width, solid);\n }\n}\n\n@mixin thick-keyline-accent($direction: \"\") {\n @if $direction != \"\" {\n @include colour-border(\n \"accent-border\",\n borders.$thick-border-width,\n solid,\n $direction\n );\n } @else {\n @include colour-border(\"accent-border\", borders.$thick-border-width, solid);\n }\n}\n\n@mixin thick-keyline-error($direction: \"\") {\n @if $direction != \"\" {\n @include colour-border(\n \"form-error\",\n borders.$thick-border-width,\n solid,\n $direction\n );\n } @else {\n @include colour-border(\"form-error\", borders.$thick-border-width, solid);\n }\n}\n\n@mixin thick-keyline-brand($direction: \"\", $brandColour) {\n @if $direction != \"\" {\n border-#{$direction}: borders.$thick-border-width\n #{brand-colour($brandColour)}\n solid;\n } @else {\n border: borders.$thick-border-width #{brand-colour($brandColour)} solid;\n }\n}\n\n// Use light theme colours (except for \"form-error\")\n%light {\n @include colour-css-vars(\"form-error\");\n\n @media (prefers-contrast: more) {\n @include colour-css-vars-high-contrast(\"form-error\");\n }\n}\n\n@mixin light {\n @extend %light;\n}\n\n%contrast {\n --background: var(--contrast-background);\n --font-base: var(--contrast-font-base);\n --font-dark: var(--contrast-font-dark);\n --font-light: var(--contrast-font-light);\n --icon-light: var(--contrast-icon-light);\n --link: var(--contrast-link);\n --link-visited: var(--contrast-link-visited);\n --keyline: var(--contrast-keyline);\n --keyline-dark: var(--contrast-keyline-dark);\n --button-text: var(--contrast-button-text);\n --button-background: var(--contrast-button-background);\n --button-hover-text: var(--contrast-button-hover-text);\n --button-hover-background: var(--contrast-button-hover-background);\n --accent-list-marker: var(--accent-border);\n // --accent-list-marker: var(--font-base);\n\n @include colour-background(\"background\");\n\n @include colour-font(\"font-base\");\n}\n\n@mixin contrast {\n @extend %contrast;\n}\n\n%contrast-on-mobile {\n @include media.on-mobile {\n --background: var(--contrast-background);\n --font-base: var(--contrast-font-base);\n --font-dark: var(--contrast-font-dark);\n --font-light: var(--contrast-font-light);\n --icon-light: var(--contrast-icon-light);\n --link: var(--contrast-link);\n --link-visited: var(--contrast-link-visited);\n --keyline: var(--contrast-keyline);\n --keyline-dark: var(--contrast-keyline-dark);\n --button-text: var(--contrast-button-text);\n --button-background: var(--contrast-button-background);\n --button-hover-text: var(--contrast-button-hover-text);\n --button-hover-background: var(--contrast-button-hover-background);\n --accent-list-marker: var(--accent-border);\n // --accent-list-marker: var(--font-base);\n\n @include colour-background(\"background\");\n\n @include colour-font(\"font-base\");\n }\n}\n\n@mixin contrast-on-mobile {\n @extend %contrast-on-mobile;\n}\n\n%tint {\n --background: var(--background-tint);\n\n @include colour-background(\"background\");\n\n @include colour-font(\"font-base\");\n}\n\n@mixin tint {\n @extend %tint;\n}\n\n%accent {\n --background: var(--accent-background);\n --font-base: var(--accent-font-base);\n --font-dark: var(--accent-font-dark);\n --font-light: var(--accent-font-light);\n --icon-light: var(--accent-icon-light);\n --link: var(--accent-link);\n --link-visited: var(--accent-link);\n --keyline: var(--accent-keyline);\n --keyline-dark: var(--accent-keyline-dark);\n --accent-list-marker: var(--accent-font-base);\n --accent-border: var(--accent-font-dark);\n\n @include colour-background(\"background\");\n\n @include colour-font(\"font-base\");\n}\n\n@mixin accent {\n @extend %accent;\n}\n\n%accent-light {\n --background: var(--accent-background-light);\n --font-base: #{map.get(colour.$colour-palette-default, \"font-base\")};\n --font-dark: #{map.get(colour.$colour-palette-default, \"font-dark\")};\n --font-light: #{map.get(colour.$colour-palette-default, \"font-light\")};\n --icon-light: #{map.get(colour.$colour-palette-default, \"icon-light\")};\n --keyline: #{map.get(colour.$colour-palette-default, \"keyline\")};\n --keyline-dark: #{map.get(colour.$colour-palette-default, \"keyline-dark\")};\n --button-text: #{map.get(colour.$colour-palette-default, \"button-text\")};\n --button-background: #{map.get(\n colour.$colour-palette-default,\n \"button-background\"\n )};\n --button-hover-text: #{map.get(\n colour.$colour-palette-default,\n \"button-hover-text\"\n )};\n --button-hover-background: #{map.get(\n colour.$colour-palette-default,\n \"button-hover-background\"\n )};\n --accent-border: var(--font-base);\n --accent-list-marker: var(--font-base);\n\n .tna-template--system-theme & {\n @media (prefers-color-scheme: dark) {\n --link: #{map.get(colour.$colour-palette-default, \"link\")};\n --link-visited: #{map.get(colour.$colour-palette-default, \"link-visited\")};\n }\n }\n\n .tna-template--dark-theme & {\n --link: #{map.get(colour.$colour-palette-default, \"link\")};\n --link-visited: #{map.get(colour.$colour-palette-default, \"link-visited\")};\n }\n\n @include colour-background(\"background\");\n @include colour-font(\"font-base\");\n}\n\n@mixin accent-light {\n @extend %accent-light;\n}\n\n// Remove accent and contrast values (except for \"form-error\")\n%plain {\n @include colour-css-vars(\"form-error\");\n\n @media (prefers-contrast: more) {\n @include colour-css-vars-high-contrast(\"form-error\");\n }\n\n .tna-template--system-theme & {\n @media (prefers-color-scheme: dark) {\n @include colour-css-vars-dark(\"form-error\");\n }\n\n @media (prefers-contrast: more) and (prefers-color-scheme: dark) {\n @include colour-css-vars-high-contrast-dark(\"form-error\");\n }\n }\n\n .tna-template--dark-theme & {\n @include colour-css-vars-dark(\"form-error\");\n\n @media (prefers-contrast: more) {\n @include colour-css-vars-high-contrast-dark(\"form-error\");\n }\n }\n\n @include colour-background(\"background\");\n}\n\n@mixin plain {\n @extend %plain;\n}\n\n%yellow-accent {\n --accent-background: #{colour.brand-colour(\"yellow\")} !important;\n --accent-background-light: #{colour.brand-colour(\"cream\")} !important;\n --accent-border: #{colour.brand-colour(\"yellow\")} !important;\n --accent-list-marker: #{colour.brand-colour(\"brown\")} !important;\n --accent-font-base: #{colour.brand-colour(\"black\")} !important;\n --accent-font-dark: #{colour.brand-colour(\"black\")} !important;\n --accent-font-light: #{colour.brand-colour(\"black\", 0.7)} !important;\n --accent-icon-light: #{colour.brand-colour(\"black\", 0.45)} !important;\n --accent-link: #{colour.brand-colour(\"black\")} !important;\n --accent-link-visited: #{colour.brand-colour(\"black\")} !important;\n --accent-keyline: #{colour.brand-colour(\"black\", 0.5)} !important;\n --accent-keyline-dark: #{colour.brand-colour(\"black\", 0.8)} !important;\n --button-accent-text: #{colour.brand-colour(\"white\")} !important;\n --button-accent-background: #{colour.brand-colour(\"brown\")} !important;\n}\n\n@mixin yellow-accent {\n @extend %yellow-accent;\n}\n\n%accent-lighter-text {\n --accent-font-base: #{colour.brand-colour(\"white\")} !important;\n --accent-font-dark: #{colour.brand-colour(\"white\")} !important;\n --accent-font-light: #{colour.brand-colour(\"white\", 0.7)} !important;\n --accent-icon-light: #{colour.brand-colour(\"white\", 0.45)} !important;\n --accent-link: #{colour.brand-colour(\"white\")} !important;\n --accent-link-visited: #{colour.brand-colour(\"white\")} !important;\n --accent-keyline: #{colour.brand-colour(\"white\", 0.5)} !important;\n --accent-keyline-dark: #{colour.brand-colour(\"white\", 0.8)} !important;\n --button-accent-text: #{colour.brand-colour(\"white\")} !important;\n}\n\n%black-accent {\n --accent-background: #{colour.brand-colour(\"black\")} !important;\n --accent-background-light: #{colour.brand-colour(\"light-grey\")} !important;\n --accent-border: #{colour.brand-colour(\"black\")} !important;\n --accent-list-marker: #{colour.brand-colour(\"grey\")} !important;\n --button-accent-text: #{colour.brand-colour(\"black\")} !important;\n --button-accent-background: #{colour.brand-colour(\"grey\")} !important;\n}\n\n@mixin black-accent {\n @extend %accent-lighter-text;\n @extend %black-accent;\n}\n\n%pink-accent {\n --accent-background: #{colour.brand-colour(\"maroon\")} !important;\n --accent-background-light: #{colour.brand-colour(\"pastel-pink\")} !important;\n --accent-border: #{colour.brand-colour(\"pink\")} !important;\n --accent-list-marker: #{colour.brand-colour(\"pink\")} !important;\n --button-accent-background: #{colour.brand-colour(\"maroon\")} !important;\n}\n\n@mixin pink-accent {\n @extend %accent-lighter-text;\n @extend %pink-accent;\n}\n\n%orange-accent {\n --accent-background: #{colour.brand-colour(\"chestnut\")} !important;\n --accent-background-light: #{colour.brand-colour(\"pastel-orange\")} !important;\n --accent-border: #{colour.brand-colour(\"orange\")} !important;\n --accent-list-marker: #{colour.brand-colour(\"orange\")} !important;\n --button-accent-background: #{colour.brand-colour(\"chestnut\")} !important;\n}\n\n@mixin orange-accent {\n @extend %accent-lighter-text;\n @extend %orange-accent;\n}\n\n%green-accent {\n --accent-background: #{colour.brand-colour(\"forest\")} !important;\n --accent-background-light: #{colour.brand-colour(\"pastel-green\")} !important;\n --accent-border: #{colour.brand-colour(\"green\")} !important;\n --accent-list-marker: #{colour.brand-colour(\"green\")} !important;\n --button-accent-background: #{colour.brand-colour(\"forest\")} !important;\n}\n\n@mixin green-accent {\n @extend %accent-lighter-text;\n @extend %green-accent;\n}\n\n%blue-accent {\n --accent-background: #{colour.brand-colour(\"navy\")} !important;\n --accent-background-light: #{colour.brand-colour(\"pastel-blue\")} !important;\n --accent-border: #{colour.brand-colour(\"blue\")} !important;\n --accent-list-marker: #{colour.brand-colour(\"blue\")} !important;\n --button-accent-background: #{colour.brand-colour(\"navy\")} !important;\n}\n\n@mixin blue-accent {\n @extend %accent-lighter-text;\n @extend %blue-accent;\n}\n\n@mixin on-high-contrast {\n @media (prefers-contrast: more) {\n @content;\n }\n}\n\n@mixin on-forced-colours {\n @media (forced-colors: active) {\n @content;\n }\n}\n\n@mixin on-high-contrast-and-forced-colours {\n @include on-forced-colours {\n @content;\n }\n\n @include on-high-contrast {\n @content;\n }\n}\n","@use \"sass:math\";\n@use \"../variables/typography\";\n@use \"colour\";\n@use \"media\";\n\n@mixin font-size($font-size-px) {\n font-size: #{math.div($font-size-px, typography.$relative-1rem-px)}rem;\n}\n\n@mixin relative-font-size($font-size-px) {\n @warn \"relative-font-size() will soon be deprecated in favour of font-size().\";\n @include font-size($font-size-px);\n}\n\n@mixin main-font-weight {\n font-weight: typography.$main-font-weight;\n}\n\n@mixin main-font-weight-medium {\n font-weight: typography.$main-font-weight-medium;\n}\n\n@mixin main-font-weight-bold {\n font-weight: typography.$main-font-weight-bold;\n}\n\n@mixin main-font($bold: false) {\n font-family: typography.$main-font-family;\n font-style: normal;\n font-optical-sizing: auto;\n font-variation-settings: \"wdth\" 100;\n @if $bold {\n @include main-font-weight-bold;\n } @else {\n @include main-font-weight;\n }\n}\n\n@mixin heading-font {\n font-family: typography.$heading-font-family;\n font-weight: typography.$heading-font-weight;\n}\n\n@mixin detail-font($bold: false) {\n font-family: typography.$detail-font-family;\n font-style: normal;\n font-optical-sizing: auto;\n @if $bold {\n font-weight: typography.$detail-font-weight-bold;\n } @else {\n font-weight: typography.$detail-font-weight;\n }\n}\n\n@mixin detail-font-small {\n @include detail-font;\n @include font-size(14);\n line-height: 1.1;\n text-transform: uppercase;\n}\n\n@mixin interacted-text-decoration {\n text-decoration: underline;\n text-decoration-thickness: typography.$interactive-text-decoration-thickness;\n}\n\n@mixin heading-generator(\n $font-size-default,\n $font-size-medium,\n $font-size-small,\n $font-size-tiny,\n $line-height\n) {\n $small-and-tiny-identical: $font-size-small == $font-size-tiny;\n $medium-small-and-tiny-identical: $font-size-medium == $font-size-small and\n $small-and-tiny-identical;\n $all-identical: $font-size-default == $font-size-medium and\n $medium-small-and-tiny-identical and $small-and-tiny-identical;\n line-height: $line-height;\n @include font-size($font-size-default);\n\n @if $all-identical != true {\n @if $medium-small-and-tiny-identical != true {\n @include media.on-medium {\n @include font-size($font-size-medium);\n }\n\n @if $small-and-tiny-identical != true {\n @include media.on-small {\n @include font-size($font-size-small);\n }\n\n @include media.on-tiny {\n @include font-size($font-size-tiny);\n }\n } @else {\n @include media.on-mobile {\n @include font-size($font-size-small);\n }\n }\n } @else {\n @include media.on-smaller-than-large {\n @include font-size($font-size-medium);\n }\n }\n }\n}\n","/*\n * ------------------------------------------\n * The typefaces, sizes and spacings that are\n * defined in this file have been selected to\n * ensure 100% match with the latest National\n * Archives brand guidelines - avoid changing\n * or overwriting any of these values without\n * signing off with the Digital Services team\n * first\n * ------------------------------------------\n */\n\n$relative-1rem-px: 16; // 16px = 1rem\n\n/*\n * ------------------------------------------\n * When true, use the included font files for\n * Open Sans and Roboto Mono, rather than the\n * versions hosted by Google Fonts\n * ------------------------------------------\n */\n$use-local-fonts: false !default;\n\n$body-font-size-px: 18 !default;\n$body-font-size-px-mobile: 17 !default;\n$body-line-height: 1.75 !default;\n\n$interactive-text-decoration-thickness: 3.5px !default;\n\n$main-font-family-name: \"Open Sans\" !default;\n$main-font-family:\n #{$main-font-family-name},\n sans-serif;\n$main-font-weight: 400 !default;\n$main-font-weight-medium: 600 !default;\n$main-font-weight-bold: 700 !default;\n$main-font-file: \"OpenSans-Regular.ttf\" !default;\n$main-font-file-medium: \"OpenSans-SemiBold.ttf\" !default;\n$main-font-file-bold: \"OpenSans-Bold.ttf\" !default;\n\n/*\n * ------------------------------------------\n * To use Supria Sans Condensed (which is the\n * approved heading typeface for The National\n * Archives), you need to obtain a licence to\n * properly embed the CSS files with the font\n * definitions in your service - check with a\n * member of the Digital Services team on how\n * to get a licence\n * ------------------------------------------\n */\n$heading-font-family-name: \"supria-sans-condensed\" !default;\n$heading-font-family:\n #{$heading-font-family-name},\n \"Arial Narrow\",\n sans-serif;\n$heading-font-weight: 500 !default;\n\n/*\n * ------------------------------------------\n * The detail font should be a monospace font\n * and is used for chips, supertitles as well\n * as the date search component\n * ------------------------------------------\n */\n$detail-font-family-name: \"Roboto Mono\" !default;\n$detail-font-family:\n #{$detail-font-family-name},\n monospace;\n$detail-font-weight: 400 !default;\n$detail-font-weight-bold: 500 !default;\n$detail-font-file: \"RobotoMono-Regular.ttf\" !default;\n$detail-font-file-bold: \"RobotoMono-Medium.ttf\" !default;\n\n$heading-xl-font-size-default: 64 !default;\n$heading-xl-font-size-medium: 48 !default;\n$heading-xl-font-size-small: 36 !default;\n$heading-xl-font-size-tiny: $heading-xl-font-size-small !default;\n$heading-xl-line-height: 1.1 !default;\n\n$heading-l-font-size-default: 36 !default;\n$heading-l-font-size-medium: 30 !default;\n$heading-l-font-size-small: 28 !default;\n$heading-l-font-size-tiny: 25 !default;\n$heading-l-line-height: 1.3 !default;\n\n$heading-m-font-size-default: 22 !default;\n$heading-m-font-size-medium: 21 !default;\n$heading-m-font-size-small: 20 !default;\n$heading-m-font-size-tiny: 19 !default;\n$heading-m-line-height: 1.6 !default;\n\n$heading-s-font-size-default: 18 !default;\n$heading-s-font-size-medium: $heading-s-font-size-default !default;\n$heading-s-font-size-small: $heading-s-font-size-default !default;\n$heading-s-font-size-tiny: $heading-s-font-size-default !default;\n$heading-s-line-height: 1.6 !default;\n"]}
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("TNAFrontend",[],t):"object"==typeof exports?exports.TNAFrontend=t():e.TNAFrontend=t()}(self,(()=>(()=>{"use strict";var e={d:(t,r)=>{for(var o in r)e.o(r,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function o(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,i(o.key),o)}}function n(e,t,r){return t&&o(e.prototype,t),r&&o(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}function i(e){var t=function(e,t){if("object"!=r(e)||!e)return e;var o=e[Symbol.toPrimitive];if(void 0!==o){var n=o.call(e,"string");if("object"!=r(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==r(t)?t:t+""}e.r(t),e.d(t,{Accordion:()=>l});var l=n((function e(t){var r,o,n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),r=this,(o=i(o="polyfillRequired"))in r?Object.defineProperty(r,o,{value:null,enumerable:!0,configurable:!0,writable:!0}):r[o]=null,this.$module=t,this.$firstDetailsElement=t&&t.querySelector(".tna-accordion__details[name]"),this.$detailsElements=t&&this.$firstDetailsElement&&document.querySelectorAll('.tna-accordion__details[name="'.concat(this.$firstDetailsElement.getAttribute("name"),'"]')),this.$module&&this.$detailsElements&&Array.from(this.$detailsElements).forEach((function(e){e.addEventListener("toggle",(function(e){var t=e.target;t.hasAttribute("open")&&Array.from(n.$detailsElements).filter((function(e){return e!==t&&e.hasAttribute("open")})).forEach((function(e){return e.removeAttribute("open")}))}))}))}));return t})()));
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("TNAFrontend",[],t):"object"==typeof exports?exports.TNAFrontend=t():e.TNAFrontend=t()}(self,(()=>(()=>{"use strict";var e={d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,o(n.key),n)}}function o(e){var t=function(e,t){if("object"!=r(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,"string");if("object"!=r(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==r(t)?t:t+""}e.r(t),e.d(t,{Accordion:()=>i});var i=function(){return e=function e(t){var r,n,i=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),r=this,(n=o(n="polyfillRequired"))in r?Object.defineProperty(r,n,{value:null,enumerable:!0,configurable:!0,writable:!0}):r[n]=null,this.$module=t,this.$items=t&&t.querySelectorAll(".tna-accordion__item"),this.$module&&this.$items&&(this.allowMultipleItemsOpen="true"===this.$module.dataset.multipleitems,this.$items.forEach((function(e){return i.initItem(e)})),this.initState())},(t=[{key:"initItem",value:function(e){var t=this,r=e.querySelector(".tna-accordion__heading"),n=e.querySelector(".tna-accordion__body");if(r&&n){e.classList.add("tna-accordion__details"),e.classList.remove("tna-accordion__item"),r.removeAttribute("class"),n.classList.add("tna-accordion__content"),n.classList.remove("tna-accordion__body"),n.setAttribute("hidden","until-found"),n.addEventListener("blur",(function(){n.removeAttribute("tabindex")}));var o=document.createElement("button");o.classList.add("tna-accordion__summary"),o.setAttribute("aria-controls",n.id),r.parentNode.insertBefore(o,r.nextSibling),o.appendChild(r),o.addEventListener("click",(function(){"true"===o.getAttribute("aria-expanded")?t.closeItem(e):t.openItem(e)}))}}},{key:"initState",value:function(){var e=this;this.$items.forEach((function(t){"true"===t.dataset.isopen?e.openItem(t):e.closeItem(t),t.removeAttribute("data-isopen")}))}},{key:"openItem",value:function(e){this.allowMultipleItemsOpen||this.closeAllItemsExcept(e);var t=e.querySelector(".tna-accordion__summary"),r=e.querySelector(".tna-accordion__content");t.setAttribute("aria-expanded","true"),t.setAttribute("aria-label","".concat(t.innerText,", Hide this section")),r.removeAttribute("hidden"),r.setAttribute("tabindex","0"),r.focus()}},{key:"closeItem",value:function(e){var t=e.querySelector(".tna-accordion__summary"),r=e.querySelector(".tna-accordion__content");t.setAttribute("aria-expanded","false"),t.setAttribute("aria-label","".concat(t.innerText,", Show this section")),r.setAttribute("hidden","until-found")}},{key:"closeAllItemsExcept",value:function(e){var t=this;Array.from(this.$items).filter((function(t){return t.querySelector(".tna-accordion__summary")!==e&&"true"===t.querySelector(".tna-accordion__summary").getAttribute("aria-expanded")})).forEach((function(e){return t.closeItem(e)}))}}])&&n(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t}();return t})()));
2
2
  //# sourceMappingURL=accordion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"components/accordion/accordion.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,cAAe,GAAIH,GACA,iBAAZC,QACdA,QAAqB,YAAID,IAEzBD,EAAkB,YAAIC,GACvB,CATD,CASGK,MAAM,I,mBCRT,IAAIC,EAAsB,CCA1BA,EAAwB,CAACL,EAASM,KACjC,IAAI,IAAIC,KAAOD,EACXD,EAAoBG,EAAEF,EAAYC,KAASF,EAAoBG,EAAER,EAASO,IAC5EE,OAAOC,eAAeV,EAASO,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDF,EAAwB,CAACQ,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFT,EAAyBL,IACH,oBAAXkB,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeV,EAASkB,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeV,EAAS,aAAc,CAAEoB,OAAO,GAAO,G,qzBCLvD,IAAMC,EAASC,GAGpB,SAAAD,EAAYE,GAAS,I,IAAAC,EAAA,M,4FAAAC,CAAA,KAAAJ,G,EAAA,M,MAAA,uB,mCAFF,K,iDAAA,KAGjBK,KAAKH,QAAUA,EACfG,KAAKC,qBACHJ,GAAWA,EAAQK,cAAc,iCACnCF,KAAKG,iBACHN,GACAG,KAAKC,sBACLG,SAASC,iBAAiB,iCAADC,OACUN,KAAKC,qBAAqBM,aAAa,QAAO,OAE9EP,KAAKH,SAAYG,KAAKG,kBAI3BK,MAAMC,KAAKT,KAAKG,kBAAkBO,SAAQ,SAACC,GACzCA,EAAgBC,iBAAiB,UAAU,SAACC,GAC1C,IAAMC,EAAsBD,EAAEE,OAC1BD,EAAoBE,aAAa,SACnCR,MAAMC,KAAKX,EAAKK,kBACbc,QACC,SAACC,GAAmB,OAClBA,IAAwBJ,GACxBI,EAAoBF,aAAa,OAAO,IAE3CN,SAAQ,SAACQ,GAAmB,OAC3BA,EAAoBC,gBAAgB,OAAO,GAGnD,GACF,GACF,I","sources":["webpack://TNAFrontend/webpack/universalModuleDefinition","webpack://TNAFrontend/webpack/bootstrap","webpack://TNAFrontend/webpack/runtime/define property getters","webpack://TNAFrontend/webpack/runtime/hasOwnProperty shorthand","webpack://TNAFrontend/webpack/runtime/make namespace object","webpack://TNAFrontend/./src/nationalarchives/components/accordion/accordion.mjs"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"TNAFrontend\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"TNAFrontend\"] = factory();\n\telse\n\t\troot[\"TNAFrontend\"] = factory();\n})(self, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export class Accordion {\n polyfillRequired = null;\n\n constructor($module) {\n this.$module = $module;\n this.$firstDetailsElement =\n $module && $module.querySelector(\".tna-accordion__details[name]\");\n this.$detailsElements =\n $module &&\n this.$firstDetailsElement &&\n document.querySelectorAll(\n `.tna-accordion__details[name=\"${this.$firstDetailsElement.getAttribute(\"name\")}\"]`,\n );\n if (!this.$module || !this.$detailsElements) {\n return;\n }\n\n Array.from(this.$detailsElements).forEach(($detailsElement) => {\n $detailsElement.addEventListener(\"toggle\", (e) => {\n const $thisDetailsElement = e.target;\n if ($thisDetailsElement.hasAttribute(\"open\")) {\n Array.from(this.$detailsElements)\n .filter(\n ($eachDetailsElement) =>\n $eachDetailsElement !== $thisDetailsElement &&\n $eachDetailsElement.hasAttribute(\"open\"),\n )\n .forEach(($eachDetailsElement) =>\n $eachDetailsElement.removeAttribute(\"open\"),\n );\n }\n });\n });\n }\n}\n"],"names":["root","factory","exports","module","define","amd","self","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","Accordion","_createClass","$module","_this","_classCallCheck","this","$firstDetailsElement","querySelector","$detailsElements","document","querySelectorAll","concat","getAttribute","Array","from","forEach","$detailsElement","addEventListener","e","$thisDetailsElement","target","hasAttribute","filter","$eachDetailsElement","removeAttribute"],"sourceRoot":""}
1
+ {"version":3,"file":"components/accordion/accordion.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,cAAe,GAAIH,GACA,iBAAZC,QACdA,QAAqB,YAAID,IAEzBD,EAAkB,YAAIC,GACvB,CATD,CASGK,MAAM,I,mBCRT,IAAIC,EAAsB,CCA1BA,EAAwB,CAACL,EAASM,KACjC,IAAI,IAAIC,KAAOD,EACXD,EAAoBG,EAAEF,EAAYC,KAASF,EAAoBG,EAAER,EAASO,IAC5EE,OAAOC,eAAeV,EAASO,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDF,EAAwB,CAACQ,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFT,EAAyBL,IACH,oBAAXkB,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeV,EAASkB,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeV,EAAS,aAAc,CAAEoB,OAAO,GAAO,G,ysBCLvD,IAAMC,EAAS,WAenB,O,EAZD,SAAAA,EAAYC,GAAS,I,IAAAC,EAAA,M,4FAAAC,CAAA,KAAAH,G,EAAA,M,MAAA,uB,mCAFF,K,iDAAA,KAGjBI,KAAKH,QAAUA,EACfG,KAAKC,OAASJ,GAAWA,EAAQK,iBAAiB,wBAC7CF,KAAKH,SAAYG,KAAKC,SAI3BD,KAAKG,uBACuC,SAA1CH,KAAKH,QAAQO,QAAuB,cAEtCJ,KAAKC,OAAOI,SAAQ,SAACC,GAAK,OAAKR,EAAKS,SAASD,EAAM,IACnDN,KAAKQ,YACP,G,EAAC,EAAA1B,IAAA,WAAAa,MAED,SAASW,GAAO,IAAAG,EAAA,KACRC,EAAWJ,EAAMK,cAAc,2BAC/BC,EAAWN,EAAMK,cAAc,wBAErC,GAAKD,GAAaE,EAAlB,CAIAN,EAAMO,UAAUC,IAAI,0BACpBR,EAAMO,UAAUE,OAAO,uBAEvBL,EAASM,gBAAgB,SAEzBJ,EAASC,UAAUC,IAAI,0BACvBF,EAASC,UAAUE,OAAO,uBAC1BH,EAASK,aAAa,SAAU,eAChCL,EAASM,iBAAiB,QAAQ,WAChCN,EAASI,gBAAgB,WAC3B,IAEA,IAAMG,EAAiBC,SAASC,cAAc,UAC9CF,EAAeN,UAAUC,IAAI,0BAC7BK,EAAeF,aAAa,gBAAiBL,EAASU,IACtDZ,EAASa,WAAWC,aAAaL,EAAgBT,EAASe,aAC1DN,EAAeO,YAAYhB,GAE3BS,EAAeD,iBAAiB,SAAS,WACyB,SAAjDC,EAAeQ,aAAa,iBAEzClB,EAAKmB,UAAUtB,GAEfG,EAAKoB,SAASvB,EAElB,GA3BA,CA4BF,GAAC,CAAAxB,IAAA,YAAAa,MAED,WAAY,IAAAmC,EAAA,KACV9B,KAAKC,OAAOI,SAAQ,SAACC,GACa,SAA5BA,EAAMF,QAAgB,OACxB0B,EAAKD,SAASvB,GAEdwB,EAAKF,UAAUtB,GAEjBA,EAAMU,gBAAgB,cACxB,GACF,GAAC,CAAAlC,IAAA,WAAAa,MAED,SAASW,GACFN,KAAKG,wBACRH,KAAK+B,oBAAoBzB,GAE3B,IAAMa,EAAiBb,EAAMK,cAAc,2BACrCC,EAAWN,EAAMK,cAAc,2BACrCQ,EAAeF,aAAa,gBAAiB,QAC7CE,EAAeF,aACb,aAAY,GAAAe,OACTb,EAAec,UAAS,wBAE7BrB,EAASI,gBAAgB,UACzBJ,EAASK,aAAa,WAAY,KAClCL,EAASsB,OACX,GAAC,CAAApD,IAAA,YAAAa,MAED,SAAUW,GACR,IAAMa,EAAiBb,EAAMK,cAAc,2BACrCC,EAAWN,EAAMK,cAAc,2BACrCQ,EAAeF,aAAa,gBAAiB,SAC7CE,EAAeF,aACb,aAAY,GAAAe,OACTb,EAAec,UAAS,wBAE7BrB,EAASK,aAAa,SAAU,cAClC,GAAC,CAAAnC,IAAA,sBAAAa,MAED,SAAoBwC,GAAc,IAAAC,EAAA,KAChCC,MAAMC,KAAKtC,KAAKC,QACbsC,QACC,SAACjC,GAAK,OACJA,EAAMK,cAAc,6BAA+BwB,GAGd,SAFrC7B,EACGK,cAAc,2BACdgB,aAAa,gBAA2B,IAE9CtB,SAAQ,SAACC,GAAK,OAAK8B,EAAKR,UAAUtB,EAAM,GAC7C,M,6EAAC,CArGmB,G","sources":["webpack://TNAFrontend/webpack/universalModuleDefinition","webpack://TNAFrontend/webpack/bootstrap","webpack://TNAFrontend/webpack/runtime/define property getters","webpack://TNAFrontend/webpack/runtime/hasOwnProperty shorthand","webpack://TNAFrontend/webpack/runtime/make namespace object","webpack://TNAFrontend/./src/nationalarchives/components/accordion/accordion.mjs"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"TNAFrontend\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"TNAFrontend\"] = factory();\n\telse\n\t\troot[\"TNAFrontend\"] = factory();\n})(self, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export class Accordion {\n polyfillRequired = null;\n\n constructor($module) {\n this.$module = $module;\n this.$items = $module && $module.querySelectorAll(\".tna-accordion__item\");\n if (!this.$module || !this.$items) {\n return;\n }\n\n this.allowMultipleItemsOpen =\n this.$module.dataset[\"multipleitems\"] === \"true\";\n\n this.$items.forEach(($item) => this.initItem($item));\n this.initState();\n }\n\n initItem($item) {\n const $heading = $item.querySelector(\".tna-accordion__heading\");\n const $content = $item.querySelector(\".tna-accordion__body\");\n\n if (!$heading || !$content) {\n return;\n }\n\n $item.classList.add(\"tna-accordion__details\");\n $item.classList.remove(\"tna-accordion__item\");\n\n $heading.removeAttribute(\"class\");\n\n $content.classList.add(\"tna-accordion__content\");\n $content.classList.remove(\"tna-accordion__body\");\n $content.setAttribute(\"hidden\", \"until-found\");\n $content.addEventListener(\"blur\", () => {\n $content.removeAttribute(\"tabindex\");\n });\n\n const $headingButton = document.createElement(\"button\");\n $headingButton.classList.add(\"tna-accordion__summary\");\n $headingButton.setAttribute(\"aria-controls\", $content.id);\n $heading.parentNode.insertBefore($headingButton, $heading.nextSibling);\n $headingButton.appendChild($heading);\n\n $headingButton.addEventListener(\"click\", () => {\n const isOpen = $headingButton.getAttribute(\"aria-expanded\") === \"true\";\n if (isOpen) {\n this.closeItem($item);\n } else {\n this.openItem($item);\n }\n });\n }\n\n initState() {\n this.$items.forEach(($item) => {\n if ($item.dataset[\"isopen\"] === \"true\") {\n this.openItem($item);\n } else {\n this.closeItem($item);\n }\n $item.removeAttribute(\"data-isopen\");\n });\n }\n\n openItem($item) {\n if (!this.allowMultipleItemsOpen) {\n this.closeAllItemsExcept($item);\n }\n const $headingButton = $item.querySelector(\".tna-accordion__summary\");\n const $content = $item.querySelector(\".tna-accordion__content\");\n $headingButton.setAttribute(\"aria-expanded\", \"true\");\n $headingButton.setAttribute(\n \"aria-label\",\n `${$headingButton.innerText}, Hide this section`,\n );\n $content.removeAttribute(\"hidden\");\n $content.setAttribute(\"tabindex\", \"0\");\n $content.focus();\n }\n\n closeItem($item) {\n const $headingButton = $item.querySelector(\".tna-accordion__summary\");\n const $content = $item.querySelector(\".tna-accordion__content\");\n $headingButton.setAttribute(\"aria-expanded\", \"false\");\n $headingButton.setAttribute(\n \"aria-label\",\n `${$headingButton.innerText}, Show this section`,\n );\n $content.setAttribute(\"hidden\", \"until-found\");\n }\n\n closeAllItemsExcept($excludeItem) {\n Array.from(this.$items)\n .filter(\n ($item) =>\n $item.querySelector(\".tna-accordion__summary\") !== $excludeItem &&\n $item\n .querySelector(\".tna-accordion__summary\")\n .getAttribute(\"aria-expanded\") === \"true\",\n )\n .forEach(($item) => this.closeItem($item));\n }\n}\n"],"names":["root","factory","exports","module","define","amd","self","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","Accordion","$module","_this","_classCallCheck","this","$items","querySelectorAll","allowMultipleItemsOpen","dataset","forEach","$item","initItem","initState","_this2","$heading","querySelector","$content","classList","add","remove","removeAttribute","setAttribute","addEventListener","$headingButton","document","createElement","id","parentNode","insertBefore","nextSibling","appendChild","getAttribute","closeItem","openItem","_this3","closeAllItemsExcept","concat","innerText","focus","$excludeItem","_this4","Array","from","filter"],"sourceRoot":""}
@@ -3,33 +3,101 @@ export class Accordion {
3
3
 
4
4
  constructor($module) {
5
5
  this.$module = $module;
6
- this.$firstDetailsElement =
7
- $module && $module.querySelector(".tna-accordion__details[name]");
8
- this.$detailsElements =
9
- $module &&
10
- this.$firstDetailsElement &&
11
- document.querySelectorAll(
12
- `.tna-accordion__details[name="${this.$firstDetailsElement.getAttribute("name")}"]`,
13
- );
14
- if (!this.$module || !this.$detailsElements) {
6
+ this.$items = $module && $module.querySelectorAll(".tna-accordion__item");
7
+ if (!this.$module || !this.$items) {
15
8
  return;
16
9
  }
17
10
 
18
- Array.from(this.$detailsElements).forEach(($detailsElement) => {
19
- $detailsElement.addEventListener("toggle", (e) => {
20
- const $thisDetailsElement = e.target;
21
- if ($thisDetailsElement.hasAttribute("open")) {
22
- Array.from(this.$detailsElements)
23
- .filter(
24
- ($eachDetailsElement) =>
25
- $eachDetailsElement !== $thisDetailsElement &&
26
- $eachDetailsElement.hasAttribute("open"),
27
- )
28
- .forEach(($eachDetailsElement) =>
29
- $eachDetailsElement.removeAttribute("open"),
30
- );
31
- }
32
- });
11
+ this.allowMultipleItemsOpen =
12
+ this.$module.dataset["multipleitems"] === "true";
13
+
14
+ this.$items.forEach(($item) => this.initItem($item));
15
+ this.initState();
16
+ }
17
+
18
+ initItem($item) {
19
+ const $heading = $item.querySelector(".tna-accordion__heading");
20
+ const $content = $item.querySelector(".tna-accordion__body");
21
+
22
+ if (!$heading || !$content) {
23
+ return;
24
+ }
25
+
26
+ $item.classList.add("tna-accordion__details");
27
+ $item.classList.remove("tna-accordion__item");
28
+
29
+ $heading.removeAttribute("class");
30
+
31
+ $content.classList.add("tna-accordion__content");
32
+ $content.classList.remove("tna-accordion__body");
33
+ $content.setAttribute("hidden", "until-found");
34
+ $content.addEventListener("blur", () => {
35
+ $content.removeAttribute("tabindex");
36
+ });
37
+
38
+ const $headingButton = document.createElement("button");
39
+ $headingButton.classList.add("tna-accordion__summary");
40
+ $headingButton.setAttribute("aria-controls", $content.id);
41
+ $heading.parentNode.insertBefore($headingButton, $heading.nextSibling);
42
+ $headingButton.appendChild($heading);
43
+
44
+ $headingButton.addEventListener("click", () => {
45
+ const isOpen = $headingButton.getAttribute("aria-expanded") === "true";
46
+ if (isOpen) {
47
+ this.closeItem($item);
48
+ } else {
49
+ this.openItem($item);
50
+ }
51
+ });
52
+ }
53
+
54
+ initState() {
55
+ this.$items.forEach(($item) => {
56
+ if ($item.dataset["isopen"] === "true") {
57
+ this.openItem($item);
58
+ } else {
59
+ this.closeItem($item);
60
+ }
61
+ $item.removeAttribute("data-isopen");
33
62
  });
34
63
  }
64
+
65
+ openItem($item) {
66
+ if (!this.allowMultipleItemsOpen) {
67
+ this.closeAllItemsExcept($item);
68
+ }
69
+ const $headingButton = $item.querySelector(".tna-accordion__summary");
70
+ const $content = $item.querySelector(".tna-accordion__content");
71
+ $headingButton.setAttribute("aria-expanded", "true");
72
+ $headingButton.setAttribute(
73
+ "aria-label",
74
+ `${$headingButton.innerText}, Hide this section`,
75
+ );
76
+ $content.removeAttribute("hidden");
77
+ $content.setAttribute("tabindex", "0");
78
+ $content.focus();
79
+ }
80
+
81
+ closeItem($item) {
82
+ const $headingButton = $item.querySelector(".tna-accordion__summary");
83
+ const $content = $item.querySelector(".tna-accordion__content");
84
+ $headingButton.setAttribute("aria-expanded", "false");
85
+ $headingButton.setAttribute(
86
+ "aria-label",
87
+ `${$headingButton.innerText}, Show this section`,
88
+ );
89
+ $content.setAttribute("hidden", "until-found");
90
+ }
91
+
92
+ closeAllItemsExcept($excludeItem) {
93
+ Array.from(this.$items)
94
+ .filter(
95
+ ($item) =>
96
+ $item.querySelector(".tna-accordion__summary") !== $excludeItem &&
97
+ $item
98
+ .querySelector(".tna-accordion__summary")
99
+ .getAttribute("aria-expanded") === "true",
100
+ )
101
+ .forEach(($item) => this.closeItem($item));
102
+ }
35
103
  }
@@ -6,36 +6,66 @@
6
6
  .tna-accordion {
7
7
  @include spacing.space-above;
8
8
 
9
- @include colour.colour-border("keyline", 1px, solid, top);
10
- // @include colour.thick-keyline-dark(top);
11
- // @include colour.thick-keyline-accent(top);
9
+ // NON INTERACTIVE
10
+ &__item {
11
+ @include spacing.space-above;
12
+ }
13
+
14
+ &__heading {
15
+ padding-top: spacing.space(1);
16
+ }
12
17
 
18
+ &__body {
19
+ padding-top: spacing.space(1);
20
+ }
21
+
22
+ // INTERACTIVE
13
23
  &__details {
14
24
  @include colour.colour-border("keyline", 1px, solid, bottom);
15
25
 
16
26
  position: relative;
17
27
  z-index: 1;
28
+
29
+ &:first-child {
30
+ @include colour.colour-border("keyline", 1px, solid, top);
31
+ // @include colour.thick-keyline-dark(top);
32
+ // @include colour.thick-keyline-accent(top);
33
+ }
18
34
  }
19
35
 
20
- &__details:has(&__summary:focus) {
36
+ &__details:has(&__summary:focus),
37
+ &__details:has(&__content:focus) {
21
38
  z-index: 2;
22
39
  }
23
40
 
24
41
  &__summary {
42
+ width: 100%;
43
+ margin: 0;
25
44
  padding: spacing.space(0.5) spacing.space(3) spacing.space(0.5)
26
45
  spacing.space(1);
27
46
 
47
+ display: block;
48
+
28
49
  position: relative;
29
50
 
30
- @include typography.main-font-weight-bold;
51
+ line-height: inherit;
52
+ text-align: left;
53
+
31
54
  list-style: none;
32
55
 
56
+ background: transparent;
57
+
58
+ border: none;
33
59
  border-radius: 0.1px;
34
60
 
35
61
  cursor: pointer;
36
62
 
37
- &::-webkit-details-marker {
38
- display: none;
63
+ @include colour.colour-font("font-dark");
64
+ @include typography.font-size(18);
65
+ @include typography.main-font(true);
66
+
67
+ * {
68
+ font-size: inherit;
39
69
  }
40
70
 
41
71
  &::before {
@@ -61,11 +91,25 @@
61
91
  border-color: colour.colour-var("font-dark") transparent;
62
92
  }
63
93
  }
94
+
95
+ &[aria-expanded="true"] {
96
+ &::before {
97
+ border-width: 0 0.5rem #{math.div(math.sqrt(3), 2)}rem 0.5rem;
98
+ }
99
+ }
64
100
  }
65
101
 
66
102
  &__content {
67
103
  padding: spacing.space(1);
68
104
 
105
+ position: relative;
106
+
107
+ border-radius: 0.1px;
108
+
109
+ &:focus {
110
+ z-index: 2;
111
+ }
112
+
69
113
  &:has(.tna-table-wrapper):has(.tna-table) {
70
114
  padding-right: 0;
71
115
  padding-left: 0;
@@ -95,12 +139,6 @@
95
139
  }
96
140
  }
97
141
 
98
- &__details[open] &__summary {
99
- &::before {
100
- border-width: 0 0.5rem #{math.div(math.sqrt(3), 2)}rem 0.5rem;
101
- }
102
- }
103
-
104
142
  @include colour.on-forced-colours {
105
143
  &__summary {
106
144
  &::before {
@@ -115,13 +153,13 @@
115
153
 
116
154
  border: none;
117
155
  }
118
- }
119
156
 
120
- &__details[open] &__summary {
121
- &::before {
122
- content: "\2191";
157
+ &[aria-expanded="true"] {
158
+ &::before {
159
+ content: "\2191";
123
160
 
124
- border: none;
161
+ border: none;
162
+ }
125
163
  }
126
164
  }
127
165
  }
@@ -3,8 +3,10 @@ import macroOptions from "./macro-options.json";
3
3
  import { fireEvent, expect } from "@storybook/test";
4
4
 
5
5
  const argTypes = {
6
+ itemHeadingLevel: { control: { type: "number", min: 1, max: 6 } },
6
7
  items: { control: "object" },
7
- group: { control: "text" },
8
+ id: { control: "text" },
9
+ openMultipleItems: { control: "boolean" },
8
10
  classes: { control: "text" },
9
11
  attributes: { control: "object" },
10
12
  };
@@ -20,13 +22,28 @@ export default {
20
22
  argTypes,
21
23
  };
22
24
 
23
- const Template = ({ items, group, classes, attributes }) =>
25
+ const Template = ({
26
+ itemHeadingLevel,
27
+ items,
28
+ id,
29
+ openMultipleItems,
30
+ classes,
31
+ attributes,
32
+ }) =>
24
33
  Accordion({
25
- params: { items, group, classes, attributes },
34
+ params: {
35
+ itemHeadingLevel,
36
+ items,
37
+ id,
38
+ openMultipleItems,
39
+ classes,
40
+ attributes,
41
+ },
26
42
  });
27
43
 
28
44
  export const Standard = Template.bind({});
29
45
  Standard.args = {
46
+ itemHeadingLevel: 2,
30
47
  items: [
31
48
  {
32
49
  title: "Alpha",
@@ -92,7 +109,7 @@ Standard.args = {
92
109
  </div>`,
93
110
  },
94
111
  ],
95
- group: "group-1",
112
+ id: "accordion-example-Standard",
96
113
  classes: "tna-accordion--demo",
97
114
  };
98
115
 
@@ -101,6 +118,7 @@ OpenItems.parameters = {
101
118
  chromatic: { disableSnapshot: true },
102
119
  };
103
120
  OpenItems.args = {
121
+ itemHeadingLevel: 2,
104
122
  items: [
105
123
  {
106
124
  title: "Alpha",
@@ -167,15 +185,16 @@ OpenItems.args = {
167
185
  </div>`,
168
186
  },
169
187
  ],
170
- group: "group-2",
188
+ id: "accordion-example-OpenItems",
171
189
  classes: "tna-accordion--demo",
172
190
  };
173
191
 
174
- export const NoGroup = Template.bind({});
175
- NoGroup.parameters = {
192
+ export const NotExclusive = Template.bind({});
193
+ NotExclusive.parameters = {
176
194
  chromatic: { disableSnapshot: true },
177
195
  };
178
- NoGroup.args = {
196
+ NotExclusive.args = {
197
+ itemHeadingLevel: 2,
179
198
  items: [
180
199
  {
181
200
  title: "Alpha",
@@ -241,6 +260,8 @@ NoGroup.args = {
241
260
  </div>`,
242
261
  },
243
262
  ],
263
+ id: "accordion-example-NotExclusive",
264
+ openMultipleItems: true,
244
265
  classes: "tna-accordion--demo",
245
266
  };
246
267
 
@@ -249,6 +270,7 @@ Test.parameters = {
249
270
  chromatic: { disableSnapshot: true },
250
271
  };
251
272
  Test.args = {
273
+ itemHeadingLevel: 2,
252
274
  items: [
253
275
  {
254
276
  title: "Alpha",
@@ -314,7 +336,7 @@ Test.args = {
314
336
  </div>`,
315
337
  },
316
338
  ],
317
- group: "group-1",
339
+ id: "accordion-example-Test",
318
340
  classes: "tna-accordion--demo",
319
341
  };
320
342
  Test.play = async ({ step }) => {