@nationalarchives/frontend 0.1.13-prerelease → 0.1.15-prerelease

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 (65) hide show
  1. package/nationalarchives/_features.scss +0 -3
  2. package/nationalarchives/all.css +1 -1
  3. package/nationalarchives/all.css.map +1 -1
  4. package/nationalarchives/all.js +1 -1
  5. package/nationalarchives/all.js.map +1 -1
  6. package/nationalarchives/all.mjs +7 -7
  7. package/nationalarchives/all.scss +2 -5
  8. package/nationalarchives/components/breadcrumbs/_index.scss +62 -19
  9. package/nationalarchives/components/breadcrumbs/breadcrumbs.js +2 -0
  10. package/nationalarchives/components/breadcrumbs/breadcrumbs.js.map +1 -0
  11. package/nationalarchives/components/breadcrumbs/breadcrumbs.mjs +63 -0
  12. package/nationalarchives/components/breadcrumbs/breadcrumbs.stories.js +28 -0
  13. package/nationalarchives/components/breadcrumbs/fixtures.json +1 -1
  14. package/nationalarchives/components/breadcrumbs/template.njk +3 -3
  15. package/nationalarchives/components/button/fixtures.json +5 -5
  16. package/nationalarchives/components/button/template.njk +1 -1
  17. package/nationalarchives/components/card/_index.scss +72 -29
  18. package/nationalarchives/components/card/card.stories.js +6 -1
  19. package/nationalarchives/components/card/fixtures.json +2 -2
  20. package/nationalarchives/components/card/macro-options.json +6 -6
  21. package/nationalarchives/components/card/template.njk +5 -5
  22. package/nationalarchives/components/filters/filters.stories.js +1 -1
  23. package/nationalarchives/components/footer/_index.scss +7 -4
  24. package/nationalarchives/components/footer/template.njk +1 -1
  25. package/nationalarchives/components/header/_index.scss +17 -11
  26. package/nationalarchives/components/header/header.stories.js +73 -28
  27. package/nationalarchives/components/header/template.njk +1 -1
  28. package/nationalarchives/components/hero/_index.scss +4 -15
  29. package/nationalarchives/components/hero/hero.stories.js +2 -0
  30. package/nationalarchives/components/index-grid/_index.scss +20 -5
  31. package/nationalarchives/components/index-grid/index-grid.stories.js +6 -2
  32. package/nationalarchives/components/index-grid/macro-options.json +22 -2
  33. package/nationalarchives/components/index-grid/template.njk +12 -6
  34. package/nationalarchives/components/message/_index.scss +3 -1
  35. package/nationalarchives/components/picture/_index.scss +13 -32
  36. package/nationalarchives/components/sensitive-image/sensitive-image.stories.js +3 -1
  37. package/nationalarchives/components/tabs/_index.scss +6 -12
  38. package/nationalarchives/components/tabs/tabs.stories.js +3 -1
  39. package/nationalarchives/patterns/featured-collection/_index.scss +1 -1
  40. package/nationalarchives/patterns/featured-collection/featured-collection.stories.js +1 -1
  41. package/nationalarchives/patterns/featured-collection/template.njk +2 -2
  42. package/nationalarchives/stories/utilities/colour-schemes/colour-schemes.mdx +85 -0
  43. package/nationalarchives/stories/utilities/{colour.stories.js → colour-schemes/colour-schemes.stories.js} +129 -18
  44. package/nationalarchives/stories/utilities/overrides/overrides.mdx +66 -0
  45. package/nationalarchives/stories/utilities/overrides/overrides.stories.js +36 -0
  46. package/nationalarchives/stories/utilities/{headings.stories.js → typography/headings.stories.js} +2 -1
  47. package/nationalarchives/stories/utilities/typography/typography.stories.js +34 -0
  48. package/nationalarchives/tools/_colour.scss +51 -53
  49. package/nationalarchives/tools/_typography.scss +13 -1
  50. package/nationalarchives/utilities/_global.scss +10 -22
  51. package/nationalarchives/utilities/_index.scss +1 -0
  52. package/nationalarchives/utilities/_overrides.scss +17 -0
  53. package/nationalarchives/utilities/_typography.scss +36 -27
  54. package/nationalarchives/variables/_colour.scss +50 -27
  55. package/nationalarchives/variables/_index.scss +1 -0
  56. package/nationalarchives/variables/_spacing.scss +7 -0
  57. package/nationalarchives/variables/_typography.scss +2 -1
  58. package/package.json +1 -1
  59. package/nationalarchives/components/card/card.js +0 -2
  60. package/nationalarchives/components/card/card.js.map +0 -1
  61. package/nationalarchives/components/card/card.mjs +0 -45
  62. package/nationalarchives/stories/utilities/typography.stories.js +0 -29
  63. /package/nationalarchives/stories/utilities/{heading-groups.stories.js → typography/heading-groups.stories.js} +0 -0
  64. /package/nationalarchives/stories/utilities/{lists.stories.js → typography/lists.stories.js} +0 -0
  65. /package/nationalarchives/stories/utilities/{typography.mdx → typography/typography.mdx} +0 -0
@@ -1,4 +1,4 @@
1
- import { Card } from "./components/card/card.mjs";
1
+ import { Breadcrumbs } from "./components/breadcrumbs/breadcrumbs.mjs";
2
2
  import { Header } from "./components/header/header.mjs";
3
3
  import { Picture } from "./components/picture/picture.mjs";
4
4
  import { SensitiveImage } from "./components/sensitive-image/sensitive-image.mjs";
@@ -45,16 +45,16 @@ const initAll = (options) => {
45
45
  const $scope =
46
46
  options.scope instanceof HTMLElement ? options.scope : document;
47
47
 
48
+ const $breadcrumbs = $scope.querySelector('[data-module="tna-breadcrumbs"]');
49
+ if ($breadcrumbs) {
50
+ new Breadcrumbs($breadcrumbs).init();
51
+ }
52
+
48
53
  const $header = $scope.querySelector('[data-module="tna-header"]');
49
54
  if ($header) {
50
55
  new Header($header).init();
51
56
  }
52
57
 
53
- const $cards = $scope.querySelectorAll('[data-module="tna-card"]');
54
- $cards.forEach(($card) => {
55
- new Card($card).init();
56
- });
57
-
58
58
  const $pictures = $scope.querySelectorAll('[data-module="tna-picture"]');
59
59
  $pictures.forEach(($picture) => {
60
60
  new Picture($picture).init();
@@ -73,4 +73,4 @@ const initAll = (options) => {
73
73
  });
74
74
  };
75
75
 
76
- export { initAll, Header, SensitiveImage, Tabs };
76
+ export { initAll, Breadcrumbs, Header, Picture, SensitiveImage, Tabs };
@@ -1,9 +1,6 @@
1
- @use "variables";
2
- @use "tools";
1
+ @forward "variables";
2
+ @forward "tools";
3
3
 
4
4
  @use "utilities";
5
5
  @use "components";
6
6
  @use "patterns";
7
-
8
- // @use "variables/colour";
9
- // @include colour.configure(#f0a);
@@ -5,6 +5,14 @@
5
5
  padding-top: 1rem;
6
6
  padding-bottom: 1rem;
7
7
 
8
+ &__wrapper {
9
+ .tna-template--clicked & {
10
+ &:focus {
11
+ outline: none !important;
12
+ }
13
+ }
14
+ }
15
+
8
16
  &__list {
9
17
  margin: 0;
10
18
  padding: 0;
@@ -24,9 +32,15 @@
24
32
 
25
33
  display: inline-block;
26
34
 
35
+ vertical-align: baseline;
36
+
27
37
  content: "\203A";
28
38
  }
29
39
  }
40
+
41
+ &--expandable {
42
+ display: none;
43
+ }
30
44
  }
31
45
 
32
46
  &__link {
@@ -41,6 +55,46 @@
41
55
  &:hover {
42
56
  @include colour.colour-font("font-dark");
43
57
  }
58
+
59
+ @include colour.on-high-contrast {
60
+ padding-right: 0.75rem;
61
+ padding-left: 0.75rem;
62
+
63
+ text-decoration: none;
64
+
65
+ border: 1px transparent solid;
66
+ @include colour.colour-border("keyline-dark");
67
+
68
+ &:hover {
69
+ text-decoration: underline;
70
+
71
+ @include colour.colour-font("contrast-background");
72
+
73
+ @include colour.colour-background("contrast-font-base");
74
+ }
75
+ }
76
+ }
77
+
78
+ button#{&}__link {
79
+ margin: 0;
80
+ padding: 0;
81
+ height: 100%;
82
+
83
+ font-size: inherit;
84
+ line-height: inherit;
85
+ font-weight: inherit;
86
+
87
+ background-color: transparent;
88
+
89
+ border: none;
90
+
91
+ appearance: none;
92
+ cursor: pointer;
93
+
94
+ &:hover {
95
+ text-decoration: underline;
96
+ text-decoration-thickness: 3px;
97
+ }
44
98
  }
45
99
 
46
100
  @include media.on-mobile {
@@ -67,28 +121,17 @@
67
121
  // }
68
122
  // }
69
123
 
70
- &__item:not(:first-child, :last-child) {
124
+ &__list--collapse-on-mobile
125
+ #{&}__item:not(
126
+ :first-child,
127
+ .tna-breadcrumbs__item--expandable,
128
+ :last-child
129
+ ) {
71
130
  display: none;
72
131
  }
73
- }
74
-
75
- @mixin high-contrast {
76
- &__link {
77
- padding-right: 0.75rem;
78
- padding-left: 0.75rem;
79
-
80
- border: 1px transparent solid;
81
- @include colour.colour-border("keyline-dark");
82
- }
83
- }
84
-
85
- .tna-template--high-contrast-theme & {
86
- @include high-contrast;
87
- }
88
132
 
89
- @media (prefers-contrast: more) {
90
- .tna-template--system-theme & {
91
- @include high-contrast;
133
+ &__list--collapse-on-mobile #{&}__item--expandable {
134
+ display: inline-block;
92
135
  }
93
136
  }
94
137
  }
@@ -0,0 +1,2 @@
1
+ !function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r():"function"==typeof define&&define.amd?define("TNAFrontend",[],r):"object"==typeof exports?exports.TNAFrontend=r():(e.TNAFrontend=e.TNAFrontend||{},e.TNAFrontend["components/breadcrumbs/breadcrumbs"]=r())}(self,(()=>(()=>{"use strict";var e={948:(e,r,t)=>{t.d(r,{Z:()=>n});const n=function(){return([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,(function(e){return(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16)}))}}},r={};function t(n){var i=r[n];if(void 0!==i)return i.exports;var o=r[n]={exports:{}};return e[n](o,o.exports,t),o.exports}t.d=(e,r)=>{for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};return(()=>{t.r(n),t.d(n,{Breadcrumbs:()=>o});var e=t(948);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 i(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,(void 0,o=function(e,t){if("object"!==r(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,"string");if("object"!==r(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(i.key),"symbol"===r(o)?o:String(o)),i)}var o}var o=function(){function r(e){!function(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")}(this,r),this.$module=e,this.$breadcrumbsListWrapper=e&&e.querySelector(".tna-breadcrumbs__wrapper"),this.$breadcrumbsList=e&&this.$breadcrumbsListWrapper&&e.querySelector(".tna-breadcrumbs__list"),this.$breadcrumbs=e&&this.$breadcrumbsListWrapper&&this.$breadcrumbsList&&e.querySelectorAll(".tna-breadcrumbs__item")}var t,n;return t=r,(n=[{key:"init",value:function(){var r=this;if(this.$module&&this.$breadcrumbsListWrapper&&this.$breadcrumbsList&&this.$breadcrumbs&&this.$breadcrumbs.length>2){var t="tna-breadcrumbs-".concat((0,e.Z)()),n=document.createElement("li");n.classList.add("tna-breadcrumbs__item","tna-breadcrumbs__item--expandable");var i=document.createElement("button");i.classList.add("tna-breadcrumbs__link"),i.innerHTML="<span class='tna-visually-hidden'>Expand breadcrumbs</span>&hellip;",i.setAttribute("aria-expanded","false"),i.setAttribute("aria-controls",t),i.addEventListener("click",(function(){r.$breadcrumbsList.classList.remove("tna-breadcrumbs__list--collapse-on-mobile"),n.remove(),r.$breadcrumbsListWrapper.setAttribute("tabindex","0"),r.$breadcrumbsListWrapper.focus(),r.$breadcrumbsListWrapper.setAttribute("tabindex","-1")})),n.appendChild(i),this.$breadcrumbsList.setAttribute("id",t),this.$breadcrumbsList.insertBefore(n,this.$breadcrumbs[this.$breadcrumbs.length-2].nextSibling)}}}])&&i(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),r}()})(),n})()));
2
+ //# sourceMappingURL=breadcrumbs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components/breadcrumbs/breadcrumbs.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,KAEzBD,EAAkB,YAAIA,EAAkB,aAAK,CAAC,EAAGA,EAAkB,YAAE,sCAAwCC,IAC9G,CATD,CASGK,MAAM,I,yDCDT,QARe,WAAH,OACT,CAAC,MAAQ,KAAO,KAAO,KAAO,MAAMC,QAAQ,UAAU,SAACC,GAAC,OAErDA,EACCC,OAAOC,gBAAgB,IAAIC,WAAW,IAAI,GAAM,IAAOH,EAAI,GAC5DI,SAAS,GAAG,GACf,C,GCLCC,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBE,IAAjBD,EACH,OAAOA,EAAad,QAGrB,IAAIC,EAASU,EAAyBE,GAAY,CAGjDb,QAAS,CAAC,GAOX,OAHAgB,EAAoBH,GAAUZ,EAAQA,EAAOD,QAASY,GAG/CX,EAAOD,OACf,CCrBAY,EAAoBK,EAAI,CAACjB,EAASkB,KACjC,IAAI,IAAIC,KAAOD,EACXN,EAAoBQ,EAAEF,EAAYC,KAASP,EAAoBQ,EAAEpB,EAASmB,IAC5EE,OAAOC,eAAetB,EAASmB,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDP,EAAoBQ,EAAI,CAACK,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFd,EAAoBkB,EAAK9B,IACH,oBAAX+B,QAA0BA,OAAOC,aAC1CX,OAAOC,eAAetB,EAAS+B,OAAOC,YAAa,CAAEC,MAAO,WAE7DZ,OAAOC,eAAetB,EAAS,aAAc,CAAEiC,OAAO,GAAO,E,uuBCHvD,IAAMC,EAAW,WACtB,SAAAA,EAAYC,I,4FAASC,CAAA,KAAAF,GACnBG,KAAKF,QAAUA,EACfE,KAAKC,wBACHH,GAAWA,EAAQI,cAAc,6BACnCF,KAAKG,iBACHL,GACAE,KAAKC,yBACLH,EAAQI,cAAc,0BACxBF,KAAKI,aACHN,GACAE,KAAKC,yBACLD,KAAKG,kBACLL,EAAQO,iBAAiB,yBAC7B,C,QA6CC,O,EA7CAR,G,EAAA,EAAAf,IAAA,OAAAc,MAED,WAAO,IAAAU,EAAA,KACL,GACGN,KAAKF,SACLE,KAAKC,yBACLD,KAAKG,kBACLH,KAAKI,cAKJJ,KAAKI,aAAaG,OAAS,EAAG,CAChC,IAAMC,EAAW,mBAAHC,QAAsBC,EAAAA,EAAAA,MAE9BC,EAAcC,SAASC,cAAc,MAC3CF,EAAYG,UAAUC,IACpB,wBACA,qCAGF,IAAMC,EAAgBJ,SAASC,cAAc,UAC7CG,EAAcF,UAAUC,IAAI,yBAC5BC,EAAcC,UACZ,sEACFD,EAAcE,aAAa,gBAAiB,SAC5CF,EAAcE,aAAa,gBAAiBV,GAC5CQ,EAAcG,iBAAiB,SAAS,WACtCb,EAAKH,iBAAiBW,UAAUM,OAC9B,6CAEFT,EAAYS,SACZd,EAAKL,wBAAwBiB,aAAa,WAAY,KACtDZ,EAAKL,wBAAwBoB,QAC7Bf,EAAKL,wBAAwBiB,aAAa,WAAY,KACxD,IAEAP,EAAYW,YAAYN,GAExBhB,KAAKG,iBAAiBe,aAAa,KAAMV,GACzCR,KAAKG,iBAAiBoB,aACpBZ,EACAX,KAAKI,aAAaJ,KAAKI,aAAaG,OAAS,GAAGiB,YAEpD,CACF,M,oEAAC3B,CAAA,CA3DqB,E","sources":["webpack://TNAFrontend/webpack/universalModuleDefinition","webpack://TNAFrontend/./src/nationalarchives/lib/uuid.mjs","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/breadcrumbs/breadcrumbs.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\"] = root[\"TNAFrontend\"] || {}, root[\"TNAFrontend\"][\"components/breadcrumbs/breadcrumbs\"] = factory();\n})(self, () => {\nreturn ","const uuidv4 = () =>\n ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) =>\n (\n c ^\n (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))\n ).toString(16),\n );\n\nexport default uuidv4;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\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};","import uuidv4 from \"../../lib/uuid.mjs\";\n\nexport class Breadcrumbs {\n constructor($module) {\n this.$module = $module;\n this.$breadcrumbsListWrapper =\n $module && $module.querySelector(\".tna-breadcrumbs__wrapper\");\n this.$breadcrumbsList =\n $module &&\n this.$breadcrumbsListWrapper &&\n $module.querySelector(\".tna-breadcrumbs__list\");\n this.$breadcrumbs =\n $module &&\n this.$breadcrumbsListWrapper &&\n this.$breadcrumbsList &&\n $module.querySelectorAll(\".tna-breadcrumbs__item\");\n }\n\n init() {\n if (\n !this.$module ||\n !this.$breadcrumbsListWrapper ||\n !this.$breadcrumbsList ||\n !this.$breadcrumbs\n ) {\n return;\n }\n\n if (this.$breadcrumbs.length > 2) {\n const uniqueId = `tna-breadcrumbs-${uuidv4()}`;\n\n const $expandable = document.createElement(\"li\");\n $expandable.classList.add(\n \"tna-breadcrumbs__item\",\n \"tna-breadcrumbs__item--expandable\",\n );\n\n const $expandButton = document.createElement(\"button\");\n $expandButton.classList.add(\"tna-breadcrumbs__link\");\n $expandButton.innerHTML =\n \"<span class='tna-visually-hidden'>Expand breadcrumbs</span>&hellip;\";\n $expandButton.setAttribute(\"aria-expanded\", \"false\");\n $expandButton.setAttribute(\"aria-controls\", uniqueId);\n $expandButton.addEventListener(\"click\", () => {\n this.$breadcrumbsList.classList.remove(\n \"tna-breadcrumbs__list--collapse-on-mobile\",\n );\n $expandable.remove();\n this.$breadcrumbsListWrapper.setAttribute(\"tabindex\", \"0\");\n this.$breadcrumbsListWrapper.focus();\n this.$breadcrumbsListWrapper.setAttribute(\"tabindex\", \"-1\");\n });\n\n $expandable.appendChild($expandButton);\n\n this.$breadcrumbsList.setAttribute(\"id\", uniqueId);\n this.$breadcrumbsList.insertBefore(\n $expandable,\n this.$breadcrumbs[this.$breadcrumbs.length - 2].nextSibling,\n );\n }\n }\n}\n"],"names":["root","factory","exports","module","define","amd","self","replace","c","crypto","getRandomValues","Uint8Array","toString","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","d","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","Breadcrumbs","$module","_classCallCheck","this","$breadcrumbsListWrapper","querySelector","$breadcrumbsList","$breadcrumbs","querySelectorAll","_this","length","uniqueId","concat","uuidv4","$expandable","document","createElement","classList","add","$expandButton","innerHTML","setAttribute","addEventListener","remove","focus","appendChild","insertBefore","nextSibling"],"sourceRoot":""}
@@ -0,0 +1,63 @@
1
+ import uuidv4 from "../../lib/uuid.mjs";
2
+
3
+ export class Breadcrumbs {
4
+ constructor($module) {
5
+ this.$module = $module;
6
+ this.$breadcrumbsListWrapper =
7
+ $module && $module.querySelector(".tna-breadcrumbs__wrapper");
8
+ this.$breadcrumbsList =
9
+ $module &&
10
+ this.$breadcrumbsListWrapper &&
11
+ $module.querySelector(".tna-breadcrumbs__list");
12
+ this.$breadcrumbs =
13
+ $module &&
14
+ this.$breadcrumbsListWrapper &&
15
+ this.$breadcrumbsList &&
16
+ $module.querySelectorAll(".tna-breadcrumbs__item");
17
+ }
18
+
19
+ init() {
20
+ if (
21
+ !this.$module ||
22
+ !this.$breadcrumbsListWrapper ||
23
+ !this.$breadcrumbsList ||
24
+ !this.$breadcrumbs
25
+ ) {
26
+ return;
27
+ }
28
+
29
+ if (this.$breadcrumbs.length > 2) {
30
+ const uniqueId = `tna-breadcrumbs-${uuidv4()}`;
31
+
32
+ const $expandable = document.createElement("li");
33
+ $expandable.classList.add(
34
+ "tna-breadcrumbs__item",
35
+ "tna-breadcrumbs__item--expandable",
36
+ );
37
+
38
+ const $expandButton = document.createElement("button");
39
+ $expandButton.classList.add("tna-breadcrumbs__link");
40
+ $expandButton.innerHTML =
41
+ "<span class='tna-visually-hidden'>Expand breadcrumbs</span>&hellip;";
42
+ $expandButton.setAttribute("aria-expanded", "false");
43
+ $expandButton.setAttribute("aria-controls", uniqueId);
44
+ $expandButton.addEventListener("click", () => {
45
+ this.$breadcrumbsList.classList.remove(
46
+ "tna-breadcrumbs__list--collapse-on-mobile",
47
+ );
48
+ $expandable.remove();
49
+ this.$breadcrumbsListWrapper.setAttribute("tabindex", "0");
50
+ this.$breadcrumbsListWrapper.focus();
51
+ this.$breadcrumbsListWrapper.setAttribute("tabindex", "-1");
52
+ });
53
+
54
+ $expandable.appendChild($expandButton);
55
+
56
+ this.$breadcrumbsList.setAttribute("id", uniqueId);
57
+ this.$breadcrumbsList.insertBefore(
58
+ $expandable,
59
+ this.$breadcrumbs[this.$breadcrumbs.length - 2].nextSibling,
60
+ );
61
+ }
62
+ }
63
+ }
@@ -54,3 +54,31 @@ Standard.args = {
54
54
  ],
55
55
  classes: "tna-breadcrumbs--demo",
56
56
  };
57
+
58
+ // TODO
59
+ // export const NoCollapse = Template.bind({});
60
+ // NoCollapse.args = {
61
+ // items: [
62
+ // {
63
+ // text: "Alpha",
64
+ // href: "#/alpha",
65
+ // },
66
+ // {
67
+ // text: "Beta",
68
+ // href: "#/beta",
69
+ // },
70
+ // {
71
+ // text: "Gamma",
72
+ // href: "#/gamma",
73
+ // },
74
+ // {
75
+ // text: "Delta",
76
+ // href: "#/delta",
77
+ // },
78
+ // {
79
+ // text: "Epsilon",
80
+ // href: "#/epsilon",
81
+ // },
82
+ // ],
83
+ // classes: "tna-breadcrumbs--demo",
84
+ // };
@@ -19,7 +19,7 @@
19
19
  }
20
20
  ]
21
21
  },
22
- "html": "<div class=\"tna-breadcrumbs tna-container \"><nav class=\"tna-column tna-column--full\" aria-label=\"Breadcrumb\"><ol class=\"tna-breadcrumbs__list\"><li class=\"tna-breadcrumbs__item\"><a href=\"#/alpha\" class=\"tna-breadcrumbs__link\" data-prefix=\"Back to\">Alpha</a></li><li class=\"tna-breadcrumbs__item\"><a href=\"#/beta\" class=\"tna-breadcrumbs__link\" data-prefix=\"Back to\">Beta</a></li><li class=\"tna-breadcrumbs__item\"><a href=\"#/gamma\" class=\"tna-breadcrumbs__link\" data-prefix=\"Back to\">Gamma</a></li></ol></nav></div>",
22
+ "html": "<div class=\"tna-breadcrumbs tna-container \" data-module=\"tna-breadcrumbs\"><nav class=\"tna-breadcrumbs__wrapper tna-column tna-column--full\" aria-label=\"Breadcrumb\"><ol class=\"tna-breadcrumbs__list tna-breadcrumbs__list--collapse-on-mobile\"><li class=\"tna-breadcrumbs__item\"><a href=\"#/alpha\" class=\"tna-breadcrumbs__link\" data-prefix=\"Back to\">Alpha</a></li><li class=\"tna-breadcrumbs__item\"><a href=\"#/beta\" class=\"tna-breadcrumbs__link\" data-prefix=\"Back to\">Beta</a></li><li class=\"tna-breadcrumbs__item\"><a href=\"#/gamma\" class=\"tna-breadcrumbs__link\" data-prefix=\"Back to\">Gamma</a></li></ol></nav></div>",
23
23
  "hidden": false
24
24
  }
25
25
  ]
@@ -1,7 +1,7 @@
1
1
  {%- set containerClasses = [params.classes] if params.classes else [] -%}
2
- <div class="tna-breadcrumbs tna-container {{ containerClasses | join(' ') }}" {%- for attribute, value in params.attributes %} {{ attribute }}="{{ value }}"{% endfor %}>
3
- <nav class="tna-column tna-column--full" aria-label="Breadcrumb">
4
- <ol class="tna-breadcrumbs__list">
2
+ <div class="tna-breadcrumbs tna-container {{ containerClasses | join(' ') }}" data-module="tna-breadcrumbs" {%- for attribute, value in params.attributes %} {{ attribute }}="{{ value }}"{% endfor %}>
3
+ <nav class="tna-breadcrumbs__wrapper tna-column tna-column--full" aria-label="Breadcrumb">
4
+ <ol class="tna-breadcrumbs__list tna-breadcrumbs__list--collapse-on-mobile">
5
5
  {%- for item in params.items -%}
6
6
  <li class="tna-breadcrumbs__item">
7
7
  <a href="{{ item.href }}" class="tna-breadcrumbs__link" data-prefix="{{ params.prefix if params.prefix else 'Back to' }}" {%- if item.title %} title="{{ item.title }}"{% endif %}>
@@ -7,7 +7,7 @@
7
7
  "text": "Log in",
8
8
  "href": "#"
9
9
  },
10
- "html": "<a href=\"#\" class=\"tna-button \">Log in</a>",
10
+ "html": "<a href=\"#\" class=\"tna-button \" role=\"button\">Log in</a>",
11
11
  "hidden": false
12
12
  },
13
13
  {
@@ -17,7 +17,7 @@
17
17
  "href": "#",
18
18
  "title": "Log in to the service"
19
19
  },
20
- "html": "<a href=\"#\" class=\"tna-button \" title=\"Log in to the service\">Log in</a>",
20
+ "html": "<a href=\"#\" class=\"tna-button \" role=\"button\" title=\"Log in to the service\">Log in</a>",
21
21
  "hidden": false
22
22
  },
23
23
  {
@@ -27,7 +27,7 @@
27
27
  "href": "#",
28
28
  "secondary": true
29
29
  },
30
- "html": "<a href=\"#\" class=\"tna-button tna-button--secondary\">Log in</a>",
30
+ "html": "<a href=\"#\" class=\"tna-button tna-button--secondary\" role=\"button\">Log in</a>",
31
31
  "hidden": false
32
32
  },
33
33
  {
@@ -37,7 +37,7 @@
37
37
  "href": "#",
38
38
  "classes": "button__test-class"
39
39
  },
40
- "html": "<a href=\"#\" class=\"tna-button button__test-class\">Log in</a>",
40
+ "html": "<a href=\"#\" class=\"tna-button button__test-class\" role=\"button\">Log in</a>",
41
41
  "hidden": false
42
42
  },
43
43
  {
@@ -49,7 +49,7 @@
49
49
  "data-testattribute": "foobar"
50
50
  }
51
51
  },
52
- "html": "<a href=\"#\" class=\"tna-button \" data-testattribute=\"foobar\">Log in</a>",
52
+ "html": "<a href=\"#\" class=\"tna-button \" role=\"button\" data-testattribute=\"foobar\">Log in</a>",
53
53
  "hidden": false
54
54
  }
55
55
  ]
@@ -2,6 +2,6 @@
2
2
  {%- if params.secondary -%}
3
3
  {%- set buttonClasses = buttonClasses.concat('tna-button--secondary') -%}
4
4
  {%- endif -%}
5
- <a href="{{ params.href }}" class="tna-button {{ buttonClasses | join(' ') }}"{%- if params.title %} title="{{ params.title }}"{% endif %} {%- for attribute, value in params.attributes %} {{ attribute }}="{{ value }}"{% endfor %}>
5
+ <a href="{{ params.href }}" class="tna-button {{ buttonClasses | join(' ') }}" role="button"{%- if params.title %} title="{{ params.title }}"{% endif %} {%- for attribute, value in params.attributes %} {{ attribute }}="{{ value }}"{% endfor %}>
6
6
  {{ params.text }}
7
7
  </a>
@@ -1,8 +1,15 @@
1
+ @use "sass:math";
2
+ @use "../../variables/colour" as colourVars; // TODO
1
3
  @use "../../tools/colour";
2
- @use "../../variables/colour" as colourVars;
4
+ @use "../../tools/typography";
5
+ @use "../../tools/media";
3
6
 
4
7
  .tna-card {
5
- margin-bottom: 1rem;
8
+ margin-bottom: 2rem;
9
+
10
+ &:last-child {
11
+ margin-bottom: 0;
12
+ }
6
13
 
7
14
  &__inner {
8
15
  display: flex;
@@ -24,26 +31,47 @@
24
31
  }
25
32
 
26
33
  &__image-container {
34
+ height: 0;
27
35
  margin-bottom: 1rem;
36
+ // padding-bottom: #{math.div(9, 16) * 100%};
37
+ padding-bottom: #{math.div(2, 3) * 100%};
28
38
 
29
39
  position: relative;
30
40
  order: 1;
31
41
  }
32
42
 
33
43
  &__image {
34
- height: auto;
44
+ width: 100%;
45
+ height: 100%;
46
+
47
+ position: absolute;
48
+ inset: 0;
49
+
50
+ object-fit: cover;
35
51
  }
36
52
 
37
53
  &__image-label {
38
- padding: 0 0.5rem;
54
+ max-width: calc(100% - 2rem);
55
+ padding: 0.25rem 0.5rem;
39
56
 
40
57
  position: absolute;
41
58
  top: 1rem;
42
59
  left: 0;
43
60
 
61
+ @include colour.fixed;
62
+
63
+ @include colour.colour-font("font-dark");
64
+ @include typography.relative-font-size(14);
65
+ @include typography.main-font-weight-bold;
44
66
  text-transform: uppercase;
67
+ line-height: #{math.div(16, 14)};
45
68
 
46
- background-color: colourVars.$tna-yellow;
69
+ @include colour.colour-background("accent");
70
+ }
71
+
72
+ &--green-label #{&}__image-label {
73
+ // color: colourVars.$tna-white;
74
+ background-color: colourVars.$tna-green;
47
75
  }
48
76
 
49
77
  &__body {
@@ -68,14 +96,8 @@
68
96
 
69
97
  @include colour.colour-font("font-base");
70
98
 
71
- // background-color: colour.$tna-yellow;
72
99
  @include colour.colour-background("accent");
73
100
 
74
- .tna-card__inner {
75
- margin-left: 50%;
76
- padding: 2rem;
77
- }
78
-
79
101
  .tna-card__heading {
80
102
  padding-bottom: 2rem;
81
103
 
@@ -87,38 +109,59 @@
87
109
  color: inherit;
88
110
  }
89
111
 
112
+ .tna-card__title {
113
+ @include typography.heading-font;
114
+ }
115
+
90
116
  .tna-card__title-link {
91
117
  @include colour.colour-font("font-dark");
92
118
  }
93
119
 
94
120
  .tna-card__image-container {
95
- margin-bottom: 0;
121
+ margin-bottom: 2rem;
122
+ }
123
+
124
+ @include media.on-larger-than-mobile {
125
+ .tna-card__inner {
126
+ margin-left: 50%;
127
+ padding: 2rem;
128
+ }
129
+
130
+ .tna-card__image-container {
131
+ height: auto;
132
+ margin-bottom: 0;
133
+ padding-bottom: 0;
96
134
 
97
- position: absolute;
98
- inset: 0 50% 0 0;
135
+ display: block;
136
+
137
+ position: absolute;
138
+ inset: 0 50% 0 0;
139
+ }
99
140
  }
100
141
 
101
- .tna-card__image {
102
- width: 100%;
103
- height: 100%;
104
- object-fit: cover;
142
+ @include media.on-mobile {
143
+ .tna-card__inner {
144
+ padding: 0 0 2rem;
145
+ }
146
+
147
+ .tna-card__heading,
148
+ .tna-card__body,
149
+ .tna-card__actions {
150
+ margin-right: 2rem;
151
+ margin-left: 2rem;
152
+ }
105
153
  }
106
154
  }
107
155
 
108
- @mixin high-contrast {
109
- padding: 1rem;
110
-
156
+ @include colour.on-high-contrast {
111
157
  border: 1px transparent solid;
112
158
  @include colour.colour-border("keyline-dark");
113
- }
114
-
115
- .tna-template--high-contrast-theme & {
116
- @include high-contrast;
117
- }
118
159
 
119
- @media (prefers-contrast: more) {
120
- .tna-template--system-theme & {
121
- @include high-contrast;
160
+ .tna-card__heading,
161
+ .tna-card__body,
162
+ .tna-card__actions {
163
+ margin-right: 2rem;
164
+ margin-left: 2rem;
122
165
  }
123
166
  }
124
167
  }
@@ -5,6 +5,7 @@ const argTypes = {
5
5
  heading: { control: "object" },
6
6
  href: { control: "text" },
7
7
  image: { control: "object" },
8
+ label: { control: "text" },
8
9
  body: { control: "text" },
9
10
  text: { control: "text" },
10
11
  actions: { control: "object" },
@@ -29,6 +30,7 @@ const Template = ({
29
30
  heading,
30
31
  href,
31
32
  image,
33
+ label,
32
34
  body,
33
35
  text,
34
36
  actions,
@@ -42,6 +44,7 @@ const Template = ({
42
44
  heading,
43
45
  href,
44
46
  image,
47
+ label,
45
48
  body,
46
49
  text,
47
50
  actions,
@@ -69,6 +72,7 @@ Standard.args = {
69
72
  width: 1996,
70
73
  height: 1331,
71
74
  },
75
+ label: "New",
72
76
  body: "<p>Card body</p>",
73
77
  // actions: [
74
78
  // {
@@ -87,7 +91,7 @@ Featured.args = {
87
91
  supertitle: "Card supertitle",
88
92
  title: "Card title",
89
93
  level: 3,
90
- size: "m",
94
+ size: "l",
91
95
  singleSentence: false,
92
96
  },
93
97
  href: "#",
@@ -97,6 +101,7 @@ Featured.args = {
97
101
  width: 1996,
98
102
  height: 1331,
99
103
  },
104
+ label: "New",
100
105
  body: "<p>Card body</p>",
101
106
  actions: [
102
107
  {
@@ -105,7 +105,7 @@
105
105
  },
106
106
  "body": "<p>Card body</p>"
107
107
  },
108
- "html": "<div class=\"tna-card \" data-module=\"tna-card\"><div class=\"tna-card__inner\"><h3 class=\"tna-card__title tna-heading tna-heading--m\">Card title</h3><div class=\"tna-card__image-container\"><img src=\"https://loremflickr.com/640/360\" alt=\"A placeholder image\" width=\"640\" height=\"360\" class=\"tna-card__image\" /></div><div class=\"tna-card__body\"><p>Card body</p></div></div></div>",
108
+ "html": "<div class=\"tna-card \" data-module=\"tna-card\"><div class=\"tna-card__inner\"><h3 class=\"tna-card__title tna-heading tna-heading--m\">Card title</h3><a href=\"\" class=\"tna-card__image-container\" tabindex=\"-1\"><img src=\"https://loremflickr.com/640/360\" alt=\"A placeholder image\" width=\"640\" height=\"360\" class=\"tna-card__image\" /></a><div class=\"tna-card__body\"><p>Card body</p></div></div></div>",
109
109
  "hidden": false
110
110
  },
111
111
  {
@@ -124,7 +124,7 @@
124
124
  }
125
125
  ]
126
126
  },
127
- "html": "<div class=\"tna-card \" data-module=\"tna-card\"><div class=\"tna-card__inner\"><h3 class=\"tna-card__title tna-heading tna-heading--m\">Card title</h3><div class=\"tna-card__body\"><p>Card body</p></div><div class=\"tna-card__actions\"><a href=\"#\" class=\"tna-card__action tna-button\"title=\"Go and do the action\">Card action</a></div></div></div>",
127
+ "html": "<div class=\"tna-card \" data-module=\"tna-card\"><div class=\"tna-card__inner\"><h3 class=\"tna-card__title tna-heading tna-heading--m\">Card title</h3><div class=\"tna-card__body\"><p>Card body</p></div><div class=\"tna-card__actions\"><a href=\"#\" class=\"tna-card__action tna-button\" role=\"button\"title=\"Go and do the action\">Card action</a></div></div></div>",
128
128
  "hidden": false
129
129
  },
130
130
  {
@@ -61,12 +61,6 @@
61
61
  "required": true,
62
62
  "description": ""
63
63
  },
64
- {
65
- "name": "label",
66
- "type": "string",
67
- "required": false,
68
- "description": ""
69
- },
70
64
  {
71
65
  "name": "width",
72
66
  "type": "number",
@@ -81,6 +75,12 @@
81
75
  }
82
76
  ]
83
77
  },
78
+ {
79
+ "name": "label",
80
+ "type": "string",
81
+ "required": false,
82
+ "description": ""
83
+ },
84
84
  {
85
85
  "name": "body",
86
86
  "type": "string",
@@ -40,14 +40,14 @@
40
40
  </h{{ params.heading.level }}>
41
41
  {%- endif -%}
42
42
  {%- if params.image -%}
43
- <div class="tna-card__image-container">
43
+ <a href="{{ item.href }}" class="tna-card__image-container" tabindex="-1">
44
44
  <img src="{{ params.image.src }}" alt="{{ params.image.alt }}" width="{{ params.image.width }}" height="{{ params.image.height }}" class="tna-card__image" />
45
- {%- if params.image.label -%}
45
+ {%- if params.label -%}
46
46
  <div class="tna-card__image-label">
47
- {{ params.image.label }}
47
+ {{ params.label }}
48
48
  </div>
49
49
  {%- endif -%}
50
- </div>
50
+ </a>
51
51
  {%- endif -%}
52
52
  <div class="tna-card__body">
53
53
  {%- if params.text -%}
@@ -59,7 +59,7 @@
59
59
  {%- if params.actions -%}
60
60
  <div class="tna-card__actions">
61
61
  {%- for item in params.actions -%}
62
- <a href="{{ item.href }}" class="tna-card__action tna-button" {%- if item.title %}title="{{ item.title }}"{% endif %}>{{ item.text }}</a>
62
+ <a href="{{ item.href }}" class="tna-card__action tna-button" role="button" {%- if item.title %}title="{{ item.title }}"{% endif %}>{{ item.text }}</a>
63
63
  {%- endfor -%}
64
64
  </div>
65
65
  {%- endif -%}
@@ -15,7 +15,7 @@ Object.keys(argTypes).forEach((argType) => {
15
15
  });
16
16
 
17
17
  export default {
18
- title: "Experimental/Components/Filters",
18
+ title: "Components/Experimental/Filters",
19
19
  argTypes,
20
20
  };
21
21