@knowark/componarkjs 1.13.4 → 1.14.1

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 (118) hide show
  1. package/README.md +57 -45
  2. package/lib/base/component/component.js +142 -20
  3. package/lib/base/component/component.test.js +753 -374
  4. package/lib/base/component/index.js +3 -0
  5. package/lib/base/styles/index.js +4 -1
  6. package/lib/base/utils/define.js +30 -7
  7. package/lib/base/utils/define.test.js +129 -42
  8. package/lib/base/utils/format.js +12 -6
  9. package/lib/base/utils/format.test.js +16 -16
  10. package/lib/base/utils/helpers.js +42 -9
  11. package/lib/base/utils/helpers.test.js +134 -115
  12. package/lib/base/utils/index.js +1 -0
  13. package/lib/base/utils/slots.js +3 -2
  14. package/lib/base/utils/slots.test.js +38 -38
  15. package/lib/base/utils/uuid.js +1 -1
  16. package/lib/base/utils/uuid.test.js +13 -13
  17. package/lib/components/audio/components/audio.js +36 -3
  18. package/lib/components/audio/components/audio.test.js +120 -90
  19. package/lib/components/audio/index.js +1 -0
  20. package/lib/components/audio/styles/index.js +5 -1
  21. package/lib/components/camera/components/camera.js +15 -0
  22. package/lib/components/camera/components/camera.test.js +96 -91
  23. package/lib/components/camera/index.js +1 -0
  24. package/lib/components/camera/styles/index.js +5 -1
  25. package/lib/components/capture/components/capture.js +48 -4
  26. package/lib/components/capture/components/capture.test.js +165 -97
  27. package/lib/components/capture/index.js +1 -0
  28. package/lib/components/droparea/components/droparea-preview.js +114 -19
  29. package/lib/components/droparea/components/droparea-preview.test.js +344 -80
  30. package/lib/components/droparea/components/droparea.js +82 -6
  31. package/lib/components/droparea/components/droparea.test.js +309 -299
  32. package/lib/components/droparea/index.js +1 -0
  33. package/lib/components/droparea/styles/index.js +5 -1
  34. package/lib/components/emit/components/emit.js +34 -4
  35. package/lib/components/emit/components/emit.test.js +192 -134
  36. package/lib/components/emit/index.js +1 -0
  37. package/lib/components/index.js +2 -1
  38. package/lib/components/list/components/item.js +6 -0
  39. package/lib/components/list/components/item.test.js +69 -68
  40. package/lib/components/list/components/list.js +51 -7
  41. package/lib/components/list/components/list.test.js +358 -227
  42. package/lib/components/list/index.js +1 -0
  43. package/lib/components/paginator/components/paginator.js +34 -8
  44. package/lib/components/paginator/components/paginator.test.js +146 -143
  45. package/lib/components/paginator/index.js +1 -0
  46. package/lib/components/paginator/styles/index.js +5 -1
  47. package/lib/components/spinner/components/spinner.js +10 -0
  48. package/lib/components/spinner/components/spinner.test.js +36 -41
  49. package/lib/components/spinner/index.js +1 -0
  50. package/lib/components/spinner/styles/index.js +5 -1
  51. package/lib/components/splitview/components/splitview.detail.js +10 -1
  52. package/lib/components/splitview/components/splitview.detail.test.js +75 -73
  53. package/lib/components/splitview/components/splitview.js +54 -11
  54. package/lib/components/splitview/components/splitview.master.js +37 -2
  55. package/lib/components/splitview/components/splitview.master.test.js +52 -52
  56. package/lib/components/splitview/components/splitview.test.js +135 -31
  57. package/lib/components/splitview/index.js +1 -0
  58. package/lib/components/translate/components/translate.js +65 -14
  59. package/lib/components/translate/components/translate.test.js +658 -131
  60. package/lib/components/translate/index.js +1 -0
  61. package/lib/index.js +3 -0
  62. package/package.json +4 -27
  63. package/scripts/node-test-setup.js +94 -0
  64. package/tsconfig.json +1 -1
  65. package/types/base/component/component.d.ts +43 -8
  66. package/types/base/component/component.d.ts.map +1 -1
  67. package/types/base/component/index.d.ts +4 -6
  68. package/types/base/component/index.d.ts.map +1 -1
  69. package/types/base/styles/index.d.ts +3 -2
  70. package/types/base/styles/index.d.ts.map +1 -1
  71. package/types/base/utils/define.d.ts +3 -2
  72. package/types/base/utils/define.d.ts.map +1 -1
  73. package/types/base/utils/format.d.ts +12 -6
  74. package/types/base/utils/format.d.ts.map +1 -1
  75. package/types/base/utils/helpers.d.ts +27 -7
  76. package/types/base/utils/helpers.d.ts.map +1 -1
  77. package/types/base/utils/slots.d.ts +8 -10
  78. package/types/base/utils/slots.d.ts.map +1 -1
  79. package/types/base/utils/uuid.d.ts +1 -1
  80. package/types/base/utils/uuid.d.ts.map +1 -1
  81. package/types/components/audio/components/audio.d.ts +23 -9
  82. package/types/components/audio/components/audio.d.ts.map +1 -1
  83. package/types/components/audio/styles/index.d.ts +3 -2
  84. package/types/components/audio/styles/index.d.ts.map +1 -1
  85. package/types/components/camera/components/camera.d.ts +11 -3
  86. package/types/components/camera/components/camera.d.ts.map +1 -1
  87. package/types/components/camera/styles/index.d.ts +3 -2
  88. package/types/components/camera/styles/index.d.ts.map +1 -1
  89. package/types/components/capture/components/capture.d.ts +23 -3
  90. package/types/components/capture/components/capture.d.ts.map +1 -1
  91. package/types/components/droparea/components/droparea-preview.d.ts +64 -11
  92. package/types/components/droparea/components/droparea-preview.d.ts.map +1 -1
  93. package/types/components/droparea/components/droparea.d.ts +58 -13
  94. package/types/components/droparea/components/droparea.d.ts.map +1 -1
  95. package/types/components/droparea/styles/index.d.ts +3 -2
  96. package/types/components/droparea/styles/index.d.ts.map +1 -1
  97. package/types/components/emit/components/emit.d.ts +15 -3
  98. package/types/components/emit/components/emit.d.ts.map +1 -1
  99. package/types/components/list/components/item.d.ts +8 -1
  100. package/types/components/list/components/item.d.ts.map +1 -1
  101. package/types/components/list/components/list.d.ts +23 -5
  102. package/types/components/list/components/list.d.ts.map +1 -1
  103. package/types/components/paginator/components/paginator.d.ts +32 -8
  104. package/types/components/paginator/components/paginator.d.ts.map +1 -1
  105. package/types/components/paginator/styles/index.d.ts +3 -2
  106. package/types/components/paginator/styles/index.d.ts.map +1 -1
  107. package/types/components/spinner/components/spinner.d.ts +14 -3
  108. package/types/components/spinner/components/spinner.d.ts.map +1 -1
  109. package/types/components/spinner/styles/index.d.ts +3 -2
  110. package/types/components/spinner/styles/index.d.ts.map +1 -1
  111. package/types/components/splitview/components/splitview.d.ts +22 -4
  112. package/types/components/splitview/components/splitview.d.ts.map +1 -1
  113. package/types/components/splitview/components/splitview.detail.d.ts +12 -2
  114. package/types/components/splitview/components/splitview.detail.d.ts.map +1 -1
  115. package/types/components/splitview/components/splitview.master.d.ts +12 -1
  116. package/types/components/splitview/components/splitview.master.d.ts.map +1 -1
  117. package/types/components/translate/components/translate.d.ts +44 -10
  118. package/types/components/translate/components/translate.d.ts.map +1 -1
@@ -1,3 +1,7 @@
1
1
  // @ts-nocheck
2
2
  import styles from './ark.css.js'
3
- export default styles
3
+
4
+ /** @type {string} */
5
+ const stylesText = styles
6
+
7
+ export default stylesText
@@ -1,6 +1,9 @@
1
1
  import { Component } from "#base/index.js"
2
2
 
3
3
  const tag = 'ark-emit'
4
+ /**
5
+ * Declarative event forwarding component.
6
+ */
4
7
  export class Emit extends Component {
5
8
  constructor () {
6
9
  super()
@@ -15,30 +18,57 @@ export class Emit extends Component {
15
18
  return ['receive', 'dispatch', 'bind']
16
19
  }
17
20
 
21
+ /** @param {CustomEvent} event
22
+ * @returns {void} */
18
23
  handle (event) {
19
24
  const detail = Object.assign({}, event.detail)
20
25
 
21
26
  let data = null
22
27
  if (this.bind && this.source) {
23
- const element = this.closest(this.bind)
24
- data = Function(`return ${this.source.trim()}`).call(element)
28
+ data = this._resolveBoundData()
25
29
  } else if (this.source) {
26
- data = JSON.parse(this.source)
30
+ data = this._parseJSON(this.source)
27
31
  }
28
32
 
29
33
  Object.assign(detail, data)
30
34
 
31
- const value = event.target.value
35
+ const value = /** @type {HTMLInputElement|null} */ (event.target)?.value
32
36
  if (value) Object.assign(detail, { value })
33
37
 
34
38
  const type = this.dispatch || 'emit'
35
39
  this.emit(type, detail)
36
40
  }
37
41
 
42
+ /** @param {string} selector
43
+ * @returns {Element|null} */
38
44
  _pop (selector) {
39
45
  const element = this.querySelector(selector)
40
46
  element?.remove()
41
47
  return element
42
48
  }
49
+
50
+ /** @returns {any|null} */
51
+ _resolveBoundData () {
52
+ const element = this.closest(this.bind)
53
+ if (!element) return null
54
+
55
+ try {
56
+ return Function(`return ${this.source.trim()}`).call(element)
57
+ } catch (error) {
58
+ this.emit('error', error)
59
+ return null
60
+ }
61
+ }
62
+
63
+ /** @param {string} source
64
+ * @returns {object|null} */
65
+ _parseJSON (source) {
66
+ try {
67
+ return JSON.parse(source)
68
+ } catch (error) {
69
+ this.emit('error', error)
70
+ return null
71
+ }
72
+ }
43
73
  }
44
74
  Component.define(tag, Emit)
@@ -1,169 +1,227 @@
1
+ import { it } from 'node:test';
2
+ import assert from 'node:assert/strict';
1
3
  import './emit.js'
2
4
 
3
- describe('Emit', () => {
4
- let container = null
5
+ let container = null
5
6
 
6
- beforeEach(() => {
7
- container = document.createElement('div')
8
- document.body.appendChild(container)
9
- })
7
+ const setup = () => {
8
+ document.body.innerHTML = '';
9
+ container = document.createElement('div')
10
+ document.body.appendChild(container)
11
+ };
10
12
 
11
- afterEach(() => {
12
- container.remove()
13
- container = null
14
- })
13
+ it('can be instantiated', () => {
14
+ setup();
15
+ container.innerHTML = `
16
+ <ark-emit></ark-emit>
17
+ `
15
18
 
16
- it('can be instantiated', () => {
17
- container.innerHTML = `
18
- <ark-emit></ark-emit>
19
- `
19
+ const emit = container.querySelector('ark-emit')
20
+ assert.deepStrictEqual(emit, emit.init())
21
+ })
20
22
 
21
- const emit = container.querySelector('ark-emit')
22
- expect(emit).toEqual(emit.init())
23
- })
23
+ it('emits a target event when handling the one listened at', () => {
24
+ setup();
25
+ container.innerHTML = `
26
+ <ark-emit receive="click" dispatch="custom">
27
+ <button>Sending a click event when pressed!</button>
28
+ </ark-emit>
29
+ `
30
+ const emit = container.querySelector('ark-emit')
31
+ let customCalled = false
32
+ emit.addEventListener('custom', (event) => { customCalled = true })
24
33
 
25
- it('emits a target event when handling the one listened at', () => {
26
- container.innerHTML = `
27
- <ark-emit receive="click" dispatch="custom">
28
- <button>Sending a click event when pressed!</button>
29
- </ark-emit>
30
- `
31
- const emit = container.querySelector('ark-emit')
32
- let customCalled = false
33
- emit.addEventListener('custom', (event) => { customCalled = true })
34
+ container.querySelector('button').click()
34
35
 
35
- container.querySelector('button').click()
36
+ assert.strictEqual(customCalled, true)
37
+ })
36
38
 
37
- expect(customCalled).toBe(true)
38
- })
39
+ it('listens to click events and dispatches emit events by default', () => {
40
+ setup();
41
+ container.innerHTML = `
42
+ <ark-emit>
43
+ <button>Sending a click event when pressed!</button>
44
+ </ark-emit>
45
+ `
46
+ const emit = container.querySelector('ark-emit')
47
+ let emitCalled = false
48
+ emit.addEventListener('emit', (event) => { emitCalled = true })
39
49
 
40
- it('listens to click events and dispatches emit events by default', () => {
41
- container.innerHTML = `
42
- <ark-emit>
43
- <button>Sending a click event when pressed!</button>
44
- </ark-emit>
45
- `
46
- const emit = container.querySelector('ark-emit')
47
- let emitCalled = false
48
- emit.addEventListener('emit', (event) => { emitCalled = true })
50
+ container.querySelector('button').click()
49
51
 
50
- container.querySelector('button').click()
52
+ assert.strictEqual(emitCalled, true)
53
+ })
51
54
 
52
- expect(emitCalled).toBe(true)
55
+ it('it carries over the json data given to it', () => {
56
+ setup();
57
+ const data = {
58
+ id: '7a792bda-6f8a-44ed-a63a-a48bba1e76bf',
59
+ name: 'John Doe'
60
+ }
61
+ container.innerHTML = `
62
+ <ark-emit>
63
+ <data>${JSON.stringify(data)}</data>
64
+ <button>Sending a click event when pressed!</button>
65
+ </ark-emit>
66
+ `
67
+
68
+ const emit = container.querySelector('ark-emit')
69
+
70
+ const dataElement = emit.querySelector('data')
71
+ assert.strictEqual(dataElement, null)
72
+
73
+ emit.addEventListener('emit', (event) => {
74
+ const detail = event.detail
75
+ assert.deepStrictEqual(detail, data)
53
76
  })
54
77
 
55
- it('it carries over the json data given to it', () => {
56
- expect.assertions(2)
57
- const data = {
58
- id: '7a792bda-6f8a-44ed-a63a-a48bba1e76bf',
59
- name: 'John Doe'
60
- }
61
- container.innerHTML = `
62
- <ark-emit>
78
+ container.querySelector('button').click()
79
+ })
80
+
81
+ it('it merges upstream event details', () => {
82
+ setup();
83
+ const data = {
84
+ id: '7a792bda-6f8a-44ed-a63a-a48bba1e76bf',
85
+ name: 'John Doe'
86
+ }
87
+ container.innerHTML = `
88
+ <ark-emit data-outer receive="inner" dispatch="outer">
89
+ <data>
90
+ {
91
+ "age": 34,
92
+ "job": "programmer"
93
+ }
94
+ </data>
95
+ <ark-emit data-inner dispatch="inner">
63
96
  <data>${JSON.stringify(data)}</data>
64
97
  <button>Sending a click event when pressed!</button>
65
98
  </ark-emit>
66
- `
67
-
68
- const emit = container.querySelector('ark-emit')
99
+ </ark-emit>
100
+ `
69
101
 
70
- const dataElement = emit.querySelector('data')
71
- expect(dataElement).toBe(null)
72
-
73
- emit.addEventListener('emit', (event) => {
74
- const detail = event.detail
75
- expect(detail).toEqual(data)
102
+ const emit = container.querySelector('[data-outer]')
103
+ emit.addEventListener('outer', (event) => {
104
+ const detail = event.detail
105
+ assert.deepStrictEqual(detail, {
106
+ id: '7a792bda-6f8a-44ed-a63a-a48bba1e76bf',
107
+ name: 'John Doe',
108
+ age: 34,
109
+ job: 'programmer'
76
110
  })
111
+ })
112
+
113
+ container.querySelector('[data-inner]').click()
114
+ })
77
115
 
78
- container.querySelector('button').click()
116
+ it('receives the target.value of regular events', async () => {
117
+ setup();
118
+ container.innerHTML = `
119
+ <ark-emit receive="change">
120
+ <input type="text"></input>
121
+ </ark-emit>
122
+ `
123
+ const input = container.querySelector('input')
124
+ const inputEvent = new Event('change', { bubbles: true })
125
+ const target = { name: 'input', value: 'XYZ' }
126
+ Object.defineProperty(
127
+ inputEvent, 'target', { writable: false, value: target })
128
+
129
+ const emit = container.querySelector('ark-emit')
130
+ emit.addEventListener('emit', (event) => {
131
+ const detail = event.detail
132
+ assert.deepStrictEqual(detail, { value: 'XYZ' })
79
133
  })
80
134
 
81
- it('it merges upstream event details', () => {
82
- expect.assertions(1)
83
- const data = {
84
- id: '7a792bda-6f8a-44ed-a63a-a48bba1e76bf',
85
- name: 'John Doe'
86
- }
87
- container.innerHTML = `
88
- <ark-emit data-outer receive="inner" dispatch="outer">
89
- <data>
90
- {
91
- "age": 34,
92
- "job": "programmer"
93
- }
94
- </data>
95
- <ark-emit data-inner dispatch="inner">
96
- <data>${JSON.stringify(data)}</data>
135
+ input.dispatchEvent(inputEvent)
136
+ })
137
+
138
+ it('binds to the given ancestor referenced by a selector', async () => {
139
+ setup();
140
+ container.innerHTML = `
141
+ <div class="grandparent" data-name="John", data-surname="Doe">
142
+ <div class="parent">
143
+ <ark-emit bind=".grandparent">
144
+ <data>
145
+ {
146
+ name: this.dataset.name,
147
+ surname: this.dataset.surname
148
+ }
149
+ </data>
97
150
  <button>Sending a click event when pressed!</button>
98
151
  </ark-emit>
99
- </ark-emit>
100
- `
101
-
102
- const emit = container.querySelector('[data-outer]')
103
- emit.addEventListener('outer', (event) => {
104
- const detail = event.detail
105
- expect(detail).toEqual({
106
- id: '7a792bda-6f8a-44ed-a63a-a48bba1e76bf',
107
- name: 'John Doe',
108
- age: 34,
109
- job: 'programmer'
110
- })
152
+ </div>
153
+ </div>
154
+ `
155
+
156
+ const emit = container.querySelector('ark-emit')
157
+ emit.addEventListener('emit', (event) => {
158
+ const { detail } = event
159
+ assert.deepStrictEqual(detail, {
160
+ name: 'John',
161
+ surname: 'Doe'
111
162
  })
163
+ })
164
+
165
+ container.querySelector('button').click()
166
+ })
112
167
 
113
- container.querySelector('[data-inner]').click()
168
+ it('emits error when given invalid JSON data', () => {
169
+ setup()
170
+ container.innerHTML = `
171
+ <ark-emit>
172
+ <data>{ invalid json }</data>
173
+ <button>Sending a click event when pressed!</button>
174
+ </ark-emit>
175
+ `
176
+ const emit = container.querySelector('ark-emit')
177
+ let errorEvent = null
178
+ emit.addEventListener('error', (event) => {
179
+ errorEvent = event
114
180
  })
115
181
 
116
- it('receives the target.value of regular events', async () => {
117
- expect.assertions(1)
182
+ container.querySelector('button').click()
118
183
 
119
- container.innerHTML = `
120
- <ark-emit receive="change">
121
- <input type="text"></input>
122
- </ark-emit>
123
- `
124
- const input = container.querySelector('input')
125
- const inputEvent = new Event('change', { bubbles: true })
126
- const target = { name: 'input', value: 'XYZ' }
127
- Object.defineProperty(
128
- inputEvent, 'target', { writable: false, value: target })
129
-
130
- const emit = container.querySelector('ark-emit')
131
- emit.addEventListener('emit', (event) => {
132
- const detail = event.detail
133
- expect(detail).toEqual({ value: 'XYZ' })
134
- })
184
+ assert.ok(errorEvent)
185
+ })
135
186
 
136
- input.dispatchEvent(inputEvent)
187
+ it('emits error when bound source expression is invalid', () => {
188
+ setup()
189
+ container.innerHTML = `
190
+ <div class="grandparent">
191
+ <ark-emit bind=".grandparent">
192
+ <data>{ invalid:</data>
193
+ <button>Send</button>
194
+ </ark-emit>
195
+ </div>
196
+ `
197
+ const emit = container.querySelector('ark-emit')
198
+ let errorEvent = null
199
+ emit.addEventListener('error', (event) => {
200
+ errorEvent = event
137
201
  })
138
202
 
139
- it('binds to the given ancestor referenced by a selector', async () => {
140
- expect.assertions(1)
141
-
142
- container.innerHTML = `
143
- <div class="grandparent" data-name="John", data-surname="Doe">
144
- <div class="parent">
145
- <ark-emit bind=".grandparent">
146
- <data>
147
- {
148
- name: this.dataset.name,
149
- surname: this.dataset.surname
150
- }
151
- </data>
152
- <button>Sending a click event when pressed!</button>
153
- </ark-emit>
154
- </div>
155
- </div>
156
- `
157
-
158
- const emit = container.querySelector('ark-emit')
159
- emit.addEventListener('emit', (event) => {
160
- const { detail } = event
161
- expect(detail).toEqual({
162
- name: 'John',
163
- surname: 'Doe'
164
- })
165
- })
203
+ container.querySelector('button').click()
166
204
 
167
- container.querySelector('button').click()
205
+ assert.ok(errorEvent)
206
+ })
207
+
208
+ it('ignores bound expressions when the ancestor selector does not match', () => {
209
+ setup()
210
+ container.innerHTML = `
211
+ <div class="parent">
212
+ <ark-emit bind=".missing">
213
+ <data>{ value: 'A' }</data>
214
+ <button>Send</button>
215
+ </ark-emit>
216
+ </div>
217
+ `
218
+ const emit = container.querySelector('ark-emit')
219
+ let detail = null
220
+ emit.addEventListener('emit', (event) => {
221
+ detail = event.detail
168
222
  })
223
+
224
+ container.querySelector('button').click()
225
+
226
+ assert.deepStrictEqual(detail, {})
169
227
  })
@@ -1 +1,2 @@
1
+ /** Event emitter bridge component. */
1
2
  export { Emit } from './components/emit.js'
@@ -1,3 +1,4 @@
1
+ /** Aggregated component exports. */
1
2
  export * from './audio/index.js'
2
3
  export * from './camera/index.js'
3
4
  export * from './capture/index.js'
@@ -6,4 +7,4 @@ export * from './list/index.js'
6
7
  export * from './paginator/index.js'
7
8
  export * from './spinner/index.js'
8
9
  export * from './splitview/index.js'
9
- export * from './translate/index.js'
10
+ export * from './translate/index.js'
@@ -1,7 +1,12 @@
1
1
  import { Component } from "#base/index.js"
2
2
 
3
3
  const tag = 'ark-list-item'
4
+ /**
5
+ * Single list item for list component.
6
+ */
4
7
  export class ListItem extends Component {
8
+ /** @param {object} context
9
+ * @returns {this} */
5
10
  init (context = {}) {
6
11
  this.index = context.index
7
12
  this.data = context.data || null
@@ -14,6 +19,7 @@ export class ListItem extends Component {
14
19
  return ['index']
15
20
  }
16
21
 
22
+ /** @returns {this} */
17
23
  render () {
18
24
  this.content = this.template(this.data)
19
25
  return super.render()
@@ -1,91 +1,92 @@
1
+ import { it } from 'node:test';
2
+ import assert from 'node:assert/strict';
1
3
  import './list.js'
2
4
  import { ListItem } from './item.js'
3
5
 
4
- describe('List item', () => {
5
- let container = null
6
+ let container = null
6
7
 
7
- beforeEach(() => {
8
- container = document.createElement('div')
9
- document.body.appendChild(container)
10
- })
11
-
12
- afterEach(() => {
13
- container.remove()
14
- container = null
15
- })
8
+ const setup = () => {
9
+ document.body.innerHTML = '';
10
+ container = document.createElement('div')
11
+ document.body.appendChild(container)
12
+ };
16
13
 
17
- it('can be instantiated', () => {
18
- container.innerHTML = `
19
- <ark-list></ark-list>
20
- `
14
+ it('can be instantiated', () => {
15
+ setup();
16
+ container.innerHTML = `
17
+ <ark-list></ark-list>
18
+ `
21
19
 
22
- const list = container.querySelector('ark-list')
23
- list.source = ['Colombia', 'Uruguay', 'Brasil', 'Perú']
24
- list.render()
25
- const item = list.querySelector('ark-list-item')
20
+ const list = container.querySelector('ark-list')
21
+ list.source = ['Colombia', 'Uruguay', 'Brasil', 'Perú']
22
+ list.render()
23
+ const item = list.querySelector('ark-list-item')
26
24
 
27
- expect(item).toEqual(item.init())
28
- })
25
+ assert.deepStrictEqual(item, item.init())
26
+ })
29
27
 
30
- it('can be rendered with data', () => {
31
- container.innerHTML = `
32
- <ark-list></ark-list>
33
- `
28
+ it('can be rendered with data', () => {
29
+ setup();
30
+ container.innerHTML = `
31
+ <ark-list></ark-list>
32
+ `
34
33
 
35
- const list = container.querySelector('ark-list')
36
- list.source = ['Colombia']
37
- list.render()
38
- const item = list.querySelector('ark-list-item')
34
+ const list = container.querySelector('ark-list')
35
+ list.source = ['Colombia']
36
+ list.render()
37
+ const item = list.querySelector('ark-list-item')
39
38
 
40
- item.data = 'my data'
41
- item.render()
39
+ item.data = 'my data'
40
+ item.render()
42
41
 
43
- expect(item.innerHTML.trim()).toEqual('my data')
44
- })
42
+ assert.deepStrictEqual(item.innerHTML.trim(), 'my data')
43
+ })
45
44
 
46
- it('can be rendered with template', () => {
47
- container.innerHTML = `
48
- <ark-list data-template-list></ark-list>
49
- `
45
+ it('can be rendered with template', () => {
46
+ setup();
47
+ container.innerHTML = `
48
+ <ark-list data-template-list></ark-list>
49
+ `
50
50
 
51
- const list = container.querySelector('[data-template-list]')
52
- list.source = ['Colombia']
53
- list.render()
54
- const item = list.querySelector('ark-list-item')
51
+ const list = container.querySelector('[data-template-list]')
52
+ list.source = ['Colombia']
53
+ list.render()
54
+ const item = list.querySelector('ark-list-item')
55
55
 
56
- item.data = 'my data'
57
- item.template = data => /* html */ `<span>${data}</span>`
58
- item.render()
56
+ item.data = 'my data'
57
+ item.template = data => /* html */ `<span>${data}</span>`
58
+ item.render()
59
59
 
60
- expect(item.innerHTML.trim()).toEqual('<span>my data</span>')
61
- })
60
+ assert.deepStrictEqual(item.innerHTML.trim(), '<span>my data</span>')
61
+ })
62
62
 
63
- it('can be rendered with template', () => {
64
- container.innerHTML = `
65
- <ark-list data-template-list></ark-list>
66
- `
63
+ it('can be rendered with template', () => {
64
+ setup();
65
+ container.innerHTML = `
66
+ <ark-list data-template-list></ark-list>
67
+ `
67
68
 
68
- const list = container.querySelector('[data-template-list]')
69
- list.source = ['Colombia']
70
- list.render()
71
- const item = list.querySelector('ark-list-item')
69
+ const list = container.querySelector('[data-template-list]')
70
+ list.source = ['Colombia']
71
+ list.render()
72
+ const item = list.querySelector('ark-list-item')
72
73
 
73
- item.data = 'my data'
74
- item.template = data => /* html */ `<span>${data}</span>`
75
- item.render()
74
+ item.data = 'my data'
75
+ item.template = data => /* html */ `<span>${data}</span>`
76
+ item.render()
76
77
 
77
- item.addEventListener('list-item:selected', event => {
78
- expect(event.detail.data).toEqual('my data')
79
- })
80
- item.click()
78
+ item.addEventListener('list-item:selected', event => {
79
+ assert.deepStrictEqual(event.detail.data, 'my data')
81
80
  })
81
+ item.click()
82
+ })
82
83
 
83
- it('can be rendered without template', () => {
84
- const item = new ListItem()
85
- item.init({
86
- data: 'my data'
87
- }).render()
84
+ it('can be rendered without template', () => {
85
+ setup();
86
+ const item = new ListItem()
87
+ item.init({
88
+ data: 'my data'
89
+ }).render()
88
90
 
89
- expect(item.innerHTML.trim()).toEqual('my data')
90
- })
91
+ assert.deepStrictEqual(item.innerHTML.trim(), 'my data')
91
92
  })