@operato/property-editor 7.1.31 → 7.1.32

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.
Files changed (58) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/src/ox-property-editor-password.js +1 -0
  3. package/dist/src/ox-property-editor-password.js.map +1 -1
  4. package/dist/src/ox-property-editor-string.js +1 -0
  5. package/dist/src/ox-property-editor-string.js.map +1 -1
  6. package/dist/tsconfig.tsbuildinfo +1 -1
  7. package/package.json +6 -6
  8. package/.storybook/main.js +0 -3
  9. package/.storybook/preview.js +0 -52
  10. package/.storybook/server.mjs +0 -8
  11. package/demo/index.html +0 -323
  12. package/src/index.ts +0 -3
  13. package/src/ox-properties-dynamic-view.ts +0 -145
  14. package/src/ox-property-editor-3axis.ts +0 -19
  15. package/src/ox-property-editor-3dish.ts +0 -29
  16. package/src/ox-property-editor-action.ts +0 -42
  17. package/src/ox-property-editor-angle.ts +0 -21
  18. package/src/ox-property-editor-checkbox.ts +0 -18
  19. package/src/ox-property-editor-color.ts +0 -23
  20. package/src/ox-property-editor-crontab.ts +0 -19
  21. package/src/ox-property-editor-data.ts +0 -18
  22. package/src/ox-property-editor-date.ts +0 -12
  23. package/src/ox-property-editor-datetime.ts +0 -12
  24. package/src/ox-property-editor-duration.ts +0 -19
  25. package/src/ox-property-editor-file.ts +0 -26
  26. package/src/ox-property-editor-gradient-colorstops.ts +0 -27
  27. package/src/ox-property-editor-hashtags.ts +0 -22
  28. package/src/ox-property-editor-image.ts +0 -22
  29. package/src/ox-property-editor-key-values.ts +0 -25
  30. package/src/ox-property-editor-legend.ts +0 -12
  31. package/src/ox-property-editor-mass-fraction.ts +0 -26
  32. package/src/ox-property-editor-month.ts +0 -12
  33. package/src/ox-property-editor-multiple-colors.ts +0 -16
  34. package/src/ox-property-editor-number.ts +0 -30
  35. package/src/ox-property-editor-options.ts +0 -23
  36. package/src/ox-property-editor-partition-keys.ts +0 -23
  37. package/src/ox-property-editor-password.ts +0 -20
  38. package/src/ox-property-editor-range.ts +0 -27
  39. package/src/ox-property-editor-scene-component-id.ts +0 -21
  40. package/src/ox-property-editor-select.ts +0 -85
  41. package/src/ox-property-editor-signature.ts +0 -23
  42. package/src/ox-property-editor-solid-colorstops.ts +0 -27
  43. package/src/ox-property-editor-string.ts +0 -20
  44. package/src/ox-property-editor-table-column-config.ts +0 -23
  45. package/src/ox-property-editor-table.ts +0 -23
  46. package/src/ox-property-editor-textarea.ts +0 -35
  47. package/src/ox-property-editor-time.ts +0 -12
  48. package/src/ox-property-editor-unit-number.ts +0 -33
  49. package/src/ox-property-editor-value-map.ts +0 -27
  50. package/src/ox-property-editor-value-ranges.ts +0 -27
  51. package/src/ox-property-editor-work-shift.ts +0 -24
  52. package/src/ox-property-editor.ts +0 -243
  53. package/src/types.ts +0 -23
  54. package/stories/ox-properties-dynamic-view.stories.ts +0 -311
  55. package/stories/ox-properties-editor-textarea.stories.ts +0 -97
  56. package/tsconfig.json +0 -24
  57. package/web-dev-server.config.mjs +0 -28
  58. package/web-test-runner.config.mjs +0 -29
@@ -1,33 +0,0 @@
1
- import '@operato/input/ox-input-unit-number.js'
2
-
3
- import { html, TemplateResult } from 'lit'
4
- import { customElement } from 'lit/decorators.js'
5
-
6
- import { OxPropertyEditor } from './ox-property-editor.js'
7
- import { PropertySpec } from './types.js'
8
-
9
- @customElement('ox-property-editor-unit-number')
10
- export class OxPropertyEditorNumberUnit extends OxPropertyEditor {
11
- override makeup(v: string) {
12
- return Number(v)
13
- }
14
-
15
- editorTemplate(value: any, spec: PropertySpec): TemplateResult {
16
- const { step, min, max, unit, userUnit } = spec.property || {}
17
-
18
- return html`
19
- <ox-input-unit-number
20
- id="editor"
21
- type="number"
22
- placeholder=${spec.placeholder || ''}
23
- .stdUnit=${unit}
24
- .userUnit=${userUnit || unit}
25
- .value=${value}
26
- .step=${step}
27
- .min=${min}
28
- .max=${max}
29
- ?disabled=${this.disabled}
30
- ></ox-input-unit-number>
31
- `
32
- }
33
- }
@@ -1,27 +0,0 @@
1
- import '@operato/input/ox-input-value-map.js'
2
-
3
- import { html, TemplateResult } from 'lit'
4
- import { customElement } from 'lit/decorators.js'
5
-
6
- import { OxPropertyEditor } from './ox-property-editor.js'
7
- import { PropertySpec } from './types.js'
8
-
9
- @customElement('ox-property-editor-value-map')
10
- export class OxPropertyEditorValueMap extends OxPropertyEditor {
11
- editorTemplate(value: any, spec: PropertySpec): TemplateResult {
12
- const { property } = spec
13
- const valuetype = property?.valuetype || 'string'
14
- /* IMPLEMENT-ME valuetype 에 editor를 전달할 수 있는 기능 개발 */
15
- const { fullwidth = true } = spec.editor || {}
16
-
17
- return html`
18
- <ox-input-value-map
19
- id="editor"
20
- .valuetype=${valuetype}
21
- .value=${value}
22
- ?fullwidth=${fullwidth}
23
- ?disabled=${this.disabled}
24
- ></ox-input-value-map>
25
- `
26
- }
27
- }
@@ -1,27 +0,0 @@
1
- import '@operato/input/ox-input-value-ranges.js'
2
-
3
- import { html, TemplateResult } from 'lit'
4
- import { customElement } from 'lit/decorators.js'
5
-
6
- import { OxPropertyEditor } from './ox-property-editor.js'
7
- import { PropertySpec } from './types.js'
8
-
9
- @customElement('ox-property-editor-value-ranges')
10
- export class OxPropertyEditorValueRanges extends OxPropertyEditor {
11
- editorTemplate(value: any, spec: PropertySpec): TemplateResult {
12
- const { property } = spec
13
- const valuetype = property?.valuetype || 'string'
14
- /* IMPLEMENT-ME valuetype 에 editor를 전달할 수 있는 기능 개발 */
15
- const { fullwidth = true } = spec.editor || {}
16
-
17
- return html`
18
- <ox-input-value-ranges
19
- id="editor"
20
- .valuetype=${valuetype}
21
- .value=${value}
22
- ?fullwidth=${fullwidth}
23
- ?disabled=${this.disabled}
24
- ></ox-input-value-ranges>
25
- `
26
- }
27
- }
@@ -1,24 +0,0 @@
1
- import '@operato/input/ox-input-work-shift.js'
2
-
3
- import { html, TemplateResult } from 'lit'
4
- import { customElement } from 'lit/decorators.js'
5
-
6
- import { OxPropertyEditor } from './ox-property-editor.js'
7
- import { PropertySpec } from './types.js'
8
-
9
- @customElement('ox-property-editor-work-shift')
10
- export class OxPropertyEditorWorkShift extends OxPropertyEditor {
11
- editorTemplate(value: any, spec: PropertySpec): TemplateResult {
12
- const { editor } = spec
13
- const { fullwidth = true } = editor || {}
14
-
15
- return html`
16
- <ox-input-work-shift
17
- id="editor"
18
- .value=${value}
19
- ?fullwidth=${fullwidth}
20
- ?disabled=${this.disabled}
21
- ></ox-input-work-shift>
22
- `
23
- }
24
- }
@@ -1,243 +0,0 @@
1
- import '@operato/i18n/ox-i18n.js'
2
-
3
- import { css, html, LitElement, TemplateResult } from 'lit'
4
- import { property, state } from 'lit/decorators.js'
5
- import deepClone from 'lodash-es/cloneDeep'
6
-
7
- import { EditorProperty, PropertySpec } from './types'
8
-
9
- export class OxPropertyEditor extends LitElement {
10
- static registry: { [type: string]: string } = {}
11
-
12
- public static register(types: { [type: string]: string }) {
13
- Object.keys(types).forEach(type => {
14
- OxPropertyEditor.registry[type] = types[type]
15
- })
16
- }
17
-
18
- public static getEditor(type: string): string {
19
- return OxPropertyEditor.registry[type]
20
- }
21
-
22
- static styles = [
23
- css`
24
- :host {
25
- margin: 5px;
26
-
27
- display: grid;
28
- grid-template-columns: repeat(10, 1fr);
29
- grid-gap: 5px;
30
- grid-auto-rows: minmax(24px, auto);
31
-
32
- align-items: center;
33
-
34
- color: var(--property-sidebar-fieldset-legend-color, var(--md-sys-color-on-secondary-container));
35
- }
36
-
37
- :host > * {
38
- box-sizing: border-box;
39
-
40
- grid-column: span 7;
41
- order: 2;
42
-
43
- align-self: stretch;
44
- }
45
-
46
- :host > label {
47
- grid-column: span 3;
48
- order: 1;
49
-
50
- text-align: right;
51
-
52
- font: var(--label-font);
53
- text-transform: capitalize;
54
-
55
- align-self: center;
56
- }
57
-
58
- :host > input[type='checkbox'] ~ label,
59
- :host > ox-checkbox ~ label {
60
- grid-column: span 6;
61
- order: 2;
62
-
63
- text-align: left;
64
- }
65
-
66
- select,
67
- ox-select,
68
- input:not([type='checkbox']) {
69
- border: 1px solid rgba(0, 0, 0, 0.2);
70
- border-radius: 4px;
71
- }
72
-
73
- :host > legend {
74
- grid-column: 1 / -1;
75
-
76
- display: inline-block;
77
-
78
- text-align: left;
79
- text-transform: capitalize;
80
- }
81
-
82
- :host > [fullwidth] {
83
- grid-column: 1 / -1;
84
- }
85
-
86
- :host > input[type='checkbox'],
87
- :host > ox-checkbox {
88
- grid-column: span 4;
89
- order: 1;
90
-
91
- justify-self: end;
92
- align-self: center;
93
- }
94
-
95
- ox-input-code,
96
- ox-input-data,
97
- .multiline-input {
98
- min-height: 300px;
99
- border-radius: var(--spacing-small);
100
- }
101
-
102
- :host > div {
103
- display: flex;
104
- flex-direction: column;
105
- gap: 3px;
106
- }
107
-
108
- div[data-index] {
109
- display: flex;
110
- min-height: 24px;
111
- }
112
-
113
- div[data-index] > * {
114
- flex: 1;
115
- }
116
- `
117
- ]
118
-
119
- @property({ type: Object }) value: any
120
- @property({ type: String }) type!: string
121
- @property({ type: String, attribute: true, reflect: true }) name!: string
122
- @property({ type: String }) label!: string
123
- @property({ type: String }) placeholder?: string
124
- @property({ type: Object }) property?: any
125
- @property({ type: Object }) editor?: EditorProperty
126
- @property({ type: Object }) host: any
127
- @property({ type: Array }) quantifier?: [min: number, max: number] = [1, 1]
128
- @property({ type: Object }) observeHandler?: (value: any) => void
129
- @property({ type: Object }) defaultValue?: any
130
- @property({ type: Object }) context?: any
131
- @property({ type: Boolean }) disabled?: boolean
132
-
133
- private observing: boolean = false
134
-
135
- connectedCallback() {
136
- super.connectedCallback()
137
-
138
- this.renderRoot.addEventListener('change', this._valueChanged.bind(this))
139
- }
140
-
141
- editorTemplate(value: any, spec: PropertySpec): TemplateResult {
142
- return html``
143
- }
144
-
145
- getDefaultValue() {
146
- return typeof this.defaultValue == 'function' ? this.defaultValue.call(this) : this.defaultValue
147
- }
148
-
149
- render() {
150
- const { value = this.getDefaultValue(), quantifier } = this
151
- const [min = 1, max = 1] = quantifier || [1, 1]
152
-
153
- return html`
154
- ${max <= 1
155
- ? this.editorTemplate(value, this)
156
- : html`
157
- <div ?fullwidth=${this.editor?.fullwidth}>
158
- ${new Array(max)
159
- .fill('')
160
- .map(
161
- (_, idx) => html` <div editor data-index=${idx}>${this.editorTemplate(value?.[idx], this)}</div> `
162
- )}
163
- </div>
164
- `}
165
- ${this.label
166
- ? html`
167
- <label
168
- for="editor"
169
- @click=${() => {
170
- const forElement = this.renderRoot.querySelector('#editor')!
171
- const isCustomElement = forElement?.nodeName.includes('-')
172
-
173
- if (isCustomElement) {
174
- ;(forElement as HTMLElement).click()
175
- }
176
- }}
177
- >
178
- <ox-i18n msgid=${this._computeLabelId(this.label)}>${this.label}</ox-i18n>
179
- </label>
180
- `
181
- : html``}
182
- `
183
- }
184
-
185
- @state() __by_me = false
186
-
187
- shouldUpdate(changedProperties: any) {
188
- if (this.__by_me) {
189
- return false
190
- }
191
-
192
- if (changedProperties.has('value')) {
193
- this.__by_me = true
194
- this.value = this.makeup(this.value)
195
- this.__by_me = false
196
- }
197
-
198
- return true
199
- }
200
-
201
- get valueProperty() {
202
- return 'value'
203
- }
204
-
205
- makeup(v: any) {
206
- return deepClone(v)
207
- }
208
-
209
- _computeLabelId(label: string) {
210
- if (label.indexOf('label.') >= 0) return label
211
-
212
- return 'label.' + label
213
- }
214
-
215
- _valueChanged(e: Event) {
216
- e.stopPropagation()
217
- const editor = e.target as HTMLInputElement
218
-
219
- const [min = 1, max = 1] = this.quantifier || []
220
- const value = this.makeup((editor as any)[this.valueProperty])
221
-
222
- if (max > 1) {
223
- const index = Number(editor.closest('[data-index]')?.getAttribute('data-index'))
224
- var array: any[] = this.value instanceof Array ? [...this.value] : []
225
- array[index] = value
226
- this.value = array
227
- } else {
228
- this.value = value
229
- }
230
-
231
- this.dispatchEvent(new CustomEvent('change', { bubbles: true, composed: true }))
232
-
233
- this.observe(this.value)
234
- }
235
-
236
- observe(value: any) {
237
- if (this.observeHandler && !this.observing) {
238
- this.observing = true
239
- this.observeHandler.call(this, value)
240
- this.observing = false
241
- }
242
- }
243
- }
package/src/types.ts DELETED
@@ -1,23 +0,0 @@
1
- export type EditorProperty = {
2
- fullwidth?: boolean
3
- }
4
-
5
- type WritableKeysOf<T> = {
6
- [P in keyof T]: T[P] extends Readonly<T[P]> ? never : P
7
- }[keyof T]
8
-
9
- export type CSSStyles = Pick<CSSStyleDeclaration, WritableKeysOf<CSSStyleDeclaration>>
10
-
11
- export type PropertySpec = {
12
- type: string
13
- label: string
14
- name: string
15
- placeholder?: string
16
- property?: any
17
- editor?: EditorProperty
18
- quantifier?: [min: number, max: number]
19
- observe?: (value: any) => void
20
- defaultValue?: any
21
- disabled?: boolean
22
- styles?: CSSStyles
23
- }
@@ -1,311 +0,0 @@
1
- import { TemplateResult, html } from 'lit'
2
-
3
- import '../src/ox-property-editor-3axis.js'
4
- import '../src/ox-property-editor-3dish.js'
5
- import '../src/ox-property-editor-angle.js'
6
- import '../src/ox-property-editor-checkbox.js'
7
- import '../src/ox-property-editor-color.js'
8
- import '../src/ox-property-editor-date.js'
9
- import '../src/ox-property-editor-datetime.js'
10
- import '../src/ox-property-editor-legend.js'
11
- import '../src/ox-property-editor-number.js'
12
- import '../src/ox-property-editor-unit-number.js'
13
- import '../src/ox-property-editor-password.js'
14
- import '../src/ox-property-editor-range.js'
15
- import '../src/ox-property-editor-select.js'
16
- import '../src/ox-property-editor-string.js'
17
- import '../src/ox-property-editor-image.js'
18
- import '../src/ox-property-editor-file.js'
19
- import '../src/ox-property-editor-multiple-colors.js'
20
- import '../src/ox-property-editor-crontab.js'
21
- import '../src/ox-property-editor-work-shift.js'
22
- import '../src/ox-property-editor-partition-keys.js'
23
- import '../src/ox-property-editor-key-values.js'
24
- import '../src/ox-property-editor-textarea.js'
25
- import '../src/ox-property-editor-options.js'
26
- import '../src/ox-property-editor-hashtags.js'
27
- import '../src/ox-property-editor-signature.js'
28
-
29
- import '../src/ox-properties-dynamic-view.js'
30
-
31
- import { OxPropertyEditor } from '../src/ox-property-editor.js'
32
- import { PropertySpec } from '../src/types.js'
33
-
34
- export default {
35
- title: 'Properties Dynamic View',
36
- component: 'ox-properties-dynamic-view',
37
- argTypes: {
38
- title: { control: 'text' },
39
- counter: { control: 'number' },
40
- textColor: { control: 'color' }
41
- }
42
- }
43
-
44
- interface Story<T> {
45
- (args: T): TemplateResult
46
- args?: Partial<T>
47
- argTypes?: Record<string, unknown>
48
- }
49
-
50
- interface ArgTypes {
51
- title?: string
52
- counter?: number
53
- textColor?: string
54
- slot?: TemplateResult
55
- }
56
-
57
- OxPropertyEditor.register({
58
- legend: 'ox-property-editor-legend',
59
- number: 'ox-property-editor-number',
60
- 'unit-number': 'ox-property-editor-unit-number',
61
- slider: 'ox-property-editor-range',
62
- password: 'ox-property-editor-password',
63
- angle: 'ox-property-editor-angle',
64
- string: 'ox-property-editor-string',
65
- textarea: 'ox-property-editor-textarea',
66
- javascript: 'ox-property-editor-textarea',
67
- checkbox: 'ox-property-editor-checkbox',
68
- boolean: 'ox-property-editor-checkbox',
69
- select: 'ox-property-editor-select',
70
- date: 'ox-property-editor-date',
71
- datetime: 'ox-property-editor-datetime',
72
- options: 'ox-property-editor-options',
73
- data: 'ox-property-editor-data',
74
- file: 'ox-property-editor-file',
75
- image: 'ox-property-editor-image',
76
- signature: 'ox-property-editor-signature',
77
- 'range-input': 'ox-property-editor-range',
78
- 'attachment-selector': 'ox-property-editor-attachment-selector',
79
- 'gltf-selector': 'ox-property-editor-attachment-selector',
80
- 'image-selector': 'ox-property-editor-image-selector',
81
- color: 'ox-property-editor-color',
82
- 'solid-color-stops': 'ox-property-editor-solid-colorstops',
83
- 'gradient-color-stops': 'ox-property-editor-gradient-colorstops',
84
- 'multiple-color': 'ox-property-editor-multiple-colors',
85
- map: 'ox-property-editor-value-map',
86
- range: 'ox-property-editor-value-ranges',
87
- graphql: 'ox-property-editor-graphql',
88
- 'editor-table': 'ox-property-editor-table',
89
- 'id-input': 'ox-property-editor-scene-component-id',
90
- 'font-selector': 'ox-property-editor-font-selector',
91
- crontab: 'ox-property-editor-crontab',
92
- shift: 'ox-property-editor-work-shift',
93
- 'partition-keys': 'ox-property-editor-partition-keys',
94
- 'key-values': 'ox-property-editor-key-values',
95
- hashtags: 'ox-property-editor-hashtags',
96
- '3axis': 'ox-property-editor-3axis',
97
- '3dish': 'ox-property-editor-3dish'
98
- })
99
-
100
- const properties = [
101
- {
102
- type: 'string',
103
- label: 'ABC',
104
- name: 'ABC',
105
- quantifier: [1, 20]
106
- },
107
- {
108
- type: 'password',
109
- label: 'PWD',
110
- name: 'PWD'
111
- },
112
- {
113
- type: 'select',
114
- label: 'SLT',
115
- name: 'SLT',
116
- property: {
117
- options: [
118
- { display: '', value: '' },
119
- { display: 'AAA', value: 'aaa' },
120
- { display: 'BBB', value: 'bbb' }
121
- ]
122
- }
123
- },
124
- {
125
- type: 'number',
126
- label: 'N#',
127
- name: 'N#'
128
- },
129
- {
130
- type: 'unit-number',
131
- label: 'NU',
132
- name: 'NU',
133
- property: {
134
- unit: 'K'
135
- }
136
- },
137
- {
138
- type: 'checkbox',
139
- label: 'XV',
140
- name: 'XV'
141
- },
142
- {
143
- type: 'angle',
144
- label: 'Degree',
145
- name: 'Degree'
146
- },
147
- {
148
- type: 'date',
149
- label: 'DD',
150
- name: 'DD'
151
- },
152
- {
153
- type: 'datetime',
154
- label: 'DT',
155
- name: 'DT'
156
- },
157
- {
158
- type: 'legend',
159
- label: '',
160
- name: 'NEW-GROUP',
161
- property: {
162
- label: 'NEW-GROUP'
163
- }
164
- },
165
- {
166
- type: 'slider',
167
- label: 'S',
168
- name: 'S',
169
- property: {
170
- min: 30,
171
- max: 300,
172
- step: 10
173
- }
174
- },
175
- {
176
- type: 'textarea',
177
- label: 'TA',
178
- name: 'TA',
179
- styles: {
180
- flex: '1'
181
- }
182
- },
183
- {
184
- type: 'options',
185
- label: 'OT',
186
- name: 'OT',
187
- editor: {
188
- fullwidth: true
189
- }
190
- },
191
- {
192
- type: 'data',
193
- label: 'DT',
194
- name: 'DT'
195
- },
196
- {
197
- type: 'color',
198
- label: 'CL',
199
- name: 'CL'
200
- },
201
- {
202
- type: 'multiple-color',
203
- label: 'CLS',
204
- name: 'CLS'
205
- },
206
- {
207
- type: 'image',
208
- label: 'IM',
209
- name: 'IM'
210
- },
211
- {
212
- type: 'signature',
213
- label: 'ST',
214
- name: 'ST'
215
- },
216
- {
217
- type: 'file',
218
- label: 'FL',
219
- name: 'FL',
220
- property: {
221
- multiple: true
222
- }
223
- },
224
- {
225
- type: 'crontab',
226
- label: 'schedule',
227
- name: 'schedule'
228
- },
229
- {
230
- type: 'shift',
231
- label: 'shift',
232
- name: 'shift'
233
- },
234
- {
235
- type: 'key-values',
236
- label: 'key-values',
237
- name: 'key-values'
238
- },
239
- {
240
- type: 'hashtags',
241
- label: 'hashtags',
242
- name: 'hashtags'
243
- },
244
- {
245
- type: '3dish',
246
- label: '3dish',
247
- name: '3dish'
248
- }
249
- ] as PropertySpec[]
250
-
251
- const value = {
252
- ABC: [4, 3, 2, 1],
253
- S: 290,
254
- SLT: 'bbb',
255
- NU: 1000,
256
- IM: 'https://www.hatiolab.com/assets/img/arch-thingsboard.png',
257
- ST: 'data:image/png;base64,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',
258
- CLS: ['yello', 'green'],
259
- schedule: '* * * * * *',
260
- shift: [
261
- {
262
- name: 'DAY',
263
- fromDate: -1,
264
- fromTime: '22:00',
265
- toDate: 0,
266
- toTime: '06:00'
267
- },
268
- {
269
- name: 'SWING',
270
- fromDate: 0,
271
- fromTime: '06:00',
272
- toDate: 0,
273
- toTime: '14:00'
274
- },
275
- {
276
- name: 'NIGHT',
277
- fromDate: 0,
278
- fromTime: '14:00',
279
- toDate: 0,
280
- toTime: '22:00'
281
- }
282
- ],
283
- hashtags: ['abc', 'def'],
284
- '3dish': {
285
- dimension: { x: 1, y: 1, z: 1 },
286
- position: { x: 1, y: 1, z: 1 },
287
- rotate: { x: 1, y: 1, z: 1 },
288
- scale: { x: 1, y: 1, z: 1 }
289
- }
290
- }
291
-
292
- const Template: Story<ArgTypes> = () => html`
293
- <link href="/themes/app-theme.css" rel="stylesheet" />
294
-
295
- <link
296
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
297
- rel="stylesheet"
298
- />
299
- <link
300
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
301
- rel="stylesheet"
302
- />
303
- <link
304
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
305
- rel="stylesheet"
306
- />
307
-
308
- <ox-properties-dynamic-view .props=${properties} .value=${value}></ox-properties-dynamic-view>
309
- `
310
-
311
- export const Regular = Template.bind({})