@nationalarchives/frontend 0.1.64 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/config/.babelrc.json +19 -0
  2. package/config/.eslintrc.js +25 -0
  3. package/config/.htmlvalidate.json +17 -0
  4. package/config/stylelint.config.js +240 -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 -18
  10. package/nationalarchives/all.scss +0 -2
  11. package/nationalarchives/components/_forms.scss +9 -0
  12. package/nationalarchives/components/_index.scss +2 -34
  13. package/nationalarchives/components/_presentation.scss +23 -0
  14. package/nationalarchives/components/accordion/accordion.css +1 -1
  15. package/nationalarchives/components/accordion/accordion.css.map +1 -1
  16. package/nationalarchives/components/accordion/accordion.js +1 -1
  17. package/nationalarchives/components/accordion/accordion.js.map +1 -1
  18. package/nationalarchives/components/accordion/accordion.mjs +92 -24
  19. package/nationalarchives/components/accordion/accordion.scss +56 -18
  20. package/nationalarchives/components/accordion/fixtures.json +34 -7
  21. package/nationalarchives/components/accordion/macro-options.json +14 -2
  22. package/nationalarchives/components/accordion/template.njk +7 -5
  23. package/nationalarchives/components/breadcrumbs/breadcrumbs.css +1 -1
  24. package/nationalarchives/components/breadcrumbs/breadcrumbs.css.map +1 -1
  25. package/nationalarchives/components/breadcrumbs/breadcrumbs.scss +0 -10
  26. package/nationalarchives/components/breadcrumbs/template.njk +1 -1
  27. package/nationalarchives/components/button/button.css +1 -1
  28. package/nationalarchives/components/button/button.css.map +1 -1
  29. package/nationalarchives/components/button/button.scss +32 -10
  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 +1 -1
  33. package/nationalarchives/components/card/card.css.map +1 -1
  34. package/nationalarchives/components/card/template.njk +5 -5
  35. package/nationalarchives/components/checkboxes/checkboxes.css +1 -1
  36. package/nationalarchives/components/checkboxes/checkboxes.css.map +1 -1
  37. package/nationalarchives/components/checkboxes/checkboxes.njk +1 -1
  38. package/nationalarchives/components/checkboxes/checkboxes.scss +1 -1
  39. package/nationalarchives/components/checkboxes/macro-options.json +6 -0
  40. package/nationalarchives/components/checkboxes/template.njk +1 -1
  41. package/nationalarchives/components/compound-filters/compound-filters.css.map +1 -1
  42. package/nationalarchives/components/compound-filters/template.njk +1 -1
  43. package/nationalarchives/components/cookie-banner/cookie-banner.css +1 -1
  44. package/nationalarchives/components/cookie-banner/cookie-banner.css.map +1 -1
  45. package/nationalarchives/components/cookie-banner/cookie-banner.scss +0 -2
  46. package/nationalarchives/components/cookie-banner/template.njk +1 -2
  47. package/nationalarchives/components/date-input/date-input.css +1 -1
  48. package/nationalarchives/components/date-input/date-input.css.map +1 -1
  49. package/nationalarchives/components/date-input/date-input.scss +2 -2
  50. package/nationalarchives/components/date-input/fixtures.json +5 -5
  51. package/nationalarchives/components/date-input/template.njk +2 -2
  52. package/nationalarchives/components/date-search/date-search.css +1 -1
  53. package/nationalarchives/components/date-search/date-search.css.map +1 -1
  54. package/nationalarchives/components/date-search/date-search.njk +2 -2
  55. package/nationalarchives/components/date-search/date-search.scss +2 -2
  56. package/nationalarchives/components/date-search/template.njk +1 -1
  57. package/nationalarchives/components/details/details.css.map +1 -1
  58. package/nationalarchives/components/details/template.njk +1 -1
  59. package/nationalarchives/components/error-summary/error-summary.css +1 -1
  60. package/nationalarchives/components/error-summary/error-summary.css.map +1 -1
  61. package/nationalarchives/components/error-summary/error-summary.js +1 -1
  62. package/nationalarchives/components/error-summary/error-summary.js.map +1 -1
  63. package/nationalarchives/components/error-summary/error-summary.mjs +1 -1
  64. package/nationalarchives/components/error-summary/error-summary.scss +3 -4
  65. package/nationalarchives/components/error-summary/template.njk +1 -1
  66. package/nationalarchives/components/files-list/_index.scss +1 -0
  67. package/nationalarchives/components/files-list/files-list.css +1 -0
  68. package/nationalarchives/components/files-list/files-list.css.map +1 -0
  69. package/nationalarchives/components/files-list/files-list.scss +80 -0
  70. package/nationalarchives/components/files-list/fixtures.json +71 -0
  71. package/nationalarchives/components/{sensitive-image → files-list}/macro-options.json +20 -20
  72. package/nationalarchives/components/files-list/macro.njk +3 -0
  73. package/nationalarchives/components/files-list/template.njk +33 -0
  74. package/nationalarchives/components/footer/footer.css +1 -1
  75. package/nationalarchives/components/footer/footer.css.map +1 -1
  76. package/nationalarchives/components/footer/footer.scss +0 -2
  77. package/nationalarchives/components/footer/macro-options.json +0 -6
  78. package/nationalarchives/components/footer/template.njk +1 -1
  79. package/nationalarchives/components/gallery/fixtures.json +35 -1
  80. package/nationalarchives/components/gallery/gallery.css +1 -1
  81. package/nationalarchives/components/gallery/gallery.css.map +1 -1
  82. package/nationalarchives/components/gallery/gallery.js +1 -1
  83. package/nationalarchives/components/gallery/gallery.js.map +1 -1
  84. package/nationalarchives/components/gallery/gallery.mjs +192 -53
  85. package/nationalarchives/components/gallery/gallery.scss +317 -56
  86. package/nationalarchives/components/gallery/macro-options.json +34 -49
  87. package/nationalarchives/components/gallery/template.njk +74 -33
  88. package/nationalarchives/components/global-header/global-header.css +1 -1
  89. package/nationalarchives/components/global-header/global-header.css.map +1 -1
  90. package/nationalarchives/components/global-header/global-header.scss +0 -2
  91. package/nationalarchives/components/global-header/template.njk +1 -1
  92. package/nationalarchives/components/header/header.css +1 -1
  93. package/nationalarchives/components/header/header.css.map +1 -1
  94. package/nationalarchives/components/header/header.scss +3 -5
  95. package/nationalarchives/components/header/template.njk +1 -1
  96. package/nationalarchives/components/hero/hero.css +1 -1
  97. package/nationalarchives/components/hero/hero.css.map +1 -1
  98. package/nationalarchives/components/hero/hero.scss +0 -24
  99. package/nationalarchives/components/hero/template.njk +1 -1
  100. package/nationalarchives/components/index-grid/index-grid.css +1 -1
  101. package/nationalarchives/components/index-grid/index-grid.css.map +1 -1
  102. package/nationalarchives/components/index-grid/index-grid.scss +1 -1
  103. package/nationalarchives/components/index-grid/template.njk +3 -3
  104. package/nationalarchives/components/pagination/pagination.css +1 -1
  105. package/nationalarchives/components/pagination/pagination.css.map +1 -1
  106. package/nationalarchives/components/pagination/pagination.scss +1 -1
  107. package/nationalarchives/components/pagination/template.njk +1 -1
  108. package/nationalarchives/components/phase-banner/phase-banner.css +1 -1
  109. package/nationalarchives/components/phase-banner/phase-banner.css.map +1 -1
  110. package/nationalarchives/components/phase-banner/phase-banner.scss +0 -2
  111. package/nationalarchives/components/phase-banner/template.njk +1 -1
  112. package/nationalarchives/components/picture/picture.css.map +1 -1
  113. package/nationalarchives/components/picture/picture.js +1 -1
  114. package/nationalarchives/components/picture/picture.js.map +1 -1
  115. package/nationalarchives/components/picture/picture.mjs +2 -2
  116. package/nationalarchives/components/picture/template.njk +1 -1
  117. package/nationalarchives/components/quick-filters/quick-filters.css +1 -1
  118. package/nationalarchives/components/quick-filters/quick-filters.css.map +1 -1
  119. package/nationalarchives/components/quick-filters/template.njk +1 -1
  120. package/nationalarchives/components/radios/radios.css +1 -1
  121. package/nationalarchives/components/radios/radios.css.map +1 -1
  122. package/nationalarchives/components/radios/radios.njk +1 -1
  123. package/nationalarchives/components/radios/radios.scss +1 -1
  124. package/nationalarchives/components/radios/template.njk +1 -1
  125. package/nationalarchives/components/records-list/_index.scss +1 -0
  126. package/nationalarchives/components/records-list/fixtures.json +42 -0
  127. package/nationalarchives/components/records-list/macro.njk +3 -0
  128. package/nationalarchives/components/records-list/records-list.css +1 -0
  129. package/nationalarchives/components/records-list/records-list.css.map +1 -0
  130. package/nationalarchives/components/{featured-records/featured-records.scss → records-list/records-list.scss} +2 -2
  131. package/nationalarchives/components/records-list/template.njk +21 -0
  132. package/nationalarchives/components/search-field/search-field.css +1 -1
  133. package/nationalarchives/components/search-field/search-field.css.map +1 -1
  134. package/nationalarchives/components/search-field/search-field.scss +3 -2
  135. package/nationalarchives/components/search-field/template.njk +2 -2
  136. package/nationalarchives/components/select/select.css +1 -1
  137. package/nationalarchives/components/select/select.css.map +1 -1
  138. package/nationalarchives/components/select/select.scss +2 -2
  139. package/nationalarchives/components/select/template.njk +2 -2
  140. package/nationalarchives/components/sidebar/fixtures.json +18 -8
  141. package/nationalarchives/components/sidebar/macro-options.json +9 -2
  142. package/nationalarchives/components/sidebar/sidebar.css +1 -1
  143. package/nationalarchives/components/sidebar/sidebar.css.map +1 -1
  144. package/nationalarchives/components/sidebar/template.njk +12 -3
  145. package/nationalarchives/components/skip-link/skip-link.css +1 -1
  146. package/nationalarchives/components/skip-link/skip-link.css.map +1 -1
  147. package/nationalarchives/components/skip-link/skip-link.scss +0 -2
  148. package/nationalarchives/components/skip-link/template.njk +1 -1
  149. package/nationalarchives/components/tabs/tabs.css +1 -1
  150. package/nationalarchives/components/tabs/tabs.css.map +1 -1
  151. package/nationalarchives/components/tabs/tabs.scss +0 -12
  152. package/nationalarchives/components/tabs/template.njk +1 -1
  153. package/nationalarchives/components/text-input/template.njk +1 -1
  154. package/nationalarchives/components/text-input/text-input.css +1 -1
  155. package/nationalarchives/components/text-input/text-input.css.map +1 -1
  156. package/nationalarchives/components/text-input/text-input.njk +2 -2
  157. package/nationalarchives/components/text-input/text-input.scss +2 -2
  158. package/nationalarchives/components/textarea/template.njk +2 -2
  159. package/nationalarchives/components/textarea/textarea.css +1 -1
  160. package/nationalarchives/components/textarea/textarea.css.map +1 -1
  161. package/nationalarchives/components/textarea/textarea.scss +2 -2
  162. package/nationalarchives/components/warning/template.njk +1 -1
  163. package/nationalarchives/components/warning/warning.css +1 -1
  164. package/nationalarchives/components/warning/warning.css.map +1 -1
  165. package/nationalarchives/components/warning/warning.scss +2 -0
  166. package/nationalarchives/global-header-package.css +1 -1
  167. package/nationalarchives/global-header-package.css.map +1 -1
  168. package/nationalarchives/global-header-package.scss +1 -1
  169. package/nationalarchives/print.css +6 -0
  170. package/nationalarchives/print.css.map +1 -0
  171. package/nationalarchives/print.scss +44 -0
  172. package/nationalarchives/prototype-kit.css +1 -3
  173. package/nationalarchives/prototype-kit.css.map +1 -1
  174. package/nationalarchives/templates/layouts/_generic.njk +6 -6
  175. package/nationalarchives/tools/_a11y.scss +4 -0
  176. package/nationalarchives/tools/_colour.scss +75 -79
  177. package/nationalarchives/tools/_media.scss +0 -10
  178. package/nationalarchives/utilities/_columns.scss +1 -1
  179. package/nationalarchives/utilities/_index.scss +1 -0
  180. package/nationalarchives/utilities/_reset.scss +2 -8
  181. package/nationalarchives/utilities/{_colour.scss → colour/_index.scss} +2 -2
  182. package/nationalarchives/utilities/{_forms.scss → forms/_index.scss} +6 -6
  183. package/nationalarchives/utilities/grid/macro.njk +3 -0
  184. package/nationalarchives/{components → utilities}/grid/template.njk +1 -1
  185. package/nationalarchives/utilities/{_lists.scss → lists/_index.scss} +16 -7
  186. package/nationalarchives/utilities/{_overrides.scss → overrides/_index.scss} +8 -2
  187. package/nationalarchives/utilities/{_tables.scss → tables/_index.scss} +5 -5
  188. package/nationalarchives/utilities/{_typography.scss → typography/_index.scss} +8 -5
  189. package/nationalarchives/variables/_colour.scss +12 -5
  190. package/package.json +1 -1
  191. package/nationalarchives/components/accordion/accordion.stories.js +0 -410
  192. package/nationalarchives/components/breadcrumbs/breadcrumbs.stories.js +0 -128
  193. package/nationalarchives/components/button/button-group.stories.js +0 -114
  194. package/nationalarchives/components/button/button.stories.js +0 -204
  195. package/nationalarchives/components/card/card.stories.js +0 -402
  196. package/nationalarchives/components/checkboxes/checkboxes.stories.js +0 -241
  197. package/nationalarchives/components/compound-filters/compound-filters.stories.js +0 -61
  198. package/nationalarchives/components/cookie-banner/cookie-banner.stories.js +0 -250
  199. package/nationalarchives/components/date-input/date-input.stories.js +0 -119
  200. package/nationalarchives/components/date-search/date-search.stories.js +0 -124
  201. package/nationalarchives/components/details/details.stories.js +0 -33
  202. package/nationalarchives/components/error-summary/error-summary.stories.js +0 -59
  203. package/nationalarchives/components/featured-records/_index.scss +0 -1
  204. package/nationalarchives/components/featured-records/featured-records.css +0 -1
  205. package/nationalarchives/components/featured-records/featured-records.css.map +0 -1
  206. package/nationalarchives/components/featured-records/featured-records.stories.js +0 -50
  207. package/nationalarchives/components/featured-records/fixtures.json +0 -42
  208. package/nationalarchives/components/featured-records/macro.njk +0 -3
  209. package/nationalarchives/components/featured-records/template.njk +0 -21
  210. package/nationalarchives/components/footer/footer.stories.js +0 -241
  211. package/nationalarchives/components/gallery/gallery.stories.js +0 -74
  212. package/nationalarchives/components/global-header/global-header.stories.js +0 -364
  213. package/nationalarchives/components/grid/_index.scss +0 -1
  214. package/nationalarchives/components/grid/grid.css +0 -1
  215. package/nationalarchives/components/grid/grid.css.map +0 -1
  216. package/nationalarchives/components/grid/grid.stories.js +0 -279
  217. package/nationalarchives/components/grid/macro.njk +0 -3
  218. package/nationalarchives/components/header/header.stories.js +0 -239
  219. package/nationalarchives/components/hero/hero.stories.js +0 -326
  220. package/nationalarchives/components/index-grid/index-grid.stories.js +0 -128
  221. package/nationalarchives/components/pagination/pagination.stories.js +0 -532
  222. package/nationalarchives/components/phase-banner/phase-banner.stories.js +0 -39
  223. package/nationalarchives/components/picture/picture.stories.js +0 -75
  224. package/nationalarchives/components/quick-filters/quick-filters.stories.js +0 -76
  225. package/nationalarchives/components/radios/radios.stories.js +0 -244
  226. package/nationalarchives/components/search-field/search-field.stories.js +0 -88
  227. package/nationalarchives/components/search-filters/_index.scss +0 -1
  228. package/nationalarchives/components/search-filters/fixtures.json +0 -16
  229. package/nationalarchives/components/search-filters/macro-options.json +0 -39
  230. package/nationalarchives/components/search-filters/macro.njk +0 -3
  231. package/nationalarchives/components/search-filters/search-filters.css +0 -1
  232. package/nationalarchives/components/search-filters/search-filters.css.map +0 -1
  233. package/nationalarchives/components/search-filters/search-filters.js +0 -2
  234. package/nationalarchives/components/search-filters/search-filters.js.map +0 -1
  235. package/nationalarchives/components/search-filters/search-filters.mjs +0 -67
  236. package/nationalarchives/components/search-filters/search-filters.scss +0 -198
  237. package/nationalarchives/components/search-filters/search-filters.stories.js +0 -207
  238. package/nationalarchives/components/search-filters/template.njk +0 -108
  239. package/nationalarchives/components/select/select.stories.js +0 -197
  240. package/nationalarchives/components/sensitive-image/_index.scss +0 -1
  241. package/nationalarchives/components/sensitive-image/fixtures.json +0 -51
  242. package/nationalarchives/components/sensitive-image/macro.njk +0 -3
  243. package/nationalarchives/components/sensitive-image/sensitive-image.css +0 -1
  244. package/nationalarchives/components/sensitive-image/sensitive-image.css.map +0 -1
  245. package/nationalarchives/components/sensitive-image/sensitive-image.js +0 -2
  246. package/nationalarchives/components/sensitive-image/sensitive-image.js.map +0 -1
  247. package/nationalarchives/components/sensitive-image/sensitive-image.mjs +0 -23
  248. package/nationalarchives/components/sensitive-image/sensitive-image.scss +0 -85
  249. package/nationalarchives/components/sensitive-image/sensitive-image.stories.js +0 -86
  250. package/nationalarchives/components/sensitive-image/template.njk +0 -11
  251. package/nationalarchives/components/sidebar/sidebar.stories.js +0 -224
  252. package/nationalarchives/components/skip-link/skip-link.stories.js +0 -76
  253. package/nationalarchives/components/tabs/tabs.stories.js +0 -300
  254. package/nationalarchives/components/text-input/text-input.stories.js +0 -188
  255. package/nationalarchives/components/textarea/textarea.stories.js +0 -130
  256. package/nationalarchives/components/warning/warning.stories.js +0 -39
  257. package/nationalarchives/stories/intro.mdx +0 -13
  258. package/nationalarchives/stories/utilities/colour-schemes/colour-combinations.stories.js +0 -293
  259. package/nationalarchives/stories/utilities/colour-schemes/colour-themes.stories.js +0 -1535
  260. package/nationalarchives/stories/utilities/forms/forms.mdx +0 -117
  261. package/nationalarchives/stories/utilities/lists/lists.stories.js +0 -212
  262. package/nationalarchives/stories/utilities/overrides/overrides.stories.js +0 -42
  263. package/nationalarchives/stories/utilities/tables/tables.stories.js +0 -47
  264. package/nationalarchives/stories/utilities/typography/heading-groups.stories.js +0 -94
  265. package/nationalarchives/stories/utilities/typography/headings.stories.js +0 -33
  266. package/nationalarchives/stories/utilities/typography/typography.stories.js +0 -91
  267. package/nationalarchives/components/{featured-records → records-list}/macro-options.json +0 -0
  268. package/nationalarchives/{components/grid/grid.scss → utilities/grid/_index.scss} +3 -3
  269. /package/nationalarchives/{components → utilities}/grid/fixtures.json +0 -0
  270. /package/nationalarchives/{components → utilities}/grid/macro-options.json +0 -0
@@ -1,116 +1,377 @@
1
+ @use "../../tools/a11y";
1
2
  @use "../../tools/colour";
2
3
  @use "../../tools/media";
3
4
  @use "../../tools/spacing";
5
+ @use "../../tools/typography";
4
6
 
5
7
  .tna-gallery {
6
- @include colour.contrast;
8
+ min-height: 100dvh;
9
+ max-height: 200dvh;
7
10
 
8
- padding-bottom: spacing.space(2);
11
+ display: grid;
12
+ grid-template: min-content min-content 1fr / 2fr 1fr;
13
+ gap: 0 spacing.space(1);
14
+
15
+ @include colour.tint;
16
+
17
+ border-radius: 0.1px;
18
+
19
+ &:active {
20
+ @include a11y.no-active-outline;
21
+ }
9
22
 
10
23
  &__header {
11
- padding-top: spacing.space(2);
24
+ padding: spacing.space(1);
25
+
26
+ grid-column: 1 / 3;
27
+ grid-row: 1;
28
+
29
+ display: flex;
30
+ gap: spacing.space(2);
31
+ }
32
+
33
+ &__header-inner {
34
+ flex: 1;
35
+ }
36
+
37
+ &__options {
38
+ margin-top: 0;
39
+
40
+ align-items: flex-start;
41
+
42
+ justify-content: flex-end;
43
+
44
+ flex: 1;
45
+
46
+ .tna-button {
47
+ white-space: nowrap;
48
+ }
49
+ }
50
+
51
+ &__items,
52
+ &__navigation-buttons {
53
+ grid-column: 1 / 3;
54
+ grid-row: 2;
12
55
  }
13
56
 
14
57
  &__items {
15
- width: 100%;
58
+ position: relative;
59
+ z-index: 1;
16
60
 
17
- display: flex;
18
- flex-direction: column;
19
- align-items: center;
20
- gap: spacing.space(3);
61
+ border-radius: 0.1px;
21
62
 
22
- &:focus {
23
- outline: none !important;
63
+ .tna-template--clicked &:focus {
64
+ outline: none;
24
65
  }
25
66
  }
26
67
 
27
68
  &__item {
28
- margin: 0;
69
+ display: flex;
70
+ flex-direction: column;
71
+ align-items: stretch;
72
+ justify-content: center;
73
+ }
29
74
 
30
- &-index {
31
- padding-bottom: spacing.space(1);
75
+ &__item-header {
76
+ padding: spacing.space(1);
32
77
 
33
- text-align: center;
34
- }
78
+ line-height: 1;
79
+ text-align: center;
80
+
81
+ @include typography.main-font-weight-bold;
82
+ @include typography.font-size(16);
83
+ }
84
+
85
+ &__item-figure {
86
+ display: flex;
87
+ flex-direction: column;
88
+ align-items: stretch;
89
+ gap: spacing.space(1);
90
+ }
91
+
92
+ &__item-figure-inner {
93
+ width: 100%;
94
+ max-height: 50vh;
95
+
96
+ position: relative;
97
+
98
+ @include colour.contrast;
99
+ }
100
+
101
+ &__item-image {
102
+ margin: 0 auto;
103
+ }
104
+
105
+ &__item-description {
106
+ margin: 0 spacing.space(1) spacing.space(1);
107
+ padding: spacing.space(0.5) spacing.space(1);
108
+
109
+ align-self: flex-start;
110
+
111
+ @include colour.thick-keyline-dark(left);
112
+ }
113
+
114
+ &__navigation-buttons {
115
+ width: 100%;
116
+ max-height: 50vh;
117
+ aspect-ratio: 3 / 2;
118
+
119
+ position: relative;
120
+ top: 3rem;
121
+ z-index: 2;
35
122
 
36
- &-figure {
123
+ pointer-events: none;
124
+
125
+ .tna-template--touched & {
126
+ display: none;
37
127
  }
128
+ }
129
+
130
+ &__navigation-button {
131
+ width: 25%;
132
+ padding: 0;
133
+
134
+ position: absolute;
135
+ top: 0;
136
+ bottom: 0;
137
+
138
+ border: none;
139
+
140
+ opacity: 0;
38
141
 
39
- &-image {
40
- height: auto;
142
+ cursor: pointer;
143
+ pointer-events: auto;
144
+
145
+ @include colour.colour-font("base-dark");
146
+
147
+ @include colour.tint;
148
+
149
+ svg {
150
+ height: 5vw;
41
151
  margin: 0 auto;
152
+
153
+ display: block;
154
+
155
+ fill: currentColor;
42
156
  }
43
157
 
44
- &-description {
45
- margin-top: spacing.space(1);
46
- padding: spacing.space(0.5) 0 spacing.space(0.5) spacing.space(1);
158
+ &:hover,
159
+ &:focus {
160
+ opacity: 1;
161
+ }
162
+ }
163
+
164
+ &__navigation-prev {
165
+ padding-right: 10%;
166
+
167
+ left: 0;
168
+
169
+ background: linear-gradient(
170
+ 90deg,
171
+ var(--background) 15%,
172
+ rgb(0 0 0 / 0%) 100%
173
+ );
174
+ }
175
+
176
+ &__navigation-next {
177
+ padding-left: 10%;
178
+
179
+ right: 0;
180
+
181
+ background: linear-gradient(
182
+ 270deg,
183
+ var(--background) 15%,
184
+ rgb(0 0 0 / 0%) 100%
185
+ );
186
+ }
187
+
188
+ &__navigation {
189
+ padding: spacing.space(1);
190
+
191
+ grid-column: 1 / 3;
192
+ grid-row: 3;
193
+
194
+ display: grid;
195
+ grid-template-columns: repeat(6, 1fr);
196
+ grid-auto-rows: min-content;
197
+ gap: spacing.space(1);
198
+
199
+ overflow: auto;
200
+ }
201
+
202
+ &__navigation-item {
203
+ min-width: 0;
204
+ min-height: 0;
205
+ aspect-ratio: 1;
47
206
 
48
- @include colour.colour-border("keyline-dark", 4px, solid, left);
207
+ position: relative;
208
+
209
+ border: none;
210
+
211
+ cursor: pointer;
212
+
213
+ @include colour.contrast;
214
+
215
+ &:hover {
216
+ &::after {
217
+ content: "";
218
+
219
+ position: absolute;
220
+ inset: 0;
221
+ z-index: 2;
222
+
223
+ @include colour.thick-keyline-accent;
224
+ }
49
225
  }
50
226
 
51
- &-tabs {
52
- @include media.on-smaller-than-large {
53
- padding-top: spacing.space(2);
227
+ &[aria-selected="true"] {
228
+ @include colour.accent;
229
+
230
+ &::after {
231
+ content: "";
232
+
233
+ position: absolute;
234
+ inset: 0;
235
+ z-index: 2;
236
+
237
+ @include colour.thick-keyline-brand("", "black");
54
238
  }
55
239
  }
56
240
  }
57
241
 
58
- &__item + &__item {
59
- @include colour.colour-border("keyline", 1px, solid, top);
242
+ &__navigation-item-image {
243
+ width: 100%;
244
+ height: 100%;
245
+
246
+ position: absolute;
247
+ inset: 0;
248
+ object-fit: cover;
60
249
  }
61
250
 
62
- &__toggle-wrapper {
63
- text-align: center;
251
+ &__navigation-item-label {
252
+ padding: spacing.space(0.25) spacing.space(0.75);
253
+
254
+ display: inline-block;
255
+
256
+ position: absolute;
257
+ right: 0;
258
+ bottom: 0;
259
+ z-index: 4;
260
+
261
+ @include colour.colour-font("font-dark");
262
+ @include typography.font-size(36);
263
+ @include typography.main-font-weight-bold;
264
+ text-transform: capitalize;
265
+
266
+ @include colour.colour-background("background");
64
267
  }
65
268
 
66
- &__toggle {
67
- margin-top: spacing.space(2);
269
+ &--js &__item-figure-inner {
270
+ aspect-ratio: 3 / 2;
68
271
  }
69
272
 
70
- &--touchable {
71
- .tna-gallery__items {
72
- flex-flow: row nowrap;
273
+ &--js &__item-image {
274
+ width: 100%;
275
+ height: 100%;
73
276
 
74
- gap: spacing.space(6);
277
+ position: absolute;
278
+ inset: 0;
279
+ z-index: 1;
280
+ object-fit: contain;
281
+ }
75
282
 
76
- overflow-x: scroll;
77
- scroll-snap-type: x mandatory;
283
+ @include media.on-medium {
284
+ &__navigation {
285
+ grid-template-columns: repeat(4, 1fr);
78
286
  }
79
287
 
80
- .tna-gallery__item {
81
- width: 100%;
288
+ &__navigation-item-label {
289
+ @include typography.font-size(30);
290
+ }
291
+ }
82
292
 
83
- scroll-snap-align: center;
84
- flex: none;
293
+ @include media.on-mobile {
294
+ &__navigation {
295
+ grid-template-columns: repeat(3, 1fr);
85
296
  }
297
+ }
86
298
 
87
- &.tna-gallery--collapsed {
88
- .tna-gallery__items {
89
- overflow: auto;
90
- }
299
+ @include media.on-tiny {
300
+ &__options {
301
+ align-items: flex-end;
302
+ justify-content: flex-start;
91
303
  }
304
+
305
+ &__navigation-item-label {
306
+ @include typography.font-size(24);
307
+ }
308
+ }
309
+
310
+ &--fullscreen {
311
+ max-height: 100dvh;
92
312
  }
93
313
 
94
- &--collapsed &__item + &__item,
95
- &--collapsed &__item:first-child &__item-description,
96
- &--collapsed &__item:first-child &__item-tabs {
314
+ &--fullscreen &__header-inner {
97
315
  display: none;
98
316
  }
99
317
 
100
- &--collapsed &__item-figure {
101
- width: 100%;
318
+ &--fullscreen &__item-description {
319
+ max-height: 4.5rem;
320
+
321
+ overflow: auto;
102
322
  }
103
323
 
104
- @include colour.on-high-contrast {
105
- &__items {
324
+ // @media (display-mode: fullscreen) and (aspect-ratio >= 1/1), (display-mode: fullscreen) and (orientation: landscape) {
325
+ @media (aspect-ratio >= 1/1) {
326
+ &--fullscreen &__header {
327
+ grid-column: 2 / 3;
328
+ // padding-bottom: spacing.space(0.5);
106
329
  }
107
330
 
108
- &__item {
109
- &-index {
331
+ &--fullscreen &__options {
332
+ .tna-button[value="show-index"] {
333
+ display: none;
110
334
  }
335
+ }
111
336
 
112
- &-description {
113
- }
337
+ &--fullscreen &__items,
338
+ &--fullscreen &__navigation-buttons {
339
+ grid-column: 1 / 2;
340
+ grid-row: 1 / 4;
341
+ }
342
+
343
+ &--fullscreen &__item {
344
+ height: 100%;
345
+ }
346
+
347
+ &--fullscreen &__item-header {
348
+ // padding-top: spacing.space(0.5);
349
+ // padding-bottom: spacing.space(0.5);
350
+ }
351
+
352
+ &--fullscreen &__item-figure {
353
+ flex: 1;
354
+ }
355
+
356
+ &--fullscreen &__item-figure-inner,
357
+ &--fullscreen &__navigation-buttons {
358
+ max-height: none;
359
+ flex: 1;
360
+
361
+ aspect-ratio: auto;
362
+ }
363
+
364
+ &--fullscreen &__navigation {
365
+ // padding-top: spacing.space(0.5);
366
+ padding-top: 0;
367
+ padding-left: 0;
368
+
369
+ grid-column: 2 / 3;
370
+ grid-row: 2 / 4;
371
+
372
+ // grid-template-columns: repeat(3, minmax(8rem, 1fr));
373
+ grid-template-columns: repeat(3, 1fr);
374
+ gap: spacing.space(0.5);
114
375
  }
115
376
  }
116
377
  }
@@ -1,29 +1,34 @@
1
1
  [
2
2
  {
3
- "name": "heading",
4
- "type": "object",
3
+ "name": "title",
4
+ "type": "string",
5
5
  "required": true,
6
- "description": "",
7
- "params": [
8
- {
9
- "name": "title",
10
- "type": "string",
11
- "required": true,
12
- "description": ""
13
- },
14
- {
15
- "name": "level",
16
- "type": "number",
17
- "required": true,
18
- "description": ""
19
- },
20
- {
21
- "name": "size",
22
- "type": "string",
23
- "required": false,
24
- "description": ""
25
- }
26
- ]
6
+ "description": "The main title of the gallery."
7
+ },
8
+ {
9
+ "name": "headingLevel",
10
+ "type": "number",
11
+ "required": true,
12
+ "description": "The heading level which represents an element from `<h1>` through to `<h6>`."
13
+ },
14
+ {
15
+ "name": "headingSize",
16
+ "type": "string",
17
+ "required": false,
18
+ "default": "m",
19
+ "description": "The physical size of the gallery title (`xl`, `l`, `m` or `s`)."
20
+ },
21
+ {
22
+ "name": "body",
23
+ "type": "string",
24
+ "required": false,
25
+ "description": "The HTML for the main body of the gallery. Not displayed if `text` is set."
26
+ },
27
+ {
28
+ "name": "text",
29
+ "type": "string",
30
+ "required": false,
31
+ "description": "The text for the gallery which will be inserted into a `<p>` element. Overwrites `body` if it is set."
27
32
  },
28
33
  {
29
34
  "name": "items",
@@ -60,35 +65,15 @@
60
65
  "type": "string",
61
66
  "required": false,
62
67
  "description": ""
63
- },
64
- {
65
- "name": "tabs",
66
- "type": "array",
67
- "required": true,
68
- "description": "",
69
- "params": [
70
- {
71
- "name": "id",
72
- "type": "string",
73
- "required": true,
74
- "description": ""
75
- },
76
- {
77
- "name": "title",
78
- "type": "string",
79
- "required": true,
80
- "description": ""
81
- },
82
- {
83
- "name": "body",
84
- "type": "string",
85
- "required": true,
86
- "description": ""
87
- }
88
- ]
89
68
  }
90
69
  ]
91
70
  },
71
+ {
72
+ "name": "id",
73
+ "type": "string",
74
+ "required": true,
75
+ "description": "A unique ID for the gallery."
76
+ },
92
77
  {
93
78
  "name": "classes",
94
79
  "type": "string",
@@ -1,46 +1,87 @@
1
- {% from "nationalarchives/components/tabs/macro.njk" import tnaTabs %}
1
+ {% from "nationalarchives/components/button/macro.njk" import tnaButton %}
2
2
 
3
3
  {%- set containerClasses = [params.classes] if params.classes else [] -%}
4
4
  {%- set classes = containerClasses | join(' ') -%}
5
- <{{ 'section' if params.heading else 'div' }} class="tna-gallery{% if classes %} {{ classes }}{% endif %}" data-module="tna-gallery"{% for attribute, value in params.attributes %} {{ attribute }}="{{ value }}"{% endfor %}>
6
- {%- if params.heading -%}
7
- <div class="tna-container">
8
- <div class="tna-column tna-column--full tna-gallery__header">
9
- <h{{ params.heading.level }} class="tna-heading-{{ params.heading.size or 'l' }}">
10
- {{ params.heading.title }}
11
- </h{{ params.heading.level }}>
5
+ <section class="tna-gallery{% if classes %} {{ classes }}{% endif %}" data-module="tna-gallery"{% for attribute, value in params.attributes %} {{ attribute }}{% if value !== '' %}="{{ value }}"{% endif %}{% endfor %}>
6
+ <div class="tna-gallery__header">
7
+ <div class="tna-gallery__header-inner">
8
+ <h{{ params.headingLevel }} class="tna-heading-{{ params.headingSize or 'm' }}">
9
+ {{ params.title }}
10
+ </h{{ params.headingLevel }}>
11
+ {%- if params.text %}
12
+ <p>{{ params.text }}</p>
13
+ {%- else %}
14
+ {{ params.body | safe }}
15
+ {%- endif %}
16
+ </div>
17
+ <div class="tna-gallery__options tna-button-group tna-button-group--small" hidden>
18
+ {{ tnaButton({
19
+ text: "See all images",
20
+ iconSvg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M128 136c0-22.1-17.9-40-40-40L40 96C17.9 96 0 113.9 0 136l0 48c0 22.1 17.9 40 40 40H88c22.1 0 40-17.9 40-40l0-48zm0 192c0-22.1-17.9-40-40-40H40c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40H88c22.1 0 40-17.9 40-40V328zm32-192v48c0 22.1 17.9 40 40 40h48c22.1 0 40-17.9 40-40V136c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40zM288 328c0-22.1-17.9-40-40-40H200c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40h48c22.1 0 40-17.9 40-40V328zm32-192v48c0 22.1 17.9 40 40 40h48c22.1 0 40-17.9 40-40V136c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40zM448 328c0-22.1-17.9-40-40-40H360c-22.1 0-40 17.9-40 40v48c0 22.1 17.9 40 40 40h48c22.1 0 40-17.9 40-40V328z"/></svg>',
21
+ iconOnlyOnMobile: true,
22
+ buttonElement: true,
23
+ attributes: {
24
+ hidden: "",
25
+ value: "show-index"
26
+ }
27
+ }) | indent(6) }}
28
+ {{ tnaButton({
29
+ text: "Full screen",
30
+ iconSvg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M32 32C14.3 32 0 46.3 0 64v96c0 17.7 14.3 32 32 32s32-14.3 32-32V96h64c17.7 0 32-14.3 32-32s-14.3-32-32-32H32zM64 352c0-17.7-14.3-32-32-32s-32 14.3-32 32v96c0 17.7 14.3 32 32 32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H64V352zM320 32c-17.7 0-32 14.3-32 32s14.3 32 32 32h64v64c0 17.7 14.3 32 32 32s32-14.3 32-32V64c0-17.7-14.3-32-32-32H320zM448 352c0-17.7-14.3-32-32-32s-32 14.3-32 32v64H320c-17.7 0-32 14.3-32 32s14.3 32 32 32h96c17.7 0 32-14.3 32-32V352z"/></svg>',
31
+ iconOnlyOnMobile: true,
32
+ buttonElement: true,
33
+ attributes: {
34
+ hidden: "",
35
+ value: "enter-fullscreen"
36
+ }
37
+ }) | indent(6) }}
38
+ {{ tnaButton({
39
+ text: "Exit full screen",
40
+ iconSvg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M160 64c0-17.7-14.3-32-32-32s-32 14.3-32 32v64H32c-17.7 0-32 14.3-32 32s14.3 32 32 32h96c17.7 0 32-14.3 32-32V64zM32 320c-17.7 0-32 14.3-32 32s14.3 32 32 32H96v64c0 17.7 14.3 32 32 32s32-14.3 32-32V352c0-17.7-14.3-32-32-32H32zM352 64c0-17.7-14.3-32-32-32s-32 14.3-32 32v96c0 17.7 14.3 32 32 32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H352V64zM320 320c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32s32-14.3 32-32V384h64c17.7 0 32-14.3 32-32s-14.3-32-32-32H320z"/></svg>',
41
+ iconOnlyOnMobile: true,
42
+ buttonElement: true,
43
+ attributes: {
44
+ hidden: "",
45
+ value: "exit-fullscreen"
46
+ }
47
+ }) | indent(6) }}
12
48
  </div>
13
49
  </div>
14
- {%- endif -%}
15
50
  <div class="tna-gallery__items">
16
- {%- for item in params.items -%}
17
- <div class="tna-gallery__item tna-container">
18
- <div class="tna-column tna-column--full tna-gallery__header">
19
- <p class="tna-gallery__item-index">Image {{ loop.index }} of {{ params.items|length }}</p>
20
- </div>
21
- <figure class="tna-gallery__item-figure tna-column {{ 'tna-column--width-2-3 tna-column--full-medium tna-column--full-small tna-column--full-tiny' if item.tabs else 'tna-column--full' }}">
22
- <img src="{{ item.src }}" class="tna-gallery__item-image" alt="{{ item.alt }}" width="{{ item.width }}" height="{{ item.height }}">
23
- {%- if item.description -%}
51
+ {%- for item in params.items %}
52
+ <div class="tna-gallery__item" id="{{ params.id }}-item-{{ loop.index }}" aria-labelledby="{{ params.id }}-item-{{ loop.index }}-tab" role="tabpanel">
53
+ <p class="tna-gallery__item-header">Image {{ loop.index }} of {{ params.items | length }}</p>
54
+ <figure class="tna-gallery__item-figure">
55
+ <div class="tna-gallery__item-figure-inner">
56
+ <img src="{{ item.src }}" class="tna-gallery__item-image" alt="{{ item.alt }}" width="{{ item.width }}" height="{{ item.height }}">
57
+ </div>
58
+ {%- if item.description %}
24
59
  <figcaption class="tna-gallery__item-description">
25
60
  <p>{{ item.description }}</p>
26
61
  </figcaption>
27
- {%- endif -%}
62
+ {%- endif %}
28
63
  </figure>
29
- {%- if item.tabs -%}
30
- <div class="tna-gallery__item-tabs tna-column tna-column--width-1-3 tna-column--full-medium tna-column--full-small tna-column--full-tiny">
31
- {%- if item.tabs|length > 1 -%}
32
- {{ tnaTabs({
33
- items: item.tabs
34
- }) }}
35
- {%- else -%}
36
- <h{{ params.heading.level + 1 }} class="tna-heading-m">
37
- {{ item.tabs[0].title }}
38
- </h{{ params.heading.level + 1 }}>
39
- {{ item.tabs[0].body|safe }}
40
- {%- endif -%}
41
- </div>
42
- {%- endif -%}
43
64
  </div>
65
+ {%- endfor %}
66
+ </div>
67
+ <div class="tna-gallery__navigation-buttons" hidden>
68
+ <button type="button" class="tna-gallery__navigation-button tna-gallery__navigation-prev" aria-label="Previous image">
69
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512" aria-hidden="true"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l192 192c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256 246.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-192 192z"/></svg>
70
+ <span class="tna-visually-hidden">Show previous image</span>
71
+ </button>
72
+ <button type="button" class="tna-gallery__navigation-button tna-gallery__navigation-next" aria-label="Next image">
73
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512" aria-hidden="true"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M310.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 256 73.4 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z"/></svg>
74
+ <span class="tna-visually-hidden">Show next image</span>
75
+ </button>
76
+ </div>
77
+ <div class="tna-gallery__navigation" role="tablist" hidden>
78
+ {%- for item in params.items -%}
79
+ <button type="button" class="tna-gallery__navigation-item" role="tab" id="{{ params.id }}-item-{{ loop.index }}-tab" aria-label="Photo {{ loop.index }} of {{ params.items | length }}" aria-controls="{{ params.id }}-item-{{ loop.index }}">
80
+ <img src="{{ item.src }}" class="tna-gallery__navigation-item-image" alt="" width="{{ item.width }}" height="{{ item.height }}">
81
+ <span class="tna-visually-hidden">Image</span>
82
+ <span class="tna-gallery__navigation-item-label">{{ loop.index }}</span>
83
+ <span class="tna-visually-hidden"> of {{ params.items | length }}</span>
84
+ </button>
44
85
  {%- endfor -%}
45
86
  </div>
46
- </{{ 'section' if params.heading else 'div' }}>
87
+ </section>