@ukic/web-components 3.25.0 → 3.27.0
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.
- package/components/OpenInNew.js +5 -0
- package/components/OpenInNew.js.map +1 -0
- package/components/check-icon.js +8 -0
- package/components/check-icon.js.map +1 -0
- package/components/chevron-icon.js +8 -0
- package/components/chevron-icon.js.map +1 -0
- package/components/close-icon.js +10 -0
- package/components/close-icon.js.map +1 -0
- package/components/constants.js +184 -0
- package/components/constants.js.map +1 -0
- package/components/custom-elements.d.ts +2 -0
- package/components/helpers.js +547 -0
- package/components/helpers.js.map +1 -0
- package/components/ic-accordion-group.d.ts +11 -0
- package/components/ic-accordion-group.js +191 -0
- package/components/ic-accordion-group.js.map +1 -0
- package/components/ic-accordion.d.ts +11 -0
- package/components/ic-accordion.js +188 -0
- package/components/ic-accordion.js.map +1 -0
- package/components/ic-action-chip.d.ts +11 -0
- package/components/ic-action-chip.js +164 -0
- package/components/ic-action-chip.js.map +1 -0
- package/components/ic-alert.d.ts +11 -0
- package/components/ic-alert.js +193 -0
- package/components/ic-alert.js.map +1 -0
- package/components/ic-back-to-top.d.ts +11 -0
- package/components/ic-back-to-top.js +216 -0
- package/components/ic-back-to-top.js.map +1 -0
- package/components/ic-badge.d.ts +11 -0
- package/components/ic-badge.js +222 -0
- package/components/ic-badge.js.map +1 -0
- package/components/ic-breadcrumb-group.d.ts +11 -0
- package/components/ic-breadcrumb-group.js +278 -0
- package/components/ic-breadcrumb-group.js.map +1 -0
- package/components/ic-breadcrumb.d.ts +11 -0
- package/components/ic-breadcrumb.js +8 -0
- package/components/ic-breadcrumb.js.map +1 -0
- package/components/ic-breadcrumb2.js +145 -0
- package/components/ic-breadcrumb2.js.map +1 -0
- package/components/ic-button.d.ts +11 -0
- package/components/ic-button.js +8 -0
- package/components/ic-button.js.map +1 -0
- package/components/ic-button2.js +509 -0
- package/components/ic-button2.js.map +1 -0
- package/components/ic-card-horizontal.d.ts +11 -0
- package/components/ic-card-horizontal.js +214 -0
- package/components/ic-card-horizontal.js.map +1 -0
- package/components/ic-card-vertical.d.ts +11 -0
- package/components/ic-card-vertical.js +219 -0
- package/components/ic-card-vertical.js.map +1 -0
- package/components/ic-checkbox-group.d.ts +11 -0
- package/components/ic-checkbox-group.js +198 -0
- package/components/ic-checkbox-group.js.map +1 -0
- package/components/ic-checkbox.d.ts +11 -0
- package/components/ic-checkbox.js +202 -0
- package/components/ic-checkbox.js.map +1 -0
- package/components/ic-chip.d.ts +11 -0
- package/components/ic-chip.js +183 -0
- package/components/ic-chip.js.map +1 -0
- package/components/ic-classification-banner.d.ts +11 -0
- package/components/ic-classification-banner.js +102 -0
- package/components/ic-classification-banner.js.map +1 -0
- package/components/ic-data-list.d.ts +11 -0
- package/components/ic-data-list.js +63 -0
- package/components/ic-data-list.js.map +1 -0
- package/components/ic-data-row.d.ts +11 -0
- package/components/ic-data-row.js +115 -0
- package/components/ic-data-row.js.map +1 -0
- package/components/ic-dialog.d.ts +11 -0
- package/components/ic-dialog.js +366 -0
- package/components/ic-dialog.js.map +1 -0
- package/components/ic-divider.d.ts +11 -0
- package/components/ic-divider.js +8 -0
- package/components/ic-divider.js.map +1 -0
- package/components/ic-divider2.js +148 -0
- package/components/ic-divider2.js.map +1 -0
- package/components/ic-empty-state.d.ts +11 -0
- package/components/ic-empty-state.js +82 -0
- package/components/ic-empty-state.js.map +1 -0
- package/components/ic-footer-link-group.d.ts +11 -0
- package/components/ic-footer-link-group.js +101 -0
- package/components/ic-footer-link-group.js.map +1 -0
- package/components/ic-footer-link.d.ts +11 -0
- package/components/ic-footer-link.js +95 -0
- package/components/ic-footer-link.js.map +1 -0
- package/components/ic-footer.d.ts +11 -0
- package/components/ic-footer.js +156 -0
- package/components/ic-footer.js.map +1 -0
- package/components/ic-hero.d.ts +11 -0
- package/components/ic-hero.js +145 -0
- package/components/ic-hero.js.map +1 -0
- package/components/ic-horizontal-scroll.d.ts +11 -0
- package/components/ic-horizontal-scroll.js +8 -0
- package/components/ic-horizontal-scroll.js.map +1 -0
- package/components/ic-horizontal-scroll2.js +240 -0
- package/components/ic-horizontal-scroll2.js.map +1 -0
- package/components/ic-input-component-container.d.ts +11 -0
- package/components/ic-input-component-container.js +8 -0
- package/components/ic-input-component-container.js.map +1 -0
- package/components/ic-input-component-container2.js +95 -0
- package/components/ic-input-component-container2.js.map +1 -0
- package/components/ic-input-container.d.ts +11 -0
- package/components/ic-input-container.js +8 -0
- package/components/ic-input-container.js.map +1 -0
- package/components/ic-input-container2.js +47 -0
- package/components/ic-input-container2.js.map +1 -0
- package/components/ic-input-label.d.ts +11 -0
- package/components/ic-input-label.js +8 -0
- package/components/ic-input-label.js.map +1 -0
- package/components/ic-input-label2.js +121 -0
- package/components/ic-input-label2.js.map +1 -0
- package/components/ic-input-validation.d.ts +11 -0
- package/components/ic-input-validation.js +8 -0
- package/components/ic-input-validation.js.map +1 -0
- package/components/ic-input-validation2.js +90 -0
- package/components/ic-input-validation2.js.map +1 -0
- package/components/ic-layout-grid-item.d.ts +11 -0
- package/components/ic-layout-grid-item.js +95 -0
- package/components/ic-layout-grid-item.js.map +1 -0
- package/components/ic-layout-grid.d.ts +11 -0
- package/components/ic-layout-grid.js +188 -0
- package/components/ic-layout-grid.js.map +1 -0
- package/components/ic-link.d.ts +11 -0
- package/components/ic-link.js +8 -0
- package/components/ic-link.js.map +1 -0
- package/components/ic-link2.js +135 -0
- package/components/ic-link2.js.map +1 -0
- package/components/ic-loading-indicator.d.ts +11 -0
- package/components/ic-loading-indicator.js +8 -0
- package/components/ic-loading-indicator.js.map +1 -0
- package/components/ic-loading-indicator2.js +278 -0
- package/components/ic-loading-indicator2.js.map +1 -0
- package/components/ic-menu-group.d.ts +11 -0
- package/components/ic-menu-group.js +47 -0
- package/components/ic-menu-group.js.map +1 -0
- package/components/ic-menu-item.d.ts +11 -0
- package/components/ic-menu-item.js +8 -0
- package/components/ic-menu-item.js.map +1 -0
- package/components/ic-menu-item2.js +171 -0
- package/components/ic-menu-item2.js.map +1 -0
- package/components/ic-menu.d.ts +11 -0
- package/components/ic-menu.js +8 -0
- package/components/ic-menu.js.map +1 -0
- package/components/ic-menu2.js +2590 -0
- package/components/ic-menu2.js.map +1 -0
- package/components/ic-navigation-button.d.ts +11 -0
- package/components/ic-navigation-button.js +175 -0
- package/components/ic-navigation-button.js.map +1 -0
- package/components/ic-navigation-group.d.ts +11 -0
- package/components/ic-navigation-group.js +326 -0
- package/components/ic-navigation-group.js.map +1 -0
- package/components/ic-navigation-item.d.ts +11 -0
- package/components/ic-navigation-item.js +294 -0
- package/components/ic-navigation-item.js.map +1 -0
- package/components/ic-navigation-menu.d.ts +11 -0
- package/components/ic-navigation-menu.js +8 -0
- package/components/ic-navigation-menu.js.map +1 -0
- package/components/ic-navigation-menu2.js +188 -0
- package/components/ic-navigation-menu2.js.map +1 -0
- package/components/ic-page-header.d.ts +11 -0
- package/components/ic-page-header.js +196 -0
- package/components/ic-page-header.js.map +1 -0
- package/components/ic-pagination-bar.d.ts +11 -0
- package/components/ic-pagination-bar.js +523 -0
- package/components/ic-pagination-bar.js.map +1 -0
- package/components/ic-pagination-item.d.ts +11 -0
- package/components/ic-pagination-item.js +8 -0
- package/components/ic-pagination-item.js.map +1 -0
- package/components/ic-pagination-item2.js +107 -0
- package/components/ic-pagination-item2.js.map +1 -0
- package/components/ic-pagination.d.ts +11 -0
- package/components/ic-pagination.js +8 -0
- package/components/ic-pagination.js.map +1 -0
- package/components/ic-pagination2.js +379 -0
- package/components/ic-pagination2.js.map +1 -0
- package/components/ic-popover-menu.d.ts +11 -0
- package/components/ic-popover-menu.js +369 -0
- package/components/ic-popover-menu.js.map +1 -0
- package/components/ic-radio-group.d.ts +11 -0
- package/components/ic-radio-group.js +317 -0
- package/components/ic-radio-group.js.map +1 -0
- package/components/ic-radio-option.d.ts +11 -0
- package/components/ic-radio-option.js +211 -0
- package/components/ic-radio-option.js.map +1 -0
- package/components/ic-search-bar.d.ts +11 -0
- package/components/ic-search-bar.js +719 -0
- package/components/ic-search-bar.js.map +1 -0
- package/components/ic-section-container.d.ts +11 -0
- package/components/ic-section-container.js +8 -0
- package/components/ic-section-container.js.map +1 -0
- package/components/ic-section-container2.js +50 -0
- package/components/ic-section-container2.js.map +1 -0
- package/components/ic-select.d.ts +11 -0
- package/components/ic-select.js +8 -0
- package/components/ic-select.js.map +1 -0
- package/components/ic-select2.js +806 -0
- package/components/ic-select2.js.map +1 -0
- package/components/ic-side-navigation.d.ts +11 -0
- package/components/ic-side-navigation.js +568 -0
- package/components/ic-side-navigation.js.map +1 -0
- package/components/ic-skeleton.d.ts +11 -0
- package/components/ic-skeleton.js +81 -0
- package/components/ic-skeleton.js.map +1 -0
- package/components/ic-skip-link.d.ts +11 -0
- package/components/ic-skip-link.js +91 -0
- package/components/ic-skip-link.js.map +1 -0
- package/components/ic-status-tag.d.ts +11 -0
- package/components/ic-status-tag.js +85 -0
- package/components/ic-status-tag.js.map +1 -0
- package/components/ic-step.d.ts +11 -0
- package/components/ic-step.js +200 -0
- package/components/ic-step.js.map +1 -0
- package/components/ic-stepper.d.ts +11 -0
- package/components/ic-stepper.js +340 -0
- package/components/ic-stepper.js.map +1 -0
- package/components/ic-switch.d.ts +11 -0
- package/components/ic-switch.js +164 -0
- package/components/ic-switch.js.map +1 -0
- package/components/ic-tab-context.d.ts +11 -0
- package/components/ic-tab-context.js +275 -0
- package/components/ic-tab-context.js.map +1 -0
- package/components/ic-tab-group.d.ts +11 -0
- package/components/ic-tab-group.js +89 -0
- package/components/ic-tab-group.js.map +1 -0
- package/components/ic-tab-panel.d.ts +11 -0
- package/components/ic-tab-panel.js +63 -0
- package/components/ic-tab-panel.js.map +1 -0
- package/components/ic-tab.d.ts +11 -0
- package/components/ic-tab.js +143 -0
- package/components/ic-tab.js.map +1 -0
- package/components/ic-text-field.d.ts +11 -0
- package/components/ic-text-field.js +8 -0
- package/components/ic-text-field.js.map +1 -0
- package/components/ic-text-field2.js +532 -0
- package/components/ic-text-field2.js.map +1 -0
- package/components/ic-theme.d.ts +11 -0
- package/components/ic-theme.js +105 -0
- package/components/ic-theme.js.map +1 -0
- package/components/ic-toast-region.d.ts +11 -0
- package/components/ic-toast-region.js +76 -0
- package/components/ic-toast-region.js.map +1 -0
- package/components/ic-toast.d.ts +11 -0
- package/components/ic-toast.js +295 -0
- package/components/ic-toast.js.map +1 -0
- package/components/ic-toggle-button-group.d.ts +11 -0
- package/components/ic-toggle-button-group.js +323 -0
- package/components/ic-toggle-button-group.js.map +1 -0
- package/components/ic-toggle-button.d.ts +11 -0
- package/components/ic-toggle-button.js +235 -0
- package/components/ic-toggle-button.js.map +1 -0
- package/components/ic-tooltip.d.ts +11 -0
- package/components/ic-tooltip.js +8 -0
- package/components/ic-tooltip.js.map +1 -0
- package/components/ic-tooltip2.js +2078 -0
- package/components/ic-tooltip2.js.map +1 -0
- package/components/ic-top-navigation.d.ts +11 -0
- package/components/ic-top-navigation.js +320 -0
- package/components/ic-top-navigation.js.map +1 -0
- package/components/ic-typography.d.ts +11 -0
- package/components/ic-typography.js +8 -0
- package/components/ic-typography.js.map +1 -0
- package/components/ic-typography2.js +228 -0
- package/components/ic-typography2.js.map +1 -0
- package/components/index.d.ts +33 -0
- package/components/index.js +4 -0
- package/components/index.js.map +1 -0
- package/components/package.json +9 -0
- package/dist/cjs/core.cjs.js +1 -1
- package/dist/cjs/ic-button_3.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-input-component-container_3.cjs.entry.js +63 -37
- package/dist/cjs/ic-input-component-container_3.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-pagination_3.cjs.entry.js +17 -17
- package/dist/cjs/ic-pagination_3.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-section-container.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-top-navigation.cjs.entry.js +12 -8
- package/dist/cjs/ic-top-navigation.cjs.entry.js.map +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/components/ic-menu/ic-menu.css +19 -0
- package/dist/collection/components/ic-menu/ic-menu.js +62 -36
- package/dist/collection/components/ic-menu/ic-menu.js.map +1 -1
- package/dist/collection/components/ic-menu/ic-menu.types.js.map +1 -1
- package/dist/collection/components/ic-select/ic-select.js +17 -17
- package/dist/collection/components/ic-select/ic-select.js.map +1 -1
- package/dist/collection/components/ic-select/ic-select_(single).stories.js +54 -0
- package/dist/collection/components/ic-top-navigation/ic-top-navigation.js +33 -9
- package/dist/collection/components/ic-top-navigation/ic-top-navigation.js.map +1 -1
- package/dist/collection/components/ic-top-navigation/ic-top-navigation.stories.js +26 -0
- package/dist/components/ic-menu2.js +63 -37
- package/dist/components/ic-menu2.js.map +1 -1
- package/dist/components/ic-page-header.js.map +1 -1
- package/dist/components/ic-popover-menu.js.map +1 -1
- package/dist/components/ic-radio-group.js.map +1 -1
- package/dist/components/ic-radio-option.js.map +1 -1
- package/dist/components/ic-select2.js +17 -17
- package/dist/components/ic-select2.js.map +1 -1
- package/dist/components/ic-top-navigation.js +13 -8
- package/dist/components/ic-top-navigation.js.map +1 -1
- package/dist/core/core.esm.js +1 -1
- package/dist/core/core.esm.js.map +1 -1
- package/dist/core/{p-46e5a58b.entry.js → p-12474095.entry.js} +2 -2
- package/dist/core/p-12474095.entry.js.map +1 -0
- package/dist/core/p-98dee727.entry.js.map +1 -1
- package/dist/core/p-d1220d2a.entry.js.map +1 -1
- package/dist/core/p-e0b66371.entry.js +2 -0
- package/dist/core/p-e0b66371.entry.js.map +1 -0
- package/dist/core/{p-171a19bf.entry.js → p-fdc4376e.entry.js} +2 -2
- package/dist/core/p-fdc4376e.entry.js.map +1 -0
- package/dist/esm/core.js +1 -1
- package/dist/esm/ic-button_3.entry.js.map +1 -1
- package/dist/esm/ic-input-component-container_3.entry.js +63 -37
- package/dist/esm/ic-input-component-container_3.entry.js.map +1 -1
- package/dist/esm/ic-pagination_3.entry.js +17 -17
- package/dist/esm/ic-pagination_3.entry.js.map +1 -1
- package/dist/esm/ic-section-container.entry.js.map +1 -1
- package/dist/esm/ic-top-navigation.entry.js +12 -8
- package/dist/esm/ic-top-navigation.entry.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/types/components/ic-menu/ic-menu.types.d.ts +1 -0
- package/dist/types/components/ic-top-navigation/ic-top-navigation.d.ts +4 -1
- package/dist/types/components.d.ts +10 -2
- package/hydrate/index.js +93 -62
- package/hydrate/index.mjs +93 -62
- package/package.json +4 -2
- package/vscode-data.json +5 -1
- package/dist/core/p-171a19bf.entry.js.map +0 -1
- package/dist/core/p-343670b4.entry.js +0 -2
- package/dist/core/p-343670b4.entry.js.map +0 -1
- package/dist/core/p-46e5a58b.entry.js.map +0 -1
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Components, JSX } from "../dist/types/components";
|
|
2
|
+
|
|
3
|
+
interface IcTheme extends Components.IcTheme, HTMLElement {}
|
|
4
|
+
export const IcTheme: {
|
|
5
|
+
prototype: IcTheme;
|
|
6
|
+
new (): IcTheme;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Used to define this component and all nested components recursively.
|
|
10
|
+
*/
|
|
11
|
+
export const defineCustomElement: () => void;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
|
|
2
|
+
import { X as getBrandColorBrightness, k as convertToRGBA, l as getBrandForegroundAppearance } from './helpers.js';
|
|
3
|
+
import { B as BLACK_MIN_COLOR_BRIGHTNESS, W as WHITE_MAX_COLOR_BRIGHTNESS } from './constants.js';
|
|
4
|
+
|
|
5
|
+
const Theme = /*@__PURE__*/ proxyCustomElement(class Theme extends HTMLElement {
|
|
6
|
+
constructor() {
|
|
7
|
+
super();
|
|
8
|
+
this.__registerHost();
|
|
9
|
+
this.brandChange = createEvent(this, "brandChange", 7);
|
|
10
|
+
this.icThemeChange = createEvent(this, "icThemeChange", 7);
|
|
11
|
+
this.themeClass = "";
|
|
12
|
+
/**
|
|
13
|
+
* The brand colour. Can be a hex value e.g. "#ff0000", RGB e.g. "rgb(255, 0, 0)", or RGBA e.g. "rgba(255, 0, 0, 1)".
|
|
14
|
+
*/
|
|
15
|
+
this.brandColor = null;
|
|
16
|
+
/**
|
|
17
|
+
* The theme mode. Can be "dark", "light", or "system". "system" will use the device or browser settings.
|
|
18
|
+
*/
|
|
19
|
+
this.theme = "light";
|
|
20
|
+
this.darkModeChangeHandler = () => {
|
|
21
|
+
if (this.theme === "system") {
|
|
22
|
+
this.themeClass =
|
|
23
|
+
window.matchMedia &&
|
|
24
|
+
window.matchMedia("(prefers-color-scheme: dark)").matches
|
|
25
|
+
? "ic-theme-dark"
|
|
26
|
+
: "ic-theme-light";
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
this.themeClass = `ic-theme-${this.theme}`;
|
|
30
|
+
}
|
|
31
|
+
this.icThemeChange.emit(this.theme);
|
|
32
|
+
};
|
|
33
|
+
this.checkBrandColorContrast = () => {
|
|
34
|
+
if (getBrandColorBrightness() < BLACK_MIN_COLOR_BRIGHTNESS &&
|
|
35
|
+
getBrandColorBrightness() > WHITE_MAX_COLOR_BRIGHTNESS) {
|
|
36
|
+
console.warn(`The brand colour does not provide enough contrast with either of the ICDS black or white foreground colours. Consider choosing a colour with a different brightness to achieve sufficient colour contrast for good visibility. See https://www.w3.org/TR/AERT/#color-contrast for more information about colour contrast.`);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
this.setBrandColor = () => {
|
|
40
|
+
const colorRGBA = this.brandColor ? convertToRGBA(this.brandColor) : null;
|
|
41
|
+
if (colorRGBA) {
|
|
42
|
+
const { r, g, b, a } = colorRGBA;
|
|
43
|
+
const { style } = document.documentElement;
|
|
44
|
+
style.setProperty("--ic-brand-color-primary-r", `${r}`);
|
|
45
|
+
style.setProperty("--ic-brand-color-primary-g", `${g}`);
|
|
46
|
+
style.setProperty("--ic-brand-color-primary-b", `${b}`);
|
|
47
|
+
style.setProperty("--ic-brand-color-primary-a", `${a}`);
|
|
48
|
+
this.checkBrandColorContrast();
|
|
49
|
+
this.brandChange.emit({
|
|
50
|
+
mode: getBrandForegroundAppearance(),
|
|
51
|
+
color: colorRGBA,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
watchBrandColorPropHandler() {
|
|
57
|
+
this.setBrandColor();
|
|
58
|
+
}
|
|
59
|
+
watchThemePropHandler() {
|
|
60
|
+
this.darkModeChangeHandler();
|
|
61
|
+
}
|
|
62
|
+
componentWillLoad() {
|
|
63
|
+
this.darkModeChangeHandler();
|
|
64
|
+
this.setBrandColor();
|
|
65
|
+
window.matchMedia &&
|
|
66
|
+
window
|
|
67
|
+
.matchMedia("(prefers-color-scheme: dark)")
|
|
68
|
+
.addEventListener("change", this.darkModeChangeHandler);
|
|
69
|
+
}
|
|
70
|
+
render() {
|
|
71
|
+
const { themeClass } = this;
|
|
72
|
+
return (h(Host, { key: '63d492e3dd31089565a15df543420f375dbad1b6', class: themeClass }, h("slot", { key: '479a3cbc49286aa2e3853956721f26a5ee37e9ef' })));
|
|
73
|
+
}
|
|
74
|
+
static get watchers() { return {
|
|
75
|
+
"brandColor": ["watchBrandColorPropHandler"],
|
|
76
|
+
"theme": ["watchThemePropHandler"]
|
|
77
|
+
}; }
|
|
78
|
+
}, [4, "ic-theme", {
|
|
79
|
+
"brandColor": [1, "brand-color"],
|
|
80
|
+
"theme": [1],
|
|
81
|
+
"themeClass": [32]
|
|
82
|
+
}, undefined, {
|
|
83
|
+
"brandColor": ["watchBrandColorPropHandler"],
|
|
84
|
+
"theme": ["watchThemePropHandler"]
|
|
85
|
+
}]);
|
|
86
|
+
function defineCustomElement$1() {
|
|
87
|
+
if (typeof customElements === "undefined") {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const components = ["ic-theme"];
|
|
91
|
+
components.forEach(tagName => { switch (tagName) {
|
|
92
|
+
case "ic-theme":
|
|
93
|
+
if (!customElements.get(tagName)) {
|
|
94
|
+
customElements.define(tagName, Theme);
|
|
95
|
+
}
|
|
96
|
+
break;
|
|
97
|
+
} });
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const IcTheme = Theme;
|
|
101
|
+
const defineCustomElement = defineCustomElement$1;
|
|
102
|
+
|
|
103
|
+
export { IcTheme, defineCustomElement };
|
|
104
|
+
|
|
105
|
+
//# sourceMappingURL=ic-theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"file":"ic-theme.js","mappings":";;;;MAyBa,KAAK;IAHlB;;;;;QAIW,eAAU,GAAW,EAAE,CAAC;;;;QAKzB,eAAU,GAAoB,IAAI,CAAC;;;;QAUnC,UAAK,GAAqB,OAAO,CAAC;QA2BlC,0BAAqB,GAAG;YAC9B,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;gBAC3B,IAAI,CAAC,UAAU;oBACb,MAAM,CAAC,UAAU;wBACjB,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC,OAAO;0BACrD,eAAe;0BACf,gBAAgB,CAAC;aACxB;iBAAM;gBACL,IAAI,CAAC,UAAU,GAAG,YAAY,IAAI,CAAC,KAAK,EAAE,CAAC;aAC5C;YAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACrC,CAAC;QAEM,4BAAuB,GAAG;YAChC,IACE,uBAAuB,EAAE,GAAG,0BAA0B;gBACtD,uBAAuB,EAAE,GAAG,0BAA0B,EACtD;gBACA,OAAO,CAAC,IAAI,CACV,2TAA2T,CAC5T,CAAC;aACH;SACF,CAAC;QAEM,kBAAa,GAAG;YACtB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;YAE1E,IAAI,SAAS,EAAE;gBACb,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC;gBACjC,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;gBAC3C,KAAK,CAAC,WAAW,CAAC,4BAA4B,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBACxD,KAAK,CAAC,WAAW,CAAC,4BAA4B,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBACxD,KAAK,CAAC,WAAW,CAAC,4BAA4B,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBACxD,KAAK,CAAC,WAAW,CAAC,4BAA4B,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBAExD,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBAE/B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;oBACpB,IAAI,EAAE,4BAA4B,EAAE;oBACpC,KAAK,EAAE,SAAS;iBACjB,CAAC,CAAC;aACJ;SACF,CAAC;KAWH;IAxFC,0BAA0B;QACxB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAQD,qBAAqB;QACnB,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC9B;IAYD,iBAAiB;QACf,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,MAAM,CAAC,UAAU;YACf,MAAM;iBACH,UAAU,CAAC,8BAA8B,CAAC;iBAC1C,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;KAC7D;IA+CD,MAAM;QACJ,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QAE5B,QACE,EAAC,IAAI,qDAAC,KAAK,EAAE,UAAU,IACrB,8DAAa,CACR,EACP;KACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":["src/components/ic-theme/ic-theme.tsx"],"sourcesContent":["import {\n Component,\n Host,\n Event,\n EventEmitter,\n h,\n Watch,\n Prop,\n State,\n} from \"@stencil/core\";\n\nimport { IcColor, IcBrand, IcThemeSettings } from \"../../utils/types\";\nimport {\n convertToRGBA,\n getBrandForegroundAppearance,\n} from \"../../utils/helpers\";\nimport { getBrandColorBrightness } from \"../../utils/helpers\";\nimport {\n BLACK_MIN_COLOR_BRIGHTNESS,\n WHITE_MAX_COLOR_BRIGHTNESS,\n} from \"../../utils/constants\";\n\n@Component({\n tag: \"ic-theme\",\n})\nexport class Theme {\n @State() themeClass: string = \"\";\n\n /**\n * The brand colour. Can be a hex value e.g. \"#ff0000\", RGB e.g. \"rgb(255, 0, 0)\", or RGBA e.g. \"rgba(255, 0, 0, 1)\".\n */\n @Prop() brandColor?: IcColor | null = null;\n\n @Watch(\"brandColor\")\n watchBrandColorPropHandler(): void {\n this.setBrandColor();\n }\n\n /**\n * The theme mode. Can be \"dark\", \"light\", or \"system\". \"system\" will use the device or browser settings.\n */\n @Prop() theme?: IcThemeSettings = \"light\";\n\n @Watch(\"theme\")\n watchThemePropHandler(): void {\n this.darkModeChangeHandler();\n }\n\n /**\n * @internal Emitted when the brand color is changed.\n */\n @Event() brandChange: EventEmitter<IcBrand>;\n\n /**\n * Emitted when the theme is changed.\n */\n @Event() icThemeChange: EventEmitter<IcThemeSettings>;\n\n componentWillLoad(): void {\n this.darkModeChangeHandler();\n this.setBrandColor();\n\n window.matchMedia &&\n window\n .matchMedia(\"(prefers-color-scheme: dark)\")\n .addEventListener(\"change\", this.darkModeChangeHandler);\n }\n\n private darkModeChangeHandler = (): void => {\n if (this.theme === \"system\") {\n this.themeClass =\n window.matchMedia &&\n window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"ic-theme-dark\"\n : \"ic-theme-light\";\n } else {\n this.themeClass = `ic-theme-${this.theme}`;\n }\n\n this.icThemeChange.emit(this.theme);\n };\n\n private checkBrandColorContrast = (): void => {\n if (\n getBrandColorBrightness() < BLACK_MIN_COLOR_BRIGHTNESS &&\n getBrandColorBrightness() > WHITE_MAX_COLOR_BRIGHTNESS\n ) {\n console.warn(\n `The brand colour does not provide enough contrast with either of the ICDS black or white foreground colours. Consider choosing a colour with a different brightness to achieve sufficient colour contrast for good visibility. See https://www.w3.org/TR/AERT/#color-contrast for more information about colour contrast.`\n );\n }\n };\n\n private setBrandColor = () => {\n const colorRGBA = this.brandColor ? convertToRGBA(this.brandColor) : null;\n\n if (colorRGBA) {\n const { r, g, b, a } = colorRGBA;\n const { style } = document.documentElement;\n style.setProperty(\"--ic-brand-color-primary-r\", `${r}`);\n style.setProperty(\"--ic-brand-color-primary-g\", `${g}`);\n style.setProperty(\"--ic-brand-color-primary-b\", `${b}`);\n style.setProperty(\"--ic-brand-color-primary-a\", `${a}`);\n\n this.checkBrandColorContrast();\n\n this.brandChange.emit({\n mode: getBrandForegroundAppearance(),\n color: colorRGBA,\n });\n }\n };\n\n render() {\n const { themeClass } = this;\n\n return (\n <Host class={themeClass}>\n <slot></slot>\n </Host>\n );\n }\n}\n"],"version":3}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Components, JSX } from "../dist/types/components";
|
|
2
|
+
|
|
3
|
+
interface IcToastRegion extends Components.IcToastRegion, HTMLElement {}
|
|
4
|
+
export const IcToastRegion: {
|
|
5
|
+
prototype: IcToastRegion;
|
|
6
|
+
new (): IcToastRegion;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Used to define this component and all nested components recursively.
|
|
10
|
+
*/
|
|
11
|
+
export const defineCustomElement: () => void;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { proxyCustomElement, HTMLElement, h } from '@stencil/core/internal/client';
|
|
2
|
+
|
|
3
|
+
const ToastRegion = /*@__PURE__*/ proxyCustomElement(class ToastRegion extends HTMLElement {
|
|
4
|
+
constructor() {
|
|
5
|
+
super();
|
|
6
|
+
this.__registerHost();
|
|
7
|
+
this.pendingVisibility = [];
|
|
8
|
+
this.showToast = (toast) => {
|
|
9
|
+
const visibleToasts = Array.from(document.querySelectorAll("ic-toast")).filter((el) => window.getComputedStyle(el).display !== "none");
|
|
10
|
+
if (visibleToasts.indexOf(toast) === -1 && visibleToasts.length <= 0) {
|
|
11
|
+
toast.setVisible().then((res) => (this.previouslyFocused = res));
|
|
12
|
+
}
|
|
13
|
+
if (visibleToasts.length > 0)
|
|
14
|
+
this.pendingVisibility.push(toast);
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
watchOpenToastHandler(newValue) {
|
|
18
|
+
if (this.openToast !== undefined) {
|
|
19
|
+
this.showToast(newValue);
|
|
20
|
+
this.openToast = undefined;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
componentDidLoad() {
|
|
24
|
+
if (this.openToast) {
|
|
25
|
+
this.showToast(this.openToast);
|
|
26
|
+
this.openToast = undefined;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
handleDismissedToast() {
|
|
30
|
+
var _a;
|
|
31
|
+
if (this.pendingVisibility.length > 0) {
|
|
32
|
+
this.pendingVisibility[0]
|
|
33
|
+
.setVisible()
|
|
34
|
+
.then((res) => (this.previouslyFocused = res));
|
|
35
|
+
this.pendingVisibility.shift();
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
if (this.previouslyFocused && "setFocus" in this.previouslyFocused) {
|
|
39
|
+
this.previouslyFocused.setFocus();
|
|
40
|
+
}
|
|
41
|
+
else
|
|
42
|
+
(_a = this.previouslyFocused) === null || _a === void 0 ? void 0 : _a.focus();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
render() {
|
|
46
|
+
return h("slot", { key: '28f5e26c6dbfb2de076cff231b72722f1ff403c7' });
|
|
47
|
+
}
|
|
48
|
+
get el() { return this; }
|
|
49
|
+
static get watchers() { return {
|
|
50
|
+
"openToast": ["watchOpenToastHandler"]
|
|
51
|
+
}; }
|
|
52
|
+
}, [4, "ic-toast-region", {
|
|
53
|
+
"openToast": [1040]
|
|
54
|
+
}, [[2, "icDismiss", "handleDismissedToast"]], {
|
|
55
|
+
"openToast": ["watchOpenToastHandler"]
|
|
56
|
+
}]);
|
|
57
|
+
function defineCustomElement$1() {
|
|
58
|
+
if (typeof customElements === "undefined") {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const components = ["ic-toast-region"];
|
|
62
|
+
components.forEach(tagName => { switch (tagName) {
|
|
63
|
+
case "ic-toast-region":
|
|
64
|
+
if (!customElements.get(tagName)) {
|
|
65
|
+
customElements.define(tagName, ToastRegion);
|
|
66
|
+
}
|
|
67
|
+
break;
|
|
68
|
+
} });
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const IcToastRegion = ToastRegion;
|
|
72
|
+
const defineCustomElement = defineCustomElement$1;
|
|
73
|
+
|
|
74
|
+
export { IcToastRegion, defineCustomElement };
|
|
75
|
+
|
|
76
|
+
//# sourceMappingURL=ic-toast-region.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"file":"ic-toast-region.js","mappings":";;MAIa,WAAW;IADxB;;;QAEU,sBAAiB,GAAyB,EAAE,CAAC;QAsC7C,cAAS,GAAG,CAAC,KAAyB;YAC5C,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAC9B,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC,CACtC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC;YACjE,IAAI,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,aAAa,CAAC,MAAM,IAAI,CAAC,EAAE;gBACpE,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,CAAC,CAAC;aAClE;YACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;gBAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAClE,CAAC;KAKH;IAzCC,qBAAqB,CAAC,QAA4B;QAChD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;YAChC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;SAC5B;KACF;IAED,gBAAgB;QACd,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;SAC5B;KACF;IAGD,oBAAoB;;QAClB,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;YACrC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;iBACtB,UAAU,EAAE;iBACZ,IAAI,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,CAAC,CAAC;YACjD,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;SAChC;aAAM;YACL,IAAI,IAAI,CAAC,iBAAiB,IAAI,UAAU,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBACjE,IAAI,CAAC,iBAA2C,CAAC,QAAQ,EAAE,CAAC;aAC9D;;gBAAM,MAAA,IAAI,CAAC,iBAAiB,0CAAE,KAAK,EAAE,CAAC;SACxC;KACF;IAYD,MAAM;QACJ,OAAO,8DAAa,CAAC;KACtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":["src/components/ic-toast-region/ic-toast-region.tsx"],"sourcesContent":["import { Component, Element, h, Listen, Prop, Watch } from \"@stencil/core\";\nimport { IcFocusableComponents } from \"../../utils/types\";\n\n@Component({ tag: \"ic-toast-region\" })\nexport class ToastRegion {\n private pendingVisibility: HTMLIcToastElement[] = [];\n private previouslyFocused: HTMLElement | null;\n\n @Element() el: HTMLIcToastRegionElement;\n\n /**\n * The toast element to be displayed.\n */\n @Prop({ mutable: true }) openToast?: HTMLIcToastElement;\n @Watch(\"openToast\")\n watchOpenToastHandler(newValue: HTMLIcToastElement): void {\n if (this.openToast !== undefined) {\n this.showToast(newValue);\n this.openToast = undefined;\n }\n }\n\n componentDidLoad(): void {\n if (this.openToast) {\n this.showToast(this.openToast);\n this.openToast = undefined;\n }\n }\n\n @Listen(\"icDismiss\", { capture: true })\n handleDismissedToast(): void {\n if (this.pendingVisibility.length > 0) {\n this.pendingVisibility[0]\n .setVisible()\n .then((res) => (this.previouslyFocused = res));\n this.pendingVisibility.shift();\n } else {\n if (this.previouslyFocused && \"setFocus\" in this.previouslyFocused) {\n (this.previouslyFocused as IcFocusableComponents).setFocus();\n } else this.previouslyFocused?.focus();\n }\n }\n\n private showToast = (toast: HTMLIcToastElement) => {\n const visibleToasts = Array.from(\n document.querySelectorAll(\"ic-toast\")\n ).filter((el) => window.getComputedStyle(el).display !== \"none\");\n if (visibleToasts.indexOf(toast) === -1 && visibleToasts.length <= 0) {\n toast.setVisible().then((res) => (this.previouslyFocused = res));\n }\n if (visibleToasts.length > 0) this.pendingVisibility.push(toast);\n };\n\n render() {\n return <slot></slot>;\n }\n}\n"],"version":3}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Components, JSX } from "../dist/types/components";
|
|
2
|
+
|
|
3
|
+
interface IcToast extends Components.IcToast, HTMLElement {}
|
|
4
|
+
export const IcToast: {
|
|
5
|
+
prototype: IcToast;
|
|
6
|
+
new (): IcToast;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Used to define this component and all nested components recursively.
|
|
10
|
+
*/
|
|
11
|
+
export const defineCustomElement: () => void;
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
|
|
2
|
+
import { c as closeIcon } from './close-icon.js';
|
|
3
|
+
import { V as VARIANT_ICONS } from './constants.js';
|
|
4
|
+
import { i as isSlotUsed, o as onComponentRequiredPropUndefined, P as getSlot, m as isPropDefined } from './helpers.js';
|
|
5
|
+
import { d as defineCustomElement$5 } from './ic-button2.js';
|
|
6
|
+
import { d as defineCustomElement$4 } from './ic-loading-indicator2.js';
|
|
7
|
+
import { d as defineCustomElement$3 } from './ic-tooltip2.js';
|
|
8
|
+
import { d as defineCustomElement$2 } from './ic-typography2.js';
|
|
9
|
+
|
|
10
|
+
const icToastCss = "/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%;}body{margin:0}main{display:block}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible;}pre{font-family:monospace, monospace;font-size:1em;}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em;}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0;}button,input{overflow:visible}button,select{text-transform:none}button,[type=\"button\"],[type=\"reset\"],[type=\"submit\"]{-webkit-appearance:button}button::-moz-focus-inner,[type=\"button\"]::-moz-focus-inner,[type=\"reset\"]::-moz-focus-inner,[type=\"submit\"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=\"button\"]:-moz-focusring,[type=\"reset\"]:-moz-focusring,[type=\"submit\"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal;}progress{vertical-align:baseline}textarea{overflow:auto}[type=\"checkbox\"],[type=\"radio\"]{box-sizing:border-box;padding:0;}[type=\"number\"]::-webkit-inner-spin-button,[type=\"number\"]::-webkit-outer-spin-button{height:auto}[type=\"search\"]{-webkit-appearance:textfield;outline-offset:-2px;}[type=\"search\"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit;}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font-style:inherit;vertical-align:baseline}@media (prefers-reduced-motion: no-preference){:host{animation:fadein var(--ic-transition-duration-slow) ease-in-out}:host(.hidden){animation:fadeout var(--ic-transition-duration-slow) ease-in-out}}:host{--bottom-position:var(--ic-space-xl);position:fixed;bottom:var(--bottom-position);left:50%;transform:translate(-50%);z-index:var(--ic-z-index-toast)}:host(.ic-toast-hidden){display:none}:host(:focus){outline:none}.container{max-width:32.5rem;min-width:18rem;box-shadow:var(--ic-elevation-overlay);min-height:3.5rem;background-color:var(--ic-toast-background);display:flex;align-items:center;position:relative;border:var(--ic-space-1px) solid var(--ic-color-border-neutral-grey);border-radius:var(--ic-border-radius)}.toast-icon-container{height:100%;display:flex;align-items:center}.container-neutral{border-color:var(--ic-toast-status-neutral)}.container-info{border-color:var(--ic-toast-status-info)}.container-warning{border-color:var(--ic-toast-status-warning)}.container-error{border-color:var(--ic-toast-status-error)}.container-success{border-color:var(--ic-toast-status-success)}.container-ai{border-color:var(--ic-toast-status-ai)}.divider{height:100%;width:var(--ic-space-xs);position:absolute;border-radius:0}.divider-neutral{background-color:var(--ic-toast-status-neutral)}.divider-info{background-color:var(--ic-toast-status-info)}.divider-warning{background-color:var(--ic-toast-status-warning)}.divider-error{background-color:var(--ic-toast-status-error)}.divider-success{background-color:var(--ic-toast-status-success)}.divider-ai{background-color:var(--ic-toast-status-ai)}.toast-icon,::slotted(svg){height:var(--ic-space-lg);width:var(--ic-space-lg);margin-left:var(--ic-space-md)}:host(.ic-toast-variant-neutral) .toast-icon svg,::slotted(svg){fill:var(--ic-toast-icon-neutral)}:host(.ic-toast-variant-info) .toast-icon svg{fill:var(--ic-toast-icon-info)}:host(.ic-toast-variant-warning) .toast-icon svg{fill:var(--ic-toast-icon-warning)}:host(.ic-toast-variant-error) .toast-icon svg{fill:var(--ic-toast-icon-error)}:host(.ic-toast-variant-success) .toast-icon svg{fill:var(--ic-toast-icon-success)}:host(.ic-toast-variant-ai) .toast-icon svg{fill:var(--ic-toast-icon-ai)}.toast-content{margin-left:var(--ic-space-xs);width:100%}.no-icon{margin-left:var(--ic-space-md)}.toast-text{padding:var(--ic-space-xs) var(--ic-space-xs) var(--ic-space-xs) 0}.toast-heading{--ic-typography-color:var(--ic-toast-title)}.toast-message{--ic-typography-color:var(--ic-toast-description)}.toast-action-container{padding-bottom:var(--ic-space-md)}#dismiss-button{padding:var(--ic-space-xs)}#dismiss-button>svg{color:var(--ic-toast-dismiss-button)}ic-loading-indicator{--outer-color:transparent;--inner-color:var(--ic-action-monochrome)}.toast-dismiss-timer{padding:var(--ic-space-sm)}@media (max-width: 576px){:host{--bottom-position:var(--ic-space-lg);width:calc(100% - 2 * var(--ic-space-md))}}@media (min-width: 993px){:host{--bottom-position:calc(var(--ic-space-xl) + var(--ic-space-xs))}}@media (forced-colors: active){.container{border:var(--ic-border-hc)}}@keyframes fadein{from{bottom:0;opacity:0}to{bottom:var(--bottom-position);opacity:1}}@keyframes fadeout{from{bottom:var(--bottom-position);opacity:1}to{bottom:0;opacity:0}}";
|
|
11
|
+
const IcToastStyle0 = icToastCss;
|
|
12
|
+
|
|
13
|
+
const AUTO_DISMISS_TIMER_REFRESH_RATE_MS = 1000;
|
|
14
|
+
const TOAST_HEADING_CHAR_LIMIT = 70;
|
|
15
|
+
const TOAST_MESSAGE_CHAR_LIMIT = 140;
|
|
16
|
+
const Toast = /*@__PURE__*/ proxyCustomElement(class Toast extends HTMLElement {
|
|
17
|
+
constructor() {
|
|
18
|
+
super();
|
|
19
|
+
this.__registerHost();
|
|
20
|
+
this.__attachShadow();
|
|
21
|
+
this.icDismiss = createEvent(this, "icDismiss", 7);
|
|
22
|
+
this.interactiveElements = [];
|
|
23
|
+
this.timerProgress = 100;
|
|
24
|
+
this.visible = false;
|
|
25
|
+
/**
|
|
26
|
+
* Sets the theme color to the dark or light theme color. "inherit" will set the color based on the system settings or ic-theme component.
|
|
27
|
+
*/
|
|
28
|
+
this.theme = "inherit";
|
|
29
|
+
/**
|
|
30
|
+
* If toast dismissMode is set to `automatic`, use this prop to define the time before the toast dismisses (in MILLISECONDS)
|
|
31
|
+
* (NOTE: Has a minimum value of `5000ms`)
|
|
32
|
+
*/
|
|
33
|
+
this.autoDismissTimeout = 5000;
|
|
34
|
+
/**
|
|
35
|
+
* If toast can be manually dismissed, this prop sets a custom aria-label for the ic-button component
|
|
36
|
+
*/
|
|
37
|
+
this.dismissButtonAriaLabel = "dismiss";
|
|
38
|
+
/**
|
|
39
|
+
* How the toast will be dismissed. If manual will display a dismiss button.
|
|
40
|
+
*/
|
|
41
|
+
this.dismissMode = "manual";
|
|
42
|
+
this.dismissAction = () => {
|
|
43
|
+
this.icDismiss.emit();
|
|
44
|
+
};
|
|
45
|
+
this.handleProgressChange = () => {
|
|
46
|
+
this.timerProgress -=
|
|
47
|
+
(AUTO_DISMISS_TIMER_REFRESH_RATE_MS / this.autoDismissTimeout) * 100;
|
|
48
|
+
};
|
|
49
|
+
this.onFocus = () => {
|
|
50
|
+
if (this.focusInteractiveElement) {
|
|
51
|
+
this.isManual = true;
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
this.onBlur = () => {
|
|
55
|
+
this.handleTimer({ type: "mouseleave" });
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
dismissModeChangeHandler(newValue) {
|
|
59
|
+
this.isManual = newValue === "manual";
|
|
60
|
+
}
|
|
61
|
+
disconnectedCallback() {
|
|
62
|
+
window.clearTimeout(this.dismissTimeout);
|
|
63
|
+
window.clearInterval(this.timerRefreshInterval);
|
|
64
|
+
}
|
|
65
|
+
componentWillLoad() {
|
|
66
|
+
var _a, _b;
|
|
67
|
+
this.handleLongText(this.heading.length > TOAST_HEADING_CHAR_LIMIT, !!this.message && ((_a = this.message) === null || _a === void 0 ? void 0 : _a.length) > TOAST_MESSAGE_CHAR_LIMIT);
|
|
68
|
+
if (this.autoDismissTimeout < 5000)
|
|
69
|
+
this.autoDismissTimeout = 5000;
|
|
70
|
+
if (isSlotUsed(this.el, "action"))
|
|
71
|
+
this.dismissMode = "manual";
|
|
72
|
+
this.isManual = this.dismissMode === "manual";
|
|
73
|
+
if (isSlotUsed(this.el, "neutral-icon"))
|
|
74
|
+
this.variant = "neutral";
|
|
75
|
+
if (this.variant === "neutral") {
|
|
76
|
+
this.neutralVariantLabel =
|
|
77
|
+
(_b = this.neutralIconAriaLabel) !== null && _b !== void 0 ? _b : VARIANT_ICONS[this.variant].ariaLabel;
|
|
78
|
+
}
|
|
79
|
+
if (this.isManual) {
|
|
80
|
+
const toastMessage = isPropDefined(this.message)
|
|
81
|
+
? `. ${this.message}`
|
|
82
|
+
: "";
|
|
83
|
+
this.el.setAttribute("aria-label", this.variant
|
|
84
|
+
? this.neutralVariantLabel || VARIANT_ICONS[this.variant].ariaLabel
|
|
85
|
+
: this.heading);
|
|
86
|
+
(this.variant || this.message) &&
|
|
87
|
+
this.el.setAttribute("aria-description", this.variant ? `${this.heading}${toastMessage}` : this.message || "");
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
componentDidLoad() {
|
|
91
|
+
onComponentRequiredPropUndefined([{ prop: this.heading, propName: "heading" }], "Toast");
|
|
92
|
+
}
|
|
93
|
+
componentDidUpdate() {
|
|
94
|
+
var _a;
|
|
95
|
+
if (this.focusInteractiveElement && this.isManual) {
|
|
96
|
+
this.resetAutoDismissTimer();
|
|
97
|
+
const actionContent = getSlot(this.el, "action");
|
|
98
|
+
const dismissButton = (_a = this.el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector("ic-button");
|
|
99
|
+
if (actionContent)
|
|
100
|
+
this.interactiveElements.push(actionContent);
|
|
101
|
+
if (dismissButton)
|
|
102
|
+
this.interactiveElements.push(dismissButton);
|
|
103
|
+
this.focusInteractiveElement = false;
|
|
104
|
+
this.findNextInteractiveElement(this.shiftKeyPressed).setFocus();
|
|
105
|
+
this.shiftKeyPressed = false;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
watchVisibleHandler() {
|
|
109
|
+
var _a;
|
|
110
|
+
if (this.visible) {
|
|
111
|
+
const actionContent = getSlot(this.el, "action");
|
|
112
|
+
const dismissButton = (_a = this.el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector("ic-button");
|
|
113
|
+
if (actionContent)
|
|
114
|
+
this.interactiveElements.push(actionContent);
|
|
115
|
+
if (dismissButton)
|
|
116
|
+
this.interactiveElements.push(dismissButton);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
this.interactiveElements = [];
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
handleDismiss() {
|
|
123
|
+
this.visible = false;
|
|
124
|
+
this.resetAutoDismissTimer();
|
|
125
|
+
}
|
|
126
|
+
handleKeyboard(ev) {
|
|
127
|
+
if (this.visible) {
|
|
128
|
+
if (this.isManual) {
|
|
129
|
+
switch (ev.key) {
|
|
130
|
+
case "Tab":
|
|
131
|
+
ev.preventDefault();
|
|
132
|
+
this.findNextInteractiveElement(ev.shiftKey).setFocus();
|
|
133
|
+
break;
|
|
134
|
+
case "Escape":
|
|
135
|
+
!ev.repeat && this.dismissAction();
|
|
136
|
+
ev.stopImmediatePropagation();
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
if (ev.key === "Tab") {
|
|
142
|
+
this.shiftKeyPressed = ev.shiftKey;
|
|
143
|
+
this.focusInteractiveElement = true;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
handleTimer(ev) {
|
|
149
|
+
switch (ev.type) {
|
|
150
|
+
case "mouseenter":
|
|
151
|
+
if (!this.isManual) {
|
|
152
|
+
this.resetAutoDismissTimer();
|
|
153
|
+
}
|
|
154
|
+
this.isManual = true;
|
|
155
|
+
break;
|
|
156
|
+
case "mouseleave":
|
|
157
|
+
if (this.dismissMode === "automatic") {
|
|
158
|
+
this.isManual = false;
|
|
159
|
+
this.interactiveElements = [];
|
|
160
|
+
if (this.visible) {
|
|
161
|
+
this.dismissTimeout = window.setTimeout(this.dismissAction, this.autoDismissTimeout);
|
|
162
|
+
this.timerRefreshInterval = window.setInterval(this.handleProgressChange, AUTO_DISMISS_TIMER_REFRESH_RATE_MS);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* @internal Used to display the individual toast.
|
|
170
|
+
* @returns The element that previously had focus before the toast appeared
|
|
171
|
+
*/
|
|
172
|
+
async setVisible() {
|
|
173
|
+
if (!this.visible)
|
|
174
|
+
this.visible = true;
|
|
175
|
+
if (!this.isManual) {
|
|
176
|
+
this.dismissTimeout = window.setTimeout(this.dismissAction, this.autoDismissTimeout);
|
|
177
|
+
this.timerRefreshInterval = window.setInterval(this.handleProgressChange, AUTO_DISMISS_TIMER_REFRESH_RATE_MS);
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
this.interactiveElements[0] &&
|
|
182
|
+
window.setTimeout(() => this.interactiveElements[0].setFocus(), 200);
|
|
183
|
+
return document.activeElement;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
handleLongText(headingTooLong, messageTooLong) {
|
|
187
|
+
if (messageTooLong || headingTooLong) {
|
|
188
|
+
console.error(`Too many characters in toast ${headingTooLong ? "heading" : ""}${headingTooLong && messageTooLong ? " and " : ""}${messageTooLong ? "message" : ""}. Refer to character limits specified in the prop description`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
findNextInteractiveElement(isBackwards) {
|
|
192
|
+
const firstEl = this.interactiveElements[0];
|
|
193
|
+
const lastEl = this.interactiveElements[this.interactiveElements.length - 1];
|
|
194
|
+
if (this.isActive(isBackwards ? firstEl : lastEl))
|
|
195
|
+
return isBackwards ? lastEl : firstEl;
|
|
196
|
+
let currentIndex = 0;
|
|
197
|
+
return this.interactiveElements.some((el, index) => {
|
|
198
|
+
if (!this.isActive(el))
|
|
199
|
+
return false;
|
|
200
|
+
currentIndex = index;
|
|
201
|
+
return true;
|
|
202
|
+
})
|
|
203
|
+
? this.interactiveElements[currentIndex + (isBackwards ? -1 : 1)]
|
|
204
|
+
: firstEl;
|
|
205
|
+
}
|
|
206
|
+
resetAutoDismissTimer() {
|
|
207
|
+
window.clearTimeout(this.dismissTimeout);
|
|
208
|
+
window.clearInterval(this.timerRefreshInterval);
|
|
209
|
+
this.timerProgress = 100;
|
|
210
|
+
}
|
|
211
|
+
isActive(targetEl) {
|
|
212
|
+
return targetEl === this.el
|
|
213
|
+
? !!this.el.shadowRoot.activeElement
|
|
214
|
+
: document.activeElement === targetEl;
|
|
215
|
+
}
|
|
216
|
+
render() {
|
|
217
|
+
const { variant, heading, message, visible, isManual, dismissButtonAriaLabel, theme, } = this;
|
|
218
|
+
return (h(Host, { key: '57c068f4c9a9e3017733432a596f78e2bcbffae6', class: {
|
|
219
|
+
[`ic-theme-${theme}`]: theme !== "inherit",
|
|
220
|
+
["ic-toast-hidden"]: !visible,
|
|
221
|
+
[`ic-toast-variant-${variant}`]: variant !== undefined,
|
|
222
|
+
}, tabindex: "0", onFocus: this.onFocus, onBlur: this.onBlur, role: isManual ? "dialog" : "alert", "aria-live": isManual ? null : "polite" }, h("div", { key: 'e24bd72e435cc443c375eee309ae98fc9e030c0b', class: {
|
|
223
|
+
["container"]: true,
|
|
224
|
+
[`container-${variant}`]: variant !== undefined,
|
|
225
|
+
} }, variant && visible && (h("div", { key: 'bdabfabb04efcd93ab88ecb691b3baa73fc9da0a', class: "toast-icon-container" }, h("div", { key: 'bede66dcf6189ac321e9bee90dc144e9d38a09dc', class: {
|
|
226
|
+
["divider"]: true,
|
|
227
|
+
[`divider-${variant}`]: true,
|
|
228
|
+
} }), variant === "neutral" ? (h("slot", { name: "neutral-icon" })) : (h("span", { class: "toast-icon", innerHTML: VARIANT_ICONS[variant].icon })))), h("div", { key: '57480804dc55695e555a16dd818c5febcaffbe00', class: {
|
|
229
|
+
["toast-content"]: true,
|
|
230
|
+
["no-icon"]: variant === "neutral" && !isSlotUsed(this.el, "neutral-icon"),
|
|
231
|
+
} }, h("div", { key: '8540288f9f34f0b72c86fa3039d579c93be1277f', class: "toast-text" }, h("ic-typography", { key: 'c5e8f2d0a2fe026b430dddf7a81e825845f5ce72', variant: "subtitle-large", class: "toast-heading" }, visible && (isManual ? h("h5", null, heading) : h("p", null, heading))), message && (h("ic-typography", { key: '89fe3df8f98581ef66c1ea74930d9042a579a359', variant: "body", class: "toast-message" }, visible && h("p", { key: 'd805d260febad5f8d58aeffe2dfef9f84d6d0911' }, message)))), isSlotUsed(this.el, "action") && (h("div", { key: 'c9cfd3cd4bf5f77cea072bb15f8629ab4a368ad0', class: "toast-action-container" }, h("slot", { key: '26b2fb447b937f327719edfe531e5b1260fa7c6c', name: "action" })))), !isManual ? (h("ic-loading-indicator", { class: "toast-dismiss-timer", theme: "dark", monochrome: true, size: "icon", progress: this.timerProgress, description: "Dismiss timer" })) : (h("ic-button", { id: "dismiss-button", innerHTML: closeIcon, onClick: this.dismissAction, variant: "icon-tertiary", "aria-label": dismissButtonAriaLabel })))));
|
|
232
|
+
}
|
|
233
|
+
get el() { return this; }
|
|
234
|
+
static get watchers() { return {
|
|
235
|
+
"dismissMode": ["dismissModeChangeHandler"],
|
|
236
|
+
"visible": ["watchVisibleHandler"]
|
|
237
|
+
}; }
|
|
238
|
+
static get style() { return IcToastStyle0; }
|
|
239
|
+
}, [1, "ic-toast", {
|
|
240
|
+
"theme": [1],
|
|
241
|
+
"autoDismissTimeout": [1026, "auto-dismiss-timeout"],
|
|
242
|
+
"dismissButtonAriaLabel": [1, "dismiss-button-aria-label"],
|
|
243
|
+
"dismissMode": [1025, "dismiss-mode"],
|
|
244
|
+
"heading": [1],
|
|
245
|
+
"message": [1],
|
|
246
|
+
"neutralIconAriaLabel": [1, "neutral-icon-aria-label"],
|
|
247
|
+
"variant": [1025],
|
|
248
|
+
"isManual": [32],
|
|
249
|
+
"timerProgress": [32],
|
|
250
|
+
"visible": [32],
|
|
251
|
+
"setVisible": [64]
|
|
252
|
+
}, [[2, "icDismiss", "handleDismiss"], [4, "keydown", "handleKeyboard"], [1, "mouseenter", "handleTimer"], [1, "mouseleave", "handleTimer"]], {
|
|
253
|
+
"dismissMode": ["dismissModeChangeHandler"],
|
|
254
|
+
"visible": ["watchVisibleHandler"]
|
|
255
|
+
}]);
|
|
256
|
+
function defineCustomElement$1() {
|
|
257
|
+
if (typeof customElements === "undefined") {
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
const components = ["ic-toast", "ic-button", "ic-loading-indicator", "ic-tooltip", "ic-typography"];
|
|
261
|
+
components.forEach(tagName => { switch (tagName) {
|
|
262
|
+
case "ic-toast":
|
|
263
|
+
if (!customElements.get(tagName)) {
|
|
264
|
+
customElements.define(tagName, Toast);
|
|
265
|
+
}
|
|
266
|
+
break;
|
|
267
|
+
case "ic-button":
|
|
268
|
+
if (!customElements.get(tagName)) {
|
|
269
|
+
defineCustomElement$5();
|
|
270
|
+
}
|
|
271
|
+
break;
|
|
272
|
+
case "ic-loading-indicator":
|
|
273
|
+
if (!customElements.get(tagName)) {
|
|
274
|
+
defineCustomElement$4();
|
|
275
|
+
}
|
|
276
|
+
break;
|
|
277
|
+
case "ic-tooltip":
|
|
278
|
+
if (!customElements.get(tagName)) {
|
|
279
|
+
defineCustomElement$3();
|
|
280
|
+
}
|
|
281
|
+
break;
|
|
282
|
+
case "ic-typography":
|
|
283
|
+
if (!customElements.get(tagName)) {
|
|
284
|
+
defineCustomElement$2();
|
|
285
|
+
}
|
|
286
|
+
break;
|
|
287
|
+
} });
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
const IcToast = Toast;
|
|
291
|
+
const defineCustomElement = defineCustomElement$1;
|
|
292
|
+
|
|
293
|
+
export { IcToast, defineCustomElement };
|
|
294
|
+
|
|
295
|
+
//# sourceMappingURL=ic-toast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"file":"ic-toast.js","mappings":"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","names":[],"sources":["src/components/ic-toast/ic-toast.css?tag=ic-toast&encapsulation=shadow","src/components/ic-toast/ic-toast.tsx"],"sourcesContent":["@import \"../../global/normalize.css\";\n\n/**\n * @prop --ic-z-index-toast: z-index of toast\n */\n\n@media (prefers-reduced-motion: no-preference) {\n :host {\n animation: fadein var(--ic-transition-duration-slow) ease-in-out;\n }\n\n :host(.hidden) {\n animation: fadeout var(--ic-transition-duration-slow) ease-in-out;\n }\n}\n\n:host {\n --bottom-position: var(--ic-space-xl);\n\n position: fixed;\n bottom: var(--bottom-position);\n left: 50%;\n transform: translate(-50%);\n z-index: var(--ic-z-index-toast);\n}\n\n:host(.ic-toast-hidden) {\n display: none;\n}\n\n:host(:focus) {\n outline: none;\n}\n\n.container {\n max-width: 32.5rem;\n min-width: 18rem;\n box-shadow: var(--ic-elevation-overlay);\n min-height: 3.5rem;\n background-color: var(--ic-toast-background);\n display: flex;\n align-items: center;\n position: relative;\n border: var(--ic-space-1px) solid var(--ic-color-border-neutral-grey);\n border-radius: var(--ic-border-radius);\n}\n\n.toast-icon-container {\n height: 100%;\n display: flex;\n align-items: center;\n}\n\n.container-neutral {\n border-color: var(--ic-toast-status-neutral);\n}\n\n.container-info {\n border-color: var(--ic-toast-status-info);\n}\n\n.container-warning {\n border-color: var(--ic-toast-status-warning);\n}\n\n.container-error {\n border-color: var(--ic-toast-status-error);\n}\n\n.container-success {\n border-color: var(--ic-toast-status-success);\n}\n\n.container-ai {\n border-color: var(--ic-toast-status-ai);\n}\n\n.divider {\n height: 100%;\n width: var(--ic-space-xs);\n position: absolute;\n border-radius: 0;\n}\n\n.divider-neutral {\n background-color: var(--ic-toast-status-neutral);\n}\n\n.divider-info {\n background-color: var(--ic-toast-status-info);\n}\n\n.divider-warning {\n background-color: var(--ic-toast-status-warning);\n}\n\n.divider-error {\n background-color: var(--ic-toast-status-error);\n}\n\n.divider-success {\n background-color: var(--ic-toast-status-success);\n}\n\n.divider-ai {\n background-color: var(--ic-toast-status-ai);\n}\n\n.toast-icon,\n::slotted(svg) {\n height: var(--ic-space-lg);\n width: var(--ic-space-lg);\n margin-left: var(--ic-space-md);\n}\n\n:host(.ic-toast-variant-neutral) .toast-icon svg,\n::slotted(svg) {\n fill: var(--ic-toast-icon-neutral);\n}\n\n:host(.ic-toast-variant-info) .toast-icon svg {\n fill: var(--ic-toast-icon-info);\n}\n\n:host(.ic-toast-variant-warning) .toast-icon svg {\n fill: var(--ic-toast-icon-warning);\n}\n\n:host(.ic-toast-variant-error) .toast-icon svg {\n fill: var(--ic-toast-icon-error);\n}\n\n:host(.ic-toast-variant-success) .toast-icon svg {\n fill: var(--ic-toast-icon-success);\n}\n\n:host(.ic-toast-variant-ai) .toast-icon svg {\n fill: var(--ic-toast-icon-ai);\n}\n\n.toast-content {\n margin-left: var(--ic-space-xs);\n width: 100%;\n}\n\n.no-icon {\n margin-left: var(--ic-space-md);\n}\n\n.toast-text {\n padding: var(--ic-space-xs) var(--ic-space-xs) var(--ic-space-xs) 0;\n}\n\n.toast-heading {\n --ic-typography-color: var(--ic-toast-title);\n}\n\n.toast-message {\n --ic-typography-color: var(--ic-toast-description);\n}\n\n.toast-action-container {\n padding-bottom: var(--ic-space-md);\n}\n\n#dismiss-button {\n padding: var(--ic-space-xs);\n}\n\n#dismiss-button > svg {\n color: var(--ic-toast-dismiss-button);\n}\n\nic-loading-indicator {\n --outer-color: transparent;\n --inner-color: var(--ic-action-monochrome);\n}\n\n.toast-dismiss-timer {\n padding: var(--ic-space-sm);\n}\n\n@media (max-width: 576px) {\n :host {\n --bottom-position: var(--ic-space-lg);\n\n width: calc(100% - 2 * var(--ic-space-md));\n }\n}\n\n@media (min-width: 993px) {\n :host {\n --bottom-position: calc(var(--ic-space-xl) + var(--ic-space-xs));\n }\n}\n\n@media (forced-colors: active) {\n .container {\n border: var(--ic-border-hc);\n }\n}\n\n@keyframes fadein {\n from {\n bottom: 0;\n opacity: 0;\n }\n\n to {\n bottom: var(--bottom-position);\n opacity: 1;\n }\n}\n\n@keyframes fadeout {\n from {\n bottom: var(--bottom-position);\n opacity: 1;\n }\n\n to {\n bottom: 0;\n opacity: 0;\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n Watch,\n} from \"@stencil/core\";\nimport closeIcon from \"../../assets/close-icon.svg\";\nimport { VARIANT_ICONS } from \"../../utils/constants\";\nimport {\n getSlot,\n isPropDefined,\n isSlotUsed,\n onComponentRequiredPropUndefined,\n} from \"../../utils/helpers\";\nimport {\n IcActivationTypes,\n IcStatusVariants,\n IcThemeMode,\n} from \"../../utils/types\";\nimport { ActionAreaElementTypes } from \"./ic-toast.types\";\n\nconst AUTO_DISMISS_TIMER_REFRESH_RATE_MS = 1000;\nconst TOAST_HEADING_CHAR_LIMIT = 70;\nconst TOAST_MESSAGE_CHAR_LIMIT = 140;\n\n/**\n * @slot action - IcButton or IcLink is placed below header and message. If used will default toast to manual `dismiss` type.\n * @slot neutral-icon - A custom neutral icon is placed on the left side of the component. If used will default toast to `neutral` variant.\n */\n@Component({\n tag: \"ic-toast\",\n styleUrl: \"ic-toast.css\",\n shadow: true,\n})\nexport class Toast {\n private dismissTimeout: number;\n private interactiveElements: ActionAreaElementTypes[] = [];\n private neutralVariantLabel: string;\n private timerRefreshInterval: number;\n private focusInteractiveElement: boolean;\n private shiftKeyPressed: boolean;\n\n @Element() el: HTMLIcToastElement;\n\n @State() isManual: boolean;\n @State() timerProgress = 100;\n @State() visible = false;\n\n /**\n * Sets the theme color to the dark or light theme color. \"inherit\" will set the color based on the system settings or ic-theme component.\n */\n @Prop() theme: IcThemeMode = \"inherit\";\n\n /**\n * If toast dismissMode is set to `automatic`, use this prop to define the time before the toast dismisses (in MILLISECONDS)\n * (NOTE: Has a minimum value of `5000ms`)\n */\n @Prop({ mutable: true }) autoDismissTimeout? = 5000;\n\n /**\n * If toast can be manually dismissed, this prop sets a custom aria-label for the ic-button component\n */\n @Prop() dismissButtonAriaLabel? = \"dismiss\";\n\n /**\n * How the toast will be dismissed. If manual will display a dismiss button.\n */\n @Prop({ mutable: true }) dismissMode?: IcActivationTypes = \"manual\";\n @Watch(\"dismissMode\")\n dismissModeChangeHandler(newValue: IcActivationTypes): void {\n this.isManual = newValue === \"manual\";\n }\n\n /**\n * The title to display at the start of the toast. (NOTE: Should be no more than `70` characters)\n */\n @Prop() heading!: string;\n\n /**\n * The main body message of the toast. (NOTE: Should be no more than `140` characters)\n */\n @Prop() message?: string;\n\n /**\n * Provides a custom alt-text to be announced to screen readers, if slotting a custom neutral icon\n */\n @Prop() neutralIconAriaLabel?: string;\n\n /**\n * The variant of the toast being rendered\n */\n @Prop({ mutable: true }) variant?: IcStatusVariants;\n\n /**\n * Is emitted when the user dismisses the toast\n */\n @Event() icDismiss: EventEmitter<void>;\n\n disconnectedCallback(): void {\n window.clearTimeout(this.dismissTimeout);\n window.clearInterval(this.timerRefreshInterval);\n }\n\n componentWillLoad(): void {\n this.handleLongText(\n this.heading.length > TOAST_HEADING_CHAR_LIMIT,\n !!this.message && this.message?.length > TOAST_MESSAGE_CHAR_LIMIT\n );\n\n if (this.autoDismissTimeout! < 5000) this.autoDismissTimeout = 5000;\n\n if (isSlotUsed(this.el, \"action\")) this.dismissMode = \"manual\";\n this.isManual = this.dismissMode === \"manual\";\n\n if (isSlotUsed(this.el, \"neutral-icon\")) this.variant = \"neutral\";\n if (this.variant === \"neutral\") {\n this.neutralVariantLabel =\n this.neutralIconAriaLabel ?? VARIANT_ICONS[this.variant].ariaLabel;\n }\n\n if (this.isManual) {\n const toastMessage: string = isPropDefined(this.message)\n ? `. ${this.message}`\n : \"\";\n this.el.setAttribute(\n \"aria-label\",\n this.variant\n ? this.neutralVariantLabel || VARIANT_ICONS[this.variant].ariaLabel\n : this.heading\n );\n (this.variant || this.message) &&\n this.el.setAttribute(\n \"aria-description\",\n this.variant ? `${this.heading}${toastMessage}` : this.message || \"\"\n );\n }\n }\n\n componentDidLoad(): void {\n onComponentRequiredPropUndefined(\n [{ prop: this.heading, propName: \"heading\" }],\n \"Toast\"\n );\n }\n\n componentDidUpdate(): void {\n if (this.focusInteractiveElement && this.isManual) {\n this.resetAutoDismissTimer();\n\n const actionContent = getSlot(\n this.el,\n \"action\"\n ) as ActionAreaElementTypes;\n const dismissButton = this.el.shadowRoot?.querySelector(\"ic-button\");\n if (actionContent) this.interactiveElements.push(actionContent);\n if (dismissButton) this.interactiveElements.push(dismissButton);\n\n this.focusInteractiveElement = false;\n this.findNextInteractiveElement(this.shiftKeyPressed).setFocus();\n this.shiftKeyPressed = false;\n }\n }\n\n @Watch(\"visible\")\n watchVisibleHandler(): void {\n if (this.visible) {\n const actionContent = getSlot(\n this.el,\n \"action\"\n ) as ActionAreaElementTypes;\n const dismissButton = this.el.shadowRoot?.querySelector(\"ic-button\");\n if (actionContent) this.interactiveElements.push(actionContent);\n if (dismissButton) this.interactiveElements.push(dismissButton);\n } else {\n this.interactiveElements = [];\n }\n }\n\n @Listen(\"icDismiss\", { capture: true })\n handleDismiss(): void {\n this.visible = false;\n this.resetAutoDismissTimer();\n }\n\n @Listen(\"keydown\", { target: \"document\" })\n handleKeyboard(ev: KeyboardEvent): void {\n if (this.visible) {\n if (this.isManual) {\n switch (ev.key) {\n case \"Tab\":\n ev.preventDefault();\n this.findNextInteractiveElement(ev.shiftKey).setFocus();\n break;\n case \"Escape\":\n !ev.repeat && this.dismissAction();\n ev.stopImmediatePropagation();\n break;\n }\n } else {\n if (ev.key === \"Tab\") {\n this.shiftKeyPressed = ev.shiftKey;\n this.focusInteractiveElement = true;\n }\n }\n }\n }\n\n @Listen(\"mouseenter\")\n @Listen(\"mouseleave\")\n handleTimer(ev: MouseEvent): void {\n switch (ev.type) {\n case \"mouseenter\":\n if (!this.isManual) {\n this.resetAutoDismissTimer();\n }\n this.isManual = true;\n break;\n case \"mouseleave\":\n if (this.dismissMode === \"automatic\") {\n this.isManual = false;\n this.interactiveElements = [];\n if (this.visible) {\n this.dismissTimeout = window.setTimeout(\n this.dismissAction,\n this.autoDismissTimeout\n );\n this.timerRefreshInterval = window.setInterval(\n this.handleProgressChange,\n AUTO_DISMISS_TIMER_REFRESH_RATE_MS\n );\n }\n }\n break;\n }\n }\n\n /**\n * @internal Used to display the individual toast.\n * @returns The element that previously had focus before the toast appeared\n */\n @Method()\n async setVisible(): Promise<HTMLElement | null> {\n if (!this.visible) this.visible = true;\n if (!this.isManual) {\n this.dismissTimeout = window.setTimeout(\n this.dismissAction,\n this.autoDismissTimeout\n );\n this.timerRefreshInterval = window.setInterval(\n this.handleProgressChange,\n AUTO_DISMISS_TIMER_REFRESH_RATE_MS\n );\n return null;\n } else {\n this.interactiveElements[0] &&\n window.setTimeout(() => this.interactiveElements[0].setFocus(), 200);\n return document.activeElement as HTMLElement;\n }\n }\n\n private dismissAction = (): void => {\n this.icDismiss.emit();\n };\n\n private handleProgressChange = () => {\n this.timerProgress -=\n (AUTO_DISMISS_TIMER_REFRESH_RATE_MS / this.autoDismissTimeout!) * 100;\n };\n\n private handleLongText(\n headingTooLong: boolean,\n messageTooLong?: boolean\n ): void {\n if (messageTooLong || headingTooLong) {\n console.error(\n `Too many characters in toast ${headingTooLong ? \"heading\" : \"\"}${\n headingTooLong && messageTooLong ? \" and \" : \"\"\n }${\n messageTooLong ? \"message\" : \"\"\n }. Refer to character limits specified in the prop description`\n );\n }\n }\n\n private findNextInteractiveElement(\n isBackwards: boolean\n ): ActionAreaElementTypes {\n const firstEl = this.interactiveElements[0];\n const lastEl =\n this.interactiveElements[this.interactiveElements.length - 1];\n\n if (this.isActive(isBackwards ? firstEl : lastEl))\n return isBackwards ? lastEl : firstEl;\n\n let currentIndex = 0;\n\n return this.interactiveElements.some((el, index) => {\n if (!this.isActive(el)) return false;\n currentIndex = index;\n return true;\n })\n ? this.interactiveElements[currentIndex + (isBackwards ? -1 : 1)]\n : firstEl;\n }\n\n private resetAutoDismissTimer(): void {\n window.clearTimeout(this.dismissTimeout);\n window.clearInterval(this.timerRefreshInterval);\n this.timerProgress = 100;\n }\n\n private isActive(targetEl: HTMLElement): boolean {\n return targetEl === this.el\n ? !!this.el.shadowRoot!.activeElement\n : document.activeElement === targetEl;\n }\n\n private onFocus = (): void => {\n if (this.focusInteractiveElement) {\n this.isManual = true;\n }\n };\n\n private onBlur = (): void => {\n this.handleTimer({ type: \"mouseleave\" } as MouseEvent);\n };\n\n render() {\n const {\n variant,\n heading,\n message,\n visible,\n isManual,\n dismissButtonAriaLabel,\n theme,\n } = this;\n return (\n <Host\n class={{\n [`ic-theme-${theme}`]: theme !== \"inherit\",\n [\"ic-toast-hidden\"]: !visible,\n [`ic-toast-variant-${variant}`]: variant !== undefined,\n }}\n tabindex=\"0\"\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n role={isManual ? \"dialog\" : \"alert\"}\n aria-live={isManual ? null : \"polite\"}\n >\n <div\n class={{\n [\"container\"]: true,\n [`container-${variant}`]: variant !== undefined,\n }}\n >\n {variant && visible && (\n <div class=\"toast-icon-container\">\n <div\n class={{\n [\"divider\"]: true,\n [`divider-${variant}`]: true,\n }}\n ></div>\n {variant === \"neutral\" ? (\n <slot name=\"neutral-icon\" />\n ) : (\n <span\n class=\"toast-icon\"\n innerHTML={VARIANT_ICONS[variant].icon}\n ></span>\n )}\n </div>\n )}\n <div\n class={{\n [\"toast-content\"]: true,\n [\"no-icon\"]:\n variant === \"neutral\" && !isSlotUsed(this.el, \"neutral-icon\"),\n }}\n >\n <div class=\"toast-text\">\n <ic-typography variant=\"subtitle-large\" class=\"toast-heading\">\n {visible && (isManual ? <h5>{heading}</h5> : <p>{heading}</p>)}\n </ic-typography>\n {message && (\n <ic-typography variant=\"body\" class=\"toast-message\">\n {visible && <p>{message}</p>}\n </ic-typography>\n )}\n </div>\n {isSlotUsed(this.el, \"action\") && (\n <div class=\"toast-action-container\">\n <slot name=\"action\" />\n </div>\n )}\n </div>\n {!isManual ? (\n <ic-loading-indicator\n class=\"toast-dismiss-timer\"\n theme=\"dark\"\n monochrome\n size=\"icon\"\n progress={this.timerProgress}\n description=\"Dismiss timer\"\n ></ic-loading-indicator>\n ) : (\n <ic-button\n id=\"dismiss-button\"\n innerHTML={closeIcon}\n onClick={this.dismissAction}\n variant=\"icon-tertiary\"\n aria-label={dismissButtonAriaLabel}\n ></ic-button>\n )}\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Components, JSX } from "../dist/types/components";
|
|
2
|
+
|
|
3
|
+
interface IcToggleButtonGroup extends Components.IcToggleButtonGroup, HTMLElement {}
|
|
4
|
+
export const IcToggleButtonGroup: {
|
|
5
|
+
prototype: IcToggleButtonGroup;
|
|
6
|
+
new (): IcToggleButtonGroup;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Used to define this component and all nested components recursively.
|
|
10
|
+
*/
|
|
11
|
+
export const defineCustomElement: () => void;
|