@api-client/ui 0.5.7 → 0.5.9
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/build/src/elements/mention-textarea/internals/MentionTextArea.d.ts +225 -0
- package/build/src/elements/mention-textarea/internals/MentionTextArea.d.ts.map +1 -0
- package/build/src/elements/mention-textarea/internals/MentionTextArea.js +1065 -0
- package/build/src/elements/mention-textarea/internals/MentionTextArea.js.map +1 -0
- package/build/src/elements/mention-textarea/internals/MentionTextArea.styles.d.ts +3 -0
- package/build/src/elements/mention-textarea/internals/MentionTextArea.styles.d.ts.map +1 -0
- package/build/src/elements/mention-textarea/internals/MentionTextArea.styles.js +274 -0
- package/build/src/elements/mention-textarea/internals/MentionTextArea.styles.js.map +1 -0
- package/build/src/elements/mention-textarea/ui-mention-textarea.d.ts +13 -0
- package/build/src/elements/mention-textarea/ui-mention-textarea.d.ts.map +1 -0
- package/build/src/elements/mention-textarea/ui-mention-textarea.js +28 -0
- package/build/src/elements/mention-textarea/ui-mention-textarea.js.map +1 -0
- package/build/src/md/chip/internals/Chip.styles.d.ts.map +1 -1
- package/build/src/md/chip/internals/Chip.styles.js +2 -0
- package/build/src/md/chip/internals/Chip.styles.js.map +1 -1
- package/demo/elements/index.html +3 -0
- package/demo/elements/mention-textarea/index.html +19 -0
- package/demo/elements/mention-textarea/index.ts +205 -0
- package/package.json +2 -2
- package/src/elements/mention-textarea/internals/MentionTextArea.styles.ts +274 -0
- package/src/elements/mention-textarea/internals/MentionTextArea.ts +1068 -0
- package/src/elements/mention-textarea/ui-mention-textarea.ts +18 -0
- package/src/md/chip/internals/Chip.styles.ts +2 -0
- package/test/elements/http/CertificateAdd.test.ts +0 -3
- package/test/elements/mention-textarea/MentionTextArea.basic.test.ts +114 -0
- package/test/elements/mention-textarea/MentionTextArea.test.ts +613 -0
- package/tsconfig.json +1 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { CSSResultOrNative } from 'lit'
|
|
2
|
+
import { customElement } from 'lit/decorators.js'
|
|
3
|
+
import Element from './internals/MentionTextArea.js'
|
|
4
|
+
import styles from './internals/MentionTextArea.styles.js'
|
|
5
|
+
|
|
6
|
+
@customElement('mention-textarea')
|
|
7
|
+
export class MentionTextAreaElement extends Element {
|
|
8
|
+
static override styles: CSSResultOrNative[] = [styles]
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
declare global {
|
|
12
|
+
interface HTMLElementTagNameMap {
|
|
13
|
+
'mention-textarea': MentionTextAreaElement
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export default MentionTextAreaElement
|
|
18
|
+
export type { MentionSuggestion, MentionInsertEvent, MentionRemoveEvent } from './internals/MentionTextArea.js'
|
|
@@ -14,6 +14,8 @@ export default css`
|
|
|
14
14
|
letter-spacing: var(--md-sys-typescale-label-large-tracking);
|
|
15
15
|
line-height: var(--md-sys-typescale-label-large-height);
|
|
16
16
|
|
|
17
|
+
white-space: normal;
|
|
18
|
+
|
|
17
19
|
--md-ripple-hover-state-layer-color: var(--md-sys-color-on-surface);
|
|
18
20
|
--md-ripple-focus-state-layer-color: var(--md-sys-color-on-surface);
|
|
19
21
|
--md-ripple-pressed-state-layer-color: var(--md-sys-color-primary);
|
|
@@ -202,7 +202,6 @@ describe.skip('elements', () => {
|
|
|
202
202
|
const event = e as CustomEvent<{
|
|
203
203
|
path: string
|
|
204
204
|
options: FileReadOptions
|
|
205
|
-
// eslint-disable-next-line no-restricted-globals
|
|
206
205
|
result: Promise<string | ArrayBuffer | Buffer>
|
|
207
206
|
}>
|
|
208
207
|
readOptions = event.detail.options
|
|
@@ -252,7 +251,6 @@ describe.skip('elements', () => {
|
|
|
252
251
|
const event = e as CustomEvent<{
|
|
253
252
|
path: string
|
|
254
253
|
options: FileReadOptions
|
|
255
|
-
// eslint-disable-next-line no-restricted-globals
|
|
256
254
|
result: Promise<string | ArrayBuffer | Buffer>
|
|
257
255
|
}>
|
|
258
256
|
readOptions = event.detail.options
|
|
@@ -314,7 +312,6 @@ describe.skip('elements', () => {
|
|
|
314
312
|
const event = e as CustomEvent<{
|
|
315
313
|
path: string
|
|
316
314
|
options: FileReadOptions
|
|
317
|
-
// eslint-disable-next-line no-restricted-globals
|
|
318
315
|
result: Promise<string | ArrayBuffer | Buffer>
|
|
319
316
|
}>
|
|
320
317
|
readOptions = event.detail.options
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { assert, fixture, html, nextFrame } from '@open-wc/testing'
|
|
2
|
+
import '../../../src/elements/mention-textarea/ui-mention-textarea.js'
|
|
3
|
+
|
|
4
|
+
type MentionTextAreaElement =
|
|
5
|
+
import('../../../src/elements/mention-textarea/ui-mention-textarea.js').MentionTextAreaElement
|
|
6
|
+
|
|
7
|
+
describe('MentionTextArea - Basic Tests', () => {
|
|
8
|
+
async function basicFixture(): Promise<MentionTextAreaElement> {
|
|
9
|
+
return fixture(html`<mention-textarea></mention-textarea>`)
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function getEditor(element: MentionTextAreaElement): HTMLElement {
|
|
13
|
+
return element.shadowRoot!.querySelector('.editor')!
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
describe('basic functionality', () => {
|
|
17
|
+
it('should render with default properties', async () => {
|
|
18
|
+
const element = await basicFixture()
|
|
19
|
+
|
|
20
|
+
assert.isNotNull(element)
|
|
21
|
+
assert.equal(element.label, '')
|
|
22
|
+
assert.equal(element.value, '')
|
|
23
|
+
assert.equal(element.mentionTrigger, '@')
|
|
24
|
+
assert.equal(element.minQueryLength, 0)
|
|
25
|
+
assert.isFalse(element.disabled)
|
|
26
|
+
assert.isFalse(element.required)
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
it('should have proper shadow DOM structure', async () => {
|
|
30
|
+
const element = await basicFixture()
|
|
31
|
+
|
|
32
|
+
const container = element.shadowRoot!.querySelector('.container')
|
|
33
|
+
const editor = getEditor(element)
|
|
34
|
+
|
|
35
|
+
assert.isNotNull(container)
|
|
36
|
+
assert.isNotNull(editor)
|
|
37
|
+
assert.equal(editor.getAttribute('contenteditable'), 'true')
|
|
38
|
+
assert.equal(editor.getAttribute('role'), 'textbox')
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
it('should update value when set programmatically', async () => {
|
|
42
|
+
const element = await basicFixture()
|
|
43
|
+
|
|
44
|
+
element.value = 'Test value'
|
|
45
|
+
await nextFrame()
|
|
46
|
+
|
|
47
|
+
assert.equal(element.value, 'Test value')
|
|
48
|
+
|
|
49
|
+
const editor = getEditor(element)
|
|
50
|
+
assert.equal(editor.textContent, 'Test value')
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
it('should handle disabled state', async () => {
|
|
54
|
+
const element = await basicFixture()
|
|
55
|
+
element.disabled = true
|
|
56
|
+
await nextFrame()
|
|
57
|
+
|
|
58
|
+
const editor = getEditor(element)
|
|
59
|
+
assert.equal(editor.getAttribute('contenteditable'), 'false')
|
|
60
|
+
assert.equal(editor.getAttribute('tabindex'), '-1')
|
|
61
|
+
})
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
describe('mentions getter - basic tests', () => {
|
|
65
|
+
it('should return empty array for empty value', async () => {
|
|
66
|
+
const element = await basicFixture()
|
|
67
|
+
|
|
68
|
+
assert.deepEqual(element.mentions, [])
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
it('should return empty array for text without mentions', async () => {
|
|
72
|
+
const element = await basicFixture()
|
|
73
|
+
element.value = 'Hello world'
|
|
74
|
+
await nextFrame()
|
|
75
|
+
|
|
76
|
+
assert.deepEqual(element.mentions, [])
|
|
77
|
+
})
|
|
78
|
+
|
|
79
|
+
it('should extract mention IDs from value', async () => {
|
|
80
|
+
const element = await basicFixture()
|
|
81
|
+
element.value = 'Hello @{user1} and @{user2}'
|
|
82
|
+
await nextFrame()
|
|
83
|
+
|
|
84
|
+
const mentions = element.mentions.sort()
|
|
85
|
+
assert.deepEqual(mentions, ['user1', 'user2'])
|
|
86
|
+
})
|
|
87
|
+
})
|
|
88
|
+
|
|
89
|
+
describe('getPlainText method - basic tests', () => {
|
|
90
|
+
it('should return same text when no mentions', async () => {
|
|
91
|
+
const element = await basicFixture()
|
|
92
|
+
element.value = 'Hello world'
|
|
93
|
+
await nextFrame()
|
|
94
|
+
|
|
95
|
+
assert.equal(element.getPlainText(), 'Hello world')
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
it('should replace mentions with IDs when no suggestions', async () => {
|
|
99
|
+
const element = await basicFixture()
|
|
100
|
+
element.value = 'Hello @{user1} world'
|
|
101
|
+
await nextFrame()
|
|
102
|
+
|
|
103
|
+
assert.equal(element.getPlainText(), 'Hello user1 world')
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
it('should handle empty value', async () => {
|
|
107
|
+
const element = await basicFixture()
|
|
108
|
+
element.value = ''
|
|
109
|
+
await nextFrame()
|
|
110
|
+
|
|
111
|
+
assert.equal(element.getPlainText(), '')
|
|
112
|
+
})
|
|
113
|
+
})
|
|
114
|
+
})
|