@operato/input 1.21.0 → 1.22.0

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,15 @@
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.22.0](https://github.com/hatiolab/operato/compare/v1.21.0...v1.22.0) (2025-02-20)
7
+
8
+
9
+ ### :rocket: New Features
10
+
11
+ * code valuetype for ox-input-value-map and range ([668a32f](https://github.com/hatiolab/operato/commit/668a32f7b36fac88a5c58b4bb22b31be394e6361))
12
+
13
+
14
+
6
15
  ## [1.21.0](https://github.com/hatiolab/operato/compare/v1.20.16...v1.21.0) (2025-01-11)
7
16
 
8
17
  **Note:** Version bump only for package @operato/input
@@ -2,6 +2,7 @@
2
2
  * @license Copyright © HatioLab Inc. All rights reserved.
3
3
  */
4
4
  import './ox-input-color';
5
+ import './ox-input-code';
5
6
  import { OxFormField } from './ox-form-field';
6
7
  type ValueMap = {
7
8
  default?: any;
@@ -25,7 +26,7 @@ Example:
25
26
  export declare class OxInputValueMap extends OxFormField {
26
27
  static styles: import("lit").CSSResult;
27
28
  value: ValueMap;
28
- valuetype: 'string' | 'boolean' | 'color' | 'number' | 'date' | string;
29
+ valuetype: 'string' | 'boolean' | 'color' | 'number' | 'date' | 'code' | string;
29
30
  keytype: 'string' | 'number';
30
31
  defaultValue?: string;
31
32
  private _changingNow;
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import { __decorate } from "tslib";
5
5
  import './ox-input-color';
6
+ import './ox-input-code';
6
7
  import { css, html, nothing } from 'lit';
7
8
  import { customElement, property } from 'lit/decorators.js';
8
9
  import { keyed } from 'lit/directives/keyed.js';
@@ -132,7 +133,9 @@ let OxInputValueMap = class OxInputValueMap extends OxFormField {
132
133
  `
133
134
  : this.valuetype == 'color'
134
135
  ? html ` <ox-input-color data-value value=${ifDefined(value)} ?disabled=${this.disabled}> </ox-input-color> `
135
- : html `
136
+ : this.valuetype == 'code'
137
+ ? html ` <ox-input-code data-value value=${ifDefined(value)} language="javascript" ?disabled=${this.disabled}> </ox-input-code> `
138
+ : html `
136
139
  <input
137
140
  type="text"
138
141
  data-value
@@ -1 +1 @@
1
- {"version":3,"file":"ox-input-value-map.js","sourceRoot":"","sources":["../../src/ox-input-value-map.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport './ox-input-color'\n\nimport { css, html, nothing } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { keyed } from 'lit/directives/keyed.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\nimport { OxFormField } from './ox-form-field'\n\ntype ValueMap = { default?: any; [key: string]: any }\ntype ArrayedValueMap = { key: string; value: any }\n\n/**\nkey-value map editor element\n\nExample:\n\n <ox-input-value-map \n value=${map}\n keytype=${keytype}\n valuetype=${valuetype}>\n </ox-input-value-map>\n*/\n@customElement('ox-input-value-map')\nexport class OxInputValueMap extends OxFormField {\n static styles = css`\n :host {\n display: flex;\n flex-direction: column;\n border: var(--border-dark-color);\n padding: var(--padding-narrow) var(--padding-narrow) 0 var(--padding-narrow);\n }\n\n div {\n display: flex;\n flex-flow: row nowrap;\n gap: var(--padding-default);\n }\n\n div:last-child {\n margin-bottom: var(--margin-narrow);\n }\n\n div > * {\n min-width: 0px;\n margin: 2px;\n padding: 0;\n }\n\n button {\n border: var(--button-border);\n border-radius: var(--border-radius);\n background-color: var(--button-background-color);\n padding: var(--padding-narrow) var(--padding-default);\n line-height: 0.8;\n color: var(--button-color);\n cursor: pointer;\n }\n button + button {\n margin-left: -5px;\n }\n button mwc-icon {\n font-size: var(--fontsize-default);\n }\n button:focus,\n button:hover,\n button:active {\n border: var(--button-activ-border);\n background-color: var(--button-background-focus-color);\n color: var(--theme-white-color);\n }\n\n [data-key],\n [data-value] {\n flex: 1;\n }\n\n input {\n border: 0;\n border-bottom: var(--border-dark-color);\n padding: var(--input-padding);\n font: var(--input-font);\n color: var(--primary-text-color);\n }\n\n input:focus {\n outline: none;\n border-bottom: 1px solid var(--primary-color);\n }\n\n button.hidden {\n opacity: 0;\n cursor: default;\n }\n\n ox-input-color {\n --ox-input-color-input-color: {\n margin: 1px;\n }\n --ox-input-color-input-span: {\n width: 10px;\n height: 10px;\n }\n }\n\n input[type='checkbox'] {\n flex: none;\n width: initial;\n }\n `\n\n @property({ type: Object }) value: ValueMap = {}\n @property({ type: String }) valuetype: 'string' | 'boolean' | 'color' | 'number' | 'date' | string = 'string'\n @property({ type: String }) keytype: 'string' | 'number' = 'number'\n @property({ type: String, attribute: 'default-value' }) defaultValue?: string\n\n private _changingNow: boolean = false\n\n firstUpdated() {\n this.renderRoot.addEventListener('change', this._onChange.bind(this))\n }\n\n updated() {\n const inputs = this.renderRoot.querySelectorAll('[data-record-new] > :not([style*=\"display: none\"])') as NodeListOf<\n HTMLInputElement & { value: any }\n >\n\n inputs[0].focus()\n }\n\n valueInputTemplate(value?: any) {\n return this.valuetype == 'boolean'\n ? html`\n <input\n type=\"checkbox\"\n data-value\n .checked=${!!value}\n data-value-type=${this.valuetype}\n ?disabled=${this.disabled}\n />\n `\n : this.valuetype == 'color'\n ? html` <ox-input-color data-value value=${ifDefined(value)} ?disabled=${this.disabled}> </ox-input-color> `\n : html`\n <input\n type=\"text\"\n data-value\n placeholder=\"value\"\n value=${ifDefined(value)}\n data-value-type=${this.valuetype}\n ?disabled=${this.disabled}\n />\n `\n }\n\n render() {\n return html`\n ${this._toArray(this.value).map(\n item => html`\n <div data-record>\n <input type=\"text\" data-key placeholder=\"key\" .value=${item.key} ?disabled=${this.disabled} />\n ${this.valueInputTemplate(item.value)}\n <button\n class=\"record-action\"\n @click=${(e: MouseEvent) => this._delete(e)}\n tabindex=\"-1\"\n ?disabled=${this.disabled}\n >\n <mwc-icon>remove</mwc-icon>\n </button>\n </div>\n `\n )}\n ${this.disabled\n ? nothing\n : keyed(\n Date.now(),\n html`\n <div data-record-new>\n <input type=\"text\" data-key placeholder=\"key\" value=\"\" />\n\n ${this.valueInputTemplate()}\n <button class=\"record-action\" @click=${(e: MouseEvent) => this._add()} tabindex=\"-1\">\n <mwc-icon>add</mwc-icon>\n </button>\n </div>\n `\n )}\n\n <div data-record>\n <input type=\"text\" data-key data-default=\"\" value=\"default\" disabled />\n\n ${this.valueInputTemplate((this.value && this.value.default) || this._defaultValue())}\n <button class=\"record-action\" @click=${() => this._sort()} tabindex=\"-1\">\n <mwc-icon>chevron_right</mwc-icon>\n </button>\n </div>\n `\n }\n\n _defaultValue(type?: 'color' | 'boolean' | 'checkbox' | string) {\n switch (type || this.valuetype) {\n case 'color':\n return this.defaultValue || '#000000'\n case 'boolean':\n case 'checkbox':\n return this.defaultValue ? this.defaultValue === 'true' : false\n default:\n return this.defaultValue || ''\n }\n }\n\n _onChange(e: Event) {\n e.stopPropagation()\n\n if (this._changingNow) {\n return\n }\n\n this._changingNow = true\n\n const input = e.target as HTMLInputElement\n var value\n\n if (input.type == 'checkbox') {\n value = Boolean(input.checked)\n } else {\n value = input.value\n }\n\n const div = input.parentElement as HTMLDivElement\n\n if (div.hasAttribute('data-record') && input.hasAttribute('data-value')) {\n var dataList = div.querySelectorAll('[data-value]:not([hidden])') as NodeListOf<HTMLElement & { value: any }>\n\n for (var i = 0; i < dataList.length; i++) {\n if (dataList[i] !== input) {\n dataList[i].value = value || this._defaultValue()\n }\n }\n }\n\n if (div.hasAttribute('data-record')) {\n this._build()\n } else if (div.hasAttribute('data-record-new') && input.hasAttribute('data-value')) {\n this._add()\n }\n\n this._changingNow = false\n }\n\n _build(includeNewRecord?: boolean) {\n if (includeNewRecord) {\n var records = this.renderRoot.querySelectorAll('[data-record],[data-record-new]') as NodeListOf<HTMLElement>\n } else {\n var records = this.renderRoot.querySelectorAll('[data-record]') as NodeListOf<HTMLElement>\n }\n\n var newmap: ValueMap = {}\n\n for (var i = 0; i < records.length; i++) {\n var record = records[i]\n\n const key = (record.querySelector('[data-key]') as HTMLInputElement).value\n const inputs = record.querySelectorAll('[data-value]:not([style*=\"display: none\"])') as NodeListOf<\n HTMLInputElement & { value: any }\n >\n\n if (!inputs || inputs.length == 0) {\n continue\n }\n\n var input = inputs[inputs.length - 1]\n\n var value\n\n if (input.type == 'checkbox') {\n value = Boolean(input.checked)\n } else {\n value = input.value\n }\n\n if (key) {\n newmap[key] = value || this._defaultValue()\n }\n }\n\n this.value = newmap\n\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true, detail: this.value }))\n }\n\n /* default를 제외한 map아이템들을 template(dom-repeat)용 배열로 변환하는 함수 */\n _toArray(map: ValueMap) {\n var array: ArrayedValueMap[] = []\n\n for (var key in map) {\n if (key == 'default') continue\n array.push({\n key: key,\n value: map[key]\n })\n }\n\n return array\n }\n\n _sort() {\n const sorter =\n this.keytype === 'number'\n ? function (a: ArrayedValueMap, b: ArrayedValueMap) {\n return parseFloat(b.key) < parseFloat(a.key) ? 1 : -1\n }\n : function (a: ArrayedValueMap, b: ArrayedValueMap) {\n return b.key < a.key ? 1 : -1\n }\n\n var map = this._toArray(this.value)\n .sort(sorter)\n .reduce(function (sum, i) {\n sum[i.key] = i.value\n return sum\n }, {} as ValueMap)\n\n map.default = this.value.default\n\n this.value = map\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true, detail: this.value }))\n }\n\n _add() {\n this._build(true)\n }\n\n _delete(e: MouseEvent) {\n const record = (e.target as HTMLElement).parentElement\n\n ;(record!.querySelector('[data-key]') as HTMLInputElement)!.value = ''\n\n this._build()\n }\n}\n"]}
1
+ {"version":3,"file":"ox-input-value-map.js","sourceRoot":"","sources":["../../src/ox-input-value-map.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport './ox-input-color'\nimport './ox-input-code'\n\nimport { css, html, nothing } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { keyed } from 'lit/directives/keyed.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\nimport { OxFormField } from './ox-form-field'\n\ntype ValueMap = { default?: any; [key: string]: any }\ntype ArrayedValueMap = { key: string; value: any }\n\n/**\nkey-value map editor element\n\nExample:\n\n <ox-input-value-map \n value=${map}\n keytype=${keytype}\n valuetype=${valuetype}>\n </ox-input-value-map>\n*/\n@customElement('ox-input-value-map')\nexport class OxInputValueMap extends OxFormField {\n static styles = css`\n :host {\n display: flex;\n flex-direction: column;\n border: var(--border-dark-color);\n padding: var(--padding-narrow) var(--padding-narrow) 0 var(--padding-narrow);\n }\n\n div {\n display: flex;\n flex-flow: row nowrap;\n gap: var(--padding-default);\n }\n\n div:last-child {\n margin-bottom: var(--margin-narrow);\n }\n\n div > * {\n min-width: 0px;\n margin: 2px;\n padding: 0;\n }\n\n button {\n border: var(--button-border);\n border-radius: var(--border-radius);\n background-color: var(--button-background-color);\n padding: var(--padding-narrow) var(--padding-default);\n line-height: 0.8;\n color: var(--button-color);\n cursor: pointer;\n }\n button + button {\n margin-left: -5px;\n }\n button mwc-icon {\n font-size: var(--fontsize-default);\n }\n button:focus,\n button:hover,\n button:active {\n border: var(--button-activ-border);\n background-color: var(--button-background-focus-color);\n color: var(--theme-white-color);\n }\n\n [data-key],\n [data-value] {\n flex: 1;\n }\n\n input {\n border: 0;\n border-bottom: var(--border-dark-color);\n padding: var(--input-padding);\n font: var(--input-font);\n color: var(--primary-text-color);\n }\n\n input:focus {\n outline: none;\n border-bottom: 1px solid var(--primary-color);\n }\n\n button.hidden {\n opacity: 0;\n cursor: default;\n }\n\n ox-input-color {\n --ox-input-color-input-color: {\n margin: 1px;\n }\n --ox-input-color-input-span: {\n width: 10px;\n height: 10px;\n }\n }\n\n input[type='checkbox'] {\n flex: none;\n width: initial;\n }\n `\n\n @property({ type: Object }) value: ValueMap = {}\n @property({ type: String }) valuetype: 'string' | 'boolean' | 'color' | 'number' | 'date' | 'code' | string = 'string'\n @property({ type: String }) keytype: 'string' | 'number' = 'number'\n @property({ type: String, attribute: 'default-value' }) defaultValue?: string\n\n private _changingNow: boolean = false\n\n firstUpdated() {\n this.renderRoot.addEventListener('change', this._onChange.bind(this))\n }\n\n updated() {\n const inputs = this.renderRoot.querySelectorAll('[data-record-new] > :not([style*=\"display: none\"])') as NodeListOf<\n HTMLInputElement & { value: any }\n >\n\n inputs[0].focus()\n }\n\n valueInputTemplate(value?: any) {\n return this.valuetype == 'boolean'\n ? html`\n <input\n type=\"checkbox\"\n data-value\n .checked=${!!value}\n data-value-type=${this.valuetype}\n ?disabled=${this.disabled}\n />\n `\n : this.valuetype == 'color'\n ? html` <ox-input-color data-value value=${ifDefined(value)} ?disabled=${this.disabled}> </ox-input-color> `\n : this.valuetype == 'code'\n ? html` <ox-input-code data-value value=${ifDefined(value)} language=\"javascript\" ?disabled=${this.disabled}> </ox-input-code> `\n : html`\n <input\n type=\"text\"\n data-value\n placeholder=\"value\"\n value=${ifDefined(value)}\n data-value-type=${this.valuetype}\n ?disabled=${this.disabled}\n />\n `\n }\n\n render() {\n return html`\n ${this._toArray(this.value).map(\n item => html`\n <div data-record>\n <input type=\"text\" data-key placeholder=\"key\" .value=${item.key} ?disabled=${this.disabled} />\n ${this.valueInputTemplate(item.value)}\n <button\n class=\"record-action\"\n @click=${(e: MouseEvent) => this._delete(e)}\n tabindex=\"-1\"\n ?disabled=${this.disabled}\n >\n <mwc-icon>remove</mwc-icon>\n </button>\n </div>\n `\n )}\n ${this.disabled\n ? nothing\n : keyed(\n Date.now(),\n html`\n <div data-record-new>\n <input type=\"text\" data-key placeholder=\"key\" value=\"\" />\n\n ${this.valueInputTemplate()}\n <button class=\"record-action\" @click=${(e: MouseEvent) => this._add()} tabindex=\"-1\">\n <mwc-icon>add</mwc-icon>\n </button>\n </div>\n `\n )}\n\n <div data-record>\n <input type=\"text\" data-key data-default=\"\" value=\"default\" disabled />\n\n ${this.valueInputTemplate((this.value && this.value.default) || this._defaultValue())}\n <button class=\"record-action\" @click=${() => this._sort()} tabindex=\"-1\">\n <mwc-icon>chevron_right</mwc-icon>\n </button>\n </div>\n `\n }\n\n _defaultValue(type?: 'color' | 'boolean' | 'checkbox' | string) {\n switch (type || this.valuetype) {\n case 'color':\n return this.defaultValue || '#000000'\n case 'boolean':\n case 'checkbox':\n return this.defaultValue ? this.defaultValue === 'true' : false\n default:\n return this.defaultValue || ''\n }\n }\n\n _onChange(e: Event) {\n e.stopPropagation()\n\n if (this._changingNow) {\n return\n }\n\n this._changingNow = true\n\n const input = e.target as HTMLInputElement\n var value\n\n if (input.type == 'checkbox') {\n value = Boolean(input.checked)\n } else {\n value = input.value\n }\n\n const div = input.parentElement as HTMLDivElement\n\n if (div.hasAttribute('data-record') && input.hasAttribute('data-value')) {\n var dataList = div.querySelectorAll('[data-value]:not([hidden])') as NodeListOf<HTMLElement & { value: any }>\n\n for (var i = 0; i < dataList.length; i++) {\n if (dataList[i] !== input) {\n dataList[i].value = value || this._defaultValue()\n }\n }\n }\n\n if (div.hasAttribute('data-record')) {\n this._build()\n } else if (div.hasAttribute('data-record-new') && input.hasAttribute('data-value')) {\n this._add()\n }\n\n this._changingNow = false\n }\n\n _build(includeNewRecord?: boolean) {\n if (includeNewRecord) {\n var records = this.renderRoot.querySelectorAll('[data-record],[data-record-new]') as NodeListOf<HTMLElement>\n } else {\n var records = this.renderRoot.querySelectorAll('[data-record]') as NodeListOf<HTMLElement>\n }\n\n var newmap: ValueMap = {}\n\n for (var i = 0; i < records.length; i++) {\n var record = records[i]\n\n const key = (record.querySelector('[data-key]') as HTMLInputElement).value\n const inputs = record.querySelectorAll('[data-value]:not([style*=\"display: none\"])') as NodeListOf<\n HTMLInputElement & { value: any }\n >\n\n if (!inputs || inputs.length == 0) {\n continue\n }\n\n var input = inputs[inputs.length - 1]\n\n var value\n\n if (input.type == 'checkbox') {\n value = Boolean(input.checked)\n } else {\n value = input.value\n }\n\n if (key) {\n newmap[key] = value || this._defaultValue()\n }\n }\n\n this.value = newmap\n\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true, detail: this.value }))\n }\n\n /* default를 제외한 map아이템들을 template(dom-repeat)용 배열로 변환하는 함수 */\n _toArray(map: ValueMap) {\n var array: ArrayedValueMap[] = []\n\n for (var key in map) {\n if (key == 'default') continue\n array.push({\n key: key,\n value: map[key]\n })\n }\n\n return array\n }\n\n _sort() {\n const sorter =\n this.keytype === 'number'\n ? function (a: ArrayedValueMap, b: ArrayedValueMap) {\n return parseFloat(b.key) < parseFloat(a.key) ? 1 : -1\n }\n : function (a: ArrayedValueMap, b: ArrayedValueMap) {\n return b.key < a.key ? 1 : -1\n }\n\n var map = this._toArray(this.value)\n .sort(sorter)\n .reduce(function (sum, i) {\n sum[i.key] = i.value\n return sum\n }, {} as ValueMap)\n\n map.default = this.value.default\n\n this.value = map\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true, detail: this.value }))\n }\n\n _add() {\n this._build(true)\n }\n\n _delete(e: MouseEvent) {\n const record = (e.target as HTMLElement).parentElement\n\n ;(record!.querySelector('[data-key]') as HTMLInputElement)!.value = ''\n\n this._build()\n }\n}\n"]}
@@ -2,6 +2,7 @@
2
2
  * @license Copyright © HatioLab Inc. All rights reserved.
3
3
  */
4
4
  import './ox-input-color';
5
+ import './ox-input-code';
5
6
  import { OxFormField } from './ox-form-field.js';
6
7
  type ValueRange = {
7
8
  default?: any;
@@ -25,7 +26,7 @@ Example:
25
26
  export declare class OxInputValueRange extends OxFormField {
26
27
  static styles: import("lit").CSSResult;
27
28
  value: ValueRange;
28
- valuetype: 'string' | 'boolean' | 'color' | 'number' | 'date' | string;
29
+ valuetype: 'string' | 'boolean' | 'color' | 'number' | 'date' | 'code' | string;
29
30
  rangetype: 'string' | 'number';
30
31
  defaultValue?: string;
31
32
  private _changingNow;
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import { __decorate } from "tslib";
5
5
  import './ox-input-color';
6
+ import './ox-input-code';
6
7
  import { css, html, nothing } from 'lit';
7
8
  import { customElement, property } from 'lit/decorators.js';
8
9
  import { keyed } from 'lit/directives/keyed.js';
@@ -140,7 +141,9 @@ let OxInputValueRange = class OxInputValueRange extends OxFormField {
140
141
  `
141
142
  : this.valuetype == 'color'
142
143
  ? html ` <ox-input-color data-value value=${ifDefined(value)} ?disabled=${this.disabled}> </ox-input-color> `
143
- : html `
144
+ : this.valuetype == 'code'
145
+ ? html ` <ox-input-code data-value value=${ifDefined(value)} language="javascript" ?disabled=${this.disabled}> </ox-input-code> `
146
+ : html `
144
147
  <input
145
148
  type="text"
146
149
  data-value
@@ -1 +1 @@
1
- {"version":3,"file":"ox-input-value-ranges.js","sourceRoot":"","sources":["../../src/ox-input-value-ranges.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport './ox-input-color'\n\nimport { css, html, nothing } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { keyed } from 'lit/directives/keyed.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\nimport { OxFormField } from './ox-form-field.js'\n\ntype ValueRange = { default?: any; [fromto: string]: any }\ntype ArrayedRange = { from: any; to: any; value: any }\n\n/**\nrange value editor element\n\nExample:\n\n <ox-input-value-ranges\n .value=${range}\n valuetype=${type}\n </ox-input-value-ranges>\n*/\n\n@customElement('ox-input-value-ranges')\nexport class OxInputValueRange extends OxFormField {\n static styles = css`\n :host {\n display: flex;\n flex-direction: column;\n border: var(--border-dark-color);\n padding: var(--padding-narrow) var(--padding-narrow) 0 var(--padding-narrow);\n }\n\n div {\n display: flex;\n flex-flow: row nowrap;\n gap: var(--padding-default);\n }\n\n div:last-child {\n margin-bottom: var(--margin-narrow);\n }\n\n div > * {\n min-width: 0px;\n margin: 2px;\n padding: 0;\n }\n\n button {\n border: var(--button-border);\n border-radius: var(--border-radius);\n background-color: var(--button-background-color);\n padding: var(--padding-narrow) var(--padding-default);\n line-height: 0.8;\n color: var(--button-color);\n cursor: pointer;\n }\n button + button {\n margin-left: -5px;\n }\n button mwc-icon {\n font-size: var(--fontsize-default);\n }\n button:focus,\n button:hover,\n button:active {\n border: var(--button-activ-border);\n background-color: var(--button-background-focus-color);\n color: var(--theme-white-color);\n }\n\n [data-from],\n [data-to] {\n flex: 1;\n }\n\n [data-value] {\n flex: 2;\n }\n\n input {\n border: 0;\n border-bottom: var(--border-dark-color);\n padding: var(--input-padding);\n font: var(--input-font);\n color: var(--primary-text-color);\n }\n\n input:focus {\n outline: none;\n border-bottom: 1px solid var(--primary-color);\n }\n\n button.hidden {\n opacity: 0;\n cursor: default;\n }\n\n ox-input-color {\n --things-editor-color-input-color: {\n margin: 2px;\n }\n --things-editor-color-input-span: {\n width: 12px;\n height: 12px;\n }\n }\n\n [placeholder='value'],\n [value='default'] {\n flex: 2;\n }\n\n input[type='checkbox'] {\n flex: none;\n width: initial;\n }\n `\n\n @property({ type: Object }) value: ValueRange = {}\n @property({ type: String }) valuetype: 'string' | 'boolean' | 'color' | 'number' | 'date' | string = 'string'\n @property({ type: String }) rangetype: 'string' | 'number' = 'number'\n @property({ type: String, attribute: 'default-value' }) defaultValue?: string\n\n private _changingNow: boolean = false\n\n firstUpdated() {\n this.renderRoot.addEventListener('change', this._onChange.bind(this))\n }\n\n updated() {\n const inputs = this.renderRoot.querySelectorAll('[data-record-new] > :not([style*=\"display: none\"])') as NodeListOf<\n HTMLInputElement & { value: any }\n >\n\n inputs[0]?.focus()\n }\n\n valueInputTemplate(value?: any) {\n return this.valuetype == 'boolean'\n ? html`\n <input\n type=\"checkbox\"\n data-value\n .checked=${!!value}\n data-value-type=${this.valuetype}\n ?disabled=${this.disabled}\n />\n `\n : this.valuetype == 'color'\n ? html` <ox-input-color data-value value=${ifDefined(value)} ?disabled=${this.disabled}> </ox-input-color> `\n : html`\n <input\n type=\"text\"\n data-value\n placeholder=\"value\"\n value=${ifDefined(value)}\n data-value-type=${this.valuetype}\n ?disabled=${this.disabled}\n />\n `\n }\n\n render() {\n return html`\n ${this._toArray(this.value).map(\n item => html`\n <div data-record>\n <input type=\"text\" data-from placeholder=\"<=\" .value=${item.from} ?disabled=${this.disabled} />\n <input type=\"text\" data-to placeholder=\"&gt;\" .value=${item.to} ?disabled=${this.disabled} />\n\n ${this.valueInputTemplate(item.value)}\n <button\n class=\"record-action\"\n @click=${(e: Event) => this._delete(e)}\n tabindex=\"-1\"\n ?disabled=${this.disabled}\n >\n <mwc-icon>remove</mwc-icon>\n </button>\n </div>\n `\n )}\n ${this.disabled\n ? nothing\n : keyed(\n Date.now(),\n html`\n <div data-record-new>\n <input type=\"text\" data-from placeholder=\"<=\" value=\"\" />\n <input type=\"text\" data-to placeholder=\"&gt;\" value=\"\" />\n\n ${this.valueInputTemplate()}\n <button class=\"record-action\" @click=${(e: Event) => this._add()} tabindex=\"-1\">\n <mwc-icon>add</mwc-icon>\n </button>\n </div>\n `\n )}\n\n <div data-record>\n <input type=\"text\" data-from data-default=\"\" disabled value=\"default\" />\n <input type=\"text\" data-to placeholder=\"&gt;\" value=\"\" hidden ?disabled=${this.disabled} />\n\n ${this.valueInputTemplate((this.value && this.value.default) || this._defaultValue())}\n <button class=\"record-action\" @click=${(e: Event) => this._sort()} ?disabled=${this.disabled}>\n <mwc-icon>chevron_right</mwc-icon>\n </button>\n </div>\n `\n }\n\n _defaultValue(type?: 'color' | 'boolean' | 'checkbox' | string) {\n switch (type || this.valuetype) {\n case 'color':\n return this.defaultValue || '#000000'\n case 'boolean':\n case 'checkbox':\n return this.defaultValue ? this.defaultValue === 'true' : false\n default:\n return this.defaultValue || ''\n }\n }\n\n _onChange(e: Event) {\n e.stopPropagation()\n\n if (this._changingNow) {\n return\n }\n\n this._changingNow = true\n\n const input = e.target as HTMLInputElement\n var value = input.type === 'checkbox' ? Boolean(input.checked) : input.value\n\n const div = input.parentElement as HTMLDivElement\n if (input.hasAttribute('data-value') && input.hasAttribute('data-value')) {\n const dataList = div.querySelectorAll('[data-value]:not([hidden])') as NodeListOf<HTMLElement & { value: any }>\n\n for (var i = 0; i < dataList.length; i++) {\n if (dataList[i] !== input) {\n dataList[i].value = value || this._defaultValue()\n }\n }\n }\n\n if (div.hasAttribute('data-record')) {\n this._build()\n } else if (div.hasAttribute('data-record-new') && input.hasAttribute('data-value')) {\n this._add()\n }\n\n this._changingNow = false\n }\n\n _build(includeNewRecord?: boolean) {\n if (includeNewRecord) {\n var records = this.renderRoot.querySelectorAll('[data-record],[data-record-new]')\n } else {\n var records = this.renderRoot.querySelectorAll('[data-record]')\n }\n\n var newrange: ValueRange = {}\n for (var i = 0; i < records.length; i++) {\n const record = records[i]\n const from = (record.querySelector('[data-from]') as HTMLInputElement).value\n const to = (record.querySelector('[data-to]') as HTMLInputElement).value\n const inputs = record.querySelectorAll(\n '[data-value]:not([style*=\"display: none\"])'\n ) as NodeListOf<HTMLInputElement>\n\n if (!inputs || inputs.length == 0) {\n continue\n }\n\n var input = inputs[inputs.length - 1]\n\n var value\n\n if (input.type == 'checkbox') {\n value = Boolean(input.checked)\n } else {\n value = input.value\n }\n\n if (from) {\n if (from === 'default') newrange['default'] = value || (this.valuetype == 'color' ? '#000000' : '')\n else newrange[`${from}~${to}`] = value\n }\n }\n\n this.value = newrange\n\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true, detail: this.value }))\n }\n\n /* default를 제외한 range아이템들을 template(dom-repeat)용 배열로 변환하는 함수 */\n _toArray(range: ValueRange) {\n var array: ArrayedRange[] = []\n\n for (var key in range) {\n if (key == 'default') {\n continue\n }\n\n const fromto = key.split('~')\n\n array.push({\n from: fromto[0],\n to: fromto[1],\n value: range[key]\n })\n }\n return array\n }\n\n _sort() {\n const sorter =\n this.rangetype === 'number'\n ? function (a: ArrayedRange, b: ArrayedRange) {\n return parseFloat(b.from) < parseFloat(a.from) ? 1 : -1\n }\n : function (a: ArrayedRange, b: ArrayedRange) {\n return b.from < a.from ? 1 : -1\n }\n\n var range: ValueRange = this._toArray(this.value)\n .sort(sorter)\n .reduce(function (sum, i) {\n sum[`${i.from}~${i.to}`] = i.value\n return sum\n }, {} as ValueRange)\n range.default = this.value.default || this._defaultValue()\n\n this.value = range\n\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true, detail: this.value }))\n }\n\n _add() {\n this._build(true)\n }\n\n _delete(e: Event) {\n const record = (e.target as Element).parentElement\n\n const dataFrom = record!.querySelector('[data-from]') as HTMLInputElement\n dataFrom.value = ''\n\n this._build()\n }\n}\n"]}
1
+ {"version":3,"file":"ox-input-value-ranges.js","sourceRoot":"","sources":["../../src/ox-input-value-ranges.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport './ox-input-color'\nimport './ox-input-code'\n\nimport { css, html, nothing } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { keyed } from 'lit/directives/keyed.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\nimport { OxFormField } from './ox-form-field.js'\n\ntype ValueRange = { default?: any; [fromto: string]: any }\ntype ArrayedRange = { from: any; to: any; value: any }\n\n/**\nrange value editor element\n\nExample:\n\n <ox-input-value-ranges\n .value=${range}\n valuetype=${type}\n </ox-input-value-ranges>\n*/\n\n@customElement('ox-input-value-ranges')\nexport class OxInputValueRange extends OxFormField {\n static styles = css`\n :host {\n display: flex;\n flex-direction: column;\n border: var(--border-dark-color);\n padding: var(--padding-narrow) var(--padding-narrow) 0 var(--padding-narrow);\n }\n\n div {\n display: flex;\n flex-flow: row nowrap;\n gap: var(--padding-default);\n }\n\n div:last-child {\n margin-bottom: var(--margin-narrow);\n }\n\n div > * {\n min-width: 0px;\n margin: 2px;\n padding: 0;\n }\n\n button {\n border: var(--button-border);\n border-radius: var(--border-radius);\n background-color: var(--button-background-color);\n padding: var(--padding-narrow) var(--padding-default);\n line-height: 0.8;\n color: var(--button-color);\n cursor: pointer;\n }\n button + button {\n margin-left: -5px;\n }\n button mwc-icon {\n font-size: var(--fontsize-default);\n }\n button:focus,\n button:hover,\n button:active {\n border: var(--button-activ-border);\n background-color: var(--button-background-focus-color);\n color: var(--theme-white-color);\n }\n\n [data-from],\n [data-to] {\n flex: 1;\n }\n\n [data-value] {\n flex: 2;\n }\n\n input {\n border: 0;\n border-bottom: var(--border-dark-color);\n padding: var(--input-padding);\n font: var(--input-font);\n color: var(--primary-text-color);\n }\n\n input:focus {\n outline: none;\n border-bottom: 1px solid var(--primary-color);\n }\n\n button.hidden {\n opacity: 0;\n cursor: default;\n }\n\n ox-input-color {\n --things-editor-color-input-color: {\n margin: 2px;\n }\n --things-editor-color-input-span: {\n width: 12px;\n height: 12px;\n }\n }\n\n [placeholder='value'],\n [value='default'] {\n flex: 2;\n }\n\n input[type='checkbox'] {\n flex: none;\n width: initial;\n }\n `\n\n @property({ type: Object }) value: ValueRange = {}\n @property({ type: String }) valuetype: 'string' | 'boolean' | 'color' | 'number' | 'date' | 'code' | string = 'string'\n @property({ type: String }) rangetype: 'string' | 'number' = 'number'\n @property({ type: String, attribute: 'default-value' }) defaultValue?: string\n\n private _changingNow: boolean = false\n\n firstUpdated() {\n this.renderRoot.addEventListener('change', this._onChange.bind(this))\n }\n\n updated() {\n const inputs = this.renderRoot.querySelectorAll('[data-record-new] > :not([style*=\"display: none\"])') as NodeListOf<\n HTMLInputElement & { value: any }\n >\n\n inputs[0]?.focus()\n }\n\n valueInputTemplate(value?: any) {\n return this.valuetype == 'boolean'\n ? html`\n <input\n type=\"checkbox\"\n data-value\n .checked=${!!value}\n data-value-type=${this.valuetype}\n ?disabled=${this.disabled}\n />\n `\n : this.valuetype == 'color'\n ? html` <ox-input-color data-value value=${ifDefined(value)} ?disabled=${this.disabled}> </ox-input-color> `\n : this.valuetype == 'code'\n ? html` <ox-input-code data-value value=${ifDefined(value)} language=\"javascript\" ?disabled=${this.disabled}> </ox-input-code> `\n : html`\n <input\n type=\"text\"\n data-value\n placeholder=\"value\"\n value=${ifDefined(value)}\n data-value-type=${this.valuetype}\n ?disabled=${this.disabled}\n />\n `\n }\n\n render() {\n return html`\n ${this._toArray(this.value).map(\n item => html`\n <div data-record>\n <input type=\"text\" data-from placeholder=\"<=\" .value=${item.from} ?disabled=${this.disabled} />\n <input type=\"text\" data-to placeholder=\"&gt;\" .value=${item.to} ?disabled=${this.disabled} />\n\n ${this.valueInputTemplate(item.value)}\n <button\n class=\"record-action\"\n @click=${(e: Event) => this._delete(e)}\n tabindex=\"-1\"\n ?disabled=${this.disabled}\n >\n <mwc-icon>remove</mwc-icon>\n </button>\n </div>\n `\n )}\n ${this.disabled\n ? nothing\n : keyed(\n Date.now(),\n html`\n <div data-record-new>\n <input type=\"text\" data-from placeholder=\"<=\" value=\"\" />\n <input type=\"text\" data-to placeholder=\"&gt;\" value=\"\" />\n\n ${this.valueInputTemplate()}\n <button class=\"record-action\" @click=${(e: Event) => this._add()} tabindex=\"-1\">\n <mwc-icon>add</mwc-icon>\n </button>\n </div>\n `\n )}\n\n <div data-record>\n <input type=\"text\" data-from data-default=\"\" disabled value=\"default\" />\n <input type=\"text\" data-to placeholder=\"&gt;\" value=\"\" hidden ?disabled=${this.disabled} />\n\n ${this.valueInputTemplate((this.value && this.value.default) || this._defaultValue())}\n <button class=\"record-action\" @click=${(e: Event) => this._sort()} ?disabled=${this.disabled}>\n <mwc-icon>chevron_right</mwc-icon>\n </button>\n </div>\n `\n }\n\n _defaultValue(type?: 'color' | 'boolean' | 'checkbox' | string) {\n switch (type || this.valuetype) {\n case 'color':\n return this.defaultValue || '#000000'\n case 'boolean':\n case 'checkbox':\n return this.defaultValue ? this.defaultValue === 'true' : false\n default:\n return this.defaultValue || ''\n }\n }\n\n _onChange(e: Event) {\n e.stopPropagation()\n\n if (this._changingNow) {\n return\n }\n\n this._changingNow = true\n\n const input = e.target as HTMLInputElement\n var value = input.type === 'checkbox' ? Boolean(input.checked) : input.value\n\n const div = input.parentElement as HTMLDivElement\n if (input.hasAttribute('data-value') && input.hasAttribute('data-value')) {\n const dataList = div.querySelectorAll('[data-value]:not([hidden])') as NodeListOf<HTMLElement & { value: any }>\n\n for (var i = 0; i < dataList.length; i++) {\n if (dataList[i] !== input) {\n dataList[i].value = value || this._defaultValue()\n }\n }\n }\n\n if (div.hasAttribute('data-record')) {\n this._build()\n } else if (div.hasAttribute('data-record-new') && input.hasAttribute('data-value')) {\n this._add()\n }\n\n this._changingNow = false\n }\n\n _build(includeNewRecord?: boolean) {\n if (includeNewRecord) {\n var records = this.renderRoot.querySelectorAll('[data-record],[data-record-new]')\n } else {\n var records = this.renderRoot.querySelectorAll('[data-record]')\n }\n\n var newrange: ValueRange = {}\n for (var i = 0; i < records.length; i++) {\n const record = records[i]\n const from = (record.querySelector('[data-from]') as HTMLInputElement).value\n const to = (record.querySelector('[data-to]') as HTMLInputElement).value\n const inputs = record.querySelectorAll(\n '[data-value]:not([style*=\"display: none\"])'\n ) as NodeListOf<HTMLInputElement>\n\n if (!inputs || inputs.length == 0) {\n continue\n }\n\n var input = inputs[inputs.length - 1]\n\n var value\n\n if (input.type == 'checkbox') {\n value = Boolean(input.checked)\n } else {\n value = input.value\n }\n\n if (from) {\n if (from === 'default') newrange['default'] = value || (this.valuetype == 'color' ? '#000000' : '')\n else newrange[`${from}~${to}`] = value\n }\n }\n\n this.value = newrange\n\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true, detail: this.value }))\n }\n\n /* default를 제외한 range아이템들을 template(dom-repeat)용 배열로 변환하는 함수 */\n _toArray(range: ValueRange) {\n var array: ArrayedRange[] = []\n\n for (var key in range) {\n if (key == 'default') {\n continue\n }\n\n const fromto = key.split('~')\n\n array.push({\n from: fromto[0],\n to: fromto[1],\n value: range[key]\n })\n }\n return array\n }\n\n _sort() {\n const sorter =\n this.rangetype === 'number'\n ? function (a: ArrayedRange, b: ArrayedRange) {\n return parseFloat(b.from) < parseFloat(a.from) ? 1 : -1\n }\n : function (a: ArrayedRange, b: ArrayedRange) {\n return b.from < a.from ? 1 : -1\n }\n\n var range: ValueRange = this._toArray(this.value)\n .sort(sorter)\n .reduce(function (sum, i) {\n sum[`${i.from}~${i.to}`] = i.value\n return sum\n }, {} as ValueRange)\n range.default = this.value.default || this._defaultValue()\n\n this.value = range\n\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true, detail: this.value }))\n }\n\n _add() {\n this._build(true)\n }\n\n _delete(e: Event) {\n const record = (e.target as Element).parentElement\n\n const dataFrom = record!.querySelector('[data-from]') as HTMLInputElement\n dataFrom.value = ''\n\n this._build()\n }\n}\n"]}