@operato/oops 8.0.0-beta.0 → 8.0.0-beta.2
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 +18 -0
- package/package.json +4 -4
- package/.editorconfig +0 -29
- package/.storybook/main.js +0 -3
- package/.storybook/preview.js +0 -52
- package/.storybook/server.mjs +0 -8
- package/demo/index.html +0 -42
- package/src/index.ts +0 -4
- package/src/ox-oops-note.ts +0 -43
- package/src/ox-oops-progress.ts +0 -79
- package/src/ox-oops-spinner.ts +0 -29
- package/src/ox-oops.ts +0 -226
- package/stories/index.stories.ts +0 -50
- package/tsconfig.json +0 -24
- package/web-dev-server.config.mjs +0 -27
- package/web-test-runner.config.mjs +0 -41
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,24 @@
|
|
|
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
|
+
## [8.0.0-beta.2](https://github.com/hatiolab/operato/compare/v8.0.0-beta.1...v8.0.0-beta.2) (2025-01-08)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### :bug: Bug Fix
|
|
10
|
+
|
|
11
|
+
* typo .npmignore ([d9c0c8c](https://github.com/hatiolab/operato/commit/d9c0c8c79abc688c3c2cfb6c37fcb689483a5977))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## [8.0.0-beta.1](https://github.com/hatiolab/operato/compare/v8.0.0-beta.0...v8.0.0-beta.1) (2025-01-08)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### :bug: Bug Fix
|
|
19
|
+
|
|
20
|
+
* missing .npmignore ([be05985](https://github.com/hatiolab/operato/commit/be05985abfae4af53501f718dd52932099f7fbcb))
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
6
24
|
## [8.0.0-beta.0](https://github.com/hatiolab/operato/compare/v8.0.0-alpha.56...v8.0.0-beta.0) (2025-01-07)
|
|
7
25
|
|
|
8
26
|
**Note:** Version bump only for package @operato/oops
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@operato/oops",
|
|
3
3
|
"description": "Webcomponent oops following open-wc recommendations",
|
|
4
4
|
"author": "heartyoh",
|
|
5
|
-
"version": "8.0.0-beta.
|
|
5
|
+
"version": "8.0.0-beta.2",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
7
7
|
"module": "dist/src/index.js",
|
|
8
8
|
"license": "MIT",
|
|
@@ -54,8 +54,8 @@
|
|
|
54
54
|
},
|
|
55
55
|
"dependencies": {
|
|
56
56
|
"@material/web": "^2.0.0",
|
|
57
|
-
"@operato/graphql": "^8.0.0-beta.
|
|
58
|
-
"@operato/styles": "^8.0.0-beta.
|
|
57
|
+
"@operato/graphql": "^8.0.0-beta.2",
|
|
58
|
+
"@operato/styles": "^8.0.0-beta.2",
|
|
59
59
|
"lit": "^3.1.2"
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
@@ -90,5 +90,5 @@
|
|
|
90
90
|
"prettier --write"
|
|
91
91
|
]
|
|
92
92
|
},
|
|
93
|
-
"gitHead": "
|
|
93
|
+
"gitHead": "ee1b5124995accb99272d3b5854f3df1d8746dda"
|
|
94
94
|
}
|
package/.editorconfig
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# EditorConfig helps developers define and maintain consistent
|
|
2
|
-
# coding styles between different editors and IDEs
|
|
3
|
-
# editorconfig.org
|
|
4
|
-
|
|
5
|
-
root = true
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
[*]
|
|
9
|
-
|
|
10
|
-
# Change these settings to your own preference
|
|
11
|
-
indent_style = space
|
|
12
|
-
indent_size = 2
|
|
13
|
-
|
|
14
|
-
# We recommend you to keep these unchanged
|
|
15
|
-
end_of_line = lf
|
|
16
|
-
charset = utf-8
|
|
17
|
-
trim_trailing_whitespace = true
|
|
18
|
-
insert_final_newline = true
|
|
19
|
-
|
|
20
|
-
[*.md]
|
|
21
|
-
trim_trailing_whitespace = false
|
|
22
|
-
|
|
23
|
-
[*.json]
|
|
24
|
-
indent_size = 2
|
|
25
|
-
|
|
26
|
-
[*.{html,js,md}]
|
|
27
|
-
block_comment_start = /**
|
|
28
|
-
block_comment = *
|
|
29
|
-
block_comment_end = */
|
package/.storybook/main.js
DELETED
package/.storybook/preview.js
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { i18next } from '@operato/i18n'
|
|
2
|
-
|
|
3
|
-
export const globalTypes = {
|
|
4
|
-
locale: {
|
|
5
|
-
name: 'Locale',
|
|
6
|
-
description: 'Internationalization locale',
|
|
7
|
-
toolbar: {
|
|
8
|
-
icon: 'globe',
|
|
9
|
-
items: [
|
|
10
|
-
{ value: 'en', right: '🇺🇸', title: 'English' },
|
|
11
|
-
{ value: 'ko', right: '🇰🇷', title: '한국어' },
|
|
12
|
-
{ value: 'zh', right: '🇨🇳', title: '中文' },
|
|
13
|
-
{ value: 'ja', right: '🇯🇵', title: '日本語' },
|
|
14
|
-
{ value: 'ms', right: '🇲🇾', title: 'Bahasa Melayu' }
|
|
15
|
-
],
|
|
16
|
-
showName: true
|
|
17
|
-
}
|
|
18
|
-
},
|
|
19
|
-
theme: {
|
|
20
|
-
name: 'Theme',
|
|
21
|
-
description: 'Global theme for components',
|
|
22
|
-
toolbar: {
|
|
23
|
-
icon: 'paintbrush',
|
|
24
|
-
items: [
|
|
25
|
-
{ value: 'light', title: 'Light' },
|
|
26
|
-
{ value: 'dark', title: 'Dark' }
|
|
27
|
-
],
|
|
28
|
-
showName: true
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export const decorators = [
|
|
34
|
-
(Story, context) => {
|
|
35
|
-
const { locale, theme } = context.globals
|
|
36
|
-
|
|
37
|
-
if (locale) {
|
|
38
|
-
i18next.changeLanguage(locale)
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// Set the theme class for the document
|
|
42
|
-
if (theme === 'dark') {
|
|
43
|
-
document.documentElement.classList.add('dark')
|
|
44
|
-
document.documentElement.classList.remove('light')
|
|
45
|
-
} else {
|
|
46
|
-
document.documentElement.classList.add('light')
|
|
47
|
-
document.documentElement.classList.remove('dark')
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
return Story()
|
|
51
|
-
}
|
|
52
|
-
]
|
package/.storybook/server.mjs
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { storybookPlugin } from '@web/dev-server-storybook';
|
|
2
|
-
import baseConfig from '../web-dev-server.config.mjs';
|
|
3
|
-
|
|
4
|
-
export default /** @type {import('@web/dev-server').DevServerConfig} */ ({
|
|
5
|
-
...baseConfig,
|
|
6
|
-
open: '/',
|
|
7
|
-
plugins: [storybookPlugin({ type: 'web-components' }), ...baseConfig.plugins],
|
|
8
|
-
});
|
package/demo/index.html
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en-GB">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8" />
|
|
5
|
-
<style>
|
|
6
|
-
body {
|
|
7
|
-
background: #fafafa;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
#demo {
|
|
11
|
-
position: relative;
|
|
12
|
-
height: 100px;
|
|
13
|
-
background-color: lightgray;
|
|
14
|
-
text-align: center;
|
|
15
|
-
vertical-align: middle;
|
|
16
|
-
}
|
|
17
|
-
</style>
|
|
18
|
-
</head>
|
|
19
|
-
<body>
|
|
20
|
-
<div id="demo"></div>
|
|
21
|
-
|
|
22
|
-
<script type="module">
|
|
23
|
-
import { html, render } from 'lit'
|
|
24
|
-
import '../dist/src/ox-oops.js'
|
|
25
|
-
import { OxOops } from '../dist/src/ox-oops.js'
|
|
26
|
-
|
|
27
|
-
const parent = document.querySelector('#demo')
|
|
28
|
-
parent.addEventListener('click', function (e) {
|
|
29
|
-
OxOops.open({
|
|
30
|
-
template: html`<img
|
|
31
|
-
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAAC0CAYAAAA9zQYyAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDA1IDc5LjE2NDU5MCwgMjAyMC8xMi8wOS0xMTo1Nzo0NCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIyLjEgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTNEM0NDM0E2MkJEMTFFQjhDOUNFMDY3NTMzQjJBQjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTNEM0NDM0I2MkJEMTFFQjhDOUNFMDY3NTMzQjJBQjQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1M0QzQ0MzODYyQkQxMUVCOEM5Q0UwNjc1MzNCMkFCNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1M0QzQ0MzOTYyQkQxMUVCOEM5Q0UwNjc1MzNCMkFCNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PlmzjKoAAGeQSURBVHja7L13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"
|
|
32
|
-
/>`,
|
|
33
|
-
top: e.pageY,
|
|
34
|
-
left: e.pageX,
|
|
35
|
-
parent
|
|
36
|
-
})
|
|
37
|
-
})
|
|
38
|
-
|
|
39
|
-
render(html`clike anywhere in this box to oops mini.`, parent)
|
|
40
|
-
</script>
|
|
41
|
-
</body>
|
|
42
|
-
</html>
|
package/src/index.ts
DELETED
package/src/ox-oops-note.ts
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import '@material/web/icon/icon.js'
|
|
2
|
-
|
|
3
|
-
import { css, html, LitElement } from 'lit'
|
|
4
|
-
import { customElement, property } from 'lit/decorators.js'
|
|
5
|
-
|
|
6
|
-
@customElement('ox-oops-note')
|
|
7
|
-
export class OxOopsNote extends LitElement {
|
|
8
|
-
static styles = css`
|
|
9
|
-
:host {
|
|
10
|
-
display: block;
|
|
11
|
-
text-align: center;
|
|
12
|
-
}
|
|
13
|
-
md-icon {
|
|
14
|
-
font: var(--oops-note-icon-font);
|
|
15
|
-
color: var(--oops-note-icon-color);
|
|
16
|
-
border: var(--oops-note-icon-border);
|
|
17
|
-
border-radius: var(--oops-note-icon-border-radius);
|
|
18
|
-
padding: var(--oops-note-icon-padding);
|
|
19
|
-
}
|
|
20
|
-
[title] {
|
|
21
|
-
margin: var(--oops-note-title-margin);
|
|
22
|
-
font: var(--oops-note-title-font);
|
|
23
|
-
color: var(--oops-note-title-color);
|
|
24
|
-
text-transform: capitalize;
|
|
25
|
-
}
|
|
26
|
-
[description] {
|
|
27
|
-
font: var(--oops-note-description-font);
|
|
28
|
-
color: var(--oops-note-description-color);
|
|
29
|
-
}
|
|
30
|
-
`
|
|
31
|
-
|
|
32
|
-
@property({ type: String }) icon!: string
|
|
33
|
-
@property({ type: String }) title: string = ''
|
|
34
|
-
@property({ type: String }) description: string = ''
|
|
35
|
-
|
|
36
|
-
render() {
|
|
37
|
-
return html`
|
|
38
|
-
<md-icon>${this.icon}</md-icon>
|
|
39
|
-
<div title>${this.title}</div>
|
|
40
|
-
<div description>${this.description}</div>
|
|
41
|
-
`
|
|
42
|
-
}
|
|
43
|
-
}
|
package/src/ox-oops-progress.ts
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import gql from 'graphql-tag'
|
|
2
|
-
import { html, LitElement, PropertyValues } from 'lit'
|
|
3
|
-
import { customElement, property } from 'lit/decorators.js'
|
|
4
|
-
|
|
5
|
-
import { subscribe } from '@operato/graphql'
|
|
6
|
-
|
|
7
|
-
@customElement('ox-oops-progress')
|
|
8
|
-
export class OxOopsProgress extends LitElement {
|
|
9
|
-
@property({ type: String }) tag?: string
|
|
10
|
-
|
|
11
|
-
private _subscription: any
|
|
12
|
-
|
|
13
|
-
render() {
|
|
14
|
-
return html` <slot></slot> `
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
disconnectedCallback() {
|
|
18
|
-
super.disconnectedCallback()
|
|
19
|
-
this.stopSubscribe()
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
get subscription() {
|
|
23
|
-
return this._subscription
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
set subscription(subscription) {
|
|
27
|
-
console.warn('oops-progress#subscription is readonly property')
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
async updated(changes: PropertyValues<this>) {
|
|
31
|
-
if (changes.has('tag') && this.subscription) {
|
|
32
|
-
await this.stopSubscribe()
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
async startSubscribe() {
|
|
37
|
-
if (!this.tag || this._subscription) {
|
|
38
|
-
return
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
this._subscription = await subscribe(
|
|
42
|
-
{
|
|
43
|
-
query: gql`
|
|
44
|
-
subscription {
|
|
45
|
-
data(tag: "${this.tag}") {
|
|
46
|
-
tag
|
|
47
|
-
data
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
`
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
next: async ({ data }: { data: any }) => {
|
|
54
|
-
if (data) {
|
|
55
|
-
const { progress = 0, message = '' } = data?.data?.data || {}
|
|
56
|
-
this.dispatchEvent(
|
|
57
|
-
new CustomEvent('progress', {
|
|
58
|
-
detail: {
|
|
59
|
-
progress,
|
|
60
|
-
message
|
|
61
|
-
}
|
|
62
|
-
})
|
|
63
|
-
)
|
|
64
|
-
|
|
65
|
-
if (progress >= 100) {
|
|
66
|
-
await this.stopSubscribe()
|
|
67
|
-
this.dispatchEvent(new CustomEvent('finish'))
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
)
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
async stopSubscribe() {
|
|
76
|
-
await this._subscription?.unsubscribe()
|
|
77
|
-
delete this._subscription
|
|
78
|
-
}
|
|
79
|
-
}
|
package/src/ox-oops-spinner.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { css, html, LitElement } from 'lit'
|
|
2
|
-
import { customElement } from 'lit/decorators.js'
|
|
3
|
-
|
|
4
|
-
@customElement('ox-oops-spinner')
|
|
5
|
-
export class OxOopsSpinner extends LitElement {
|
|
6
|
-
static styles = css`
|
|
7
|
-
:host {
|
|
8
|
-
width: 70px;
|
|
9
|
-
height: 70px;
|
|
10
|
-
margin: 0 auto;
|
|
11
|
-
background: url(/assets/images/spinner.png) 0 0 no-repeat;
|
|
12
|
-
background-size: 700%;
|
|
13
|
-
animation: spinner steps(6) 2s infinite both;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
@keyframes spinner {
|
|
17
|
-
0% {
|
|
18
|
-
background-position: 0%;
|
|
19
|
-
}
|
|
20
|
-
100% {
|
|
21
|
-
background-position: 100%;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
`
|
|
25
|
-
|
|
26
|
-
render() {
|
|
27
|
-
return html``
|
|
28
|
-
}
|
|
29
|
-
}
|
package/src/ox-oops.ts
DELETED
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
import { css, html, LitElement } from 'lit'
|
|
2
|
-
import { render } from 'lit-html'
|
|
3
|
-
import { customElement, state } from 'lit/decorators.js'
|
|
4
|
-
|
|
5
|
-
import { ScrollbarStyles } from '@operato/styles'
|
|
6
|
-
|
|
7
|
-
@customElement('ox-oops')
|
|
8
|
-
export class OxOops extends LitElement {
|
|
9
|
-
static styles = [
|
|
10
|
-
ScrollbarStyles,
|
|
11
|
-
css`
|
|
12
|
-
:host {
|
|
13
|
-
position: absolute;
|
|
14
|
-
display: none;
|
|
15
|
-
background-color: var(--md-sys-color-surface, #fff);
|
|
16
|
-
z-index: 100;
|
|
17
|
-
padding: 4px 0;
|
|
18
|
-
box-shadow: 2px 3px 10px 5px rgba(0, 0, 0, 0.15);
|
|
19
|
-
box-sizing: border-box;
|
|
20
|
-
min-width: fit-content;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
:host([active]) {
|
|
24
|
-
display: block;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
:host(*:focus) {
|
|
28
|
-
outline: none;
|
|
29
|
-
}
|
|
30
|
-
::slotted(*) {
|
|
31
|
-
padding: 5px 10px;
|
|
32
|
-
cursor: pointer;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
::slotted(*:focus) {
|
|
36
|
-
outline: none;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
::slotted([menu][active]),
|
|
40
|
-
::slotted([menu]:hover) {
|
|
41
|
-
background-color: #f6f6f6;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
::slotted([menu]),
|
|
45
|
-
::slotted(ox-oops-menuitem) {
|
|
46
|
-
border-left: 3px solid transparent;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
::slotted(ox-oops-menuitem[active]) {
|
|
50
|
-
border-left: 3px solid var(--md-sys-color-on-primary-container, #38a25b);
|
|
51
|
-
font-weight: bold;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
::slotted([separator]) {
|
|
55
|
-
height: 1px;
|
|
56
|
-
width: 100%;
|
|
57
|
-
padding: 0;
|
|
58
|
-
background-color: rgba(0, 0, 0, 0.15);
|
|
59
|
-
}
|
|
60
|
-
::slotted([menu] > input) {
|
|
61
|
-
border: var(--border-dim-color, 1px solid rgba(0, 0, 0, 0.3));
|
|
62
|
-
}
|
|
63
|
-
`
|
|
64
|
-
]
|
|
65
|
-
|
|
66
|
-
@state() _parent?: Element
|
|
67
|
-
|
|
68
|
-
render() {
|
|
69
|
-
return html` <slot> </slot> `
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
protected _onfocusout: (e: FocusEvent) => void = function (this: OxOops, e: FocusEvent) {
|
|
73
|
-
const to = e.relatedTarget as HTMLElement
|
|
74
|
-
|
|
75
|
-
if (!this.contains(to)) {
|
|
76
|
-
/* 분명히 내 범위가 아닌 엘리먼트로 포커스가 옮겨졌다면, ox-oops은 닫혀야 한다. */
|
|
77
|
-
// @ts-ignore for debug
|
|
78
|
-
!window.POPUP_DEBUG && this.close()
|
|
79
|
-
}
|
|
80
|
-
}.bind(this)
|
|
81
|
-
|
|
82
|
-
protected _onkeydown: (e: KeyboardEvent) => void = function (this: OxOops, e: KeyboardEvent) {
|
|
83
|
-
e.stopPropagation()
|
|
84
|
-
|
|
85
|
-
switch (e.key) {
|
|
86
|
-
case 'Esc': // for IE/Edge
|
|
87
|
-
case 'Escape':
|
|
88
|
-
this.close()
|
|
89
|
-
break
|
|
90
|
-
}
|
|
91
|
-
}.bind(this)
|
|
92
|
-
|
|
93
|
-
protected _onkeyup: (e: KeyboardEvent) => void = function (this: OxOops, e: KeyboardEvent) {
|
|
94
|
-
e.stopPropagation()
|
|
95
|
-
}.bind(this)
|
|
96
|
-
|
|
97
|
-
protected _onclick: (e: MouseEvent) => void = function (this: OxOops, e: MouseEvent) {
|
|
98
|
-
e.stopPropagation()
|
|
99
|
-
}.bind(this)
|
|
100
|
-
|
|
101
|
-
protected _onclose: (e: Event) => void = function (this: OxOops, e: Event) {
|
|
102
|
-
this.close()
|
|
103
|
-
}.bind(this)
|
|
104
|
-
|
|
105
|
-
protected _oncollapse: (e: Event) => void = function (this: OxOops, e: Event) {
|
|
106
|
-
e.stopPropagation()
|
|
107
|
-
this.close()
|
|
108
|
-
}.bind(this)
|
|
109
|
-
|
|
110
|
-
protected _onwindowblur: (e: Event) => void = function (this: OxOops, e: Event) {
|
|
111
|
-
// @ts-ignore for debug
|
|
112
|
-
!window.POPUP_DEBUG && this.close()
|
|
113
|
-
}.bind(this)
|
|
114
|
-
|
|
115
|
-
connectedCallback() {
|
|
116
|
-
super.connectedCallback()
|
|
117
|
-
|
|
118
|
-
this.addEventListener('focusout', this._onfocusout)
|
|
119
|
-
this.addEventListener('keydown', this._onkeydown)
|
|
120
|
-
this.addEventListener('keyup', this._onkeyup)
|
|
121
|
-
this.addEventListener('click', this._onclick)
|
|
122
|
-
this.addEventListener('ox-close', this._onclose)
|
|
123
|
-
this.addEventListener('ox-collapse', this._oncollapse)
|
|
124
|
-
|
|
125
|
-
this.setAttribute('tabindex', '0') // make this element focusable
|
|
126
|
-
this.guaranteeFocus()
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* Configuration for opening ox-oops
|
|
131
|
-
*
|
|
132
|
-
* @typedef {Object} OopsOpenOptions
|
|
133
|
-
* @property {HTMLTemplate} template HTMLTemplate to be displayed inside the oops
|
|
134
|
-
* @property {Number} top The position-top where the pop-up will be displayed
|
|
135
|
-
* @property {Number} left The position-left where the pop-up will be displayed
|
|
136
|
-
* @property {HTMLElement} parent Oops's parent element
|
|
137
|
-
*/
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Open Oops
|
|
141
|
-
*
|
|
142
|
-
* @param {OopsOpenOptions}
|
|
143
|
-
*/
|
|
144
|
-
static open({
|
|
145
|
-
template,
|
|
146
|
-
top,
|
|
147
|
-
left,
|
|
148
|
-
right,
|
|
149
|
-
bottom,
|
|
150
|
-
parent
|
|
151
|
-
}: {
|
|
152
|
-
template: unknown
|
|
153
|
-
top?: number
|
|
154
|
-
left?: number
|
|
155
|
-
right?: number
|
|
156
|
-
bottom?: number
|
|
157
|
-
parent?: Element | null
|
|
158
|
-
}) {
|
|
159
|
-
const owner = parent || document.body
|
|
160
|
-
const target = document.createElement('ox-oops') as OxOops
|
|
161
|
-
|
|
162
|
-
render(template, target)
|
|
163
|
-
|
|
164
|
-
target._parent = owner
|
|
165
|
-
owner.appendChild(target)
|
|
166
|
-
|
|
167
|
-
target.open({ top, left, right, bottom })
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
open({
|
|
171
|
-
left,
|
|
172
|
-
top,
|
|
173
|
-
right,
|
|
174
|
-
bottom,
|
|
175
|
-
silent = false
|
|
176
|
-
}: {
|
|
177
|
-
left?: number
|
|
178
|
-
top?: number
|
|
179
|
-
right?: number
|
|
180
|
-
bottom?: number
|
|
181
|
-
silent?: boolean
|
|
182
|
-
}) {
|
|
183
|
-
if (left !== undefined) this.style.left = `${left}px`
|
|
184
|
-
if (top !== undefined) this.style.top = `${top}px`
|
|
185
|
-
if (right !== undefined) this.style.right = `${right}px`
|
|
186
|
-
if (bottom !== undefined) this.style.bottom = `${bottom}px`
|
|
187
|
-
|
|
188
|
-
this.setAttribute('active', '')
|
|
189
|
-
|
|
190
|
-
!silent && this.guaranteeFocus()
|
|
191
|
-
|
|
192
|
-
/* When the window is out of focus, all pop-ups should disappear. */
|
|
193
|
-
window.addEventListener('blur', this._onwindowblur)
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
guaranteeFocus() {
|
|
197
|
-
const focusible = this.querySelector(
|
|
198
|
-
':scope > button, :scope > [href], :scope > input, :scope > select, :scope > textarea, :scope > [tabindex]:not([tabindex="-1"])'
|
|
199
|
-
)
|
|
200
|
-
|
|
201
|
-
if (focusible) {
|
|
202
|
-
;(focusible as HTMLElement).focus()
|
|
203
|
-
} else {
|
|
204
|
-
this.focus()
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
close() {
|
|
209
|
-
this.removeAttribute('active')
|
|
210
|
-
|
|
211
|
-
window.removeEventListener('blur', this._onwindowblur)
|
|
212
|
-
|
|
213
|
-
if (this._parent) {
|
|
214
|
-
/* this case is when the oops is opened by OxOops.open(...) */
|
|
215
|
-
this.removeEventListener('focusout', this._onfocusout)
|
|
216
|
-
this.removeEventListener('keydown', this._onkeydown)
|
|
217
|
-
this.removeEventListener('keyup', this._onkeyup)
|
|
218
|
-
this.removeEventListener('click', this._onclick)
|
|
219
|
-
this.removeEventListener('ox-close', this._onclose)
|
|
220
|
-
this.removeEventListener('ox-collapse', this._oncollapse)
|
|
221
|
-
|
|
222
|
-
this._parent.removeChild(this)
|
|
223
|
-
delete this._parent
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
}
|
package/stories/index.stories.ts
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import '../src/ox-oops'
|
|
2
|
-
|
|
3
|
-
import { html, TemplateResult } from 'lit'
|
|
4
|
-
|
|
5
|
-
export default {
|
|
6
|
-
title: 'ContextMenu',
|
|
7
|
-
component: 'ox-oops',
|
|
8
|
-
argTypes: {
|
|
9
|
-
title: { control: 'text' },
|
|
10
|
-
counter: { control: 'number' },
|
|
11
|
-
textColor: { control: 'color' }
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
interface Story<T> {
|
|
16
|
-
(args: T): TemplateResult
|
|
17
|
-
args?: Partial<T>
|
|
18
|
-
argTypes?: Record<string, unknown>
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
interface ArgTypes {
|
|
22
|
-
title?: string
|
|
23
|
-
counter?: number
|
|
24
|
-
textColor?: string
|
|
25
|
-
slot?: TemplateResult
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const Template: Story<ArgTypes> = ({ title = 'Hello world', counter = 5, textColor, slot }: ArgTypes) => html`
|
|
29
|
-
<ox-oops style="--ox-oops-text-color: ${textColor || 'black'}" .title=${title} .counter=${counter}> ${slot} </ox-oops>
|
|
30
|
-
`
|
|
31
|
-
|
|
32
|
-
export const Regular = Template.bind({})
|
|
33
|
-
|
|
34
|
-
export const CustomTitle = Template.bind({})
|
|
35
|
-
CustomTitle.args = {
|
|
36
|
-
title: 'My title'
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export const CustomCounter = Template.bind({})
|
|
40
|
-
CustomCounter.args = {
|
|
41
|
-
counter: 123456
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export const SlottedContent = Template.bind({})
|
|
45
|
-
SlottedContent.args = {
|
|
46
|
-
slot: html`<p>Slotted content</p>`
|
|
47
|
-
}
|
|
48
|
-
SlottedContent.argTypes = {
|
|
49
|
-
slot: { table: { disable: true } }
|
|
50
|
-
}
|
package/tsconfig.json
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "es2018",
|
|
4
|
-
"module": "esnext",
|
|
5
|
-
"moduleResolution": "node",
|
|
6
|
-
"noEmitOnError": true,
|
|
7
|
-
"lib": ["es2017", "dom"],
|
|
8
|
-
"strict": true,
|
|
9
|
-
"esModuleInterop": false,
|
|
10
|
-
"allowSyntheticDefaultImports": true,
|
|
11
|
-
"experimentalDecorators": true,
|
|
12
|
-
"useDefineForClassFields": false,
|
|
13
|
-
"importHelpers": true,
|
|
14
|
-
"outDir": "dist",
|
|
15
|
-
"sourceMap": true,
|
|
16
|
-
"inlineSources": true,
|
|
17
|
-
"rootDir": "./",
|
|
18
|
-
"declaration": true,
|
|
19
|
-
"incremental": true,
|
|
20
|
-
"skipLibCheck": true,
|
|
21
|
-
"types": ["node", "mocha"]
|
|
22
|
-
},
|
|
23
|
-
"include": ["**/*.ts"]
|
|
24
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
// import { hmrPlugin, presets } from '@open-wc/dev-server-hmr';
|
|
2
|
-
|
|
3
|
-
/** Use Hot Module replacement by adding --hmr to the start command */
|
|
4
|
-
const hmr = process.argv.includes('--hmr');
|
|
5
|
-
|
|
6
|
-
export default /** @type {import('@web/dev-server').DevServerConfig} */ ({
|
|
7
|
-
open: '/demo/',
|
|
8
|
-
/** Use regular watch mode if HMR is not enabled. */
|
|
9
|
-
watch: !hmr,
|
|
10
|
-
/** Resolve bare module imports */
|
|
11
|
-
nodeResolve: {
|
|
12
|
-
exportConditions: ['browser', 'development'],
|
|
13
|
-
},
|
|
14
|
-
|
|
15
|
-
/** Compile JS for older browsers. Requires @web/dev-server-esbuild plugin */
|
|
16
|
-
// esbuildTarget: 'auto'
|
|
17
|
-
|
|
18
|
-
/** Set appIndex to enable SPA routing */
|
|
19
|
-
// appIndex: 'demo/index.html',
|
|
20
|
-
|
|
21
|
-
plugins: [
|
|
22
|
-
/** Use Hot Module Replacement by uncommenting. Requires @open-wc/dev-server-hmr plugin */
|
|
23
|
-
// hmr && hmrPlugin({ exclude: ['**/*/node_modules/**/*'], presets: [presets.litElement] }),
|
|
24
|
-
],
|
|
25
|
-
|
|
26
|
-
// See documentation for all available options
|
|
27
|
-
});
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
// import { playwrightLauncher } from '@web/test-runner-playwright';
|
|
2
|
-
|
|
3
|
-
const filteredLogs = ['Running in dev mode', 'lit-html is in dev mode'];
|
|
4
|
-
|
|
5
|
-
export default /** @type {import("@web/test-runner").TestRunnerConfig} */ ({
|
|
6
|
-
/** Test files to run */
|
|
7
|
-
files: 'dist/test/**/*.test.js',
|
|
8
|
-
|
|
9
|
-
/** Resolve bare module imports */
|
|
10
|
-
nodeResolve: {
|
|
11
|
-
exportConditions: ['browser', 'development'],
|
|
12
|
-
},
|
|
13
|
-
|
|
14
|
-
/** Filter out lit dev mode logs */
|
|
15
|
-
filterBrowserLogs(log) {
|
|
16
|
-
for (const arg of log.args) {
|
|
17
|
-
if (typeof arg === 'string' && filteredLogs.some(l => arg.includes(l))) {
|
|
18
|
-
return false;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
return true;
|
|
22
|
-
},
|
|
23
|
-
|
|
24
|
-
/** Compile JS for older browsers. Requires @web/dev-server-esbuild plugin */
|
|
25
|
-
// esbuildTarget: 'auto',
|
|
26
|
-
|
|
27
|
-
/** Amount of browsers to run concurrently */
|
|
28
|
-
// concurrentBrowsers: 2,
|
|
29
|
-
|
|
30
|
-
/** Amount of test files per browser to test concurrently */
|
|
31
|
-
// concurrency: 1,
|
|
32
|
-
|
|
33
|
-
/** Browsers to run tests on */
|
|
34
|
-
// browsers: [
|
|
35
|
-
// playwrightLauncher({ product: 'chromium' }),
|
|
36
|
-
// playwrightLauncher({ product: 'firefox' }),
|
|
37
|
-
// playwrightLauncher({ product: 'webkit' }),
|
|
38
|
-
// ],
|
|
39
|
-
|
|
40
|
-
// See documentation for all available options
|
|
41
|
-
});
|