Make v10 Tabs work with v11 css classes

In v11 [Tabs](https://carbondesignsystem.com/migrating/guide/design/#tabs-breaking) received some additional modifiers. In this commit we only want to make sure that the Svelte v10 tabs still work using v11 styles. This probably needs additional testing.
This commit is contained in:
Gregor Wassmann 2022-11-04 21:00:36 +01:00
commit 0eac2e94da
7 changed files with 52 additions and 77 deletions

View file

@ -3942,8 +3942,6 @@ None.
| Event name | Type | Detail |
| :--------- | :--------- | :----- |
| keypress | forwarded | -- |
| click | forwarded | -- |
| change | dispatched | -- |
## `TabsSkeleton`

View file

@ -11702,13 +11702,13 @@
}
],
"events": [
{ "type": "forwarded", "name": "click", "element": "li" },
{ "type": "forwarded", "name": "mouseover", "element": "li" },
{ "type": "forwarded", "name": "mouseenter", "element": "li" },
{ "type": "forwarded", "name": "mouseleave", "element": "li" }
{ "type": "forwarded", "name": "click", "element": "a" },
{ "type": "forwarded", "name": "mouseover", "element": "a" },
{ "type": "forwarded", "name": "mouseenter", "element": "a" },
{ "type": "forwarded", "name": "mouseleave", "element": "a" }
],
"typedefs": [],
"rest_props": { "type": "Element", "name": "li" }
"rest_props": { "type": "Element", "name": "a" }
},
{
"moduleName": "TabContent",
@ -12086,11 +12086,7 @@
{ "name": "__default__", "default": true, "slot_props": "{}" },
{ "name": "content", "default": false, "slot_props": "{}" }
],
"events": [
{ "type": "forwarded", "name": "keypress", "element": "div" },
{ "type": "forwarded", "name": "click", "element": "a" },
{ "type": "dispatched", "name": "change" }
],
"events": [{ "type": "dispatched", "name": "change" }],
"typedefs": [],
"rest_props": { "type": "Element", "name": "div" }
},

View file

@ -30,12 +30,19 @@
</script>
<!-- svelte-ignore a11y-mouse-events-have-key-events -->
<li
tabindex="-1"
role="presentation"
<a
bind:this="{ref}"
tabindex="{disabled ? '-1' : tabindex}"
role="tab"
class:bx--tabs__nav-item="{true}"
class:bx--tabs__nav-link="{true}"
class:bx--tabs__nav-item--disabled="{disabled}"
class:bx--tabs__nav-item--selected="{selected}"
aria-selected="{selected}"
aria-disabled="{disabled}"
id="{id}"
href="{href}"
style="{$useAutoWidth ? 'width: auto' : undefined}"
{...$$restProps}
on:click|preventDefault
on:click|preventDefault="{() => {
@ -58,17 +65,5 @@
}
}}"
>
<a
bind:this="{ref}"
role="tab"
tabindex="{disabled ? '-1' : tabindex}"
aria-selected="{selected}"
aria-disabled="{disabled}"
id="{id}"
href="{href}"
class:bx--tabs__nav-link="{true}"
style="{$useAutoWidth ? 'width: auto' : undefined}"
>
<slot>{label}</slot>
</a>
</li>
</a>

View file

@ -125,39 +125,8 @@
class:bx--tabs--container="{type === 'container'}"
{...$$restProps}
>
<div
role="listbox"
tabindex="0"
class:bx--tabs-trigger="{true}"
aria-label="{$$props['aria-label'] || 'listbox'}"
on:click="{() => {
dropdownHidden = !dropdownHidden;
}}"
on:keypress
on:keypress="{() => {
dropdownHidden = !dropdownHidden;
}}"
>
<a
tabindex="-1"
class:bx--tabs-trigger-text="{true}"
href="{triggerHref}"
on:click|preventDefault
on:click|preventDefault|stopPropagation="{() => {
dropdownHidden = !dropdownHidden;
}}"
>
{#if currentTab}{currentTab.label}{/if}
</a>
<ChevronDown aria-hidden="true" title="{iconDescription}" />
</div>
<ul
bind:this="{refTabList}"
role="tablist"
class:bx--tabs__nav="{true}"
class:bx--tabs__nav--hidden="{dropdownHidden}"
>
<div bind:this="{refTabList}" role="tablist" class:bx--tab--list="{true}">
<slot />
</ul>
</div>
</div>
<slot name="content" />

View file

@ -13,21 +13,18 @@
<div
class:bx--tabs="{true}"
class:bx--skeleton="{true}"
class:bx--tabs--scrollable="{true}"
class:bx--tabs--scrollable--container="{type === 'container'}"
class:bx--tabs--contained="{type === 'container'}"
{...$$restProps}
on:click
on:mouseover
on:mouseenter
on:mouseleave
>
<ul class:bx--tabs--scrollable__nav="{true}">
<div class:bx--tab--list="{true}">
{#each Array.from({ length: count }, (_, i) => i) as item}
<li class:bx--tabs--scrollable__nav-item="{true}">
<div class:bx--tabs__nav-link="{true}">
<span class:bx--tabs__nav-item="{true}" class:bx--tabs__nav-link="{true}">
<span></span>
</div>
</li>
</span>
{/each}
</ul>
</div>
</div>

View file

@ -2,7 +2,7 @@
import type { SvelteComponentTyped } from "svelte";
export interface TabProps
extends svelte.JSX.HTMLAttributes<HTMLElementTagNameMap["li"]> {
extends svelte.JSX.HTMLAttributes<HTMLElementTagNameMap["a"]> {
/**
* Specify the tab label
* Alternatively, use the default slot (e.g., <Tab><span>Label</span></Tab>)
@ -39,6 +39,30 @@ export interface TabProps
* @default null
*/
ref?: null | HTMLAnchorElement;
/**
* SvelteKit attribute to enable data prefetching
* if a link is hovered over or touched on mobile.
* @see https://kit.svelte.dev/docs/a-options#sveltekit-prefetch
* @default false
*/
"sveltekit:prefetch"?: boolean;
/**
* SvelteKit attribute to trigger a full page
* reload after the link is clicked.
* @see https://kit.svelte.dev/docs/a-options#sveltekit-reload
* @default false
*/
"sveltekit:reload"?: boolean;
/**
* SvelteKit attribute to prevent scrolling
* after the link is clicked.
* @see https://kit.svelte.dev/docs/a-options#sveltekit-noscroll
* @default false
*/
"sveltekit:noscroll"?: boolean;
}
export default class Tab extends SvelteComponentTyped<

View file

@ -36,10 +36,6 @@ export interface TabsProps
export default class Tabs extends SvelteComponentTyped<
TabsProps,
{
keypress: WindowEventMap["keypress"];
click: WindowEventMap["click"];
change: CustomEvent<any>;
},
{ change: CustomEvent<any> },
{ default: {}; content: {} }
> {}