@spectrum-web-components/tabs 1.0.2 → 1.0.3

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 (42) hide show
  1. package/LICENSE +201 -0
  2. package/package.json +8 -7
  3. package/stories/index.js +53 -0
  4. package/stories/index.js.map +7 -0
  5. package/stories/tabs-horizontal-sizes.stories.js +91 -0
  6. package/stories/tabs-horizontal-sizes.stories.js.map +7 -0
  7. package/stories/tabs-overflow-panel-sizes.stories.js +35 -0
  8. package/stories/tabs-overflow-panel-sizes.stories.js.map +7 -0
  9. package/stories/tabs-overflow-sizes.stories.js +31 -0
  10. package/stories/tabs-overflow-sizes.stories.js.map +7 -0
  11. package/stories/tabs-overflow.stories.js +37 -0
  12. package/stories/tabs-overflow.stories.js.map +7 -0
  13. package/stories/tabs-vertical-right-sizes.stories.js +88 -0
  14. package/stories/tabs-vertical-right-sizes.stories.js.map +7 -0
  15. package/stories/tabs-vertical-sizes.stories.js +88 -0
  16. package/stories/tabs-vertical-sizes.stories.js.map +7 -0
  17. package/stories/tabs.stories.js +504 -0
  18. package/stories/tabs.stories.js.map +7 -0
  19. package/test/benchmark/basic-test.js +13 -0
  20. package/test/benchmark/basic-test.js.map +7 -0
  21. package/test/tab.test.js +47 -0
  22. package/test/tab.test.js.map +7 -0
  23. package/test/tabs-horizontal-sizes.test-vrt.js +5 -0
  24. package/test/tabs-horizontal-sizes.test-vrt.js.map +7 -0
  25. package/test/tabs-memory.test.js +13 -0
  26. package/test/tabs-memory.test.js.map +7 -0
  27. package/test/tabs-overflow-panel-sizes.test-vrt.js +5 -0
  28. package/test/tabs-overflow-panel-sizes.test-vrt.js.map +7 -0
  29. package/test/tabs-overflow-sizes.test-vrt.js +5 -0
  30. package/test/tabs-overflow-sizes.test-vrt.js.map +7 -0
  31. package/test/tabs-overflow.test-vrt.js +5 -0
  32. package/test/tabs-overflow.test-vrt.js.map +7 -0
  33. package/test/tabs-overflow.test.js +389 -0
  34. package/test/tabs-overflow.test.js.map +7 -0
  35. package/test/tabs-vertical-right-sizes.test-vrt.js +5 -0
  36. package/test/tabs-vertical-right-sizes.test-vrt.js.map +7 -0
  37. package/test/tabs-vertical-sizes.test-vrt.js +5 -0
  38. package/test/tabs-vertical-sizes.test-vrt.js.map +7 -0
  39. package/test/tabs.test-vrt.js +5 -0
  40. package/test/tabs.test-vrt.js.map +7 -0
  41. package/test/tabs.test.js +507 -0
  42. package/test/tabs.test.js.map +7 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["tabs.stories.ts"],
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport '@spectrum-web-components/icon/sp-icon.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-checkmark.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-close.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-chevron-down.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-help.js';\nimport '@spectrum-web-components/tabs/sp-tabs.js';\nimport '@spectrum-web-components/tabs/sp-tab.js';\nimport '@spectrum-web-components/tabs/sp-tab-panel.js';\nimport { html, TemplateResult } from '@spectrum-web-components/base';\n\nexport default {\n component: 'sp-tabs',\n title: 'Tabs',\n argTypes: {\n direction: {\n name: 'direction',\n type: { name: 'string', required: false },\n description: 'The direction of the Tabs element',\n table: {\n type: {\n summary: '\"vertical\" | \"vertical-right\" | \"horizontal\"',\n },\n defaultValue: { summary: 'horizontal' },\n },\n control: {\n type: 'text',\n },\n },\n verticalTab: { control: 'boolean' },\n auto: { control: 'boolean' },\n },\n args: {\n direction: 'horizontal',\n type: false,\n verticalTab: false,\n auto: false,\n },\n};\n\ninterface Properties {\n direction: 'vertical' | 'vertical-right' | 'horizontal';\n verticalTabs?: boolean;\n verticalTab?: boolean;\n auto?: boolean;\n}\n\nconst panels = (): TemplateResult => html`\n <sp-tab-panel value=\"1\">Content for \"Really Long Name\"</sp-tab-panel>\n <sp-tab-panel value=\"2\">Content for tab 2</sp-tab-panel>\n <sp-tab-panel value=\"3\">Content for tab 3</sp-tab-panel>\n <sp-tab-panel value=\"4\">Content for tab 4</sp-tab-panel>\n`;\n\nexport const Default = (args: Properties): TemplateResult => {\n return html`\n <style>\n sp-tabs {\n display: grid;\n grid-template-columns: 100%;\n }\n sp-tab-panel {\n grid-area: 2/1/2/1;\n transition: opacity var(--spectrum-animation-duration-300)\n ease-in-out,\n transform var(--spectrum-animation-duration-300) ease-in-out;\n }\n sp-tab-panel:not([selected]) {\n display: unset;\n opacity: 0;\n height: 0;\n pointer-events: none;\n transform: translateY(calc(var(--swc-scale-factor) * 6px));\n transition: opacity var(--spectrum-animation-duration-300)\n ease-in-out,\n transform var(--spectrum-animation-duration-300) ease-in-out,\n height 0s ease var(--spectrum-animation-duration-300);\n }\n </style>\n <sp-tabs\n selected=\"1\"\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n direction=${args.direction}\n >\n <sp-tab value=\"2\">Tab 2</sp-tab>\n <sp-tab value=\"3\">Tab 3</sp-tab>\n <sp-tab value=\"4\">Tab 4</sp-tab>\n <sp-tab value=\"1\" selected>Really Long Name</sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const Autofocus = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n autofocus\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n direction=${args.direction}\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const disabledTabs = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n disabled\n ?auto=${args.auto}\n label=\"Disabled Tabs\"\n direction=${args.direction}\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const disabledTab = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n ?auto=${args.auto}\n label=\"Disabled Tab\"\n direction=${args.direction}\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\" disabled></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\" disabled></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const emphasized = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs selected=\"1\" emphasized ?auto=${args.auto} label=\"Demo Tabs\">\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const emphasizedQuiet = (args: Properties): TemplateResult => {\n return html`\n <style>\n sp-tabs {\n display: grid;\n grid-template-columns: 100%;\n }\n </style>\n <sp-tabs\n selected=\"1\"\n emphasized\n quiet\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const Vertical = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\nVertical.args = {\n direction: 'vertical',\n};\n\nexport const verticalQuiet = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n quiet\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\nverticalQuiet.args = {\n direction: 'vertical',\n};\n\nexport const verticalEmphasizedQuiet = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n quiet\n emphasized\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\nverticalEmphasizedQuiet.args = {\n direction: 'vertical',\n};\n\nexport const verticalCompact = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n compact\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\nverticalCompact.args = {\n direction: 'vertical',\n};\n\nexport const verticalQuietCompact = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n quiet\n compact\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\nverticalQuietCompact.args = {\n direction: 'vertical',\n};\n\nexport const VerticalSized = (args: Properties): TemplateResult => {\n return html`\n <style>\n sp-tabs {\n display: grid;\n height: 75vh;\n --swc-tabs-list-justify-content: center;\n }\n </style>\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\nVerticalSized.args = {\n direction: 'vertical',\n};\n\nexport const VerticalRight = (args: Properties): TemplateResult => {\n return html`\n <style>\n sp-tabs {\n height: 75vh;\n --swc-tabs-list-justify-content: center;\n }\n </style>\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\nVerticalRight.args = {\n direction: 'vertical-right',\n};\n\nexport const Icons = ({\n direction,\n verticalTab,\n auto,\n}: Properties): TemplateResult => {\n return html`\n <sp-tabs selected=\"1\" direction=${direction} ?auto=${auto}>\n <sp-tab label=\"Tab 1\" value=\"1\" ?vertical=${verticalTab}>\n <sp-icon-checkmark slot=\"icon\"></sp-icon-checkmark>\n </sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\" ?vertical=${verticalTab}>\n <sp-icon-close slot=\"icon\"></sp-icon-close>\n </sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\" ?vertical=${verticalTab}>\n <sp-icon-chevron-down slot=\"icon\"></sp-icon-chevron-down>\n </sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\" ?vertical=${verticalTab}>\n <sp-icon-help slot=\"icon\"></sp-icon-help>\n </sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const IconsWithSlottedLabel = ({\n direction,\n verticalTab,\n auto,\n}: Properties): TemplateResult => {\n return html`\n <sp-tabs selected=\"1\" direction=${direction} ?auto=${auto}>\n <sp-tab value=\"1\" ?vertical=${verticalTab}>\n Tab 1\n <sp-icon-checkmark slot=\"icon\"></sp-icon-checkmark>\n </sp-tab>\n <sp-tab value=\"2\" ?vertical=${verticalTab}>\n Tab 2\n <sp-icon-close slot=\"icon\"></sp-icon-close>\n </sp-tab>\n <sp-tab value=\"3\" ?vertical=${verticalTab}>\n Tab 3\n <sp-icon-chevron-down slot=\"icon\"></sp-icon-chevron-down>\n </sp-tab>\n <sp-tab value=\"4\" ?vertical=${verticalTab}>\n Tab 4\n <sp-icon-help slot=\"icon\"></sp-icon-help>\n </sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const IconsOnly = ({\n direction,\n verticalTab,\n auto,\n}: Properties): TemplateResult => {\n return html`\n <sp-tabs selected=\"1\" direction=${direction} ?auto=${auto}>\n <sp-tab aria-label=\"Tab 1\" value=\"1\" ?vertical=${verticalTab}>\n <sp-icon-checkmark slot=\"icon\"></sp-icon-checkmark>\n </sp-tab>\n <sp-tab aria-label=\"Tab 2\" value=\"2\" ?vertical=${verticalTab}>\n <sp-icon-close slot=\"icon\"></sp-icon-close>\n </sp-tab>\n <sp-tab aria-label=\"Tab 3\" value=\"3\" ?vertical=${verticalTab}>\n <sp-icon-chevron-down slot=\"icon\"></sp-icon-chevron-down>\n </sp-tab>\n <sp-tab aria-label=\"Tab 4\" value=\"4\" ?vertical=${verticalTab}>\n <sp-icon-help slot=\"icon\"></sp-icon-help>\n </sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const iconsIi = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n >\n <sp-tab label=\"Tab 1\" value=\"1\" vertical>\n <sp-icon-checkmark slot=\"icon\"></sp-icon-checkmark>\n </sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\" vertical>\n <sp-icon-close slot=\"icon\"></sp-icon-close>\n </sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\" vertical>\n <sp-icon-chevron-down slot=\"icon\"></sp-icon-chevron-down>\n </sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\" vertical>\n <sp-icon-help slot=\"icon\"></sp-icon-help>\n </sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\niconsIi.args = {\n direction: 'vertical',\n};\niconsIi.storyName = 'Icons II';\n\nexport const iconsIii = (args: Properties): TemplateResult => {\n return html`\n <sp-tabs\n selected=\"1\"\n direction=${args.direction}\n ?auto=${args.auto}\n label=\"Demo Tabs\"\n >\n <sp-tab label=\"Tab 1\" value=\"1\">\n <sp-icon-checkmark slot=\"icon\"></sp-icon-checkmark>\n </sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\">\n <sp-icon-close slot=\"icon\"></sp-icon-close>\n </sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\">\n <sp-icon-chevron-down slot=\"icon\"></sp-icon-chevron-down>\n </sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\">\n <sp-icon-help slot=\"icon\"></sp-icon-help>\n </sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\niconsIii.args = {\n direction: 'vertical',\n};\niconsIii.storyName = 'Icons III';\n\nexport const Quiet = ({ direction, auto }: Properties): TemplateResult => {\n return html`\n <style>\n sp-tabs {\n display: grid;\n grid-template-columns: 100%;\n }\n </style>\n <sp-tabs selected=\"1\" quiet direction=${direction} ?auto=${auto}>\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const Compact = ({ direction, auto }: Properties): TemplateResult => {\n return html`\n <sp-tabs selected=\"1\" compact direction=${direction} ?auto=${auto}>\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nexport const quietCompact = ({\n direction,\n auto,\n}: Properties): TemplateResult => {\n return html`\n <style>\n sp-tabs {\n display: grid;\n grid-template-columns: 100%;\n }\n </style>\n <sp-tabs\n selected=\"1\"\n quiet\n compact\n direction=${direction}\n ?auto=${auto}\n >\n <sp-tab label=\"Tab 1\" value=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"3\"></sp-tab>\n <sp-tab label=\"Tab 4\" value=\"4\"></sp-tab>\n ${panels()}\n </sp-tabs>\n `;\n};\n\nquietCompact.storyName = 'Quiet Compact';\n"],
5
+ "mappings": ";AAWA,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,SAAS,YAA4B;AAErC,eAAe;AAAA,EACX,WAAW;AAAA,EACX,OAAO;AAAA,EACP,UAAU;AAAA,IACN,WAAW;AAAA,MACP,MAAM;AAAA,MACN,MAAM,EAAE,MAAM,UAAU,UAAU,MAAM;AAAA,MACxC,aAAa;AAAA,MACb,OAAO;AAAA,QACH,MAAM;AAAA,UACF,SAAS;AAAA,QACb;AAAA,QACA,cAAc,EAAE,SAAS,aAAa;AAAA,MAC1C;AAAA,MACA,SAAS;AAAA,QACL,MAAM;AAAA,MACV;AAAA,IACJ;AAAA,IACA,aAAa,EAAE,SAAS,UAAU;AAAA,IAClC,MAAM,EAAE,SAAS,UAAU;AAAA,EAC/B;AAAA,EACA,MAAM;AAAA,IACF,WAAW;AAAA,IACX,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,EACV;AACJ;AASA,MAAM,SAAS,MAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAO9B,aAAM,UAAU,CAAC,SAAqC;AACzD,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBA0BS,KAAK,IAAI;AAAA;AAAA,wBAEL,KAAK,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAMxB,OAAO,CAAC;AAAA;AAAA;AAGtB;AAEO,aAAM,YAAY,CAAC,SAAqC;AAC3D,SAAO;AAAA;AAAA;AAAA;AAAA,oBAIS,KAAK,IAAI;AAAA;AAAA,wBAEL,KAAK,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAMxB,OAAO,CAAC;AAAA;AAAA;AAGtB;AAEO,aAAM,eAAe,CAAC,SAAqC;AAC9D,SAAO;AAAA;AAAA;AAAA;AAAA,oBAIS,KAAK,IAAI;AAAA;AAAA,wBAEL,KAAK,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAMxB,OAAO,CAAC;AAAA;AAAA;AAGtB;AAEO,aAAM,cAAc,CAAC,SAAqC;AAC7D,SAAO;AAAA;AAAA;AAAA,oBAGS,KAAK,IAAI;AAAA;AAAA,wBAEL,KAAK,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAMxB,OAAO,CAAC;AAAA;AAAA;AAGtB;AAEO,aAAM,aAAa,CAAC,SAAqC;AAC5D,SAAO;AAAA,iDACsC,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,cAK5C,OAAO,CAAC;AAAA;AAAA;AAGtB;AAEO,aAAM,kBAAkB,CAAC,SAAqC;AACjE,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAWS,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAOf,OAAO,CAAC;AAAA;AAAA;AAGtB;AAEO,aAAM,WAAW,CAAC,SAAqC;AAC1D,SAAO;AAAA;AAAA;AAAA,wBAGa,KAAK,SAAS;AAAA,oBAClB,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAOf,OAAO,CAAC;AAAA;AAAA;AAGtB;AACA,SAAS,OAAO;AAAA,EACZ,WAAW;AACf;AAEO,aAAM,gBAAgB,CAAC,SAAqC;AAC/D,SAAO;AAAA;AAAA;AAAA,wBAGa,KAAK,SAAS;AAAA,oBAClB,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAQf,OAAO,CAAC;AAAA;AAAA;AAGtB;AACA,cAAc,OAAO;AAAA,EACjB,WAAW;AACf;AAEO,aAAM,0BAA0B,CAAC,SAAqC;AACzE,SAAO;AAAA;AAAA;AAAA,wBAGa,KAAK,SAAS;AAAA,oBAClB,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cASf,OAAO,CAAC;AAAA;AAAA;AAGtB;AACA,wBAAwB,OAAO;AAAA,EAC3B,WAAW;AACf;AAEO,aAAM,kBAAkB,CAAC,SAAqC;AACjE,SAAO;AAAA;AAAA;AAAA,wBAGa,KAAK,SAAS;AAAA,oBAClB,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAQf,OAAO,CAAC;AAAA;AAAA;AAGtB;AACA,gBAAgB,OAAO;AAAA,EACnB,WAAW;AACf;AAEO,aAAM,uBAAuB,CAAC,SAAqC;AACtE,SAAO;AAAA;AAAA;AAAA,wBAGa,KAAK,SAAS;AAAA,oBAClB,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cASf,OAAO,CAAC;AAAA;AAAA;AAGtB;AACA,qBAAqB,OAAO;AAAA,EACxB,WAAW;AACf;AAEO,aAAM,gBAAgB,CAAC,SAAqC;AAC/D,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAUa,KAAK,SAAS;AAAA,oBAClB,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAOf,OAAO,CAAC;AAAA;AAAA;AAGtB;AACA,cAAc,OAAO;AAAA,EACjB,WAAW;AACf;AAEO,aAAM,gBAAgB,CAAC,SAAqC;AAC/D,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBASa,KAAK,SAAS;AAAA,oBAClB,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAOf,OAAO,CAAC;AAAA;AAAA;AAGtB;AACA,cAAc,OAAO;AAAA,EACjB,WAAW;AACf;AAEO,aAAM,QAAQ,CAAC;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AACJ,MAAkC;AAC9B,SAAO;AAAA,0CAC+B,SAAS,UAAU,IAAI;AAAA,wDACT,WAAW;AAAA;AAAA;AAAA,wDAGX,WAAW;AAAA;AAAA;AAAA,wDAGX,WAAW;AAAA;AAAA;AAAA,wDAGX,WAAW;AAAA;AAAA;AAAA,cAGrD,OAAO,CAAC;AAAA;AAAA;AAGtB;AAEO,aAAM,wBAAwB,CAAC;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AACJ,MAAkC;AAC9B,SAAO;AAAA,0CAC+B,SAAS,UAAU,IAAI;AAAA,0CACvB,WAAW;AAAA;AAAA;AAAA;AAAA,0CAIX,WAAW;AAAA;AAAA;AAAA;AAAA,0CAIX,WAAW;AAAA;AAAA;AAAA;AAAA,0CAIX,WAAW;AAAA;AAAA;AAAA;AAAA,cAIvC,OAAO,CAAC;AAAA;AAAA;AAGtB;AAEO,aAAM,YAAY,CAAC;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AACJ,MAAkC;AAC9B,SAAO;AAAA,0CAC+B,SAAS,UAAU,IAAI;AAAA,6DACJ,WAAW;AAAA;AAAA;AAAA,6DAGX,WAAW;AAAA;AAAA;AAAA,6DAGX,WAAW;AAAA;AAAA;AAAA,6DAGX,WAAW;AAAA;AAAA;AAAA,cAG1D,OAAO,CAAC;AAAA;AAAA;AAGtB;AAEO,aAAM,UAAU,CAAC,SAAqC;AACzD,SAAO;AAAA;AAAA;AAAA,wBAGa,KAAK,SAAS;AAAA,oBAClB,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAef,OAAO,CAAC;AAAA;AAAA;AAGtB;AACA,QAAQ,OAAO;AAAA,EACX,WAAW;AACf;AACA,QAAQ,YAAY;AAEb,aAAM,WAAW,CAAC,SAAqC;AAC1D,SAAO;AAAA;AAAA;AAAA,wBAGa,KAAK,SAAS;AAAA,oBAClB,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAef,OAAO,CAAC;AAAA;AAAA;AAGtB;AACA,SAAS,OAAO;AAAA,EACZ,WAAW;AACf;AACA,SAAS,YAAY;AAEd,aAAM,QAAQ,CAAC,EAAE,WAAW,KAAK,MAAkC;AACtE,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gDAOqC,SAAS,UAAU,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,cAKzD,OAAO,CAAC;AAAA;AAAA;AAGtB;AAEO,aAAM,UAAU,CAAC,EAAE,WAAW,KAAK,MAAkC;AACxE,SAAO;AAAA,kDACuC,SAAS,UAAU,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,cAK3D,OAAO,CAAC;AAAA;AAAA;AAGtB;AAEO,aAAM,eAAe,CAAC;AAAA,EACzB;AAAA,EACA;AACJ,MAAkC;AAC9B,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAWa,SAAS;AAAA,oBACb,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAMV,OAAO,CAAC;AAAA;AAAA;AAGtB;AAEA,aAAa,YAAY;",
6
+ "names": []
7
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ import "@spectrum-web-components/tabs/sp-tabs.js";
3
+ import "@spectrum-web-components/tabs/sp-tab.js";
4
+ import { html } from "lit";
5
+ import { measureFixtureCreation } from "../../../../test/benchmark/helpers.js";
6
+ measureFixtureCreation(html`
7
+ <sp-tabs selected="first">
8
+ <sp-tab label="Tab 1" value="first" tabindex="1"></sp-tab>
9
+ <sp-tab label="Tab 2" value="second" tabindex="2"></sp-tab>
10
+ <sp-tab label="Tab 3" value="third" tabindex="3"></sp-tab>
11
+ </sp-tabs>
12
+ `);
13
+ //# sourceMappingURL=basic-test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["basic-test.ts"],
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport '@spectrum-web-components/tabs/sp-tabs.js';\nimport '@spectrum-web-components/tabs/sp-tab.js';\nimport { html } from 'lit';\nimport { measureFixtureCreation } from '../../../../test/benchmark/helpers.js';\n\nmeasureFixtureCreation(html`\n <sp-tabs selected=\"first\">\n <sp-tab label=\"Tab 1\" value=\"first\" tabindex=\"1\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"second\" tabindex=\"2\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"third\" tabindex=\"3\"></sp-tab>\n </sp-tabs>\n`);\n"],
5
+ "mappings": ";AAYA,OAAO;AACP,OAAO;AACP,SAAS,YAAY;AACrB,SAAS,8BAA8B;AAEvC,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAMtB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ import "@spectrum-web-components/tabs/sp-tabs.js";
3
+ import "@spectrum-web-components/tabs/sp-tab.js";
4
+ import { elementUpdated, expect, fixture } from "@open-wc/testing";
5
+ import { html } from "lit/static-html.js";
6
+ import { testForLitDevWarnings } from "../../../test/testing-helpers.js";
7
+ describe("Tab", () => {
8
+ testForLitDevWarnings(
9
+ async () => await fixture(
10
+ html`
11
+ <sp-tabs>
12
+ <sp-tab label="Tab 1" value="first"></sp-tab>
13
+ </sp-tabs>
14
+ `
15
+ )
16
+ );
17
+ it("loads default tab accessibly", async () => {
18
+ const el = await fixture(
19
+ html`
20
+ <sp-tabs>
21
+ <sp-tab label="Tab 1" value="first"></sp-tab>
22
+ </sp-tabs>
23
+ `
24
+ );
25
+ await elementUpdated(el);
26
+ await expect(el).to.be.accessible();
27
+ });
28
+ it("Updates label", async () => {
29
+ const el = await fixture(
30
+ html`
31
+ <sp-tabs>
32
+ <sp-tab label="Tab 1" value="first"></sp-tab>
33
+ </sp-tabs>
34
+ `
35
+ );
36
+ await elementUpdated(el);
37
+ const firstTab = el.querySelector("sp-tab");
38
+ const label = firstTab.shadowRoot ? firstTab.shadowRoot.querySelector(
39
+ "#item-label"
40
+ ) : firstTab.querySelector("#itemLabel");
41
+ expect(label.textContent).to.include("Tab 1");
42
+ firstTab.label = "Other Tab";
43
+ await elementUpdated(firstTab);
44
+ expect(label.textContent).to.include("Other Tab");
45
+ });
46
+ });
47
+ //# sourceMappingURL=tab.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["tab.test.ts"],
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport '@spectrum-web-components/tabs/sp-tabs.js';\nimport '@spectrum-web-components/tabs/sp-tab.js';\nimport { Tab, Tabs } from '@spectrum-web-components/tabs';\nimport { elementUpdated, expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit/static-html.js';\nimport { testForLitDevWarnings } from '../../../test/testing-helpers.js';\n\ndescribe('Tab', () => {\n testForLitDevWarnings(\n async () =>\n await fixture<Tabs>(\n html`\n <sp-tabs>\n <sp-tab label=\"Tab 1\" value=\"first\"></sp-tab>\n </sp-tabs>\n `\n )\n );\n it('loads default tab accessibly', async () => {\n const el = await fixture<Tabs>(\n html`\n <sp-tabs>\n <sp-tab label=\"Tab 1\" value=\"first\"></sp-tab>\n </sp-tabs>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('Updates label', async () => {\n const el = await fixture<Tabs>(\n html`\n <sp-tabs>\n <sp-tab label=\"Tab 1\" value=\"first\"></sp-tab>\n </sp-tabs>\n `\n );\n\n await elementUpdated(el);\n const firstTab = el.querySelector('sp-tab') as Tab;\n const label = firstTab.shadowRoot\n ? (firstTab.shadowRoot.querySelector(\n '#item-label'\n ) as HTMLLabelElement)\n : (firstTab.querySelector('#itemLabel') as HTMLLabelElement);\n expect(label.textContent).to.include('Tab 1');\n\n firstTab.label = 'Other Tab';\n\n await elementUpdated(firstTab);\n expect(label.textContent).to.include('Other Tab');\n });\n});\n"],
5
+ "mappings": ";AAWA,OAAO;AACP,OAAO;AAEP,SAAS,gBAAgB,QAAQ,eAAe;AAChD,SAAS,YAAY;AACrB,SAAS,6BAA6B;AAEtC,SAAS,OAAO,MAAM;AAClB;AAAA,IACI,YACI,MAAM;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA,IAKJ;AAAA,EACR;AACA,KAAG,gCAAgC,YAAY;AAC3C,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA,IAKJ;AAEA,UAAM,eAAe,EAAE;AAEvB,UAAM,OAAO,EAAE,EAAE,GAAG,GAAG,WAAW;AAAA,EACtC,CAAC;AACD,KAAG,iBAAiB,YAAY;AAC5B,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA,IAKJ;AAEA,UAAM,eAAe,EAAE;AACvB,UAAM,WAAW,GAAG,cAAc,QAAQ;AAC1C,UAAM,QAAQ,SAAS,aAChB,SAAS,WAAW;AAAA,MACjB;AAAA,IACJ,IACC,SAAS,cAAc,YAAY;AAC1C,WAAO,MAAM,WAAW,EAAE,GAAG,QAAQ,OAAO;AAE5C,aAAS,QAAQ;AAEjB,UAAM,eAAe,QAAQ;AAC7B,WAAO,MAAM,WAAW,EAAE,GAAG,QAAQ,WAAW;AAAA,EACpD,CAAC;AACL,CAAC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ import * as stories from "../stories/tabs-horizontal-sizes.stories.js";
3
+ import { regressVisuals } from "../../../test/visual/test.js";
4
+ regressVisuals("TabsHorizontalSizesStories", stories);
5
+ //# sourceMappingURL=tabs-horizontal-sizes.test-vrt.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["tabs-horizontal-sizes.test-vrt.ts"],
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport * as stories from '../stories/tabs-horizontal-sizes.stories.js';\nimport { regressVisuals } from '../../../test/visual/test.js';\nimport type { TestsType } from '../../../test/visual/test.js';\n\nregressVisuals('TabsHorizontalSizesStories', stories as unknown as TestsType);\n"],
5
+ "mappings": ";AAYA,YAAY,aAAa;AACzB,SAAS,sBAAsB;AAG/B,eAAe,8BAA8B,OAA+B;",
6
+ "names": []
7
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ import { html } from "@open-wc/testing";
3
+ import "@spectrum-web-components/tabs/sp-tabs.js";
4
+ import "@spectrum-web-components/tabs/sp-tab.js";
5
+ import { testForMemoryLeaks } from "../../../test/testing-helpers.js";
6
+ testForMemoryLeaks(html`
7
+ <sp-tabs selected="first">
8
+ <sp-tab label="Tab 1" value="first"></sp-tab>
9
+ <sp-tab label="Tab 2" value="second"></sp-tab>
10
+ <sp-tab label="Tab 3" value="third"></sp-tab>
11
+ </sp-tabs>
12
+ `);
13
+ //# sourceMappingURL=tabs-memory.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["tabs-memory.test.ts"],
4
+ "sourcesContent": ["/*\nCopyright 2023 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport { html } from '@open-wc/testing';\nimport '@spectrum-web-components/tabs/sp-tabs.js';\nimport '@spectrum-web-components/tabs/sp-tab.js';\nimport { testForMemoryLeaks } from '../../../test/testing-helpers.js';\n\ntestForMemoryLeaks(html`\n <sp-tabs selected=\"first\">\n <sp-tab label=\"Tab 1\" value=\"first\"></sp-tab>\n <sp-tab label=\"Tab 2\" value=\"second\"></sp-tab>\n <sp-tab label=\"Tab 3\" value=\"third\"></sp-tab>\n </sp-tabs>\n`);\n"],
5
+ "mappings": ";AAWA,SAAS,YAAY;AACrB,OAAO;AACP,OAAO;AACP,SAAS,0BAA0B;AAEnC,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAMlB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ import * as stories from "../stories/tabs-overflow-panel-sizes.stories.js";
3
+ import { regressVisuals } from "../../../test/visual/test.js";
4
+ regressVisuals("TabsOverflowPanelSizesStories", stories);
5
+ //# sourceMappingURL=tabs-overflow-panel-sizes.test-vrt.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["tabs-overflow-panel-sizes.test-vrt.ts"],
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport * as stories from '../stories/tabs-overflow-panel-sizes.stories.js';\nimport { regressVisuals } from '../../../test/visual/test.js';\nimport type { TestsType } from '../../../test/visual/test.js';\n\nregressVisuals('TabsOverflowPanelSizesStories', stories as unknown as TestsType);\n"],
5
+ "mappings": ";AAYA,YAAY,aAAa;AACzB,SAAS,sBAAsB;AAG/B,eAAe,iCAAiC,OAA+B;",
6
+ "names": []
7
+ }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ import * as stories from "../stories/tabs-overflow-sizes.stories.js";
3
+ import { regressVisuals } from "../../../test/visual/test.js";
4
+ regressVisuals("TabsOverflowSizesStories", stories);
5
+ //# sourceMappingURL=tabs-overflow-sizes.test-vrt.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["tabs-overflow-sizes.test-vrt.ts"],
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport * as stories from '../stories/tabs-overflow-sizes.stories.js';\nimport { regressVisuals } from '../../../test/visual/test.js';\nimport type { TestsType } from '../../../test/visual/test.js';\n\nregressVisuals('TabsOverflowSizesStories', stories as unknown as TestsType);\n"],
5
+ "mappings": ";AAYA,YAAY,aAAa;AACzB,SAAS,sBAAsB;AAG/B,eAAe,4BAA4B,OAA+B;",
6
+ "names": []
7
+ }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ import * as stories from "../stories/tabs-overflow.stories.js";
3
+ import { regressVisuals } from "../../../test/visual/test.js";
4
+ regressVisuals("TabsOverflowStories", stories);
5
+ //# sourceMappingURL=tabs-overflow.test-vrt.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["tabs-overflow.test-vrt.ts"],
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport * as stories from '../stories/tabs-overflow.stories.js';\nimport { regressVisuals } from '../../../test/visual/test.js';\nimport type { TestsType } from '../../../test/visual/test.js';\n\nregressVisuals('TabsOverflowStories', stories as unknown as TestsType);\n"],
5
+ "mappings": ";AAYA,YAAY,aAAa;AACzB,SAAS,sBAAsB;AAG/B,eAAe,uBAAuB,OAA+B;",
6
+ "names": []
7
+ }
@@ -0,0 +1,389 @@
1
+ "use strict";
2
+ import { isFirefox } from "@spectrum-web-components/shared/src/platform.js";
3
+ import {
4
+ calculateScrollTargetForLeftSide,
5
+ calculateScrollTargetForRightSide
6
+ } from "@spectrum-web-components/tabs";
7
+ import "@spectrum-web-components/tabs/sp-tab-panel.js";
8
+ import "@spectrum-web-components/tabs/sp-tab.js";
9
+ import "@spectrum-web-components/tabs/sp-tabs-overflow.js";
10
+ import "@spectrum-web-components/tabs/sp-tabs.js";
11
+ import "@spectrum-web-components/theme/scale-medium.js";
12
+ import "@spectrum-web-components/theme/sp-theme.js";
13
+ import "@spectrum-web-components/theme/theme-light.js";
14
+ import { elementUpdated, expect, fixture, waitUntil } from "@open-wc/testing";
15
+ import {
16
+ ElementSizes,
17
+ html,
18
+ nothing
19
+ } from "@spectrum-web-components/base";
20
+ import { sendKeys, setViewport } from "@web/test-runner-commands";
21
+ import { repeat } from "lit/directives/repeat.js";
22
+ const RIGHT_BUTTON_SELECTOR = ".right-scroll";
23
+ const LEFT_BUTTON_SELECTOR = ".left-scroll";
24
+ const renderTabsOverflow = async ({
25
+ count,
26
+ size,
27
+ includeTabPanel,
28
+ selected = 1,
29
+ dir = "ltr"
30
+ }) => {
31
+ const theme = await fixture(html`
32
+ <sp-theme dir=${dir} system="spectrum" scale="medium" color="light">
33
+ <div class="container" style="width: 200px; height: 150px;">
34
+ <sp-tabs-overflow>
35
+ <sp-tabs size=${size} selected=${selected}>
36
+ ${repeat(
37
+ new Array(count),
38
+ (item) => item,
39
+ (_item, index) => html`
40
+ <sp-tab
41
+ label=${`Tab Item ${index + 1}`}
42
+ value=${index + 1}
43
+ ></sp-tab>
44
+ `
45
+ )}
46
+ ${includeTabPanel ? html`
47
+ ${repeat(
48
+ new Array(count),
49
+ (item) => item,
50
+ (_item, index) => html`
51
+ <sp-tab-panel value=${index + 1}>
52
+ Content for Tab Item ${index + 1}
53
+ </sp-tab-panel>
54
+ `
55
+ )}
56
+ ` : nothing}
57
+ </sp-tabs>
58
+ </sp-tabs-overflow>
59
+ </div>
60
+ </sp-theme>
61
+ `);
62
+ await elementUpdated(theme);
63
+ const tabsContainer = theme.querySelector(".container");
64
+ return tabsContainer;
65
+ };
66
+ describe("TabsOverflow", () => {
67
+ it("loads default tabs-overflow accessibly", async () => {
68
+ const el = await fixture(html`
69
+ <sp-tabs-overflow>
70
+ <sp-tabs size="m" selected="1">
71
+ <sp-tab label="Tab Item 1" value="1"></sp-tab>
72
+ <sp-tab label="Tab Item 2" value="2"></sp-tab>
73
+ <sp-tab-panel value="1">Tab Content 1</sp-tab-panel>
74
+ <sp-tab-panel value="2">Tab Content 2</sp-tab-panel>
75
+ </sp-tabs>
76
+ </sp-tabs-overflow>
77
+ `);
78
+ await elementUpdated(el);
79
+ await expect(el).to.be.accessible();
80
+ });
81
+ it("show render left and right buttons in shadowDom", async () => {
82
+ const el = await renderTabsOverflow({
83
+ count: 20,
84
+ size: ElementSizes.L,
85
+ includeTabPanel: true
86
+ });
87
+ const spTabsOverflows = el.querySelector(
88
+ "sp-tabs-overflow"
89
+ );
90
+ const rightButton = spTabsOverflows.shadowRoot.querySelector(
91
+ ".right-scroll"
92
+ );
93
+ expect(rightButton).to.exist;
94
+ const leftButton = spTabsOverflows.shadowRoot.querySelector(
95
+ ".left-scroll"
96
+ );
97
+ expect(leftButton).to.exist;
98
+ });
99
+ it("reflect proper sp-tab size", async () => {
100
+ const el = await renderTabsOverflow({
101
+ count: 20,
102
+ size: ElementSizes.M,
103
+ includeTabPanel: true
104
+ });
105
+ const spTabsOverflows = el.querySelector(
106
+ "sp-tabs-overflow"
107
+ );
108
+ expect(spTabsOverflows.getAttribute("size")).to.equal("m");
109
+ });
110
+ it("should scroll when the button is clicked", async () => {
111
+ const el = await renderTabsOverflow({
112
+ count: 20,
113
+ size: ElementSizes.L,
114
+ includeTabPanel: true
115
+ });
116
+ await elementUpdated(el);
117
+ const spTabsOverflows = el.querySelector(
118
+ "sp-tabs-overflow"
119
+ );
120
+ const leftButton = spTabsOverflows.shadowRoot.querySelector(
121
+ ".left-scroll"
122
+ );
123
+ const rightButton = spTabsOverflows.shadowRoot.querySelector(
124
+ ".right-scroll"
125
+ );
126
+ leftButton.dispatchEvent(new Event("click", {}));
127
+ const tabsEl = spTabsOverflows.querySelector("sp-tab");
128
+ const initialLeft = tabsEl.getBoundingClientRect().left;
129
+ rightButton.dispatchEvent(new Event("click", {}));
130
+ await elementUpdated(el);
131
+ rightButton.dispatchEvent(new Event("click", {}));
132
+ await elementUpdated(el);
133
+ rightButton.dispatchEvent(new Event("click", {}));
134
+ await elementUpdated(el);
135
+ const finalLeft = tabsEl.getBoundingClientRect().left;
136
+ expect(finalLeft).to.be.lessThanOrEqual(initialLeft);
137
+ });
138
+ it("should scroll up to the last item and back in LTR", async () => {
139
+ if (isFirefox()) return;
140
+ const el = await renderTabsOverflow({
141
+ count: 8,
142
+ size: ElementSizes.L,
143
+ includeTabPanel: true,
144
+ dir: "ltr"
145
+ });
146
+ await elementUpdated(el);
147
+ await setViewport({ width: 360, height: 640 });
148
+ await nextFrame();
149
+ const tabsOverflow = el.querySelector(
150
+ "sp-tabs-overflow"
151
+ );
152
+ expect(tabsOverflow["overflowState"].canScrollLeft).to.be.false;
153
+ expect(tabsOverflow["overflowState"].canScrollRight).to.be.true;
154
+ await scrollToEnd(el, RIGHT_BUTTON_SELECTOR, "ltr");
155
+ expect(tabsOverflow["overflowState"].canScrollLeft).to.be.true;
156
+ expect(tabsOverflow["overflowState"].canScrollRight).to.be.false;
157
+ await scrollToEnd(el, LEFT_BUTTON_SELECTOR, "ltr");
158
+ expect(tabsOverflow["overflowState"].canScrollLeft).to.be.false;
159
+ expect(tabsOverflow["overflowState"].canScrollRight).to.be.true;
160
+ });
161
+ it("should scroll up to the last item and back in RTL", async () => {
162
+ if (isFirefox()) return;
163
+ const el = await renderTabsOverflow({
164
+ count: 8,
165
+ size: ElementSizes.L,
166
+ includeTabPanel: true,
167
+ dir: "rtl"
168
+ });
169
+ await elementUpdated(el);
170
+ await setViewport({ width: 360, height: 640 });
171
+ await nextFrame();
172
+ const tabsOverflow = el.querySelector(
173
+ "sp-tabs-overflow"
174
+ );
175
+ expect(tabsOverflow["overflowState"].canScrollLeft).to.be.true;
176
+ expect(tabsOverflow["overflowState"].canScrollRight).to.be.false;
177
+ await scrollToEnd(el, LEFT_BUTTON_SELECTOR, "rtl");
178
+ expect(tabsOverflow["overflowState"].canScrollLeft).to.be.false;
179
+ expect(tabsOverflow["overflowState"].canScrollRight).to.be.true;
180
+ await scrollToEnd(el, RIGHT_BUTTON_SELECTOR, "rtl");
181
+ expect(tabsOverflow["overflowState"].canScrollLeft).to.be.true;
182
+ expect(tabsOverflow["overflowState"].canScrollRight).to.be.false;
183
+ });
184
+ it("should fail properly if slot is not sp-tabs", async () => {
185
+ const el = await fixture(html`
186
+ <sp-tabs-overflow>
187
+ <div>Some div</div>
188
+ </sp-tabs-overflow>
189
+ `);
190
+ await elementUpdated(el);
191
+ const slot = el.shadowRoot.querySelector("slot");
192
+ const slotContent = (slot == null ? void 0 : slot.assignedElements()) || "";
193
+ expect(slotContent[0].toString()).to.not.contains("Tabs");
194
+ });
195
+ it("should automatically bring the selected tab into view", async () => {
196
+ const el = await renderTabsOverflow({
197
+ count: 20,
198
+ size: ElementSizes.L,
199
+ includeTabPanel: false,
200
+ selected: 10
201
+ });
202
+ await elementUpdated(el);
203
+ const tabsEl = el.querySelector("sp-tabs");
204
+ let selectedTab = tabsEl.querySelector(
205
+ `[role="tab"][value="10"]`
206
+ );
207
+ expect(selectedTab).to.exist;
208
+ let selectedTabPosition = selectedTab.getBoundingClientRect();
209
+ expect(selectedTabPosition.left).to.be.greaterThan(0);
210
+ expect(selectedTabPosition.left).to.be.lessThan(tabsEl.offsetWidth);
211
+ const firstTab = tabsEl.querySelector(`[role="tab"][value="1"]`);
212
+ const firstTabPosition = firstTab.getBoundingClientRect();
213
+ expect(firstTabPosition.left).to.be.lessThan(0);
214
+ tabsEl.selected = "1";
215
+ await elementUpdated(tabsEl);
216
+ selectedTab = tabsEl.querySelector(`[role="tab"][value="1"]`);
217
+ expect(selectedTab).to.exist;
218
+ selectedTabPosition = selectedTab.getBoundingClientRect();
219
+ expect(selectedTabPosition.left).to.be.greaterThan(0);
220
+ expect(selectedTabPosition.left).to.be.lessThan(tabsEl.offsetWidth);
221
+ const previousSelection = tabsEl.querySelector(
222
+ `[role="tab"][value="10"]`
223
+ );
224
+ const previousSelectionPosition = previousSelection.getBoundingClientRect();
225
+ expect(previousSelectionPosition.left).to.be.greaterThan(
226
+ tabsEl.offsetWidth
227
+ );
228
+ });
229
+ it("prev and next buttons have default labels", async () => {
230
+ const el = await renderTabsOverflow({
231
+ count: 20,
232
+ size: ElementSizes.M,
233
+ includeTabPanel: true
234
+ });
235
+ await elementUpdated(el);
236
+ const spTabsOverflows = el.querySelector(
237
+ "sp-tabs-overflow"
238
+ );
239
+ const leftButton = spTabsOverflows.shadowRoot.querySelector(
240
+ ".left-scroll"
241
+ );
242
+ const rightButton = spTabsOverflows.shadowRoot.querySelector(
243
+ ".right-scroll"
244
+ );
245
+ expect(leftButton == null ? void 0 : leftButton.getAttribute("aria-label")).to.equal(
246
+ "Scroll to previous tabs"
247
+ );
248
+ expect(rightButton == null ? void 0 : rightButton.getAttribute("aria-label")).to.equal(
249
+ "Scroll to next tabs"
250
+ );
251
+ });
252
+ it("prev and next buttons labels overwritten via attributes", async () => {
253
+ const tabsContainer = await fixture(html`
254
+ <div class="container" style="width: 200px; height: 150px;">
255
+ <sp-tabs-overflow
256
+ label-previous="custom label prev"
257
+ label-next="custom label next"
258
+ >
259
+ <sp-tabs size=${ElementSizes.M} selected=${1}>
260
+ ${repeat(
261
+ new Array(20),
262
+ (item) => item,
263
+ (_item, index) => html`
264
+ <sp-tab
265
+ label=${`Tab Item ${index + 1}`}
266
+ value=${index + 1}
267
+ ></sp-tab>
268
+ `
269
+ )}
270
+ ${repeat(
271
+ new Array(20),
272
+ (item) => item,
273
+ (_item, index) => html`
274
+ <sp-tab-panel value=${index + 1}>
275
+ Content for Tab Item ${index + 1}
276
+ </sp-tab-panel>
277
+ `
278
+ )}
279
+ </sp-tabs>
280
+ </sp-tabs-overflow>
281
+ </div>
282
+ `);
283
+ await elementUpdated(tabsContainer);
284
+ const el = tabsContainer;
285
+ const spTabsOverflows = el.querySelector(
286
+ "sp-tabs-overflow"
287
+ );
288
+ const leftButton = spTabsOverflows.shadowRoot.querySelector(
289
+ ".left-scroll"
290
+ );
291
+ const rightButton = spTabsOverflows.shadowRoot.querySelector(
292
+ ".right-scroll"
293
+ );
294
+ expect(leftButton == null ? void 0 : leftButton.getAttribute("aria-label")).to.equal(
295
+ "custom label prev"
296
+ );
297
+ expect(rightButton == null ? void 0 : rightButton.getAttribute("aria-label")).to.equal(
298
+ "custom label next"
299
+ );
300
+ });
301
+ });
302
+ describe("calculateScrollTargetForRightSide", () => {
303
+ const container = { offsetWidth: 100, scrollLeft: 0 };
304
+ const tabs = [
305
+ { offsetLeft: 0, offsetWidth: 100 },
306
+ // currently selected tab
307
+ { offsetLeft: 100, offsetWidth: 100 },
308
+ { offsetLeft: 200, offsetWidth: 100 }
309
+ ];
310
+ it("correctly aligns tab on the right side of the viewport", () => {
311
+ expect(
312
+ calculateScrollTargetForRightSide(2, "ltr", tabs, container)
313
+ ).to.equal(100);
314
+ expect(
315
+ calculateScrollTargetForRightSide(2, "rtl", tabs, container)
316
+ ).to.equal(0);
317
+ });
318
+ });
319
+ describe("calculateScrollTargetForLeftSide", () => {
320
+ const container = { offsetWidth: 100, scrollLeft: 200 };
321
+ const tabs = [
322
+ { offsetLeft: -200, offsetWidth: 100 },
323
+ { offsetLeft: -100, offsetWidth: 100 },
324
+ { offsetLeft: 0, offsetWidth: 100 }
325
+ // currently selected tab
326
+ ];
327
+ it("correctly aligns tab on the left side of the viewport", () => {
328
+ expect(
329
+ calculateScrollTargetForLeftSide(1, "ltr", tabs, container)
330
+ ).to.equal(-100);
331
+ expect(
332
+ calculateScrollTargetForLeftSide(0, "ltr", tabs, container)
333
+ ).to.equal(0);
334
+ expect(
335
+ calculateScrollTargetForLeftSide(1, "rtl", tabs, container)
336
+ ).to.equal(100);
337
+ expect(
338
+ calculateScrollTargetForLeftSide(0, "rtl", tabs, container)
339
+ ).to.equal(0);
340
+ });
341
+ });
342
+ async function repeatScroll(options, iteration = 1) {
343
+ const {
344
+ times,
345
+ elementToUpdate,
346
+ elementToScroll,
347
+ distanceToReachInIteration
348
+ } = options;
349
+ if (iteration > times) return;
350
+ const distanceToReach = distanceToReachInIteration(iteration);
351
+ await sendKeys({ press: "Enter" });
352
+ await elementUpdated(elementToUpdate);
353
+ await waitUntil(
354
+ () => Math.ceil(Math.abs(elementToScroll.scrollLeft)) - Math.abs(distanceToReach) === 0,
355
+ `scroll to ${distanceToReach}`
356
+ );
357
+ return await repeatScroll(options, iteration + 1);
358
+ }
359
+ async function scrollToEnd(tabsContainer, buttonSelector, direction = "ltr") {
360
+ const tabs = tabsContainer.querySelector("sp-tabs");
361
+ const tabsList = tabs.shadowRoot.querySelector("#list");
362
+ const tabsOverflow = tabsContainer.querySelector(
363
+ "sp-tabs-overflow"
364
+ );
365
+ const button = tabsOverflow.shadowRoot.querySelector(
366
+ buttonSelector
367
+ );
368
+ const { scrollWidth, clientWidth } = tabsList;
369
+ const distPerScroll = clientWidth * tabsOverflow["scrollFactor"];
370
+ const totalScrollDist = scrollWidth - clientWidth;
371
+ const scrollsToEnd = Math.ceil(totalScrollDist / distPerScroll);
372
+ let distanceToReachInIteration;
373
+ if (direction === "ltr") {
374
+ distanceToReachInIteration = buttonSelector === LEFT_BUTTON_SELECTOR ? (iteration) => Math.max(totalScrollDist - iteration * distPerScroll, 0) : (iteration) => Math.min(iteration * distPerScroll, totalScrollDist);
375
+ } else {
376
+ distanceToReachInIteration = buttonSelector === LEFT_BUTTON_SELECTOR ? (iteration) => Math.max(-1 * iteration * distPerScroll, -totalScrollDist) : (iteration) => -Math.max(totalScrollDist - iteration * distPerScroll, 0);
377
+ }
378
+ button.focus();
379
+ return await repeatScroll({
380
+ times: scrollsToEnd,
381
+ elementToUpdate: tabsOverflow,
382
+ elementToScroll: tabsList,
383
+ distanceToReachInIteration
384
+ });
385
+ }
386
+ function nextFrame() {
387
+ return new Promise((res) => requestAnimationFrame(() => res()));
388
+ }
389
+ //# sourceMappingURL=tabs-overflow.test.js.map