@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.
Files changed (27) hide show
  1. package/build/src/elements/mention-textarea/internals/MentionTextArea.d.ts +225 -0
  2. package/build/src/elements/mention-textarea/internals/MentionTextArea.d.ts.map +1 -0
  3. package/build/src/elements/mention-textarea/internals/MentionTextArea.js +1065 -0
  4. package/build/src/elements/mention-textarea/internals/MentionTextArea.js.map +1 -0
  5. package/build/src/elements/mention-textarea/internals/MentionTextArea.styles.d.ts +3 -0
  6. package/build/src/elements/mention-textarea/internals/MentionTextArea.styles.d.ts.map +1 -0
  7. package/build/src/elements/mention-textarea/internals/MentionTextArea.styles.js +274 -0
  8. package/build/src/elements/mention-textarea/internals/MentionTextArea.styles.js.map +1 -0
  9. package/build/src/elements/mention-textarea/ui-mention-textarea.d.ts +13 -0
  10. package/build/src/elements/mention-textarea/ui-mention-textarea.d.ts.map +1 -0
  11. package/build/src/elements/mention-textarea/ui-mention-textarea.js +28 -0
  12. package/build/src/elements/mention-textarea/ui-mention-textarea.js.map +1 -0
  13. package/build/src/md/chip/internals/Chip.styles.d.ts.map +1 -1
  14. package/build/src/md/chip/internals/Chip.styles.js +2 -0
  15. package/build/src/md/chip/internals/Chip.styles.js.map +1 -1
  16. package/demo/elements/index.html +3 -0
  17. package/demo/elements/mention-textarea/index.html +19 -0
  18. package/demo/elements/mention-textarea/index.ts +205 -0
  19. package/package.json +2 -2
  20. package/src/elements/mention-textarea/internals/MentionTextArea.styles.ts +274 -0
  21. package/src/elements/mention-textarea/internals/MentionTextArea.ts +1068 -0
  22. package/src/elements/mention-textarea/ui-mention-textarea.ts +18 -0
  23. package/src/md/chip/internals/Chip.styles.ts +2 -0
  24. package/test/elements/http/CertificateAdd.test.ts +0 -3
  25. package/test/elements/mention-textarea/MentionTextArea.basic.test.ts +114 -0
  26. package/test/elements/mention-textarea/MentionTextArea.test.ts +613 -0
  27. 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
+ })