@haiilo/catalyst 2.5.0 → 3.0.1
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/dist/catalyst/catalyst.css +2411 -2
- package/dist/catalyst/catalyst.esm.js +1 -1
- package/dist/catalyst/catalyst.esm.js.map +1 -1
- package/dist/catalyst/index.cdn.js +1 -0
- package/dist/catalyst/p-1c6eace6.js +3 -0
- package/dist/catalyst/p-1c6eace6.js.map +1 -0
- package/dist/catalyst/p-d5ac868d.entry.js +10 -0
- package/dist/catalyst/p-d5ac868d.entry.js.map +1 -0
- package/dist/catalyst/scss/_variables.tokens.scss +2 -2
- package/dist/catalyst/scss/core/_dialog.scss +66 -0
- package/dist/catalyst/scss/core/_notification.scss +10 -10
- package/dist/catalyst/scss/core/_typography.scss +1 -1
- package/dist/catalyst/scss/index.scss +1 -0
- package/dist/catalyst/scss/utils/_media.mixins.scss +1 -0
- package/dist/cjs/cat-alert_24.cjs.entry.js +1361 -43
- package/dist/cjs/cat-alert_24.cjs.entry.js.map +1 -1
- package/dist/cjs/catalyst.cjs.js +2 -2
- package/dist/cjs/{index-e540e911.js → index-22e41d18.js} +1 -4
- package/dist/cjs/index-22e41d18.js.map +1 -0
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/collection/collection-manifest.json +0 -1
- package/dist/collection/components/cat-button/cat-button.js +23 -6
- package/dist/collection/components/cat-button/cat-button.js.map +1 -1
- package/dist/collection/components/cat-icon/cat-icon.js +21 -9
- package/dist/collection/components/cat-icon/cat-icon.js.map +1 -1
- package/dist/collection/components/cat-input/cat-input.css +10 -0
- package/dist/collection/components/cat-scrollable/cat-scrollable.js +18 -14
- package/dist/collection/components/cat-scrollable/cat-scrollable.js.map +1 -1
- package/dist/collection/components/cat-textarea/cat-textarea.css +5 -0
- package/dist/collection/index.cdn.js +1 -0
- package/dist/collection/scss/_variables.tokens.scss +2 -2
- package/dist/collection/scss/core/_dialog.scss +66 -0
- package/dist/collection/scss/core/_notification.scss +10 -10
- package/dist/collection/scss/core/_typography.scss +1 -1
- package/dist/collection/scss/index.scss +1 -0
- package/dist/collection/scss/utils/_media.mixins.scss +1 -0
- package/dist/components/cat-badge.js.map +1 -1
- package/dist/components/cat-button2.js +7 -6
- package/dist/components/cat-button2.js.map +1 -1
- package/dist/components/cat-card.js.map +1 -1
- package/dist/components/cat-dropdown2.js +759 -2
- package/dist/components/cat-dropdown2.js.map +1 -1
- package/dist/components/cat-icon2.js +2 -5
- package/dist/components/cat-icon2.js.map +1 -1
- package/dist/components/cat-input.js +1 -1
- package/dist/components/cat-input.js.map +1 -1
- package/dist/components/cat-scrollable2.js +241 -14
- package/dist/components/cat-scrollable2.js.map +1 -1
- package/dist/components/cat-select-demo.js +2 -2
- package/dist/components/cat-select2.js +2 -187
- package/dist/components/cat-select2.js.map +1 -1
- package/dist/components/cat-textarea.js +1 -1
- package/dist/components/cat-textarea.js.map +1 -1
- package/dist/components/index.d.ts +0 -1
- package/dist/components/index.js +0 -1
- package/dist/components/index.js.map +1 -1
- package/dist/esm/cat-alert_24.entry.js +1355 -37
- package/dist/esm/cat-alert_24.entry.js.map +1 -1
- package/dist/esm/catalyst.js +2 -2
- package/dist/esm/{index-c2a28ebb.js → index-7b85fb91.js} +1 -4
- package/dist/esm/index-7b85fb91.js.map +1 -0
- package/dist/esm/loader.js +2 -2
- package/dist/types/components/cat-button/cat-button.d.ts +5 -0
- package/dist/types/components/cat-icon/cat-icon.d.ts +5 -1
- package/dist/types/components/cat-scrollable/cat-scrollable.d.ts +3 -0
- package/dist/types/components.d.ts +17 -26
- package/package.json +2 -2
- package/dist/catalyst/p-2fdb52c9.entry.js +0 -2
- package/dist/catalyst/p-2fdb52c9.entry.js.map +0 -1
- package/dist/catalyst/p-53a1db22.js +0 -3
- package/dist/catalyst/p-53a1db22.js.map +0 -1
- package/dist/catalyst/p-5bfc70e3.entry.js +0 -2
- package/dist/catalyst/p-5bfc70e3.entry.js.map +0 -1
- package/dist/catalyst/p-60a20ebe.js +0 -10
- package/dist/catalyst/p-60a20ebe.js.map +0 -1
- package/dist/cjs/cat-modal.cjs.entry.js +0 -74
- package/dist/cjs/cat-modal.cjs.entry.js.map +0 -1
- package/dist/cjs/first-tabbable-7966cf1c.js +0 -1288
- package/dist/cjs/first-tabbable-7966cf1c.js.map +0 -1
- package/dist/cjs/index-e540e911.js.map +0 -1
- package/dist/collection/components/cat-modal/cat-modal.css +0 -65
- package/dist/collection/components/cat-modal/cat-modal.js +0 -117
- package/dist/collection/components/cat-modal/cat-modal.js.map +0 -1
- package/dist/components/cat-modal.d.ts +0 -11
- package/dist/components/cat-modal.js +0 -111
- package/dist/components/cat-modal.js.map +0 -1
- package/dist/components/focus-trap.esm.js +0 -763
- package/dist/components/focus-trap.esm.js.map +0 -1
- package/dist/esm/cat-modal.entry.js +0 -70
- package/dist/esm/cat-modal.entry.js.map +0 -1
- package/dist/esm/first-tabbable-4a00de61.js +0 -1284
- package/dist/esm/first-tabbable-4a00de61.js.map +0 -1
- package/dist/esm/index-c2a28ebb.js.map +0 -1
- package/dist/types/components/cat-modal/cat-modal.d.ts +0 -20
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { Component, Element, h, Method, Prop, State } from '@stencil/core';
|
|
2
|
-
import * as focusTrap from 'focus-trap';
|
|
3
|
-
import firstTabbable from '../../utils/first-tabbable';
|
|
4
|
-
export class CatModal {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.isVisible = false;
|
|
7
|
-
/**
|
|
8
|
-
* The size of the modal.
|
|
9
|
-
*/
|
|
10
|
-
this.size = 'm';
|
|
11
|
-
}
|
|
12
|
-
componentDidLoad() {
|
|
13
|
-
if (this.modal) {
|
|
14
|
-
this.trap = focusTrap.createFocusTrap(this.modal, {
|
|
15
|
-
tabbableOptions: {
|
|
16
|
-
getShadowRoot: true
|
|
17
|
-
},
|
|
18
|
-
initialFocus: firstTabbable(this.closeButton),
|
|
19
|
-
allowOutsideClick: true,
|
|
20
|
-
clickOutsideDeactivates: event => !this.modal || !event.composedPath().includes(this.modal),
|
|
21
|
-
onDeactivate: () => (this.isVisible = false),
|
|
22
|
-
setReturnFocus: previousActiveElement => previousActiveElement instanceof HTMLElement
|
|
23
|
-
? firstTabbable(previousActiveElement)
|
|
24
|
-
: previousActiveElement
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
componentDidUpdate() {
|
|
29
|
-
var _a;
|
|
30
|
-
if (this.isVisible)
|
|
31
|
-
(_a = this.trap) === null || _a === void 0 ? void 0 : _a.activate();
|
|
32
|
-
this.updateAccessibility(this.hostElement);
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Shows the modal.
|
|
36
|
-
*/
|
|
37
|
-
async show() {
|
|
38
|
-
this.isVisible = true;
|
|
39
|
-
}
|
|
40
|
-
render() {
|
|
41
|
-
return (h("div", { "aria-modal": true, role: "dialog", "aria-hidden": !this.isVisible ? 'true' : 'false', class: "modal-wrapper" },
|
|
42
|
-
h("div", { ref: el => (this.modal = el), class: { modal: true, [`modal-${this.size}`]: Boolean(this.size) } },
|
|
43
|
-
h("div", { class: "modal-header" },
|
|
44
|
-
h("cat-button", { ref: el => (this.closeButton = el), icon: "cross-outlined", class: "close-button", size: "s", iconOnly: true, a11yLabel: "close", onCatClick: this.onClick.bind(this) })),
|
|
45
|
-
h("div", { class: "modal-content" },
|
|
46
|
-
h("slot", null)))));
|
|
47
|
-
}
|
|
48
|
-
onClick() {
|
|
49
|
-
var _a;
|
|
50
|
-
(_a = this.trap) === null || _a === void 0 ? void 0 : _a.deactivate();
|
|
51
|
-
}
|
|
52
|
-
updateAccessibility(element) {
|
|
53
|
-
if (element.parentElement) {
|
|
54
|
-
Array.from(element.parentElement.children).forEach(elementSibling => {
|
|
55
|
-
if (elementSibling !== element) {
|
|
56
|
-
this.isVisible
|
|
57
|
-
? elementSibling.setAttribute('aria-hidden', 'true')
|
|
58
|
-
: elementSibling.removeAttribute('aria-hidden');
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
if (element.parentElement !== document.body) {
|
|
62
|
-
this.updateAccessibility(element.parentElement);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
static get is() { return "cat-modal"; }
|
|
67
|
-
static get encapsulation() { return "shadow"; }
|
|
68
|
-
static get originalStyleUrls() { return {
|
|
69
|
-
"$": ["cat-modal.scss"]
|
|
70
|
-
}; }
|
|
71
|
-
static get styleUrls() { return {
|
|
72
|
-
"$": ["cat-modal.css"]
|
|
73
|
-
}; }
|
|
74
|
-
static get properties() { return {
|
|
75
|
-
"size": {
|
|
76
|
-
"type": "string",
|
|
77
|
-
"mutable": false,
|
|
78
|
-
"complexType": {
|
|
79
|
-
"original": "'s' | 'm' | 'l'",
|
|
80
|
-
"resolved": "\"l\" | \"m\" | \"s\"",
|
|
81
|
-
"references": {}
|
|
82
|
-
},
|
|
83
|
-
"required": false,
|
|
84
|
-
"optional": false,
|
|
85
|
-
"docs": {
|
|
86
|
-
"tags": [],
|
|
87
|
-
"text": "The size of the modal."
|
|
88
|
-
},
|
|
89
|
-
"attribute": "size",
|
|
90
|
-
"reflect": false,
|
|
91
|
-
"defaultValue": "'m'"
|
|
92
|
-
}
|
|
93
|
-
}; }
|
|
94
|
-
static get states() { return {
|
|
95
|
-
"isVisible": {}
|
|
96
|
-
}; }
|
|
97
|
-
static get methods() { return {
|
|
98
|
-
"show": {
|
|
99
|
-
"complexType": {
|
|
100
|
-
"signature": "() => Promise<void>",
|
|
101
|
-
"parameters": [],
|
|
102
|
-
"references": {
|
|
103
|
-
"Promise": {
|
|
104
|
-
"location": "global"
|
|
105
|
-
}
|
|
106
|
-
},
|
|
107
|
-
"return": "Promise<void>"
|
|
108
|
-
},
|
|
109
|
-
"docs": {
|
|
110
|
-
"text": "Shows the modal.",
|
|
111
|
-
"tags": []
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}; }
|
|
115
|
-
static get elementRef() { return "hostElement"; }
|
|
116
|
-
}
|
|
117
|
-
//# sourceMappingURL=cat-modal.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cat-modal.js","sourceRoot":"","sources":["../../../src/components/cat-modal/cat-modal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, h, Method, Prop, State } from '@stencil/core';\nimport * as focusTrap from 'focus-trap';\nimport firstTabbable from '../../utils/first-tabbable';\n\n@Component({\n tag: 'cat-modal',\n styleUrl: 'cat-modal.scss',\n shadow: true\n})\nexport class CatModal {\n private trap?: focusTrap.FocusTrap;\n private modal?: HTMLElement;\n private closeButton?: HTMLElement;\n\n @Element() hostElement!: HTMLElement;\n\n @State() isVisible = false;\n\n /**\n * The size of the modal.\n */\n @Prop() size: 's' | 'm' | 'l' = 'm';\n\n componentDidLoad(): void {\n if (this.modal) {\n this.trap = focusTrap.createFocusTrap(this.modal, {\n tabbableOptions: {\n getShadowRoot: true\n },\n initialFocus: firstTabbable(this.closeButton),\n allowOutsideClick: true,\n clickOutsideDeactivates: event => !this.modal || !event.composedPath().includes(this.modal),\n onDeactivate: () => (this.isVisible = false),\n setReturnFocus: previousActiveElement =>\n previousActiveElement instanceof HTMLElement\n ? (firstTabbable(previousActiveElement) as HTMLElement)\n : previousActiveElement\n });\n }\n }\n\n componentDidUpdate(): void {\n if (this.isVisible) this.trap?.activate();\n this.updateAccessibility(this.hostElement);\n }\n\n /**\n * Shows the modal.\n */\n @Method()\n async show(): Promise<void> {\n this.isVisible = true;\n }\n\n render() {\n return (\n <div aria-modal role=\"dialog\" aria-hidden={!this.isVisible ? 'true' : 'false'} class=\"modal-wrapper\">\n <div ref={el => (this.modal = el)} class={{ modal: true, [`modal-${this.size}`]: Boolean(this.size) }}>\n <div class=\"modal-header\">\n <cat-button\n ref={el => (this.closeButton = el)}\n icon=\"cross-outlined\"\n class=\"close-button\"\n size=\"s\"\n iconOnly\n a11yLabel=\"close\"\n onCatClick={this.onClick.bind(this)}\n ></cat-button>\n </div>\n <div class=\"modal-content\">\n <slot></slot>\n </div>\n </div>\n </div>\n );\n }\n\n private onClick() {\n this.trap?.deactivate();\n }\n\n private updateAccessibility(element: HTMLElement) {\n if (element.parentElement) {\n Array.from(element.parentElement.children).forEach(elementSibling => {\n if (elementSibling !== element) {\n this.isVisible\n ? elementSibling.setAttribute('aria-hidden', 'true')\n : elementSibling.removeAttribute('aria-hidden');\n }\n });\n\n if (element.parentElement !== document.body) {\n this.updateAccessibility(element.parentElement);\n }\n }\n }\n}\n"]}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { Components, JSX } from "../types/components";
|
|
2
|
-
|
|
3
|
-
interface CatModal extends Components.CatModal, HTMLElement {}
|
|
4
|
-
export const CatModal: {
|
|
5
|
-
prototype: CatModal;
|
|
6
|
-
new (): CatModal;
|
|
7
|
-
};
|
|
8
|
-
/**
|
|
9
|
-
* Used to define this component and all nested components recursively.
|
|
10
|
-
*/
|
|
11
|
-
export const defineCustomElement: () => void;
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import { proxyCustomElement, HTMLElement, h } from '@stencil/core/internal/client';
|
|
2
|
-
import { c as createFocusTrap } from './focus-trap.esm.js';
|
|
3
|
-
import { f as firstTabbable } from './first-tabbable.js';
|
|
4
|
-
import { d as defineCustomElement$4 } from './cat-button2.js';
|
|
5
|
-
import { d as defineCustomElement$3 } from './cat-icon2.js';
|
|
6
|
-
import { d as defineCustomElement$2 } from './cat-spinner2.js';
|
|
7
|
-
|
|
8
|
-
const catModalCss = ":host{display:block}:host([hidden]){display:none}.modal-wrapper{position:fixed;top:0;right:0;bottom:0;left:0;background-color:rgb(rgb(var(--cat-bg-backdrop, 0, 0, 0)), var(--cat-opacity-backdrop, 0.6));z-index:2;display:flex}.modal-wrapper[aria-hidden=true]{display:none}.modal{margin:auto;z-index:2;position:relative;background-color:white;border-radius:var(--cat-border-radius-l, 0.5rem);max-width:100%;padding:32px}.modal-header{display:flex;justify-content:end;align-self:stretch}.modal-header .close-button::part(button){box-shadow:unset}.modal-content{display:flex;flex-direction:column;align-items:flex-start;align-self:stretch;margin:16px 0}.modal-s{width:400px}.modal-m{width:600px}.modal-l{width:800px}";
|
|
9
|
-
|
|
10
|
-
const CatModal$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
11
|
-
constructor() {
|
|
12
|
-
super();
|
|
13
|
-
this.__registerHost();
|
|
14
|
-
this.__attachShadow();
|
|
15
|
-
this.isVisible = false;
|
|
16
|
-
/**
|
|
17
|
-
* The size of the modal.
|
|
18
|
-
*/
|
|
19
|
-
this.size = 'm';
|
|
20
|
-
}
|
|
21
|
-
componentDidLoad() {
|
|
22
|
-
if (this.modal) {
|
|
23
|
-
this.trap = createFocusTrap(this.modal, {
|
|
24
|
-
tabbableOptions: {
|
|
25
|
-
getShadowRoot: true
|
|
26
|
-
},
|
|
27
|
-
initialFocus: firstTabbable(this.closeButton),
|
|
28
|
-
allowOutsideClick: true,
|
|
29
|
-
clickOutsideDeactivates: event => !this.modal || !event.composedPath().includes(this.modal),
|
|
30
|
-
onDeactivate: () => (this.isVisible = false),
|
|
31
|
-
setReturnFocus: previousActiveElement => previousActiveElement instanceof HTMLElement
|
|
32
|
-
? firstTabbable(previousActiveElement)
|
|
33
|
-
: previousActiveElement
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
componentDidUpdate() {
|
|
38
|
-
var _a;
|
|
39
|
-
if (this.isVisible)
|
|
40
|
-
(_a = this.trap) === null || _a === void 0 ? void 0 : _a.activate();
|
|
41
|
-
this.updateAccessibility(this.hostElement);
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Shows the modal.
|
|
45
|
-
*/
|
|
46
|
-
async show() {
|
|
47
|
-
this.isVisible = true;
|
|
48
|
-
}
|
|
49
|
-
render() {
|
|
50
|
-
return (h("div", { "aria-modal": true, role: "dialog", "aria-hidden": !this.isVisible ? 'true' : 'false', class: "modal-wrapper" }, h("div", { ref: el => (this.modal = el), class: { modal: true, [`modal-${this.size}`]: Boolean(this.size) } }, h("div", { class: "modal-header" }, h("cat-button", { ref: el => (this.closeButton = el), icon: "cross-outlined", class: "close-button", size: "s", iconOnly: true, a11yLabel: "close", onCatClick: this.onClick.bind(this) })), h("div", { class: "modal-content" }, h("slot", null)))));
|
|
51
|
-
}
|
|
52
|
-
onClick() {
|
|
53
|
-
var _a;
|
|
54
|
-
(_a = this.trap) === null || _a === void 0 ? void 0 : _a.deactivate();
|
|
55
|
-
}
|
|
56
|
-
updateAccessibility(element) {
|
|
57
|
-
if (element.parentElement) {
|
|
58
|
-
Array.from(element.parentElement.children).forEach(elementSibling => {
|
|
59
|
-
if (elementSibling !== element) {
|
|
60
|
-
this.isVisible
|
|
61
|
-
? elementSibling.setAttribute('aria-hidden', 'true')
|
|
62
|
-
: elementSibling.removeAttribute('aria-hidden');
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
if (element.parentElement !== document.body) {
|
|
66
|
-
this.updateAccessibility(element.parentElement);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
get hostElement() { return this; }
|
|
71
|
-
static get style() { return catModalCss; }
|
|
72
|
-
}, [1, "cat-modal", {
|
|
73
|
-
"size": [1],
|
|
74
|
-
"isVisible": [32],
|
|
75
|
-
"show": [64]
|
|
76
|
-
}]);
|
|
77
|
-
function defineCustomElement$1() {
|
|
78
|
-
if (typeof customElements === "undefined") {
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
const components = ["cat-modal", "cat-button", "cat-icon", "cat-spinner"];
|
|
82
|
-
components.forEach(tagName => { switch (tagName) {
|
|
83
|
-
case "cat-modal":
|
|
84
|
-
if (!customElements.get(tagName)) {
|
|
85
|
-
customElements.define(tagName, CatModal$1);
|
|
86
|
-
}
|
|
87
|
-
break;
|
|
88
|
-
case "cat-button":
|
|
89
|
-
if (!customElements.get(tagName)) {
|
|
90
|
-
defineCustomElement$4();
|
|
91
|
-
}
|
|
92
|
-
break;
|
|
93
|
-
case "cat-icon":
|
|
94
|
-
if (!customElements.get(tagName)) {
|
|
95
|
-
defineCustomElement$3();
|
|
96
|
-
}
|
|
97
|
-
break;
|
|
98
|
-
case "cat-spinner":
|
|
99
|
-
if (!customElements.get(tagName)) {
|
|
100
|
-
defineCustomElement$2();
|
|
101
|
-
}
|
|
102
|
-
break;
|
|
103
|
-
} });
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
const CatModal = CatModal$1;
|
|
107
|
-
const defineCustomElement = defineCustomElement$1;
|
|
108
|
-
|
|
109
|
-
export { CatModal, defineCustomElement };
|
|
110
|
-
|
|
111
|
-
//# sourceMappingURL=cat-modal.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"file":"cat-modal.js","mappings":";;;;;;;AAAA,MAAM,WAAW,GAAG,0sBAA0sB;;MCSjtBA,UAAQ;EALrB;;;;IAYW,cAAS,GAAG,KAAK,CAAC;;;;IAKnB,SAAI,GAAoB,GAAG,CAAC;GA2ErC;EAzEC,gBAAgB;IACd,IAAI,IAAI,CAAC,KAAK,EAAE;MACd,IAAI,CAAC,IAAI,GAAGC,eAAyB,CAAC,IAAI,CAAC,KAAK,EAAE;QAChD,eAAe,EAAE;UACf,aAAa,EAAE,IAAI;SACpB;QACD,YAAY,EAAE,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;QAC7C,iBAAiB,EAAE,IAAI;QACvB,uBAAuB,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QAC3F,YAAY,EAAE,OAAO,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAC5C,cAAc,EAAE,qBAAqB,IACnC,qBAAqB,YAAY,WAAW;YACvC,aAAa,CAAC,qBAAqB,CAAiB;YACrD,qBAAqB;OAC5B,CAAC,CAAC;KACJ;GACF;EAED,kBAAkB;;IAChB,IAAI,IAAI,CAAC,SAAS;MAAE,MAAA,IAAI,CAAC,IAAI,0CAAE,QAAQ,EAAE,CAAC;IAC1C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;GAC5C;;;;EAMD,MAAM,IAAI;IACR,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;GACvB;EAED,MAAM;IACJ,QACE,+BAAgB,IAAI,EAAC,QAAQ,iBAAc,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,GAAG,OAAO,EAAE,KAAK,EAAC,eAAe,IAClG,WAAK,GAAG,EAAE,EAAE,KAAK,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IACnG,WAAK,KAAK,EAAC,cAAc,IACvB,kBACE,GAAG,EAAE,EAAE,KAAK,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,EAClC,IAAI,EAAC,gBAAgB,EACrB,KAAK,EAAC,cAAc,EACpB,IAAI,EAAC,GAAG,EACR,QAAQ,QACR,SAAS,EAAC,OAAO,EACjB,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GACvB,CACV,EACN,WAAK,KAAK,EAAC,eAAe,IACxB,eAAa,CACT,CACF,CACF,EACN;GACH;EAEO,OAAO;;IACb,MAAA,IAAI,CAAC,IAAI,0CAAE,UAAU,EAAE,CAAC;GACzB;EAEO,mBAAmB,CAAC,OAAoB;IAC9C,IAAI,OAAO,CAAC,aAAa,EAAE;MACzB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,cAAc;QAC/D,IAAI,cAAc,KAAK,OAAO,EAAE;UAC9B,IAAI,CAAC,SAAS;cACV,cAAc,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;cAClD,cAAc,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;SACnD;OACF,CAAC,CAAC;MAEH,IAAI,OAAO,CAAC,aAAa,KAAK,QAAQ,CAAC,IAAI,EAAE;QAC3C,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;OACjD;KACF;GACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["CatModal","focusTrap.createFocusTrap"],"sources":["./src/components/cat-modal/cat-modal.scss?tag=cat-modal&encapsulation=shadow","./src/components/cat-modal/cat-modal.tsx"],"sourcesContent":["@use 'variables' as *;\n@use 'mixins' as *;\n\n:host {\n display: block;\n}\n\n:host([hidden]) {\n display: none;\n}\n\n.modal-wrapper {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: rgb(cat-token('color.ui.background.backdrop'), cat-token('opacity.backdrop'));\n z-index: 2;\n display: flex;\n\n &[aria-hidden='true'] {\n display: none;\n }\n}\n\n.modal {\n margin: auto;\n z-index: 2;\n position: relative;\n background-color: cat-token('color.ui.background.body');\n border-radius: cat-border-radius('l');\n max-width: 100%;\n padding: 32px;\n}\n\n.modal-header {\n display: flex;\n justify-content: end;\n align-self: stretch;\n\n .close-button::part(button) {\n box-shadow: unset;\n }\n}\n\n.modal-content {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n align-self: stretch;\n margin: 16px 0;\n}\n\n@mixin size($size) {\n .modal-#{$size} {\n width: cat-token('size.modal.#{$size}');\n }\n}\n\n@include size('s');\n@include size('m');\n@include size('l');\n","import { Component, Element, h, Method, Prop, State } from '@stencil/core';\nimport * as focusTrap from 'focus-trap';\nimport firstTabbable from '../../utils/first-tabbable';\n\n@Component({\n tag: 'cat-modal',\n styleUrl: 'cat-modal.scss',\n shadow: true\n})\nexport class CatModal {\n private trap?: focusTrap.FocusTrap;\n private modal?: HTMLElement;\n private closeButton?: HTMLElement;\n\n @Element() hostElement!: HTMLElement;\n\n @State() isVisible = false;\n\n /**\n * The size of the modal.\n */\n @Prop() size: 's' | 'm' | 'l' = 'm';\n\n componentDidLoad(): void {\n if (this.modal) {\n this.trap = focusTrap.createFocusTrap(this.modal, {\n tabbableOptions: {\n getShadowRoot: true\n },\n initialFocus: firstTabbable(this.closeButton),\n allowOutsideClick: true,\n clickOutsideDeactivates: event => !this.modal || !event.composedPath().includes(this.modal),\n onDeactivate: () => (this.isVisible = false),\n setReturnFocus: previousActiveElement =>\n previousActiveElement instanceof HTMLElement\n ? (firstTabbable(previousActiveElement) as HTMLElement)\n : previousActiveElement\n });\n }\n }\n\n componentDidUpdate(): void {\n if (this.isVisible) this.trap?.activate();\n this.updateAccessibility(this.hostElement);\n }\n\n /**\n * Shows the modal.\n */\n @Method()\n async show(): Promise<void> {\n this.isVisible = true;\n }\n\n render() {\n return (\n <div aria-modal role=\"dialog\" aria-hidden={!this.isVisible ? 'true' : 'false'} class=\"modal-wrapper\">\n <div ref={el => (this.modal = el)} class={{ modal: true, [`modal-${this.size}`]: Boolean(this.size) }}>\n <div class=\"modal-header\">\n <cat-button\n ref={el => (this.closeButton = el)}\n icon=\"cross-outlined\"\n class=\"close-button\"\n size=\"s\"\n iconOnly\n a11yLabel=\"close\"\n onCatClick={this.onClick.bind(this)}\n ></cat-button>\n </div>\n <div class=\"modal-content\">\n <slot></slot>\n </div>\n </div>\n </div>\n );\n }\n\n private onClick() {\n this.trap?.deactivate();\n }\n\n private updateAccessibility(element: HTMLElement) {\n if (element.parentElement) {\n Array.from(element.parentElement.children).forEach(elementSibling => {\n if (elementSibling !== element) {\n this.isVisible\n ? elementSibling.setAttribute('aria-hidden', 'true')\n : elementSibling.removeAttribute('aria-hidden');\n }\n });\n\n if (element.parentElement !== document.body) {\n this.updateAccessibility(element.parentElement);\n }\n }\n }\n}\n"],"version":3}
|