@operato/scene-basic 8.0.0-beta.1 → 8.0.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/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@operato/scene-basic",
3
3
  "description": "basic component for things-scene",
4
4
  "author": "heartyoh",
5
- "version": "8.0.0-beta.1",
5
+ "version": "8.0.0",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/index.js",
8
8
  "license": "MIT",
@@ -27,13 +27,13 @@
27
27
  "migration": "things-factory-migration"
28
28
  },
29
29
  "dependencies": {
30
- "@hatiolab/things-scene": "^8.0.0-beta",
30
+ "@hatiolab/things-scene": "^3.4.0",
31
31
  "@wizpanda/super-gif": "^0.0.6"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@hatiolab/prettier-config": "^1.0.0",
35
- "@things-factory/builder": "^8.0.0-beta",
36
- "@things-factory/operato-board": "^8.0.0-beta",
35
+ "@things-factory/builder": "^8.0.0",
36
+ "@things-factory/operato-board": "^8.0.0",
37
37
  "@typescript-eslint/eslint-plugin": "^4.33.0",
38
38
  "@typescript-eslint/parser": "^4.33.0",
39
39
  "@web/dev-server": "^0.1.28",
@@ -58,5 +58,5 @@
58
58
  "prettier --write"
59
59
  ]
60
60
  },
61
- "gitHead": "acb632aa522d8348f2602bcb614e2819d19a09ed"
61
+ "gitHead": "606d806afe9351c028c8b8a6726ad7e5da694b18"
62
62
  }
package/CHANGELOG.md DELETED
@@ -1,259 +0,0 @@
1
- # Change Log
2
-
3
- All notable changes to this project will be documented in this file.
4
- See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
-
6
- ## [8.0.0-beta.1](https://github.com/things-scene/operato-scene/compare/v8.0.0-beta.0...v8.0.0-beta.1) (2025-01-07)
7
-
8
-
9
- ### :bug: Bug Fix
10
-
11
- * [@things-factory](https://github.com/things-factory)@v8.0.0-beta ([2cd95a8](https://github.com/things-scene/operato-scene/commit/2cd95a8b07b588f3d96e5da2a0309910e683e33f))
12
-
13
-
14
-
15
- ## [8.0.0-beta.0](https://github.com/things-scene/operato-scene/compare/v8.0.0-alpha.12...v8.0.0-beta.0) (2025-01-07)
16
-
17
-
18
- ### :bug: Bug Fix
19
-
20
- * @hatiolab/things-scene@^8.0.0-beta ([c32f4c0](https://github.com/things-scene/operato-scene/commit/c32f4c00decf244ca82ae17a41e33f269e1882e7))
21
-
22
-
23
-
24
- ## [8.0.0-alpha.1](https://github.com/things-scene/operato-scene/compare/v8.0.0-alpha.0...v8.0.0-alpha.1) (2024-09-09)
25
-
26
-
27
- ### :bug: Bug Fix
28
-
29
- * update [@things-factory](https://github.com/things-factory)@^8.0.0-alpha ([1dc3163](https://github.com/things-scene/operato-scene/commit/1dc31638ed9d3fd0ecb2ac55be0ce541e5599ab8))
30
-
31
-
32
-
33
- ## [8.0.0-alpha.0](https://github.com/things-scene/operato-scene/compare/v7.3.7...v8.0.0-alpha.0) (2024-09-01)
34
-
35
- **Note:** Version bump only for package @operato/scene-basic
36
-
37
-
38
-
39
-
40
-
41
- ## [7.0.1](https://github.com/things-scene/operato-scene/compare/v7.0.0...v7.0.1) (2024-06-30)
42
-
43
-
44
- ### :bug: Bug Fix
45
-
46
- * things-factory@7.0.0 ([f4cfe44](https://github.com/things-scene/operato-scene/commit/f4cfe44cb565e7b8fdc0df210a722b6526871848))
47
-
48
-
49
-
50
- ## [7.0.0](https://github.com/things-scene/operato-scene/compare/v7.0.0-rc.4...v7.0.0) (2024-06-30)
51
-
52
- **Note:** Version bump only for package @operato/scene-basic
53
-
54
-
55
-
56
-
57
-
58
- ## [7.0.0-rc.1](https://github.com/things-scene/operato-scene/compare/v7.0.0-rc.0...v7.0.0-rc.1) (2024-06-21)
59
-
60
-
61
- ### :bug: Bug Fix
62
-
63
- * apply v7-rc dependencies ([eee5612](https://github.com/things-scene/operato-scene/commit/eee5612e1d569387c284a7c6c49d64ef44b6d701))
64
-
65
-
66
-
67
- ## [7.0.0-rc.0](https://github.com/things-scene/operato-scene/compare/v2.0.0-beta.8...v7.0.0-rc.0) (2024-06-21)
68
-
69
- **Note:** Version bump only for package @operato/scene-basic
70
-
71
-
72
-
73
-
74
-
75
- ## [2.0.0-beta.0](https://github.com/things-scene/operato-scene/compare/v2.0.0-alpha.12...v2.0.0-beta.0) (2024-06-01)
76
-
77
-
78
- ### :rocket: New Features
79
-
80
- * 2.0.0-beta.0 ([a2e2869](https://github.com/things-scene/operato-scene/commit/a2e28694eedf5bab0c54bcab5432d54ec59edd7f))
81
-
82
-
83
- ### :bug: Bug Fix
84
-
85
- * allowJs in tsconfig option ([fa77174](https://github.com/things-scene/operato-scene/commit/fa771742188f21f177f0a85281570f59f0c478cf))
86
-
87
-
88
-
89
- ## [2.0.0-alpha.12](https://github.com/things-scene/operato-scene/compare/v2.0.0-alpha.11...v2.0.0-alpha.12) (2024-05-11)
90
-
91
-
92
- ### :bug: Bug Fix
93
-
94
- * ignore 'cache' folder for git and npm ([d70f811](https://github.com/things-scene/operato-scene/commit/d70f8118ff3e9248f80aa9435d6e6cbb8aacfcaf))
95
-
96
-
97
-
98
- ## [2.0.0-alpha.9](https://github.com/things-scene/operato-scene/compare/v2.0.0-alpha.8...v2.0.0-alpha.9) (2024-04-11)
99
-
100
-
101
- ### :bug: Bug Fix
102
-
103
- * things-factory@7.0.1 ([a9f4c18](https://github.com/things-scene/operato-scene/commit/a9f4c1873b80c540e4c2e16649e127ccffcf9a4c))
104
-
105
-
106
-
107
- ## [2.0.0-alpha.6](https://github.com/things-scene/operato-scene/compare/v2.0.0-alpha.5...v2.0.0-alpha.6) (2024-03-24)
108
-
109
-
110
- ### :bug: Bug Fix
111
-
112
- * translation ([266d423](https://github.com/things-scene/operato-scene/commit/266d423d9d6992464f45a437acc90ccf8ed33bf6))
113
-
114
-
115
-
116
- ## [2.0.0-alpha.4](https://github.com/things-scene/operato-scene/compare/v2.0.0-alpha.3...v2.0.0-alpha.4) (2024-03-21)
117
-
118
-
119
- ### :bug: Bug Fix
120
-
121
- * 컴포넌트 명 다국어 ([3616a52](https://github.com/things-scene/operato-scene/commit/3616a52e2f0268c83c976c6b4deeffc016f91e46))
122
-
123
-
124
-
125
- ## [2.0.0-alpha.0](https://github.com/things-scene/operato-scene/compare/v1.3.9...v2.0.0-alpha.0) (2024-01-14)
126
-
127
-
128
- ### :bug: Bug Fix
129
-
130
- * 2.0.0-alpha.0 ([93274e3](https://github.com/things-scene/operato-scene/commit/93274e36c5d184f339f83899654dd48b4786ac2b))
131
-
132
-
133
-
134
- ## [1.2.90](https://github.com/things-scene/operato-scene/compare/v1.2.89...v1.2.90) (2023-11-22)
135
-
136
- **Note:** Version bump only for package @operato/scene-basic
137
-
138
-
139
-
140
-
141
-
142
- ## [1.2.87](https://github.com/things-scene/operato-scene/compare/v1.2.86...v1.2.87) (2023-11-10)
143
-
144
- **Note:** Version bump only for package @operato/scene-basic
145
-
146
-
147
-
148
-
149
-
150
- ## [1.2.76](https://github.com/things-scene/operato-scene/compare/v1.2.75...v1.2.76) (2023-10-28)
151
-
152
-
153
- ### :bug: Bug Fix
154
-
155
- * scene-tab ([ad62f96](https://github.com/things-scene/operato-scene/commit/ad62f967b149eb5adf8f2e0714d79e8a9dc7186c))
156
-
157
-
158
-
159
- ## [1.2.71](https://github.com/things-scene/operato-scene/compare/v1.2.70...v1.2.71) (2023-10-11)
160
-
161
-
162
- ### :bug: Bug Fix
163
-
164
- * add bluetooth module ([4bba13c](https://github.com/things-scene/operato-scene/commit/4bba13c7ac29508d37f5751ea5abdded60fa314d))
165
-
166
-
167
-
168
- ## [1.2.66](https://github.com/things-scene/operato-scene/compare/v1.2.65...v1.2.66) (2023-09-14)
169
-
170
- **Note:** Version bump only for package @operato/scene-basic
171
-
172
-
173
-
174
-
175
-
176
- ## [1.2.65](https://github.com/things-scene/operato-scene/compare/v1.2.64...v1.2.65) (2023-09-14)
177
-
178
- **Note:** Version bump only for package @operato/scene-basic
179
-
180
-
181
-
182
-
183
-
184
- ## [1.2.62](https://github.com/things-scene/operato-scene/compare/v1.2.61...v1.2.62) (2023-09-11)
185
-
186
- **Note:** Version bump only for package @operato/scene-basic
187
-
188
-
189
-
190
-
191
-
192
- ## [1.2.49](https://github.com/things-scene/operato-scene/compare/v1.2.48...v1.2.49) (2023-06-26)
193
-
194
-
195
- ### :bug: Bug Fix
196
-
197
- * missing .npmignore ([61ba4f2](https://github.com/things-scene/operato-scene/commit/61ba4f2ae22a865d700a971d62eb01f950c34d0e))
198
-
199
-
200
-
201
- ## [1.2.46](https://github.com/things-scene/operato-scene/compare/v1.2.45...v1.2.46) (2023-06-10)
202
-
203
-
204
- ### :bug: Bug Fix
205
-
206
- * typescript build options ([3eb0d7f](https://github.com/things-scene/operato-scene/commit/3eb0d7fd80e2c3cea698501aa1d9d54903423a7b))
207
-
208
-
209
-
210
- ## [1.2.45](https://github.com/things-scene/operato-scene/compare/v1.2.44...v1.2.45) (2023-06-09)
211
-
212
-
213
- ### :bug: Bug Fix
214
-
215
- * set => setState, get => getState for whole scene component ([c205db4](https://github.com/things-scene/operato-scene/commit/c205db4c7bfa5c6dd7d34ea82af283d83b551bad))
216
-
217
-
218
-
219
- ## [1.2.36](https://github.com/things-scene/operato-scene/compare/v1.2.35...v1.2.36) (2023-05-13)
220
-
221
-
222
- ### :bug: Bug Fix
223
-
224
- * license ([d37d485](https://github.com/things-scene/operato-scene/commit/d37d48597407dea1ad022e674f2899720e56d695))
225
-
226
-
227
-
228
- ## [1.2.29](https://github.com/things-scene/operato-scene/compare/v1.2.28...v1.2.29) (2023-04-30)
229
-
230
-
231
- ### :bug: Bug Fix
232
-
233
- * update module's version ([047d08b](https://github.com/things-scene/operato-scene/commit/047d08b5d912d12c04b2f6b63156d1e812588365))
234
-
235
-
236
-
237
- ### [1.2.27](https://github.com/things-scene/operato-scene/compare/v1.2.26...v1.2.27) (2023-04-22)
238
-
239
- **Note:** Version bump only for package @operato/scene-basic
240
-
241
-
242
-
243
-
244
-
245
- ### [1.2.13](https://github.com/things-scene/operato-scene/compare/v1.2.12...v1.2.13) (2023-03-05)
246
-
247
-
248
- ### :bug: Bug Fix
249
-
250
- * lighten data binding for 3d objects ([09db97e](https://github.com/things-scene/operato-scene/commit/09db97e1fe70563a734113e70538bdf6d18c6bc7))
251
-
252
-
253
-
254
- ### [1.2.5](https://github.com/things-scene/operato-scene/compare/v1.2.4...v1.2.5) (2023-02-20)
255
-
256
-
257
- ### :bug: Bug Fix
258
-
259
- * add scene-basic module ([b6f11ae](https://github.com/things-scene/operato-scene/commit/b6f11ae7d073dfd09201607fcb6cd7801da096e3))
package/demo/index.html DELETED
@@ -1,158 +0,0 @@
1
- <!DOCTYPE html>
2
- <!--
3
- @license
4
- Copyright © HatioLab Inc. All rights reserved.
5
- -->
6
- <html>
7
- <head>
8
- <meta charset="utf-8" />
9
- <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes" />
10
- <title>things-scene-basic Demo</title>
11
- <script src="../../webcomponentsjs/webcomponents-lite.min.js"></script>
12
-
13
- <link rel="import" href="../../things-scene-viewer/things-scene-viewer.html" />
14
- <link rel="import" href="../../things-scene-viewer/things-scene-layer.html" />
15
- <link rel="import" href="../../things-scene-viewer/things-scene-handler.html" />
16
-
17
- <link rel="import" href="../../things-designer-elements/things-editor-color.html" />
18
- <link rel="import" href="../../things-designer-elements/things-editor-color-stops.html" />
19
- <link rel="import" href="../../things-designer-elements/things-editor-properties.html" />
20
- <link rel="import" href="../../things-scene-modeler/things-scene-properties.html" />
21
-
22
- <link rel="import" href="./things-scene-basic.html" />
23
-
24
- <style is="custom-style">
25
- @font-face {
26
- font-family: 'Bitstream Vera Serif Bold';
27
- src: url('fonts/VeraSeBd.ttf');
28
- }
29
-
30
- things-scene-viewer {
31
- display: block;
32
- width: 900px;
33
- height: 600px;
34
- }
35
- </style>
36
- </head>
37
- <body unresolved>
38
- <template is="dom-bind" id="app">
39
- <p>An example of <code>&lt;things-scene-basic&gt;</code>:</p>
40
-
41
- <things-scene-viewer id="scene" scene="{{scene}}" selected="{{selected}}" model="[[model]]" mode="1">
42
- <things-scene-layer type="selection-layer"></things-scene-layer>
43
- <things-scene-layer type="modeling-layer"></things-scene-layer>
44
- <things-scene-handler type="text-editor"></things-scene-handler>
45
- <things-scene-handler type="move-handler"></things-scene-handler>
46
- </things-scene-viewer>
47
-
48
- <fieldset class="same-width">
49
- <legend>basic style</legend>
50
- <things-scene-properties scene="[[scene]]" selected="[[selected]]" model="{{target}}" bounds="{{bounds}}">
51
- <things-editor-properties id="properties" target="{{target}}" props="{{props}}"> </things-editor-properties>
52
- </things-scene-properties>
53
- </fieldset>
54
-
55
- <button id="change">Change Value</button>
56
- </template>
57
-
58
- <script>
59
- window.addEventListener('WebComponentsReady', function (e) {
60
- var app = document.querySelector('#app')
61
-
62
- app.$.change.addEventListener('click', function () {
63
- var viewer = app.$.scene
64
- viewer.findAll('basic-analog')[0].set('value', 0 + Math.round(Math.random() * 240))
65
- viewer.findAll('basic-analog')[0].set('colorStops', [
66
- { position: 40, color: '#00ff00' },
67
- { position: 70, color: '#ffff00' },
68
- { position: 170, color: '#ff0000' }
69
- ])
70
- })
71
-
72
- app.model = {
73
- width: 1500,
74
- height: 1500,
75
- components: [
76
- {
77
- type: 'basic-analog',
78
- cx: 300,
79
- cy: 300,
80
- rx: 100,
81
- ry: 100,
82
- hourWidth: 3,
83
- minuteWidth: 2,
84
- fillStyle: '',
85
- strokeStyle: '#FF0000',
86
- fontColor: '#0000FF',
87
- lineWidth: 5,
88
- innerCircleSize: 20,
89
- innerCircleColor: '#00FF00'
90
- // }, {
91
- // type: 'basic-text',
92
- // top: 300,
93
- // left: 800,
94
- // width: 100,
95
- // height: 50,
96
- // fillStyle: '#ff00ff',
97
- // fontColor: '#FF0000',
98
- // lineWidth: 5,
99
- // localTime: true,
100
- // utc : 10
101
- }
102
- ]
103
- }
104
-
105
- app.props = [
106
- {
107
- type: 'number',
108
- label: 'hourwidth',
109
- name: 'hourWidth',
110
- property: 'hourWidth'
111
- },
112
- {
113
- type: 'number',
114
- label: 'minute-width',
115
- name: 'minuteWidth',
116
- property: 'minuteWidth'
117
- },
118
- {
119
- type: 'number',
120
- label: 'second-width',
121
- name: 'secondWidth',
122
- property: 'secondWidth'
123
- },
124
- {
125
- type: 'checkbox',
126
- label: 'needle-round',
127
- name: 'needleRound',
128
- property: 'needleRound'
129
- },
130
- {
131
- type: 'checkbox',
132
- label: 'show-second',
133
- name: 'showSecond',
134
- property: 'showSecond'
135
- },
136
- {
137
- type: 'checkbox',
138
- label: 'show-number',
139
- name: 'showNumber',
140
- property: 'showNumber'
141
- },
142
- {
143
- type: 'number',
144
- label: 'inner-circle-size',
145
- name: 'innerCircleSize',
146
- property: 'innerCircleSize'
147
- },
148
- {
149
- type: 'color',
150
- label: 'inner-circle-color',
151
- name: 'innerCircleColor',
152
- property: 'innerCircleColor'
153
- }
154
- ]
155
- })
156
- </script>
157
- </body>
158
- </html>
@@ -1,6 +0,0 @@
1
- <!--
2
- @license
3
- Copyright © HatioLab Inc. All rights reserved.
4
- -->
5
- <script src="../../moment/moment.js"></script>
6
- <script src="../things-scene-basic.js"></script>
@@ -1,46 +0,0 @@
1
- import { Anchor, Component } from '@hatiolab/things-scene'
2
-
3
- /**
4
- * @function ellipseAnchors
5
- * @param {Component} component
6
- * @return {Anchor[]}
7
- */
8
- export default function ellipseAnchors(component: Component): Anchor[] {
9
- var { left, top, width, height } = component.bounds
10
-
11
- var centerx = left + width / 2
12
- var centery = top + height / 2
13
- var right = left + width
14
- var bottom = top + height
15
-
16
- return [
17
- {
18
- name: 'TOP',
19
- position: {
20
- x: centerx,
21
- y: top
22
- }
23
- },
24
- {
25
- name: 'RIGHT',
26
- position: {
27
- x: right,
28
- y: centery
29
- }
30
- },
31
- {
32
- name: 'BOTTOM',
33
- position: {
34
- x: centerx,
35
- y: bottom
36
- }
37
- },
38
- {
39
- name: 'LEFT',
40
- position: {
41
- x: left,
42
- y: centery
43
- }
44
- }
45
- ]
46
- }
package/src/audio.ts DELETED
@@ -1,173 +0,0 @@
1
- /*
2
- * Copyright © HatioLab Inc. All rights reserved.
3
- */
4
-
5
- import { Component, ComponentNature, Properties, RectPath, Shape } from '@hatiolab/things-scene'
6
-
7
- const NATURE: ComponentNature = {
8
- mutable: false,
9
- resizable: true,
10
- rotatable: true,
11
- properties: [
12
- {
13
- type: 'string',
14
- label: 'src',
15
- name: 'src'
16
- },
17
- {
18
- type: 'checkbox',
19
- label: 'started',
20
- name: 'started'
21
- },
22
- {
23
- type: 'checkbox',
24
- label: 'loop',
25
- name: 'loop'
26
- }
27
- ],
28
- 'value-property': 'src',
29
- help: 'scene/component/audio'
30
- }
31
-
32
- const AUDIO_IMAGE =
33
- 'data:image/png;base64,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'
34
-
35
- export default class AudioPlayer extends RectPath(Shape) {
36
- static IMAGE: HTMLImageElement
37
-
38
- static get image() {
39
- if (!AudioPlayer.IMAGE) {
40
- AudioPlayer.IMAGE = new Image()
41
- AudioPlayer.IMAGE.src = AUDIO_IMAGE
42
- }
43
-
44
- return AudioPlayer.IMAGE
45
- }
46
-
47
- _audio: any
48
-
49
- dispose() {
50
- super.dispose()
51
-
52
- this.started = false
53
- delete this._audio
54
- }
55
-
56
- ready() {
57
- super.ready()
58
-
59
- this._audio = new Audio()
60
-
61
- this._audio.addEventListener('canplay', () => {
62
- this.started && this._audio.play()
63
- })
64
-
65
- var { src = '', loop = false, started = false } = this.state
66
-
67
- this.onchangeSrc(src)
68
- this.onchangeLoop(loop)
69
- this.onchangeStarted(started)
70
- }
71
-
72
- render(ctx: CanvasRenderingContext2D) {
73
- var { left, top, width, height, src } = this.state
74
-
75
- ctx.beginPath()
76
-
77
- this.drawImage(ctx, AudioPlayer.image, left, top, width, height)
78
- }
79
-
80
- get nature() {
81
- return NATURE
82
- }
83
-
84
- get hasTextProperty() {
85
- return false
86
- }
87
-
88
- get src() {
89
- return this.getState('src')
90
- }
91
-
92
- set src(src) {
93
- this.setState('src', src)
94
- }
95
-
96
- get started() {
97
- return !!this.getState('started')
98
- }
99
-
100
- set started(started) {
101
- this.setState('started', started)
102
- }
103
-
104
- start() {
105
- if (!this._audio) return
106
-
107
- this._audio.classList.add('active')
108
- this._audio.play()
109
- }
110
-
111
- pause() {
112
- if (!this._audio) return
113
-
114
- this._audio.classList.remove('active')
115
- this._audio.pause()
116
- }
117
-
118
- onchangeSrc(src: string) {
119
- try {
120
- // this._audio.crossOrigin = "anonymous";
121
- if (String(src).substring(0, 4) !== 'data') this._audio.crossOrigin = 'use-credentials'
122
- else this._audio.crossOrigin = null
123
-
124
- this._audio.src = typeof src === 'string' ? this.app.url(src) : src
125
- } catch (e) {
126
- console.error(e)
127
- return
128
- }
129
- }
130
-
131
- onchangeStarted(started: boolean) {
132
- const audio = this._audio
133
-
134
- if (started) {
135
- /*
136
- [ audio/video.readyState ]
137
- 0 = HAVE_NOTHING - no information whether or not the audio/video is ready
138
- 1 = HAVE_METADATA - metadata for the audio/video is ready
139
- 2 = HAVE_CURRENT_DATA - data for the current playback position is available, but not enough data to play next frame/millisecond
140
- 3 = HAVE_FUTURE_DATA - data for the current and at least the next frame is available
141
- 4 = HAVE_ENOUGH_DATA - enough data available to start playing
142
- */
143
- audio.readyState == 4 && audio.play()
144
- } else {
145
- audio.pause()
146
- }
147
- }
148
-
149
- onchangeLoop(loop: boolean) {
150
- this._audio.loop = loop
151
- }
152
-
153
- onchange(after: Properties, before: Properties) {
154
- 'src' in after && this.onchangeSrc(after.src)
155
- 'started' in after && this.onchangeStarted(after.started)
156
- 'loop' in after && this.onchangeLoop(after.loop)
157
- }
158
-
159
- ondblclick(e: MouseEvent) {
160
- this.started = !this.started
161
- }
162
-
163
- ondropfile(transfered: DataTransferItemList, files: FileList) {
164
- for (let i = 0; i < transfered.length; i++) {
165
- if (transfered[i].type.startsWith('audio/')) {
166
- this.src = files[i]
167
- return
168
- }
169
- }
170
- }
171
- }
172
-
173
- Component.register('audio', AudioPlayer)