feat: make icons slottable (#1186)

This commit is contained in:
metonym 2022-03-19 11:37:20 -07:00 committed by GitHub
commit e23b121143
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 139 additions and 46 deletions

View file

@ -861,8 +861,9 @@ None.
### Slots ### Slots
| Slot name | Default | Props | Fallback | | Slot name | Default | Props | Fallback |
| :----------- | :------ | :---- | :-------------------------- | | :----------- | :------ | :---- | :---------------------------------------------------- |
| -- | Yes | -- | -- | | -- | Yes | -- | -- |
| icon | No | -- | <code>&lt;svelte:component this="{icon}" /&gt;</code> |
| labelText | No | -- | <code>{labelText}</code> | | labelText | No | -- | <code>{labelText}</code> |
| shortcutText | No | -- | <code>{shortcutText}</code> | | shortcutText | No | -- | <code>{shortcutText}</code> |
@ -1631,6 +1632,8 @@ None.
| Slot name | Default | Props | Fallback | | Slot name | Default | Props | Fallback |
| :-------- | :------ | :---- | :---------------------------------------------------------- | | :-------- | :------ | :---- | :---------------------------------------------------------- |
| -- | Yes | -- | -- | | -- | Yes | -- | -- |
| closeIcon | No | -- | <code>&lt;svelte:component this="{closeIcon}" /&gt;</code> |
| icon | No | -- | <code>&lt;svelte:component this="{icon}" /&gt;</code> |
| text | No | -- | <code>{#if text}&lt;span&gt;{text}&lt;/span&gt;{/if}</code> | | text | No | -- | <code>{#if text}&lt;span&gt;{text}&lt;/span&gt;{/if}</code> |
### Events ### Events
@ -1653,7 +1656,9 @@ None.
### Slots ### Slots
None. | Slot name | Default | Props | Fallback |
| :-------- | :------ | :---- | :---------------------------------------------------- |
| icon | No | -- | <code>&lt;svelte:component this="{icon}" /&gt;</code> |
### Events ### Events
@ -2036,8 +2041,9 @@ None.
### Slots ### Slots
| Slot name | Default | Props | Fallback | | Slot name | Default | Props | Fallback |
| :-------- | :------ | :---- | :------- | | :-------- | :------ | :---- | :---------------------------------------------------- |
| -- | Yes | -- | -- | | -- | Yes | -- | -- |
| icon | No | -- | <code>&lt;svelte:component this="{icon}" /&gt;</code> |
### Events ### Events
@ -3436,7 +3442,9 @@ None.
### Slots ### Slots
None. | Slot name | Default | Props | Fallback |
| :-------- | :------ | :---- | :---------------------------------------------------- |
| icon | No | -- | <code>&lt;svelte:component this="{icon}" /&gt;</code> |
### Events ### Events
@ -3458,8 +3466,9 @@ None.
### Slots ### Slots
| Slot name | Default | Props | Fallback | | Slot name | Default | Props | Fallback |
| :-------- | :------ | :---- | :------- | | :-------- | :------ | :---- | :---------------------------------------------------- |
| -- | Yes | -- | -- | | -- | Yes | -- | -- |
| icon | No | -- | <code>&lt;svelte:component this="{icon}" /&gt;</code> |
### Events ### Events
@ -4069,8 +4078,9 @@ None.
### Slots ### Slots
| Slot name | Default | Props | Fallback | | Slot name | Default | Props | Fallback |
| :-------- | :------ | :----------------------------------------------------- | :------- | | :-------- | :------ | :----------------------------------------------------- | :---------------------------------------------------- |
| -- | Yes | <code>{ props: { class: 'bx--tag\_\_label' } } </code> | -- | | -- | Yes | <code>{ props: { class: 'bx--tag\_\_label' } } </code> | -- |
| icon | No | -- | <code>&lt;svelte:component this="{icon}" /&gt;</code> |
### Events ### Events

View file

@ -2075,6 +2075,12 @@
"moduleExports": [], "moduleExports": [],
"slots": [ "slots": [
{ "name": "__default__", "default": true, "slot_props": "{}" }, { "name": "__default__", "default": true, "slot_props": "{}" },
{
"name": "icon",
"default": false,
"fallback": "<svelte:component this=\"{icon}\" />",
"slot_props": "{}"
},
{ {
"name": "labelText", "name": "labelText",
"default": false, "default": false,
@ -4621,6 +4627,18 @@
"moduleExports": [], "moduleExports": [],
"slots": [ "slots": [
{ "name": "__default__", "default": true, "slot_props": "{}" }, { "name": "__default__", "default": true, "slot_props": "{}" },
{
"name": "closeIcon",
"default": false,
"fallback": "<svelte:component this=\"{closeIcon}\" />",
"slot_props": "{}"
},
{
"name": "icon",
"default": false,
"fallback": "<svelte:component this=\"{icon}\" />",
"slot_props": "{}"
},
{ {
"name": "text", "name": "text",
"default": false, "default": false,
@ -4683,7 +4701,14 @@
} }
], ],
"moduleExports": [], "moduleExports": [],
"slots": [], "slots": [
{
"name": "icon",
"default": false,
"fallback": "<svelte:component this=\"{icon}\" />",
"slot_props": "{}"
}
],
"events": [], "events": [],
"typedefs": [], "typedefs": [],
"rest_props": { "type": "Element", "name": "a" } "rest_props": { "type": "Element", "name": "a" }
@ -5507,7 +5532,15 @@
} }
], ],
"moduleExports": [], "moduleExports": [],
"slots": [{ "name": "__default__", "default": true, "slot_props": "{}" }], "slots": [
{ "name": "__default__", "default": true, "slot_props": "{}" },
{
"name": "icon",
"default": false,
"fallback": "<svelte:component this=\"{icon}\" />",
"slot_props": "{}"
}
],
"events": [ "events": [
{ "type": "forwarded", "name": "click", "element": "p" }, { "type": "forwarded", "name": "click", "element": "p" },
{ "type": "forwarded", "name": "mouseover", "element": "p" }, { "type": "forwarded", "name": "mouseover", "element": "p" },
@ -10117,7 +10150,14 @@
} }
], ],
"moduleExports": [], "moduleExports": [],
"slots": [], "slots": [
{
"name": "icon",
"default": false,
"fallback": "<svelte:component this=\"{icon}\" />",
"slot_props": "{}"
}
],
"events": [{ "type": "forwarded", "name": "click", "element": "a" }], "events": [{ "type": "forwarded", "name": "click", "element": "a" }],
"typedefs": [], "typedefs": [],
"rest_props": { "type": "Element", "name": "a" } "rest_props": { "type": "Element", "name": "a" }
@ -10170,7 +10210,15 @@
} }
], ],
"moduleExports": [], "moduleExports": [],
"slots": [{ "name": "__default__", "default": true, "slot_props": "{}" }], "slots": [
{ "name": "__default__", "default": true, "slot_props": "{}" },
{
"name": "icon",
"default": false,
"fallback": "<svelte:component this=\"{icon}\" />",
"slot_props": "{}"
}
],
"events": [{ "type": "forwarded", "name": "click", "element": "button" }], "events": [{ "type": "forwarded", "name": "click", "element": "button" }],
"typedefs": [], "typedefs": [],
"rest_props": { "type": "Element", "name": "button" } "rest_props": { "type": "Element", "name": "button" }
@ -11546,6 +11594,12 @@
"name": "__default__", "name": "__default__",
"default": true, "default": true,
"slot_props": "{ props: { class: 'bx--tag__label' } }" "slot_props": "{ props: { class: 'bx--tag__label' } }"
},
{
"name": "icon",
"default": false,
"fallback": "<svelte:component this=\"{icon}\" />",
"slot_props": "{}"
} }
], ],
"events": [ "events": [

View file

@ -245,7 +245,9 @@
> >
{#if indented} {#if indented}
<div class:bx--menu-option__icon="{true}"> <div class:bx--menu-option__icon="{true}">
<slot name="icon">
<svelte:component this="{icon}" /> <svelte:component this="{icon}" />
</slot>
</div> </div>
{/if} {/if}
<span class:bx--menu-option__label="{true}" title="{labelText}"> <span class:bx--menu-option__label="{true}" title="{labelText}">
@ -268,7 +270,9 @@
> >
{#if indented} {#if indented}
<div class:bx--menu-option__icon="{true}"> <div class:bx--menu-option__icon="{true}">
<slot name="icon">
<svelte:component this="{icon}" /> <svelte:component this="{icon}" />
</slot>
</div> </div>
{/if} {/if}
<span class:bx--menu-option__label="{true}" title="{labelText}"> <span class:bx--menu-option__label="{true}" title="{labelText}">

View file

@ -45,9 +45,14 @@
on:mouseenter on:mouseenter
on:mouseleave on:mouseleave
> >
<slot />{#if !inline && icon}<div class:bx--link__icon="{true}"> <slot />
{#if !inline && ($$slots.icon || icon)}
<div class:bx--link__icon="{true}">
<slot name="icon">
<svelte:component this="{icon}" /> <svelte:component this="{icon}" />
</div>{/if} </slot>
</div>
{/if}
</p> </p>
{:else} {:else}
<a <a
@ -65,8 +70,14 @@
on:mouseover on:mouseover
on:mouseenter on:mouseenter
on:mouseleave on:mouseleave
><slot />{#if !inline && icon}<div class:bx--link__icon="{true}">
<svelte:component this="{icon}" />
</div>{/if}</a
> >
<slot />
{#if !inline && ($$slots.icon || icon)}
<div class:bx--link__icon="{true}">
<slot name="icon">
<svelte:component this="{icon}" />
</slot>
</div>
{/if}
</a>
{/if} {/if}

View file

@ -120,9 +120,11 @@
on:mouseenter on:mouseenter
on:mouseleave on:mouseleave
> >
{#if icon} {#if $$slots.icon || icon}
<div class:bx--tag__custom-icon="{true}"> <div class:bx--tag__custom-icon="{true}">
<slot name="icon">
<svelte:component this="{icon}" /> <svelte:component this="{icon}" />
</slot>
</div> </div>
{/if} {/if}
<span> <span>
@ -153,9 +155,11 @@
on:mouseenter on:mouseenter
on:mouseleave on:mouseleave
> >
{#if icon} {#if $$slots.icon || icon}
<div class:bx--tag__custom-icon="{true}"> <div class:bx--tag__custom-icon="{true}">
<slot name="icon">
<svelte:component this="{icon}" /> <svelte:component this="{icon}" />
</slot>
</div> </div>
{/if} {/if}
<span> <span>

View file

@ -64,9 +64,13 @@
}}" }}"
> >
{#if isOpen} {#if isOpen}
<slot name="closeIcon">
<svelte:component this="{closeIcon}" /> <svelte:component this="{closeIcon}" />
</slot>
{:else} {:else}
<slot name="icon">
<svelte:component this="{icon}" /> <svelte:component this="{icon}" />
</slot>
{/if} {/if}
<slot name="text"> <slot name="text">
{#if text}<span>{text}</span>{/if} {#if text}<span>{text}</span>{/if}

View file

@ -26,7 +26,9 @@
rel="{$$restProps.target === '_blank' ? 'noopener noreferrer' : undefined}" rel="{$$restProps.target === '_blank' ? 'noopener noreferrer' : undefined}"
{...$$restProps} {...$$restProps}
> >
<slot name="icon">
<svelte:component this="{icon}" /> <svelte:component this="{icon}" />
</slot>
</a> </a>
<style> <style>

View file

@ -35,12 +35,14 @@
{...$$restProps} {...$$restProps}
on:click on:click
> >
{#if icon} {#if $$slots.icon || icon}
<div <div
class:bx--side-nav__icon="{true}" class:bx--side-nav__icon="{true}"
class:bx--side-nav__icon--small="{true}" class:bx--side-nav__icon--small="{true}"
> >
<slot name="icon">
<svelte:component this="{icon}" /> <svelte:component this="{icon}" />
</slot>
</div> </div>
{/if} {/if}
<span class:bx--side-nav__link-text="{true}">{text}</span> <span class:bx--side-nav__link-text="{true}">{text}</span>

View file

@ -32,9 +32,11 @@
expanded = !expanded; expanded = !expanded;
}}" }}"
> >
{#if icon} {#if $$slots.icon || icon}
<div class:bx--side-nav__icon="{true}"> <div class:bx--side-nav__icon="{true}">
<slot name="icon">
<svelte:component this="{icon}" /> <svelte:component this="{icon}" />
</slot>
</div> </div>
{/if} {/if}
<span class:bx--side-nav__submenu-title="{true}">{text}</span> <span class:bx--side-nav__submenu-title="{true}">{text}</span>

View file

@ -77,5 +77,5 @@ export default class ContextMenuOption extends SvelteComponentTyped<
mouseleave: WindowEventMap["mouseleave"]; mouseleave: WindowEventMap["mouseleave"];
click: CustomEvent<any>; click: CustomEvent<any>;
}, },
{ default: {}; labelText: {}; shortcutText: {} } { default: {}; icon: {}; labelText: {}; shortcutText: {} }
> {} > {}

View file

@ -55,5 +55,5 @@ export default class Link extends SvelteComponentTyped<
mouseenter: WindowEventMap["mouseenter"]; mouseenter: WindowEventMap["mouseenter"];
mouseleave: WindowEventMap["mouseleave"]; mouseleave: WindowEventMap["mouseleave"];
}, },
{ default: {} } { default: {}; icon: {} }
> {} > {}

View file

@ -79,5 +79,5 @@ export default class Tag extends SvelteComponentTyped<
mouseleave: WindowEventMap["mouseleave"]; mouseleave: WindowEventMap["mouseleave"];
close: CustomEvent<any>; close: CustomEvent<any>;
}, },
{ default: { props: { class: "bx--tag__label" } } } { default: { props: { class: "bx--tag__label" } }; icon: {} }
> {} > {}

View file

@ -45,5 +45,5 @@ export interface HeaderActionProps
export default class HeaderAction extends SvelteComponentTyped< export default class HeaderAction extends SvelteComponentTyped<
HeaderActionProps, HeaderActionProps,
{ click: WindowEventMap["click"]; close: CustomEvent<any> }, { click: WindowEventMap["click"]; close: CustomEvent<any> },
{ default: {}; text: {} } { default: {}; closeIcon: {}; icon: {}; text: {} }
> {} > {}

View file

@ -31,5 +31,5 @@ export interface HeaderActionLinkProps
export default class HeaderActionLink extends SvelteComponentTyped< export default class HeaderActionLink extends SvelteComponentTyped<
HeaderActionLinkProps, HeaderActionLinkProps,
{}, {},
{} { icon: {} }
> {} > {}

View file

@ -37,5 +37,5 @@ export interface SideNavLinkProps
export default class SideNavLink extends SvelteComponentTyped< export default class SideNavLink extends SvelteComponentTyped<
SideNavLinkProps, SideNavLinkProps,
{ click: WindowEventMap["click"] }, { click: WindowEventMap["click"] },
{} { icon: {} }
> {} > {}

View file

@ -31,5 +31,5 @@ export interface SideNavMenuProps
export default class SideNavMenu extends SvelteComponentTyped< export default class SideNavMenu extends SvelteComponentTyped<
SideNavMenuProps, SideNavMenuProps,
{ click: WindowEventMap["click"] }, { click: WindowEventMap["click"] },
{ default: {} } { default: {}; icon: {} }
> {} > {}