@rogieking/figui3 1.3.9 → 1.4.0
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/example.html +18 -7
- package/fig.js +150 -2
- package/package.json +1 -1
package/example.html
CHANGED
|
@@ -24,13 +24,24 @@
|
|
|
24
24
|
</fig-header>
|
|
25
25
|
<fig-content>
|
|
26
26
|
<fig-field>
|
|
27
|
-
<fig-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
27
|
+
<fig-tooltip text="Options">
|
|
28
|
+
<fig-dropdown>
|
|
29
|
+
<option>One</option>
|
|
30
|
+
<option>Two</option>
|
|
31
|
+
</fig-dropdown>
|
|
32
|
+
</fig-tooltip>
|
|
33
|
+
|
|
34
|
+
</fig-field>
|
|
35
|
+
<fig-field>
|
|
36
|
+
<fig-tooltip text="Delta slider">
|
|
37
|
+
<fig-slider type="delta"
|
|
38
|
+
value=".25"
|
|
39
|
+
default="2"
|
|
40
|
+
step="0.1"
|
|
41
|
+
max="5"
|
|
42
|
+
min="-5">
|
|
43
|
+
</fig-slider>
|
|
44
|
+
</fig-tooltip>
|
|
34
45
|
</fig-field>
|
|
35
46
|
|
|
36
47
|
<br /><br />
|
package/fig.js
CHANGED
|
@@ -6,7 +6,12 @@ function figSupportsPopover() {
|
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
if (window.customElements && !window.customElements.get("fig-button")) {
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* A custom button element that supports different types and states.
|
|
11
|
+
* @attr {string} type - The button type: "button" (default), "toggle", or "submit"
|
|
12
|
+
* @attr {boolean} selected - Whether the button is in a selected state
|
|
13
|
+
* @attr {boolean} disabled - Whether the button is disabled
|
|
14
|
+
*/
|
|
10
15
|
class FigButton extends HTMLElement {
|
|
11
16
|
type;
|
|
12
17
|
#selected;
|
|
@@ -100,7 +105,11 @@ if (window.customElements && !window.customElements.get("fig-button")) {
|
|
|
100
105
|
}
|
|
101
106
|
|
|
102
107
|
if (window.customElements && !window.customElements.get("fig-dropdown")) {
|
|
103
|
-
|
|
108
|
+
/**
|
|
109
|
+
* A custom dropdown/select element.
|
|
110
|
+
* @attr {string} type - The dropdown type: "select" (default) or "dropdown"
|
|
111
|
+
* @attr {string} value - The currently selected value
|
|
112
|
+
*/
|
|
104
113
|
class FigDropdown extends HTMLElement {
|
|
105
114
|
constructor() {
|
|
106
115
|
super();
|
|
@@ -200,13 +209,26 @@ if (window.customElements && !window.customElements.get("fig-dropdown")) {
|
|
|
200
209
|
}
|
|
201
210
|
|
|
202
211
|
/* Tooltip */
|
|
212
|
+
/**
|
|
213
|
+
* A custom tooltip element that displays on hover or click.
|
|
214
|
+
* @attr {string} action - The trigger action: "hover" (default) or "click"
|
|
215
|
+
* @attr {number} delay - Delay in milliseconds before showing tooltip (default: 500)
|
|
216
|
+
* @attr {string} text - The tooltip text content
|
|
217
|
+
* @attr {string} offset - Comma-separated offset values: left,top,right,bottom
|
|
218
|
+
*/
|
|
203
219
|
class FigTooltip extends HTMLElement {
|
|
220
|
+
#boundHideOnChromeOpen;
|
|
221
|
+
#boundHideOnDragStart;
|
|
204
222
|
constructor() {
|
|
205
223
|
super();
|
|
206
224
|
this.action = this.getAttribute("action") || "hover";
|
|
207
225
|
let delay = parseInt(this.getAttribute("delay"));
|
|
208
226
|
this.delay = !isNaN(delay) ? delay : 500;
|
|
209
227
|
this.isOpen = false;
|
|
228
|
+
|
|
229
|
+
// Bind methods that will be used as event listeners
|
|
230
|
+
this.#boundHideOnChromeOpen = this.#hideOnChromeOpen.bind(this);
|
|
231
|
+
this.#boundHideOnDragStart = this.hidePopup.bind(this);
|
|
210
232
|
}
|
|
211
233
|
connectedCallback() {
|
|
212
234
|
this.setup();
|
|
@@ -215,6 +237,14 @@ class FigTooltip extends HTMLElement {
|
|
|
215
237
|
|
|
216
238
|
disconnectedCallback() {
|
|
217
239
|
this.destroy();
|
|
240
|
+
// Remove global listeners
|
|
241
|
+
document.removeEventListener(
|
|
242
|
+
"mousedown",
|
|
243
|
+
this.#boundHideOnChromeOpen,
|
|
244
|
+
true
|
|
245
|
+
);
|
|
246
|
+
// Remove mousedown listener
|
|
247
|
+
this.removeEventListener("mousedown", this.#boundHideOnDragStart);
|
|
218
248
|
}
|
|
219
249
|
|
|
220
250
|
setup() {
|
|
@@ -244,6 +274,8 @@ class FigTooltip extends HTMLElement {
|
|
|
244
274
|
if (this.action === "hover") {
|
|
245
275
|
this.addEventListener("pointerenter", this.showDelayedPopup.bind(this));
|
|
246
276
|
this.addEventListener("pointerleave", this.hidePopup.bind(this));
|
|
277
|
+
// Add mousedown listener instead of dragstart
|
|
278
|
+
this.addEventListener("mousedown", this.#boundHideOnDragStart);
|
|
247
279
|
} else if (this.action === "click") {
|
|
248
280
|
this.addEventListener("click", this.showDelayedPopup.bind(this));
|
|
249
281
|
document.body.addEventListener(
|
|
@@ -251,6 +283,9 @@ class FigTooltip extends HTMLElement {
|
|
|
251
283
|
this.hidePopupOutsideClick.bind(this)
|
|
252
284
|
);
|
|
253
285
|
}
|
|
286
|
+
|
|
287
|
+
// Add listener for chrome interactions
|
|
288
|
+
document.addEventListener("mousedown", this.#boundHideOnChromeOpen, true);
|
|
254
289
|
}
|
|
255
290
|
|
|
256
291
|
getOffset() {
|
|
@@ -331,11 +366,31 @@ class FigTooltip extends HTMLElement {
|
|
|
331
366
|
this.delay = !isNaN(delay) ? delay : 500;
|
|
332
367
|
}
|
|
333
368
|
}
|
|
369
|
+
|
|
370
|
+
#hideOnChromeOpen(e) {
|
|
371
|
+
if (!this.isOpen) return;
|
|
372
|
+
|
|
373
|
+
// Check if the clicked element is a select or opens a dialog
|
|
374
|
+
const target = e.target;
|
|
375
|
+
if (
|
|
376
|
+
target.tagName === "SELECT" ||
|
|
377
|
+
target.hasAttribute("popover") ||
|
|
378
|
+
target.closest("dialog") ||
|
|
379
|
+
target.onclick?.toString().includes("alert")
|
|
380
|
+
) {
|
|
381
|
+
this.hidePopup();
|
|
382
|
+
}
|
|
383
|
+
}
|
|
334
384
|
}
|
|
335
385
|
|
|
336
386
|
customElements.define("fig-tooltip", FigTooltip);
|
|
337
387
|
|
|
338
388
|
/* Popover */
|
|
389
|
+
/**
|
|
390
|
+
* A custom popover element extending FigTooltip.
|
|
391
|
+
* @attr {string} action - The trigger action: "click" (default) or "hover"
|
|
392
|
+
* @attr {string} size - The size of the popover
|
|
393
|
+
*/
|
|
339
394
|
class FigPopover extends FigTooltip {
|
|
340
395
|
static observedAttributes = ["action", "size"];
|
|
341
396
|
|
|
@@ -361,6 +416,11 @@ class FigPopover extends FigTooltip {
|
|
|
361
416
|
customElements.define("fig-popover", FigPopover);
|
|
362
417
|
|
|
363
418
|
/* Dialog */
|
|
419
|
+
/**
|
|
420
|
+
* A custom dialog element for modal and non-modal dialogs.
|
|
421
|
+
* @attr {boolean} open - Whether the dialog is visible
|
|
422
|
+
* @attr {boolean} modal - Whether the dialog should be modal
|
|
423
|
+
*/
|
|
364
424
|
class FigDialog extends HTMLElement {
|
|
365
425
|
constructor() {
|
|
366
426
|
super();
|
|
@@ -545,6 +605,11 @@ class FigPopover2 extends HTMLElement {
|
|
|
545
605
|
window.customElements.define("fig-popover-2", FigPopover2);
|
|
546
606
|
|
|
547
607
|
/* Tabs */
|
|
608
|
+
/**
|
|
609
|
+
* A custom tab element for use within FigTabs.
|
|
610
|
+
* @attr {string} label - The text label of the tab
|
|
611
|
+
* @attr {boolean} selected - Whether the tab is currently selected
|
|
612
|
+
*/
|
|
548
613
|
class FigTab extends HTMLElement {
|
|
549
614
|
constructor() {
|
|
550
615
|
super();
|
|
@@ -562,6 +627,10 @@ class FigTab extends HTMLElement {
|
|
|
562
627
|
}
|
|
563
628
|
window.customElements.define("fig-tab", FigTab);
|
|
564
629
|
|
|
630
|
+
/**
|
|
631
|
+
* A custom tabs container element.
|
|
632
|
+
* @attr {string} name - Identifier for the tabs group
|
|
633
|
+
*/
|
|
565
634
|
class FigTabs extends HTMLElement {
|
|
566
635
|
constructor() {
|
|
567
636
|
super();
|
|
@@ -590,6 +659,11 @@ class FigTabs extends HTMLElement {
|
|
|
590
659
|
window.customElements.define("fig-tabs", FigTabs);
|
|
591
660
|
|
|
592
661
|
/* Segmented Control */
|
|
662
|
+
/**
|
|
663
|
+
* A custom segment element for use within FigSegmentedControl.
|
|
664
|
+
* @attr {string} value - The value associated with this segment
|
|
665
|
+
* @attr {boolean} selected - Whether the segment is currently selected
|
|
666
|
+
*/
|
|
593
667
|
class FigSegment extends HTMLElement {
|
|
594
668
|
#value;
|
|
595
669
|
#selected;
|
|
@@ -635,6 +709,10 @@ class FigSegment extends HTMLElement {
|
|
|
635
709
|
}
|
|
636
710
|
window.customElements.define("fig-segment", FigSegment);
|
|
637
711
|
|
|
712
|
+
/**
|
|
713
|
+
* A custom segmented control container element.
|
|
714
|
+
* @attr {string} name - Identifier for the segmented control group
|
|
715
|
+
*/
|
|
638
716
|
class FigSegmentedControl extends HTMLElement {
|
|
639
717
|
constructor() {
|
|
640
718
|
super();
|
|
@@ -660,6 +738,19 @@ class FigSegmentedControl extends HTMLElement {
|
|
|
660
738
|
window.customElements.define("fig-segmented-control", FigSegmentedControl);
|
|
661
739
|
|
|
662
740
|
/* Slider */
|
|
741
|
+
/**
|
|
742
|
+
* A custom slider input element.
|
|
743
|
+
* @attr {string} type - The slider type: "range", "hue", "delta", "stepper", or "opacity"
|
|
744
|
+
* @attr {number} value - The current value of the slider
|
|
745
|
+
* @attr {number} min - The minimum value
|
|
746
|
+
* @attr {number} max - The maximum value
|
|
747
|
+
* @attr {number} step - The step increment
|
|
748
|
+
* @attr {boolean} text - Whether to show a text input alongside the slider
|
|
749
|
+
* @attr {string} units - The units to display after the value
|
|
750
|
+
* @attr {number} transform - A multiplier for the displayed value
|
|
751
|
+
* @attr {boolean} disabled - Whether the slider is disabled
|
|
752
|
+
* @attr {string} color - The color for the slider track (for opacity type)
|
|
753
|
+
*/
|
|
663
754
|
class FigSlider extends HTMLElement {
|
|
664
755
|
#typeDefaults = {
|
|
665
756
|
range: { min: 0, max: 100, step: 1 },
|
|
@@ -882,6 +973,18 @@ class FigSlider extends HTMLElement {
|
|
|
882
973
|
}
|
|
883
974
|
window.customElements.define("fig-slider", FigSlider);
|
|
884
975
|
|
|
976
|
+
/**
|
|
977
|
+
* A custom text input element.
|
|
978
|
+
* @attr {string} type - Input type: "text" (default) or "number"
|
|
979
|
+
* @attr {string} value - The current input value
|
|
980
|
+
* @attr {string} placeholder - Placeholder text
|
|
981
|
+
* @attr {boolean} disabled - Whether the input is disabled
|
|
982
|
+
* @attr {boolean} multiline - Whether to use a textarea instead of input
|
|
983
|
+
* @attr {number} min - Minimum value (for number type)
|
|
984
|
+
* @attr {number} max - Maximum value (for number type)
|
|
985
|
+
* @attr {number} step - Step increment (for number type)
|
|
986
|
+
* @attr {number} transform - A multiplier for displayed number values
|
|
987
|
+
*/
|
|
885
988
|
class FigInputText extends HTMLElement {
|
|
886
989
|
#boundMouseMove;
|
|
887
990
|
#boundMouseUp;
|
|
@@ -1437,6 +1540,14 @@ class FigInputColor extends HTMLElement {
|
|
|
1437
1540
|
window.customElements.define("fig-input-color", FigInputColor);
|
|
1438
1541
|
|
|
1439
1542
|
/* Checkbox */
|
|
1543
|
+
/**
|
|
1544
|
+
* A custom checkbox input element.
|
|
1545
|
+
* @attr {boolean} checked - Whether the checkbox is checked
|
|
1546
|
+
* @attr {boolean} disabled - Whether the checkbox is disabled
|
|
1547
|
+
* @attr {string} label - The label text
|
|
1548
|
+
* @attr {string} name - The form field name
|
|
1549
|
+
* @attr {string} value - The value when checked
|
|
1550
|
+
*/
|
|
1440
1551
|
class FigCheckbox extends HTMLElement {
|
|
1441
1552
|
constructor() {
|
|
1442
1553
|
super();
|
|
@@ -1508,6 +1619,14 @@ class FigCheckbox extends HTMLElement {
|
|
|
1508
1619
|
window.customElements.define("fig-checkbox", FigCheckbox);
|
|
1509
1620
|
|
|
1510
1621
|
/* Radio */
|
|
1622
|
+
/**
|
|
1623
|
+
* A custom radio input element extending FigCheckbox.
|
|
1624
|
+
* @attr {boolean} checked - Whether the radio is selected
|
|
1625
|
+
* @attr {boolean} disabled - Whether the radio is disabled
|
|
1626
|
+
* @attr {string} label - The label text
|
|
1627
|
+
* @attr {string} name - The radio group name
|
|
1628
|
+
* @attr {string} value - The value when selected
|
|
1629
|
+
*/
|
|
1511
1630
|
class FigRadio extends FigCheckbox {
|
|
1512
1631
|
constructor() {
|
|
1513
1632
|
super();
|
|
@@ -1518,6 +1637,14 @@ class FigRadio extends FigCheckbox {
|
|
|
1518
1637
|
window.customElements.define("fig-radio", FigRadio);
|
|
1519
1638
|
|
|
1520
1639
|
/* Switch */
|
|
1640
|
+
/**
|
|
1641
|
+
* A custom switch/toggle input element extending FigCheckbox.
|
|
1642
|
+
* @attr {boolean} checked - Whether the switch is on
|
|
1643
|
+
* @attr {boolean} disabled - Whether the switch is disabled
|
|
1644
|
+
* @attr {string} label - The label text
|
|
1645
|
+
* @attr {string} name - The form field name
|
|
1646
|
+
* @attr {string} value - The value when on
|
|
1647
|
+
*/
|
|
1521
1648
|
class FigSwitch extends FigCheckbox {
|
|
1522
1649
|
render() {
|
|
1523
1650
|
this.input.setAttribute("class", "switch");
|
|
@@ -1550,6 +1677,12 @@ class FigAccordion extends HTMLElement {
|
|
|
1550
1677
|
window.customElements.define("fig-accordion", FigAccordion);
|
|
1551
1678
|
|
|
1552
1679
|
/* Combo Input */
|
|
1680
|
+
/**
|
|
1681
|
+
* A custom combo input with text and dropdown.
|
|
1682
|
+
* @attr {string} options - Comma-separated list of dropdown options
|
|
1683
|
+
* @attr {string} placeholder - Placeholder text for the input
|
|
1684
|
+
* @attr {string} value - The current input value
|
|
1685
|
+
*/
|
|
1553
1686
|
class FigComboInput extends HTMLElement {
|
|
1554
1687
|
constructor() {
|
|
1555
1688
|
super();
|
|
@@ -1618,6 +1751,14 @@ class FigComboInput extends HTMLElement {
|
|
|
1618
1751
|
window.customElements.define("fig-combo-input", FigComboInput);
|
|
1619
1752
|
|
|
1620
1753
|
/* Chit */
|
|
1754
|
+
/**
|
|
1755
|
+
* A custom color/image chip element.
|
|
1756
|
+
* @attr {string} type - The chip type: "color" or "image"
|
|
1757
|
+
* @attr {string} src - Image source URL (for image type)
|
|
1758
|
+
* @attr {string} value - Color value (for color type)
|
|
1759
|
+
* @attr {string} size - Size of the chip: "small" (default) or "large"
|
|
1760
|
+
* @attr {boolean} disabled - Whether the chip is disabled
|
|
1761
|
+
*/
|
|
1621
1762
|
class FigChit extends HTMLElement {
|
|
1622
1763
|
constructor() {
|
|
1623
1764
|
super();
|
|
@@ -1666,6 +1807,13 @@ class FigChit extends HTMLElement {
|
|
|
1666
1807
|
window.customElements.define("fig-chit", FigChit);
|
|
1667
1808
|
|
|
1668
1809
|
/* Upload */
|
|
1810
|
+
/**
|
|
1811
|
+
* A custom image upload element.
|
|
1812
|
+
* @attr {string} src - The current image source URL
|
|
1813
|
+
* @attr {boolean} upload - Whether to show the upload button
|
|
1814
|
+
* @attr {string} label - The upload button label
|
|
1815
|
+
* @attr {string} size - Size of the image preview
|
|
1816
|
+
*/
|
|
1669
1817
|
class FigImage extends HTMLElement {
|
|
1670
1818
|
constructor() {
|
|
1671
1819
|
super();
|