mirror of
https://github.com/carbon-design-system/carbon-components-svelte.git
synced 2025-09-14 18:01:06 +00:00
* chore(deps-dev): bump devDependencies * docs: update number of available carbon icons * feat(notification): distinguish dispatched close event between click/timeout * fix(notification): prevent class from being overriden by $$restProps * docs(notification): improve example body copy * fix(notification): remove notificationType prop * refactor(notification): resolve svelte file in imports * fix(notification): prevent class from being overridden by $$restProps * feat(notification): update TS signature for dispatched close event * docs: update contributing * fix(loading): adjust spinner styles * feat(tag): support custom icon variant * feat(tile): add optional expand/collapse icon labels to ExpandableTile * feat(code-snippet): support disabled state for single and multi-line types * fix(code-snippet): remove impossible class directive * fix(code-snippet): showMoreLess button size should be "field", not "small" * fix(password-input): disable visibility button - set default values for tooltipAlignment, tooltipPosition * fix(text-input): add missing warning field wrapper class * feat(button): infer hasIconOnly using $$slots API - requires Svelte version >=3.25 * docs(button): add danger tertiary, icon-only example * feat(button): set default values for tooltip alignment, position * docs: document dynamic theming * fix(modal): correctly set class props #482 * fix(form): forward submit event in FluidForm #487 * feat(dropdown): support warning state * feat(multi-select): support warning state * fix(multi-select): prevent dropdown from opening if disabled * feat(number-input): support warning state * chore(deps-dev): upgrade devDependencies * docs: bump @carbon/themes, carbon-components * refactor(data-table): co-locate DataTableSkeleton with DataTable * docs: update number of pictograms * fix(password-input): add missing "bx--btn" class to visibility toggle * docs: increase z-index for component preview
101 lines
2.7 KiB
Svelte
101 lines
2.7 KiB
Svelte
<script>
|
|
/**
|
|
* @event {{ timeout: boolean }} close
|
|
*/
|
|
|
|
/**
|
|
* Specify the kind of notification
|
|
* @type {"error" | "info" | "info-square" | "success" | "warning" | "warning-alt"}
|
|
*/
|
|
export let kind = "error";
|
|
|
|
/** Set to `true` to use the low contrast variant */
|
|
export let lowContrast = false;
|
|
|
|
/** Set the timeout duration (ms) to hide the notification after opening it */
|
|
export let timeout = 0;
|
|
|
|
/** Set the `role` attribute */
|
|
export let role = "alert";
|
|
|
|
/** Specify the title text */
|
|
export let title = "Title";
|
|
|
|
/** Specify the subtitle text */
|
|
export let subtitle = "";
|
|
|
|
/** Set to `true` to hide the close button */
|
|
export let hideCloseButton = false;
|
|
|
|
/** Specify the ARIA label for the icon */
|
|
export let iconDescription = "Closes notification";
|
|
|
|
import { createEventDispatcher, onMount } from "svelte";
|
|
import NotificationIcon from "./NotificationIcon.svelte";
|
|
import NotificationTextDetails from "./NotificationTextDetails.svelte";
|
|
import NotificationButton from "./NotificationButton.svelte";
|
|
|
|
const dispatch = createEventDispatcher();
|
|
|
|
let open = true;
|
|
let timeoutId = undefined;
|
|
|
|
function close(closeFromTimeout) {
|
|
open = false;
|
|
dispatch("close", { timeout: closeFromTimeout === true });
|
|
}
|
|
|
|
onMount(() => {
|
|
if (timeout) {
|
|
timeoutId = setTimeout(() => close(true), timeout);
|
|
}
|
|
|
|
return () => {
|
|
clearTimeout(timeoutId);
|
|
};
|
|
});
|
|
</script>
|
|
|
|
{#if open}
|
|
<div
|
|
role="{role}"
|
|
kind="{kind}"
|
|
class:bx--inline-notification="{true}"
|
|
class:bx--inline-notification--low-contrast="{lowContrast}"
|
|
class:bx--inline-notification--hide-close-button="{hideCloseButton}"
|
|
class:bx--inline-notification--error="{kind === 'error'}"
|
|
class:bx--inline-notification--info="{kind === 'info'}"
|
|
class:bx--inline-notification--info-square="{kind === 'info-square'}"
|
|
class:bx--inline-notification--success="{kind === 'success'}"
|
|
class:bx--inline-notification--warning="{kind === 'warning'}"
|
|
class:bx--inline-notification--warning-alt="{kind === 'warning-alt'}"
|
|
{...$$restProps}
|
|
on:click
|
|
on:mouseover
|
|
on:mouseenter
|
|
on:mouseleave
|
|
>
|
|
<div class:bx--inline-notification__details="{true}">
|
|
<NotificationIcon
|
|
notificationType="inline"
|
|
kind="{kind}"
|
|
iconDescription="{iconDescription}"
|
|
/>
|
|
<NotificationTextDetails
|
|
title="{title}"
|
|
subtitle="{subtitle}"
|
|
notificationType="inline"
|
|
>
|
|
<slot />
|
|
</NotificationTextDetails>
|
|
</div>
|
|
<slot name="actions" />
|
|
{#if !hideCloseButton}
|
|
<NotificationButton
|
|
iconDescription="{iconDescription}"
|
|
notificationType="inline"
|
|
on:click="{close}"
|
|
/>
|
|
{/if}
|
|
</div>
|
|
{/if}
|