@shibui-ui/ui 1.24.1 → 1.25.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.
- package/dist/components/atoms/index.d.ts +45 -16
- package/dist/components/atoms/index.d.ts.map +1 -1
- package/dist/components/molecules/index.d.ts +20 -1
- package/dist/components/molecules/index.d.ts.map +1 -1
- package/dist/components/organisms/index.d.ts +17 -1
- package/dist/components/organisms/index.d.ts.map +1 -1
- package/dist/index.d.ts +3 -82
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +79 -80
- package/dist/index.js.map +1 -1
- package/dist/index10.js +82 -18
- package/dist/index10.js.map +1 -1
- package/dist/index11.js +84 -69
- package/dist/index11.js.map +1 -1
- package/dist/index12.js +40 -26
- package/dist/index12.js.map +1 -1
- package/dist/index13.js +16 -39
- package/dist/index13.js.map +1 -1
- package/dist/index14.js +29 -44
- package/dist/index14.js.map +1 -1
- package/dist/index15.js +16 -117
- package/dist/index15.js.map +1 -1
- package/dist/index16.js +48 -40
- package/dist/index16.js.map +1 -1
- package/dist/index17.js +41 -25
- package/dist/index17.js.map +1 -1
- package/dist/index18.js +76 -49
- package/dist/index18.js.map +1 -1
- package/dist/index19.js +19 -39
- package/dist/index19.js.map +1 -1
- package/dist/index194.js +94 -24
- package/dist/index194.js.map +1 -1
- package/dist/index195.js +2 -2
- package/dist/index197.js +2 -24
- package/dist/index197.js.map +1 -1
- package/dist/index198.js +74 -2
- package/dist/index198.js.map +1 -1
- package/dist/index199.js +64 -35
- package/dist/index199.js.map +1 -1
- package/dist/index20.js +21 -41
- package/dist/index20.js.map +1 -1
- package/dist/index200.js +2 -2
- package/dist/index201.js +54 -13
- package/dist/index201.js.map +1 -1
- package/dist/index202.js +2 -2
- package/dist/index203.js +2 -2
- package/dist/index204.js +143 -157
- package/dist/index204.js.map +1 -1
- package/dist/index205.js +43 -24
- package/dist/index205.js.map +1 -1
- package/dist/index206.js +51 -2
- package/dist/index206.js.map +1 -1
- package/dist/index207.js +2 -11
- package/dist/index207.js.map +1 -1
- package/dist/index208.js +33 -2
- package/dist/index208.js.map +1 -1
- package/dist/index209.js +2 -91
- package/dist/index209.js.map +1 -1
- package/dist/index21.js +90 -26
- package/dist/index21.js.map +1 -1
- package/dist/index210.js +6 -2
- package/dist/index210.js.map +1 -1
- package/dist/index211.js +2 -41
- package/dist/index211.js.map +1 -1
- package/dist/index212.js +260 -2
- package/dist/index212.js.map +1 -1
- package/dist/index213.js +16 -5
- package/dist/index213.js.map +1 -1
- package/dist/index214.js +2 -2
- package/dist/index215.js +2 -35
- package/dist/index215.js.map +1 -1
- package/dist/index216.js +59 -42
- package/dist/index216.js.map +1 -1
- package/dist/index217.js +32 -2
- package/dist/index217.js.map +1 -1
- package/dist/index218.js +2 -85
- package/dist/index218.js.map +1 -1
- package/dist/index219.js +2 -2
- package/dist/index22.js +41 -48
- package/dist/index22.js.map +1 -1
- package/dist/index220.js +73 -65
- package/dist/index220.js.map +1 -1
- package/dist/index221.js +81 -2
- package/dist/index221.js.map +1 -1
- package/dist/index222.js +2 -10
- package/dist/index222.js.map +1 -1
- package/dist/index223.js +133 -2
- package/dist/index223.js.map +1 -1
- package/dist/index224.js +2 -26
- package/dist/index224.js.map +1 -1
- package/dist/index225.js +2 -2
- package/dist/index226.js +66 -12
- package/dist/index226.js.map +1 -1
- package/dist/index227.js +97 -2
- package/dist/index227.js.map +1 -1
- package/dist/index228.js +2 -2
- package/dist/index229.js +62 -24
- package/dist/index229.js.map +1 -1
- package/dist/index23.js +50 -94
- package/dist/index23.js.map +1 -1
- package/dist/index230.js +2 -2
- package/dist/index231.js +2 -2
- package/dist/index232.js +12 -2
- package/dist/index232.js.map +1 -1
- package/dist/index233.js +5 -16
- package/dist/index233.js.map +1 -1
- package/dist/index234.js +2 -2
- package/dist/index235.js +11 -9
- package/dist/index235.js.map +1 -1
- package/dist/index236.js +2 -2
- package/dist/index237.js +76 -34
- package/dist/index237.js.map +1 -1
- package/dist/index238.js +2 -2
- package/dist/index239.js +2 -27
- package/dist/index239.js.map +1 -1
- package/dist/index24.js +37 -34
- package/dist/index24.js.map +1 -1
- package/dist/index240.js +39 -2
- package/dist/index240.js.map +1 -1
- package/dist/index241.js +2 -34
- package/dist/index241.js.map +1 -1
- package/dist/index242.js +235 -12
- package/dist/index242.js.map +1 -1
- package/dist/index243.js +82 -2
- package/dist/index243.js.map +1 -1
- package/dist/index244.js +2 -9
- package/dist/index244.js.map +1 -1
- package/dist/index245.js +94 -2
- package/dist/index245.js.map +1 -1
- package/dist/index246.js +2 -5
- package/dist/index246.js.map +1 -1
- package/dist/index247.js +268 -2
- package/dist/index247.js.map +1 -1
- package/dist/index248.js +2 -36
- package/dist/index248.js.map +1 -1
- package/dist/index249.js +21 -2
- package/dist/index249.js.map +1 -1
- package/dist/index25.js +51 -32
- package/dist/index25.js.map +1 -1
- package/dist/index250.js +2 -31
- package/dist/index250.js.map +1 -1
- package/dist/index251.js +9 -2
- package/dist/index251.js.map +1 -1
- package/dist/index252.js +2 -19
- package/dist/index252.js.map +1 -1
- package/dist/index253.js +15 -2
- package/dist/index253.js.map +1 -1
- package/dist/index254.js +2 -2
- package/dist/index255.js +135 -69
- package/dist/index255.js.map +1 -1
- package/dist/index256.js +2 -11
- package/dist/index256.js.map +1 -1
- package/dist/index257.js +5 -2
- package/dist/index257.js.map +1 -1
- package/dist/index258.js +2 -78
- package/dist/index258.js.map +1 -1
- package/dist/index259.js +9 -2
- package/dist/index259.js.map +1 -1
- package/dist/index26.js +31 -236
- package/dist/index26.js.map +1 -1
- package/dist/index260.js +2 -32
- package/dist/index260.js.map +1 -1
- package/dist/index261.js +2 -2
- package/dist/index262.js +92 -9
- package/dist/index262.js.map +1 -1
- package/dist/index263.js +59 -2
- package/dist/index263.js.map +1 -1
- package/dist/index264.js +2 -16
- package/dist/index264.js.map +1 -1
- package/dist/index265.js +41 -2
- package/dist/index265.js.map +1 -1
- package/dist/index266.js +2 -16
- package/dist/index266.js.map +1 -1
- package/dist/index267.js +34 -9
- package/dist/index267.js.map +1 -1
- package/dist/index268.js +8 -54
- package/dist/index268.js.map +1 -1
- package/dist/index269.js +2 -2
- package/dist/index27.js +27 -58
- package/dist/index27.js.map +1 -1
- package/dist/index270.js +42 -7
- package/dist/index270.js.map +1 -1
- package/dist/index271.js +2 -2
- package/dist/index272.js +2 -34
- package/dist/index272.js.map +1 -1
- package/dist/index273.js +16 -2
- package/dist/index273.js.map +1 -1
- package/dist/index274.js +9 -2
- package/dist/index274.js.map +1 -1
- package/dist/index275.js +6 -13
- package/dist/index275.js.map +1 -1
- package/dist/index276.js +2 -2
- package/dist/index277.js +8 -15
- package/dist/index277.js.map +1 -1
- package/dist/index278.js +2 -2
- package/dist/index279.js +55 -2
- package/dist/index279.js.map +1 -1
- package/dist/index28.js +247 -24
- package/dist/index28.js.map +1 -1
- package/dist/index280.js +2 -42
- package/dist/index280.js.map +1 -1
- package/dist/index281.js +2 -100
- package/dist/index281.js.map +1 -1
- package/dist/index282.js +20 -2
- package/dist/index282.js.map +1 -1
- package/dist/index283.js +2 -97
- package/dist/index283.js.map +1 -1
- package/dist/index284.js +33 -2
- package/dist/index284.js.map +1 -1
- package/dist/index285.js +6 -27
- package/dist/index285.js.map +1 -1
- package/dist/index286.js +2 -2
- package/dist/index287.js +9 -44
- package/dist/index287.js.map +1 -1
- package/dist/index288.js +2 -2
- package/dist/index289.js +2 -33
- package/dist/index289.js.map +1 -1
- package/dist/index29.js +249 -39
- package/dist/index29.js.map +1 -1
- package/dist/index290.js +36 -2
- package/dist/index290.js.map +1 -1
- package/dist/index291.js +2 -57
- package/dist/index291.js.map +1 -1
- package/dist/index292.js +24 -2
- package/dist/index292.js.map +1 -1
- package/dist/index293.js +2 -2
- package/dist/index294.js +26 -247
- package/dist/index294.js.map +1 -1
- package/dist/index295.js +2 -2
- package/dist/index296.js +2 -72
- package/dist/index296.js.map +1 -1
- package/dist/index297.js +42 -2
- package/dist/index297.js.map +1 -1
- package/dist/index298.js +7 -56
- package/dist/index298.js.map +1 -1
- package/dist/index299.js +2 -133
- package/dist/index299.js.map +1 -1
- package/dist/index30.js +32 -19
- package/dist/index30.js.map +1 -1
- package/dist/index300.js +30 -2
- package/dist/index300.js.map +1 -1
- package/dist/index301.js +2 -12
- package/dist/index301.js.map +1 -1
- package/dist/index302.js +34 -2
- package/dist/index302.js.map +1 -1
- package/dist/index303.js +2 -162
- package/dist/index303.js.map +1 -1
- package/dist/index304.js +26 -42
- package/dist/index304.js.map +1 -1
- package/dist/index305.js +2 -81
- package/dist/index305.js.map +1 -1
- package/dist/index306.js +10 -2
- package/dist/index306.js.map +1 -1
- package/dist/index307.js +2 -71
- package/dist/index307.js.map +1 -1
- package/dist/index308.js +2 -2
- package/dist/index309.js +19 -2
- package/dist/index309.js.map +1 -1
- package/dist/index31.js +96 -11
- package/dist/index31.js.map +1 -1
- package/dist/index310.js +2 -81
- package/dist/index310.js.map +1 -1
- package/dist/index311.js +2 -2
- package/dist/index312.js +42 -2
- package/dist/index312.js.map +1 -1
- package/dist/index313.js +2 -74
- package/dist/index313.js.map +1 -1
- package/dist/index314.js +25 -67
- package/dist/index314.js.map +1 -1
- package/dist/index315.js +2 -2
- package/dist/index316.js +9 -17
- package/dist/index316.js.map +1 -1
- package/dist/index317.js +2 -2
- package/dist/index318.js +84 -32
- package/dist/index318.js.map +1 -1
- package/dist/index319.js +2 -2
- package/dist/index32.js +40 -48
- package/dist/index32.js.map +1 -1
- package/dist/index320.js +68 -77
- package/dist/index320.js.map +1 -1
- package/dist/index321.js +2 -2
- package/dist/index322.js +12 -148
- package/dist/index322.js.map +1 -1
- package/dist/index323.js +1 -1
- package/dist/index324.js +28 -6
- package/dist/index324.js.map +1 -1
- package/dist/index325.js +2 -2
- package/dist/index326.js +78 -87
- package/dist/index326.js.map +1 -1
- package/dist/index327.js +2 -2
- package/dist/index328.js +78 -2
- package/dist/index328.js.map +1 -1
- package/dist/index329.js +2 -237
- package/dist/index329.js.map +1 -1
- package/dist/index33.js +20 -56
- package/dist/index33.js.map +1 -1
- package/dist/index330.js +11 -6
- package/dist/index330.js.map +1 -1
- package/dist/index331.js +2 -2
- package/dist/index332.js +18 -59
- package/dist/index332.js.map +1 -1
- package/dist/index333.js +2 -2
- package/dist/index334.js +12 -5
- package/dist/index334.js.map +1 -1
- package/dist/index335.js +2 -2
- package/dist/index336.js +2 -15
- package/dist/index336.js.map +1 -1
- package/dist/index337.js +88 -2
- package/dist/index337.js.map +1 -1
- package/dist/index338.js +24 -2
- package/dist/index338.js.map +1 -1
- package/dist/index339.js +2 -92
- package/dist/index339.js.map +1 -1
- package/dist/index34.js +59 -35
- package/dist/index34.js.map +1 -1
- package/dist/index340.js +42 -14
- package/dist/index340.js.map +1 -1
- package/dist/index341.js +2 -2
- package/dist/index342.js +22 -80
- package/dist/index342.js.map +1 -1
- package/dist/index343.js +2 -2
- package/dist/index344.js +2 -18
- package/dist/index344.js.map +1 -1
- package/dist/index345.js +16 -2
- package/dist/index345.js.map +1 -1
- package/dist/index346.js +2 -268
- package/dist/index346.js.map +1 -1
- package/dist/index347.js +176 -2
- package/dist/index347.js.map +1 -1
- package/dist/index348.js +2 -2
- package/dist/index349.js +35 -39
- package/dist/index349.js.map +1 -1
- package/dist/index35.js +101 -28
- package/dist/index35.js.map +1 -1
- package/dist/index350.js +3 -3
- package/dist/index350.js.map +1 -1
- package/dist/index351.js +2 -2
- package/dist/index352.js +19 -26
- package/dist/index352.js.map +1 -1
- package/dist/index357.js +26 -19
- package/dist/index357.js.map +1 -1
- package/dist/index36.js +115 -33
- package/dist/index36.js.map +1 -1
- package/dist/index37.js +41 -115
- package/dist/index37.js.map +1 -1
- package/dist/index38.js +34 -246
- package/dist/index38.js.map +1 -1
- package/dist/index39.js +30 -137
- package/dist/index39.js.map +1 -1
- package/dist/index4.js +26 -84
- package/dist/index4.js.map +1 -1
- package/dist/index40.js +26 -400
- package/dist/index40.js.map +1 -1
- package/dist/index41.js +28 -77
- package/dist/index41.js.map +1 -1
- package/dist/index42.js +23 -26
- package/dist/index42.js.map +1 -1
- package/dist/index43.js +36 -33
- package/dist/index43.js.map +1 -1
- package/dist/index44.js +62 -16
- package/dist/index44.js.map +1 -1
- package/dist/index45.js +138 -21
- package/dist/index45.js.map +1 -1
- package/dist/index46.js +129 -22
- package/dist/index46.js.map +1 -1
- package/dist/index47.js +41 -19
- package/dist/index47.js.map +1 -1
- package/dist/index48.js +11 -82
- package/dist/index48.js.map +1 -1
- package/dist/index49.js +56 -279
- package/dist/index49.js.map +1 -1
- package/dist/index5.js +21 -34
- package/dist/index5.js.map +1 -1
- package/dist/index50.js +280 -33
- package/dist/index50.js.map +1 -1
- package/dist/index51.js +74 -94
- package/dist/index51.js.map +1 -1
- package/dist/index52.js +66 -41
- package/dist/index52.js.map +1 -1
- package/dist/index53.js +333 -62
- package/dist/index53.js.map +1 -1
- package/dist/index54.js +96 -256
- package/dist/index54.js.map +1 -1
- package/dist/index55.js +38 -130
- package/dist/index55.js.map +1 -1
- package/dist/index56.js +251 -50
- package/dist/index56.js.map +1 -1
- package/dist/index57.js +144 -115
- package/dist/index57.js.map +1 -1
- package/dist/index58.js +93 -183
- package/dist/index58.js.map +1 -1
- package/dist/index59.js +33 -339
- package/dist/index59.js.map +1 -1
- package/dist/index6.js +2 -2
- package/dist/index60.js +102 -66
- package/dist/index60.js.map +1 -1
- package/dist/index61.js +73 -179
- package/dist/index61.js.map +1 -1
- package/dist/index62.js +117 -97
- package/dist/index62.js.map +1 -1
- package/dist/index63.js +113 -263
- package/dist/index63.js.map +1 -1
- package/dist/index64.js +258 -251
- package/dist/index64.js.map +1 -1
- package/dist/index65.js +177 -79
- package/dist/index65.js.map +1 -1
- package/dist/index66.js +261 -140
- package/dist/index66.js.map +1 -1
- package/dist/index67.js +183 -100
- package/dist/index67.js.map +1 -1
- package/dist/index68.js +28 -89
- package/dist/index68.js.map +1 -1
- package/dist/index69.js +20 -161
- package/dist/index69.js.map +1 -1
- package/dist/index7.js +394 -32
- package/dist/index7.js.map +1 -1
- package/dist/index70.js +190 -53
- package/dist/index70.js.map +1 -1
- package/dist/index71.js +204 -112
- package/dist/index71.js.map +1 -1
- package/dist/index72.js +2 -2
- package/dist/index73.js +89 -28
- package/dist/index73.js.map +1 -1
- package/dist/index74.js +126 -63
- package/dist/index74.js.map +1 -1
- package/dist/index75.js +122 -111
- package/dist/index75.js.map +1 -1
- package/dist/index76.js +67 -64
- package/dist/index76.js.map +1 -1
- package/dist/index77.js +112 -88
- package/dist/index77.js.map +1 -1
- package/dist/index78.js +87 -16
- package/dist/index78.js.map +1 -1
- package/dist/index79.js +151 -79
- package/dist/index79.js.map +1 -1
- package/dist/index8.js +25 -127
- package/dist/index8.js.map +1 -1
- package/dist/index80.js +104 -186
- package/dist/index80.js.map +1 -1
- package/dist/index81.js +59 -20
- package/dist/index81.js.map +1 -1
- package/dist/index82.js +17 -129
- package/dist/index82.js.map +1 -1
- package/dist/index83.js +88 -217
- package/dist/index83.js.map +1 -1
- package/dist/index84.js +64 -112
- package/dist/index84.js.map +1 -1
- package/dist/index9.js +30 -45
- package/dist/index9.js.map +1 -1
- package/dist/src/components/atoms/index.d.ts +45 -16
- package/dist/src/components/atoms/index.d.ts.map +1 -1
- package/dist/src/components/molecules/index.d.ts +20 -1
- package/dist/src/components/molecules/index.d.ts.map +1 -1
- package/dist/src/components/organisms/index.d.ts +17 -1
- package/dist/src/components/organisms/index.d.ts.map +1 -1
- package/dist/src/index.d.ts +3 -82
- package/dist/src/index.d.ts.map +1 -1
- package/dist/tokens.css +353 -7
- package/dist/vite.config.d.ts.map +1 -1
- package/package.json +4 -4
package/dist/index54.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { unsafeCSS, css, LitElement } from "lit";
|
|
2
|
-
import { property,
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
2
|
+
import { property, customElement } from "lit/decorators.js";
|
|
3
|
+
import { dropdownTemplate } from "./index206.js";
|
|
4
|
+
import dropdownCss from "./index207.js";
|
|
5
5
|
import sharedTokens from "./index196.js";
|
|
6
|
-
import { fileUploaderTemplate } from "./index294.js";
|
|
7
6
|
var __defProp = Object.defineProperty;
|
|
8
7
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
9
8
|
var __decorateClass = (decorators, target, key, kind) => {
|
|
@@ -14,286 +13,127 @@ var __decorateClass = (decorators, target, key, kind) => {
|
|
|
14
13
|
if (kind && result) __defProp(target, key, result);
|
|
15
14
|
return result;
|
|
16
15
|
};
|
|
17
|
-
let
|
|
16
|
+
let LibDropdown = class extends LitElement {
|
|
18
17
|
constructor() {
|
|
19
18
|
super(...arguments);
|
|
20
|
-
this.
|
|
21
|
-
this.
|
|
22
|
-
this.
|
|
23
|
-
this.
|
|
24
|
-
this.
|
|
25
|
-
this.
|
|
26
|
-
this.
|
|
27
|
-
this.
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
this._entries = [];
|
|
31
|
-
this._imagePreviewUrl = null;
|
|
32
|
-
}
|
|
33
|
-
/* ── Drag & Drop ── */
|
|
34
|
-
_onDragover(e) {
|
|
35
|
-
e.preventDefault();
|
|
36
|
-
this._isDragover = true;
|
|
37
|
-
}
|
|
38
|
-
_onDragleave() {
|
|
39
|
-
this._isDragover = false;
|
|
40
|
-
}
|
|
41
|
-
_onDrop(e) {
|
|
42
|
-
var _a;
|
|
43
|
-
e.preventDefault();
|
|
44
|
-
this._isDragover = false;
|
|
45
|
-
const files = Array.from(((_a = e.dataTransfer) == null ? void 0 : _a.files) ?? []);
|
|
46
|
-
if (files.length) this._processFiles(files);
|
|
47
|
-
}
|
|
48
|
-
/* ── Input change ── */
|
|
49
|
-
_onInputChange(e) {
|
|
50
|
-
const input = e.target;
|
|
51
|
-
const files = Array.from(input.files ?? []);
|
|
52
|
-
if (files.length) this._processFiles(files);
|
|
53
|
-
input.value = "";
|
|
54
|
-
}
|
|
55
|
-
/* ── Procesar archivos ── */
|
|
56
|
-
_processFiles(files) {
|
|
57
|
-
if (this.zone === "image") {
|
|
58
|
-
const file = files[0];
|
|
59
|
-
if (!file) return;
|
|
60
|
-
if (this._imagePreviewUrl) URL.revokeObjectURL(this._imagePreviewUrl);
|
|
61
|
-
const entry = {
|
|
62
|
-
id: generateUniqueId("fu-"),
|
|
63
|
-
file,
|
|
64
|
-
progress: 0,
|
|
65
|
-
status: "idle",
|
|
66
|
-
previewUrl: URL.createObjectURL(file)
|
|
67
|
-
};
|
|
68
|
-
this._imagePreviewUrl = entry.previewUrl ?? null;
|
|
69
|
-
this._entries = [entry];
|
|
70
|
-
this._emitFilesChange([file]);
|
|
71
|
-
if (this.simulate) this._simulateUpload(entry);
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
const newEntries = files.map((file) => {
|
|
75
|
-
const isImg = file.type.startsWith("image/");
|
|
76
|
-
return {
|
|
77
|
-
id: generateUniqueId("fu-"),
|
|
78
|
-
file,
|
|
79
|
-
progress: 0,
|
|
80
|
-
status: "idle",
|
|
81
|
-
...isImg ? { previewUrl: URL.createObjectURL(file) } : {}
|
|
82
|
-
};
|
|
83
|
-
});
|
|
84
|
-
this._entries = this.multiple ? [...this._entries, ...newEntries] : newEntries;
|
|
85
|
-
this._emitFilesChange(files);
|
|
86
|
-
if (this.simulate) {
|
|
87
|
-
newEntries.forEach((entry) => this._simulateUpload(entry));
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
/* ── Simulación de upload ── */
|
|
91
|
-
_simulateUpload(entry) {
|
|
92
|
-
const steps = 20;
|
|
93
|
-
const interval = this.simulateMs / steps;
|
|
94
|
-
const step = 100 / steps;
|
|
95
|
-
const willFail = Math.random() < 0.2;
|
|
96
|
-
const failAt = willFail ? Math.floor(Math.random() * 8 + 3) * step : Infinity;
|
|
97
|
-
entry.status = "uploading";
|
|
98
|
-
this.requestUpdate();
|
|
99
|
-
this.dispatchEvent(
|
|
100
|
-
new CustomEvent("ui-lib-upload-start", {
|
|
101
|
-
detail: { id: entry.id, file: entry.file },
|
|
102
|
-
bubbles: true,
|
|
103
|
-
composed: true
|
|
104
|
-
})
|
|
105
|
-
);
|
|
106
|
-
const tick = setInterval(() => {
|
|
107
|
-
const idx = this._entries.findIndex((e) => e.id === entry.id);
|
|
108
|
-
if (idx === -1) {
|
|
109
|
-
clearInterval(tick);
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
const current = this._entries[idx];
|
|
113
|
-
if (!current) {
|
|
114
|
-
clearInterval(tick);
|
|
115
|
-
return;
|
|
19
|
+
this.label = "Opciones";
|
|
20
|
+
this.variant = "default";
|
|
21
|
+
this.align = "left";
|
|
22
|
+
this.open = false;
|
|
23
|
+
this.dark = false;
|
|
24
|
+
this.minWidth = "";
|
|
25
|
+
this.ariaLabel = "";
|
|
26
|
+
this._onOutsideClick = (e) => {
|
|
27
|
+
if (this.open && !e.composedPath().includes(this)) {
|
|
28
|
+
this.open = false;
|
|
116
29
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
);
|
|
123
|
-
|
|
124
|
-
this.dispatchEvent(
|
|
125
|
-
new CustomEvent("ui-lib-upload-error", {
|
|
126
|
-
detail: { id: entry.id, file: entry.file, message: "Error de conexión" },
|
|
127
|
-
bubbles: true,
|
|
128
|
-
composed: true
|
|
129
|
-
})
|
|
130
|
-
);
|
|
131
|
-
return;
|
|
30
|
+
};
|
|
31
|
+
this._onWindowKey = (e) => {
|
|
32
|
+
var _a;
|
|
33
|
+
if (this.open && e.key === "Escape") {
|
|
34
|
+
this.open = false;
|
|
35
|
+
const trigger = (_a = this.shadowRoot) == null ? void 0 : _a.querySelector(".dd-trigger");
|
|
36
|
+
trigger == null ? void 0 : trigger.focus();
|
|
132
37
|
}
|
|
133
|
-
|
|
134
|
-
clearInterval(tick);
|
|
135
|
-
this._entries = this._entries.map(
|
|
136
|
-
(e) => e.id === entry.id ? { ...e, progress: 100, status: "done" } : e
|
|
137
|
-
);
|
|
138
|
-
this.requestUpdate();
|
|
139
|
-
this.dispatchEvent(
|
|
140
|
-
new CustomEvent("ui-lib-upload-done", {
|
|
141
|
-
detail: { id: entry.id, file: entry.file },
|
|
142
|
-
bubbles: true,
|
|
143
|
-
composed: true
|
|
144
|
-
})
|
|
145
|
-
);
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
this._entries = this._entries.map(
|
|
149
|
-
(e) => e.id === entry.id ? { ...e, progress: next } : e
|
|
150
|
-
);
|
|
151
|
-
this.requestUpdate();
|
|
152
|
-
}, interval);
|
|
38
|
+
};
|
|
153
39
|
}
|
|
154
|
-
/* ──
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
this._entries = this._entries.filter((e) => e.id !== id);
|
|
160
|
-
this.dispatchEvent(
|
|
161
|
-
new CustomEvent("ui-lib-file-remove", {
|
|
162
|
-
detail: { id, file: entry.file },
|
|
163
|
-
bubbles: true,
|
|
164
|
-
composed: true
|
|
165
|
-
})
|
|
166
|
-
);
|
|
40
|
+
/* ── Lifecycle ── */
|
|
41
|
+
connectedCallback() {
|
|
42
|
+
super.connectedCallback();
|
|
43
|
+
window.addEventListener("click", this._onOutsideClick);
|
|
44
|
+
window.addEventListener("keydown", this._onWindowKey);
|
|
167
45
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
46
|
+
disconnectedCallback() {
|
|
47
|
+
super.disconnectedCallback();
|
|
48
|
+
window.removeEventListener("click", this._onOutsideClick);
|
|
49
|
+
window.removeEventListener("keydown", this._onWindowKey);
|
|
50
|
+
}
|
|
51
|
+
/* ── Toggle ── */
|
|
52
|
+
_toggle() {
|
|
53
|
+
this.open = !this.open;
|
|
54
|
+
this.dispatchEvent(new CustomEvent("ui-lib-dropdown-toggle", {
|
|
55
|
+
detail: { open: this.open },
|
|
56
|
+
bubbles: true,
|
|
57
|
+
composed: true
|
|
58
|
+
}));
|
|
59
|
+
if (this.open) {
|
|
60
|
+
requestAnimationFrame(() => {
|
|
61
|
+
const first = this._getItems()[0];
|
|
62
|
+
first == null ? void 0 : first.focus();
|
|
63
|
+
});
|
|
173
64
|
}
|
|
174
65
|
}
|
|
175
|
-
/* ──
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
}
|
|
182
|
-
/* ── Reset imagen ── */
|
|
183
|
-
_onResetImage() {
|
|
184
|
-
if (this._imagePreviewUrl) URL.revokeObjectURL(this._imagePreviewUrl);
|
|
185
|
-
this._imagePreviewUrl = null;
|
|
186
|
-
this._entries = [];
|
|
187
|
-
}
|
|
188
|
-
/* ── API pública ── */
|
|
189
|
-
/** Marca un archivo como completado desde el exterior */
|
|
190
|
-
markDone(id) {
|
|
191
|
-
this._entries = this._entries.map(
|
|
192
|
-
(e) => e.id === id ? { ...e, progress: 100, status: "done" } : e
|
|
193
|
-
);
|
|
194
|
-
}
|
|
195
|
-
/** Marca un archivo como error desde el exterior */
|
|
196
|
-
markError(id, message = "Error al subir") {
|
|
197
|
-
this._entries = this._entries.map(
|
|
198
|
-
(e) => e.id === id ? { ...e, status: "error", errorMessage: message } : e
|
|
199
|
-
);
|
|
200
|
-
}
|
|
201
|
-
/** Actualiza el progreso de un archivo desde el exterior */
|
|
202
|
-
setProgress(id, progress) {
|
|
203
|
-
this._entries = this._entries.map(
|
|
204
|
-
(e) => e.id === id ? { ...e, progress: Math.min(100, Math.max(0, progress)), status: "uploading" } : e
|
|
205
|
-
);
|
|
66
|
+
/* ── Trigger keydown (Arrow Down abre el menú) ── */
|
|
67
|
+
_handleTriggerKey(e) {
|
|
68
|
+
if (e.key === "ArrowDown" || e.key === "Enter" || e.key === " ") {
|
|
69
|
+
e.preventDefault();
|
|
70
|
+
if (!this.open) this._toggle();
|
|
71
|
+
}
|
|
206
72
|
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
73
|
+
/* ── Menu keydown (Arrow Up/Down navega entre items) ── */
|
|
74
|
+
_handleMenuKey(e) {
|
|
75
|
+
const items = this._getItems();
|
|
76
|
+
if (!items.length) return;
|
|
77
|
+
const current = document.activeElement;
|
|
78
|
+
const idx = items.indexOf(current);
|
|
79
|
+
if (e.key === "ArrowDown") {
|
|
80
|
+
e.preventDefault();
|
|
81
|
+
const next = items[(idx + 1) % items.length];
|
|
82
|
+
next == null ? void 0 : next.focus();
|
|
83
|
+
} else if (e.key === "ArrowUp") {
|
|
84
|
+
e.preventDefault();
|
|
85
|
+
const prev = items[(idx - 1 + items.length) % items.length];
|
|
86
|
+
prev == null ? void 0 : prev.focus();
|
|
87
|
+
} else if (e.key === "Tab") {
|
|
88
|
+
this.open = false;
|
|
89
|
+
}
|
|
210
90
|
}
|
|
211
|
-
/* ──
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
})
|
|
91
|
+
/* ── Obtiene los items focusables del slot default ── */
|
|
92
|
+
_getItems() {
|
|
93
|
+
var _a;
|
|
94
|
+
const slot = (_a = this.shadowRoot) == null ? void 0 : _a.querySelector("slot:not([name])");
|
|
95
|
+
if (!slot) return [];
|
|
96
|
+
return slot.assignedElements({ flatten: true }).filter(
|
|
97
|
+
(el) => el.classList.contains("dd-item") && !el.classList.contains("is-disabled")
|
|
219
98
|
);
|
|
220
99
|
}
|
|
221
|
-
/* ──
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
this._entries.forEach((e) => {
|
|
225
|
-
if (e.previewUrl) URL.revokeObjectURL(e.previewUrl);
|
|
226
|
-
});
|
|
227
|
-
if (this._imagePreviewUrl) URL.revokeObjectURL(this._imagePreviewUrl);
|
|
100
|
+
/* ── Detecta si un slot con nombre tiene contenido ── */
|
|
101
|
+
_hasSlot(name) {
|
|
102
|
+
return !!this.querySelector(`[slot="${name}"]`);
|
|
228
103
|
}
|
|
229
|
-
/* ── Render ── */
|
|
230
104
|
render() {
|
|
231
|
-
return
|
|
232
|
-
zone: this.zone,
|
|
233
|
-
title: this.title,
|
|
234
|
-
subtitle: this.subtitle,
|
|
235
|
-
hint: this.hint,
|
|
236
|
-
multiple: this.multiple,
|
|
237
|
-
accept: this.accept,
|
|
238
|
-
disabled: this.disabled,
|
|
239
|
-
isDragover: this._isDragover,
|
|
240
|
-
entries: this._entries,
|
|
241
|
-
imagePreviewUrl: this._imagePreviewUrl,
|
|
242
|
-
onDragover: (e) => this._onDragover(e),
|
|
243
|
-
onDragleave: () => this._onDragleave(),
|
|
244
|
-
onDrop: (e) => this._onDrop(e),
|
|
245
|
-
onInputChange: (e) => this._onInputChange(e),
|
|
246
|
-
onRemove: (id) => this._onRemove(id),
|
|
247
|
-
onUploadAll: () => this._onUploadAll(),
|
|
248
|
-
onClearAll: () => this._onClearAll(),
|
|
249
|
-
onResetImage: () => this._onResetImage()
|
|
250
|
-
});
|
|
105
|
+
return dropdownTemplate(this);
|
|
251
106
|
}
|
|
252
107
|
};
|
|
253
|
-
|
|
108
|
+
LibDropdown.styles = [
|
|
254
109
|
css`${unsafeCSS(sharedTokens)}`,
|
|
255
|
-
css`${unsafeCSS(
|
|
110
|
+
css`${unsafeCSS(dropdownCss)}`
|
|
256
111
|
];
|
|
257
|
-
__decorateClass([
|
|
258
|
-
property({ type: String, reflect: true })
|
|
259
|
-
], LibFileUploader.prototype, "zone", 2);
|
|
260
112
|
__decorateClass([
|
|
261
113
|
property({ type: String })
|
|
262
|
-
],
|
|
114
|
+
], LibDropdown.prototype, "label", 2);
|
|
263
115
|
__decorateClass([
|
|
264
|
-
property({ type: String })
|
|
265
|
-
],
|
|
266
|
-
__decorateClass([
|
|
267
|
-
property({ type: String })
|
|
268
|
-
], LibFileUploader.prototype, "hint", 2);
|
|
269
|
-
__decorateClass([
|
|
270
|
-
property({ type: Boolean, reflect: true })
|
|
271
|
-
], LibFileUploader.prototype, "multiple", 2);
|
|
116
|
+
property({ type: String, reflect: true })
|
|
117
|
+
], LibDropdown.prototype, "variant", 2);
|
|
272
118
|
__decorateClass([
|
|
273
|
-
property({ type: String })
|
|
274
|
-
],
|
|
119
|
+
property({ type: String, reflect: true })
|
|
120
|
+
], LibDropdown.prototype, "align", 2);
|
|
275
121
|
__decorateClass([
|
|
276
122
|
property({ type: Boolean, reflect: true })
|
|
277
|
-
],
|
|
123
|
+
], LibDropdown.prototype, "open", 2);
|
|
278
124
|
__decorateClass([
|
|
279
125
|
property({ type: Boolean, reflect: true })
|
|
280
|
-
],
|
|
281
|
-
__decorateClass([
|
|
282
|
-
property({ type: Number, attribute: "simulate-ms" })
|
|
283
|
-
], LibFileUploader.prototype, "simulateMs", 2);
|
|
284
|
-
__decorateClass([
|
|
285
|
-
state()
|
|
286
|
-
], LibFileUploader.prototype, "_isDragover", 2);
|
|
126
|
+
], LibDropdown.prototype, "dark", 2);
|
|
287
127
|
__decorateClass([
|
|
288
|
-
|
|
289
|
-
],
|
|
128
|
+
property({ type: String, attribute: "min-width" })
|
|
129
|
+
], LibDropdown.prototype, "minWidth", 2);
|
|
290
130
|
__decorateClass([
|
|
291
|
-
|
|
292
|
-
],
|
|
293
|
-
|
|
294
|
-
customElement("lib-
|
|
295
|
-
],
|
|
131
|
+
property({ type: String, attribute: "aria-label" })
|
|
132
|
+
], LibDropdown.prototype, "ariaLabel", 2);
|
|
133
|
+
LibDropdown = __decorateClass([
|
|
134
|
+
customElement("lib-dropdown")
|
|
135
|
+
], LibDropdown);
|
|
296
136
|
export {
|
|
297
|
-
|
|
137
|
+
LibDropdown
|
|
298
138
|
};
|
|
299
139
|
//# sourceMappingURL=index54.js.map
|
package/dist/index54.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index54.js","sources":["../src/components/molecules/file-uploader/lib-file-uploader.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { generateUniqueId } from '../../../core/a11y';\nimport uploaderCss from './lib-file-uploader.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\nimport { fileUploaderTemplate } from './lib-file-uploader.html';\nimport type {\n UploaderZone,\n FileEntry,\n FilesChangeDetail,\n UploadStartDetail,\n UploadDoneDetail,\n UploadErrorDetail,\n FileRemoveDetail,\n} from './lib-file-uploader.types';\n\n/**\n * @element lib-file-uploader\n *\n * Tres variantes de zona de drop:\n * - `zone=\"default\"` — zona grande con icono, título y lista de archivos\n * - `zone=\"compact\"` — zona horizontal para formularios, con lista adjunta\n * - `zone=\"image\"` — zona con aspect-ratio 16/7 y preview inline de imagen\n *\n * La lista de archivos muestra progreso por ítem, thumbnail para imágenes\n * y estados idle · uploading · done · error.\n *\n * El upload real se delega al exterior vía eventos. Si `simulate` es true,\n * el componente simula el upload internamente (útil en Storybook).\n *\n * @prop {UploaderZone} zone — Variante de zona (default: 'default')\n * @prop {string} title — Título de la zona\n * @prop {string} subtitle — Subtítulo (solo zone='default')\n * @prop {string} hint — Texto de restricciones (formatos, tamaño)\n * @prop {boolean} multiple — Permite múltiples archivos\n * @prop {string} accept — Tipos aceptados (e.g. '.pdf,image/*')\n * @prop {boolean} disabled — Deshabilita la zona\n * @prop {boolean} simulate — Simula upload internamente (Storybook)\n * @prop {number} simulateMs — Duración simulada en ms (default: 2000)\n *\n * @fires ui-lib-files-change — Al seleccionar/soltar archivos\n * Detail: { files: File[] }\n * @fires ui-lib-upload-start — Inicio de upload de un archivo\n * Detail: { id: string, file: File }\n * @fires ui-lib-upload-done — Upload completado\n * Detail: { id: string, file: File }\n * @fires ui-lib-upload-error — Upload fallido\n * Detail: { id: string, file: File, message: string }\n * @fires ui-lib-file-remove — Archivo eliminado de la lista\n * Detail: { id: string, file: File }\n */\n@customElement('lib-file-uploader')\nexport class LibFileUploader extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(uploaderCss)}`,\n ];\n\n /* ── Props ── */\n\n @property({ type: String, reflect: true })\n zone: UploaderZone = 'default';\n\n @property({ type: String })\n override title = 'Arrastra archivos aquí';\n\n @property({ type: String })\n subtitle = 'o busca en tu equipo';\n\n @property({ type: String })\n hint = 'PDF, DOCX, PNG, JPG · máx. 20 MB por archivo';\n\n @property({ type: Boolean, reflect: true })\n multiple = false;\n\n @property({ type: String })\n accept = '*';\n\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /** Simula el upload internamente (ideal para Storybook) */\n @property({ type: Boolean, reflect: true })\n simulate = false;\n\n /** Duración de la simulación por archivo en ms */\n @property({ type: Number, attribute: 'simulate-ms' })\n simulateMs = 2000;\n\n /* ── State ── */\n\n @state() private _isDragover = false;\n @state() private _entries: FileEntry[] = [];\n @state() private _imagePreviewUrl: string | null = null;\n\n /* ── Drag & Drop ── */\n\n private _onDragover(e: DragEvent): void {\n e.preventDefault();\n this._isDragover = true;\n }\n\n private _onDragleave(): void {\n this._isDragover = false;\n }\n\n private _onDrop(e: DragEvent): void {\n e.preventDefault();\n this._isDragover = false;\n const files = Array.from(e.dataTransfer?.files ?? []);\n if (files.length) this._processFiles(files);\n }\n\n /* ── Input change ── */\n\n private _onInputChange(e: Event): void {\n const input = e.target as HTMLInputElement;\n const files = Array.from(input.files ?? []);\n if (files.length) this._processFiles(files);\n /* Limpiar el input para permitir seleccionar el mismo archivo otra vez */\n input.value = '';\n }\n\n /* ── Procesar archivos ── */\n\n private _processFiles(files: File[]): void {\n /* zone=image — solo un archivo, genera preview */\n if (this.zone === 'image') {\n const file = files[0];\n if (!file) return;\n\n /* Revocar URL anterior si existe */\n if (this._imagePreviewUrl) URL.revokeObjectURL(this._imagePreviewUrl);\n\n const entry: FileEntry = {\n id: generateUniqueId('fu-'),\n file,\n progress: 0,\n status: 'idle',\n previewUrl: URL.createObjectURL(file),\n };\n\n this._imagePreviewUrl = entry.previewUrl ?? null;\n this._entries = [entry];\n this._emitFilesChange([file]);\n\n if (this.simulate) this._simulateUpload(entry);\n return;\n }\n\n /* zone=default | compact — múltiples archivos */\n const newEntries: FileEntry[] = files.map((file): FileEntry => {\n const isImg = file.type.startsWith('image/');\n return {\n id: generateUniqueId('fu-'),\n file,\n progress: 0,\n status: 'idle',\n ...(isImg ? { previewUrl: URL.createObjectURL(file) } : {}),\n };\n });\n\n this._entries = this.multiple\n ? [...this._entries, ...newEntries]\n : newEntries;\n\n this._emitFilesChange(files);\n\n if (this.simulate) {\n newEntries.forEach(entry => this._simulateUpload(entry));\n }\n }\n\n /* ── Simulación de upload ── */\n\n private _simulateUpload(entry: FileEntry): void {\n const steps = 20;\n const interval = this.simulateMs / steps;\n const step = 100 / steps;\n\n /* Lanzar error aleatorio en ~20% de los archivos */\n const willFail = Math.random() < 0.2;\n const failAt = willFail ? Math.floor(Math.random() * 8 + 3) * step : Infinity;\n\n entry.status = 'uploading';\n this.requestUpdate();\n\n this.dispatchEvent(\n new CustomEvent<UploadStartDetail>('ui-lib-upload-start', {\n detail: { id: entry.id, file: entry.file },\n bubbles: true, composed: true,\n })\n );\n\n const tick = setInterval((): void => {\n const idx = this._entries.findIndex(e => e.id === entry.id);\n if (idx === -1) { clearInterval(tick); return; }\n\n const current = this._entries[idx];\n if (!current) { clearInterval(tick); return; }\n\n const next = Math.min(current.progress + step, 100);\n\n if (next >= failAt) {\n clearInterval(tick);\n this._entries = this._entries.map(e =>\n e.id === entry.id\n ? { ...e, progress: next, status: 'error', errorMessage: 'Error de conexión' }\n : e\n );\n this.requestUpdate();\n this.dispatchEvent(\n new CustomEvent<UploadErrorDetail>('ui-lib-upload-error', {\n detail: { id: entry.id, file: entry.file, message: 'Error de conexión' },\n bubbles: true, composed: true,\n })\n );\n return;\n }\n\n if (next >= 100) {\n clearInterval(tick);\n this._entries = this._entries.map(e =>\n e.id === entry.id ? { ...e, progress: 100, status: 'done' } : e\n );\n this.requestUpdate();\n this.dispatchEvent(\n new CustomEvent<UploadDoneDetail>('ui-lib-upload-done', {\n detail: { id: entry.id, file: entry.file },\n bubbles: true, composed: true,\n })\n );\n return;\n }\n\n this._entries = this._entries.map(e =>\n e.id === entry.id ? { ...e, progress: next } : e\n );\n this.requestUpdate();\n }, interval);\n }\n\n /* ── Eliminar archivo ── */\n\n private _onRemove(id: string): void {\n const entry = this._entries.find(e => e.id === id);\n if (!entry) return;\n\n /* Revocar object URL si existe */\n if (entry.previewUrl) URL.revokeObjectURL(entry.previewUrl);\n\n this._entries = this._entries.filter(e => e.id !== id);\n\n this.dispatchEvent(\n new CustomEvent<FileRemoveDetail>('ui-lib-file-remove', {\n detail: { id, file: entry.file },\n bubbles: true, composed: true,\n })\n );\n }\n\n /* ── Upload all (delega a host si simulate=false) ── */\n\n private _onUploadAll(): void {\n if (this.simulate) {\n const idleEntries = this._entries.filter(e => e.status === 'idle' || e.status === 'error');\n idleEntries.forEach(e => this._simulateUpload(e));\n }\n /* Si simulate=false, el host escucha ui-lib-files-change y maneja el upload */\n }\n\n /* ── Limpiar lista ── */\n\n private _onClearAll(): void {\n this._entries.forEach(e => { if (e.previewUrl) URL.revokeObjectURL(e.previewUrl); });\n this._entries = [];\n }\n\n /* ── Reset imagen ── */\n\n private _onResetImage(): void {\n if (this._imagePreviewUrl) URL.revokeObjectURL(this._imagePreviewUrl);\n this._imagePreviewUrl = null;\n this._entries = [];\n }\n\n /* ── API pública ── */\n\n /** Marca un archivo como completado desde el exterior */\n public markDone(id: string): void {\n this._entries = this._entries.map(e =>\n e.id === id ? { ...e, progress: 100, status: 'done' } : e\n );\n }\n\n /** Marca un archivo como error desde el exterior */\n public markError(id: string, message = 'Error al subir'): void {\n this._entries = this._entries.map(e =>\n e.id === id ? { ...e, status: 'error', errorMessage: message } : e\n );\n }\n\n /** Actualiza el progreso de un archivo desde el exterior */\n public setProgress(id: string, progress: number): void {\n this._entries = this._entries.map(e =>\n e.id === id ? { ...e, progress: Math.min(100, Math.max(0, progress)), status: 'uploading' } : e\n );\n }\n\n /** Archivos actuales en la lista */\n public get files(): FileEntry[] {\n return [...this._entries];\n }\n\n /* ── Helpers ── */\n\n private _emitFilesChange(files: File[]): void {\n this.dispatchEvent(\n new CustomEvent<FilesChangeDetail>('ui-lib-files-change', {\n detail: { files },\n bubbles: true, composed: true,\n })\n );\n }\n\n /* ── Lifecycle ── */\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n /* Revocar todas las object URLs al desmontar */\n this._entries.forEach(e => { if (e.previewUrl) URL.revokeObjectURL(e.previewUrl); });\n if (this._imagePreviewUrl) URL.revokeObjectURL(this._imagePreviewUrl);\n }\n\n /* ── Render ── */\n\n protected override render(): TemplateResult {\n return fileUploaderTemplate({\n zone: this.zone,\n title: this.title,\n subtitle: this.subtitle,\n hint: this.hint,\n multiple: this.multiple,\n accept: this.accept,\n disabled: this.disabled,\n isDragover: this._isDragover,\n entries: this._entries,\n imagePreviewUrl: this._imagePreviewUrl,\n onDragover: (e): void => this._onDragover(e),\n onDragleave: (): void => this._onDragleave(),\n onDrop: (e): void => this._onDrop(e),\n onInputChange: (e): void => this._onInputChange(e),\n onRemove: (id): void => this._onRemove(id),\n onUploadAll: (): void => this._onUploadAll(),\n onClearAll: (): void => this._onClearAll(),\n onResetImage: (): void => this._onResetImage(),\n });\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-file-uploader': LibFileUploader;\n }\n}"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index54.js","sources":["../src/components/molecules/dropdown/lib-dropdown.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { dropdownTemplate } from './lib-dropdown.html';\nimport dropdownCss from './lib-dropdown.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\nimport type { DropdownTriggerVariant, DropdownAlign } from './lib-dropdown.types';\n\n/**\n * lib-dropdown — Menú contextual flotante Shibui (SG-25)\n *\n * @prop label — Texto del trigger (si no hay slot \"trigger\")\n * @prop variant — 'default' | 'ghost' | 'filled' | 'kaki'\n * @prop align — 'left' (default) | 'right'\n * @prop open — Estado abierto (refleja en atributo)\n * @prop dark — Menú con tema oscuro\n * @prop min-width — Ancho mínimo del panel (e.g. '240px')\n * @prop aria-label — aria-label del trigger (fallback: label)\n *\n * @fires ui-lib-dropdown-toggle — { detail: { open: boolean } }\n * @fires ui-lib-dropdown-item — { detail: { target: HTMLElement } } al activar un item\n *\n * @slot trigger — Contenido personalizado del botón (reemplaza `label`)\n * @slot header — Cabecera del panel (búsqueda, título)\n * @slot — Items del menú (.dd-item, .dd-sep, .dd-group-label)\n * @slot footer — Pie del panel (acciones de confirmación)\n *\n * ─── Clases de item (light DOM, sin shadow) ─────────────────\n * .dd-item — fila de acción (button o a)\n * .dd-item.is-active — seleccionado\n * .dd-item.is-danger — acción destructiva\n * .dd-item.is-disabled — no interactivo\n * .dd-sep — separador horizontal (div o hr)\n * .dd-group-label — etiqueta de sección (div o span)\n *\n * ─── Clases internas de item (requieren CSS global) ─────────\n * .dd-item-icon — icono a la izquierda\n * .dd-item-body — wrapper para label + desc de dos líneas\n * .dd-item-label — primera línea del body\n * .dd-item-desc — segunda línea (mono, muted)\n * .dd-item-hint — shortcut a la derecha (margin-left:auto)\n * .dd-item-check — check de selección (opacity:0 por defecto)\n */\n@customElement('lib-dropdown')\nexport class LibDropdown extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(dropdownCss)}`,\n ];\n\n @property({ type: String })\n label = 'Opciones';\n\n @property({ type: String, reflect: true })\n variant: DropdownTriggerVariant = 'default';\n\n @property({ type: String, reflect: true })\n align: DropdownAlign = 'left';\n\n @property({ type: Boolean, reflect: true })\n open = false;\n\n @property({ type: Boolean, reflect: true })\n dark = false;\n\n @property({ type: String, attribute: 'min-width' })\n minWidth = '';\n\n @property({ type: String, attribute: 'aria-label' })\n override ariaLabel = '';\n\n /* ── Lifecycle ── */\n override connectedCallback(): void {\n super.connectedCallback();\n window.addEventListener('click', this._onOutsideClick);\n window.addEventListener('keydown', this._onWindowKey);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n window.removeEventListener('click', this._onOutsideClick);\n window.removeEventListener('keydown', this._onWindowKey);\n }\n\n /* ── Toggle ── */\n _toggle(): void {\n this.open = !this.open;\n this.dispatchEvent(new CustomEvent('ui-lib-dropdown-toggle', {\n detail: { open: this.open },\n bubbles: true,\n composed: true,\n }));\n if (this.open) {\n // Foco al primer item al abrir con teclado\n requestAnimationFrame((): void => {\n const first = this._getItems()[0];\n first?.focus();\n });\n }\n }\n\n /* ── Outside click ── */\n private _onOutsideClick = (e: Event): void => {\n if (this.open && !e.composedPath().includes(this)) {\n this.open = false;\n }\n };\n\n /* ── Global Escape ── */\n private _onWindowKey = (e: KeyboardEvent): void => {\n if (this.open && e.key === 'Escape') {\n this.open = false;\n // Devolver foco al trigger\n const trigger = this.shadowRoot?.querySelector<HTMLButtonElement>('.dd-trigger');\n trigger?.focus();\n }\n };\n\n /* ── Trigger keydown (Arrow Down abre el menú) ── */\n _handleTriggerKey(e: KeyboardEvent): void {\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n if (!this.open) this._toggle();\n }\n }\n\n /* ── Menu keydown (Arrow Up/Down navega entre items) ── */\n _handleMenuKey(e: KeyboardEvent): void {\n const items = this._getItems();\n if (!items.length) return;\n\n const current = document.activeElement as HTMLElement;\n const idx = items.indexOf(current);\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n const next = items[(idx + 1) % items.length];\n next?.focus();\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n const prev = items[(idx - 1 + items.length) % items.length];\n prev?.focus();\n } else if (e.key === 'Tab') {\n this.open = false;\n }\n }\n\n /* ── Obtiene los items focusables del slot default ── */\n private _getItems(): HTMLElement[] {\n const slot = this.shadowRoot?.querySelector<HTMLSlotElement>('slot:not([name])');\n if (!slot) return [];\n return slot.assignedElements({ flatten: true })\n .filter(el =>\n el.classList.contains('dd-item') &&\n !el.classList.contains('is-disabled')\n ) as HTMLElement[];\n }\n\n /* ── Detecta si un slot con nombre tiene contenido ── */\n _hasSlot(name: string): boolean {\n return !!this.querySelector(`[slot=\"${name}\"]`);\n }\n\n protected override render(): TemplateResult {\n return dropdownTemplate(this);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-dropdown': LibDropdown;\n }\n}"],"names":[],"mappings":"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"}
|
package/dist/index55.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { unsafeCSS, css, LitElement } from "lit";
|
|
2
|
-
import { property,
|
|
3
|
-
import
|
|
2
|
+
import { property, customElement } from "lit/decorators.js";
|
|
3
|
+
import { emptyStateTemplate } from "./index208.js";
|
|
4
|
+
import emptyStateCss from "./index209.js";
|
|
4
5
|
import sharedTokens from "./index196.js";
|
|
5
|
-
import { segmentedTemplate } from "./index296.js";
|
|
6
6
|
var __defProp = Object.defineProperty;
|
|
7
7
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
8
8
|
var __decorateClass = (decorators, target, key, kind) => {
|
|
@@ -13,155 +13,63 @@ var __decorateClass = (decorators, target, key, kind) => {
|
|
|
13
13
|
if (kind && result) __defProp(target, key, result);
|
|
14
14
|
return result;
|
|
15
15
|
};
|
|
16
|
-
let
|
|
16
|
+
let LibEmptyState = class extends LitElement {
|
|
17
17
|
constructor() {
|
|
18
18
|
super(...arguments);
|
|
19
|
-
this.
|
|
20
|
-
this.
|
|
21
|
-
this.
|
|
19
|
+
this.heading = "";
|
|
20
|
+
this.description = "";
|
|
21
|
+
this.kanji = "";
|
|
22
|
+
this.tone = "neutral";
|
|
23
|
+
this.layout = "default";
|
|
22
24
|
this.size = "md";
|
|
23
|
-
this.
|
|
24
|
-
this.
|
|
25
|
-
this.disabled = false;
|
|
26
|
-
this.glitch = false;
|
|
27
|
-
this._thumbStyle = "";
|
|
25
|
+
this.bordered = false;
|
|
26
|
+
this.ghost = false;
|
|
28
27
|
}
|
|
29
|
-
/* ── Ciclo de vida ── */
|
|
30
|
-
firstUpdated() {
|
|
31
|
-
this._updateThumb();
|
|
32
|
-
}
|
|
33
|
-
updated(changed) {
|
|
34
|
-
if (changed.has("value") || changed.has("variant") || changed.has("options")) {
|
|
35
|
-
Promise.resolve().then(() => this._updateThumb());
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
/* ── Thumb engine ── */
|
|
39
|
-
_updateThumb() {
|
|
40
|
-
const idx = this.options.findIndex((o) => o.value === this.value);
|
|
41
|
-
if (idx === -1) return;
|
|
42
|
-
const el = this._optionEls[idx];
|
|
43
|
-
if (!el) return;
|
|
44
|
-
const isUnderline = this.variant === "underline" || this.variant === "dark-underline";
|
|
45
|
-
const w = el.offsetWidth;
|
|
46
|
-
const x = isUnderline ? el.offsetLeft : el.offsetLeft - this._getTrackPadding();
|
|
47
|
-
this._thumbStyle = `width:${w}px;transform:translateX(${x}px)`;
|
|
48
|
-
}
|
|
49
|
-
_getTrackPadding() {
|
|
50
|
-
const track = this.renderRoot.querySelector(".seg");
|
|
51
|
-
if (!track) return 3;
|
|
52
|
-
return parseInt(getComputedStyle(track).paddingLeft, 10) || 3;
|
|
53
|
-
}
|
|
54
|
-
/* ── Selección ── */
|
|
55
|
-
_handleSelect(option, evt) {
|
|
56
|
-
if (this.disabled || option.disabled) return;
|
|
57
|
-
const previousValue = this.value;
|
|
58
|
-
if (option.value === previousValue) return;
|
|
59
|
-
this.value = option.value;
|
|
60
|
-
if (this.glitch) {
|
|
61
|
-
const idx = this.options.findIndex((o) => o.value === this.value);
|
|
62
|
-
const node = this._optionEls[idx];
|
|
63
|
-
if (node) {
|
|
64
|
-
node.classList.add("glitch-on");
|
|
65
|
-
setTimeout(() => node.classList.remove("glitch-on"), 340);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
this._triggerRipple(evt);
|
|
69
|
-
this.dispatchEvent(
|
|
70
|
-
new CustomEvent("ui-lib-change", {
|
|
71
|
-
detail: { value: this.value, previousValue },
|
|
72
|
-
bubbles: true,
|
|
73
|
-
composed: true
|
|
74
|
-
})
|
|
75
|
-
);
|
|
76
|
-
}
|
|
77
|
-
_triggerRipple(evt) {
|
|
78
|
-
const target = evt.currentTarget;
|
|
79
|
-
if (!target) return;
|
|
80
|
-
let wrap = target.querySelector(".seg-ripple");
|
|
81
|
-
if (!wrap) {
|
|
82
|
-
wrap = document.createElement("div");
|
|
83
|
-
wrap.className = "seg-ripple";
|
|
84
|
-
target.appendChild(wrap);
|
|
85
|
-
}
|
|
86
|
-
const dot = document.createElement("div");
|
|
87
|
-
dot.className = "seg-ripple-dot";
|
|
88
|
-
dot.style.left = "50%";
|
|
89
|
-
dot.style.top = "50%";
|
|
90
|
-
dot.style.marginLeft = "-2px";
|
|
91
|
-
dot.style.marginTop = "-2px";
|
|
92
|
-
wrap.appendChild(dot);
|
|
93
|
-
setTimeout(() => dot.remove(), 400);
|
|
94
|
-
}
|
|
95
|
-
/* ── API pública ── */
|
|
96
|
-
/** Selecciona un valor programáticamente */
|
|
97
|
-
select(value) {
|
|
98
|
-
const opt = this.options.find((o) => o.value === value);
|
|
99
|
-
if (opt && !opt.disabled) {
|
|
100
|
-
const prev = this.value;
|
|
101
|
-
this.value = value;
|
|
102
|
-
this.dispatchEvent(
|
|
103
|
-
new CustomEvent("ui-lib-change", {
|
|
104
|
-
detail: { value, previousValue: prev },
|
|
105
|
-
bubbles: true,
|
|
106
|
-
composed: true
|
|
107
|
-
})
|
|
108
|
-
);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
/* ── Render ── */
|
|
112
28
|
render() {
|
|
113
|
-
return
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
29
|
+
return emptyStateTemplate({
|
|
30
|
+
heading: this.heading,
|
|
31
|
+
description: this.description,
|
|
32
|
+
kanji: this.kanji,
|
|
33
|
+
tone: this.tone,
|
|
34
|
+
layout: this.layout,
|
|
117
35
|
size: this.size,
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
disabled: this.disabled,
|
|
121
|
-
glitch: this.glitch,
|
|
122
|
-
thumbStyle: this._thumbStyle,
|
|
123
|
-
onSelect: (opt, evt) => this._handleSelect(opt, evt)
|
|
36
|
+
bordered: this.bordered,
|
|
37
|
+
ghost: this.ghost
|
|
124
38
|
});
|
|
125
39
|
}
|
|
126
40
|
};
|
|
127
|
-
|
|
41
|
+
LibEmptyState.styles = [
|
|
128
42
|
css`${unsafeCSS(sharedTokens)}`,
|
|
129
|
-
css`${unsafeCSS(
|
|
43
|
+
css`${unsafeCSS(emptyStateCss)}`
|
|
130
44
|
];
|
|
131
45
|
__decorateClass([
|
|
132
|
-
property({ type:
|
|
133
|
-
],
|
|
46
|
+
property({ type: String })
|
|
47
|
+
], LibEmptyState.prototype, "heading", 2);
|
|
134
48
|
__decorateClass([
|
|
135
|
-
property({ type: String
|
|
136
|
-
],
|
|
49
|
+
property({ type: String })
|
|
50
|
+
], LibEmptyState.prototype, "description", 2);
|
|
137
51
|
__decorateClass([
|
|
138
|
-
property({ type: String
|
|
139
|
-
],
|
|
52
|
+
property({ type: String })
|
|
53
|
+
], LibEmptyState.prototype, "kanji", 2);
|
|
140
54
|
__decorateClass([
|
|
141
55
|
property({ type: String, reflect: true })
|
|
142
|
-
],
|
|
56
|
+
], LibEmptyState.prototype, "tone", 2);
|
|
143
57
|
__decorateClass([
|
|
144
|
-
property({ type:
|
|
145
|
-
],
|
|
58
|
+
property({ type: String, reflect: true })
|
|
59
|
+
], LibEmptyState.prototype, "layout", 2);
|
|
146
60
|
__decorateClass([
|
|
147
|
-
property({ type:
|
|
148
|
-
],
|
|
61
|
+
property({ type: String, reflect: true })
|
|
62
|
+
], LibEmptyState.prototype, "size", 2);
|
|
149
63
|
__decorateClass([
|
|
150
64
|
property({ type: Boolean, reflect: true })
|
|
151
|
-
],
|
|
65
|
+
], LibEmptyState.prototype, "bordered", 2);
|
|
152
66
|
__decorateClass([
|
|
153
67
|
property({ type: Boolean, reflect: true })
|
|
154
|
-
],
|
|
155
|
-
__decorateClass([
|
|
156
|
-
state
|
|
157
|
-
],
|
|
158
|
-
__decorateClass([
|
|
159
|
-
queryAll(".seg-option")
|
|
160
|
-
], LibSegmentedControl.prototype, "_optionEls", 2);
|
|
161
|
-
LibSegmentedControl = __decorateClass([
|
|
162
|
-
customElement("lib-segmented-control")
|
|
163
|
-
], LibSegmentedControl);
|
|
68
|
+
], LibEmptyState.prototype, "ghost", 2);
|
|
69
|
+
LibEmptyState = __decorateClass([
|
|
70
|
+
customElement("lib-empty-state")
|
|
71
|
+
], LibEmptyState);
|
|
164
72
|
export {
|
|
165
|
-
|
|
73
|
+
LibEmptyState
|
|
166
74
|
};
|
|
167
75
|
//# sourceMappingURL=index55.js.map
|