@operato/popup 1.1.23 → 1.1.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 CHANGED
@@ -3,6 +3,26 @@
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
+ ### [1.1.42](https://github.com/hatiolab/operato/compare/v1.1.41...v1.1.42) (2022-12-24)
7
+
8
+
9
+ ### :bug: Bug Fix
10
+
11
+ * add movable option into PopupOptions ([caab385](https://github.com/hatiolab/operato/commit/caab385dc7e17de12110e406629625c7d580d6b4))
12
+ * make ox-floating-overlay movable ([042c4e7](https://github.com/hatiolab/operato/commit/042c4e702b864476573fc839fc0e51a596665df8))
13
+ * make ox-floating-overlay movable ([c784953](https://github.com/hatiolab/operato/commit/c784953ca36ca18b4e43134230073e0939f20401))
14
+ * ox-popup width, height property ([9431ad8](https://github.com/hatiolab/operato/commit/9431ad860b1fdb41e4fe19b970abfd1c63fe19ce))
15
+
16
+
17
+
18
+ ### [1.1.28](https://github.com/hatiolab/operato/compare/v1.1.27...v1.1.28) (2022-12-07)
19
+
20
+ **Note:** Version bump only for package @operato/popup
21
+
22
+
23
+
24
+
25
+
6
26
  ### [1.1.23](https://github.com/hatiolab/operato/compare/v1.1.22...v1.1.23) (2022-12-04)
7
27
 
8
28
 
package/demo/index.html CHANGED
@@ -130,8 +130,8 @@
130
130
  <input id="text-01" type="text" value="Plain text input" />
131
131
  </div>
132
132
  `,
133
- top: e.pageY,
134
- left: e.pageX,
133
+ top: e.offsetY,
134
+ left: e.offsetX,
135
135
  parent
136
136
  })
137
137
  })
@@ -10,16 +10,29 @@
10
10
 
11
11
  #demo {
12
12
  position: relative;
13
- height: 300px;
13
+ height: 1000px;
14
14
  background-color: lightgray;
15
15
  vertical-align: middle;
16
16
  }
17
+
18
+ #demo-container {
19
+ display: block;
20
+ }
21
+
22
+ #after-demo {
23
+ height: 1px;
24
+ background-color: darkgray;
25
+ vertical-align: middle;
26
+ }
17
27
  </style>
18
28
  <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500" rel="stylesheet" />
19
29
  <link href="https://fonts.googleapis.com/css?family=Material+Icons&display=block" rel="stylesheet" />
20
30
  </head>
21
31
  <body>
22
- <div id="demo"></div>
32
+ <div id="demo-container">
33
+ <div id="demo"></div>
34
+ </div>
35
+ <div id="after-demo"></div>
23
36
 
24
37
  <script type="module">
25
38
  import { html, render } from 'lit'
@@ -34,8 +47,9 @@
34
47
  parent.addEventListener('click', function (e) {
35
48
  const popupList = document.querySelector('#popup-list')
36
49
  popupList?.open({
37
- top: e.pageY,
38
- left: e.pageX
50
+ top: e.offsetY,
51
+ left: e.offsetX,
52
+ height: '200px'
39
53
  })
40
54
  })
41
55
 
@@ -8,11 +8,11 @@
8
8
  }
9
9
 
10
10
  #demo {
11
- position: relative;
12
- height: 100px;
11
+ height: 1000px;
13
12
  background-color: lightgray;
14
13
  text-align: center;
15
14
  vertical-align: middle;
15
+ margin: 100px;
16
16
  }
17
17
  </style>
18
18
  </head>
@@ -30,8 +30,8 @@
30
30
  template: html`<img
31
31
  src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAAC0CAYAAAA9zQYyAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDA1IDc5LjE2NDU5MCwgMjAyMC8xMi8wOS0xMTo1Nzo0NCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIyLjEgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTNEM0NDM0E2MkJEMTFFQjhDOUNFMDY3NTMzQjJBQjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTNEM0NDM0I2MkJEMTFFQjhDOUNFMDY3NTMzQjJBQjQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1M0QzQ0MzODYyQkQxMUVCOEM5Q0UwNjc1MzNCMkFCNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1M0QzQ0MzOTYyQkQxMUVCOEM5Q0UwNjc1MzNCMkFCNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PlmzjKoAAGeQSURBVHja7L13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"
32
32
  />`,
33
- top: e.pageY,
34
- left: e.pageX,
33
+ top: e.clientY,
34
+ left: e.clientX,
35
35
  parent
36
36
  })
37
37
  })
@@ -10,6 +10,7 @@ import { TemplateResult } from 'lit';
10
10
  * @property {Boolean} [closable] - set whether the close 'X' button is shown on top-right most position (default true)
11
11
  * @property {Boolean} [escapable] - set whether the close popup with 'ESC' key (default true)
12
12
  * @property {Boolean} [backdrop] - set whether to do background masking around the pop-up. If true, it becomes modal (default true)
13
+ * @property {Boolean} [movable] - set whether to be able to movable by the gesture dragging on header once the hovering option is 'center'
13
14
  * @property {String} [help] - inline help link
14
15
  */
15
16
  export type PopupOptions = {
@@ -19,6 +20,7 @@ export type PopupOptions = {
19
20
  closable?: boolean;
20
21
  escapable?: boolean;
21
22
  backdrop?: boolean;
23
+ movable?: boolean;
22
24
  help?: string;
23
25
  };
24
26
  /**
@@ -18,7 +18,7 @@ var popupSequence = 0;
18
18
  * @returns popup handle object. This object is used to close the popup.
19
19
  */
20
20
  function defaultOpenPopup(template, options = {}) {
21
- const { title, size = 'large', closable = false, escapable = false, help, hovering, backdrop } = options;
21
+ const { title, size = 'large', closable = false, escapable = false, help, hovering, backdrop, movable = false } = options;
22
22
  const name = `$popup-${popupSequence++}`;
23
23
  render(html `
24
24
  <ox-floating-overlay
@@ -32,6 +32,7 @@ function defaultOpenPopup(template, options = {}) {
32
32
  .size=${size}
33
33
  .closable=${closable}
34
34
  .historical=${false}
35
+ .movable=${movable}
35
36
  >${template}</ox-floating-overlay
36
37
  >
37
38
  `, document.body);
@@ -1 +1 @@
1
- {"version":3,"file":"open-popup.js","sourceRoot":"","sources":["../../src/open-popup.ts"],"names":[],"mappings":"AAAA,OAAO,0BAA0B,CAAA;AAEjC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAkB,MAAM,KAAK,CAAA;AA0ClD;;;;;;;;GAQG;AACH,IAAI,aAAa,GAAG,CAAC,CAAA;AAErB;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,QAAwB,EAAE,UAAwB,EAAE;IAC5E,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,OAAO,EAAE,QAAQ,GAAG,KAAK,EAAE,SAAS,GAAG,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;IACxG,MAAM,IAAI,GAAG,UAAU,aAAa,EAAE,EAAE,CAAA;IAExC,MAAM,CACJ,IAAI,CAAA;;aAEK,IAAI;eACF,IAAI;oBACC,QAAQ;;oBAER,QAAQ;iBACX,KAAK,IAAI,EAAE;gBACZ,IAAI;gBACJ,IAAI;oBACA,QAAQ;sBACN,KAAK;WAChB,QAAQ;;KAEd,EACD,QAAQ,CAAC,IAAI,CACd,CAAA;IAED,qBAAqB,CAAC,GAAG,EAAE;QACzB,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,MAAM,WAAW,GAAG;QAClB,IAAI;QACJ,KAAK,EAAE,GAAG,EAAE;YACV,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,EAAE,CAAsB,CAAA;YAC1E,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,EAAE,CAAA;YACd,WAAW,CAAC,QAAQ,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAA;QAChD,CAAC;QACD,MAAM,EAAE,KAAK;KACC,CAAA;IAEhB,OAAO,WAAW,CAAA;AACpB,CAAC;AAED,IAAI,aAAa,GAAqE,gBAAgB,CAAA;AAEtG;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACxC,cAAgF;IAEhF,aAAa,GAAG,cAAc,CAAA;AAChC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,QAAwB,EAAE,UAAwB,EAAE,EAAe,EAAE;IAC7F,OAAO,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;AACzC,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAoB,EAAQ,EAAE;IACvD,OAAO,CAAC,aAAa,CACnB,IAAI,WAAW,CAAC,eAAe,EAAE;QAC/B,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI;KACf,CAAC,CACH,CAAA;AACH,CAAC,CAAA","sourcesContent":["import './ox-floating-overlay.js'\n\nimport { html, render, TemplateResult } from 'lit'\n\nimport { OxFloatingOverlay } from './ox-floating-overlay.js'\n\n/**\n * Options for popup\n *\n * @typedef {Object} PopupOptions\n * @property {String} [title] - popup title\n * @property {'center' | 'next' | 'edge'} [hovering] - hovering position (default: 'center'). 'edge' : edge of the HEADERBAR, 'next' : next of the clicked position.\n * @property {'large' | 'medium' | small'} [size] - popup size\n * @property {Boolean} [closable] - set whether the close 'X' button is shown on top-right most position (default true)\n * @property {Boolean} [escapable] - set whether the close popup with 'ESC' key (default true)\n * @property {Boolean} [backdrop] - set whether to do background masking around the pop-up. If true, it becomes modal (default true)\n * @property {String} [help] - inline help link\n */\nexport type PopupOptions = {\n title?: string\n hovering?: 'center' | 'next' | 'edge'\n size?: 'large' | 'medium' | 'small'\n closable?: boolean\n escapable?: boolean\n backdrop?: boolean\n help?: string\n}\n\n/**\n * Popup handle object that will be returned openPopup\n *\n * @typedef {Object} PopupHandle\n * @property {String} [name] - popup instance name\n * @property {Function} [close] - call this function to close the popup.\n * @property {Boolean} [closed] - state telling whether the popup is closed or not.\n * @property {Function} [onclosed] - set callback function on close. It will be called when the popup about to close.\n */\nexport type PopupHandle = {\n name: string\n close: () => void\n closed: boolean\n onclosed?: () => void\n}\n\n/*\n * popup handling\n *\n * popup은 overlay의 특별한 형태이다.\n * popup은 open될 때, viewpart를 append 하며, close 될 때 viewpart를 remove 한다.\n * - name: '$popup-${popupSequence}'\n * - position: VIEWPART_POSITION_HEADERBAR\n * - hovering: 'center' | 'next' | 'edge'\n */\nvar popupSequence = 0\n\n/**\n * default openPopup implementation for operato application environment\n *\n * @param {*} template html template to be rendered inside the popup\n * @param {PopupOptions} options\n * @returns popup handle object. This object is used to close the popup.\n */\nfunction defaultOpenPopup(template: TemplateResult, options: PopupOptions = {}): PopupHandle {\n const { title, size = 'large', closable = false, escapable = false, help, hovering, backdrop } = options\n const name = `$popup-${popupSequence++}`\n\n render(\n html`\n <ox-floating-overlay\n id=${name}\n name=${name}\n .backdrop=${backdrop}\n direction=\"down\"\n .hovering=${hovering}\n .title=${title || ''}\n .help=${help}\n .size=${size}\n .closable=${closable}\n .historical=${false}\n >${template}</ox-floating-overlay\n >\n `,\n document.body\n )\n\n requestAnimationFrame(() => {\n dispatchEvent(new Event('resize'))\n })\n\n const popupHandle = {\n name,\n close: () => {\n const popup = document.body.querySelector(`#${name}`) as OxFloatingOverlay\n popup?.close()\n popupHandle.onclosed && popupHandle.onclosed()\n },\n closed: false\n } as PopupHandle\n\n return popupHandle\n}\n\nvar openPopupImpl: (template: TemplateResult, options: PopupOptions) => PopupHandle = defaultOpenPopup\n\n/**\n * replace default openPopup implementation\n *\n * @param {(template: TemplateResult, options: PopupOptions) => PopupHandle} implementation\n */\nexport function setOpenPopupImplementation(\n implementation: (template: TemplateResult, options: PopupOptions) => PopupHandle\n) {\n openPopupImpl = implementation\n}\n\n/**\n * open popup out of operato application environment\n *\n * @param {*} template html template to be rendered inside the popup\n * @param {PopupOptions} options\n * @returns popup handle object. This object is used to close the popup.\n */\nexport const openPopup = (template: TemplateResult, options: PopupOptions = {}): PopupHandle => {\n return openPopupImpl(template, options)\n}\n\n/**\n * open popup out of operato application environment\n *\n * @param {*} template html template to be rendered inside the popup\n * @param {PopupOptions} options\n * @returns popup handle object. This object is used to close the popup.\n */\nexport const closePopup = (element: HTMLElement): void => {\n element.dispatchEvent(\n new CustomEvent('close-overlay', {\n bubbles: true,\n composed: true\n })\n )\n}\n"]}
1
+ {"version":3,"file":"open-popup.js","sourceRoot":"","sources":["../../src/open-popup.ts"],"names":[],"mappings":"AAAA,OAAO,0BAA0B,CAAA;AAEjC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAkB,MAAM,KAAK,CAAA;AA4ClD;;;;;;;;GAQG;AACH,IAAI,aAAa,GAAG,CAAC,CAAA;AAErB;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,QAAwB,EAAE,UAAwB,EAAE;IAC5E,MAAM,EACJ,KAAK,EACL,IAAI,GAAG,OAAO,EACd,QAAQ,GAAG,KAAK,EAChB,SAAS,GAAG,KAAK,EACjB,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,OAAO,GAAG,KAAK,EAChB,GAAG,OAAO,CAAA;IACX,MAAM,IAAI,GAAG,UAAU,aAAa,EAAE,EAAE,CAAA;IAExC,MAAM,CACJ,IAAI,CAAA;;aAEK,IAAI;eACF,IAAI;oBACC,QAAQ;;oBAER,QAAQ;iBACX,KAAK,IAAI,EAAE;gBACZ,IAAI;gBACJ,IAAI;oBACA,QAAQ;sBACN,KAAK;mBACR,OAAO;WACf,QAAQ;;KAEd,EACD,QAAQ,CAAC,IAAI,CACd,CAAA;IAED,qBAAqB,CAAC,GAAG,EAAE;QACzB,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,MAAM,WAAW,GAAG;QAClB,IAAI;QACJ,KAAK,EAAE,GAAG,EAAE;YACV,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,EAAE,CAAsB,CAAA;YAC1E,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,EAAE,CAAA;YACd,WAAW,CAAC,QAAQ,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAA;QAChD,CAAC;QACD,MAAM,EAAE,KAAK;KACC,CAAA;IAEhB,OAAO,WAAW,CAAA;AACpB,CAAC;AAED,IAAI,aAAa,GAAqE,gBAAgB,CAAA;AAEtG;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACxC,cAAgF;IAEhF,aAAa,GAAG,cAAc,CAAA;AAChC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,QAAwB,EAAE,UAAwB,EAAE,EAAe,EAAE;IAC7F,OAAO,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;AACzC,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAoB,EAAQ,EAAE;IACvD,OAAO,CAAC,aAAa,CACnB,IAAI,WAAW,CAAC,eAAe,EAAE;QAC/B,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI;KACf,CAAC,CACH,CAAA;AACH,CAAC,CAAA","sourcesContent":["import './ox-floating-overlay.js'\n\nimport { html, render, TemplateResult } from 'lit'\n\nimport { OxFloatingOverlay } from './ox-floating-overlay.js'\n\n/**\n * Options for popup\n *\n * @typedef {Object} PopupOptions\n * @property {String} [title] - popup title\n * @property {'center' | 'next' | 'edge'} [hovering] - hovering position (default: 'center'). 'edge' : edge of the HEADERBAR, 'next' : next of the clicked position.\n * @property {'large' | 'medium' | small'} [size] - popup size\n * @property {Boolean} [closable] - set whether the close 'X' button is shown on top-right most position (default true)\n * @property {Boolean} [escapable] - set whether the close popup with 'ESC' key (default true)\n * @property {Boolean} [backdrop] - set whether to do background masking around the pop-up. If true, it becomes modal (default true)\n * @property {Boolean} [movable] - set whether to be able to movable by the gesture dragging on header once the hovering option is 'center'\n * @property {String} [help] - inline help link\n */\nexport type PopupOptions = {\n title?: string\n hovering?: 'center' | 'next' | 'edge'\n size?: 'large' | 'medium' | 'small'\n closable?: boolean\n escapable?: boolean\n backdrop?: boolean\n movable?: boolean\n help?: string\n}\n\n/**\n * Popup handle object that will be returned openPopup\n *\n * @typedef {Object} PopupHandle\n * @property {String} [name] - popup instance name\n * @property {Function} [close] - call this function to close the popup.\n * @property {Boolean} [closed] - state telling whether the popup is closed or not.\n * @property {Function} [onclosed] - set callback function on close. It will be called when the popup about to close.\n */\nexport type PopupHandle = {\n name: string\n close: () => void\n closed: boolean\n onclosed?: () => void\n}\n\n/*\n * popup handling\n *\n * popup은 overlay의 특별한 형태이다.\n * popup은 open될 때, viewpart를 append 하며, close 될 때 viewpart를 remove 한다.\n * - name: '$popup-${popupSequence}'\n * - position: VIEWPART_POSITION_HEADERBAR\n * - hovering: 'center' | 'next' | 'edge'\n */\nvar popupSequence = 0\n\n/**\n * default openPopup implementation for operato application environment\n *\n * @param {*} template html template to be rendered inside the popup\n * @param {PopupOptions} options\n * @returns popup handle object. This object is used to close the popup.\n */\nfunction defaultOpenPopup(template: TemplateResult, options: PopupOptions = {}): PopupHandle {\n const {\n title,\n size = 'large',\n closable = false,\n escapable = false,\n help,\n hovering,\n backdrop,\n movable = false\n } = options\n const name = `$popup-${popupSequence++}`\n\n render(\n html`\n <ox-floating-overlay\n id=${name}\n name=${name}\n .backdrop=${backdrop}\n direction=\"down\"\n .hovering=${hovering}\n .title=${title || ''}\n .help=${help}\n .size=${size}\n .closable=${closable}\n .historical=${false}\n .movable=${movable}\n >${template}</ox-floating-overlay\n >\n `,\n document.body\n )\n\n requestAnimationFrame(() => {\n dispatchEvent(new Event('resize'))\n })\n\n const popupHandle = {\n name,\n close: () => {\n const popup = document.body.querySelector(`#${name}`) as OxFloatingOverlay\n popup?.close()\n popupHandle.onclosed && popupHandle.onclosed()\n },\n closed: false\n } as PopupHandle\n\n return popupHandle\n}\n\nvar openPopupImpl: (template: TemplateResult, options: PopupOptions) => PopupHandle = defaultOpenPopup\n\n/**\n * replace default openPopup implementation\n *\n * @param {(template: TemplateResult, options: PopupOptions) => PopupHandle} implementation\n */\nexport function setOpenPopupImplementation(\n implementation: (template: TemplateResult, options: PopupOptions) => PopupHandle\n) {\n openPopupImpl = implementation\n}\n\n/**\n * open popup out of operato application environment\n *\n * @param {*} template html template to be rendered inside the popup\n * @param {PopupOptions} options\n * @returns popup handle object. This object is used to close the popup.\n */\nexport const openPopup = (template: TemplateResult, options: PopupOptions = {}): PopupHandle => {\n return openPopupImpl(template, options)\n}\n\n/**\n * open popup out of operato application environment\n *\n * @param {*} template html template to be rendered inside the popup\n * @param {PopupOptions} options\n * @returns popup handle object. This object is used to close the popup.\n */\nexport const closePopup = (element: HTMLElement): void => {\n element.dispatchEvent(\n new CustomEvent('close-overlay', {\n bubbles: true,\n composed: true\n })\n )\n}\n"]}
@@ -12,10 +12,19 @@ export declare class OxFloatingOverlay extends LitElement {
12
12
  templateProperties: any;
13
13
  help: any;
14
14
  historical?: boolean;
15
+ movable?: boolean;
16
+ private dragStart?;
17
+ private dragEndHandler;
18
+ private dragMoveHandler;
19
+ overlayed: HTMLDivElement;
15
20
  render(): import("lit-html").TemplateResult<1>;
16
21
  updated(changes: PropertyValues<this>): void;
17
22
  firstUpdated(): void;
23
+ connectedCallback(): void;
18
24
  disconnectedCallback(): void;
25
+ onDragStart(e: Event): false | undefined;
26
+ onDragMove(e: Event): boolean;
27
+ onDragEnd(e: Event): void;
19
28
  close(): void;
20
29
  onClose(escape?: boolean): true | undefined;
21
30
  }
@@ -1,8 +1,29 @@
1
1
  import { __decorate } from "tslib";
2
2
  import '@material/mwc-icon';
3
3
  import { css, html, LitElement } from 'lit';
4
- import { customElement, property } from 'lit/decorators.js';
4
+ import { customElement, property, query } from 'lit/decorators.js';
5
+ import { ifDefined } from 'lit/directives/if-defined.js';
5
6
  import { ScrollbarStyles } from '@operato/styles';
7
+ import { isHandheldDevice } from '@operato/utils';
8
+ function getPoint(e) {
9
+ var _a;
10
+ if (e.button == 0) {
11
+ return {
12
+ x: e.clientX,
13
+ y: e.clientY
14
+ };
15
+ }
16
+ else if (((_a = e.touches) === null || _a === void 0 ? void 0 : _a.length) == 1) {
17
+ const touch = e.touches[0];
18
+ return {
19
+ x: touch.clientX,
20
+ y: touch.clientY
21
+ };
22
+ }
23
+ else {
24
+ return;
25
+ }
26
+ }
6
27
  let OxFloatingOverlay = class OxFloatingOverlay extends LitElement {
7
28
  constructor() {
8
29
  super(...arguments);
@@ -10,9 +31,12 @@ let OxFloatingOverlay = class OxFloatingOverlay extends LitElement {
10
31
  this.title = '';
11
32
  this.closable = false;
12
33
  this.historical = false;
34
+ this.movable = false;
35
+ this.dragEndHandler = this.onDragEnd.bind(this);
36
+ this.dragMoveHandler = this.onDragMove.bind(this);
13
37
  }
14
38
  render() {
15
- var direction = this.hovering == 'center' ? false : this.direction;
39
+ var direction = this.hovering == 'center' ? undefined : this.direction;
16
40
  return html `
17
41
  ${Boolean(this.backdrop)
18
42
  ? html ` <div id="backdrop" ?hidden=${!this.backdrop} @click=${() => this.onClose(true)}></div> `
@@ -21,7 +45,7 @@ let OxFloatingOverlay = class OxFloatingOverlay extends LitElement {
21
45
  <div
22
46
  overlayed
23
47
  hovering=${this.hovering || 'center'}
24
- direction=${direction}
48
+ direction=${ifDefined(direction)}
25
49
  size=${this.size || 'medium'}
26
50
  @close-overlay=${(e) => {
27
51
  e.stopPropagation();
@@ -37,8 +61,20 @@ let OxFloatingOverlay = class OxFloatingOverlay extends LitElement {
37
61
  e.target.setAttribute('settled', '');
38
62
  }}
39
63
  >
40
- <div header>
41
- <mwc-icon @click=${() => this.onClose()} ?closable=${this.closable} historyback>arrow_back</mwc-icon>
64
+ <div
65
+ header
66
+ @mousedown=${this.onDragStart.bind(this)}
67
+ @touchstart=${this.onDragStart.bind(this)}
68
+ draggable="false"
69
+ >
70
+ <mwc-icon
71
+ @click=${() => this.onClose()}
72
+ @touchend=${() => this.onClose()}
73
+ ?closable=${this.closable}
74
+ historyback
75
+ >arrow_back</mwc-icon
76
+ >
77
+ ${this.movable ? html `<mwc-icon>drag_indicator</mwc-icon>` : html ``}
42
78
  <slot name="header">
43
79
  ${this.title || this.closable
44
80
  ? html `
@@ -50,7 +86,9 @@ let OxFloatingOverlay = class OxFloatingOverlay extends LitElement {
50
86
  `
51
87
  : html ``}</slot
52
88
  >
53
- <mwc-icon @click=${() => this.onClose()} ?closable=${this.closable} close>close</mwc-icon>
89
+ <mwc-icon @click=${() => this.onClose()} @touchend=${() => this.onClose()} ?closable=${this.closable} close
90
+ >close</mwc-icon
91
+ >
54
92
  </div>
55
93
 
56
94
  <div content>
@@ -74,18 +112,77 @@ let OxFloatingOverlay = class OxFloatingOverlay extends LitElement {
74
112
  requestAnimationFrame(() => {
75
113
  var _a;
76
114
  /* transition(animation) 효과를 위해 'opened' 속성을 변화시킨다. */
77
- (_a = this.renderRoot.querySelector('[overlayed]')) === null || _a === void 0 ? void 0 : _a.setAttribute('opened', 'true');
115
+ (_a = this.overlayed) === null || _a === void 0 ? void 0 : _a.setAttribute('opened', 'true');
78
116
  });
79
117
  }
118
+ connectedCallback() {
119
+ super.connectedCallback();
120
+ this.movable = this.movable && !isHandheldDevice();
121
+ if (this.movable) {
122
+ document.addEventListener('mouseup', this.dragEndHandler);
123
+ document.addEventListener('touchend', this.dragEndHandler);
124
+ document.addEventListener('touchcancel', this.dragEndHandler);
125
+ document.addEventListener('mousemove', this.dragMoveHandler);
126
+ document.addEventListener('touchmove', this.dragMoveHandler);
127
+ }
128
+ }
80
129
  disconnectedCallback() {
81
130
  document.dispatchEvent(new CustomEvent('overlay-closed', {
82
131
  detail: this.name
83
132
  }));
133
+ if (this.movable) {
134
+ document.removeEventListener('mouseup', this.dragEndHandler);
135
+ document.removeEventListener('touchend', this.dragEndHandler);
136
+ document.removeEventListener('touchcancel', this.dragEndHandler);
137
+ document.removeEventListener('mousemove', this.dragMoveHandler);
138
+ document.removeEventListener('touchmove', this.dragMoveHandler);
139
+ }
84
140
  super.disconnectedCallback();
85
141
  }
142
+ onDragStart(e) {
143
+ if (!this.movable) {
144
+ return;
145
+ }
146
+ const point = getPoint(e);
147
+ if (point) {
148
+ this.dragStart = point;
149
+ e.stopPropagation();
150
+ return false;
151
+ }
152
+ }
153
+ onDragMove(e) {
154
+ if (!this.movable || !this.dragStart) {
155
+ return false;
156
+ }
157
+ const point = getPoint(e);
158
+ if (!point) {
159
+ return false;
160
+ }
161
+ e.stopPropagation();
162
+ e.preventDefault();
163
+ const dragStart = point;
164
+ var { x, y } = point;
165
+ x -= this.dragStart.x;
166
+ y -= this.dragStart.y;
167
+ this.dragStart = dragStart;
168
+ const overlayed = this.overlayed;
169
+ var boundingRect = overlayed.getBoundingClientRect();
170
+ overlayed.style.left =
171
+ Math.min(document.body.offsetWidth - 40, Math.max(40 - overlayed.offsetWidth, boundingRect.left + x)) + 'px';
172
+ overlayed.style.top = Math.min(document.body.offsetHeight - 40, Math.max(0, boundingRect.top + y)) + 'px';
173
+ overlayed.style.transform = 'initial';
174
+ return false;
175
+ }
176
+ onDragEnd(e) {
177
+ if (this.movable && this.dragStart) {
178
+ e.stopPropagation();
179
+ e.preventDefault();
180
+ delete this.dragStart;
181
+ }
182
+ }
86
183
  close() {
87
184
  var _a;
88
- (_a = this.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(this);
185
+ (_a = this.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(this);
89
186
  }
90
187
  onClose(escape) {
91
188
  /* 현재 overlay state를 확인해서, 자신이 포함하고 있는 템플릿인 경우에 history.back() 한다. */
@@ -138,7 +235,6 @@ OxFloatingOverlay.styles = [
138
235
  flex-direction: column;
139
236
  overflow: hidden;
140
237
  background: transparent;
141
- pointer-events: none;
142
238
  }
143
239
 
144
240
  [overlayed][hovering='center'] {
@@ -181,7 +277,7 @@ OxFloatingOverlay.styles = [
181
277
  [content] {
182
278
  flex: 1;
183
279
 
184
- overflow: hidden;
280
+ overflow: auto;
185
281
  }
186
282
 
187
283
  ::slotted(*) {
@@ -191,7 +287,7 @@ OxFloatingOverlay.styles = [
191
287
 
192
288
  [hovering='center'] [content] ::slotted(*) {
193
289
  width: 100%;
194
- height: 100%;
290
+ min-height: 100%;
195
291
  }
196
292
  [direction='up'],
197
293
  [direction='down'] {
@@ -342,6 +438,12 @@ __decorate([
342
438
  __decorate([
343
439
  property({ type: Boolean })
344
440
  ], OxFloatingOverlay.prototype, "historical", void 0);
441
+ __decorate([
442
+ property({ type: Boolean })
443
+ ], OxFloatingOverlay.prototype, "movable", void 0);
444
+ __decorate([
445
+ query('[overlayed]')
446
+ ], OxFloatingOverlay.prototype, "overlayed", void 0);
345
447
  OxFloatingOverlay = __decorate([
346
448
  customElement('ox-floating-overlay')
347
449
  ], OxFloatingOverlay);
@@ -1 +1 @@
1
- {"version":3,"file":"ox-floating-overlay.js","sourceRoot":"","sources":["../../src/ox-floating-overlay.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/mwc-icon'\n\nimport { css, html, LitElement, PropertyValues } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport { ScrollbarStyles } from '@operato/styles'\n\n@customElement('ox-floating-overlay')\nexport class OxFloatingOverlay extends LitElement {\n static styles = [\n ScrollbarStyles,\n css`\n /* for layout style */\n :host {\n position: relative;\n z-index: 1;\n }\n\n :host([hovering='edge']) {\n /* edge hovering 인 경우에는 상위 relative position 크기와 위치를 반영한다. */\n position: initial;\n }\n\n #backdrop {\n position: fixed;\n left: 0;\n top: 0;\n\n width: 100vw;\n height: 100vh;\n\n background-color: var(--overlay-background-color);\n }\n\n [overlayed] {\n position: absolute;\n\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background: transparent;\n pointer-events: none;\n }\n\n [overlayed][hovering='center'] {\n position: fixed;\n\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n\n opacity: 0;\n }\n\n [overlayed][hovering='center'][opened] {\n opacity: 1;\n transition: opacity 0.3s ease-in;\n }\n\n [hovering='center'] {\n width: var(--overlay-center-normal-width, 60%);\n height: var(--overlay-center-normal-height, 60%);\n }\n\n [hovering='center'][size='small'] {\n width: var(--overlay-center-small-width, 40%);\n height: var(--overlay-center-small-height, 40%);\n }\n\n [hovering='center'][size='large'] {\n width: var(--overlay-center-large-width, 100%);\n height: var(--overlay-center-large-height, 100%);\n }\n\n [header] {\n --help-icon-color: #fff;\n --help-icon-hover-color: #fff;\n\n pointer-events: initial;\n }\n\n [content] {\n flex: 1;\n\n overflow: hidden;\n }\n\n ::slotted(*) {\n box-sizing: border-box;\n pointer-events: initial;\n }\n\n [hovering='center'] [content] ::slotted(*) {\n width: 100%;\n height: 100%;\n }\n [direction='up'],\n [direction='down'] {\n width: 100%;\n\n max-height: 0;\n transition: max-height 0.7s ease-in;\n }\n [direction='up'] {\n bottom: 0;\n }\n [direction='down'] {\n top: 0;\n }\n\n [direction='up'][opened],\n [direction='down'][opened] {\n max-height: 100vh;\n }\n\n [settled][direction='down'] [content],\n [settled][direction='up'] [content] {\n overflow-y: auto;\n }\n\n [direction='left'],\n [direction='right'] {\n height: 100%;\n\n max-width: 0;\n transition: max-width 0.5s ease-in;\n }\n [direction='left'] {\n right: 0;\n }\n [direction='right'] {\n left: 0;\n }\n\n [direction='left'][opened],\n [direction='right'][opened] {\n max-width: 100vw;\n }\n\n [settled][direction='left'] [content],\n [settled][direction='right'] [content] {\n overflow-x: auto;\n }\n\n @media screen and (max-width: 460px) {\n [direction='up'],\n [direction='down'] {\n max-height: 100vh;\n }\n\n [direction='left'],\n [direction='right'] {\n max-width: 100vw;\n }\n }\n `,\n css`\n /* for header style */\n [header] {\n display: flex;\n flex-direction: row;\n align-items: center;\n\n background-color: var(--overlay-header-background-color);\n color: var(--overlay-header-color);\n }\n\n slot[name='header'] {\n flex: 1;\n\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n }\n\n [name='header']::slotted(*) {\n margin: 0 auto;\n }\n\n [name='header'] > h1 {\n text-transform: capitalize;\n font: var(--overlay-header-font);\n }\n\n [historyback] {\n margin-left: 10px;\n margin-right: auto;\n }\n\n [close] {\n margin-left: auto;\n margin-right: 10px;\n }\n\n [historyback],\n [close] {\n display: none;\n }\n\n [closable][close] {\n display: block;\n }\n\n @media screen and (max-width: 460px) {\n [closable][historyback] {\n display: block;\n }\n\n [closable][close] {\n display: none;\n }\n }\n `\n ]\n\n @property({ type: Boolean }) backdrop?: boolean = false\n @property({ type: String }) direction?: 'up' | 'down' | 'left' | 'right'\n @property({ type: String, reflect: true }) hovering?: 'center' | 'edge' | 'next'\n @property({ type: String }) size?: 'small' | 'medium' | 'large'\n @property({ type: String }) name?: string\n @property({ type: String }) title: string = ''\n @property({ type: Boolean }) closable?: boolean = false\n @property({ type: Object }) templateProperties: any\n @property({ type: Object }) help: any\n @property({ type: Boolean }) historical?: boolean = false\n\n render() {\n var direction = this.hovering == 'center' ? false : this.direction\n\n return html`\n ${Boolean(this.backdrop)\n ? html` <div id=\"backdrop\" ?hidden=${!this.backdrop} @click=${() => this.onClose(true)}></div> `\n : html``}\n\n <div\n overlayed\n hovering=${this.hovering || 'center'}\n direction=${direction}\n size=${this.size || 'medium'}\n @close-overlay=${(e: Event) => {\n e.stopPropagation()\n this.onClose()\n }}\n @transitionstart=${(e: Event) => {\n /* to hide scrollbar during transition */\n ;(e.target as HTMLElement).removeAttribute('settled')\n }}\n @transitionend=${(e: Event) => {\n ;(e.target as HTMLElement).setAttribute('settled', '')\n }}\n >\n <div header>\n <mwc-icon @click=${() => this.onClose()} ?closable=${this.closable} historyback>arrow_back</mwc-icon>\n <slot name=\"header\">\n ${this.title || this.closable\n ? html`\n <h1>\n ${this.title || ''}&nbsp;${this.help\n ? html` <ox-help-icon .topic=${this.help}></ox-help-icon>`\n : html``}\n </h1>\n `\n : html``}</slot\n >\n <mwc-icon @click=${() => this.onClose()} ?closable=${this.closable} close>close</mwc-icon>\n </div>\n\n <div content>\n <slot> </slot>\n </div>\n </div>\n `\n }\n\n updated(changes: PropertyValues<this>) {\n if (changes.has('templateProperties') && this.templateProperties) {\n var template = this.firstElementChild\n if (template) {\n for (let prop in this.templateProperties) {\n //@ts-ignore\n template[prop] = this.templateProperties[prop]\n }\n }\n }\n }\n\n firstUpdated() {\n requestAnimationFrame(() => {\n /* transition(animation) 효과를 위해 'opened' 속성을 변화시킨다. */\n this.renderRoot.querySelector('[overlayed]')?.setAttribute('opened', 'true')\n })\n }\n\n disconnectedCallback() {\n document.dispatchEvent(\n new CustomEvent('overlay-closed', {\n detail: this.name\n })\n )\n\n super.disconnectedCallback()\n }\n\n close() {\n this.parentElement?.removeChild(this)\n }\n\n onClose(escape?: boolean) {\n /* 현재 overlay state를 확인해서, 자신이 포함하고 있는 템플릿인 경우에 history.back() 한다. */\n\n if (this.historical) {\n var state = history.state\n var overlay = (state || {}).overlay\n\n if (!overlay || overlay.name !== this.name) {\n return\n }\n\n /* Backdrop click 경우는 escape 시도라고 정의한다. overlay 속성이 escapable이 아닌 경우에는 동작하지 않는다. */\n if (escape && !overlay.escapable) {\n return true\n }\n\n history.back()\n } else {\n this.close()\n }\n }\n}\n"]}
1
+ {"version":3,"file":"ox-floating-overlay.js","sourceRoot":"","sources":["../../src/ox-floating-overlay.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/mwc-icon'\n\nimport { css, html, LitElement, PropertyValues } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\nimport { ScrollbarStyles } from '@operato/styles'\nimport { isHandheldDevice } from '@operato/utils'\n\nfunction getPoint(e: Event): { x: number; y: number } | undefined {\n if ((e as MouseEvent).button == 0) {\n return {\n x: (e as MouseEvent).clientX,\n y: (e as MouseEvent).clientY\n }\n } else if ((e as TouchEvent).touches?.length == 1) {\n const touch = (e as TouchEvent).touches[0]\n return {\n x: touch.clientX,\n y: touch.clientY\n }\n } else {\n return\n }\n}\n\n@customElement('ox-floating-overlay')\nexport class OxFloatingOverlay extends LitElement {\n static styles = [\n ScrollbarStyles,\n css`\n /* for layout style */\n :host {\n position: relative;\n z-index: 1;\n }\n\n :host([hovering='edge']) {\n /* edge hovering 인 경우에는 상위 relative position 크기와 위치를 반영한다. */\n position: initial;\n }\n\n #backdrop {\n position: fixed;\n left: 0;\n top: 0;\n\n width: 100vw;\n height: 100vh;\n\n background-color: var(--overlay-background-color);\n }\n\n [overlayed] {\n position: absolute;\n\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background: transparent;\n }\n\n [overlayed][hovering='center'] {\n position: fixed;\n\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n\n opacity: 0;\n }\n\n [overlayed][hovering='center'][opened] {\n opacity: 1;\n transition: opacity 0.3s ease-in;\n }\n\n [hovering='center'] {\n width: var(--overlay-center-normal-width, 60%);\n height: var(--overlay-center-normal-height, 60%);\n }\n\n [hovering='center'][size='small'] {\n width: var(--overlay-center-small-width, 40%);\n height: var(--overlay-center-small-height, 40%);\n }\n\n [hovering='center'][size='large'] {\n width: var(--overlay-center-large-width, 100%);\n height: var(--overlay-center-large-height, 100%);\n }\n\n [header] {\n --help-icon-color: #fff;\n --help-icon-hover-color: #fff;\n\n pointer-events: initial;\n }\n\n [content] {\n flex: 1;\n\n overflow: auto;\n }\n\n ::slotted(*) {\n box-sizing: border-box;\n pointer-events: initial;\n }\n\n [hovering='center'] [content] ::slotted(*) {\n width: 100%;\n min-height: 100%;\n }\n [direction='up'],\n [direction='down'] {\n width: 100%;\n\n max-height: 0;\n transition: max-height 0.7s ease-in;\n }\n [direction='up'] {\n bottom: 0;\n }\n [direction='down'] {\n top: 0;\n }\n\n [direction='up'][opened],\n [direction='down'][opened] {\n max-height: 100vh;\n }\n\n [settled][direction='down'] [content],\n [settled][direction='up'] [content] {\n overflow-y: auto;\n }\n\n [direction='left'],\n [direction='right'] {\n height: 100%;\n\n max-width: 0;\n transition: max-width 0.5s ease-in;\n }\n [direction='left'] {\n right: 0;\n }\n [direction='right'] {\n left: 0;\n }\n\n [direction='left'][opened],\n [direction='right'][opened] {\n max-width: 100vw;\n }\n\n [settled][direction='left'] [content],\n [settled][direction='right'] [content] {\n overflow-x: auto;\n }\n\n @media screen and (max-width: 460px) {\n [direction='up'],\n [direction='down'] {\n max-height: 100vh;\n }\n\n [direction='left'],\n [direction='right'] {\n max-width: 100vw;\n }\n }\n `,\n css`\n /* for header style */\n [header] {\n display: flex;\n flex-direction: row;\n align-items: center;\n\n background-color: var(--overlay-header-background-color);\n color: var(--overlay-header-color);\n }\n\n slot[name='header'] {\n flex: 1;\n\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n }\n\n [name='header']::slotted(*) {\n margin: 0 auto;\n }\n\n [name='header'] > h1 {\n text-transform: capitalize;\n font: var(--overlay-header-font);\n }\n\n [historyback] {\n margin-left: 10px;\n margin-right: auto;\n }\n\n [close] {\n margin-left: auto;\n margin-right: 10px;\n }\n\n [historyback],\n [close] {\n display: none;\n }\n\n [closable][close] {\n display: block;\n }\n\n @media screen and (max-width: 460px) {\n [closable][historyback] {\n display: block;\n }\n\n [closable][close] {\n display: none;\n }\n }\n `\n ]\n\n @property({ type: Boolean }) backdrop?: boolean = false\n @property({ type: String }) direction?: 'up' | 'down' | 'left' | 'right'\n @property({ type: String, reflect: true }) hovering?: 'center' | 'edge' | 'next'\n @property({ type: String }) size?: 'small' | 'medium' | 'large'\n @property({ type: String }) name?: string\n @property({ type: String }) title: string = ''\n @property({ type: Boolean }) closable?: boolean = false\n @property({ type: Object }) templateProperties: any\n @property({ type: Object }) help: any\n @property({ type: Boolean }) historical?: boolean = false\n @property({ type: Boolean }) movable?: boolean = false\n\n private dragStart?: { x: number; y: number }\n private dragEndHandler = this.onDragEnd.bind(this) as EventListener\n private dragMoveHandler = this.onDragMove.bind(this) as EventListener\n\n @query('[overlayed]') overlayed!: HTMLDivElement\n\n render() {\n var direction = this.hovering == 'center' ? undefined : this.direction\n\n return html`\n ${Boolean(this.backdrop)\n ? html` <div id=\"backdrop\" ?hidden=${!this.backdrop} @click=${() => this.onClose(true)}></div> `\n : html``}\n\n <div\n overlayed\n hovering=${this.hovering || 'center'}\n direction=${ifDefined(direction)}\n size=${this.size || 'medium'}\n @close-overlay=${(e: Event) => {\n e.stopPropagation()\n this.onClose()\n }}\n @transitionstart=${(e: Event) => {\n /* to hide scrollbar during transition */\n ;(e.target as HTMLElement).removeAttribute('settled')\n }}\n @transitionend=${(e: Event) => {\n ;(e.target as HTMLElement).setAttribute('settled', '')\n }}\n >\n <div\n header\n @mousedown=${this.onDragStart.bind(this)}\n @touchstart=${this.onDragStart.bind(this)}\n draggable=\"false\"\n >\n <mwc-icon\n @click=${() => this.onClose()}\n @touchend=${() => this.onClose()}\n ?closable=${this.closable}\n historyback\n >arrow_back</mwc-icon\n >\n ${this.movable ? html`<mwc-icon>drag_indicator</mwc-icon>` : html``}\n <slot name=\"header\">\n ${this.title || this.closable\n ? html`\n <h1>\n ${this.title || ''}&nbsp;${this.help\n ? html` <ox-help-icon .topic=${this.help}></ox-help-icon>`\n : html``}\n </h1>\n `\n : html``}</slot\n >\n <mwc-icon @click=${() => this.onClose()} @touchend=${() => this.onClose()} ?closable=${this.closable} close\n >close</mwc-icon\n >\n </div>\n\n <div content>\n <slot> </slot>\n </div>\n </div>\n `\n }\n\n updated(changes: PropertyValues<this>) {\n if (changes.has('templateProperties') && this.templateProperties) {\n var template = this.firstElementChild\n if (template) {\n for (let prop in this.templateProperties) {\n //@ts-ignore\n template[prop] = this.templateProperties[prop]\n }\n }\n }\n }\n\n firstUpdated() {\n requestAnimationFrame(() => {\n /* transition(animation) 효과를 위해 'opened' 속성을 변화시킨다. */\n this.overlayed?.setAttribute('opened', 'true')\n })\n }\n\n connectedCallback(): void {\n super.connectedCallback()\n\n this.movable = this.movable && !isHandheldDevice()\n\n if (this.movable) {\n document.addEventListener('mouseup', this.dragEndHandler)\n document.addEventListener('touchend', this.dragEndHandler)\n document.addEventListener('touchcancel', this.dragEndHandler)\n document.addEventListener('mousemove', this.dragMoveHandler)\n document.addEventListener('touchmove', this.dragMoveHandler)\n }\n }\n\n disconnectedCallback() {\n document.dispatchEvent(\n new CustomEvent('overlay-closed', {\n detail: this.name\n })\n )\n\n if (this.movable) {\n document.removeEventListener('mouseup', this.dragEndHandler!)\n document.removeEventListener('touchend', this.dragEndHandler!)\n document.removeEventListener('touchcancel', this.dragEndHandler!)\n document.removeEventListener('mousemove', this.dragMoveHandler!)\n document.removeEventListener('touchmove', this.dragMoveHandler!)\n }\n\n super.disconnectedCallback()\n }\n\n onDragStart(e: Event) {\n if (!this.movable) {\n return\n }\n\n const point = getPoint(e)\n\n if (point) {\n this.dragStart = point\n e.stopPropagation()\n return false\n }\n }\n\n onDragMove(e: Event) {\n if (!this.movable || !this.dragStart) {\n return false\n }\n\n const point = getPoint(e)\n\n if (!point) {\n return false\n }\n\n e.stopPropagation()\n e.preventDefault()\n\n const dragStart = point\n var { x, y } = point\n\n x -= this.dragStart.x\n y -= this.dragStart.y\n\n this.dragStart = dragStart\n\n const overlayed = this.overlayed\n\n var boundingRect = overlayed.getBoundingClientRect()\n\n overlayed.style.left =\n Math.min(document.body.offsetWidth - 40, Math.max(40 - overlayed.offsetWidth, boundingRect.left + x)) + 'px'\n overlayed.style.top = Math.min(document.body.offsetHeight - 40, Math.max(0, boundingRect.top + y)) + 'px'\n\n overlayed.style.transform = 'initial'\n\n return false\n }\n\n onDragEnd(e: Event) {\n if (this.movable && this.dragStart) {\n e.stopPropagation()\n e.preventDefault()\n\n delete this.dragStart\n }\n }\n\n close() {\n this.parentNode?.removeChild(this)\n }\n\n onClose(escape?: boolean) {\n /* 현재 overlay state를 확인해서, 자신이 포함하고 있는 템플릿인 경우에 history.back() 한다. */\n\n if (this.historical) {\n var state = history.state\n var overlay = (state || {}).overlay\n\n if (!overlay || overlay.name !== this.name) {\n return\n }\n\n /* Backdrop click 경우는 escape 시도라고 정의한다. overlay 속성이 escapable이 아닌 경우에는 동작하지 않는다. */\n if (escape && !overlay.escapable) {\n return true\n }\n\n history.back()\n } else {\n this.close()\n }\n }\n}\n"]}
@@ -27,6 +27,8 @@ export declare class OxPopupList extends OxPopup {
27
27
  top?: number;
28
28
  right?: number;
29
29
  bottom?: number;
30
+ width?: string;
31
+ height?: string;
30
32
  silent?: boolean;
31
33
  }): void;
32
34
  close(): void;
@@ -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 '@material/mwc-icon'\n\nimport { css, html, PropertyValues } from 'lit'\nimport { render } from 'lit-html'\nimport { customElement, property, query, 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 :host([nowrap]) ::slotted([option]) {\n white-space: nowrap;\n }\n\n ::slotted([option]) {\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 outline: none;\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 ::slotted([hidden]) {\n display: none;\n }\n\n [search] {\n flex: 1;\n\n display: flex;\n position: relative;\n align-items: center;\n padding: 5px 10px;\n\n --mdc-icon-size: 20px;\n }\n\n [search] [type='text'] {\n flex: 1;\n background-color: transparent;\n border: 0;\n padding: 0 0 0 25px;\n outline: none;\n width: 50px;\n }\n\n [search] mwc-icon {\n color: var(--secondary-color);\n }\n\n [search] mwc-icon[search-icon] {\n position: absolute;\n }\n\n [search] mwc-icon[delete-icon] {\n opacity: 0.5;\n --mdc-icon-size: 14px;\n }\n\n [nothing] {\n opacity: 0.5;\n text-align: center;\n }\n `\n ]\n\n @property({ type: Boolean }) multiple: boolean = false\n @property({ type: String, attribute: 'attr-selected' }) attrSelected?: string\n @property({ type: Boolean, attribute: 'with-search' }) withSearch?: string\n @property({ type: String }) value?: string | string[]\n\n @state() activeIndex?: number\n @state() searchKeyword?: string\n @state() nothingToSelect: boolean = false\n\n @query('[search] input') searchInput!: HTMLInputElement\n\n render() {\n return html`\n <slot name=\"header\"> </slot>\n\n ${this.withSearch\n ? html`\n <label search for=\"search\" @input=${(e: InputEvent) => this._oninputsearch(e)}>\n <mwc-icon search-icon>search</mwc-icon>\n <input\n id=\"search\"\n type=\"text\"\n autocomplete=\"off\"\n @keydown=${(e: KeyboardEvent) => this._onkeydownsearch(e)}\n @change=${(e: InputEvent) => this._onchangesearch(e)}\n />\n <mwc-icon\n @click=${() => {\n this.searchInput.value = ''\n this.searchKeyword = ''\n }}\n delete-icon\n >delete</mwc-icon\n >\n </label>\n `\n : html``}\n\n <slot\n @change=${(e: Event) => {\n e.stopPropagation()\n }}\n >\n </slot>\n ${this.nothingToSelect ? html`<label nothing>nothing to select</label>` : html``}\n `\n }\n\n protected _oninputsearch(e: InputEvent) {\n e.stopPropagation()\n e.preventDefault()\n\n this.searchKeyword = (e.target as HTMLInputElement).value\n }\n\n protected _onchangesearch(e: InputEvent) {\n this.searchKeyword = (e.target as HTMLInputElement).value\n }\n\n protected _onkeydownsearch(e: KeyboardEvent) {\n const keys = ['Esc', 'Escape', 'Up', 'ArrowUp', 'Down', 'ArrowDown']\n if (!keys.includes(e.key)) {\n e.stopPropagation()\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 if (changes.has('searchKeyword')) {\n const attrSelected = this.attrSelected || 'selected'\n this.querySelectorAll(`[option]`).forEach(item => {\n if (!this.searchKeyword || item.textContent?.match(new RegExp(this.searchKeyword, 'i'))) {\n item.removeAttribute('hidden')\n } else {\n item.removeAttribute('selected')\n item.setAttribute('hidden', '')\n }\n })\n this.nothingToSelect = this.querySelectorAll(`[option]:not([hidden])`).length === 0\n }\n\n if (changes.has('value')) {\n const options = Array.from(this.querySelectorAll(':scope > [option]'))\n\n var values = this.value\n if (!(values instanceof Array)) {\n values = [values as string]\n }\n\n options.forEach(option => {\n if (values?.includes((option as HTMLElement).getAttribute('value') || '')) {\n option.setAttribute(this.attrSelected || 'selected', '')\n } else {\n option.removeAttribute(this.attrSelected || 'selected')\n }\n })\n }\n }\n\n public getSelectedLabels(): string | string[] {\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.textContent || '')\n\n return this.multiple ? selected : selected[0]\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 var options = Array.from(this.querySelectorAll('[option]:not([hidden])'))\n if (this.withSearch) {\n options.push(this.renderRoot.querySelector('[search]')!)\n }\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 const attrSelected = this.attrSelected || 'selected'\n\n options.forEach(async (option, index) => {\n if (typeof active === 'number' && index === (active + options.length) % options.length) {\n option.setAttribute('active', '')\n\n if (withSelect && !this.attrSelected) {\n /* being set attribute attrs-selected means, that element should know how to do when event happened. */\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 /* even thought attribute attrs-selected set, ox-popup-list have to unset others. */\n !this.multiple && withSelect && option.removeAttribute(attrSelected)\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 }): OxPopupList {\n const owner = parent || document.body\n const target = document.createElement('ox-popup-list') as OxPopupList\n render(template, target)\n\n target._parent = owner\n\n owner.appendChild(target)\n target.open({ top, left, right, bottom })\n\n return 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 '@material/mwc-icon'\n\nimport { css, html, PropertyValues } from 'lit'\nimport { render } from 'lit-html'\nimport { customElement, property, query, 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 :host([nowrap]) ::slotted([option]) {\n white-space: nowrap;\n }\n\n ::slotted([option]) {\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 outline: none;\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 ::slotted([hidden]) {\n display: none;\n }\n\n [search] {\n flex: 1;\n\n display: flex;\n position: relative;\n align-items: center;\n padding: 5px 10px;\n\n --mdc-icon-size: 20px;\n }\n\n [search] [type='text'] {\n flex: 1;\n background-color: transparent;\n border: 0;\n padding: 0 0 0 25px;\n outline: none;\n width: 50px;\n }\n\n [search] mwc-icon {\n color: var(--secondary-color);\n }\n\n [search] mwc-icon[search-icon] {\n position: absolute;\n }\n\n [search] mwc-icon[delete-icon] {\n opacity: 0.5;\n --mdc-icon-size: 14px;\n }\n\n [nothing] {\n opacity: 0.5;\n text-align: center;\n }\n `\n ]\n\n @property({ type: Boolean }) multiple: boolean = false\n @property({ type: String, attribute: 'attr-selected' }) attrSelected?: string\n @property({ type: Boolean, attribute: 'with-search' }) withSearch?: string\n @property({ type: String }) value?: string | string[]\n\n @state() activeIndex?: number\n @state() searchKeyword?: string\n @state() nothingToSelect: boolean = false\n\n @query('[search] input') searchInput!: HTMLInputElement\n\n render() {\n return html`\n <slot name=\"header\"> </slot>\n\n ${this.withSearch\n ? html`\n <label search for=\"search\" @input=${(e: InputEvent) => this._oninputsearch(e)}>\n <mwc-icon search-icon>search</mwc-icon>\n <input\n id=\"search\"\n type=\"text\"\n autocomplete=\"off\"\n @keydown=${(e: KeyboardEvent) => this._onkeydownsearch(e)}\n @change=${(e: InputEvent) => this._onchangesearch(e)}\n />\n <mwc-icon\n @click=${() => {\n this.searchInput.value = ''\n this.searchKeyword = ''\n }}\n delete-icon\n >delete</mwc-icon\n >\n </label>\n `\n : html``}\n\n <slot\n @change=${(e: Event) => {\n e.stopPropagation()\n }}\n >\n </slot>\n ${this.nothingToSelect ? html`<label nothing>nothing to select</label>` : html``}\n `\n }\n\n protected _oninputsearch(e: InputEvent) {\n e.stopPropagation()\n e.preventDefault()\n\n this.searchKeyword = (e.target as HTMLInputElement).value\n }\n\n protected _onchangesearch(e: InputEvent) {\n this.searchKeyword = (e.target as HTMLInputElement).value\n }\n\n protected _onkeydownsearch(e: KeyboardEvent) {\n const keys = ['Esc', 'Escape', 'Up', 'ArrowUp', 'Down', 'ArrowDown']\n if (!keys.includes(e.key)) {\n e.stopPropagation()\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 if (changes.has('searchKeyword')) {\n const attrSelected = this.attrSelected || 'selected'\n this.querySelectorAll(`[option]`).forEach(item => {\n if (!this.searchKeyword || item.textContent?.match(new RegExp(this.searchKeyword, 'i'))) {\n item.removeAttribute('hidden')\n } else {\n item.removeAttribute('selected')\n item.setAttribute('hidden', '')\n }\n })\n this.nothingToSelect = this.querySelectorAll(`[option]:not([hidden])`).length === 0\n }\n\n if (changes.has('value')) {\n const options = Array.from(this.querySelectorAll(':scope > [option]'))\n\n var values = this.value\n if (!(values instanceof Array)) {\n values = [values as string]\n }\n\n options.forEach(option => {\n if (values?.includes((option as HTMLElement).getAttribute('value') || '')) {\n option.setAttribute(this.attrSelected || 'selected', '')\n } else {\n option.removeAttribute(this.attrSelected || 'selected')\n }\n })\n }\n }\n\n public getSelectedLabels(): string | string[] {\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.textContent || '')\n\n return this.multiple ? selected : selected[0]\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 var options = Array.from(this.querySelectorAll('[option]:not([hidden])'))\n if (this.withSearch) {\n options.push(this.renderRoot.querySelector('[search]')!)\n }\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 const attrSelected = this.attrSelected || 'selected'\n\n options.forEach(async (option, index) => {\n if (typeof active === 'number' && index === (active + options.length) % options.length) {\n option.setAttribute('active', '')\n\n if (withSelect && !this.attrSelected) {\n /* being set attribute attrs-selected means, that element should know how to do when event happened. */\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 /* even thought attribute attrs-selected set, ox-popup-list have to unset others. */\n !this.multiple && withSelect && option.removeAttribute(attrSelected)\n }\n })\n }\n\n override open(params: {\n left?: number\n top?: number\n right?: number\n bottom?: number\n width?: string\n height?: string\n silent?: boolean\n }) {\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 }): OxPopupList {\n const owner = parent || document.body\n const target = document.createElement('ox-popup-list') as OxPopupList\n render(template, target)\n\n target._parent = owner\n\n owner.appendChild(target)\n target.open({ top, left, right, bottom })\n\n return target\n }\n}\n"]}
@@ -92,10 +92,12 @@ let OxPopup = class OxPopup extends LitElement {
92
92
  }
93
93
  open({ left, top, right, bottom, width, height, silent = false }) {
94
94
  if (width) {
95
- this.style.width = width;
95
+ this.style.maxWidth = width;
96
+ this.style.overflowX = 'auto';
96
97
  }
97
98
  if (height) {
98
- this.style.height = height;
99
+ this.style.maxHeight = height;
100
+ this.style.overflowY = 'auto';
99
101
  }
100
102
  if (left === undefined && top === undefined && right === undefined && bottom === undefined) {
101
103
  this.style.left = '50%';
@@ -1 +1 @@
1
- {"version":3,"file":"ox-popup.js","sourceRoot":"","sources":["../../src/ox-popup.ts"],"names":[],"mappings":"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","sourcesContent":["import { css, html, LitElement } from 'lit'\nimport { render } from 'lit-html'\nimport { customElement, state } from 'lit/decorators.js'\n\nimport { ScrollbarStyles } from '@operato/styles'\n\n@customElement('ox-popup')\nexport class OxPopup extends LitElement {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n position: absolute;\n display: none;\n background-color: var(--theme-white-color, #fff);\n z-index: 100;\n padding: 0;\n box-shadow: 2px 3px 10px 5px rgba(0, 0, 0, 0.15);\n box-sizing: border-box;\n min-width: fit-content;\n line-height: initial;\n text-align: initial;\n }\n\n :host([active]) {\n display: block;\n }\n\n :host(*:focus) {\n outline: none;\n }\n `\n ]\n\n @state() _parent?: Element\n\n render() {\n return html` <slot> </slot> `\n }\n\n protected _onfocusout: (e: FocusEvent) => void = function (this: OxPopup, e: FocusEvent) {\n const to = e.relatedTarget as HTMLElement\n\n if (!this.contains(to)) {\n /* 분명히 내 범위가 아닌 엘리먼트로 포커스가 옮겨졌다면, ox-popup은 닫혀야 한다. */\n // @ts-ignore for debug\n !window.POPUP_DEBUG && this.close()\n }\n }.bind(this)\n\n protected _onkeydown: (e: KeyboardEvent) => void = function (this: OxPopup, 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 }.bind(this)\n\n protected _onkeyup: (e: KeyboardEvent) => void = function (this: OxPopup, e: KeyboardEvent) {\n e.stopPropagation()\n }.bind(this)\n\n protected _onmouseup: (e: MouseEvent) => void = function (this: OxPopup, e: MouseEvent) {\n e.stopPropagation()\n }.bind(this)\n\n protected _onmousedown: (e: MouseEvent) => void = function (this: OxPopup, e: MouseEvent) {\n e.stopPropagation()\n }.bind(this)\n\n protected _oncontext: (e: Event) => void = function (this: OxPopup, e: Event) {\n e.stopPropagation()\n }.bind(this)\n\n protected _onclick: (e: MouseEvent) => void = function (this: OxPopup, e: MouseEvent) {\n e.stopPropagation()\n }.bind(this)\n\n protected _onclose: (e: Event) => void = function (this: OxPopup, e: Event) {\n this.close()\n }.bind(this)\n\n protected _oncollapse: (e: Event) => void = function (this: OxPopup, e: Event) {\n e.stopPropagation()\n this.close()\n }.bind(this)\n\n protected _onwindowblur: (e: Event) => void = function (this: OxPopup, e: Event) {\n // @ts-ignore for debug\n !window.POPUP_DEBUG && this.close()\n }.bind(this)\n\n connectedCallback() {\n super.connectedCallback()\n\n this.addEventListener('focusout', this._onfocusout)\n this.addEventListener('keydown', this._onkeydown)\n this.addEventListener('keyup', this._onkeyup)\n this.addEventListener('click', this._onclick)\n this.addEventListener('mouseup', this._onmouseup)\n this.addEventListener('mousedown', this._onmousedown)\n this.addEventListener('context', this._oncontext)\n this.addEventListener('ox-close', this._onclose)\n this.addEventListener('ox-collapse', this._oncollapse)\n\n this.setAttribute('tabindex', '0') // make this element focusable\n this.guaranteeFocus()\n }\n\n /**\n * Configuration for opening ox-popup\n *\n * @typedef {Object} PopupOpenOptions\n * @property {HTMLTemplate} template HTMLTemplate to be displayed inside the popup\n * @property {Number} top The position-top where the pop-up will be displayed\n * @property {Number} left The position-left where the pop-up will be displayed\n * @property {HTMLElement} parent Popup's parent element\n */\n\n /**\n * Open Popup\n *\n * @param {PopupOpenOptions}\n */\n static open({\n template,\n top,\n left,\n right,\n bottom,\n width,\n height,\n parent\n }: {\n template: unknown\n top?: number\n left?: number\n right?: number\n bottom?: number\n width?: string\n height?: string\n parent?: Element | null\n }): OxPopup {\n const owner = parent || document.body\n const target = document.createElement('ox-popup') as OxPopup\n\n render(template, target)\n\n target._parent = owner\n owner.appendChild(target)\n\n target.open({ top, left, right, bottom, width, height })\n\n return target\n }\n\n open({\n left,\n top,\n right,\n bottom,\n width,\n height,\n silent = false\n }: {\n left?: number\n top?: number\n right?: number\n bottom?: number\n width?: string\n height?: string\n silent?: boolean\n }) {\n if (width) {\n this.style.width = width\n }\n if (height) {\n this.style.height = height\n }\n\n if (left === undefined && top === undefined && right === undefined && bottom === undefined) {\n this.style.left = '50%'\n this.style.top = '50%'\n this.style.transform = 'translateX(-50%) translateY(-50%)'\n } else {\n if (left !== undefined) this.style.left = `${left}px`\n if (top !== undefined) this.style.top = `${top}px`\n if (right !== undefined) this.style.right = `${right}px`\n if (bottom !== undefined) this.style.bottom = `${bottom}px`\n }\n\n this.setAttribute('active', '')\n\n !silent && this.guaranteeFocus()\n\n /* When the window is out of focus, all pop-ups should disappear. */\n window.addEventListener('blur', this._onwindowblur)\n }\n\n guaranteeFocus(target?: HTMLElement) {\n const focusible = (target || this).querySelector(\n ':scope > button, :scope > [href], :scope > input, :scope > select, :scope > textarea, :scope > [tabindex]:not([tabindex=\"-1\"])'\n )\n\n if (focusible) {\n ;(focusible as HTMLElement).focus()\n } else {\n this.focus()\n }\n }\n\n close() {\n this.removeAttribute('active')\n\n window.removeEventListener('blur', this._onwindowblur)\n\n if (this._parent) {\n /* this case is when the popup is opened by OxPopup.open(...) */\n this.removeEventListener('focusout', this._onfocusout)\n this.removeEventListener('keydown', this._onkeydown)\n this.removeEventListener('keyup', this._onkeyup)\n this.removeEventListener('click', this._onclick)\n this.removeEventListener('ox-close', this._onclose)\n this.removeEventListener('ox-collapse', this._oncollapse)\n this.removeEventListener('mouseup', this._onmouseup)\n this.removeEventListener('mousedown', this._onmousedown)\n this.removeEventListener('context', this._oncontext)\n\n this._parent.removeChild(this)\n delete this._parent\n }\n }\n}\n"]}
1
+ {"version":3,"file":"ox-popup.js","sourceRoot":"","sources":["../../src/ox-popup.ts"],"names":[],"mappings":"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","sourcesContent":["import { css, html, LitElement } from 'lit'\nimport { render } from 'lit-html'\nimport { customElement, state } from 'lit/decorators.js'\n\nimport { ScrollbarStyles } from '@operato/styles'\n\n@customElement('ox-popup')\nexport class OxPopup extends LitElement {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n position: absolute;\n display: none;\n background-color: var(--theme-white-color, #fff);\n z-index: 100;\n padding: 0;\n box-shadow: 2px 3px 10px 5px rgba(0, 0, 0, 0.15);\n box-sizing: border-box;\n min-width: fit-content;\n line-height: initial;\n text-align: initial;\n }\n\n :host([active]) {\n display: block;\n }\n\n :host(*:focus) {\n outline: none;\n }\n `\n ]\n\n @state() _parent?: Element\n\n render() {\n return html` <slot> </slot> `\n }\n\n protected _onfocusout: (e: FocusEvent) => void = function (this: OxPopup, e: FocusEvent) {\n const to = e.relatedTarget as HTMLElement\n\n if (!this.contains(to)) {\n /* 분명히 내 범위가 아닌 엘리먼트로 포커스가 옮겨졌다면, ox-popup은 닫혀야 한다. */\n // @ts-ignore for debug\n !window.POPUP_DEBUG && this.close()\n }\n }.bind(this)\n\n protected _onkeydown: (e: KeyboardEvent) => void = function (this: OxPopup, 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 }.bind(this)\n\n protected _onkeyup: (e: KeyboardEvent) => void = function (this: OxPopup, e: KeyboardEvent) {\n e.stopPropagation()\n }.bind(this)\n\n protected _onmouseup: (e: MouseEvent) => void = function (this: OxPopup, e: MouseEvent) {\n e.stopPropagation()\n }.bind(this)\n\n protected _onmousedown: (e: MouseEvent) => void = function (this: OxPopup, e: MouseEvent) {\n e.stopPropagation()\n }.bind(this)\n\n protected _oncontext: (e: Event) => void = function (this: OxPopup, e: Event) {\n e.stopPropagation()\n }.bind(this)\n\n protected _onclick: (e: MouseEvent) => void = function (this: OxPopup, e: MouseEvent) {\n e.stopPropagation()\n }.bind(this)\n\n protected _onclose: (e: Event) => void = function (this: OxPopup, e: Event) {\n this.close()\n }.bind(this)\n\n protected _oncollapse: (e: Event) => void = function (this: OxPopup, e: Event) {\n e.stopPropagation()\n this.close()\n }.bind(this)\n\n protected _onwindowblur: (e: Event) => void = function (this: OxPopup, e: Event) {\n // @ts-ignore for debug\n !window.POPUP_DEBUG && this.close()\n }.bind(this)\n\n connectedCallback() {\n super.connectedCallback()\n\n this.addEventListener('focusout', this._onfocusout)\n this.addEventListener('keydown', this._onkeydown)\n this.addEventListener('keyup', this._onkeyup)\n this.addEventListener('click', this._onclick)\n this.addEventListener('mouseup', this._onmouseup)\n this.addEventListener('mousedown', this._onmousedown)\n this.addEventListener('context', this._oncontext)\n this.addEventListener('ox-close', this._onclose)\n this.addEventListener('ox-collapse', this._oncollapse)\n\n this.setAttribute('tabindex', '0') // make this element focusable\n this.guaranteeFocus()\n }\n\n /**\n * Configuration for opening ox-popup\n *\n * @typedef {Object} PopupOpenOptions\n * @property {HTMLTemplate} template HTMLTemplate to be displayed inside the popup\n * @property {Number} top The position-top where the pop-up will be displayed\n * @property {Number} left The position-left where the pop-up will be displayed\n * @property {HTMLElement} parent Popup's parent element\n */\n\n /**\n * Open Popup\n *\n * @param {PopupOpenOptions}\n */\n static open({\n template,\n top,\n left,\n right,\n bottom,\n width,\n height,\n parent\n }: {\n template: unknown\n top?: number\n left?: number\n right?: number\n bottom?: number\n width?: string\n height?: string\n parent?: Element | null\n }): OxPopup {\n const owner = parent || document.body\n const target = document.createElement('ox-popup') as OxPopup\n\n render(template, target)\n\n target._parent = owner\n owner.appendChild(target)\n\n target.open({ top, left, right, bottom, width, height })\n\n return target\n }\n\n open({\n left,\n top,\n right,\n bottom,\n width,\n height,\n silent = false\n }: {\n left?: number\n top?: number\n right?: number\n bottom?: number\n width?: string\n height?: string\n silent?: boolean\n }) {\n if (width) {\n this.style.maxWidth = width\n this.style.overflowX = 'auto'\n }\n\n if (height) {\n this.style.maxHeight = height\n this.style.overflowY = 'auto'\n }\n\n if (left === undefined && top === undefined && right === undefined && bottom === undefined) {\n this.style.left = '50%'\n this.style.top = '50%'\n this.style.transform = 'translateX(-50%) translateY(-50%)'\n } else {\n if (left !== undefined) this.style.left = `${left}px`\n if (top !== undefined) this.style.top = `${top}px`\n if (right !== undefined) this.style.right = `${right}px`\n if (bottom !== undefined) this.style.bottom = `${bottom}px`\n }\n\n this.setAttribute('active', '')\n\n !silent && this.guaranteeFocus()\n\n /* When the window is out of focus, all pop-ups should disappear. */\n window.addEventListener('blur', this._onwindowblur)\n }\n\n guaranteeFocus(target?: HTMLElement) {\n const focusible = (target || this).querySelector(\n ':scope > button, :scope > [href], :scope > input, :scope > select, :scope > textarea, :scope > [tabindex]:not([tabindex=\"-1\"])'\n )\n\n if (focusible) {\n ;(focusible as HTMLElement).focus()\n } else {\n this.focus()\n }\n }\n\n close() {\n this.removeAttribute('active')\n\n window.removeEventListener('blur', this._onwindowblur)\n\n if (this._parent) {\n /* this case is when the popup is opened by OxPopup.open(...) */\n this.removeEventListener('focusout', this._onfocusout)\n this.removeEventListener('keydown', this._onkeydown)\n this.removeEventListener('keyup', this._onkeyup)\n this.removeEventListener('click', this._onclick)\n this.removeEventListener('ox-close', this._onclose)\n this.removeEventListener('ox-collapse', this._oncollapse)\n this.removeEventListener('mouseup', this._onmouseup)\n this.removeEventListener('mousedown', this._onmousedown)\n this.removeEventListener('context', this._oncontext)\n\n this._parent.removeChild(this)\n delete this._parent\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"program":{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/tslib/tslib.d.ts","../../../node_modules/@lit/reactive-element/css-tag.d.ts","../../../node_modules/@lit/reactive-element/reactive-controller.d.ts","../../../node_modules/@lit/reactive-element/reactive-element.d.ts","../../../node_modules/@types/trusted-types/lib/index.d.ts","../../../node_modules/@types/trusted-types/index.d.ts","../../../node_modules/lit-html/directive.d.ts","../../../node_modules/lit-html/lit-html.d.ts","../../../node_modules/lit-element/lit-element.d.ts","../../../node_modules/lit-html/is-server.d.ts","../../../node_modules/lit/index.d.ts","../../../node_modules/@lit/reactive-element/decorators/base.d.ts","../../../node_modules/@lit/reactive-element/decorators/custom-element.d.ts","../../../node_modules/@lit/reactive-element/decorators/property.d.ts","../../../node_modules/@lit/reactive-element/decorators/state.d.ts","../../../node_modules/@lit/reactive-element/decorators/event-options.d.ts","../../../node_modules/@lit/reactive-element/decorators/query.d.ts","../../../node_modules/@lit/reactive-element/decorators/query-all.d.ts","../../../node_modules/@lit/reactive-element/decorators/query-async.d.ts","../../../node_modules/@lit/reactive-element/decorators/query-assigned-nodes.d.ts","../../../node_modules/@lit/reactive-element/decorators/query-assigned-elements.d.ts","../../../node_modules/lit/decorators.d.ts","../../styles/dist/src/headroom-styles.d.ts","../../styles/dist/src/scrollbar-styles.d.ts","../../styles/dist/src/spinner-styles.d.ts","../../styles/dist/src/tooltip-styles.d.ts","../../styles/dist/src/common-button-styles.d.ts","../../styles/dist/src/common-grist-styles.d.ts","../../styles/dist/src/index.d.ts","../src/ox-popup.ts","../../../node_modules/@material/mwc-icon/mwc-icon.d.ts","../src/ox-popup-list.ts","../src/ox-popup-menu.ts","../src/ox-popup-menuitem.ts","../src/ox-floating-overlay.ts","../src/open-popup.ts","../src/index.ts","../stories/open-popup.stories.ts","../stories/ox-popup-list.stories.ts","../stories/ox-popup-menu.stories.ts","../stories/ox-popup.stories.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/dom-events.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/globals.global.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/@types/mocha/index.d.ts"],"fileInfos":[{"version":"8730f4bf322026ff5229336391a18bcaa1f94d4f82416c8b2f3954e2ccaae2ba","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","4b421cbfb3a38a27c279dec1e9112c3d1da296f77a1a85ddadf7e7a425d45d18","1fc5ab7a764205c68fa10d381b08417795fc73111d6dd16b5b1ed36badb743d9",{"version":"3aafcb693fe5b5c3bd277bd4c3a617b53db474fe498fc5df067c5603b1eebde7","affectsGlobalScope":true},{"version":"adb996790133eb33b33aadb9c09f15c2c575e71fb57a62de8bf74dbf59ec7dfb","affectsGlobalScope":true},{"version":"8cc8c5a3bac513368b0157f3d8b31cfdcfe78b56d3724f30f80ed9715e404af8","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"c5c05907c02476e4bde6b7e76a79ffcd948aedd14b6a8f56e4674221b0417398","affectsGlobalScope":true},{"version":"5f406584aef28a331c36523df688ca3650288d14f39c5d2e555c95f0d2ff8f6f","affectsGlobalScope":true},{"version":"22f230e544b35349cfb3bd9110b6ef37b41c6d6c43c3314a31bd0d9652fcec72","affectsGlobalScope":true},{"version":"7ea0b55f6b315cf9ac2ad622b0a7813315bb6e97bf4bb3fbf8f8affbca7dc695","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"eb26de841c52236d8222f87e9e6a235332e0788af8c87a71e9e210314300410a","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"81cac4cbc92c0c839c70f8ffb94eb61e2d32dc1c3cf6d95844ca099463cf37ea","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"5e5e095c4470c8bab227dbbc61374878ecead104c74ab9960d3adcccfee23205","affectsGlobalScope":true},{"version":"09aa50414b80c023553090e2f53827f007a301bc34b0495bfb2c3c08ab9ad1eb","affectsGlobalScope":true},{"version":"d7f680a43f8cd12a6b6122c07c54ba40952b0c8aa140dcfcf32eb9e6cb028596","affectsGlobalScope":true},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"2768ef564cfc0689a1b76106c421a2909bdff0acbe87da010785adab80efdd5c","affectsGlobalScope":true},{"version":"b248e32ca52e8f5571390a4142558ae4f203ae2f94d5bac38a3084d529ef4e58","affectsGlobalScope":true},{"version":"52d1bb7ab7a3306fd0375c8bff560feed26ed676a5b0457fa8027b563aecb9a4","affectsGlobalScope":true},"14a84fbe4ec531dcbaf5d2594fd95df107258e60ae6c6a076404f13c3f66f28e","52dd370c807255c61765347fc90a9bee3c522b8744dc222714e2bf6b5be3a823","1e5743b25a63fd34ffbae89adcbf248ee17db6ed08d90079ffa93803c3e80d2a","13bb750b495c48fd60d7b5e09f65d4a7b010ab7e09a8943a6d54511e7d184f84","2fcd2d22b1f30555e785105597cd8f57ed50300e213c4f1bbca6ae149f782c38",{"version":"bb4248c7f953233ac52332088fac897d62b82be07244e551d87c5049600b6cf7","affectsGlobalScope":true},"3f30c6b57bf5eb7a7d4298506b78b18d428a39a409e1eadd93a3fdd0299d2687","62da965db3bd1b4ce135048ae8a317d7eb1949068824cb949dd4a91f7e3d6c2d","eba7cf33380cc3a3cf614faf67300e14d0bdff9ea6c5cd6f4b040b1756a48ab1","5e7e090243bf203382a5cb04eabbdc38d78f6d5922f16f543e4da8fa007d5ff9","cd823094ded7c8ac4f94ab6dc387dab699293eb8323d9f948304efc07e4ae7b2","241000969e5367a9a9b9a4f57963e54e5a012c9d89c273526c0115650a7b9e5f","ac388c7c7a262213a3700451bc921e382a93fb27c0252c34ccf03540b4ce044b","097a7e3badfd1c4b35f72aa0f722f5714a4f6a84e53fca5a79dcfebbfc5e718d","fb0107c83e2e0e75b77dacd0c3c6c3ab6844e98dce2a8f858c6f0a57c12136a6","0a478dcb6e6bd8a5d871165659c79cee7b8c3b7a87289118d22e1a04d171e252","e385eb01000d045ea07cea09c488f66e051709a9ac460bf271623f9984e0c419","bf69beba89702c85d84546269e0d4e8b128d32e26b314ee9b501b0b32c82490b","46f3a421b048670d16a3c02589261f17c1cea687f2602eed31e1335b53aed785","4bcb813ea56182beaaab1e8274524eb9f1449b0d8e79efc4a0399de09e43f816","c784eab1cf838d9d6527bce3d9f2d373145606666b68f7610291a7adf6e6bda9","f0380f581cb015778c0fe51e95b5b7f6dae237280654558469b2486c1572268a","cf93fb9208a01c80f0fad245c4360356e5de6c2384b7641acf0b9cc2f5c42448","336398b0efaf964124e636a9b29c4edd5870aee79ac64bf87be58a9d66b7c048","571bc65ec37ba124e762bb822e14a2b8502dc684e356be8feaccbd6b9cadd023","2bbbefc1235500bdb5091f240dc8cba861a95342272f7d11b7574a0d2ef4f85e","7cd455fc4c4818f19263d73b29c59f3fb5fd54b45a6ab83ca3eb3661281db56b","1c6b9b5501774a2ece6574be8e26092800e3f1f836f8c179b4f9fdd271a620f8","0929ec89582904044a56ca8220114b7256450a197da22eb5c9b630be69a41372",{"version":"fa3b5631b434850dc4ed836f2537afa0f8ca8e18a730a7db08731cab5d9265a6","signature":"f3ae0703d7a5578aaa0f847acfeba268c93f26003eea6d7f202f5fc54b579720"},{"version":"27b285e901600242883d62a5fff9f5d262c6fa128b6e6c6963f981f2630a957e","affectsGlobalScope":true},{"version":"88588543d862b8e1e6a1aead49656502f91d1856568c5943bcdb2a19873d4ae8","signature":"415ae3a9be423d2db81b7e16a6c053c83d3f83b1af03a2827aea3de084b70742"},{"version":"4aa7518ac280084c59e2121271a4d08c7f8dc152bf3d1dda27ab32dadba6afa1","signature":"79be55362c82b8aa2f5dc063b51dbbc8f38f009d81c494aac4f671ff23fefb86"},{"version":"b5ebb43543ad21b9c86573ce682e6b7bc97dc4c70fccf76a750ade347849e36f","signature":"10cbee260a09cb62cc5516ea65aa7504f21ec98048a324e789d04d40d9057513"},{"version":"284e7ad261dfcf5f0416af6e7522791eeb91b3ca280aac5bd04ac60080786be0","signature":"4d50db18bdcae4a401e888ac0f6b456d44405a860d38b90773158e2f11b1aa24"},{"version":"1c9846293b48be8870c5d8490462c650fc661247b89c7d8bb8b79f17f662e1dd","signature":"a91e1c5c60a1eb1e5e004578ae61c0a6410588eba200f209d5abb0ad9d5f2ca8"},{"version":"5cecd19d70c9e0a3f25a341a92000a14183e183ed6b48b85a2aa265efe05648f","signature":"73b33f358af52e1fa1942be3b8262e3c97ef189370feea3f43acfd883c1f8639"},{"version":"42c59a64d476a8de186ab172094697d3e0f5e09acad15b3a901e8cacf701a415","signature":"6a64072a7c0c3aa0e265184f06cb9651d5e69cd39e15dafea41e26985905f986"},{"version":"d7b393dfe2766c37e14233d8627582abe6f9db05b838f853b4801ae734b711dc","signature":"486eaf1d96d35dd16901ae6ebc19d28ebdeca05040b8a0b22cd2ab2b7c6eafdb"},{"version":"0fba7aaf15fd99da81ca66a3d8eb4ac38383a12d76a448a6800806a255a142d2","signature":"4513b060ea4b56066580a007486c683db9e573fe9f1dd1a6dfb7a7cd1df90dd8"},{"version":"0caa4e8f86444142d74c44f4408e52f167fef4ed9cc38e8c6c49c56365b3668f","signature":"74da6619c3c411dd54a51722b626e0d9ae117b6a7ac1744f77b49a27fc86455c"},"7e771891adaa85b690266bc37bd6eb43bc57eecc4b54693ead36467e7369952a","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"ca72190df0eb9b09d4b600821c8c7b6c9747b75a1c700c4d57dc0bb72abc074c","affectsGlobalScope":true},"21a167fec8f933752fb8157f06d28fab6817af3ad9b0bdb1908a10762391eab9",{"version":"bb65c6267c5d6676be61acbf6604cf0a4555ac4b505df58ac15c831fcbff4e3e","affectsGlobalScope":true},"0c0cee62cb619aed81133b904f644515ba3064487002a7da83fd8aa07b1b4abd","5a94487653355b56018122d92392beb2e5f4a6c63ba5cef83bbe1c99775ef713",{"version":"d5135ad93b33adcce80b18f8065087934cdc1730d63db58562edcf017e1aad9b","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","afcc1c426b76db7ec80e563d4fb0ba9e6bcc6e63c2d7e9342e649dc56d26347f","bb9c4ffa5e6290c6980b63c815cdd1625876dadb2efaf77edbe82984be93e55e","75ecef44f126e2ae018b4abbd85b6e8a2e2ba1638ebec56cc64274643ce3567b","f30bb836526d930a74593f7b0f5c1c46d10856415a8f69e5e2fc3db80371e362","14b5aa23c5d0ae1907bc696ac7b6915d88f7d85799cc0dc2dcf98fbce2c5a67c","5c439dafdc09abe4d6c260a96b822fa0ba5be7203c71a63ab1f1423cd9e838ea",{"version":"6b526a5ec4a401ca7c26cfe6a48e641d8f30af76673bad3b06a1b4504594a960","affectsGlobalScope":true},{"version":"816ad2e607a96de5bcac7d437f843f5afd8957f1fa5eefa6bba8e4ed7ca8fd84","affectsGlobalScope":true},"cec36af22f514322f870e81d30675c78df82ae8bf4863f5fd4e4424c040c678d","d903fafe96674bc0b2ac38a5be4a8fc07b14c2548d1cdb165a80ea24c44c0c54","b01a80007e448d035a16c74b5c95a5405b2e81b12fabcf18b75aa9eb9ef28990","04eb6578a588d6a46f50299b55f30e3a04ef27d0c5a46c57d8fcc211cd530faa","dbe5aa5a5dd8bd1c6a8d11b1310c3f0cdabaacc78a37b394a8c7b14faeb5fb84","2c828a5405191d006115ab34e191b8474bc6c86ffdc401d1a9864b1b6e088a58",{"version":"e8b18c6385ff784228a6f369694fcf1a6b475355ba89090a88de13587a9391d5","affectsGlobalScope":true},"d076fede3cb042e7b13fc29442aaa03a57806bc51e2b26a67a01fbc66a7c0c12","7c013aa892414a7fdcfd861ae524a668eaa3ede8c7c0acafaf611948122c8d93","b0973c3cbcdc59b37bf477731d468696ecaf442593ec51bab497a613a580fe30",{"version":"4989e92ba5b69b182d2caaea6295af52b7dc73a4f7a2e336a676722884e7139d","affectsGlobalScope":true},{"version":"b3624aed92dab6da8484280d3cb3e2f4130ec3f4ef3f8201c95144ae9e898bb6","affectsGlobalScope":true},"5153a2fd150e46ce57bb3f8db1318d33f6ad3261ed70ceeff92281c0608c74a3","210d54cd652ec0fec8c8916e4af59bb341065576ecda039842f9ffb2e908507c","36b03690b628eab08703d63f04eaa89c5df202e5f1edf3989f13ad389cd2c091","0effadd232a20498b11308058e334d3339cc5bf8c4c858393e38d9d4c0013dcf","25846d43937c672bab7e8195f3d881f93495df712ee901860effc109918938cc","fd93cee2621ff42dabe57b7be402783fd1aa69ece755bcba1e0290547ae60513","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff","69ee23dd0d215b09907ad30d23f88b7790c93329d1faf31d7835552a10cf7cbf","44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","23b89798789dffbd437c0c423f5d02d11f9736aea73d6abf16db4f812ff36eda","213fc4f2b172d8beb74b77d7c1b41488d67348066d185e4263470cbb010cd6e8",{"version":"970a90f76d4d219ad60819d61f5994514087ba94c985647a3474a5a3d12714ed","affectsGlobalScope":true},"664d8f2d59164f2e08c543981453893bc7e003e4dfd29651ce09db13e9457980","4c8525f256873c7ba3135338c647eaf0ca7115a1a2805ae2d0056629461186ce","3c13ef48634e7b5012fcf7e8fce7496352c2d779a7201389ca96a2a81ee4314d","5d0a25ec910fa36595f85a67ac992d7a53dd4064a1ba6aea1c9f14ab73a023f2",{"version":"f0900cd5d00fe1263ff41201fb8073dbeb984397e4af3b8002a5c207a30bdc33","affectsGlobalScope":true},{"version":"f7db71191aa7aac5d6bc927ed6e7075c2763d22c7238227ec0c63c8cf5cb6a8b","affectsGlobalScope":true},"06d7c42d256f0ce6afe1b2b6cfbc97ab391f29dadb00dd0ae8e8f23f5bc916c3","ec4bd1b200670fb567920db572d6701ed42a9641d09c4ff6869768c8f81b404c","e59a892d87e72733e2a9ca21611b9beb52977be2696c7ba4b216cbbb9a48f5aa",{"version":"da26af7362f53d122283bc69fed862b9a9fe27e01bc6a69d1d682e0e5a4df3e6","affectsGlobalScope":true},"8a300fa9b698845a1f9c41ecbe2c5966634582a8e2020d51abcace9b55aa959e",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"e9a8d4274033cb520ee12d6f68d161ba2b9128b87399645d3916b71187032836",{"version":"5f186a758a616c107c70e8918db4630d063bd782f22e6e0b17573b125765b40b","affectsGlobalScope":true}],"options":{"allowSyntheticDefaultImports":true,"declaration":true,"esModuleInterop":false,"experimentalDecorators":true,"importHelpers":true,"inlineSources":true,"module":99,"noEmitOnError":true,"outDir":"./","rootDir":"..","sourceMap":true,"strict":true,"target":5,"useDefineForClassFields":false},"fileIdsList":[[130],[46,130],[54,130],[46,54,130],[46,54,62,130],[44,45,130],[53,130],[84,130],[87,130],[88,93,121,130],[89,100,101,108,118,129,130],[89,90,100,108,130],[91,130],[92,93,101,109,130],[93,118,126,130],[94,96,100,108,130],[95,130],[96,97,130],[100,130],[98,100,130],[100,101,102,118,129,130],[100,101,102,115,118,121,130],[130,134],[103,108,118,129,130],[100,101,103,104,108,118,126,129,130],[103,105,118,126,129,130],[84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136],[100,106,130],[107,129,130],[96,100,108,118,130],[109,130],[110,130],[87,111,130],[112,128,130,134],[113,130],[114,130],[100,115,116,130],[115,117,130,132],[88,100,118,119,120,121,130],[88,118,120,130],[118,119,130],[121,130],[122,130],[100,124,125,130],[124,125,130],[93,108,118,126,130],[127,130],[108,128,130],[88,103,114,129,130],[93,130],[118,130,131],[130,132],[130,133],[88,93,100,102,111,118,129,130,132,134],[118,130,135],[47,130],[46,50,130],[50,130],[48,49,130],[55,56,57,58,59,60,61,62,63,130],[46,50,51,52,130],[43,72,74,75,76,78,130],[43,53,77,130],[43,53,64,71,73,130],[43,50,53,64,72,73,130],[43,50,53,64,72,130],[43,53,64,75,130],[43,50,53,64,71,130],[43,53,78,130],[43,53,73,74,130],[43,53,73,75,76,130],[43,53,72,130],[65,66,67,68,69,70,130],[72,74,75,76,78],[53,77],[50,53,73],[50,53,72,73],[50,53,72],[50,53,75],[50,53],[53],[53,73,74],[53,73,75,76]],"referencedMap":[[44,1],[54,2],[55,3],[58,4],[56,4],[60,4],[63,5],[62,1],[61,4],[59,4],[57,3],[45,1],[46,6],[73,7],[138,1],[84,8],[85,8],[87,9],[88,10],[89,11],[90,12],[91,13],[92,14],[93,15],[94,16],[95,17],[96,18],[97,18],[99,19],[98,20],[100,19],[101,21],[102,22],[86,23],[136,1],[103,24],[104,25],[105,26],[137,27],[106,28],[107,29],[108,30],[109,31],[110,32],[111,33],[112,34],[113,35],[114,36],[115,37],[116,37],[117,38],[118,39],[120,40],[119,41],[121,42],[122,43],[123,1],[124,44],[125,45],[126,46],[127,47],[128,48],[129,49],[130,50],[131,51],[132,52],[133,53],[134,54],[135,55],[48,56],[47,1],[51,57],[49,58],[52,1],[50,59],[64,60],[53,61],[43,1],[8,1],[10,1],[9,1],[2,1],[11,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[3,1],[4,1],[22,1],[19,1],[20,1],[21,1],[23,1],[24,1],[25,1],[5,1],[26,1],[27,1],[28,1],[29,1],[6,1],[33,1],[30,1],[31,1],[32,1],[34,1],[7,1],[35,1],[40,1],[41,1],[36,1],[37,1],[38,1],[39,1],[1,1],[42,1],[79,62],[78,63],[77,64],[74,65],[75,66],[76,67],[72,68],[80,69],[81,70],[82,71],[83,72],[69,1],[70,7],[65,7],[71,73],[66,7],[67,7],[68,7]],"exportedModulesMap":[[44,1],[54,2],[55,3],[58,4],[56,4],[60,4],[63,5],[62,1],[61,4],[59,4],[57,3],[45,1],[46,6],[73,7],[138,1],[84,8],[85,8],[87,9],[88,10],[89,11],[90,12],[91,13],[92,14],[93,15],[94,16],[95,17],[96,18],[97,18],[99,19],[98,20],[100,19],[101,21],[102,22],[86,23],[136,1],[103,24],[104,25],[105,26],[137,27],[106,28],[107,29],[108,30],[109,31],[110,32],[111,33],[112,34],[113,35],[114,36],[115,37],[116,37],[117,38],[118,39],[120,40],[119,41],[121,42],[122,43],[123,1],[124,44],[125,45],[126,46],[127,47],[128,48],[129,49],[130,50],[131,51],[132,52],[133,53],[134,54],[135,55],[48,56],[47,1],[51,57],[49,58],[52,1],[50,59],[64,60],[53,61],[43,1],[8,1],[10,1],[9,1],[2,1],[11,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[3,1],[4,1],[22,1],[19,1],[20,1],[21,1],[23,1],[24,1],[25,1],[5,1],[26,1],[27,1],[28,1],[29,1],[6,1],[33,1],[30,1],[31,1],[32,1],[34,1],[7,1],[35,1],[40,1],[41,1],[36,1],[37,1],[38,1],[39,1],[1,1],[42,1],[79,74],[78,75],[77,76],[74,77],[75,78],[76,79],[72,80],[80,81],[81,82],[82,83],[83,81],[69,1],[70,7],[65,7],[71,73],[66,7],[67,7],[68,7]],"semanticDiagnosticsPerFile":[44,54,55,58,56,60,63,62,61,59,57,45,46,73,138,84,85,87,88,89,90,91,92,93,94,95,96,97,99,98,100,101,102,86,136,103,104,105,137,106,107,108,109,110,111,112,113,114,115,116,117,118,120,119,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,48,47,51,49,52,50,64,53,43,8,10,9,2,11,12,13,14,15,16,17,18,3,4,22,19,20,21,23,24,25,5,26,27,28,29,6,33,30,31,32,34,7,35,40,41,36,37,38,39,1,42,79,78,77,74,75,76,72,80,81,82,83,69,70,65,71,66,67,68]},"version":"4.9.3"}
1
+ {"program":{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/tslib/tslib.d.ts","../../../node_modules/@lit/reactive-element/css-tag.d.ts","../../../node_modules/@lit/reactive-element/reactive-controller.d.ts","../../../node_modules/@lit/reactive-element/reactive-element.d.ts","../../../node_modules/@types/trusted-types/lib/index.d.ts","../../../node_modules/@types/trusted-types/index.d.ts","../../../node_modules/lit-html/directive.d.ts","../../../node_modules/lit-html/lit-html.d.ts","../../../node_modules/lit-element/lit-element.d.ts","../../../node_modules/lit-html/is-server.d.ts","../../../node_modules/lit/index.d.ts","../../../node_modules/@lit/reactive-element/decorators/base.d.ts","../../../node_modules/@lit/reactive-element/decorators/custom-element.d.ts","../../../node_modules/@lit/reactive-element/decorators/property.d.ts","../../../node_modules/@lit/reactive-element/decorators/state.d.ts","../../../node_modules/@lit/reactive-element/decorators/event-options.d.ts","../../../node_modules/@lit/reactive-element/decorators/query.d.ts","../../../node_modules/@lit/reactive-element/decorators/query-all.d.ts","../../../node_modules/@lit/reactive-element/decorators/query-async.d.ts","../../../node_modules/@lit/reactive-element/decorators/query-assigned-nodes.d.ts","../../../node_modules/@lit/reactive-element/decorators/query-assigned-elements.d.ts","../../../node_modules/lit/decorators.d.ts","../../styles/dist/src/headroom-styles.d.ts","../../styles/dist/src/scrollbar-styles.d.ts","../../styles/dist/src/spinner-styles.d.ts","../../styles/dist/src/tooltip-styles.d.ts","../../styles/dist/src/common-button-styles.d.ts","../../styles/dist/src/common-grist-styles.d.ts","../../styles/dist/src/index.d.ts","../src/ox-popup.ts","../../../node_modules/@material/mwc-icon/mwc-icon.d.ts","../src/ox-popup-list.ts","../src/ox-popup-menu.ts","../src/ox-popup-menuitem.ts","../../../node_modules/lit-html/directives/if-defined.d.ts","../../../node_modules/lit/directives/if-defined.d.ts","../../utils/dist/src/sleep.d.ts","../../utils/dist/src/file-drop-helper.d.ts","../../utils/dist/src/context-path.d.ts","../../utils/dist/src/os.d.ts","../../utils/dist/src/swipe-listener.d.ts","../../utils/dist/src/fullscreen.d.ts","../../utils/dist/src/parse-jwt.d.ts","../../utils/dist/src/password-pattern.d.ts","../../utils/dist/src/closest-element.d.ts","../../utils/dist/src/detect-overflow.d.ts","../../utils/dist/src/timecapsule/snapshot-taker.d.ts","../../utils/dist/src/timecapsule/timecapsule.d.ts","../../utils/dist/src/timecapsule/index.d.ts","../../utils/dist/src/clipboard.d.ts","../../utils/dist/src/format.d.ts","../../utils/dist/src/adjust-list-param.d.ts","../../utils/dist/src/is-unvalued.d.ts","../../utils/dist/src/index.d.ts","../src/ox-floating-overlay.ts","../src/open-popup.ts","../src/index.ts","../stories/open-popup.stories.ts","../stories/ox-popup-list.stories.ts","../stories/ox-popup-menu.stories.ts","../stories/ox-popup.stories.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/dom-events.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/globals.global.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/@types/mocha/index.d.ts"],"fileInfos":[{"version":"8730f4bf322026ff5229336391a18bcaa1f94d4f82416c8b2f3954e2ccaae2ba","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","4b421cbfb3a38a27c279dec1e9112c3d1da296f77a1a85ddadf7e7a425d45d18","1fc5ab7a764205c68fa10d381b08417795fc73111d6dd16b5b1ed36badb743d9",{"version":"3aafcb693fe5b5c3bd277bd4c3a617b53db474fe498fc5df067c5603b1eebde7","affectsGlobalScope":true},{"version":"adb996790133eb33b33aadb9c09f15c2c575e71fb57a62de8bf74dbf59ec7dfb","affectsGlobalScope":true},{"version":"8cc8c5a3bac513368b0157f3d8b31cfdcfe78b56d3724f30f80ed9715e404af8","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"c5c05907c02476e4bde6b7e76a79ffcd948aedd14b6a8f56e4674221b0417398","affectsGlobalScope":true},{"version":"5f406584aef28a331c36523df688ca3650288d14f39c5d2e555c95f0d2ff8f6f","affectsGlobalScope":true},{"version":"22f230e544b35349cfb3bd9110b6ef37b41c6d6c43c3314a31bd0d9652fcec72","affectsGlobalScope":true},{"version":"7ea0b55f6b315cf9ac2ad622b0a7813315bb6e97bf4bb3fbf8f8affbca7dc695","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"eb26de841c52236d8222f87e9e6a235332e0788af8c87a71e9e210314300410a","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"81cac4cbc92c0c839c70f8ffb94eb61e2d32dc1c3cf6d95844ca099463cf37ea","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"5e5e095c4470c8bab227dbbc61374878ecead104c74ab9960d3adcccfee23205","affectsGlobalScope":true},{"version":"09aa50414b80c023553090e2f53827f007a301bc34b0495bfb2c3c08ab9ad1eb","affectsGlobalScope":true},{"version":"d7f680a43f8cd12a6b6122c07c54ba40952b0c8aa140dcfcf32eb9e6cb028596","affectsGlobalScope":true},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"2768ef564cfc0689a1b76106c421a2909bdff0acbe87da010785adab80efdd5c","affectsGlobalScope":true},{"version":"b248e32ca52e8f5571390a4142558ae4f203ae2f94d5bac38a3084d529ef4e58","affectsGlobalScope":true},{"version":"52d1bb7ab7a3306fd0375c8bff560feed26ed676a5b0457fa8027b563aecb9a4","affectsGlobalScope":true},"14a84fbe4ec531dcbaf5d2594fd95df107258e60ae6c6a076404f13c3f66f28e","52dd370c807255c61765347fc90a9bee3c522b8744dc222714e2bf6b5be3a823","1e5743b25a63fd34ffbae89adcbf248ee17db6ed08d90079ffa93803c3e80d2a","3cbcdf2a84c93c6b62d8d4584f613c8af7c6330ac2ba1ff781d10a3e0935beb9","2fcd2d22b1f30555e785105597cd8f57ed50300e213c4f1bbca6ae149f782c38",{"version":"bb4248c7f953233ac52332088fac897d62b82be07244e551d87c5049600b6cf7","affectsGlobalScope":true},"3f30c6b57bf5eb7a7d4298506b78b18d428a39a409e1eadd93a3fdd0299d2687","62da965db3bd1b4ce135048ae8a317d7eb1949068824cb949dd4a91f7e3d6c2d","eba7cf33380cc3a3cf614faf67300e14d0bdff9ea6c5cd6f4b040b1756a48ab1","5e7e090243bf203382a5cb04eabbdc38d78f6d5922f16f543e4da8fa007d5ff9","cd823094ded7c8ac4f94ab6dc387dab699293eb8323d9f948304efc07e4ae7b2","241000969e5367a9a9b9a4f57963e54e5a012c9d89c273526c0115650a7b9e5f","ac388c7c7a262213a3700451bc921e382a93fb27c0252c34ccf03540b4ce044b","097a7e3badfd1c4b35f72aa0f722f5714a4f6a84e53fca5a79dcfebbfc5e718d","fb0107c83e2e0e75b77dacd0c3c6c3ab6844e98dce2a8f858c6f0a57c12136a6","0a478dcb6e6bd8a5d871165659c79cee7b8c3b7a87289118d22e1a04d171e252","e385eb01000d045ea07cea09c488f66e051709a9ac460bf271623f9984e0c419","bf69beba89702c85d84546269e0d4e8b128d32e26b314ee9b501b0b32c82490b","46f3a421b048670d16a3c02589261f17c1cea687f2602eed31e1335b53aed785","4bcb813ea56182beaaab1e8274524eb9f1449b0d8e79efc4a0399de09e43f816","c784eab1cf838d9d6527bce3d9f2d373145606666b68f7610291a7adf6e6bda9","f0380f581cb015778c0fe51e95b5b7f6dae237280654558469b2486c1572268a","cf93fb9208a01c80f0fad245c4360356e5de6c2384b7641acf0b9cc2f5c42448","336398b0efaf964124e636a9b29c4edd5870aee79ac64bf87be58a9d66b7c048","571bc65ec37ba124e762bb822e14a2b8502dc684e356be8feaccbd6b9cadd023","2bbbefc1235500bdb5091f240dc8cba861a95342272f7d11b7574a0d2ef4f85e","7cd455fc4c4818f19263d73b29c59f3fb5fd54b45a6ab83ca3eb3661281db56b","1c6b9b5501774a2ece6574be8e26092800e3f1f836f8c179b4f9fdd271a620f8","0929ec89582904044a56ca8220114b7256450a197da22eb5c9b630be69a41372",{"version":"073421b0e5747b9815e9e0de5110af4b5eec3b617a0dd753478955407f90ae13","signature":"f3ae0703d7a5578aaa0f847acfeba268c93f26003eea6d7f202f5fc54b579720"},{"version":"27b285e901600242883d62a5fff9f5d262c6fa128b6e6c6963f981f2630a957e","affectsGlobalScope":true},{"version":"861c4f86f3d24c1ff676bc55e6a65a39a667ed8d241fff1f0ba1961284ddddae","signature":"4dca7804ad883893f583e2d0398422cf97b08d2016139f7dbf3e1bd5d351a468"},{"version":"4aa7518ac280084c59e2121271a4d08c7f8dc152bf3d1dda27ab32dadba6afa1","signature":"79be55362c82b8aa2f5dc063b51dbbc8f38f009d81c494aac4f671ff23fefb86"},{"version":"b5ebb43543ad21b9c86573ce682e6b7bc97dc4c70fccf76a750ade347849e36f","signature":"10cbee260a09cb62cc5516ea65aa7504f21ec98048a324e789d04d40d9057513"},"8cfa7d90fe529121908d3dff84049cf7ef22f9e7730465ac7d4eb0b9339a98c9","62dea411507bb1166ea5940b49d4c338c19755523c37333c7e72749544038bdf","05cfea0488751015b0b85911b6cdcde7c6cebdd9b8cada1ec0b5c1736357a552","4d5e201faa4bceca840b652dfc10795170c061f498e19429a06e056490aa69aa","74a8a08e5d642a108ae7b23e72bded7b9d784c665458affdfb1770c1b19bcdd1","fc5a5d8060efb1270b9d98ce50e6eb8900cc5229603d7afb73c7f4b4272e0d9c","f8c86fcbfb0a1e69a0ed28d3249cc33c312fa23a39c17e15cbbcc539bdcdc303","85e0f00b17c3ae8cd88438c754a2c43f4a9361e685b97a70e52e33afbf62488f","39d2d450df6efbf38585fd316f18922c8ac3fdfd4c3fc412d0bee34e2bc86378","7470dedadf72566f57f46fa8a8950afe388a4e90935b4e4b3d33add9a611929d","90feb2c17c1fd53720e1dd8738c6660aa14402394bb30caed6f2a7cdd54fea40","75f8b003f4362cb9a9e1d9d8b00c6a1e866868f05b27ede146dd8830b675bdf7","7b61337d7e26f5f9329b74dffb93941388d97b78282f611363d8dafa37d0a2a0","70926949fb828e317443687c9f3b5288e1ef6ec1e5130c1001f406b4ba3665ff","f499d7fb533781939c7a5ab778ac6e6c8ffe65601b1a61a843c36ee0013f05b6","46d98d129de9914564a5c8909c9098175c5896919e8e698d206cfffdfa7c3999","c8f7da57a17479145ea922b90a1efb2ff8e8096992bb0a4658606c9fbd944efc","28b3ab6f54b290c19897dff3d4346b7f1caf6e7d2057119ec6332dc1ddf25e85","1e73d612f806d183d6c16c4135c16c1a14dd827c1a67097e72ab1841852bfcb9","171109b02b7c87120b262c5ca0ccb9ecbc88ad92f81eb4e62b7ef6237f0fc9e2",{"version":"cc4e800ed60cc1b1c1735b65fe44389bb479ea27288b81ee788b4d5c58cd2c1d","signature":"34b38cbccea91a04721f3a400d01383a4db8229bebf814a233686aa5eb33b472"},{"version":"5929a241b301adbc6ef1348cc996a0226e2f1cae2d8f39eb6e6ffdd9f2bcf90b","signature":"e498130e206131bb27463e21128dac14c7cedf9ed70ab4e0dd811a961830d82f"},{"version":"5cecd19d70c9e0a3f25a341a92000a14183e183ed6b48b85a2aa265efe05648f","signature":"73b33f358af52e1fa1942be3b8262e3c97ef189370feea3f43acfd883c1f8639"},{"version":"42c59a64d476a8de186ab172094697d3e0f5e09acad15b3a901e8cacf701a415","signature":"6a64072a7c0c3aa0e265184f06cb9651d5e69cd39e15dafea41e26985905f986"},{"version":"d7b393dfe2766c37e14233d8627582abe6f9db05b838f853b4801ae734b711dc","signature":"486eaf1d96d35dd16901ae6ebc19d28ebdeca05040b8a0b22cd2ab2b7c6eafdb"},{"version":"0fba7aaf15fd99da81ca66a3d8eb4ac38383a12d76a448a6800806a255a142d2","signature":"4513b060ea4b56066580a007486c683db9e573fe9f1dd1a6dfb7a7cd1df90dd8"},{"version":"0caa4e8f86444142d74c44f4408e52f167fef4ed9cc38e8c6c49c56365b3668f","signature":"74da6619c3c411dd54a51722b626e0d9ae117b6a7ac1744f77b49a27fc86455c"},"7e771891adaa85b690266bc37bd6eb43bc57eecc4b54693ead36467e7369952a","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"ca72190df0eb9b09d4b600821c8c7b6c9747b75a1c700c4d57dc0bb72abc074c","affectsGlobalScope":true},"21a167fec8f933752fb8157f06d28fab6817af3ad9b0bdb1908a10762391eab9",{"version":"bb65c6267c5d6676be61acbf6604cf0a4555ac4b505df58ac15c831fcbff4e3e","affectsGlobalScope":true},"0c0cee62cb619aed81133b904f644515ba3064487002a7da83fd8aa07b1b4abd","5a94487653355b56018122d92392beb2e5f4a6c63ba5cef83bbe1c99775ef713",{"version":"d5135ad93b33adcce80b18f8065087934cdc1730d63db58562edcf017e1aad9b","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","dab86d9604fe40854ef3c0a6f9e8948873dc3509213418e5e457f410fd11200f","bb9c4ffa5e6290c6980b63c815cdd1625876dadb2efaf77edbe82984be93e55e","489532ff54b714f0e0939947a1c560e516d3ae93d51d639ab02e907a0e950114","f30bb836526d930a74593f7b0f5c1c46d10856415a8f69e5e2fc3db80371e362","14b5aa23c5d0ae1907bc696ac7b6915d88f7d85799cc0dc2dcf98fbce2c5a67c","5c439dafdc09abe4d6c260a96b822fa0ba5be7203c71a63ab1f1423cd9e838ea",{"version":"6b526a5ec4a401ca7c26cfe6a48e641d8f30af76673bad3b06a1b4504594a960","affectsGlobalScope":true},{"version":"816ad2e607a96de5bcac7d437f843f5afd8957f1fa5eefa6bba8e4ed7ca8fd84","affectsGlobalScope":true},"cec36af22f514322f870e81d30675c78df82ae8bf4863f5fd4e4424c040c678d","d903fafe96674bc0b2ac38a5be4a8fc07b14c2548d1cdb165a80ea24c44c0c54","5eec82ac21f84d83586c59a16b9b8502d34505d1393393556682fe7e7fde9ef2","04eb6578a588d6a46f50299b55f30e3a04ef27d0c5a46c57d8fcc211cd530faa","8d3c583a07e0c37e876908c2d5da575019f689df8d9fa4c081d99119d53dba22","2c828a5405191d006115ab34e191b8474bc6c86ffdc401d1a9864b1b6e088a58",{"version":"e8b18c6385ff784228a6f369694fcf1a6b475355ba89090a88de13587a9391d5","affectsGlobalScope":true},"d076fede3cb042e7b13fc29442aaa03a57806bc51e2b26a67a01fbc66a7c0c12","7c013aa892414a7fdcfd861ae524a668eaa3ede8c7c0acafaf611948122c8d93","b0973c3cbcdc59b37bf477731d468696ecaf442593ec51bab497a613a580fe30",{"version":"4989e92ba5b69b182d2caaea6295af52b7dc73a4f7a2e336a676722884e7139d","affectsGlobalScope":true},{"version":"b3624aed92dab6da8484280d3cb3e2f4130ec3f4ef3f8201c95144ae9e898bb6","affectsGlobalScope":true},"5153a2fd150e46ce57bb3f8db1318d33f6ad3261ed70ceeff92281c0608c74a3","210d54cd652ec0fec8c8916e4af59bb341065576ecda039842f9ffb2e908507c","36b03690b628eab08703d63f04eaa89c5df202e5f1edf3989f13ad389cd2c091","0effadd232a20498b11308058e334d3339cc5bf8c4c858393e38d9d4c0013dcf","25846d43937c672bab7e8195f3d881f93495df712ee901860effc109918938cc","fd93cee2621ff42dabe57b7be402783fd1aa69ece755bcba1e0290547ae60513","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff","69ee23dd0d215b09907ad30d23f88b7790c93329d1faf31d7835552a10cf7cbf","44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","23b89798789dffbd437c0c423f5d02d11f9736aea73d6abf16db4f812ff36eda","223c37f62ce09a3d99e77498acdee7b2705a4ae14552fbdb4093600cd9164f3f",{"version":"970a90f76d4d219ad60819d61f5994514087ba94c985647a3474a5a3d12714ed","affectsGlobalScope":true},"e10177274a35a9d07c825615340b2fcde2f610f53f3fb40269fd196b4288dda6","4c8525f256873c7ba3135338c647eaf0ca7115a1a2805ae2d0056629461186ce","3c13ef48634e7b5012fcf7e8fce7496352c2d779a7201389ca96a2a81ee4314d","5d0a25ec910fa36595f85a67ac992d7a53dd4064a1ba6aea1c9f14ab73a023f2",{"version":"f0900cd5d00fe1263ff41201fb8073dbeb984397e4af3b8002a5c207a30bdc33","affectsGlobalScope":true},{"version":"4c50342e1b65d3bee2ed4ab18f84842d5724ad11083bd666d8705dc7a6079d80","affectsGlobalScope":true},"06d7c42d256f0ce6afe1b2b6cfbc97ab391f29dadb00dd0ae8e8f23f5bc916c3","ec4bd1b200670fb567920db572d6701ed42a9641d09c4ff6869768c8f81b404c","e59a892d87e72733e2a9ca21611b9beb52977be2696c7ba4b216cbbb9a48f5aa",{"version":"da26af7362f53d122283bc69fed862b9a9fe27e01bc6a69d1d682e0e5a4df3e6","affectsGlobalScope":true},"8a300fa9b698845a1f9c41ecbe2c5966634582a8e2020d51abcace9b55aa959e",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"8dbe725f8d237e70310977afcfa011629804d101ebaa0266cafda6b61ad72236",{"version":"5f186a758a616c107c70e8918db4630d063bd782f22e6e0b17573b125765b40b","affectsGlobalScope":true}],"options":{"allowSyntheticDefaultImports":true,"declaration":true,"esModuleInterop":false,"experimentalDecorators":true,"importHelpers":true,"inlineSources":true,"module":99,"noEmitOnError":true,"outDir":"./","rootDir":"..","sourceMap":true,"strict":true,"target":5,"useDefineForClassFields":false},"fileIdsList":[[150],[46,150],[54,150],[46,54,150],[46,54,62,150],[44,45,150],[53,150],[104,150],[107,150],[108,113,141,150],[109,120,121,128,138,149,150],[109,110,120,128,150],[111,150],[112,113,121,129,150],[113,138,146,150],[114,116,120,128,150],[115,150],[116,117,150],[120,150],[118,120,150],[120,121,122,138,149,150],[120,121,122,135,138,141,150],[150,154],[116,123,128,138,149,150],[120,121,123,124,128,138,146,149,150],[123,125,138,146,149,150],[104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156],[120,126,150],[127,149,150],[116,120,128,138,150],[129,150],[130,150],[107,131,150],[132,148,150,154],[133,150],[134,150],[120,135,136,150],[135,137,150,152],[108,120,138,139,140,141,150],[108,138,140,150],[138,139,150],[141,150],[142,150],[120,144,145,150],[144,145,150],[113,128,138,146,150],[147,150],[128,148,150],[108,123,134,149,150],[113,150],[138,150,151],[150,152],[150,153],[108,113,120,122,131,138,149,150,152,154],[138,150,155],[47,150],[46,50,150],[50,150],[48,49,150],[55,56,57,58,59,60,61,62,63,150],[77,150],[46,50,51,52,150],[43,72,74,75,76,98,150],[43,53,97,150],[43,53,64,71,73,78,96,150],[43,50,53,64,72,73,150],[43,50,53,64,72,150],[43,53,64,75,150],[43,50,53,64,71,150],[43,53,98,150],[43,53,73,74,150],[43,53,73,75,76,150],[43,53,72,150],[65,66,67,68,69,70,150],[79,80,81,82,83,84,85,86,87,88,91,92,93,94,95,150],[89,90,150],[90,150],[89,150],[72,74,75,76,98],[53,97],[50,53,73],[50,53,72,73],[50,53,72],[50,53,75],[50,53],[53],[53,73,74],[53,73,75,76]],"referencedMap":[[44,1],[54,2],[55,3],[58,4],[56,4],[60,4],[63,5],[62,1],[61,4],[59,4],[57,3],[45,1],[46,6],[73,7],[158,1],[104,8],[105,8],[107,9],[108,10],[109,11],[110,12],[111,13],[112,14],[113,15],[114,16],[115,17],[116,18],[117,18],[119,19],[118,20],[120,19],[121,21],[122,22],[106,23],[156,1],[123,24],[124,25],[125,26],[157,27],[126,28],[127,29],[128,30],[129,31],[130,32],[131,33],[132,34],[133,35],[134,36],[135,37],[136,37],[137,38],[138,39],[140,40],[139,41],[141,42],[142,43],[143,1],[144,44],[145,45],[146,46],[147,47],[148,48],[149,49],[150,50],[151,51],[152,52],[153,53],[154,54],[155,55],[48,56],[47,1],[51,57],[49,58],[77,58],[52,1],[50,59],[64,60],[78,61],[53,62],[43,1],[8,1],[10,1],[9,1],[2,1],[11,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[3,1],[4,1],[22,1],[19,1],[20,1],[21,1],[23,1],[24,1],[25,1],[5,1],[26,1],[27,1],[28,1],[29,1],[6,1],[33,1],[30,1],[31,1],[32,1],[34,1],[7,1],[35,1],[40,1],[41,1],[36,1],[37,1],[38,1],[39,1],[1,1],[42,1],[99,63],[98,64],[97,65],[74,66],[75,67],[76,68],[72,69],[100,70],[101,71],[102,72],[103,73],[69,1],[70,7],[65,7],[71,74],[66,7],[67,7],[68,7],[94,1],[92,1],[87,1],[81,1],[88,1],[80,1],[93,1],[84,1],[96,75],[95,1],[82,1],[85,1],[86,1],[79,1],[83,1],[91,76],[89,77],[90,78]],"exportedModulesMap":[[44,1],[54,2],[55,3],[58,4],[56,4],[60,4],[63,5],[62,1],[61,4],[59,4],[57,3],[45,1],[46,6],[73,7],[158,1],[104,8],[105,8],[107,9],[108,10],[109,11],[110,12],[111,13],[112,14],[113,15],[114,16],[115,17],[116,18],[117,18],[119,19],[118,20],[120,19],[121,21],[122,22],[106,23],[156,1],[123,24],[124,25],[125,26],[157,27],[126,28],[127,29],[128,30],[129,31],[130,32],[131,33],[132,34],[133,35],[134,36],[135,37],[136,37],[137,38],[138,39],[140,40],[139,41],[141,42],[142,43],[143,1],[144,44],[145,45],[146,46],[147,47],[148,48],[149,49],[150,50],[151,51],[152,52],[153,53],[154,54],[155,55],[48,56],[47,1],[51,57],[49,58],[77,58],[52,1],[50,59],[64,60],[78,61],[53,62],[43,1],[8,1],[10,1],[9,1],[2,1],[11,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[3,1],[4,1],[22,1],[19,1],[20,1],[21,1],[23,1],[24,1],[25,1],[5,1],[26,1],[27,1],[28,1],[29,1],[6,1],[33,1],[30,1],[31,1],[32,1],[34,1],[7,1],[35,1],[40,1],[41,1],[36,1],[37,1],[38,1],[39,1],[1,1],[42,1],[99,79],[98,80],[97,81],[74,82],[75,83],[76,84],[72,85],[100,86],[101,87],[102,88],[103,86],[69,1],[70,7],[65,7],[71,74],[66,7],[67,7],[68,7],[94,1],[92,1],[87,1],[81,1],[88,1],[80,1],[93,1],[84,1],[96,75],[95,1],[82,1],[85,1],[86,1],[79,1],[83,1],[91,76],[89,77],[90,78]],"semanticDiagnosticsPerFile":[44,54,55,58,56,60,63,62,61,59,57,45,46,73,158,104,105,107,108,109,110,111,112,113,114,115,116,117,119,118,120,121,122,106,156,123,124,125,157,126,127,128,129,130,131,132,133,134,135,136,137,138,140,139,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,48,47,51,49,77,52,50,64,78,53,43,8,10,9,2,11,12,13,14,15,16,17,18,3,4,22,19,20,21,23,24,25,5,26,27,28,29,6,33,30,31,32,34,7,35,40,41,36,37,38,39,1,42,99,98,97,74,75,76,72,100,101,102,103,69,70,65,71,66,67,68,94,92,87,81,88,80,93,84,96,95,82,85,86,79,83,91,89,90]},"version":"4.9.4"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@operato/popup",
3
3
  "description": "Webcomponent popup following open-wc recommendations",
4
4
  "author": "heartyoh",
5
- "version": "1.1.23",
5
+ "version": "1.1.42",
6
6
  "main": "dist/src/index.js",
7
7
  "module": "dist/src/index.js",
8
8
  "exports": {
@@ -55,7 +55,8 @@
55
55
  },
56
56
  "dependencies": {
57
57
  "@material/mwc-icon": "^0.27.0",
58
- "@operato/styles": "^1.1.13",
58
+ "@operato/styles": "^1.1.28",
59
+ "@operato/utils": "^1.1.42",
59
60
  "lit": "^2.4.0"
60
61
  },
61
62
  "devDependencies": {
@@ -90,5 +91,5 @@
90
91
  "prettier --write"
91
92
  ]
92
93
  },
93
- "gitHead": "073fdb17432e4c45d55ad8f6fd0ad90158d433f0"
94
+ "gitHead": "dc2359426d31b49b1898bad11f0b7b3862829581"
94
95
  }
package/src/open-popup.ts CHANGED
@@ -14,6 +14,7 @@ import { OxFloatingOverlay } from './ox-floating-overlay.js'
14
14
  * @property {Boolean} [closable] - set whether the close 'X' button is shown on top-right most position (default true)
15
15
  * @property {Boolean} [escapable] - set whether the close popup with 'ESC' key (default true)
16
16
  * @property {Boolean} [backdrop] - set whether to do background masking around the pop-up. If true, it becomes modal (default true)
17
+ * @property {Boolean} [movable] - set whether to be able to movable by the gesture dragging on header once the hovering option is 'center'
17
18
  * @property {String} [help] - inline help link
18
19
  */
19
20
  export type PopupOptions = {
@@ -23,6 +24,7 @@ export type PopupOptions = {
23
24
  closable?: boolean
24
25
  escapable?: boolean
25
26
  backdrop?: boolean
27
+ movable?: boolean
26
28
  help?: string
27
29
  }
28
30
 
@@ -61,7 +63,16 @@ var popupSequence = 0
61
63
  * @returns popup handle object. This object is used to close the popup.
62
64
  */
63
65
  function defaultOpenPopup(template: TemplateResult, options: PopupOptions = {}): PopupHandle {
64
- const { title, size = 'large', closable = false, escapable = false, help, hovering, backdrop } = options
66
+ const {
67
+ title,
68
+ size = 'large',
69
+ closable = false,
70
+ escapable = false,
71
+ help,
72
+ hovering,
73
+ backdrop,
74
+ movable = false
75
+ } = options
65
76
  const name = `$popup-${popupSequence++}`
66
77
 
67
78
  render(
@@ -77,6 +88,7 @@ function defaultOpenPopup(template: TemplateResult, options: PopupOptions = {}):
77
88
  .size=${size}
78
89
  .closable=${closable}
79
90
  .historical=${false}
91
+ .movable=${movable}
80
92
  >${template}</ox-floating-overlay
81
93
  >
82
94
  `,
@@ -1,9 +1,28 @@
1
1
  import '@material/mwc-icon'
2
2
 
3
3
  import { css, html, LitElement, PropertyValues } from 'lit'
4
- import { customElement, property } from 'lit/decorators.js'
4
+ import { customElement, property, query } from 'lit/decorators.js'
5
+ import { ifDefined } from 'lit/directives/if-defined.js'
5
6
 
6
7
  import { ScrollbarStyles } from '@operato/styles'
8
+ import { isHandheldDevice } from '@operato/utils'
9
+
10
+ function getPoint(e: Event): { x: number; y: number } | undefined {
11
+ if ((e as MouseEvent).button == 0) {
12
+ return {
13
+ x: (e as MouseEvent).clientX,
14
+ y: (e as MouseEvent).clientY
15
+ }
16
+ } else if ((e as TouchEvent).touches?.length == 1) {
17
+ const touch = (e as TouchEvent).touches[0]
18
+ return {
19
+ x: touch.clientX,
20
+ y: touch.clientY
21
+ }
22
+ } else {
23
+ return
24
+ }
25
+ }
7
26
 
8
27
  @customElement('ox-floating-overlay')
9
28
  export class OxFloatingOverlay extends LitElement {
@@ -39,7 +58,6 @@ export class OxFloatingOverlay extends LitElement {
39
58
  flex-direction: column;
40
59
  overflow: hidden;
41
60
  background: transparent;
42
- pointer-events: none;
43
61
  }
44
62
 
45
63
  [overlayed][hovering='center'] {
@@ -82,7 +100,7 @@ export class OxFloatingOverlay extends LitElement {
82
100
  [content] {
83
101
  flex: 1;
84
102
 
85
- overflow: hidden;
103
+ overflow: auto;
86
104
  }
87
105
 
88
106
  ::slotted(*) {
@@ -92,7 +110,7 @@ export class OxFloatingOverlay extends LitElement {
92
110
 
93
111
  [hovering='center'] [content] ::slotted(*) {
94
112
  width: 100%;
95
- height: 100%;
113
+ min-height: 100%;
96
114
  }
97
115
  [direction='up'],
98
116
  [direction='down'] {
@@ -224,9 +242,16 @@ export class OxFloatingOverlay extends LitElement {
224
242
  @property({ type: Object }) templateProperties: any
225
243
  @property({ type: Object }) help: any
226
244
  @property({ type: Boolean }) historical?: boolean = false
245
+ @property({ type: Boolean }) movable?: boolean = false
246
+
247
+ private dragStart?: { x: number; y: number }
248
+ private dragEndHandler = this.onDragEnd.bind(this) as EventListener
249
+ private dragMoveHandler = this.onDragMove.bind(this) as EventListener
250
+
251
+ @query('[overlayed]') overlayed!: HTMLDivElement
227
252
 
228
253
  render() {
229
- var direction = this.hovering == 'center' ? false : this.direction
254
+ var direction = this.hovering == 'center' ? undefined : this.direction
230
255
 
231
256
  return html`
232
257
  ${Boolean(this.backdrop)
@@ -236,7 +261,7 @@ export class OxFloatingOverlay extends LitElement {
236
261
  <div
237
262
  overlayed
238
263
  hovering=${this.hovering || 'center'}
239
- direction=${direction}
264
+ direction=${ifDefined(direction)}
240
265
  size=${this.size || 'medium'}
241
266
  @close-overlay=${(e: Event) => {
242
267
  e.stopPropagation()
@@ -250,8 +275,20 @@ export class OxFloatingOverlay extends LitElement {
250
275
  ;(e.target as HTMLElement).setAttribute('settled', '')
251
276
  }}
252
277
  >
253
- <div header>
254
- <mwc-icon @click=${() => this.onClose()} ?closable=${this.closable} historyback>arrow_back</mwc-icon>
278
+ <div
279
+ header
280
+ @mousedown=${this.onDragStart.bind(this)}
281
+ @touchstart=${this.onDragStart.bind(this)}
282
+ draggable="false"
283
+ >
284
+ <mwc-icon
285
+ @click=${() => this.onClose()}
286
+ @touchend=${() => this.onClose()}
287
+ ?closable=${this.closable}
288
+ historyback
289
+ >arrow_back</mwc-icon
290
+ >
291
+ ${this.movable ? html`<mwc-icon>drag_indicator</mwc-icon>` : html``}
255
292
  <slot name="header">
256
293
  ${this.title || this.closable
257
294
  ? html`
@@ -263,7 +300,9 @@ export class OxFloatingOverlay extends LitElement {
263
300
  `
264
301
  : html``}</slot
265
302
  >
266
- <mwc-icon @click=${() => this.onClose()} ?closable=${this.closable} close>close</mwc-icon>
303
+ <mwc-icon @click=${() => this.onClose()} @touchend=${() => this.onClose()} ?closable=${this.closable} close
304
+ >close</mwc-icon
305
+ >
267
306
  </div>
268
307
 
269
308
  <div content>
@@ -288,10 +327,24 @@ export class OxFloatingOverlay extends LitElement {
288
327
  firstUpdated() {
289
328
  requestAnimationFrame(() => {
290
329
  /* transition(animation) 효과를 위해 'opened' 속성을 변화시킨다. */
291
- this.renderRoot.querySelector('[overlayed]')?.setAttribute('opened', 'true')
330
+ this.overlayed?.setAttribute('opened', 'true')
292
331
  })
293
332
  }
294
333
 
334
+ connectedCallback(): void {
335
+ super.connectedCallback()
336
+
337
+ this.movable = this.movable && !isHandheldDevice()
338
+
339
+ if (this.movable) {
340
+ document.addEventListener('mouseup', this.dragEndHandler)
341
+ document.addEventListener('touchend', this.dragEndHandler)
342
+ document.addEventListener('touchcancel', this.dragEndHandler)
343
+ document.addEventListener('mousemove', this.dragMoveHandler)
344
+ document.addEventListener('touchmove', this.dragMoveHandler)
345
+ }
346
+ }
347
+
295
348
  disconnectedCallback() {
296
349
  document.dispatchEvent(
297
350
  new CustomEvent('overlay-closed', {
@@ -299,11 +352,77 @@ export class OxFloatingOverlay extends LitElement {
299
352
  })
300
353
  )
301
354
 
355
+ if (this.movable) {
356
+ document.removeEventListener('mouseup', this.dragEndHandler!)
357
+ document.removeEventListener('touchend', this.dragEndHandler!)
358
+ document.removeEventListener('touchcancel', this.dragEndHandler!)
359
+ document.removeEventListener('mousemove', this.dragMoveHandler!)
360
+ document.removeEventListener('touchmove', this.dragMoveHandler!)
361
+ }
362
+
302
363
  super.disconnectedCallback()
303
364
  }
304
365
 
366
+ onDragStart(e: Event) {
367
+ if (!this.movable) {
368
+ return
369
+ }
370
+
371
+ const point = getPoint(e)
372
+
373
+ if (point) {
374
+ this.dragStart = point
375
+ e.stopPropagation()
376
+ return false
377
+ }
378
+ }
379
+
380
+ onDragMove(e: Event) {
381
+ if (!this.movable || !this.dragStart) {
382
+ return false
383
+ }
384
+
385
+ const point = getPoint(e)
386
+
387
+ if (!point) {
388
+ return false
389
+ }
390
+
391
+ e.stopPropagation()
392
+ e.preventDefault()
393
+
394
+ const dragStart = point
395
+ var { x, y } = point
396
+
397
+ x -= this.dragStart.x
398
+ y -= this.dragStart.y
399
+
400
+ this.dragStart = dragStart
401
+
402
+ const overlayed = this.overlayed
403
+
404
+ var boundingRect = overlayed.getBoundingClientRect()
405
+
406
+ overlayed.style.left =
407
+ Math.min(document.body.offsetWidth - 40, Math.max(40 - overlayed.offsetWidth, boundingRect.left + x)) + 'px'
408
+ overlayed.style.top = Math.min(document.body.offsetHeight - 40, Math.max(0, boundingRect.top + y)) + 'px'
409
+
410
+ overlayed.style.transform = 'initial'
411
+
412
+ return false
413
+ }
414
+
415
+ onDragEnd(e: Event) {
416
+ if (this.movable && this.dragStart) {
417
+ e.stopPropagation()
418
+ e.preventDefault()
419
+
420
+ delete this.dragStart
421
+ }
422
+ }
423
+
305
424
  close() {
306
- this.parentElement?.removeChild(this)
425
+ this.parentNode?.removeChild(this)
307
426
  }
308
427
 
309
428
  onClose(escape?: boolean) {
@@ -352,7 +352,15 @@ export class OxPopupList extends OxPopup {
352
352
  })
353
353
  }
354
354
 
355
- override open(params: { left?: number; top?: number; right?: number; bottom?: number; silent?: boolean }) {
355
+ override open(params: {
356
+ left?: number
357
+ top?: number
358
+ right?: number
359
+ bottom?: number
360
+ width?: string
361
+ height?: string
362
+ silent?: boolean
363
+ }) {
356
364
  super.open(params)
357
365
 
358
366
  if (this.activeIndex === undefined) {
package/src/ox-popup.ts CHANGED
@@ -175,10 +175,13 @@ export class OxPopup extends LitElement {
175
175
  silent?: boolean
176
176
  }) {
177
177
  if (width) {
178
- this.style.width = width
178
+ this.style.maxWidth = width
179
+ this.style.overflowX = 'auto'
179
180
  }
181
+
180
182
  if (height) {
181
- this.style.height = height
183
+ this.style.maxHeight = height
184
+ this.style.overflowY = 'auto'
182
185
  }
183
186
 
184
187
  if (left === undefined && top === undefined && right === undefined && bottom === undefined) {