@haiilo/catalyst 1.3.0 → 1.3.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.esm.js +1 -1
- package/dist/catalyst/catalyst.esm.js.map +1 -1
- package/dist/catalyst/p-53a1db22.js +3 -0
- package/dist/catalyst/p-53a1db22.js.map +1 -0
- package/dist/catalyst/p-5bfc70e3.entry.js +2 -0
- package/dist/catalyst/{p-270fd91d.entry.js.map → p-5bfc70e3.entry.js.map} +1 -1
- package/dist/catalyst/p-b561dcd4.entry.js +2 -0
- package/dist/catalyst/p-b561dcd4.entry.js.map +1 -0
- package/dist/cjs/cat-alert_22.cjs.entry.js +11 -15
- package/dist/cjs/cat-alert_22.cjs.entry.js.map +1 -1
- package/dist/cjs/cat-modal.cjs.entry.js +2 -2
- package/dist/cjs/cat-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/catalyst.cjs.js +2 -2
- package/dist/cjs/{index-b2134f1b.js → index-e540e911.js} +1 -4
- package/dist/cjs/index-e540e911.js.map +1 -0
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/collection/components/cat-menu/cat-menu.css +3 -1
- package/dist/collection/components/cat-menu/cat-menu.js +23 -1
- package/dist/collection/components/cat-menu/cat-menu.js.map +1 -1
- package/dist/collection/components/cat-radio-group/cat-radio-group.js +3 -11
- package/dist/collection/components/cat-radio-group/cat-radio-group.js.map +1 -1
- package/dist/collection/components/cat-select-demo/cat-select-demo.js +4 -1
- package/dist/collection/components/cat-select-demo/cat-select-demo.js.map +1 -1
- package/dist/components/cat-menu.js +1 -167
- package/dist/components/cat-menu.js.map +1 -1
- package/dist/components/cat-menu2.js +176 -0
- package/dist/components/cat-menu2.js.map +1 -0
- package/dist/components/cat-radio-group.js +3 -11
- package/dist/components/cat-radio-group.js.map +1 -1
- package/dist/components/cat-select-demo.js +15 -9
- package/dist/components/cat-select-demo.js.map +1 -1
- package/dist/esm/cat-alert_22.entry.js +11 -15
- package/dist/esm/cat-alert_22.entry.js.map +1 -1
- package/dist/esm/cat-modal.entry.js +2 -2
- package/dist/esm/cat-modal.entry.js.map +1 -1
- package/dist/esm/catalyst.js +2 -2
- package/dist/esm/{index-033048ed.js → index-c2a28ebb.js} +2 -4
- package/dist/esm/index-c2a28ebb.js.map +1 -0
- package/dist/esm/loader.js +2 -2
- package/dist/types/components/cat-menu/cat-menu.d.ts +4 -0
- package/dist/types/components.d.ts +8 -0
- package/package.json +2 -2
- package/dist/catalyst/p-270fd91d.entry.js +0 -2
- package/dist/catalyst/p-3ad731e4.entry.js +0 -2
- package/dist/catalyst/p-3ad731e4.entry.js.map +0 -1
- package/dist/catalyst/p-692e49d6.js +0 -3
- package/dist/catalyst/p-692e49d6.js.map +0 -1
- package/dist/cjs/index-b2134f1b.js.map +0 -1
- package/dist/esm/index-033048ed.js.map +0 -1
|
@@ -1,170 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as autoUpdate, c as computePosition, o as offset, f as flip } from './floating-ui.dom.esm.js';
|
|
3
|
-
import { c as createFocusTrap } from './focus-trap.esm.js';
|
|
4
|
-
import { l as loglevel } from './loglevel.js';
|
|
5
|
-
import { t as tabbable, f as firstTabbable } from './first-tabbable.js';
|
|
6
|
-
|
|
7
|
-
const catMenuCss = ":host{display:contents}:host([hidden]){display:none}::slotted(nav){padding-top:0.5rem;padding-bottom:0.5rem;min-width:8rem;max-width:16rem}.content{position:absolute;background:white;display:none;overflow:auto;-webkit-overflow-scrolling:touch;min-height:2rem;max-height:calc(100vh - 48px);box-shadow:0 1px 4px 0 rgba(16, 29, 48, 0.2);border-radius:var(--cat-border-radius-m, 0.25rem);z-index:100}";
|
|
8
|
-
|
|
9
|
-
let nextUniqueId = 0;
|
|
10
|
-
const CatMenu$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
11
|
-
constructor() {
|
|
12
|
-
super();
|
|
13
|
-
this.__registerHost();
|
|
14
|
-
this.__attachShadow();
|
|
15
|
-
this.catOpen = createEvent(this, "catOpen", 7);
|
|
16
|
-
this.catClose = createEvent(this, "catClose", 7);
|
|
17
|
-
this.id = nextUniqueId++;
|
|
18
|
-
/**
|
|
19
|
-
* The placement of the menu.
|
|
20
|
-
*/
|
|
21
|
-
this.placement = 'bottom-start';
|
|
22
|
-
/**
|
|
23
|
-
* Do not close the menu on outside clicks.
|
|
24
|
-
*/
|
|
25
|
-
this.noAutoClose = false;
|
|
26
|
-
}
|
|
27
|
-
clickHandler(event) {
|
|
28
|
-
if (!this.trigger) {
|
|
29
|
-
this.initTrigger();
|
|
30
|
-
this.show();
|
|
31
|
-
}
|
|
32
|
-
// hide menu on button click
|
|
33
|
-
if (!this.noAutoClose && this.content && event.composedPath().includes(this.content)) {
|
|
34
|
-
this.close();
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Closes the menu.
|
|
39
|
-
*/
|
|
40
|
-
async close() {
|
|
41
|
-
var _a;
|
|
42
|
-
(_a = this.trap) === null || _a === void 0 ? void 0 : _a.deactivate();
|
|
43
|
-
this.hide();
|
|
44
|
-
}
|
|
45
|
-
componentDidLoad() {
|
|
46
|
-
this.initTrigger();
|
|
47
|
-
this.keyListener = event => {
|
|
48
|
-
if (this.content && ['ArrowDown', 'ArrowUp'].includes(event.key)) {
|
|
49
|
-
const targetElements = tabbable(this.content, { includeContainer: false, getShadowRoot: true });
|
|
50
|
-
const activeElement = firstTabbable(document.activeElement);
|
|
51
|
-
const activeIdx = activeElement ? targetElements.indexOf(activeElement) : -1;
|
|
52
|
-
const activeOff = event.key === 'ArrowDown' ? 1 : -1;
|
|
53
|
-
const targetIdx = activeIdx < 0 ? 0 : (activeIdx + activeOff + targetElements.length) % targetElements.length;
|
|
54
|
-
targetElements[targetIdx].focus();
|
|
55
|
-
event.preventDefault();
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
document.addEventListener('keydown', this.keyListener);
|
|
59
|
-
}
|
|
60
|
-
disconnectedCallback() {
|
|
61
|
-
if (this.keyListener) {
|
|
62
|
-
document.removeEventListener('keydown', this.keyListener);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
render() {
|
|
66
|
-
return (h(Host, null, h("slot", { name: "trigger", ref: el => (this.triggerSlot = el) }), h("div", { class: "content", ref: el => (this.content = el) }, h("slot", { name: "content" }))));
|
|
67
|
-
}
|
|
68
|
-
get contentId() {
|
|
69
|
-
return `cat-menu-${this.id}`;
|
|
70
|
-
}
|
|
71
|
-
initTrigger() {
|
|
72
|
-
var _a, _b, _c, _d, _e;
|
|
73
|
-
this.trigger = this.findTrigger();
|
|
74
|
-
(_a = this.trigger) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-haspopup', 'true');
|
|
75
|
-
(_b = this.trigger) === null || _b === void 0 ? void 0 : _b.setAttribute('aria-expanded', 'false');
|
|
76
|
-
(_c = this.trigger) === null || _c === void 0 ? void 0 : _c.setAttribute('aria-controls', this.contentId);
|
|
77
|
-
(_d = this.content) === null || _d === void 0 ? void 0 : _d.setAttribute('id', this.contentId);
|
|
78
|
-
if (this.trigger && this.content) {
|
|
79
|
-
(_e = this.trigger) === null || _e === void 0 ? void 0 : _e.addEventListener('click', () => {
|
|
80
|
-
var _a;
|
|
81
|
-
((_a = this.trap) === null || _a === void 0 ? void 0 : _a.active) ? this.close() : this.show();
|
|
82
|
-
});
|
|
83
|
-
autoUpdate(this.trigger, this.content, () => this.update());
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
show() {
|
|
87
|
-
var _a;
|
|
88
|
-
if (this.content) {
|
|
89
|
-
this.content.style.display = 'block';
|
|
90
|
-
(_a = this.trigger) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-expanded', 'true');
|
|
91
|
-
this.catOpen.emit();
|
|
92
|
-
this.trap = this.trap
|
|
93
|
-
? this.trap.updateContainerElements(this.content)
|
|
94
|
-
: createFocusTrap(this.content, {
|
|
95
|
-
tabbableOptions: {
|
|
96
|
-
getShadowRoot: true
|
|
97
|
-
},
|
|
98
|
-
allowOutsideClick: true,
|
|
99
|
-
clickOutsideDeactivates: event => !this.noAutoClose &&
|
|
100
|
-
(!this.content || !event.composedPath().includes(this.content)) &&
|
|
101
|
-
(!this.trigger || !event.composedPath().includes(this.trigger)),
|
|
102
|
-
onPostDeactivate: () => this.close()
|
|
103
|
-
});
|
|
104
|
-
this.trap.activate();
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
hide() {
|
|
108
|
-
var _a;
|
|
109
|
-
if (this.content) {
|
|
110
|
-
this.content.style.display = '';
|
|
111
|
-
(_a = this.trigger) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-expanded', 'false');
|
|
112
|
-
this.catClose.emit();
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
update() {
|
|
116
|
-
if (this.trigger && this.content) {
|
|
117
|
-
computePosition(this.trigger, this.content, {
|
|
118
|
-
placement: this.placement,
|
|
119
|
-
middleware: [offset(CatMenu$1.OFFSET), flip()]
|
|
120
|
-
}).then(({ x, y }) => {
|
|
121
|
-
if (this.content) {
|
|
122
|
-
Object.assign(this.content.style, {
|
|
123
|
-
left: `${x}px`,
|
|
124
|
-
top: `${y}px`
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
findTrigger() {
|
|
131
|
-
var _a, _b;
|
|
132
|
-
let trigger;
|
|
133
|
-
const elems = ((_a = this.triggerSlot) === null || _a === void 0 ? void 0 : _a.assignedElements()) || [];
|
|
134
|
-
while (!trigger && elems.length) {
|
|
135
|
-
const elem = elems.shift();
|
|
136
|
-
trigger = (elem === null || elem === void 0 ? void 0 : elem.hasAttribute('data-trigger'))
|
|
137
|
-
? elem
|
|
138
|
-
: (_b = elem === null || elem === void 0 ? void 0 : elem.querySelector('[data-trigger]')) !== null && _b !== void 0 ? _b : undefined;
|
|
139
|
-
}
|
|
140
|
-
if (!trigger) {
|
|
141
|
-
trigger = firstTabbable(this.triggerSlot);
|
|
142
|
-
}
|
|
143
|
-
if (!trigger) {
|
|
144
|
-
loglevel.error('Cannot find tabbable element. Use [data-trigger] to set the trigger.');
|
|
145
|
-
}
|
|
146
|
-
return trigger;
|
|
147
|
-
}
|
|
148
|
-
static get style() { return catMenuCss; }
|
|
149
|
-
}, [1, "cat-menu", {
|
|
150
|
-
"placement": [1],
|
|
151
|
-
"noAutoClose": [4, "no-auto-close"],
|
|
152
|
-
"close": [64]
|
|
153
|
-
}, [[0, "catClick", "clickHandler"]]]);
|
|
154
|
-
CatMenu$1.OFFSET = 4;
|
|
155
|
-
function defineCustomElement$1() {
|
|
156
|
-
if (typeof customElements === "undefined") {
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
const components = ["cat-menu"];
|
|
160
|
-
components.forEach(tagName => { switch (tagName) {
|
|
161
|
-
case "cat-menu":
|
|
162
|
-
if (!customElements.get(tagName)) {
|
|
163
|
-
customElements.define(tagName, CatMenu$1);
|
|
164
|
-
}
|
|
165
|
-
break;
|
|
166
|
-
} });
|
|
167
|
-
}
|
|
1
|
+
import { C as CatMenu$1, d as defineCustomElement$1 } from './cat-menu2.js';
|
|
168
2
|
|
|
169
3
|
const CatMenu = CatMenu$1;
|
|
170
4
|
const defineCustomElement = defineCustomElement$1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"cat-menu.js","mappings":"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","names":["CatMenu","focusTrap.createFocusTrap","log"],"sources":["./src/components/cat-menu/cat-menu.scss?tag=cat-menu&encapsulation=shadow","./src/components/cat-menu/cat-menu.tsx"],"sourcesContent":["@import 'variables';\n@import 'mixins';\n\n$-min-width: 8rem;\n$-max-width: 16rem;\n$-min-height: 2rem;\n$-max-height: calc(100vh - 48px);\n\n:host {\n display: contents;\n}\n\n:host([hidden]) {\n display: none;\n}\n\n::slotted(nav) {\n padding-top: $cat-body-margin-bottom * 0.5;\n padding-bottom: $cat-body-margin-bottom * 0.5;\n min-width: $-min-width;\n max-width: $-max-width;\n}\n\n.content {\n position: absolute;\n background: cat-token('color.ui.background.body');\n display: none;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n min-height: $-min-height;\n max-height: $-max-height;\n @include cat-elevation(1);\n border-radius: cat-border-radius('m');\n z-index: $cat-menu-z-index;\n}\n","import { autoUpdate, computePosition, flip, offset, Placement } from '@floating-ui/dom';\nimport { Component, Event, EventEmitter, h, Host, Listen, Method, Prop } from '@stencil/core';\nimport * as focusTrap from 'focus-trap';\nimport log from 'loglevel';\nimport { FocusableElement, tabbable } from 'tabbable';\nimport firstTabbable from '../../utils/first-tabbable';\n\nlet nextUniqueId = 0;\n\n@Component({\n tag: 'cat-menu',\n styleUrl: 'cat-menu.scss',\n shadow: true\n})\nexport class CatMenu {\n private static readonly OFFSET = 4;\n private readonly id = nextUniqueId++;\n private triggerSlot?: HTMLSlotElement;\n private trigger?: FocusableElement;\n private content?: HTMLElement;\n private trap?: focusTrap.FocusTrap;\n private keyListener?: (event: KeyboardEvent) => void;\n\n /**\n * The placement of the menu.\n */\n @Prop() placement: Placement = 'bottom-start';\n\n /**\n * Do not close the menu on outside clicks.\n */\n @Prop() noAutoClose = false;\n\n /**\n * Emitted when the menu is opened.\n */\n @Event() catOpen!: EventEmitter<FocusEvent>;\n\n /**\n * Emitted when the menu is closed.\n */\n @Event() catClose!: EventEmitter<FocusEvent>;\n\n @Listen('catClick')\n clickHandler(event: CustomEvent<MouseEvent>) {\n if (!this.trigger) {\n this.initTrigger();\n this.show();\n }\n\n // hide menu on button click\n if (!this.noAutoClose && this.content && event.composedPath().includes(this.content)) {\n this.close();\n }\n }\n\n /**\n * Closes the menu.\n */\n @Method()\n async close(): Promise<void> {\n this.trap?.deactivate();\n this.hide();\n }\n\n componentDidLoad(): void {\n this.initTrigger();\n this.keyListener = event => {\n if (this.content && ['ArrowDown', 'ArrowUp'].includes(event.key)) {\n const targetElements = tabbable(this.content, { includeContainer: false, getShadowRoot: true });\n const activeElement = firstTabbable(document.activeElement);\n const activeIdx = activeElement ? targetElements.indexOf(activeElement) : -1;\n const activeOff = event.key === 'ArrowDown' ? 1 : -1;\n const targetIdx = activeIdx < 0 ? 0 : (activeIdx + activeOff + targetElements.length) % targetElements.length;\n targetElements[targetIdx].focus();\n event.preventDefault();\n }\n };\n document.addEventListener('keydown', this.keyListener);\n }\n\n disconnectedCallback(): void {\n if (this.keyListener) {\n document.removeEventListener('keydown', this.keyListener);\n }\n }\n\n render() {\n return (\n <Host>\n <slot name=\"trigger\" ref={el => (this.triggerSlot = el as HTMLSlotElement)}></slot>\n <div class=\"content\" ref={el => (this.content = el)}>\n <slot name=\"content\"></slot>\n </div>\n </Host>\n );\n }\n\n private get contentId() {\n return `cat-menu-${this.id}`;\n }\n\n private initTrigger() {\n this.trigger = this.findTrigger();\n this.trigger?.setAttribute('aria-haspopup', 'true');\n this.trigger?.setAttribute('aria-expanded', 'false');\n this.trigger?.setAttribute('aria-controls', this.contentId);\n this.content?.setAttribute('id', this.contentId);\n if (this.trigger && this.content) {\n this.trigger?.addEventListener('click', () => {\n this.trap?.active ? this.close() : this.show();\n });\n autoUpdate(this.trigger, this.content, () => this.update());\n }\n }\n\n private show() {\n if (this.content) {\n this.content.style.display = 'block';\n this.trigger?.setAttribute('aria-expanded', 'true');\n this.catOpen.emit();\n this.trap = this.trap\n ? this.trap.updateContainerElements(this.content)\n : focusTrap.createFocusTrap(this.content, {\n tabbableOptions: {\n getShadowRoot: true\n },\n allowOutsideClick: true,\n clickOutsideDeactivates: event =>\n !this.noAutoClose &&\n (!this.content || !event.composedPath().includes(this.content)) &&\n (!this.trigger || !event.composedPath().includes(this.trigger)),\n onPostDeactivate: () => this.close()\n });\n this.trap.activate();\n }\n }\n\n private hide() {\n if (this.content) {\n this.content.style.display = '';\n this.trigger?.setAttribute('aria-expanded', 'false');\n this.catClose.emit();\n }\n }\n\n private update() {\n if (this.trigger && this.content) {\n computePosition(this.trigger, this.content, {\n placement: this.placement,\n middleware: [offset(CatMenu.OFFSET), flip()]\n }).then(({ x, y }) => {\n if (this.content) {\n Object.assign(this.content.style, {\n left: `${x}px`,\n top: `${y}px`\n });\n }\n });\n }\n }\n\n private findTrigger(): FocusableElement | undefined {\n let trigger: FocusableElement | undefined;\n const elems = this.triggerSlot?.assignedElements() || [];\n while (!trigger && elems.length) {\n const elem = elems.shift();\n trigger = elem?.hasAttribute('data-trigger')\n ? (elem as HTMLElement)\n : elem?.querySelector('[data-trigger]') ?? undefined;\n }\n if (!trigger) {\n trigger = firstTabbable(this.triggerSlot);\n }\n if (!trigger) {\n log.error('Cannot find tabbable element. Use [data-trigger] to set the trigger.');\n }\n return trigger;\n }\n}\n"],"version":3}
|
|
1
|
+
{"file":"cat-menu.js","mappings":";;;;;;;","names":[],"sources":[],"sourcesContent":[],"version":3}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
|
|
2
|
+
import { a as autoUpdate, c as computePosition, o as offset, f as flip } from './floating-ui.dom.esm.js';
|
|
3
|
+
import { c as createFocusTrap } from './focus-trap.esm.js';
|
|
4
|
+
import { l as loglevel } from './loglevel.js';
|
|
5
|
+
import { t as tabbable, f as firstTabbable } from './first-tabbable.js';
|
|
6
|
+
|
|
7
|
+
const catMenuCss = ":host{display:contents}:host([hidden]){display:none}::slotted(nav){padding-top:0.5rem;padding-bottom:0.5rem;min-width:8rem;max-width:16rem}.content{position:absolute;background:white;display:none;-webkit-overflow-scrolling:touch;min-height:2rem;max-height:calc(100vh - 48px);box-shadow:0 1px 4px 0 rgba(16, 29, 48, 0.2);border-radius:var(--cat-border-radius-m, 0.25rem);z-index:100}.content.overflow-auto{overflow:auto}";
|
|
8
|
+
|
|
9
|
+
let nextUniqueId = 0;
|
|
10
|
+
const CatMenu = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
11
|
+
constructor() {
|
|
12
|
+
super();
|
|
13
|
+
this.__registerHost();
|
|
14
|
+
this.__attachShadow();
|
|
15
|
+
this.catOpen = createEvent(this, "catOpen", 7);
|
|
16
|
+
this.catClose = createEvent(this, "catClose", 7);
|
|
17
|
+
this.id = nextUniqueId++;
|
|
18
|
+
/**
|
|
19
|
+
* The placement of the menu.
|
|
20
|
+
*/
|
|
21
|
+
this.placement = 'bottom-start';
|
|
22
|
+
/**
|
|
23
|
+
* Do not close the menu on outside clicks.
|
|
24
|
+
*/
|
|
25
|
+
this.noAutoClose = false;
|
|
26
|
+
/**
|
|
27
|
+
* Allow overflow when menu is open.
|
|
28
|
+
*/
|
|
29
|
+
this.overflow = false;
|
|
30
|
+
}
|
|
31
|
+
clickHandler(event) {
|
|
32
|
+
if (!this.trigger) {
|
|
33
|
+
this.initTrigger();
|
|
34
|
+
this.show();
|
|
35
|
+
}
|
|
36
|
+
// hide menu on button click
|
|
37
|
+
if (!this.noAutoClose && this.content && event.composedPath().includes(this.content)) {
|
|
38
|
+
this.close();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Closes the menu.
|
|
43
|
+
*/
|
|
44
|
+
async close() {
|
|
45
|
+
var _a;
|
|
46
|
+
(_a = this.trap) === null || _a === void 0 ? void 0 : _a.deactivate();
|
|
47
|
+
this.hide();
|
|
48
|
+
}
|
|
49
|
+
componentDidLoad() {
|
|
50
|
+
this.initTrigger();
|
|
51
|
+
this.keyListener = event => {
|
|
52
|
+
if (this.content && ['ArrowDown', 'ArrowUp'].includes(event.key)) {
|
|
53
|
+
const targetElements = tabbable(this.content, { includeContainer: false, getShadowRoot: true });
|
|
54
|
+
const activeElement = firstTabbable(document.activeElement);
|
|
55
|
+
const activeIdx = activeElement ? targetElements.indexOf(activeElement) : -1;
|
|
56
|
+
const activeOff = event.key === 'ArrowDown' ? 1 : -1;
|
|
57
|
+
const targetIdx = activeIdx < 0 ? 0 : (activeIdx + activeOff + targetElements.length) % targetElements.length;
|
|
58
|
+
targetElements[targetIdx].focus();
|
|
59
|
+
event.preventDefault();
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
document.addEventListener('keydown', this.keyListener);
|
|
63
|
+
}
|
|
64
|
+
disconnectedCallback() {
|
|
65
|
+
if (this.keyListener) {
|
|
66
|
+
document.removeEventListener('keydown', this.keyListener);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
render() {
|
|
70
|
+
return (h(Host, null, h("slot", { name: "trigger", ref: el => (this.triggerSlot = el) }), h("div", { class: { content: true, 'overflow-auto': !this.overflow }, ref: el => (this.content = el) }, h("slot", { name: "content" }))));
|
|
71
|
+
}
|
|
72
|
+
get contentId() {
|
|
73
|
+
return `cat-menu-${this.id}`;
|
|
74
|
+
}
|
|
75
|
+
initTrigger() {
|
|
76
|
+
var _a, _b, _c, _d, _e;
|
|
77
|
+
this.trigger = this.findTrigger();
|
|
78
|
+
(_a = this.trigger) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-haspopup', 'true');
|
|
79
|
+
(_b = this.trigger) === null || _b === void 0 ? void 0 : _b.setAttribute('aria-expanded', 'false');
|
|
80
|
+
(_c = this.trigger) === null || _c === void 0 ? void 0 : _c.setAttribute('aria-controls', this.contentId);
|
|
81
|
+
(_d = this.content) === null || _d === void 0 ? void 0 : _d.setAttribute('id', this.contentId);
|
|
82
|
+
if (this.trigger && this.content) {
|
|
83
|
+
(_e = this.trigger) === null || _e === void 0 ? void 0 : _e.addEventListener('click', () => {
|
|
84
|
+
var _a;
|
|
85
|
+
((_a = this.trap) === null || _a === void 0 ? void 0 : _a.active) ? this.close() : this.show();
|
|
86
|
+
});
|
|
87
|
+
autoUpdate(this.trigger, this.content, () => this.update());
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
show() {
|
|
91
|
+
var _a;
|
|
92
|
+
if (this.content) {
|
|
93
|
+
this.content.style.display = 'block';
|
|
94
|
+
(_a = this.trigger) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-expanded', 'true');
|
|
95
|
+
this.catOpen.emit();
|
|
96
|
+
this.trap = this.trap
|
|
97
|
+
? this.trap.updateContainerElements(this.content)
|
|
98
|
+
: createFocusTrap(this.content, {
|
|
99
|
+
tabbableOptions: {
|
|
100
|
+
getShadowRoot: true
|
|
101
|
+
},
|
|
102
|
+
allowOutsideClick: true,
|
|
103
|
+
clickOutsideDeactivates: event => !this.noAutoClose &&
|
|
104
|
+
(!this.content || !event.composedPath().includes(this.content)) &&
|
|
105
|
+
(!this.trigger || !event.composedPath().includes(this.trigger)),
|
|
106
|
+
onPostDeactivate: () => this.close()
|
|
107
|
+
});
|
|
108
|
+
this.trap.activate();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
hide() {
|
|
112
|
+
var _a;
|
|
113
|
+
if (this.content) {
|
|
114
|
+
this.content.style.display = '';
|
|
115
|
+
(_a = this.trigger) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-expanded', 'false');
|
|
116
|
+
this.catClose.emit();
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
update() {
|
|
120
|
+
if (this.trigger && this.content) {
|
|
121
|
+
computePosition(this.trigger, this.content, {
|
|
122
|
+
placement: this.placement,
|
|
123
|
+
middleware: [offset(CatMenu.OFFSET), flip()]
|
|
124
|
+
}).then(({ x, y }) => {
|
|
125
|
+
if (this.content) {
|
|
126
|
+
Object.assign(this.content.style, {
|
|
127
|
+
left: `${x}px`,
|
|
128
|
+
top: `${y}px`
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
findTrigger() {
|
|
135
|
+
var _a, _b;
|
|
136
|
+
let trigger;
|
|
137
|
+
const elems = ((_a = this.triggerSlot) === null || _a === void 0 ? void 0 : _a.assignedElements()) || [];
|
|
138
|
+
while (!trigger && elems.length) {
|
|
139
|
+
const elem = elems.shift();
|
|
140
|
+
trigger = (elem === null || elem === void 0 ? void 0 : elem.hasAttribute('data-trigger'))
|
|
141
|
+
? elem
|
|
142
|
+
: (_b = elem === null || elem === void 0 ? void 0 : elem.querySelector('[data-trigger]')) !== null && _b !== void 0 ? _b : undefined;
|
|
143
|
+
}
|
|
144
|
+
if (!trigger) {
|
|
145
|
+
trigger = firstTabbable(this.triggerSlot);
|
|
146
|
+
}
|
|
147
|
+
if (!trigger) {
|
|
148
|
+
loglevel.error('Cannot find tabbable element. Use [data-trigger] to set the trigger.');
|
|
149
|
+
}
|
|
150
|
+
return trigger;
|
|
151
|
+
}
|
|
152
|
+
static get style() { return catMenuCss; }
|
|
153
|
+
}, [1, "cat-menu", {
|
|
154
|
+
"placement": [1],
|
|
155
|
+
"noAutoClose": [4, "no-auto-close"],
|
|
156
|
+
"overflow": [4],
|
|
157
|
+
"close": [64]
|
|
158
|
+
}, [[0, "catClick", "clickHandler"]]]);
|
|
159
|
+
CatMenu.OFFSET = 4;
|
|
160
|
+
function defineCustomElement() {
|
|
161
|
+
if (typeof customElements === "undefined") {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
const components = ["cat-menu"];
|
|
165
|
+
components.forEach(tagName => { switch (tagName) {
|
|
166
|
+
case "cat-menu":
|
|
167
|
+
if (!customElements.get(tagName)) {
|
|
168
|
+
customElements.define(tagName, CatMenu);
|
|
169
|
+
}
|
|
170
|
+
break;
|
|
171
|
+
} });
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
export { CatMenu as C, defineCustomElement as d };
|
|
175
|
+
|
|
176
|
+
//# sourceMappingURL=cat-menu2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"file":"cat-menu2.js","mappings":"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","names":["focusTrap.createFocusTrap","log"],"sources":["./src/components/cat-menu/cat-menu.scss?tag=cat-menu&encapsulation=shadow","./src/components/cat-menu/cat-menu.tsx"],"sourcesContent":["@import 'variables';\n@import 'mixins';\n\n$-min-width: 8rem;\n$-max-width: 16rem;\n$-min-height: 2rem;\n$-max-height: calc(100vh - 48px);\n\n:host {\n display: contents;\n}\n\n:host([hidden]) {\n display: none;\n}\n\n::slotted(nav) {\n padding-top: $cat-body-margin-bottom * 0.5;\n padding-bottom: $cat-body-margin-bottom * 0.5;\n min-width: $-min-width;\n max-width: $-max-width;\n}\n\n.content {\n position: absolute;\n background: cat-token('color.ui.background.body');\n display: none;\n -webkit-overflow-scrolling: touch;\n min-height: $-min-height;\n max-height: $-max-height;\n @include cat-elevation(1);\n border-radius: cat-border-radius('m');\n z-index: $cat-menu-z-index;\n\n &.overflow-auto {\n overflow: auto;\n }\n}\n","import { autoUpdate, computePosition, flip, offset, Placement } from '@floating-ui/dom';\nimport { Component, Event, EventEmitter, h, Host, Listen, Method, Prop } from '@stencil/core';\nimport * as focusTrap from 'focus-trap';\nimport log from 'loglevel';\nimport { FocusableElement, tabbable } from 'tabbable';\nimport firstTabbable from '../../utils/first-tabbable';\n\nlet nextUniqueId = 0;\n\n@Component({\n tag: 'cat-menu',\n styleUrl: 'cat-menu.scss',\n shadow: true\n})\nexport class CatMenu {\n private static readonly OFFSET = 4;\n private readonly id = nextUniqueId++;\n private triggerSlot?: HTMLSlotElement;\n private trigger?: FocusableElement;\n private content?: HTMLElement;\n private trap?: focusTrap.FocusTrap;\n private keyListener?: (event: KeyboardEvent) => void;\n\n /**\n * The placement of the menu.\n */\n @Prop() placement: Placement = 'bottom-start';\n\n /**\n * Do not close the menu on outside clicks.\n */\n @Prop() noAutoClose = false;\n\n /**\n * Allow overflow when menu is open.\n */\n @Prop() overflow = false;\n\n /**\n * Emitted when the menu is opened.\n */\n @Event() catOpen!: EventEmitter<FocusEvent>;\n\n /**\n * Emitted when the menu is closed.\n */\n @Event() catClose!: EventEmitter<FocusEvent>;\n\n @Listen('catClick')\n clickHandler(event: CustomEvent<MouseEvent>) {\n if (!this.trigger) {\n this.initTrigger();\n this.show();\n }\n\n // hide menu on button click\n if (!this.noAutoClose && this.content && event.composedPath().includes(this.content)) {\n this.close();\n }\n }\n\n /**\n * Closes the menu.\n */\n @Method()\n async close(): Promise<void> {\n this.trap?.deactivate();\n this.hide();\n }\n\n componentDidLoad(): void {\n this.initTrigger();\n this.keyListener = event => {\n if (this.content && ['ArrowDown', 'ArrowUp'].includes(event.key)) {\n const targetElements = tabbable(this.content, { includeContainer: false, getShadowRoot: true });\n const activeElement = firstTabbable(document.activeElement);\n const activeIdx = activeElement ? targetElements.indexOf(activeElement) : -1;\n const activeOff = event.key === 'ArrowDown' ? 1 : -1;\n const targetIdx = activeIdx < 0 ? 0 : (activeIdx + activeOff + targetElements.length) % targetElements.length;\n targetElements[targetIdx].focus();\n event.preventDefault();\n }\n };\n document.addEventListener('keydown', this.keyListener);\n }\n\n disconnectedCallback(): void {\n if (this.keyListener) {\n document.removeEventListener('keydown', this.keyListener);\n }\n }\n\n render() {\n return (\n <Host>\n <slot name=\"trigger\" ref={el => (this.triggerSlot = el as HTMLSlotElement)}></slot>\n <div class={{ content: true, 'overflow-auto': !this.overflow }} ref={el => (this.content = el)}>\n <slot name=\"content\"></slot>\n </div>\n </Host>\n );\n }\n\n private get contentId() {\n return `cat-menu-${this.id}`;\n }\n\n private initTrigger() {\n this.trigger = this.findTrigger();\n this.trigger?.setAttribute('aria-haspopup', 'true');\n this.trigger?.setAttribute('aria-expanded', 'false');\n this.trigger?.setAttribute('aria-controls', this.contentId);\n this.content?.setAttribute('id', this.contentId);\n if (this.trigger && this.content) {\n this.trigger?.addEventListener('click', () => {\n this.trap?.active ? this.close() : this.show();\n });\n autoUpdate(this.trigger, this.content, () => this.update());\n }\n }\n\n private show() {\n if (this.content) {\n this.content.style.display = 'block';\n this.trigger?.setAttribute('aria-expanded', 'true');\n this.catOpen.emit();\n this.trap = this.trap\n ? this.trap.updateContainerElements(this.content)\n : focusTrap.createFocusTrap(this.content, {\n tabbableOptions: {\n getShadowRoot: true\n },\n allowOutsideClick: true,\n clickOutsideDeactivates: event =>\n !this.noAutoClose &&\n (!this.content || !event.composedPath().includes(this.content)) &&\n (!this.trigger || !event.composedPath().includes(this.trigger)),\n onPostDeactivate: () => this.close()\n });\n this.trap.activate();\n }\n }\n\n private hide() {\n if (this.content) {\n this.content.style.display = '';\n this.trigger?.setAttribute('aria-expanded', 'false');\n this.catClose.emit();\n }\n }\n\n private update() {\n if (this.trigger && this.content) {\n computePosition(this.trigger, this.content, {\n placement: this.placement,\n middleware: [offset(CatMenu.OFFSET), flip()]\n }).then(({ x, y }) => {\n if (this.content) {\n Object.assign(this.content.style, {\n left: `${x}px`,\n top: `${y}px`\n });\n }\n });\n }\n }\n\n private findTrigger(): FocusableElement | undefined {\n let trigger: FocusableElement | undefined;\n const elems = this.triggerSlot?.assignedElements() || [];\n while (!trigger && elems.length) {\n const elem = elems.shift();\n trigger = elem?.hasAttribute('data-trigger')\n ? (elem as HTMLElement)\n : elem?.querySelector('[data-trigger]') ?? undefined;\n }\n if (!trigger) {\n trigger = firstTabbable(this.triggerSlot);\n }\n if (!trigger) {\n log.error('Cannot find tabbable element. Use [data-trigger] to set the trigger.');\n }\n return trigger;\n }\n}\n"],"version":3}
|
|
@@ -20,22 +20,14 @@ const CatRadioGroup$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEleme
|
|
|
20
20
|
this.labelLeft = false;
|
|
21
21
|
}
|
|
22
22
|
onNameChanged(newName) {
|
|
23
|
-
this.catRadioGroup.forEach(catRadio =>
|
|
24
|
-
catRadio.name = newName;
|
|
25
|
-
});
|
|
23
|
+
this.catRadioGroup.forEach(catRadio => (catRadio.name = newName));
|
|
26
24
|
}
|
|
27
25
|
onValueChanged(newValue) {
|
|
28
|
-
this.catRadioGroup.forEach(catRadio =>
|
|
29
|
-
catRadio.checked = catRadio.value === newValue;
|
|
30
|
-
});
|
|
26
|
+
this.catRadioGroup.forEach(catRadio => (catRadio.checked = catRadio.value === newValue));
|
|
31
27
|
this.updateTabIndex();
|
|
32
28
|
}
|
|
33
29
|
onDisabledChanged(disabled) {
|
|
34
|
-
this.catRadioGroup.forEach(catRadio =>
|
|
35
|
-
if (disabled) {
|
|
36
|
-
catRadio.disabled = disabled;
|
|
37
|
-
}
|
|
38
|
-
});
|
|
30
|
+
this.catRadioGroup.forEach(catRadio => (catRadio.disabled = disabled));
|
|
39
31
|
}
|
|
40
32
|
onLabelLeftChanged(labelLeft) {
|
|
41
33
|
this.catRadioGroup.forEach(catRadio => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"cat-radio-group.js","mappings":";;AAAA,MAAM,gBAAgB,GAAG,mDAAmD;;MCU/DA,eAAa;EAL1B;;;;;;IAMU,kBAAa,GAA0B,EAAE,CAAC;;;;IAiB1C,aAAQ,GAAG,KAAK,CAAC;;;;IAWjB,cAAS,GAAG,KAAK,CAAC;
|
|
1
|
+
{"file":"cat-radio-group.js","mappings":"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","names":["CatRadioGroup"],"sources":["./src/components/cat-radio-group/cat-radio-group.scss?tag=cat-radio-group&encapsulation=shadow","./src/components/cat-radio-group/cat-radio-group.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","import { Component, Element, Event, EventEmitter, h, Listen, Prop, Watch } from '@stencil/core';\n\n/**\n * A group of radio buttons.\n */\n@Component({\n tag: 'cat-radio-group',\n styleUrl: 'cat-radio-group.scss',\n shadow: true\n})\nexport class CatRadioGroup {\n private catRadioGroup: HTMLCatRadioElement[] = [];\n\n @Element() hostElement!: HTMLElement;\n\n /**\n * The name of the radio group component.\n */\n @Prop() name?: string;\n\n /**\n * The value of the radio group.\n */\n @Prop({ mutable: true }) value?: string;\n\n /**\n * Whether this radio group is disabled.\n */\n @Prop() disabled = false;\n\n /**\n * Adds an accessible label for the radio group that\n * it is only shown in assistive technologies, like screen readers.\n */\n @Prop({ attribute: 'a11y-label' }) a11yLabel?: string;\n\n /**\n * Whether the label of the radios should appear to the left of them.\n */\n @Prop() labelLeft = false;\n\n /**\n * Emitted when the value is changed.\n */\n @Event() catChange!: EventEmitter;\n\n /**\n * Emitted when the radio group loses focus.\n */\n @Event() catBlur!: EventEmitter<FocusEvent>;\n\n @Watch('name')\n onNameChanged(newName?: string) {\n this.catRadioGroup.forEach(catRadio => (catRadio.name = newName));\n }\n\n @Watch('value')\n onValueChanged(newValue?: string) {\n this.catRadioGroup.forEach(catRadio => (catRadio.checked = catRadio.value === newValue));\n this.updateTabIndex();\n }\n\n @Watch('disabled')\n onDisabledChanged(disabled: boolean) {\n this.catRadioGroup.forEach(catRadio => (catRadio.disabled = disabled));\n }\n\n @Watch('labelLeft')\n onLabelLeftChanged(labelLeft: boolean) {\n this.catRadioGroup.forEach(catRadio => {\n if (labelLeft) {\n catRadio.labelLeft = labelLeft;\n }\n });\n }\n\n componentDidLoad(): void {\n this.catRadioGroup = Array.from(this.hostElement.querySelectorAll(`cat-radio`));\n this.onNameChanged(this.name);\n this.onValueChanged(this.value);\n this.onDisabledChanged(this.disabled);\n this.onLabelLeftChanged(this.labelLeft);\n }\n\n @Listen('keydown')\n onKeydown(event: KeyboardEvent): void {\n if (['ArrowDown', 'ArrowUp', 'ArrowRight', 'ArrowLeft'].includes(event.key) && this.catRadioGroup.length) {\n const targetElements = this.catRadioGroup.filter(catRadio => !catRadio.disabled);\n const activeElement = document.activeElement as HTMLCatRadioElement;\n const activeIdx = this.catRadioGroup.findIndex(catRadio => catRadio === activeElement);\n const activeOff = ['ArrowDown', 'ArrowRight'].includes(event.key) ? 1 : -1;\n const targetIdx = activeIdx < 0 ? 0 : (activeIdx + activeOff + targetElements.length) % targetElements.length;\n targetElements[targetIdx].setFocus();\n targetElements[targetIdx].shadowRoot?.querySelector('input')?.click();\n this.updateTabIndex();\n event.preventDefault();\n }\n }\n\n @Listen('input')\n onInput(event: MouseEvent): void {\n const catRadioElement = this.catRadioGroup.find(value => value === event.target);\n this.value = catRadioElement?.value;\n this.catChange.emit();\n }\n\n @Listen('blur', { capture: true })\n onBlur(event: FocusEvent): void {\n if (!event.relatedTarget) {\n this.catBlur.emit(event);\n }\n }\n\n render() {\n return (\n <div role=\"radiogroup\" aria-label={this.a11yLabel}>\n <slot></slot>\n </div>\n );\n }\n\n private updateTabIndex() {\n if (this.catRadioGroup.length) {\n this.catRadioGroup.forEach(value => value.shadowRoot?.querySelector('input')?.setAttribute('tabindex', '-1'));\n const checkedRadioIndex = this.catRadioGroup.findIndex(value => value.checked);\n this.catRadioGroup[checkedRadioIndex >= 0 ? checkedRadioIndex : 0].shadowRoot\n ?.querySelector('input')\n ?.setAttribute('tabindex', '0');\n }\n }\n}\n"],"version":3}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { proxyCustomElement, HTMLElement, h, Host } from '@stencil/core/internal/client';
|
|
2
|
-
import { d as defineCustomElement$
|
|
3
|
-
import { d as defineCustomElement$
|
|
4
|
-
import { d as defineCustomElement$
|
|
5
|
-
import { d as defineCustomElement$
|
|
2
|
+
import { d as defineCustomElement$a } from './cat-avatar2.js';
|
|
3
|
+
import { d as defineCustomElement$9 } from './cat-button2.js';
|
|
4
|
+
import { d as defineCustomElement$8 } from './cat-checkbox2.js';
|
|
5
|
+
import { d as defineCustomElement$7 } from './cat-icon2.js';
|
|
6
|
+
import { d as defineCustomElement$6 } from './cat-menu2.js';
|
|
6
7
|
import { o as operate, c as createOperatorSubscriber, n as noop, m as map, a as mergeMap, d as defineCustomElement$5 } from './cat-scrollable2.js';
|
|
7
8
|
import { c as concat, t as take, a as asyncScheduler, b as timer, o as of, d as defineCustomElement$4 } from './cat-select2.js';
|
|
8
9
|
import { d as defineCustomElement$3 } from './cat-skeleton2.js';
|
|
@@ -137,7 +138,7 @@ const CatSelectTest = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
|
|
|
137
138
|
(_f = this.singleSelectTagging) === null || _f === void 0 ? void 0 : _f.connect(this.countryConnector);
|
|
138
139
|
}
|
|
139
140
|
render() {
|
|
140
|
-
return (h(Host, { style: { display: 'flex', flexDirection: 'column' } }, h("cat-select", { label: "Multiple Select", hint: "This is a hint!", ref: el => (this.multipleSelect = el), value: ['1'], placeholder: "Hello World", onCatChange: () => { var _a; return console.log((_a = this.multipleSelect) === null || _a === void 0 ? void 0 : _a.value); }, onCatBlur: e => console.log('Multiple blur', e), multiple: true, clearable: true }, h("span", { slot: "hint" }, "Searching for \"no\" -", '>', " no options are returned!")), h("cat-select", { label: "Multiple with img", ref: el => (this.multipleSelectAvatar = el), value: ['1'], placeholder: "Hello World", multiple: true, clearable: true }), h("cat-select", { label: "Multiple with tagging support", hint: "This is a hint!", ref: el => (this.multipleSelectTagging = el), value: { ids: ['1'], tags: ['Test', 'Albania', 'Algeria'] }, placeholder: "Select country", onCatChange: () => { var _a; return console.log((_a = this.multipleSelectTagging) === null || _a === void 0 ? void 0 : _a.value); }, multiple: true, tags: true, clearable: true }), h("cat-select", { label: "Single Select", hint: "This is a hint!", ref: el => (this.singleSelect = el), placeholder: "Search for a country or capital", onCatBlur: e => console.log('Single blur', e), clearable: true }), h("cat-select", { label: "Single with img", ref: el => (this.singleSelectAvatar = el), value: '1', onCatChange: () => { var _a; return console.log((_a = this.singleSelectAvatar) === null || _a === void 0 ? void 0 : _a.value); }, placeholder: "Search for a country or capital", clearable: true }), h("cat-select", { label: "Single with tagging support", ref: el => (this.singleSelectTagging = el), value: { id: '', tag: 'Albania' }, placeholder: "Search for a country or capital", onCatChange: () => { var _a; return console.log('Single', (_a = this.singleSelectTagging) === null || _a === void 0 ? void 0 : _a.value); }, tagHint: "new country", tags: true, clearable: true })));
|
|
141
|
+
return (h(Host, { style: { display: 'flex', flexDirection: 'column' } }, h("cat-select", { label: "Multiple Select", hint: "This is a hint!", ref: el => (this.multipleSelect = el), value: ['1'], placeholder: "Hello World", onCatChange: () => { var _a; return console.log((_a = this.multipleSelect) === null || _a === void 0 ? void 0 : _a.value); }, onCatBlur: e => console.log('Multiple blur', e), multiple: true, clearable: true }, h("span", { slot: "hint" }, "Searching for \"no\" -", '>', " no options are returned!")), h("cat-select", { label: "Multiple with img", ref: el => (this.multipleSelectAvatar = el), value: ['1'], placeholder: "Hello World", multiple: true, clearable: true }), h("cat-select", { label: "Multiple with tagging support", hint: "This is a hint!", ref: el => (this.multipleSelectTagging = el), value: { ids: ['1'], tags: ['Test', 'Albania', 'Algeria'] }, placeholder: "Select country", onCatChange: () => { var _a; return console.log((_a = this.multipleSelectTagging) === null || _a === void 0 ? void 0 : _a.value); }, multiple: true, tags: true, clearable: true }), h("cat-select", { label: "Single Select", hint: "This is a hint!", ref: el => (this.singleSelect = el), placeholder: "Search for a country or capital", onCatBlur: e => console.log('Single blur', e), clearable: true }), h("cat-select", { label: "Single with img", ref: el => (this.singleSelectAvatar = el), value: '1', onCatChange: () => { var _a; return console.log((_a = this.singleSelectAvatar) === null || _a === void 0 ? void 0 : _a.value); }, placeholder: "Search for a country or capital", clearable: true }), h("cat-menu", { overflow: true, noAutoClose: true }, h("cat-button", { slot: "trigger", style: { width: '50%' } }, "Open select"), h("div", { slot: "content", style: { width: '400px' } }, h("cat-select", { label: "Single with tagging support", ref: el => (this.singleSelectTagging = el), value: { id: '', tag: 'Albania' }, placeholder: "Search for a country or capital", onCatChange: () => { var _a; return console.log('Single', (_a = this.singleSelectTagging) === null || _a === void 0 ? void 0 : _a.value); }, tagHint: "new country", tags: true, clearable: true, style: { width: '90%' } })))));
|
|
141
142
|
}
|
|
142
143
|
get countryConnector() {
|
|
143
144
|
return {
|
|
@@ -1389,7 +1390,7 @@ function defineCustomElement$1() {
|
|
|
1389
1390
|
if (typeof customElements === "undefined") {
|
|
1390
1391
|
return;
|
|
1391
1392
|
}
|
|
1392
|
-
const components = ["cat-select-demo", "cat-avatar", "cat-button", "cat-checkbox", "cat-icon", "cat-scrollable", "cat-select", "cat-skeleton", "cat-spinner"];
|
|
1393
|
+
const components = ["cat-select-demo", "cat-avatar", "cat-button", "cat-checkbox", "cat-icon", "cat-menu", "cat-scrollable", "cat-select", "cat-skeleton", "cat-spinner"];
|
|
1393
1394
|
components.forEach(tagName => { switch (tagName) {
|
|
1394
1395
|
case "cat-select-demo":
|
|
1395
1396
|
if (!customElements.get(tagName)) {
|
|
@@ -1398,20 +1399,25 @@ function defineCustomElement$1() {
|
|
|
1398
1399
|
break;
|
|
1399
1400
|
case "cat-avatar":
|
|
1400
1401
|
if (!customElements.get(tagName)) {
|
|
1401
|
-
defineCustomElement$
|
|
1402
|
+
defineCustomElement$a();
|
|
1402
1403
|
}
|
|
1403
1404
|
break;
|
|
1404
1405
|
case "cat-button":
|
|
1405
1406
|
if (!customElements.get(tagName)) {
|
|
1406
|
-
defineCustomElement$
|
|
1407
|
+
defineCustomElement$9();
|
|
1407
1408
|
}
|
|
1408
1409
|
break;
|
|
1409
1410
|
case "cat-checkbox":
|
|
1410
1411
|
if (!customElements.get(tagName)) {
|
|
1411
|
-
defineCustomElement$
|
|
1412
|
+
defineCustomElement$8();
|
|
1412
1413
|
}
|
|
1413
1414
|
break;
|
|
1414
1415
|
case "cat-icon":
|
|
1416
|
+
if (!customElements.get(tagName)) {
|
|
1417
|
+
defineCustomElement$7();
|
|
1418
|
+
}
|
|
1419
|
+
break;
|
|
1420
|
+
case "cat-menu":
|
|
1415
1421
|
if (!customElements.get(tagName)) {
|
|
1416
1422
|
defineCustomElement$6();
|
|
1417
1423
|
}
|