@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/index38.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 { selectOptionTemplate } from "./index332.js";
|
|
4
|
+
import optionCss from "./index333.js";
|
|
5
5
|
import sharedTokens from "./index196.js";
|
|
6
|
-
import { LIQUID_PALETTES } from "./index262.js";
|
|
7
6
|
var __defProp = Object.defineProperty;
|
|
8
7
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
9
8
|
var __decorateClass = (decorators, target, key, kind) => {
|
|
@@ -14,265 +13,54 @@ var __decorateClass = (decorators, target, key, kind) => {
|
|
|
14
13
|
if (kind && result) __defProp(target, key, result);
|
|
15
14
|
return result;
|
|
16
15
|
};
|
|
17
|
-
class
|
|
18
|
-
constructor(btn, canvas, water, ripple) {
|
|
19
|
-
this.fill = 0;
|
|
20
|
-
this.targetFill = 0;
|
|
21
|
-
this.fillSpeed = 0.032;
|
|
22
|
-
this.shimmerX = -1;
|
|
23
|
-
this.t = 0;
|
|
24
|
-
this.hovered = false;
|
|
25
|
-
this.raf = 0;
|
|
26
|
-
this.A = 3.5;
|
|
27
|
-
this.f1 = 0.038;
|
|
28
|
-
this.f2 = 0.063;
|
|
29
|
-
this.s1 = 1.8;
|
|
30
|
-
this.s2 = 1.2;
|
|
31
|
-
this.W = 0;
|
|
32
|
-
this.H = 0;
|
|
33
|
-
this.ripples = [];
|
|
34
|
-
this.btn = btn;
|
|
35
|
-
this.canvas = canvas;
|
|
36
|
-
this.ctx = canvas.getContext("2d");
|
|
37
|
-
[this.wr, this.wg, this.wb] = water;
|
|
38
|
-
[this.rr, this.rg, this.rb] = ripple;
|
|
39
|
-
this.resize();
|
|
40
|
-
this.loop();
|
|
41
|
-
}
|
|
42
|
-
/* ── Dimensiones con DPR ── */
|
|
43
|
-
resize() {
|
|
44
|
-
const r = this.btn.getBoundingClientRect();
|
|
45
|
-
const dpr = window.devicePixelRatio || 1;
|
|
46
|
-
this.W = r.width;
|
|
47
|
-
this.H = r.height;
|
|
48
|
-
this.canvas.width = this.W * dpr;
|
|
49
|
-
this.canvas.height = this.H * dpr;
|
|
50
|
-
this.canvas.style.width = `${this.W}px`;
|
|
51
|
-
this.canvas.style.height = `${this.H}px`;
|
|
52
|
-
this.ctx.scale(dpr, dpr);
|
|
53
|
-
}
|
|
54
|
-
/* ── Spawn de ripple ── */
|
|
55
|
-
spawnRipple(x, y, { speed = 2.2, maxR, lineWidth = 1.2 } = {}) {
|
|
56
|
-
const diag = Math.sqrt(this.W ** 2 + this.H ** 2);
|
|
57
|
-
this.ripples.push({
|
|
58
|
-
x,
|
|
59
|
-
y,
|
|
60
|
-
radius: 0,
|
|
61
|
-
maxRadius: maxR ?? diag * 0.72,
|
|
62
|
-
speed,
|
|
63
|
-
lineWidth,
|
|
64
|
-
opacity: 0
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
/* ── Eventos públicos — llamados por el componente Lit ── */
|
|
68
|
-
onMouseEnter(x, y) {
|
|
69
|
-
this.hovered = true;
|
|
70
|
-
this.targetFill = 1;
|
|
71
|
-
this.fillSpeed = 0.028;
|
|
72
|
-
this.shimmerX = -0.3;
|
|
73
|
-
this.spawnRipple(x, y, { speed: 3.2, lineWidth: 1.8 });
|
|
74
|
-
setTimeout(() => this.spawnRipple(x, y, { speed: 2, lineWidth: 1.1 }), 80);
|
|
75
|
-
setTimeout(() => this.spawnRipple(x, y, { speed: 1.3, lineWidth: 0.7 }), 180);
|
|
76
|
-
}
|
|
77
|
-
onMouseLeave() {
|
|
78
|
-
this.hovered = false;
|
|
79
|
-
this.targetFill = 0;
|
|
80
|
-
this.fillSpeed = 0.048;
|
|
81
|
-
}
|
|
82
|
-
onMouseDown(cx, cy) {
|
|
83
|
-
for (let i = 0; i < 3; i++) {
|
|
84
|
-
setTimeout(() => {
|
|
85
|
-
this.spawnRipple(cx, cy, {
|
|
86
|
-
speed: 4 - i * 0.8,
|
|
87
|
-
maxR: this.W * 0.5,
|
|
88
|
-
lineWidth: 2 - i * 0.4
|
|
89
|
-
});
|
|
90
|
-
}, i * 40);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
/* ── Dibujo ── */
|
|
94
|
-
drawWave() {
|
|
95
|
-
const { ctx, W, H, A, f1, f2, s1, s2, t, wr, wg, wb, fill } = this;
|
|
96
|
-
if (fill <= 1e-3) return;
|
|
97
|
-
const baseY = H * (1 - fill);
|
|
98
|
-
ctx.beginPath();
|
|
99
|
-
ctx.moveTo(0, H);
|
|
100
|
-
ctx.lineTo(0, baseY);
|
|
101
|
-
for (let x = 0; x <= W; x++) {
|
|
102
|
-
const y = baseY + A * Math.sin(x * f1 + t * s1) + A * 0.45 * Math.sin(x * f2 - t * s2);
|
|
103
|
-
ctx.lineTo(x, y);
|
|
104
|
-
}
|
|
105
|
-
ctx.lineTo(W, H);
|
|
106
|
-
ctx.closePath();
|
|
107
|
-
const grad = ctx.createLinearGradient(0, baseY - A * 2, 0, H);
|
|
108
|
-
grad.addColorStop(0, `rgba(${wr},${wg},${wb},0.82)`);
|
|
109
|
-
grad.addColorStop(0.4, `rgba(${wr},${wg},${wb},0.92)`);
|
|
110
|
-
grad.addColorStop(1, `rgba(${wr},${wg},${wb},0.98)`);
|
|
111
|
-
ctx.fillStyle = grad;
|
|
112
|
-
ctx.fill();
|
|
113
|
-
if (this.shimmerX > -0.5 && this.shimmerX < 1.5) {
|
|
114
|
-
const sx = W * this.shimmerX;
|
|
115
|
-
const sg = ctx.createLinearGradient(sx - 40, 0, sx + 40, 0);
|
|
116
|
-
sg.addColorStop(0, "rgba(255,255,255,0)");
|
|
117
|
-
sg.addColorStop(0.5, "rgba(255,255,255,0.12)");
|
|
118
|
-
sg.addColorStop(1, "rgba(255,255,255,0)");
|
|
119
|
-
ctx.fillStyle = sg;
|
|
120
|
-
ctx.fillRect(0, Math.max(0, baseY - 4), W, H - Math.max(0, baseY - 4));
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
drawRipples() {
|
|
124
|
-
const { ctx, rr, rg, rb } = this;
|
|
125
|
-
this.ripples = this.ripples.filter((r) => r.opacity > 0 || r.radius === 0);
|
|
126
|
-
for (const r of this.ripples) {
|
|
127
|
-
r.radius += r.speed;
|
|
128
|
-
r.opacity = Math.max(0, 1 - r.radius / r.maxRadius);
|
|
129
|
-
ctx.beginPath();
|
|
130
|
-
ctx.arc(r.x, r.y, r.radius, 0, Math.PI * 2);
|
|
131
|
-
ctx.strokeStyle = `rgba(${rr},${rg},${rb},${r.opacity * 0.9})`;
|
|
132
|
-
ctx.lineWidth = r.lineWidth;
|
|
133
|
-
ctx.stroke();
|
|
134
|
-
if (r.radius > 6) {
|
|
135
|
-
ctx.beginPath();
|
|
136
|
-
ctx.arc(r.x, r.y, r.radius * 0.65, 0, Math.PI * 2);
|
|
137
|
-
ctx.strokeStyle = `rgba(${rr},${rg},${rb},${r.opacity * 0.4})`;
|
|
138
|
-
ctx.lineWidth = r.lineWidth * 0.5;
|
|
139
|
-
ctx.stroke();
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
this.ripples = this.ripples.filter((r) => r.opacity > 0);
|
|
143
|
-
}
|
|
144
|
-
/* ── Loop principal ── */
|
|
145
|
-
loop() {
|
|
146
|
-
const tick = () => {
|
|
147
|
-
this.raf = requestAnimationFrame(tick);
|
|
148
|
-
const { ctx, W, H } = this;
|
|
149
|
-
this.t += 0.04;
|
|
150
|
-
const diff = this.targetFill - this.fill;
|
|
151
|
-
this.fill += diff * this.fillSpeed * 2.8;
|
|
152
|
-
if (Math.abs(diff) < 5e-4) this.fill = this.targetFill;
|
|
153
|
-
if (this.hovered && this.shimmerX < 1.6) {
|
|
154
|
-
this.shimmerX += 0.012;
|
|
155
|
-
}
|
|
156
|
-
if (this.fill <= 1e-3 && this.ripples.length === 0) return;
|
|
157
|
-
ctx.clearRect(0, 0, W, H);
|
|
158
|
-
this.drawWave();
|
|
159
|
-
this.drawRipples();
|
|
160
|
-
};
|
|
161
|
-
this.raf = requestAnimationFrame(tick);
|
|
162
|
-
}
|
|
163
|
-
/* ── Cleanup ── */
|
|
164
|
-
destroy() {
|
|
165
|
-
cancelAnimationFrame(this.raf);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
let LibButtonLiquid = class extends LitElement {
|
|
16
|
+
let LibSelectOption = class extends LitElement {
|
|
169
17
|
constructor() {
|
|
170
18
|
super(...arguments);
|
|
171
|
-
this.
|
|
172
|
-
this.
|
|
19
|
+
this.value = "";
|
|
20
|
+
this.selected = false;
|
|
173
21
|
this.disabled = false;
|
|
174
|
-
this.loading = false;
|
|
175
|
-
this.dark = false;
|
|
176
|
-
this.block = false;
|
|
177
|
-
this._physics = null;
|
|
178
|
-
this._canvas = null;
|
|
179
|
-
this._ro = null;
|
|
180
|
-
}
|
|
181
|
-
/* ── Lifecycle ── */
|
|
182
|
-
firstUpdated() {
|
|
183
|
-
this._initCanvas();
|
|
184
|
-
}
|
|
185
|
-
updated(changed) {
|
|
186
|
-
if (changed.has("variant")) {
|
|
187
|
-
this._destroyCanvas();
|
|
188
|
-
this._initCanvas();
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
disconnectedCallback() {
|
|
192
|
-
var _a;
|
|
193
|
-
super.disconnectedCallback();
|
|
194
|
-
this._destroyCanvas();
|
|
195
|
-
(_a = this._ro) == null ? void 0 : _a.disconnect();
|
|
196
22
|
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
const palette = LIQUID_PALETTES[this.variant];
|
|
204
|
-
this._physics = new WaterPhysics(this._btn, canvas, palette.water, palette.ripple);
|
|
205
|
-
this._ro = new ResizeObserver(() => {
|
|
206
|
-
var _a;
|
|
207
|
-
return (_a = this._physics) == null ? void 0 : _a.resize();
|
|
23
|
+
render() {
|
|
24
|
+
return selectOptionTemplate({
|
|
25
|
+
value: this.value,
|
|
26
|
+
selected: this.selected,
|
|
27
|
+
disabled: this.disabled,
|
|
28
|
+
handleClick: this._handleClick.bind(this)
|
|
208
29
|
});
|
|
209
|
-
this._ro.observe(this._btn);
|
|
210
|
-
}
|
|
211
|
-
_destroyCanvas() {
|
|
212
|
-
var _a, _b, _c;
|
|
213
|
-
(_a = this._physics) == null ? void 0 : _a.destroy();
|
|
214
|
-
this._physics = null;
|
|
215
|
-
(_b = this._canvas) == null ? void 0 : _b.remove();
|
|
216
|
-
this._canvas = null;
|
|
217
|
-
(_c = this._ro) == null ? void 0 : _c.disconnect();
|
|
218
|
-
this._ro = null;
|
|
219
|
-
}
|
|
220
|
-
/* ── Eventos del canvas — llamados desde el template ── */
|
|
221
|
-
_onMouseEnter(e) {
|
|
222
|
-
var _a;
|
|
223
|
-
if (this.disabled || this.loading) return;
|
|
224
|
-
const rect = this._btn.getBoundingClientRect();
|
|
225
|
-
(_a = this._physics) == null ? void 0 : _a.onMouseEnter(e.clientX - rect.left, e.clientY - rect.top);
|
|
226
30
|
}
|
|
227
|
-
|
|
31
|
+
_handleClick(e) {
|
|
228
32
|
var _a;
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
}
|
|
242
|
-
/* ── Render ── */
|
|
243
|
-
render() {
|
|
244
|
-
return buttonLiquidTemplate(this);
|
|
33
|
+
e.stopPropagation();
|
|
34
|
+
if (this.disabled) return;
|
|
35
|
+
this.dispatchEvent(
|
|
36
|
+
new CustomEvent("option-selected", {
|
|
37
|
+
detail: {
|
|
38
|
+
value: this.value,
|
|
39
|
+
label: ((_a = this.textContent) == null ? void 0 : _a.trim()) ?? ""
|
|
40
|
+
},
|
|
41
|
+
bubbles: true,
|
|
42
|
+
composed: true
|
|
43
|
+
})
|
|
44
|
+
);
|
|
245
45
|
}
|
|
246
46
|
};
|
|
247
|
-
|
|
47
|
+
LibSelectOption.styles = [
|
|
248
48
|
css`${unsafeCSS(sharedTokens)}`,
|
|
249
|
-
css`${unsafeCSS(
|
|
49
|
+
css`${unsafeCSS(optionCss)}`
|
|
250
50
|
];
|
|
251
51
|
__decorateClass([
|
|
252
52
|
property({ type: String, reflect: true })
|
|
253
|
-
],
|
|
254
|
-
__decorateClass([
|
|
255
|
-
property({ type: String, reflect: true })
|
|
256
|
-
], LibButtonLiquid.prototype, "size", 2);
|
|
257
|
-
__decorateClass([
|
|
258
|
-
property({ type: Boolean, reflect: true })
|
|
259
|
-
], LibButtonLiquid.prototype, "disabled", 2);
|
|
53
|
+
], LibSelectOption.prototype, "value", 2);
|
|
260
54
|
__decorateClass([
|
|
261
55
|
property({ type: Boolean, reflect: true })
|
|
262
|
-
],
|
|
56
|
+
], LibSelectOption.prototype, "selected", 2);
|
|
263
57
|
__decorateClass([
|
|
264
58
|
property({ type: Boolean, reflect: true })
|
|
265
|
-
],
|
|
266
|
-
__decorateClass([
|
|
267
|
-
|
|
268
|
-
],
|
|
269
|
-
__decorateClass([
|
|
270
|
-
query(".btn")
|
|
271
|
-
], LibButtonLiquid.prototype, "_btn", 2);
|
|
272
|
-
LibButtonLiquid = __decorateClass([
|
|
273
|
-
customElement("lib-button-liquid")
|
|
274
|
-
], LibButtonLiquid);
|
|
59
|
+
], LibSelectOption.prototype, "disabled", 2);
|
|
60
|
+
LibSelectOption = __decorateClass([
|
|
61
|
+
customElement("lib-select-option")
|
|
62
|
+
], LibSelectOption);
|
|
275
63
|
export {
|
|
276
|
-
|
|
64
|
+
LibSelectOption
|
|
277
65
|
};
|
|
278
66
|
//# sourceMappingURL=index38.js.map
|
package/dist/index38.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index38.js","sources":["../src/components/atoms/liquid-button/lib-liquid-button.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport { buttonLiquidTemplate } from './lib-liquid-button.html';\nimport liquidCss from './lib-liquid-button.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\nimport { LIQUID_PALETTES } from './lib-liquid-button.types';\nimport type { LiquidVariant, LiquidSize } from './lib-liquid-button.types';\n\n/* ============================================================\n WaterPhysics — clase interna de física de canvas\n Portada desde el SG-41 (vanilla JS → TypeScript puro)\n ============================================================ */\nclass WaterPhysics {\n private btn: HTMLElement;\n private canvas: HTMLCanvasElement;\n private ctx: CanvasRenderingContext2D;\n\n /* Colores */\n private wr: number; private wg: number; private wb: number;\n private rr: number; private rg: number; private rb: number;\n\n /* Estado */\n private fill = 0;\n private targetFill = 0;\n private fillSpeed = 0.032;\n private shimmerX = -1;\n private t = 0;\n private hovered = false;\n private raf = 0;\n\n /* Física de onda */\n private readonly A = 3.5;\n private readonly f1 = 0.038;\n private readonly f2 = 0.063;\n private readonly s1 = 1.8;\n private readonly s2 = 1.2;\n\n private W = 0;\n private H = 0;\n\n private ripples: Array<{\n x: number; y: number;\n radius: number; maxRadius: number;\n speed: number; lineWidth: number;\n opacity: number;\n }> = [];\n\n constructor(\n btn: HTMLElement,\n canvas: HTMLCanvasElement,\n water: [number, number, number],\n ripple: [number, number, number],\n ) {\n this.btn = btn;\n this.canvas = canvas;\n this.ctx = canvas.getContext('2d')!;\n [this.wr, this.wg, this.wb] = water;\n [this.rr, this.rg, this.rb] = ripple;\n\n this.resize();\n this.loop();\n }\n\n /* ── Dimensiones con DPR ── */\n resize(): void {\n const r = this.btn.getBoundingClientRect();\n const dpr = window.devicePixelRatio || 1;\n this.W = r.width;\n this.H = r.height;\n this.canvas.width = this.W * dpr;\n this.canvas.height = this.H * dpr;\n this.canvas.style.width = `${this.W}px`;\n this.canvas.style.height = `${this.H}px`;\n this.ctx.scale(dpr, dpr);\n }\n\n /* ── Spawn de ripple ── */\n spawnRipple(\n x: number, y: number,\n { speed = 2.2, maxR, lineWidth = 1.2 }:\n { speed?: number; maxR?: number; lineWidth?: number } = {},\n ): void {\n const diag = Math.sqrt(this.W ** 2 + this.H ** 2);\n this.ripples.push({\n x, y,\n radius: 0,\n maxRadius: maxR ?? diag * 0.72,\n speed,\n lineWidth,\n opacity: 0,\n });\n }\n\n /* ── Eventos públicos — llamados por el componente Lit ── */\n onMouseEnter(x: number, y: number): void {\n this.hovered = true;\n this.targetFill = 1;\n this.fillSpeed = 0.028;\n this.shimmerX = -0.3;\n\n this.spawnRipple(x, y, { speed: 3.2, lineWidth: 1.8 });\n setTimeout((): void => this.spawnRipple(x, y, { speed: 2.0, lineWidth: 1.1 }), 80);\n setTimeout((): void => this.spawnRipple(x, y, { speed: 1.3, lineWidth: 0.7 }), 180);\n }\n\n onMouseLeave(): void {\n this.hovered = false;\n this.targetFill = 0;\n this.fillSpeed = 0.048;\n }\n\n onMouseDown(cx: number, cy: number): void {\n for (let i = 0; i < 3; i++) {\n setTimeout((): void => {\n this.spawnRipple(cx, cy, {\n speed: 4 - i * 0.8,\n maxR: this.W * 0.5,\n lineWidth: 2 - i * 0.4,\n });\n }, i * 40);\n }\n }\n\n /* ── Dibujo ── */\n private drawWave(): void {\n const { ctx, W, H, A, f1, f2, s1, s2, t, wr, wg, wb, fill } = this;\n if (fill <= 0.001) return;\n\n const baseY = H * (1 - fill);\n\n /* Cuerpo sinusoidal */\n ctx.beginPath();\n ctx.moveTo(0, H);\n ctx.lineTo(0, baseY);\n for (let x = 0; x <= W; x++) {\n const y = baseY\n + A * Math.sin(x * f1 + t * s1)\n + A * 0.45 * Math.sin(x * f2 - t * s2);\n ctx.lineTo(x, y);\n }\n ctx.lineTo(W, H);\n ctx.closePath();\n\n /* Gradiente vertical */\n const grad = ctx.createLinearGradient(0, baseY - A * 2, 0, H);\n grad.addColorStop(0, `rgba(${wr},${wg},${wb},0.82)`);\n grad.addColorStop(0.4, `rgba(${wr},${wg},${wb},0.92)`);\n grad.addColorStop(1, `rgba(${wr},${wg},${wb},0.98)`);\n ctx.fillStyle = grad;\n ctx.fill();\n\n /* Shimmer diagonal */\n if (this.shimmerX > -0.5 && this.shimmerX < 1.5) {\n const sx = W * this.shimmerX;\n const sg = ctx.createLinearGradient(sx - 40, 0, sx + 40, 0);\n sg.addColorStop(0, 'rgba(255,255,255,0)');\n sg.addColorStop(0.5, 'rgba(255,255,255,0.12)');\n sg.addColorStop(1, 'rgba(255,255,255,0)');\n ctx.fillStyle = sg;\n ctx.fillRect(0, Math.max(0, baseY - 4), W, H - Math.max(0, baseY - 4));\n }\n }\n\n private drawRipples(): void {\n const { ctx, rr, rg, rb } = this;\n this.ripples = this.ripples.filter(r => r.opacity > 0 || r.radius === 0);\n\n for (const r of this.ripples) {\n r.radius += r.speed;\n r.opacity = Math.max(0, 1 - r.radius / r.maxRadius);\n\n /* Anillo principal */\n ctx.beginPath();\n ctx.arc(r.x, r.y, r.radius, 0, Math.PI * 2);\n ctx.strokeStyle = `rgba(${rr},${rg},${rb},${r.opacity * 0.9})`;\n ctx.lineWidth = r.lineWidth;\n ctx.stroke();\n\n /* Segundo anillo interior más fino */\n if (r.radius > 6) {\n ctx.beginPath();\n ctx.arc(r.x, r.y, r.radius * 0.65, 0, Math.PI * 2);\n ctx.strokeStyle = `rgba(${rr},${rg},${rb},${r.opacity * 0.4})`;\n ctx.lineWidth = r.lineWidth * 0.5;\n ctx.stroke();\n }\n }\n\n /* Limpiar ripples agotados */\n this.ripples = this.ripples.filter(r => r.opacity > 0);\n }\n\n /* ── Loop principal ── */\n private loop(): void {\n const tick = (): void => {\n this.raf = requestAnimationFrame(tick);\n const { ctx, W, H } = this;\n this.t += 0.04;\n\n /* Lerp fill */\n const diff = this.targetFill - this.fill;\n this.fill += diff * this.fillSpeed * 2.8;\n if (Math.abs(diff) < 0.0005) this.fill = this.targetFill;\n\n /* Shimmer avanza */\n if (this.hovered && this.shimmerX < 1.6) {\n this.shimmerX += 0.012;\n }\n\n /* Skip si todo en reposo */\n if (this.fill <= 0.001 && this.ripples.length === 0) return;\n\n ctx.clearRect(0, 0, W, H);\n this.drawWave();\n this.drawRipples();\n };\n this.raf = requestAnimationFrame(tick);\n }\n\n /* ── Cleanup ── */\n destroy(): void {\n cancelAnimationFrame(this.raf);\n }\n}\n\n\n/* ============================================================\n LIB-BUTTON-LIQUID — Web Component\n ============================================================ */\n\n/**\n * Botón con física de agua en canvas.\n *\n * @prop variant — 'ink' | 'washi' | 'kaki' | 'celadon' | 'ghost' | 'danger'\n * @prop size — 'sm' | 'md' | 'lg'\n * @prop disabled — bloquea interacción y detiene el canvas\n * @prop loading — muestra spinner, bloquea interacción\n * @prop dark — ajusta colores en surface oscura\n * @prop block — ancho 100%\n *\n * Slots: default · prefix · suffix\n * @fires ui-lib-click — {detail: { originalEvent: MouseEvent }}\n */\n@customElement('lib-button-liquid')\nexport class LibButtonLiquid extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(liquidCss)}`,\n ];\n\n @property({ type: String, reflect: true })\n variant: LiquidVariant = 'ink';\n\n @property({ type: String, reflect: true })\n size: LiquidSize = 'md';\n\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n @property({ type: Boolean, reflect: true })\n loading = false;\n\n @property({ type: Boolean, reflect: true })\n dark = false;\n\n @property({ type: Boolean, reflect: true })\n block = false;\n\n @query('.btn')\n declare private _btn: HTMLButtonElement;\n\n private _physics: WaterPhysics | null = null;\n private _canvas: HTMLCanvasElement | null = null;\n private _ro: ResizeObserver | null = null;\n\n /* ── Lifecycle ── */\n\n override firstUpdated(): void {\n this._initCanvas();\n }\n\n override updated(changed: Map<string, unknown>): void {\n /* Si cambia la variante, reconstruir physics con nueva paleta */\n if (changed.has('variant')) {\n this._destroyCanvas();\n this._initCanvas();\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this._destroyCanvas();\n this._ro?.disconnect();\n }\n\n /* ── Canvas setup ── */\n\n private _initCanvas(): void {\n if (!this._btn) return;\n\n /* Crear canvas y añadirlo como primer hijo del botón (bajo .btn-inner) */\n const canvas = document.createElement('canvas');\n this._canvas = canvas;\n this._btn.insertBefore(canvas, this._btn.firstChild);\n\n const palette = LIQUID_PALETTES[this.variant];\n this._physics = new WaterPhysics(this._btn, canvas, palette.water, palette.ripple);\n\n /* ResizeObserver para adaptar canvas al tamaño real del botón */\n this._ro = new ResizeObserver((): void => this._physics?.resize());\n this._ro.observe(this._btn);\n }\n\n private _destroyCanvas(): void {\n this._physics?.destroy();\n this._physics = null;\n this._canvas?.remove();\n this._canvas = null;\n this._ro?.disconnect();\n this._ro = null;\n }\n\n /* ── Eventos del canvas — llamados desde el template ── */\n\n _onMouseEnter(e: MouseEvent): void {\n if (this.disabled || this.loading) return;\n const rect = this._btn.getBoundingClientRect();\n this._physics?.onMouseEnter(e.clientX - rect.left, e.clientY - rect.top);\n }\n\n _onMouseLeave(): void {\n this._physics?.onMouseLeave();\n }\n\n _onMouseDown(e: MouseEvent): void {\n if (this.disabled || this.loading) return;\n const rect = this._btn.getBoundingClientRect();\n this._physics?.onMouseDown(e.clientX - rect.left, e.clientY - rect.top);\n\n this.dispatchEvent(new CustomEvent('ui-lib-click', {\n detail: { originalEvent: e },\n bubbles: true,\n composed: true,\n }));\n }\n\n /* ── Render ── */\n protected override render(): TemplateResult {\n return buttonLiquidTemplate(this);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-button-liquid': LibButtonLiquid;\n }\n}"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index38.js","sources":["../src/components/atoms/select-option/lib-select-option.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { selectOptionTemplate } from './lib-select-option.html';\nimport optionCss from './lib-select-option.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\n\n/**\n * @element lib-select-option\n *\n * Opción individual para usar dentro de lib-select.\n * Emite `option-selected` con { value, label } al hacer clic,\n * que lib-select captura desde el light DOM.\n *\n * @fires option-selected — { value: string, label: string }\n * @slot — Texto visible de la opción\n */\n@customElement('lib-select-option')\nexport class LibSelectOption extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(optionCss)}`,\n ];\n\n /** Valor interno que se comunica al select padre. */\n @property({ type: String, reflect: true }) value = '';\n\n /** Estado de selección — controlado por lib-select. */\n @property({ type: Boolean, reflect: true }) selected = false;\n\n /** Deshabilita la opción. */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n override render(): TemplateResult {\n return selectOptionTemplate({\n value: this.value,\n selected: this.selected,\n disabled: this.disabled,\n handleClick: this._handleClick.bind(this),\n });\n }\n\n private _handleClick(e: Event): void {\n e.stopPropagation();\n if (this.disabled) return;\n\n this.dispatchEvent(\n new CustomEvent<{ value: string; label: string }>('option-selected', {\n detail: {\n value: this.value,\n label: this.textContent?.trim() ?? '',\n },\n bubbles: true,\n composed: true,\n })\n );\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-select-option': LibSelectOption;\n }\n}"],"names":[],"mappings":";;;;;;;;;;;;;;;AAiBO,IAAM,kBAAN,cAA8B,WAAW;AAAA,EAAzC,cAAA;AAAA,UAAA,GAAA,SAAA;AAOsC,SAAA,QAAQ;AAGP,SAAA,WAAW;AAGX,SAAA,WAAW;AAAA,EAAA;AAAA,EAE9C,SAAyB;AAChC,WAAO,qBAAqB;AAAA,MAC1B,OAAa,KAAK;AAAA,MAClB,UAAa,KAAK;AAAA,MAClB,UAAa,KAAK;AAAA,MAClB,aAAa,KAAK,aAAa,KAAK,IAAI;AAAA,IAAA,CACzC;AAAA,EACH;AAAA,EAEQ,aAAa,GAAgB;;AACnC,MAAE,gBAAA;AACF,QAAI,KAAK,SAAU;AAEnB,SAAK;AAAA,MACH,IAAI,YAA8C,mBAAmB;AAAA,QACnE,QAAQ;AAAA,UACN,OAAO,KAAK;AAAA,UACZ,SAAO,UAAK,gBAAL,mBAAkB,WAAU;AAAA,QAAA;AAAA,QAErC,SAAU;AAAA,QACV,UAAU;AAAA,MAAA,CACX;AAAA,IAAA;AAAA,EAEL;AACF;AAvCa,gBACK,SAAS;AAAA,EACvB,MAAM,UAAU,YAAY,CAAC;AAAA,EAC7B,MAAM,UAAU,SAAS,CAAC;AAC5B;AAG2C,gBAAA;AAAA,EAA1C,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GAP9B,gBAOgC,WAAA,SAAA,CAAA;AAGC,gBAAA;AAAA,EAA3C,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GAV/B,gBAUiC,WAAA,YAAA,CAAA;AAGA,gBAAA;AAAA,EAA3C,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GAb/B,gBAaiC,WAAA,YAAA,CAAA;AAbjC,kBAAN,gBAAA;AAAA,EADN,cAAc,mBAAmB;AAAA,GACrB,eAAA;"}
|
package/dist/index39.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { unsafeCSS, css, LitElement } from "lit";
|
|
2
2
|
import { property, customElement } from "lit/decorators.js";
|
|
3
|
+
import { skeletonTemplate } from "./index334.js";
|
|
4
|
+
import skeletonCss from "./index335.js";
|
|
3
5
|
import sharedTokens from "./index196.js";
|
|
4
|
-
import glitchCss from "./index263.js";
|
|
5
|
-
import { textGlitchTemplate } from "./index264.js";
|
|
6
6
|
var __defProp = Object.defineProperty;
|
|
7
7
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
8
8
|
var __decorateClass = (decorators, target, key, kind) => {
|
|
@@ -13,155 +13,48 @@ var __decorateClass = (decorators, target, key, kind) => {
|
|
|
13
13
|
if (kind && result) __defProp(target, key, result);
|
|
14
14
|
return result;
|
|
15
15
|
};
|
|
16
|
-
|
|
17
|
-
let LibTextGlitch = class extends LitElement {
|
|
16
|
+
let LibSkeleton = class extends LitElement {
|
|
18
17
|
constructor() {
|
|
19
18
|
super(...arguments);
|
|
20
|
-
this.
|
|
21
|
-
this.
|
|
22
|
-
this.
|
|
23
|
-
this.
|
|
24
|
-
this.
|
|
25
|
-
this._boundMouseEnter = () => {
|
|
26
|
-
this._decodePlay();
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
/* ── Lifecycle ──────────────────────────────────────────── */
|
|
30
|
-
connectedCallback() {
|
|
31
|
-
super.connectedCallback();
|
|
32
|
-
this._setupDecode();
|
|
33
|
-
}
|
|
34
|
-
disconnectedCallback() {
|
|
35
|
-
super.disconnectedCallback();
|
|
36
|
-
this.removeEventListener("mouseenter", this._boundMouseEnter);
|
|
37
|
-
clearTimeout(this._alwaysTimer);
|
|
38
|
-
}
|
|
39
|
-
updated(changed) {
|
|
40
|
-
const reInit = changed.has("variant") || changed.has("trigger") || changed.has("text");
|
|
41
|
-
if (reInit) {
|
|
42
|
-
this.removeEventListener("mouseenter", this._boundMouseEnter);
|
|
43
|
-
clearTimeout(this._alwaysTimer);
|
|
44
|
-
this._running = false;
|
|
45
|
-
this._setupDecode();
|
|
46
|
-
}
|
|
19
|
+
this.shape = "rect";
|
|
20
|
+
this.animation = "shimmer";
|
|
21
|
+
this.surface = "light";
|
|
22
|
+
this.width = "100%";
|
|
23
|
+
this.height = "";
|
|
47
24
|
}
|
|
48
25
|
render() {
|
|
49
|
-
return
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
* - Para `slice` / `shift` / `noise`: activa [active] (CSS bucle).
|
|
57
|
-
*/
|
|
58
|
-
play() {
|
|
59
|
-
if (this.variant === "decode") {
|
|
60
|
-
this._decodePlay();
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
this.active = true;
|
|
64
|
-
if (this.variant === "scan" || this.variant === "redact") {
|
|
65
|
-
const dur = this.variant === "scan" ? 620 : 720;
|
|
66
|
-
setTimeout(() => {
|
|
67
|
-
this.active = false;
|
|
68
|
-
}, dur);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
/** Detiene el bucle `trigger="always"` y desactiva [active]. */
|
|
72
|
-
stop() {
|
|
73
|
-
clearTimeout(this._alwaysTimer);
|
|
74
|
-
this._running = false;
|
|
75
|
-
this.active = false;
|
|
76
|
-
}
|
|
77
|
-
/* ── Decode engine ──────────────────────────────────────── */
|
|
78
|
-
_setupDecode() {
|
|
79
|
-
if (this.variant !== "decode") return;
|
|
80
|
-
if (this.trigger === "hover") {
|
|
81
|
-
this.addEventListener("mouseenter", this._boundMouseEnter);
|
|
82
|
-
} else {
|
|
83
|
-
this.updateComplete.then(() => {
|
|
84
|
-
this._scheduleAlwaysDecode();
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
_scheduleAlwaysDecode() {
|
|
89
|
-
this._decodePlay();
|
|
90
|
-
const pause = Math.max([...this.text].length * 55 * 1.5, 400) + 2e3;
|
|
91
|
-
this._alwaysTimer = setTimeout(() => {
|
|
92
|
-
this._scheduleAlwaysDecode();
|
|
93
|
-
}, pause);
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Motor de decodificación kanji.
|
|
97
|
-
*
|
|
98
|
-
* Cada char span se sustituye por un katakana/kanji aleatorio
|
|
99
|
-
* durante un número variable de frames, y luego se resuelve al
|
|
100
|
-
* carácter original. El orden de resolución es estocástico.
|
|
101
|
-
*/
|
|
102
|
-
_decodePlay() {
|
|
103
|
-
if (this._running) return;
|
|
104
|
-
this._running = true;
|
|
105
|
-
const chars = Array.from(
|
|
106
|
-
this.renderRoot.querySelectorAll(".char")
|
|
107
|
-
);
|
|
108
|
-
if (chars.length === 0) {
|
|
109
|
-
this._running = false;
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
const SCRAMBLE_CYCLES = 6;
|
|
113
|
-
const FRAME_MS = 55;
|
|
114
|
-
const delays = chars.map(
|
|
115
|
-
() => Math.floor(Math.random() * chars.length * SCRAMBLE_CYCLES * 0.6) + SCRAMBLE_CYCLES
|
|
116
|
-
);
|
|
117
|
-
let frame = 0;
|
|
118
|
-
const total = Math.max(...delays) + 2;
|
|
119
|
-
const tick = () => {
|
|
120
|
-
chars.forEach((span, i) => {
|
|
121
|
-
const orig = span.dataset["original"] ?? "";
|
|
122
|
-
if (frame < (delays[i] ?? 0)) {
|
|
123
|
-
if (orig.trim() === "" || orig === "·" || orig === "-") return;
|
|
124
|
-
span.textContent = KANA[Math.floor(Math.random() * KANA.length)] ?? orig;
|
|
125
|
-
span.classList.add("is-scrambling");
|
|
126
|
-
} else {
|
|
127
|
-
span.textContent = orig;
|
|
128
|
-
span.classList.remove("is-scrambling");
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
frame++;
|
|
132
|
-
if (frame < total) {
|
|
133
|
-
setTimeout(tick, FRAME_MS);
|
|
134
|
-
} else {
|
|
135
|
-
chars.forEach((span) => {
|
|
136
|
-
span.textContent = span.dataset["original"] ?? "";
|
|
137
|
-
span.classList.remove("is-scrambling");
|
|
138
|
-
});
|
|
139
|
-
this._running = false;
|
|
140
|
-
}
|
|
141
|
-
};
|
|
142
|
-
tick();
|
|
26
|
+
return skeletonTemplate({
|
|
27
|
+
shape: this.shape,
|
|
28
|
+
animation: this.animation,
|
|
29
|
+
surface: this.surface,
|
|
30
|
+
width: this.width,
|
|
31
|
+
height: this.height
|
|
32
|
+
});
|
|
143
33
|
}
|
|
144
34
|
};
|
|
145
|
-
|
|
35
|
+
LibSkeleton.styles = [
|
|
146
36
|
css`${unsafeCSS(sharedTokens)}`,
|
|
147
|
-
css`${unsafeCSS(
|
|
37
|
+
css`${unsafeCSS(skeletonCss)}`
|
|
148
38
|
];
|
|
149
39
|
__decorateClass([
|
|
150
|
-
property({ type: String })
|
|
151
|
-
],
|
|
40
|
+
property({ type: String, reflect: true })
|
|
41
|
+
], LibSkeleton.prototype, "shape", 2);
|
|
152
42
|
__decorateClass([
|
|
153
43
|
property({ type: String, reflect: true })
|
|
154
|
-
],
|
|
44
|
+
], LibSkeleton.prototype, "animation", 2);
|
|
155
45
|
__decorateClass([
|
|
156
46
|
property({ type: String, reflect: true })
|
|
157
|
-
],
|
|
47
|
+
], LibSkeleton.prototype, "surface", 2);
|
|
158
48
|
__decorateClass([
|
|
159
|
-
property({ type:
|
|
160
|
-
],
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
],
|
|
49
|
+
property({ type: String })
|
|
50
|
+
], LibSkeleton.prototype, "width", 2);
|
|
51
|
+
__decorateClass([
|
|
52
|
+
property({ type: String })
|
|
53
|
+
], LibSkeleton.prototype, "height", 2);
|
|
54
|
+
LibSkeleton = __decorateClass([
|
|
55
|
+
customElement("lib-skeleton")
|
|
56
|
+
], LibSkeleton);
|
|
164
57
|
export {
|
|
165
|
-
|
|
58
|
+
LibSkeleton
|
|
166
59
|
};
|
|
167
60
|
//# sourceMappingURL=index39.js.map
|
package/dist/index39.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index39.js","sources":["../src/components/atoms/text-glitch/lib-text-glitch.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult, PropertyValues } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\nimport glitchCss from './lib-text-glitch.css?inline';\nimport { textGlitchTemplate } from './lib-text-glitch.html';\n\n/* ── Tipos públicos ─────────────────────────────────────────── */\n\n/** Variante visual del efecto de glitch. */\nexport type TextGlitchVariant = 'slice' | 'scan' | 'shift' | 'decode' | 'redact' | 'noise';\n\n/**\n * Modo de activación del efecto.\n * - `hover` → se activa al pasar el cursor (default).\n * - `always` → se activa de forma continua al montar el componente.\n */\nexport type TextGlitchTrigger = 'hover' | 'always';\n\n/* ── Pool de caracteres para el decode ──────────────────────── */\n\nconst KANA =\n 'ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ' +\n 'ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ヲ ン ガ ギ グ ゲ ゴ ' +\n 'ザ ジ ズ ゼ ゾ ダ ヂ ヅ デ ド バ ビ ブ ベ ボ 渋 液 美 乱 進 間 静 陰 影 黒 白 墨 和 侘'.split(' ');\n\n/**\n * @element lib-text-glitch\n *\n * @prop {string} text - Texto a renderizar y distorsionar.\n * @prop {TextGlitchVariant} variant - Efecto visual: slice | scan | shift | decode | redact | noise.\n * @prop {TextGlitchTrigger} trigger - Modo de activación: hover | always.\n * @prop {boolean} active - Activa el efecto programáticamente (reflectado en atributo).\n *\n * @method play() - Reproduce el efecto una vez (scan / redact / decode).\n * @method stop() - Detiene el bucle `trigger=\"always\"`.\n */\n@customElement('lib-text-glitch')\nexport class LibTextGlitch extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(glitchCss)}`,\n ];\n\n /* ── Props ──────────────────────────────────────────────── */\n\n @property({ type: String })\n text: string = '';\n\n @property({ type: String, reflect: true })\n variant: TextGlitchVariant = 'slice';\n\n @property({ type: String, reflect: true })\n trigger: TextGlitchTrigger = 'hover';\n\n /** Activa el efecto desde el exterior (CSS reacciona a [active]). */\n @property({ type: Boolean, reflect: true })\n active: boolean = false;\n\n /* ── Estado interno ─────────────────────────────────────── */\n\n private _running = false;\n private _alwaysTimer?: ReturnType<typeof setTimeout>;\n\n /* Bound handler reutilizable para poder hacer removeEventListener */\n private readonly _boundMouseEnter = (): void => { this._decodePlay(); };\n\n /* ── Lifecycle ──────────────────────────────────────────── */\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._setupDecode();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('mouseenter', this._boundMouseEnter);\n clearTimeout(this._alwaysTimer);\n }\n\n override updated(changed: PropertyValues): void {\n const reInit =\n changed.has('variant') ||\n changed.has('trigger') ||\n changed.has('text');\n\n if (reInit) {\n /* Limpieza del ciclo anterior */\n this.removeEventListener('mouseenter', this._boundMouseEnter);\n clearTimeout(this._alwaysTimer);\n this._running = false;\n this._setupDecode();\n }\n }\n\n override render(): TemplateResult {\n return textGlitchTemplate({ text: this.text, variant: this.variant });\n }\n\n /* ── API pública ────────────────────────────────────────── */\n\n /**\n * Reproduce el efecto manualmente una vez.\n * - Para `decode`: lanza el scramble de kanji.\n * - Para `scan` / `redact`: activa [active] y lo retira al terminar.\n * - Para `slice` / `shift` / `noise`: activa [active] (CSS bucle).\n */\n play(): void {\n if (this.variant === 'decode') {\n this._decodePlay();\n return;\n }\n this.active = true;\n if (this.variant === 'scan' || this.variant === 'redact') {\n const dur = this.variant === 'scan' ? 620 : 720;\n setTimeout(() => { this.active = false; }, dur);\n }\n }\n\n /** Detiene el bucle `trigger=\"always\"` y desactiva [active]. */\n stop(): void {\n clearTimeout(this._alwaysTimer);\n this._running = false;\n this.active = false;\n }\n\n /* ── Decode engine ──────────────────────────────────────── */\n\n private _setupDecode(): void {\n if (this.variant !== 'decode') return;\n\n if (this.trigger === 'hover') {\n this.addEventListener('mouseenter', this._boundMouseEnter);\n } else {\n /* always: esperamos el primer render completo para tener los .char */\n this.updateComplete.then(() => { this._scheduleAlwaysDecode(); });\n }\n }\n\n private _scheduleAlwaysDecode(): void {\n this._decodePlay();\n /* Pausa entre repeticiones: proporcional a la longitud del texto */\n const pause = Math.max([...this.text].length * 55 * 1.5, 400) + 2000;\n this._alwaysTimer = setTimeout(() => { this._scheduleAlwaysDecode(); }, pause);\n }\n\n /**\n * Motor de decodificación kanji.\n *\n * Cada char span se sustituye por un katakana/kanji aleatorio\n * durante un número variable de frames, y luego se resuelve al\n * carácter original. El orden de resolución es estocástico.\n */\n private _decodePlay(): void {\n if (this._running) return;\n this._running = true;\n\n const chars = Array.from(\n this.renderRoot.querySelectorAll<HTMLElement>('.char')\n );\n\n if (chars.length === 0) {\n this._running = false;\n return;\n }\n\n const SCRAMBLE_CYCLES = 6;\n const FRAME_MS = 55;\n\n /* Delay estocástico por carácter — no resuelven de izquierda a derecha */\n const delays = chars.map(() =>\n Math.floor(Math.random() * chars.length * SCRAMBLE_CYCLES * 0.6) + SCRAMBLE_CYCLES\n );\n\n let frame = 0;\n const total = Math.max(...delays) + 2;\n\n const tick = (): void => {\n chars.forEach((span, i) => {\n const orig = span.dataset['original'] ?? '';\n\n if (frame < (delays[i] ?? 0)) {\n /* Espacios y puntuación — no se scramblea */\n if (orig.trim() === '' || orig === '·' || orig === '-') return;\n span.textContent = KANA[Math.floor(Math.random() * KANA.length)] ?? orig;\n span.classList.add('is-scrambling');\n } else {\n span.textContent = orig;\n span.classList.remove('is-scrambling');\n }\n });\n\n frame++;\n\n if (frame < total) {\n setTimeout(tick, FRAME_MS);\n } else {\n /* Garantía final — todos al original */\n chars.forEach(span => {\n span.textContent = span.dataset['original'] ?? '';\n span.classList.remove('is-scrambling');\n });\n this._running = false;\n }\n };\n\n tick();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-text-glitch': LibTextGlitch;\n }\n}"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index39.js","sources":["../src/components/atoms/skeleton/lib-skeleton.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport type { LibSkeletonShape, LibSkeletonAnimation, LibSkeletonSurface } from './lib-skeleton.html';\nimport { skeletonTemplate } from './lib-skeleton.html';\nimport skeletonCss from './lib-skeleton.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\n\n/**\n * @element lib-skeleton\n *\n * Bloque de carga que replica la arquitectura del contenido real.\n * Tres animaciones, tres superficies, diez formas semánticas.\n *\n * @slot — (vacío) El componente es puramente visual, sin contenido.\n *\n * @example — línea de texto\n * <lib-skeleton shape=\"line\" width=\"80%\"></lib-skeleton>\n *\n * @example — avatar 40px\n * <lib-skeleton shape=\"avatar\" width=\"40px\" height=\"40px\"></lib-skeleton>\n *\n * @example — dark + wave\n * <lib-skeleton shape=\"title\" surface=\"dark\" animation=\"wave\" width=\"60%\"></lib-skeleton>\n *\n * @example — kaki + pulse\n * <lib-skeleton shape=\"img\" surface=\"kaki\" animation=\"pulse\"></lib-skeleton>\n */\n@customElement('lib-skeleton')\nexport class LibSkeleton extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(skeletonCss)}`,\n ];\n\n /**\n * Forma semántica del bloque.\n * Cada shape tiene una altura por defecto en CSS:\n * - line : 13px\n * - title : 22px\n * - h1 : 36px\n * - avatar : border-radius full (width/height obligatorio)\n * - icon : border-radius sm (width/height obligatorio)\n * - btn : 36px\n * - badge : 20px\n * - pill : 22px, border-radius full\n * - img : 160px\n * - rect : sin altura — usar `height` prop\n */\n @property({ type: String, reflect: true })\n shape: LibSkeletonShape = 'rect';\n\n /**\n * Tipo de animación.\n * - shimmer : barrido de luz lateral (default)\n * - wave : barrido más lento y orgánico\n * - pulse : opacidad, sin movimiento\n */\n @property({ type: String, reflect: true })\n animation: LibSkeletonAnimation = 'shimmer';\n\n /**\n * Superficie de color.\n * - light : washi-200 → washi-100 (default)\n * - dark : washi-800 → washi-700\n * - kaki : kaki-200 → kaki-100\n */\n @property({ type: String, reflect: true })\n surface: LibSkeletonSurface = 'light';\n\n /** Anchura del bloque. Default: 100% */\n @property({ type: String })\n width = '100%';\n\n /**\n * Altura del bloque.\n * Si no se especifica, el CSS usa la altura propia de cada `shape`.\n * Obligatorio para `avatar`, `icon` y `rect`.\n */\n @property({ type: String })\n height = '';\n\n override render(): TemplateResult {\n return skeletonTemplate({\n shape: this.shape,\n animation: this.animation,\n surface: this.surface,\n width: this.width,\n height: this.height,\n });\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-skeleton': LibSkeleton;\n }\n}"],"names":[],"mappings":";;;;;;;;;;;;;;;AA4BO,IAAM,cAAN,cAA0B,WAAW;AAAA,EAArC,cAAA;AAAA,UAAA,GAAA,SAAA;AAqBL,SAAA,QAA0B;AAS1B,SAAA,YAAkC;AASlC,SAAA,UAA8B;AAI9B,SAAA,QAAQ;AAQR,SAAA,SAAS;AAAA,EAAA;AAAA,EAEA,SAAyB;AAChC,WAAO,iBAAiB;AAAA,MACtB,OAAW,KAAK;AAAA,MAChB,WAAW,KAAK;AAAA,MAChB,SAAW,KAAK;AAAA,MAChB,OAAW,KAAK;AAAA,MAChB,QAAW,KAAK;AAAA,IAAA,CACjB;AAAA,EACH;AACF;AA9Da,YACK,SAAS;AAAA,EACvB,MAAM,UAAU,YAAY,CAAC;AAAA,EAC7B,MAAM,UAAU,WAAW,CAAC;AAC9B;AAiBA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GApB9B,YAqBX,WAAA,SAAA,CAAA;AASA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GA7B9B,YA8BX,WAAA,aAAA,CAAA;AASA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GAtC9B,YAuCX,WAAA,WAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GA1Cf,YA2CX,WAAA,SAAA,CAAA;AAQA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAlDf,YAmDX,WAAA,UAAA,CAAA;AAnDW,cAAN,gBAAA;AAAA,EADN,cAAc,cAAc;AAAA,GAChB,WAAA;"}
|