@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
@@ -2,7 +2,12 @@ import { Component } from '#base/index.js'
2
2
  import styles from '../styles/index.js'
3
3
 
4
4
  const tag = 'ark-paginator'
5
+ /**
6
+ * Pagination control component.
7
+ */
5
8
  export class Paginator extends Component {
9
+ /** @param {object} context
10
+ * @returns {this} */
6
11
  init (context = {}) {
7
12
  this.binding = 'paginator-listen'
8
13
  this.collectionSize = (
@@ -21,6 +26,7 @@ export class Paginator extends Component {
21
26
  return ['collectionSize', 'pageSize', 'displayedPages', 'currentPage']
22
27
  }
23
28
 
29
+ /** @returns {this} */
24
30
  render () {
25
31
  this._grabSlots()
26
32
  this.content = /* html */`
@@ -42,12 +48,13 @@ export class Paginator extends Component {
42
48
  this._buildButton(this.previousButton, '_prev', '<'))
43
49
 
44
50
  for (const page of this.currentPages) {
45
- const attributes = [['data-page', page]]
51
+ /** @type {[string, string][]} */
52
+ const attributes = [['data-page', String(page)]]
46
53
  if ((Number(page) === Number(this.currentPage))) {
47
54
  attributes.unshift(['active', ''])
48
55
  }
49
56
  this.querySelector('[data-middle]').appendChild(
50
- this._buildButton(this.pageButton, null, page, attributes))
57
+ this._buildButton(this.pageButton, null, `${page}`, attributes))
51
58
  }
52
59
 
53
60
  this.querySelector('[data-end]').appendChild(
@@ -58,10 +65,12 @@ export class Paginator extends Component {
58
65
  return super.render()
59
66
  }
60
67
 
68
+ /** @returns {number} */
61
69
  get totalPages () {
62
70
  return Math.ceil(this.collectionSize / this.pageSize)
63
71
  }
64
72
 
73
+ /** @returns {number[]} */
65
74
  get currentPages () {
66
75
  const displayedPages = Math.min(
67
76
  parseInt(this.displayedPages), this.totalPages)
@@ -72,6 +81,7 @@ export class Paginator extends Component {
72
81
  return Array.from({ length: displayedPages }, (_, i) => i + startPage)
73
82
  }
74
83
 
84
+ /** @returns {void} */
75
85
  _notifyChange () {
76
86
  const page = parseInt(this.currentPage)
77
87
  const limit = parseInt(this.pageSize)
@@ -80,6 +90,8 @@ export class Paginator extends Component {
80
90
  }
81
91
 
82
92
  /** @param {number} currentPage */
93
+ /** @param {number} currentPage
94
+ * @returns {void} */
83
95
  _setCurrentPage (currentPage) {
84
96
  if (currentPage > 0 && currentPage <= this.totalPages) {
85
97
  this.currentPage = currentPage
@@ -88,19 +100,22 @@ export class Paginator extends Component {
88
100
  }
89
101
  }
90
102
 
91
- /** @param {Event} event */
103
+ /** @param {Event} event
104
+ * @returns {void} */
92
105
  _first (event) {
93
106
  event.stopPropagation()
94
107
  this._setCurrentPage(1)
95
108
  }
96
109
 
97
- /** @param {Event} event */
110
+ /** @param {Event} event
111
+ * @returns {void} */
98
112
  _prev (event) {
99
113
  event.stopPropagation()
100
114
  this._setCurrentPage(parseInt(this.currentPage) - 1)
101
115
  }
102
116
 
103
- /** @param {Event} event */
117
+ /** @param {Event} event
118
+ * @returns {void} */
104
119
  _move (event) {
105
120
  event.stopPropagation()
106
121
  const target = /** @type {HTMLElement} */ (event.target)
@@ -108,18 +123,21 @@ export class Paginator extends Component {
108
123
  this._setCurrentPage(page)
109
124
  }
110
125
 
111
- /** @param {Event} event */
126
+ /** @param {Event} event
127
+ * @returns {void} */
112
128
  _next (event) {
113
129
  event.stopPropagation()
114
130
  this._setCurrentPage(parseInt(this.currentPage) + 1)
115
131
  }
116
132
 
117
- /** @param {Event} event */
133
+ /** @param {Event} event
134
+ * @returns {void} */
118
135
  _last (event) {
119
136
  event.stopPropagation()
120
137
  this._setCurrentPage(this.totalPages)
121
138
  }
122
139
 
140
+ /** @returns {void} */
123
141
  _grabSlots() {
124
142
  const [pageButton] = [this.slots.page].flat()
125
143
  this.pageButton = this.pageButton ?? pageButton
@@ -133,8 +151,16 @@ export class Paginator extends Component {
133
151
  this.lastButton = this.lastButton ?? lastButton
134
152
  }
135
153
 
154
+ /**
155
+ * @param {HTMLButtonElement|null} element
156
+ * @param {string|null} handler
157
+ * @param {string} content
158
+ * @param {Array<[string,string]>} attributes
159
+ * @returns {HTMLButtonElement}
160
+ */
136
161
  _buildButton (element, handler, content, attributes = []) {
137
- const button = (element ?? document.createElement('button')).cloneNode(true)
162
+ const button = /** @type {HTMLButtonElement} */ (
163
+ (element ?? document.createElement('button')).cloneNode(true))
138
164
  button.innerHTML = button.innerHTML || content
139
165
  if (handler) {
140
166
  button.setAttribute('paginator-listen', '')
@@ -1,152 +1,155 @@
1
+ import { it } from 'node:test';
2
+ import assert from 'node:assert/strict';
1
3
  import './paginator.js'
2
4
 
3
- describe('Paginator', () => {
4
- let container = null
5
-
6
- beforeEach(() => {
7
- container = document.createElement('div')
8
- document.body.appendChild(container)
9
- })
5
+ let container = null
10
6
 
11
- afterEach(() => {
12
- container.remove()
13
- container = null
14
- })
7
+ const setup = () => {
8
+ document.body.innerHTML = '';
9
+ container = document.createElement('div')
10
+ document.body.appendChild(container)
11
+ };
15
12
 
16
- it('can be instantiated', () => {
17
- container.innerHTML = /* html */ `
18
- <ark-paginator></ark-paginator>
19
- `
20
- const paginator = container.querySelector('ark-paginator')
13
+ it('can be instantiated', () => {
14
+ setup();
15
+ container.innerHTML = /* html */ `
16
+ <ark-paginator></ark-paginator>
17
+ `
18
+ const paginator = container.querySelector('ark-paginator')
21
19
 
22
- expect(paginator).toBe(paginator.init())
23
- })
20
+ assert.strictEqual(paginator, paginator.init())
21
+ })
22
+
23
+ it('can be instantiated with parameters', () => {
24
+ setup();
25
+ container.innerHTML = /* html */ `
26
+ <ark-paginator page-size="12" displayed-pages="5"></ark-paginator>
27
+ `
28
+ const paginator = container.querySelector('ark-paginator')
29
+ paginator.init({ collectionSize: 120, currentPage: 4 })
30
+
31
+ assert.strictEqual(paginator.pageSize, '12')
32
+ assert.strictEqual(paginator.collectionSize, '120')
33
+ assert.strictEqual(paginator.currentPage, '4')
34
+ assert.strictEqual(paginator.displayedPages, '5')
35
+ assert.strictEqual(paginator.totalPages, 10)
36
+
37
+ paginator.init({ collectionSize: 120, pageSize: 10 })
38
+ assert.strictEqual(paginator.totalPages, 12)
39
+ })
40
+
41
+ it('computes the current shown pages', () => {
42
+ setup();
43
+ container.innerHTML = /* html */ `
44
+ <ark-paginator collection-size="120" page-size="12"
45
+ displayed-pages="5" current-page="1"></ark-paginator>
46
+ `
47
+ const paginator = container.querySelector('ark-paginator')
48
+
49
+ assert.deepStrictEqual(paginator.currentPages, [1, 2, 3, 4, 5])
50
+ assert.deepStrictEqual(paginator.totalPages, 10)
51
+
52
+ paginator.init({ currentPage: 3 })
53
+ assert.deepStrictEqual(paginator.currentPages, [1, 2, 3, 4, 5])
54
+
55
+ paginator.init({ currentPage: 4 })
56
+ assert.deepStrictEqual(paginator.currentPages, [2, 3, 4, 5, 6])
57
+
58
+ paginator.init({ currentPage: 5 })
59
+ assert.deepStrictEqual(paginator.currentPages, [3, 4, 5, 6, 7])
60
+
61
+ paginator.init({ currentPage: 7 })
62
+ assert.deepStrictEqual(paginator.currentPages, [5, 6, 7, 8, 9])
63
+
64
+ paginator.init({ currentPage: 8 })
65
+ assert.deepStrictEqual(paginator.currentPages, [6, 7, 8, 9, 10])
66
+
67
+ paginator.init({ currentPage: 9 })
68
+ assert.deepStrictEqual(paginator.currentPages, [6, 7, 8, 9, 10])
69
+
70
+ paginator.init({ currentPage: 10 })
71
+ assert.deepStrictEqual(paginator.currentPages, [6, 7, 8, 9, 10])
72
+
73
+ paginator.init({ displayedPages: 6, currentPage: 5 })
74
+ assert.deepStrictEqual(paginator.currentPages, [2, 3, 4, 5, 6, 7])
75
+
76
+ paginator.init({ displayedPages: 6, currentPage: 7 })
77
+ assert.deepStrictEqual(paginator.currentPages, [4, 5, 6, 7, 8, 9])
24
78
 
25
- it('can be instantiated with parameters', () => {
26
- container.innerHTML = /* html */ `
27
- <ark-paginator page-size="12" displayed-pages="5"></ark-paginator>
28
- `
29
- const paginator = container.querySelector('ark-paginator')
30
- paginator.init({ collectionSize: 120, currentPage: 4 })
79
+ paginator.init({ displayedPages: 6, currentPage: 9 })
80
+ assert.deepStrictEqual(paginator.currentPages, [5, 6, 7, 8, 9, 10])
81
+ })
82
+
83
+ it('enables and notifies page changes', () => {
84
+ setup();
85
+ container.innerHTML = /* html */ `
86
+ <ark-paginator collection-size="100" page-size="10"
87
+ displayed-pages="5" current-page="1"></ark-paginator>
88
+ `
89
+ const paginator = container.querySelector('ark-paginator')
90
+
91
+ let pageChangedEvent = null
92
+ paginator.addEventListener(
93
+ 'page-changed', (event) => pageChangedEvent = event)
94
+
95
+ paginator._setCurrentPage(4)
96
+
97
+ assert.deepStrictEqual(paginator.currentPage, '4')
98
+ assert.ok(pageChangedEvent)
99
+ })
100
+
101
+ it('moves to the different pages', () => {
102
+ setup();
103
+ container.innerHTML = /* html */ `
104
+ <ark-paginator collection-size="100" page-size="10"
105
+ displayed-pages="5" current-page="1"></ark-paginator>
106
+ `
107
+ const paginator = container.querySelector('ark-paginator')
31
108
 
32
- expect(paginator.pageSize).toBe('12')
33
- expect(paginator.collectionSize).toBe('120')
34
- expect(paginator.currentPage).toBe('4')
35
- expect(paginator.displayedPages).toBe('5')
36
- expect(paginator.totalPages).toBe(10)
37
-
38
- paginator.init({ collectionSize: 120, pageSize: 10 })
39
- expect(paginator.totalPages).toBe(12)
40
- })
41
-
42
- it('computes the current shown pages', () => {
43
- container.innerHTML = /* html */ `
44
- <ark-paginator collection-size="120" page-size="12"
45
- displayed-pages="5" current-page="1"></ark-paginator>
46
- `
47
- const paginator = container.querySelector('ark-paginator')
48
-
49
- expect(paginator.currentPages).toEqual([1, 2, 3, 4, 5])
50
- expect(paginator.totalPages).toEqual(10)
51
-
52
- paginator.init({ currentPage: 3 })
53
- expect(paginator.currentPages).toEqual([1, 2, 3, 4, 5])
54
-
55
- paginator.init({ currentPage: 4 })
56
- expect(paginator.currentPages).toEqual([2, 3, 4, 5, 6])
57
-
58
- paginator.init({ currentPage: 5 })
59
- expect(paginator.currentPages).toEqual([3, 4, 5, 6, 7])
60
-
61
- paginator.init({ currentPage: 7 })
62
- expect(paginator.currentPages).toEqual([5, 6, 7, 8, 9])
63
-
64
- paginator.init({ currentPage: 8 })
65
- expect(paginator.currentPages).toEqual([6, 7, 8, 9, 10])
66
-
67
- paginator.init({ currentPage: 9 })
68
- expect(paginator.currentPages).toEqual([6, 7, 8, 9, 10])
69
-
70
- paginator.init({ currentPage: 10 })
71
- expect(paginator.currentPages).toEqual([6, 7, 8, 9, 10])
72
-
73
- paginator.init({ displayedPages: 6, currentPage: 5 })
74
- expect(paginator.currentPages).toEqual([2, 3, 4, 5, 6, 7])
75
-
76
- paginator.init({ displayedPages: 6, currentPage: 7 })
77
- expect(paginator.currentPages).toEqual([4, 5, 6, 7, 8, 9])
78
-
79
- paginator.init({ displayedPages: 6, currentPage: 9 })
80
- expect(paginator.currentPages).toEqual([5, 6, 7, 8, 9, 10])
81
- })
82
-
83
- it('enables and notifies page changes', () => {
84
- container.innerHTML = /* html */ `
85
- <ark-paginator collection-size="100" page-size="10"
86
- displayed-pages="5" current-page="1"></ark-paginator>
87
- `
88
- const paginator = container.querySelector('ark-paginator')
89
-
90
- let pageChangedEvent = null
91
- paginator.addEventListener(
92
- 'page-changed', (event) => pageChangedEvent = event)
93
-
94
- paginator._setCurrentPage(4)
95
-
96
- expect(paginator.currentPage).toEqual('4')
97
- expect(pageChangedEvent).toBeTruthy()
98
- })
99
-
100
- it('moves to the different pages', () => {
101
- container.innerHTML = /* html */ `
102
- <ark-paginator collection-size="100" page-size="10"
103
- displayed-pages="5" current-page="1"></ark-paginator>
104
- `
105
- const paginator = container.querySelector('ark-paginator')
106
-
107
- paginator.select('[data-page="4"]').click()
108
- expect(paginator.currentPage).toEqual('4')
109
-
110
- paginator.select('[data-page="6"]').click()
111
- expect(paginator.currentPage).toEqual('6')
112
-
113
- paginator.select('[on-click="_prev"]').click()
114
- expect(paginator.currentPage).toEqual('5')
115
-
116
- paginator.select('[on-click="_next"]').click()
117
- expect(paginator.currentPage).toEqual('6')
118
-
119
- paginator.select('[on-click="_first"]').click()
120
- expect(paginator.currentPage).toEqual('1')
121
-
122
- paginator.select('[on-click="_last"]').click()
123
- expect(paginator.currentPage).toEqual('10')
124
-
125
- paginator.select('[on-click="_next"]').click()
126
- expect(paginator.currentPage).toEqual('10')
127
- })
128
-
129
- it('can be provided with custom styleable elements', () => {
130
- container.innerHTML = /* html */ `
131
- <ark-paginator page-size="12" displayed-pages="5">
132
- <button data-first slot="first">
133
- <span style="pointer-events: none">FIRST</span>
134
- </button>
135
- <button data-previous slot="previous">BACK</button>
136
- <button data-page-general slot="page"></button>
137
- <button data-next slot="next"></button>
138
- <button data-last slot="last"></button>
139
- </ark-paginator>
140
- `
109
+ paginator.select('[data-page="4"]').click()
110
+ assert.deepStrictEqual(paginator.currentPage, '4')
111
+
112
+ paginator.select('[data-page="6"]').click()
113
+ assert.deepStrictEqual(paginator.currentPage, '6')
114
+
115
+ paginator.select('[on-click="_prev"]').click()
116
+ assert.deepStrictEqual(paginator.currentPage, '5')
117
+
118
+ paginator.select('[on-click="_next"]').click()
119
+ assert.deepStrictEqual(paginator.currentPage, '6')
120
+
121
+ paginator.select('[on-click="_first"]').click()
122
+ assert.deepStrictEqual(paginator.currentPage, '1')
123
+
124
+ paginator.select('[on-click="_last"]').click()
125
+ assert.deepStrictEqual(paginator.currentPage, '10')
126
+
127
+ paginator.select('[on-click="_next"]').click()
128
+ assert.deepStrictEqual(paginator.currentPage, '10')
129
+ })
141
130
 
142
- const paginator = container.querySelector('ark-paginator')
143
-
144
- expect(paginator.querySelector('[data-first]').innerHTML.trim()).toEqual(
145
- '<span style="pointer-events: none">FIRST</span>')
146
- expect(paginator.querySelector('[data-previous]').innerHTML.trim()).toEqual(
147
- 'BACK')
148
- expect(paginator.querySelector('[data-page-general]')).toBeTruthy()
149
- expect(paginator.querySelector('[data-next]')).toBeTruthy()
150
- expect(paginator.querySelector('[data-last]')).toBeTruthy()
151
- })
131
+ it('can be provided with custom styleable elements', () => {
132
+ setup();
133
+ container.innerHTML = /* html */ `
134
+ <ark-paginator page-size="12" displayed-pages="5">
135
+ <button data-first slot="first">
136
+ <span style="pointer-events: none">FIRST</span>
137
+ </button>
138
+ <button data-previous slot="previous">BACK</button>
139
+ <button data-page-general slot="page"></button>
140
+ <button data-next slot="next"></button>
141
+ <button data-last slot="last"></button>
142
+ </ark-paginator>
143
+ `
144
+
145
+ const paginator = container.querySelector('ark-paginator')
146
+
147
+ assert.deepStrictEqual(
148
+ paginator.querySelector('[data-first]').innerHTML.trim(),
149
+ '<span style="pointer-events: none">FIRST</span>'
150
+ )
151
+ assert.deepStrictEqual(paginator.querySelector('[data-previous]').innerHTML.trim(), 'BACK')
152
+ assert.ok(paginator.querySelector('[data-page-general]'))
153
+ assert.ok(paginator.querySelector('[data-next]'))
154
+ assert.ok(paginator.querySelector('[data-last]'))
152
155
  })
@@ -1 +1,2 @@
1
+ /** Pagination controls component. */
1
2
  export { Paginator } from './components/paginator.js'
@@ -1,2 +1,6 @@
1
1
  import styles from './ark.css.js'
2
- export default styles
2
+
3
+ /** @type {string} */
4
+ const stylesText = styles
5
+
6
+ export default stylesText
@@ -2,7 +2,12 @@ import { Component } from '#base/index.js'
2
2
  import styles from '../styles/index.js'
3
3
 
4
4
  const tag = 'ark-spinner'
5
+ /**
6
+ * Configurable loading spinner component.
7
+ */
5
8
  export class Spinner extends Component {
9
+ /** @param {object} context
10
+ * @returns {this} */
6
11
  init (context = {}) {
7
12
  this.scale = context.scale || this.scale || '1'
8
13
  this.type = context.type || this.type || 'circle'
@@ -14,6 +19,7 @@ export class Spinner extends Component {
14
19
  return ['scale', 'type']
15
20
  }
16
21
 
22
+ /** @returns {this} */
17
23
  render () {
18
24
  this.innerHTML = /* html */ `
19
25
  ${this.spinnerType(this.type)}
@@ -22,6 +28,8 @@ export class Spinner extends Component {
22
28
  return super.render()
23
29
  }
24
30
 
31
+ /** @param {string} scale
32
+ * @returns {void} */
25
33
  setScale (scale) {
26
34
  this.style.setProperty('transform', `scale(${scale})`)
27
35
  }
@@ -31,6 +39,8 @@ export class Spinner extends Component {
31
39
  return this.querySelector('[data-loader]')
32
40
  }
33
41
 
42
+ /** @param {string} type
43
+ * @returns {string} */
34
44
  spinnerType (type) {
35
45
  let content = ''
36
46
 
@@ -1,50 +1,45 @@
1
+ import { it } from 'node:test'
2
+ import assert from 'node:assert/strict'
1
3
  import './spinner.js'
2
4
 
3
- describe('Spinner', () => {
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 = /* html */ `
16
+ <ark-spinner></ark-spinner>
17
+ `
18
+ const spinner = container.querySelector('ark-spinner')
15
19
 
16
- it('can be instantiated', () => {
17
- container.innerHTML = /* html */ `
18
- <ark-spinner></ark-spinner>
19
- `
20
- const spinner = container.querySelector('ark-spinner')
21
-
22
- expect(spinner).toBeTruthy
23
- expect(spinner).toBe(spinner.init())
24
- })
25
-
26
- it('Different types of spinner can be used', () => {
27
- container.innerHTML = /* html */ `
28
- <ark-spinner type="chase"></ark-spinner>
29
- <ark-spinner type="rect"></ark-spinner>
30
- <ark-spinner type="loader"></ark-spinner>
31
- <ark-spinner type="bounce"></ark-spinner>
32
- `
33
- const spinner = container.querySelector('ark-spinner')
34
- const loader = spinner.loader
20
+ assert.ok(spinner)
21
+ assert.strictEqual(spinner, spinner.init())
22
+ })
35
23
 
36
- expect(spinner.loader).toBeCalled
37
- })
24
+ it('Different types of spinner can be used', () => {
25
+ setup()
26
+ container.innerHTML = /* html */ `
27
+ <ark-spinner type="chase"></ark-spinner>
28
+ <ark-spinner type="rect"></ark-spinner>
29
+ <ark-spinner type="loader"></ark-spinner>
30
+ <ark-spinner type="bounce"></ark-spinner>
31
+ `
32
+ const spinner = container.querySelector('ark-spinner')
33
+ assert.ok(spinner.loader)
34
+ })
38
35
 
39
- it('Can set the scale of the spinner', () => {
40
- container.innerHTML = /* html */ `
41
- <ark-spinner scale="2.5" type="chase"></ark-spinner>
42
- `
43
- const spinner = container.querySelector('ark-spinner')
36
+ it('Can set the scale of the spinner', () => {
37
+ setup()
38
+ container.innerHTML = /* html */ `
39
+ <ark-spinner scale="2.5" type="chase"></ark-spinner>
40
+ `
41
+ const spinner = container.querySelector('ark-spinner')
44
42
 
45
- expect(spinner.loader).toBeCalled
46
- expect(spinner.style.transform.split(')')[0].split('(')[1]).toBe(
47
- spinner.scale
48
- )
49
- })
43
+ assert.ok(spinner.loader)
44
+ assert.strictEqual(spinner.style.transform.split(')')[0].split('(')[1], spinner.scale)
50
45
  })
@@ -1 +1,2 @@
1
+ /** Loading indicator component. */
1
2
  export { Spinner } from './components/spinner.js'
@@ -1,2 +1,6 @@
1
1
  import styles from './ark.css.js'
2
- export default styles
2
+
3
+ /** @type {string} */
4
+ const stylesText = styles
5
+
6
+ export default stylesText
@@ -1,6 +1,9 @@
1
1
  import { Component } from "#base/index.js"
2
2
 
3
3
  const tag = 'ark-splitview-detail'
4
+ /**
5
+ * Detail slot wrapper for split-view component.
6
+ */
4
7
  export class SplitViewDetail extends Component {
5
8
  constructor () {
6
9
  super()
@@ -8,6 +11,8 @@ export class SplitViewDetail extends Component {
8
11
  'close', this.onClose.bind(this))
9
12
  }
10
13
 
14
+ /** @param {object} context
15
+ * @returns {this} */
11
16
  init (context = {}) {
12
17
  this.binding = 'splitview-detail-listen'
13
18
 
@@ -22,6 +27,7 @@ export class SplitViewDetail extends Component {
22
27
  return super.init(context)
23
28
  }
24
29
 
30
+ /** @returns {this} */
25
31
  render () {
26
32
  this.content = ''
27
33
  this.append(this.main)
@@ -29,16 +35,19 @@ export class SplitViewDetail extends Component {
29
35
  return super.render()
30
36
  }
31
37
 
32
- /** @param {Event} event */
38
+ /** @param {Event} event
39
+ * @returns {void} */
33
40
  onClose (event) {
34
41
  event.stopPropagation()
35
42
  this.hide()
36
43
  }
37
44
 
45
+ /** @returns {void} */
38
46
  show () {
39
47
  this.removeAttribute('hidden')
40
48
  }
41
49
 
50
+ /** @returns {void} */
42
51
  hide () {
43
52
  this.setAttribute('hidden', '')
44
53
  }