mirror of
https://github.com/carbon-design-system/carbon-components-svelte.git
synced 2025-09-18 19:46:36 +00:00
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:
parent
6ecbeb7097
commit
0eac2e94da
7 changed files with 52 additions and 77 deletions
|
@ -3942,8 +3942,6 @@ None.
|
||||||
|
|
||||||
| Event name | Type | Detail |
|
| Event name | Type | Detail |
|
||||||
| :--------- | :--------- | :----- |
|
| :--------- | :--------- | :----- |
|
||||||
| keypress | forwarded | -- |
|
|
||||||
| click | forwarded | -- |
|
|
||||||
| change | dispatched | -- |
|
| change | dispatched | -- |
|
||||||
|
|
||||||
## `TabsSkeleton`
|
## `TabsSkeleton`
|
||||||
|
|
|
@ -11702,13 +11702,13 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"events": [
|
"events": [
|
||||||
{ "type": "forwarded", "name": "click", "element": "li" },
|
{ "type": "forwarded", "name": "click", "element": "a" },
|
||||||
{ "type": "forwarded", "name": "mouseover", "element": "li" },
|
{ "type": "forwarded", "name": "mouseover", "element": "a" },
|
||||||
{ "type": "forwarded", "name": "mouseenter", "element": "li" },
|
{ "type": "forwarded", "name": "mouseenter", "element": "a" },
|
||||||
{ "type": "forwarded", "name": "mouseleave", "element": "li" }
|
{ "type": "forwarded", "name": "mouseleave", "element": "a" }
|
||||||
],
|
],
|
||||||
"typedefs": [],
|
"typedefs": [],
|
||||||
"rest_props": { "type": "Element", "name": "li" }
|
"rest_props": { "type": "Element", "name": "a" }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "TabContent",
|
"moduleName": "TabContent",
|
||||||
|
@ -12086,11 +12086,7 @@
|
||||||
{ "name": "__default__", "default": true, "slot_props": "{}" },
|
{ "name": "__default__", "default": true, "slot_props": "{}" },
|
||||||
{ "name": "content", "default": false, "slot_props": "{}" }
|
{ "name": "content", "default": false, "slot_props": "{}" }
|
||||||
],
|
],
|
||||||
"events": [
|
"events": [{ "type": "dispatched", "name": "change" }],
|
||||||
{ "type": "forwarded", "name": "keypress", "element": "div" },
|
|
||||||
{ "type": "forwarded", "name": "click", "element": "a" },
|
|
||||||
{ "type": "dispatched", "name": "change" }
|
|
||||||
],
|
|
||||||
"typedefs": [],
|
"typedefs": [],
|
||||||
"rest_props": { "type": "Element", "name": "div" }
|
"rest_props": { "type": "Element", "name": "div" }
|
||||||
},
|
},
|
||||||
|
|
|
@ -30,12 +30,19 @@
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!-- svelte-ignore a11y-mouse-events-have-key-events -->
|
<!-- svelte-ignore a11y-mouse-events-have-key-events -->
|
||||||
<li
|
<a
|
||||||
tabindex="-1"
|
bind:this="{ref}"
|
||||||
role="presentation"
|
tabindex="{disabled ? '-1' : tabindex}"
|
||||||
|
role="tab"
|
||||||
class:bx--tabs__nav-item="{true}"
|
class:bx--tabs__nav-item="{true}"
|
||||||
|
class:bx--tabs__nav-link="{true}"
|
||||||
class:bx--tabs__nav-item--disabled="{disabled}"
|
class:bx--tabs__nav-item--disabled="{disabled}"
|
||||||
class:bx--tabs__nav-item--selected="{selected}"
|
class:bx--tabs__nav-item--selected="{selected}"
|
||||||
|
aria-selected="{selected}"
|
||||||
|
aria-disabled="{disabled}"
|
||||||
|
id="{id}"
|
||||||
|
href="{href}"
|
||||||
|
style="{$useAutoWidth ? 'width: auto' : undefined}"
|
||||||
{...$$restProps}
|
{...$$restProps}
|
||||||
on:click|preventDefault
|
on:click|preventDefault
|
||||||
on:click|preventDefault="{() => {
|
on:click|preventDefault="{() => {
|
||||||
|
@ -58,17 +65,5 @@
|
||||||
}
|
}
|
||||||
}}"
|
}}"
|
||||||
>
|
>
|
||||||
<a
|
<slot>{label}</slot>
|
||||||
bind:this="{ref}"
|
</a>
|
||||||
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>
|
|
||||||
|
|
|
@ -125,39 +125,8 @@
|
||||||
class:bx--tabs--container="{type === 'container'}"
|
class:bx--tabs--container="{type === 'container'}"
|
||||||
{...$$restProps}
|
{...$$restProps}
|
||||||
>
|
>
|
||||||
<div
|
<div bind:this="{refTabList}" role="tablist" class:bx--tab--list="{true}">
|
||||||
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}"
|
|
||||||
>
|
|
||||||
<slot />
|
<slot />
|
||||||
</ul>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<slot name="content" />
|
<slot name="content" />
|
||||||
|
|
|
@ -13,21 +13,18 @@
|
||||||
<div
|
<div
|
||||||
class:bx--tabs="{true}"
|
class:bx--tabs="{true}"
|
||||||
class:bx--skeleton="{true}"
|
class:bx--skeleton="{true}"
|
||||||
class:bx--tabs--scrollable="{true}"
|
class:bx--tabs--contained="{type === 'container'}"
|
||||||
class:bx--tabs--scrollable--container="{type === 'container'}"
|
|
||||||
{...$$restProps}
|
{...$$restProps}
|
||||||
on:click
|
on:click
|
||||||
on:mouseover
|
on:mouseover
|
||||||
on:mouseenter
|
on:mouseenter
|
||||||
on:mouseleave
|
on:mouseleave
|
||||||
>
|
>
|
||||||
<ul class:bx--tabs--scrollable__nav="{true}">
|
<div class:bx--tab--list="{true}">
|
||||||
{#each Array.from({ length: count }, (_, i) => i) as item}
|
{#each Array.from({ length: count }, (_, i) => i) as item}
|
||||||
<li class:bx--tabs--scrollable__nav-item="{true}">
|
<span class:bx--tabs__nav-item="{true}" class:bx--tabs__nav-link="{true}">
|
||||||
<div class:bx--tabs__nav-link="{true}">
|
<span></span>
|
||||||
<span></span>
|
</span>
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
{/each}
|
{/each}
|
||||||
</ul>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
26
types/Tabs/Tab.svelte.d.ts
vendored
26
types/Tabs/Tab.svelte.d.ts
vendored
|
@ -2,7 +2,7 @@
|
||||||
import type { SvelteComponentTyped } from "svelte";
|
import type { SvelteComponentTyped } from "svelte";
|
||||||
|
|
||||||
export interface TabProps
|
export interface TabProps
|
||||||
extends svelte.JSX.HTMLAttributes<HTMLElementTagNameMap["li"]> {
|
extends svelte.JSX.HTMLAttributes<HTMLElementTagNameMap["a"]> {
|
||||||
/**
|
/**
|
||||||
* Specify the tab label
|
* Specify the tab label
|
||||||
* Alternatively, use the default slot (e.g., <Tab><span>Label</span></Tab>)
|
* Alternatively, use the default slot (e.g., <Tab><span>Label</span></Tab>)
|
||||||
|
@ -39,6 +39,30 @@ export interface TabProps
|
||||||
* @default null
|
* @default null
|
||||||
*/
|
*/
|
||||||
ref?: null | HTMLAnchorElement;
|
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<
|
export default class Tab extends SvelteComponentTyped<
|
||||||
|
|
6
types/Tabs/Tabs.svelte.d.ts
vendored
6
types/Tabs/Tabs.svelte.d.ts
vendored
|
@ -36,10 +36,6 @@ export interface TabsProps
|
||||||
|
|
||||||
export default class Tabs extends SvelteComponentTyped<
|
export default class Tabs extends SvelteComponentTyped<
|
||||||
TabsProps,
|
TabsProps,
|
||||||
{
|
{ change: CustomEvent<any> },
|
||||||
keypress: WindowEventMap["keypress"];
|
|
||||||
click: WindowEventMap["click"];
|
|
||||||
change: CustomEvent<any>;
|
|
||||||
},
|
|
||||||
{ default: {}; content: {} }
|
{ default: {}; content: {} }
|
||||||
> {}
|
> {}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue