-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbe-typed.js
107 lines (97 loc) · 2.88 KB
/
be-typed.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
// @ts-check
import { resolved, rejected, propInfo} from 'be-enhanced/cc.js';
import { BE } from 'be-enhanced/BE.js';
import {dispatchEvent as de} from 'trans-render/positractions/dispatchEvent.js';
/** @import {BEConfig, IEnhancement, BEAllProps} from './ts-refs/be-enhanced/types.d.ts' */
/** @import {Actions, PAP, AllProps, AP, BAP, ITyper} from './ts-refs/be-typed/types.d.ts' */;
/**
* @implements {Actions}
*
*/
class BeTyped extends BE {
/**
* @type {BEConfig<BAP, Actions & IEnhancement>}
*/
static config = {
propDefaults:{
byob: true,
triggerInsertPosition: 'beforeend',
labelTextContainer: 'span',
buttonContent: '⚙️'
},
propInfo:{
...propInfo,
trigger: {
ro: true,
}
},
positractions: [resolved, rejected],
compacts:{
when_triggerInsertPosition_changes_invoke_addTypeBtn: 0
},
actions:{
setBtnContent: {
ifAllOf: ['buttonContent'],
ifNoneOf: ['byob']
}
},
handlers:{
trigger_to_openDialog_on: 'click'
}
}
de = de;
/**
*
* @param {BAP} self
* @returns
*/
async addTypeBtn(self){
let byob = true;
const {triggerInsertPosition, enhancedElement} = self;
const {findAdjacentElement} = await import('trans-render/lib/findAdjacentElement.js');
let trigger = /** @type {HTMLButtonElement | null} */ (findAdjacentElement(triggerInsertPosition, enhancedElement, 'button.be-clonable-trigger'));
if(trigger === null){
byob = false;
trigger = document.createElement('button');
trigger.type = 'button';
trigger.classList.add('be-typed-trigger');
trigger.ariaLabel = 'Configure input.';
trigger.title = 'Configure input.';
enhancedElement.insertAdjacentElement(triggerInsertPosition, trigger);
}
return /** @type {PAP} */ ({
trigger: new WeakRef(trigger),
resolved: true,
byob
});
}
/**
*
* @param {BAP} self
*/
setBtnContent(self){
const {buttonContent, trigger} = self;
const triggerEl = trigger.deref();
if(triggerEl === undefined) return;
//TODO: use trusted types
triggerEl.textContent = buttonContent;
}
/**
* @type {ITyper | undefined}
*/
#typer;
/**
*
* @param {BAP} self
*/
async openDialog(self){
if(this.#typer === undefined){
const {enhancedElement} = self;
const {Typer} = await import('./Typer.js');
this.#typer = new Typer(enhancedElement, self);
}
this.#typer.showDialog();
}
}
await BeTyped.bootUp();
export { BeTyped }