@operato/popup 0.2.35 → 0.2.42
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/CHANGELOG.md +45 -0
- package/demo/index.html +2 -2
- package/demo/ox-popup-list.html +2 -2
- package/demo/ox-popup-menu.html +2 -2
- package/demo/ox-popup.html +2 -2
- package/dist/src/ox-popup-list.d.ts +21 -9
- package/dist/src/ox-popup-list.js +114 -61
- package/dist/src/ox-popup-list.js.map +1 -1
- package/dist/src/ox-popup-menu.d.ts +2 -2
- package/dist/src/ox-popup-menu.js +21 -17
- package/dist/src/ox-popup-menu.js.map +1 -1
- package/dist/src/ox-popup-menuitem.d.ts +3 -3
- package/dist/src/ox-popup-menuitem.js +11 -11
- package/dist/src/ox-popup-menuitem.js.map +1 -1
- package/dist/src/ox-popup.d.ts +9 -5
- package/dist/src/ox-popup.js +25 -17
- package/dist/src/ox-popup.js.map +1 -1
- package/dist/test/ox-popup-menu.test.js +2 -2
- package/dist/test/ox-popup-menu.test.js.map +1 -1
- package/dist/test/ox-popup.test.js +1 -1
- package/dist/test/ox-popup.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -2
- package/src/ox-popup-list.ts +127 -64
- package/src/ox-popup-menu.ts +21 -17
- package/src/ox-popup-menuitem.ts +11 -11
- package/src/ox-popup.ts +45 -25
- package/test/ox-popup-menu.test.ts +7 -8
- package/test/ox-popup.test.ts +6 -7
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,51 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
### [0.2.42](https://github.com/hatiolab/operato/compare/v0.2.41...v0.2.42) (2021-12-07)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @operato/popup
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### [0.2.41](https://github.com/hatiolab/operato/compare/v0.2.40...v0.2.41) (2021-12-07)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### :bug: Bug Fix
|
|
18
|
+
|
|
19
|
+
* popup and input style ([11c5b3e](https://github.com/hatiolab/operato/commit/11c5b3e4bf3f08d18673ada585e50a69b9c88b5b))
|
|
20
|
+
* popup style ([43ee008](https://github.com/hatiolab/operato/commit/43ee008afbbd817bb002d2e3c420044f939c9415))
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
### [0.2.38](https://github.com/hatiolab/operato/compare/v0.2.37...v0.2.38) (2021-12-07)
|
|
25
|
+
|
|
26
|
+
**Note:** Version bump only for package @operato/popup
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
### [0.2.36](https://github.com/hatiolab/operato/compare/v0.2.35...v0.2.36) (2021-12-06)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
### :bug: Bug Fix
|
|
36
|
+
|
|
37
|
+
* apply class name prefix Ox for operato/popup ([d528848](https://github.com/hatiolab/operato/commit/d5288486ea0e1bec84fff3c5b6bac696eb701e5d))
|
|
38
|
+
* operato/input to support formfield ([21b4d46](https://github.com/hatiolab/operato/commit/21b4d46d750ba833c571b5caeed27eebd8aa03ca))
|
|
39
|
+
* operato/input to support formfield ([544bf92](https://github.com/hatiolab/operato/commit/544bf928946d878aa967f33b20efdf90eb8e82f5))
|
|
40
|
+
* operato/ox-popup-list rewritten ([f78b3e9](https://github.com/hatiolab/operato/commit/f78b3e9623faac5ea653442ced653173d630d9e6))
|
|
41
|
+
* operato/popup, input sample ([116b037](https://github.com/hatiolab/operato/commit/116b0371446cb24d8863c2bdea876b97f6e11dfd))
|
|
42
|
+
* operato/popup, input sample ([31fb99f](https://github.com/hatiolab/operato/commit/31fb99fc4e37a26c38826dd3554f92ded0632e82))
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
### :rocket: New Features
|
|
46
|
+
|
|
47
|
+
* adding filter options for data-grist ([3620e8b](https://github.com/hatiolab/operato/commit/3620e8b5c39e7e66f8e7ab39b2ae7200f7f7afb5))
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
6
51
|
### [0.2.35](https://github.com/hatiolab/operato/compare/v0.2.34...v0.2.35) (2021-12-03)
|
|
7
52
|
|
|
8
53
|
**Note:** Version bump only for package @operato/popup
|
package/demo/index.html
CHANGED
|
@@ -28,12 +28,12 @@
|
|
|
28
28
|
import '@material/mwc-icon'
|
|
29
29
|
import '@operato/input'
|
|
30
30
|
|
|
31
|
-
import {
|
|
31
|
+
import { OxPopupMenu } from '../dist/src/ox-popup-menu.js'
|
|
32
32
|
|
|
33
33
|
const parent = document.querySelector('#demo')
|
|
34
34
|
|
|
35
35
|
parent.addEventListener('click', function (e) {
|
|
36
|
-
|
|
36
|
+
OxPopupMenu.open({
|
|
37
37
|
template: html`
|
|
38
38
|
<ox-popup-menuitem
|
|
39
39
|
label="article - click me"
|
package/demo/ox-popup-list.html
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
import '@material/mwc-icon'
|
|
28
28
|
import '@operato/input'
|
|
29
29
|
|
|
30
|
-
import {
|
|
30
|
+
import { OxPopupList } from '../dist/src/ox-popup-list.js'
|
|
31
31
|
|
|
32
32
|
const parent = document.querySelector('#demo')
|
|
33
33
|
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
html`
|
|
44
44
|
<span>clike anywhere in this box to ox-select.</span>
|
|
45
45
|
|
|
46
|
-
<ox-popup-list id="popup-list"
|
|
46
|
+
<ox-popup-list id="popup-list" @select=${e => console.log('select', e.target)} multiple>
|
|
47
47
|
<div option>Plain Text</div>
|
|
48
48
|
|
|
49
49
|
<div option>
|
package/demo/ox-popup-menu.html
CHANGED
|
@@ -28,12 +28,12 @@
|
|
|
28
28
|
import '@material/mwc-icon'
|
|
29
29
|
import '@operato/input'
|
|
30
30
|
|
|
31
|
-
import {
|
|
31
|
+
import { OxPopupMenu } from '../dist/src/ox-popup-menu.js'
|
|
32
32
|
|
|
33
33
|
const parent = document.querySelector('#demo')
|
|
34
34
|
|
|
35
35
|
parent.addEventListener('click', function (e) {
|
|
36
|
-
|
|
36
|
+
OxPopupMenu.open({
|
|
37
37
|
template: html`
|
|
38
38
|
<ox-popup-menuitem
|
|
39
39
|
label="article - click me"
|
package/demo/ox-popup.html
CHANGED
|
@@ -22,11 +22,11 @@
|
|
|
22
22
|
<script type="module">
|
|
23
23
|
import { html, render } from 'lit'
|
|
24
24
|
import '../dist/src/ox-popup.js'
|
|
25
|
-
import {
|
|
25
|
+
import { OxPopup } from '../dist/src/ox-popup.js'
|
|
26
26
|
|
|
27
27
|
const parent = document.querySelector('#demo')
|
|
28
28
|
parent.addEventListener('click', function (e) {
|
|
29
|
-
|
|
29
|
+
OxPopup.open({
|
|
30
30
|
template: html`<img
|
|
31
31
|
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAAC0CAYAAAA9zQYyAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDA1IDc5LjE2NDU5MCwgMjAyMC8xMi8wOS0xMTo1Nzo0NCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIyLjEgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTNEM0NDM0E2MkJEMTFFQjhDOUNFMDY3NTMzQjJBQjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTNEM0NDM0I2MkJEMTFFQjhDOUNFMDY3NTMzQjJBQjQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1M0QzQ0MzODYyQkQxMUVCOEM5Q0UwNjc1MzNCMkFCNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1M0QzQ0MzOTYyQkQxMUVCOEM5Q0UwNjc1MzNCMkFCNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PlmzjKoAAGeQSURBVHja7L13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"
|
|
32
32
|
/>`,
|
|
@@ -1,24 +1,36 @@
|
|
|
1
1
|
import { PropertyValues } from 'lit';
|
|
2
|
-
import {
|
|
3
|
-
export declare class
|
|
2
|
+
import { OxPopup } from './ox-popup';
|
|
3
|
+
export declare class OxPopupList extends OxPopup {
|
|
4
4
|
static styles: import("lit").CSSResult[];
|
|
5
|
-
|
|
5
|
+
multiple: boolean;
|
|
6
|
+
attrSelected?: string;
|
|
7
|
+
activeIndex?: number;
|
|
6
8
|
render(): import("lit-html").TemplateResult<1>;
|
|
7
9
|
protected _onkeydown: (e: KeyboardEvent) => void;
|
|
8
10
|
protected _onfocusout: (e: FocusEvent) => void;
|
|
9
11
|
protected _onclick: (e: MouseEvent) => void;
|
|
10
12
|
updated(changes: PropertyValues<this>): void;
|
|
11
|
-
select(
|
|
12
|
-
setActive(active: number | Element | null): void;
|
|
13
|
+
select(): Promise<void>;
|
|
14
|
+
setActive(active: number | Element | null, withSelect?: boolean): void;
|
|
15
|
+
open(params: {
|
|
16
|
+
left?: number;
|
|
17
|
+
top?: number;
|
|
18
|
+
right?: number;
|
|
19
|
+
bottom?: number;
|
|
20
|
+
silent?: boolean;
|
|
21
|
+
}): void;
|
|
22
|
+
close(): void;
|
|
13
23
|
/**
|
|
14
|
-
* Open
|
|
24
|
+
* Open OxPopup
|
|
15
25
|
*
|
|
16
26
|
* @param {PopupOpenOptions}
|
|
17
27
|
*/
|
|
18
|
-
static open({ template, top, left, parent }: {
|
|
28
|
+
static open({ template, top, left, right, bottom, parent }: {
|
|
19
29
|
template: unknown;
|
|
20
|
-
top
|
|
21
|
-
left
|
|
30
|
+
top?: number;
|
|
31
|
+
left?: number;
|
|
32
|
+
right?: number;
|
|
33
|
+
bottom?: number;
|
|
22
34
|
parent?: Element | null;
|
|
23
35
|
}): void;
|
|
24
36
|
}
|
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
2
|
import { css, html } from 'lit';
|
|
3
|
-
import { customElement, property } from 'lit/decorators.js';
|
|
4
|
-
import { Popup } from './ox-popup';
|
|
5
3
|
import { render } from 'lit-html';
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
import { customElement, property, state } from 'lit/decorators.js';
|
|
5
|
+
import { OxPopup } from './ox-popup';
|
|
6
|
+
function guaranteeFocus(element) {
|
|
7
|
+
// 1. 옵션 엘리먼트의 하위 첫번째 focusible 엘리먼트에 focus 기회를 준다.
|
|
8
|
+
const focusible = element.querySelector('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');
|
|
9
|
+
if (focusible) {
|
|
10
|
+
;
|
|
11
|
+
focusible.focus();
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
// 2. 자신을 포함해서 가장 가까운 부모에게 focus 기회를 준다.
|
|
8
15
|
const closest = element.closest('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');
|
|
9
16
|
closest === null || closest === void 0 ? void 0 : closest.focus();
|
|
10
|
-
return closest;
|
|
11
17
|
}
|
|
12
|
-
let
|
|
18
|
+
let OxPopupList = class OxPopupList extends OxPopup {
|
|
13
19
|
constructor() {
|
|
14
20
|
super(...arguments);
|
|
15
|
-
this.
|
|
21
|
+
this.multiple = false;
|
|
16
22
|
this._onkeydown = function (e) {
|
|
17
|
-
var _a;
|
|
18
23
|
e.stopPropagation();
|
|
19
24
|
switch (e.key) {
|
|
20
25
|
case 'Esc': // for IE/Edge
|
|
@@ -34,29 +39,19 @@ let PopupList = class PopupList extends Popup {
|
|
|
34
39
|
this.activeIndex++;
|
|
35
40
|
break;
|
|
36
41
|
case 'Enter':
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
+
case ' ':
|
|
43
|
+
case 'Spacebar': // for old firefox
|
|
44
|
+
this.setActive(this.activeIndex, true);
|
|
45
|
+
this.select();
|
|
42
46
|
break;
|
|
43
47
|
}
|
|
44
48
|
}.bind(this);
|
|
45
49
|
this._onfocusout = function (e) {
|
|
46
|
-
const target = e.target;
|
|
47
50
|
const to = e.relatedTarget;
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
this.setActive(this.activeIndex);
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
if (!this.contains(to)) {
|
|
56
|
-
/* 분명히 내 범위가 아닌 엘리먼트로 포커스가 옮겨졌다면, ox-popup-list는 닫혀야 한다. */
|
|
57
|
-
// @ts-ignore for debug
|
|
58
|
-
!window.POPUP_DEBUG && this.close();
|
|
59
|
-
}
|
|
51
|
+
if (!this.contains(to)) {
|
|
52
|
+
/* 분명히 내 범위가 아닌 엘리먼트로 포커스가 옮겨졌다면, ox-popup-list는 닫혀야 한다. */
|
|
53
|
+
// @ts-ignore for debug
|
|
54
|
+
!window.POPUP_DEBUG && this.close();
|
|
60
55
|
}
|
|
61
56
|
}.bind(this);
|
|
62
57
|
this._onclick = function (e) {
|
|
@@ -64,59 +59,105 @@ let PopupList = class PopupList extends Popup {
|
|
|
64
59
|
e.stopPropagation();
|
|
65
60
|
const option = (_a = e.target) === null || _a === void 0 ? void 0 : _a.closest('[option]');
|
|
66
61
|
if (option) {
|
|
67
|
-
this.setActive(option);
|
|
68
|
-
this.select(
|
|
62
|
+
this.setActive(option, true);
|
|
63
|
+
this.select();
|
|
69
64
|
}
|
|
70
65
|
}.bind(this);
|
|
71
66
|
}
|
|
72
67
|
render() {
|
|
73
|
-
return html `
|
|
68
|
+
return html `
|
|
69
|
+
<slot
|
|
70
|
+
@change=${(e) => {
|
|
71
|
+
e.stopPropagation();
|
|
72
|
+
}}
|
|
73
|
+
>
|
|
74
|
+
</slot>
|
|
75
|
+
`;
|
|
74
76
|
}
|
|
75
77
|
updated(changes) {
|
|
76
78
|
if (changes.has('activeIndex')) {
|
|
77
|
-
this.setActive(this.activeIndex);
|
|
79
|
+
this.activeIndex !== undefined && this.setActive(this.activeIndex);
|
|
78
80
|
}
|
|
79
81
|
}
|
|
80
|
-
select(
|
|
81
|
-
|
|
82
|
-
|
|
82
|
+
async select() {
|
|
83
|
+
await this.updateComplete;
|
|
84
|
+
const options = Array.from(this.querySelectorAll(':scope > [option]'));
|
|
85
|
+
const selected = options
|
|
86
|
+
.filter(option => option.hasAttribute('value') && option.hasAttribute(this.attrSelected || 'selected'))
|
|
87
|
+
.map(option => option.getAttribute('value'));
|
|
88
|
+
this.dispatchEvent(new CustomEvent('select', {
|
|
89
|
+
bubbles: true,
|
|
90
|
+
composed: true,
|
|
91
|
+
detail: this.multiple ? selected : selected[0]
|
|
92
|
+
}));
|
|
93
|
+
const option = options[this.activeIndex];
|
|
94
|
+
if (!option.hasAttribute('alive-on-select') && !this.hasAttribute('multiple')) {
|
|
83
95
|
this.close();
|
|
84
96
|
}
|
|
85
97
|
}
|
|
86
|
-
setActive(active) {
|
|
87
|
-
const options = Array.from(this.querySelectorAll('
|
|
88
|
-
|
|
98
|
+
setActive(active, withSelect) {
|
|
99
|
+
const options = Array.from(this.querySelectorAll('[option]'));
|
|
100
|
+
if (active instanceof Element) {
|
|
101
|
+
const index = options.findIndex(option => option === active);
|
|
102
|
+
this.setActive(index === -1 ? 0 : index, withSelect);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
options.forEach(async (option, index) => {
|
|
89
106
|
if (typeof active === 'number' && index === (active + options.length) % options.length) {
|
|
90
107
|
option.setAttribute('active', '');
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
108
|
+
if (withSelect && !this.attrSelected) {
|
|
109
|
+
this.multiple ? option.toggleAttribute('selected') : option.setAttribute('selected', '');
|
|
110
|
+
}
|
|
111
|
+
guaranteeFocus(option);
|
|
95
112
|
this.activeIndex = index;
|
|
96
113
|
}
|
|
97
114
|
else {
|
|
98
115
|
option.removeAttribute('active');
|
|
116
|
+
!this.attrSelected && !this.multiple && withSelect && option.removeAttribute('selected');
|
|
99
117
|
}
|
|
100
118
|
});
|
|
101
119
|
}
|
|
120
|
+
open(params) {
|
|
121
|
+
super.open(params);
|
|
122
|
+
if (this.activeIndex === undefined) {
|
|
123
|
+
this.activeIndex = 0;
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
this.setActive(this.activeIndex);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
close() {
|
|
130
|
+
if (this.hasAttribute('active')) {
|
|
131
|
+
this.dispatchEvent(new CustomEvent('close', {
|
|
132
|
+
bubbles: true,
|
|
133
|
+
composed: true
|
|
134
|
+
}));
|
|
135
|
+
}
|
|
136
|
+
super.close();
|
|
137
|
+
}
|
|
102
138
|
/**
|
|
103
|
-
* Open
|
|
139
|
+
* Open OxPopup
|
|
104
140
|
*
|
|
105
141
|
* @param {PopupOpenOptions}
|
|
106
142
|
*/
|
|
107
|
-
static open({ template, top, left, parent }) {
|
|
143
|
+
static open({ template, top, left, right, bottom, parent }) {
|
|
108
144
|
const owner = parent || document.body;
|
|
109
145
|
const target = document.createElement('ox-popup-list');
|
|
110
146
|
render(template, target);
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
147
|
+
if (left !== undefined)
|
|
148
|
+
target.style.left = `${left}px`;
|
|
149
|
+
if (top !== undefined)
|
|
150
|
+
target.style.top = `${top}px`;
|
|
151
|
+
if (right !== undefined)
|
|
152
|
+
target.style.right = `${right}px`;
|
|
153
|
+
if (bottom !== undefined)
|
|
154
|
+
target.style.bottom = `${bottom}px`;
|
|
114
155
|
target._parent = owner;
|
|
115
156
|
owner.appendChild(target);
|
|
116
157
|
}
|
|
117
158
|
};
|
|
118
|
-
|
|
119
|
-
...
|
|
159
|
+
OxPopupList.styles = [
|
|
160
|
+
...OxPopup.styles,
|
|
120
161
|
css `
|
|
121
162
|
:host {
|
|
122
163
|
display: none;
|
|
@@ -125,8 +166,7 @@ PopupList.styles = [
|
|
|
125
166
|
background-color: var(--theme-white-color, #fff);
|
|
126
167
|
z-index: 100;
|
|
127
168
|
box-shadow: 2px 3px 10px 5px rgba(0, 0, 0, 0.15);
|
|
128
|
-
padding:
|
|
129
|
-
|
|
169
|
+
padding: 4px 0;
|
|
130
170
|
color: var(--theme-primary-text-color, #3c3938);
|
|
131
171
|
font: normal 14px 'Roboto', sans-serif;
|
|
132
172
|
}
|
|
@@ -139,22 +179,29 @@ PopupList.styles = [
|
|
|
139
179
|
outline: none;
|
|
140
180
|
}
|
|
141
181
|
|
|
182
|
+
::slotted([option]) {
|
|
183
|
+
white-space: nowrap;
|
|
184
|
+
border-left: 3px solid transparent;
|
|
185
|
+
}
|
|
186
|
+
|
|
142
187
|
::slotted(*) {
|
|
143
|
-
|
|
144
|
-
|
|
188
|
+
padding: 5px 10px;
|
|
189
|
+
border-bottom: 1px solid rgba(0, 0, 0, 0.05);
|
|
190
|
+
cursor: pointer;
|
|
145
191
|
}
|
|
146
192
|
|
|
147
193
|
::slotted(*:focus) {
|
|
148
194
|
outline: none;
|
|
149
195
|
}
|
|
150
196
|
|
|
151
|
-
::slotted([option])
|
|
152
|
-
|
|
197
|
+
::slotted([option][active]),
|
|
198
|
+
::slotted([option]:hover) {
|
|
199
|
+
background-color: #f6f6f6;
|
|
153
200
|
}
|
|
154
201
|
|
|
155
|
-
::slotted([option][
|
|
156
|
-
|
|
157
|
-
|
|
202
|
+
::slotted([option][selected]) {
|
|
203
|
+
border-left: 3px solid var(--primary-color, #38a25b);
|
|
204
|
+
font-weight: bold;
|
|
158
205
|
}
|
|
159
206
|
|
|
160
207
|
::slotted([separator]) {
|
|
@@ -169,10 +216,16 @@ PopupList.styles = [
|
|
|
169
216
|
`
|
|
170
217
|
];
|
|
171
218
|
__decorate([
|
|
172
|
-
property({ type:
|
|
173
|
-
],
|
|
174
|
-
|
|
219
|
+
property({ type: Boolean })
|
|
220
|
+
], OxPopupList.prototype, "multiple", void 0);
|
|
221
|
+
__decorate([
|
|
222
|
+
property({ type: String, attribute: 'attr-selected' })
|
|
223
|
+
], OxPopupList.prototype, "attrSelected", void 0);
|
|
224
|
+
__decorate([
|
|
225
|
+
state()
|
|
226
|
+
], OxPopupList.prototype, "activeIndex", void 0);
|
|
227
|
+
OxPopupList = __decorate([
|
|
175
228
|
customElement('ox-popup-list')
|
|
176
|
-
],
|
|
177
|
-
export {
|
|
229
|
+
], OxPopupList);
|
|
230
|
+
export { OxPopupList };
|
|
178
231
|
//# sourceMappingURL=ox-popup-list.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ox-popup-list.js","sourceRoot":"","sources":["../../src/ox-popup-list.ts"],"names":[],"mappings":"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","sourcesContent":["import { PropertyValues, css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport { Popup } from './ox-popup'\nimport { render } from 'lit-html'\n\nfunction focusClosest(element: HTMLElement) {\n /* Find the closest focusable element. */\n const closest = element.closest(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n ) as HTMLElement\n\n closest?.focus()\n\n return closest\n}\n\n@customElement('ox-popup-list')\nexport class PopupList extends Popup {\n static styles = [\n ...Popup.styles,\n css`\n :host {\n display: none;\n flex-direction: column;\n align-items: stretch;\n background-color: var(--theme-white-color, #fff);\n z-index: 100;\n box-shadow: 2px 3px 10px 5px rgba(0, 0, 0, 0.15);\n padding: 5px;\n\n color: var(--theme-primary-text-color, #3c3938);\n font: normal 14px 'Roboto', sans-serif;\n }\n\n :host([active]) {\n display: flex;\n }\n\n :host(*:focus) {\n outline: none;\n }\n\n ::slotted(*) {\n margin: 1px 0;\n padding: 4px 2px 3px 2px;\n }\n\n ::slotted(*:focus) {\n outline: none;\n }\n\n ::slotted([option]) {\n border-radius: 5px;\n }\n\n ::slotted([option][active]) {\n background-color: rgba(20, 154, 155, 0.1);\n cursor: pointer;\n }\n\n ::slotted([separator]) {\n height: 1px;\n width: 100%;\n padding: 0;\n background-color: rgba(0, 0, 0, 0.15);\n }\n ::slotted([option] > input) {\n border: var(--border-dark-color, 1px solid rgba(0, 0, 0, 0.3));\n }\n `\n ]\n\n @property({ type: Number }) activeIndex: number = 0\n\n render() {\n return html` <slot> </slot> `\n }\n\n protected _onkeydown: (e: KeyboardEvent) => void = function (this: PopupList, e: KeyboardEvent) {\n e.stopPropagation()\n\n switch (e.key) {\n case 'Esc': // for IE/Edge\n case 'Escape':\n this.close()\n break\n\n case 'Left': // for IE/Edge\n case 'ArrowLeft':\n case 'Up': // for IE/Edge\n case 'ArrowUp':\n this.activeIndex--\n break\n\n case 'Right': // for IE/Edge\n case 'ArrowRight':\n case 'Down': // for IE/Edge\n case 'ArrowDown':\n this.activeIndex++\n break\n\n case 'Enter':\n e.stopPropagation()\n var option = (e.target as HTMLElement)?.closest('[option]')\n if (option) {\n this.select(option)\n }\n break\n }\n }.bind(this)\n\n protected _onfocusout: (e: FocusEvent) => void = function (this: PopupList, e: FocusEvent) {\n const target = e.target as HTMLElement\n const to = e.relatedTarget as HTMLElement\n const from = target.closest('ox-popup-list')\n\n if (!to && from !== this) {\n e.stopPropagation()\n\n /* \"하위의 ox-popup-list 엘리먼트가 포커스를 잃었지만, 그 포커스를 받은 엘리먼트가 없다.\"는 의미는 그 서브메뉴가 클로즈된 것을 의미한다. */\n this.setActive(this.activeIndex)\n } else {\n if (!this.contains(to)) {\n /* 분명히 내 범위가 아닌 엘리먼트로 포커스가 옮겨졌다면, ox-popup-list는 닫혀야 한다. */\n // @ts-ignore for debug\n !window.POPUP_DEBUG && this.close()\n }\n }\n }.bind(this)\n\n protected _onclick: (e: MouseEvent) => void = function (this: PopupList, e: MouseEvent) {\n e.stopPropagation()\n\n const option = (e.target as HTMLElement)?.closest('[option]')\n if (option) {\n this.setActive(option)\n this.select(option)\n }\n }.bind(this)\n\n updated(changes: PropertyValues<this>) {\n if (changes.has('activeIndex')) {\n this.setActive(this.activeIndex)\n }\n }\n\n select(option: Element) {\n option.dispatchEvent(new CustomEvent('selected', { bubbles: true, composed: true, detail: this }))\n\n if (!option.hasAttribute('alive-on-select') && !this.hasAttribute('alive-on-select')) {\n this.close()\n }\n }\n\n setActive(active: number | Element | null) {\n const options = Array.from(this.querySelectorAll(':scope > [option]'))\n\n options.map(async (option, index) => {\n if (typeof active === 'number' && index === (active + options.length) % options.length) {\n option.setAttribute('active', '')\n focusClosest(option as HTMLElement)\n\n this.activeIndex = index\n } else if (active === option) {\n this.activeIndex = index\n } else {\n option.removeAttribute('active')\n }\n })\n }\n\n /**\n * Open Popup\n *\n * @param {PopupOpenOptions}\n */\n static open({\n template,\n top,\n left,\n parent\n }: {\n template: unknown\n top: number\n left: number\n parent?: Element | null\n }) {\n const owner = parent || document.body\n const target = document.createElement('ox-popup-list') as PopupList\n render(template, target)\n\n target.style.left = `${left}px`\n target.style.top = `${top}px`\n\n target.setAttribute('active', '')\n\n target._parent = owner\n\n owner.appendChild(target)\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ox-popup-list.js","sourceRoot":"","sources":["../../src/ox-popup-list.ts"],"names":[],"mappings":"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","sourcesContent":["import { css, html, PropertyValues } from 'lit'\nimport { render } from 'lit-html'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport { OxPopup } from './ox-popup'\n\nfunction guaranteeFocus(element: HTMLElement) {\n // 1. 옵션 엘리먼트의 하위 첫번째 focusible 엘리먼트에 focus 기회를 준다.\n const focusible = element.querySelector('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])')\n\n if (focusible) {\n ;(focusible as HTMLElement).focus()\n return\n }\n\n // 2. 자신을 포함해서 가장 가까운 부모에게 focus 기회를 준다.\n const closest = element.closest(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n ) as HTMLElement\n\n closest?.focus()\n}\n\n@customElement('ox-popup-list')\nexport class OxPopupList extends OxPopup {\n static styles = [\n ...OxPopup.styles,\n css`\n :host {\n display: none;\n flex-direction: column;\n align-items: stretch;\n background-color: var(--theme-white-color, #fff);\n z-index: 100;\n box-shadow: 2px 3px 10px 5px rgba(0, 0, 0, 0.15);\n padding: 4px 0;\n color: var(--theme-primary-text-color, #3c3938);\n font: normal 14px 'Roboto', sans-serif;\n }\n\n :host([active]) {\n display: flex;\n }\n\n :host(*:focus) {\n outline: none;\n }\n\n ::slotted([option]) {\n white-space: nowrap;\n border-left: 3px solid transparent;\n }\n\n ::slotted(*) {\n padding: 5px 10px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n cursor: pointer;\n }\n\n ::slotted(*:focus) {\n outline: none;\n }\n\n ::slotted([option][active]),\n ::slotted([option]:hover) {\n background-color: #f6f6f6;\n }\n\n ::slotted([option][selected]) {\n border-left: 3px solid var(--primary-color, #38a25b);\n font-weight: bold;\n }\n\n ::slotted([separator]) {\n height: 1px;\n width: 100%;\n padding: 0;\n background-color: rgba(0, 0, 0, 0.15);\n }\n ::slotted([option] > input) {\n border: var(--border-dark-color, 1px solid rgba(0, 0, 0, 0.3));\n }\n `\n ]\n\n @property({ type: Boolean }) multiple: boolean = false\n @property({ type: String, attribute: 'attr-selected' }) attrSelected?: string\n\n @state() activeIndex?: number\n\n render() {\n return html`\n <slot\n @change=${(e: Event) => {\n e.stopPropagation()\n }}\n >\n </slot>\n `\n }\n\n protected _onkeydown: (e: KeyboardEvent) => void = function (this: OxPopupList, e: KeyboardEvent) {\n e.stopPropagation()\n\n switch (e.key) {\n case 'Esc': // for IE/Edge\n case 'Escape':\n this.close()\n break\n\n case 'Left': // for IE/Edge\n case 'ArrowLeft':\n case 'Up': // for IE/Edge\n case 'ArrowUp':\n this.activeIndex!--\n break\n\n case 'Right': // for IE/Edge\n case 'ArrowRight':\n case 'Down': // for IE/Edge\n case 'ArrowDown':\n this.activeIndex!++\n break\n\n case 'Enter':\n case ' ':\n case 'Spacebar': // for old firefox\n this.setActive(this.activeIndex!, true)\n this.select()\n break\n }\n }.bind(this)\n\n protected _onfocusout: (e: FocusEvent) => void = function (this: OxPopupList, e: FocusEvent) {\n const to = e.relatedTarget as HTMLElement\n\n if (!this.contains(to)) {\n /* 분명히 내 범위가 아닌 엘리먼트로 포커스가 옮겨졌다면, ox-popup-list는 닫혀야 한다. */\n // @ts-ignore for debug\n !window.POPUP_DEBUG && this.close()\n }\n }.bind(this)\n\n protected _onclick: (e: MouseEvent) => void = function (this: OxPopupList, e: MouseEvent) {\n e.stopPropagation()\n\n const option = (e.target as HTMLElement)?.closest('[option]')\n if (option) {\n this.setActive(option, true)\n this.select()\n }\n }.bind(this)\n\n updated(changes: PropertyValues<this>) {\n if (changes.has('activeIndex')) {\n this.activeIndex !== undefined && this.setActive(this.activeIndex)\n }\n }\n\n async select() {\n await this.updateComplete\n\n const options = Array.from(this.querySelectorAll(':scope > [option]'))\n\n const selected = options\n .filter(option => option.hasAttribute('value') && option.hasAttribute(this.attrSelected || 'selected'))\n .map(option => option.getAttribute('value'))\n\n this.dispatchEvent(\n new CustomEvent('select', {\n bubbles: true,\n composed: true,\n detail: this.multiple ? selected : selected[0]\n })\n )\n\n const option = options[this.activeIndex!]\n if (!option.hasAttribute('alive-on-select') && !this.hasAttribute('multiple')) {\n this.close()\n }\n }\n\n setActive(active: number | Element | null, withSelect?: boolean) {\n const options = Array.from(this.querySelectorAll('[option]'))\n\n if (active instanceof Element) {\n const index = options.findIndex(option => option === active)\n this.setActive(index === -1 ? 0 : index, withSelect)\n return\n }\n\n options.forEach(async (option, index) => {\n if (typeof active === 'number' && index === (active + options.length) % options.length) {\n option.setAttribute('active', '')\n if (withSelect && !this.attrSelected) {\n this.multiple ? option.toggleAttribute('selected') : option.setAttribute('selected', '')\n }\n\n guaranteeFocus(option as HTMLElement)\n\n this.activeIndex = index\n } else {\n option.removeAttribute('active')\n !this.attrSelected && !this.multiple && withSelect && option.removeAttribute('selected')\n }\n })\n }\n\n override open(params: { left?: number; top?: number; right?: number; bottom?: number; silent?: boolean }) {\n super.open(params)\n\n if (this.activeIndex === undefined) {\n this.activeIndex = 0\n } else {\n this.setActive(this.activeIndex)\n }\n }\n\n override close() {\n if (this.hasAttribute('active')) {\n this.dispatchEvent(\n new CustomEvent('close', {\n bubbles: true,\n composed: true\n })\n )\n }\n\n super.close()\n }\n\n /**\n * Open OxPopup\n *\n * @param {PopupOpenOptions}\n */\n static open({\n template,\n top,\n left,\n right,\n bottom,\n parent\n }: {\n template: unknown\n top?: number\n left?: number\n right?: number\n bottom?: number\n parent?: Element | null\n }) {\n const owner = parent || document.body\n const target = document.createElement('ox-popup-list') as OxPopupList\n render(template, target)\n\n if (left !== undefined) target.style.left = `${left}px`\n if (top !== undefined) target.style.top = `${top}px`\n if (right !== undefined) target.style.right = `${right}px`\n if (bottom !== undefined) target.style.bottom = `${bottom}px`\n\n target._parent = owner\n\n owner.appendChild(target)\n }\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { PropertyValues } from 'lit';
|
|
2
|
-
import {
|
|
3
|
-
export declare class
|
|
2
|
+
import { OxPopup } from './ox-popup';
|
|
3
|
+
export declare class OxPopupMenu extends OxPopup {
|
|
4
4
|
static styles: import("lit").CSSResult[];
|
|
5
5
|
activeIndex: number;
|
|
6
6
|
render(): import("lit-html").TemplateResult<1>;
|