@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/index55.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index55.js","sources":["../src/components/molecules/
|
|
1
|
+
{"version":3,"file":"index55.js","sources":["../src/components/molecules/empty-state/lib-empty-state.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { emptyStateTemplate } from './lib-empty-state.html';\nimport type { LibEmptyStateTone, LibEmptyStateLayout, LibEmptyStateSize } from './lib-empty-state.html';\nimport emptyStateCss from './lib-empty-state.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\n\nexport type { LibEmptyStateTone, LibEmptyStateLayout, LibEmptyStateSize };\n\n/**\n * @element lib-empty-state\n *\n * Tres zonas: ilustración (icono Phosphor o kanji), copy, acciones.\n * Todas las zonas son opcionales — la mínima expresión es solo `heading`.\n *\n * @slot illustration — Icono Phosphor (o cualquier elemento visual)\n * @slot actions — Botones de acción (lib-button u otros)\n *\n * @example — default con icono\n * <lib-empty-state heading=\"Carpeta vacía\" description=\"Sube tu primer archivo.\">\n * <ph-folder-open slot=\"illustration\" weight=\"regular\"></ph-folder-open>\n * <lib-button slot=\"actions\" variant=\"primary\">Subir</lib-button>\n * </lib-empty-state>\n *\n * @example — kanji como ilustración\n * <lib-empty-state kanji=\"無\" heading=\"Sin resultados\" description=\"Prueba otros términos.\">\n * <lib-button slot=\"actions\" variant=\"ghost\">Limpiar filtros</lib-button>\n * </lib-empty-state>\n *\n * @example — inline con tone\n * <lib-empty-state layout=\"inline\" tone=\"kaki\" heading=\"Empieza aquí\" size=\"sm\">\n * <ph-sparkle slot=\"illustration\" weight=\"regular\"></ph-sparkle>\n * <lib-button slot=\"actions\" variant=\"accent\">Crear</lib-button>\n * </lib-empty-state>\n *\n * @example — bordered (dropzone)\n * <lib-empty-state bordered heading=\"Arrastra aquí tus archivos\">\n * <ph-plus slot=\"illustration\" weight=\"regular\"></ph-plus>\n * </lib-empty-state>\n */\n@customElement('lib-empty-state')\nexport class LibEmptyState extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(emptyStateCss)}`,\n ];\n\n /**\n * Título principal del estado vacío.\n * Se usa `heading` en lugar de `title` para evitar colisión con `HTMLElement.title`.\n */\n @property({ type: String })\n heading = '';\n\n /** Texto descriptivo secundario bajo el título. */\n @property({ type: String })\n description = '';\n\n /**\n * Carácter kanji como ilustración tipográfica (ej: 無, 空, 迷).\n * Cuando se especifica, sustituye al slot `illustration`.\n */\n @property({ type: String })\n kanji = '';\n\n /**\n * Tono cromático del icono.\n * - neutral (default): washi\n * - kaki: cálido, primer uso, atención\n * - celadon: completado, éxito\n * - error: fallo, acceso denegado\n */\n @property({ type: String, reflect: true })\n tone: LibEmptyStateTone = 'neutral';\n\n /**\n * Disposición del componente.\n * - default: columna centrada (pantallas, modales, paneles)\n * - inline: fila con icono a la izquierda (tablas, banners)\n */\n @property({ type: String, reflect: true })\n layout: LibEmptyStateLayout = 'default';\n\n /**\n * Tamaño del componente.\n * - md (default): padding generoso, icono 72px\n * - sm: compacto para sidebars y paneles secundarios\n */\n @property({ type: String, reflect: true })\n size: LibEmptyStateSize = 'md';\n\n /** Borde punteado + fondo `bg-surface`. Para zonas drop o sin contenido explícito. */\n @property({ type: Boolean, reflect: true })\n bordered = false;\n\n /** Elimina el fondo y borde del icono. Para contextos de mínimo ruido visual. */\n @property({ type: Boolean, reflect: true })\n ghost = false;\n\n override render(): TemplateResult {\n return emptyStateTemplate({\n heading: this.heading,\n description: this.description,\n kanji: this.kanji,\n tone: this.tone,\n layout: this.layout,\n size: this.size,\n bordered: this.bordered,\n ghost: this.ghost,\n });\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-empty-state': LibEmptyState;\n }\n}"],"names":[],"mappings":";;;;;;;;;;;;;;;AAyCO,IAAM,gBAAN,cAA4B,WAAW;AAAA,EAAvC,cAAA;AAAA,UAAA,GAAA,SAAA;AAWL,SAAA,UAAU;AAIV,SAAA,cAAc;AAOd,SAAA,QAAQ;AAUR,SAAA,OAA0B;AAQ1B,SAAA,SAA8B;AAQ9B,SAAA,OAA0B;AAI1B,SAAA,WAAW;AAIX,SAAA,QAAQ;AAAA,EAAA;AAAA,EAEC,SAAyB;AAChC,WAAO,mBAAmB;AAAA,MACxB,SAAa,KAAK;AAAA,MAClB,aAAa,KAAK;AAAA,MAClB,OAAa,KAAK;AAAA,MAClB,MAAa,KAAK;AAAA,MAClB,QAAa,KAAK;AAAA,MAClB,MAAa,KAAK;AAAA,MAClB,UAAa,KAAK;AAAA,MAClB,OAAa,KAAK;AAAA,IAAA,CACnB;AAAA,EACH;AACF;AAtEa,cACK,SAAS;AAAA,EACvB,MAAM,UAAU,YAAY,CAAC;AAAA,EAC7B,MAAM,UAAU,aAAa,CAAC;AAChC;AAOA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAVf,cAWX,WAAA,WAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAdf,cAeX,WAAA,eAAA,CAAA;AAOA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GArBf,cAsBX,WAAA,SAAA,CAAA;AAUA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GA/B9B,cAgCX,WAAA,QAAA,CAAA;AAQA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GAvC9B,cAwCX,WAAA,UAAA,CAAA;AAQA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GA/C9B,cAgDX,WAAA,QAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GAnD/B,cAoDX,WAAA,YAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GAvD/B,cAwDX,WAAA,SAAA,CAAA;AAxDW,gBAAN,gBAAA;AAAA,EADN,cAAc,iBAAiB;AAAA,GACnB,aAAA;"}
|
package/dist/index56.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { unsafeCSS, css, LitElement } from "lit";
|
|
2
2
|
import { property, state, customElement } from "lit/decorators.js";
|
|
3
|
+
import { generateUniqueId } from "./index210.js";
|
|
4
|
+
import uploaderCss from "./index211.js";
|
|
3
5
|
import sharedTokens from "./index196.js";
|
|
4
|
-
import
|
|
5
|
-
import { inputTemplate } from "./index298.js";
|
|
6
|
+
import { fileUploaderTemplate } from "./index212.js";
|
|
6
7
|
var __defProp = Object.defineProperty;
|
|
7
8
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
8
9
|
var __decorateClass = (decorators, target, key, kind) => {
|
|
@@ -13,86 +14,286 @@ var __decorateClass = (decorators, target, key, kind) => {
|
|
|
13
14
|
if (kind && result) __defProp(target, key, result);
|
|
14
15
|
return result;
|
|
15
16
|
};
|
|
16
|
-
let
|
|
17
|
+
let LibFileUploader = class extends LitElement {
|
|
17
18
|
constructor() {
|
|
18
19
|
super(...arguments);
|
|
19
|
-
this.
|
|
20
|
-
this.
|
|
21
|
-
this.
|
|
22
|
-
this.
|
|
20
|
+
this.zone = "default";
|
|
21
|
+
this.title = "Arrastra archivos aquí";
|
|
22
|
+
this.subtitle = "o busca en tu equipo";
|
|
23
|
+
this.hint = "PDF, DOCX, PNG, JPG · máx. 20 MB por archivo";
|
|
24
|
+
this.multiple = false;
|
|
25
|
+
this.accept = "*";
|
|
23
26
|
this.disabled = false;
|
|
24
|
-
this.
|
|
25
|
-
this.
|
|
26
|
-
this.
|
|
27
|
-
this.
|
|
28
|
-
this.
|
|
27
|
+
this.simulate = false;
|
|
28
|
+
this.simulateMs = 2e3;
|
|
29
|
+
this._isDragover = false;
|
|
30
|
+
this._entries = [];
|
|
31
|
+
this._imagePreviewUrl = null;
|
|
29
32
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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;
|
|
116
|
+
}
|
|
117
|
+
const next = Math.min(current.progress + step, 100);
|
|
118
|
+
if (next >= failAt) {
|
|
119
|
+
clearInterval(tick);
|
|
120
|
+
this._entries = this._entries.map(
|
|
121
|
+
(e) => e.id === entry.id ? { ...e, progress: next, status: "error", errorMessage: "Error de conexión" } : e
|
|
122
|
+
);
|
|
123
|
+
this.requestUpdate();
|
|
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;
|
|
132
|
+
}
|
|
133
|
+
if (next >= 100) {
|
|
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);
|
|
153
|
+
}
|
|
154
|
+
/* ── Eliminar archivo ── */
|
|
155
|
+
_onRemove(id) {
|
|
156
|
+
const entry = this._entries.find((e) => e.id === id);
|
|
157
|
+
if (!entry) return;
|
|
158
|
+
if (entry.previewUrl) URL.revokeObjectURL(entry.previewUrl);
|
|
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
|
+
);
|
|
167
|
+
}
|
|
168
|
+
/* ── Upload all (delega a host si simulate=false) ── */
|
|
169
|
+
_onUploadAll() {
|
|
170
|
+
if (this.simulate) {
|
|
171
|
+
const idleEntries = this._entries.filter((e) => e.status === "idle" || e.status === "error");
|
|
172
|
+
idleEntries.forEach((e) => this._simulateUpload(e));
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/* ── Limpiar lista ── */
|
|
176
|
+
_onClearAll() {
|
|
177
|
+
this._entries.forEach((e) => {
|
|
178
|
+
if (e.previewUrl) URL.revokeObjectURL(e.previewUrl);
|
|
44
179
|
});
|
|
180
|
+
this._entries = [];
|
|
45
181
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
this.
|
|
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
|
+
);
|
|
206
|
+
}
|
|
207
|
+
/** Archivos actuales en la lista */
|
|
208
|
+
get files() {
|
|
209
|
+
return [...this._entries];
|
|
210
|
+
}
|
|
211
|
+
/* ── Helpers ── */
|
|
212
|
+
_emitFilesChange(files) {
|
|
49
213
|
this.dispatchEvent(
|
|
50
|
-
new CustomEvent("ui-lib-
|
|
51
|
-
detail: {
|
|
214
|
+
new CustomEvent("ui-lib-files-change", {
|
|
215
|
+
detail: { files },
|
|
52
216
|
bubbles: true,
|
|
53
217
|
composed: true
|
|
54
218
|
})
|
|
55
219
|
);
|
|
56
220
|
}
|
|
57
|
-
|
|
58
|
-
|
|
221
|
+
/* ── Lifecycle ── */
|
|
222
|
+
disconnectedCallback() {
|
|
223
|
+
super.disconnectedCallback();
|
|
224
|
+
this._entries.forEach((e) => {
|
|
225
|
+
if (e.previewUrl) URL.revokeObjectURL(e.previewUrl);
|
|
226
|
+
});
|
|
227
|
+
if (this._imagePreviewUrl) URL.revokeObjectURL(this._imagePreviewUrl);
|
|
228
|
+
}
|
|
229
|
+
/* ── Render ── */
|
|
230
|
+
render() {
|
|
231
|
+
return fileUploaderTemplate({
|
|
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
|
+
});
|
|
59
251
|
}
|
|
60
252
|
};
|
|
61
|
-
|
|
253
|
+
LibFileUploader.styles = [
|
|
62
254
|
css`${unsafeCSS(sharedTokens)}`,
|
|
63
|
-
css`${unsafeCSS(
|
|
255
|
+
css`${unsafeCSS(uploaderCss)}`
|
|
64
256
|
];
|
|
257
|
+
__decorateClass([
|
|
258
|
+
property({ type: String, reflect: true })
|
|
259
|
+
], LibFileUploader.prototype, "zone", 2);
|
|
65
260
|
__decorateClass([
|
|
66
261
|
property({ type: String })
|
|
67
|
-
],
|
|
262
|
+
], LibFileUploader.prototype, "title", 2);
|
|
68
263
|
__decorateClass([
|
|
69
264
|
property({ type: String })
|
|
70
|
-
],
|
|
265
|
+
], LibFileUploader.prototype, "subtitle", 2);
|
|
71
266
|
__decorateClass([
|
|
72
267
|
property({ type: String })
|
|
73
|
-
],
|
|
268
|
+
], LibFileUploader.prototype, "hint", 2);
|
|
74
269
|
__decorateClass([
|
|
75
270
|
property({ type: Boolean, reflect: true })
|
|
76
|
-
],
|
|
271
|
+
], LibFileUploader.prototype, "multiple", 2);
|
|
272
|
+
__decorateClass([
|
|
273
|
+
property({ type: String })
|
|
274
|
+
], LibFileUploader.prototype, "accept", 2);
|
|
77
275
|
__decorateClass([
|
|
78
276
|
property({ type: Boolean, reflect: true })
|
|
79
|
-
],
|
|
277
|
+
], LibFileUploader.prototype, "disabled", 2);
|
|
80
278
|
__decorateClass([
|
|
81
279
|
property({ type: Boolean, reflect: true })
|
|
82
|
-
],
|
|
280
|
+
], LibFileUploader.prototype, "simulate", 2);
|
|
83
281
|
__decorateClass([
|
|
84
|
-
property({ type:
|
|
85
|
-
],
|
|
282
|
+
property({ type: Number, attribute: "simulate-ms" })
|
|
283
|
+
], LibFileUploader.prototype, "simulateMs", 2);
|
|
86
284
|
__decorateClass([
|
|
87
|
-
|
|
88
|
-
],
|
|
285
|
+
state()
|
|
286
|
+
], LibFileUploader.prototype, "_isDragover", 2);
|
|
287
|
+
__decorateClass([
|
|
288
|
+
state()
|
|
289
|
+
], LibFileUploader.prototype, "_entries", 2);
|
|
89
290
|
__decorateClass([
|
|
90
291
|
state()
|
|
91
|
-
],
|
|
92
|
-
|
|
93
|
-
customElement("lib-
|
|
94
|
-
],
|
|
292
|
+
], LibFileUploader.prototype, "_imagePreviewUrl", 2);
|
|
293
|
+
LibFileUploader = __decorateClass([
|
|
294
|
+
customElement("lib-file-uploader")
|
|
295
|
+
], LibFileUploader);
|
|
95
296
|
export {
|
|
96
|
-
|
|
297
|
+
LibFileUploader
|
|
97
298
|
};
|
|
98
299
|
//# sourceMappingURL=index56.js.map
|
package/dist/index56.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index56.js","sources":["../src/components/molecules/input/lib-input.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\nimport inputStyles from './lib-input.css?inline';\nimport { inputTemplate } from './lib-input.html';\n\nexport interface LibInputEventDetail {\n value: string;\n}\n\n/**\n * @element lib-input\n * @fires ui-lib-input - Evento disparado al cambiar el valor del input.\n * @slot prefix - Icono o elemento antes del input.\n * @slot suffix - Icono o elemento después del input.\n */\n@customElement('lib-input')\nexport class LibInput extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(inputStyles)}`,\n ];\n\n @property({ type: String }) label = '';\n @property({ type: String }) placeholder = '';\n @property({ type: String }) type: 'text' | 'email' | 'password' = 'text';\n @property({ type: Boolean, reflect: true }) required = false;\n @property({ type: Boolean, reflect: true }) disabled = false;\n @property({ type: Boolean, reflect: true }) error = false;\n @property({ type: String }) errorMessage = '';\n @property({ type: String }) value = '';\n\n @state() private _showPassword = false;\n\n private readonly _uuid = `lib-input-${Math.random().toString(36).slice(2, 9)}`;\n\n override render(): TemplateResult {\n return inputTemplate({\n uuid: this._uuid,\n type: this.type,\n label: this.label,\n placeholder: this.placeholder,\n required: this.required,\n disabled: this.disabled,\n error: this.error,\n errorMessage: this.errorMessage,\n value: this.value,\n showPassword: this._showPassword,\n handleInput: this._handleInput.bind(this),\n handleTogglePassword: this._handleTogglePassword.bind(this),\n });\n }\n\n private _handleInput(e: InputEvent): void {\n const target = e.target as HTMLInputElement;\n this.value = target.value;\n\n this.dispatchEvent(\n new CustomEvent<LibInputEventDetail>('ui-lib-input', {\n detail: { value: this.value },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _handleTogglePassword(): void {\n this._showPassword = !this._showPassword;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-input': LibInput;\n }\n}"],"names":[],"mappings":";;;;;;;;;;;;;;;AAiBO,IAAM,WAAN,cAAuB,WAAW;AAAA,EAAlC,cAAA;AAAA,UAAA,GAAA,SAAA;AAMuB,SAAA,QAAQ;AACR,SAAA,cAAc;AACd,SAAA,OAAsC;AACtB,SAAA,WAAW;AACX,SAAA,WAAW;AACX,SAAA,QAAQ;AACxB,SAAA,eAAe;AACf,SAAA,QAAQ;AAE3B,SAAQ,gBAAgB;AAEjC,SAAiB,QAAQ,aAAa,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;AAAA,EAAA;AAAA,EAEnE,SAAyB;AAChC,WAAO,cAAc;AAAA,MACnB,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,OAAO,KAAK;AAAA,MACZ,aAAa,KAAK;AAAA,MAClB,UAAU,KAAK;AAAA,MACf,UAAU,KAAK;AAAA,MACf,OAAO,KAAK;AAAA,MACZ,cAAc,KAAK;AAAA,MACnB,OAAO,KAAK;AAAA,MACZ,cAAc,KAAK;AAAA,MACnB,aAAa,KAAK,aAAa,KAAK,IAAI;AAAA,MACxC,sBAAsB,KAAK,sBAAsB,KAAK,IAAI;AAAA,IAAA,CAC3D;AAAA,EACH;AAAA,EAEQ,aAAa,GAAqB;AACxC,UAAM,SAAS,EAAE;AACjB,SAAK,QAAQ,OAAO;AAEpB,SAAK;AAAA,MACH,IAAI,YAAiC,gBAAgB;AAAA,QACnD,QAAQ,EAAE,OAAO,KAAK,MAAA;AAAA,QACtB,SAAS;AAAA,QACT,UAAU;AAAA,MAAA,CACX;AAAA,IAAA;AAAA,EAEL;AAAA,EAEQ,wBAA8B;AACpC,SAAK,gBAAgB,CAAC,KAAK;AAAA,EAC7B;AACF;AApDa,SACK,SAAS;AAAA,EACvB,MAAM,UAAU,YAAY,CAAC;AAAA,EAC7B,MAAM,UAAU,WAAW,CAAC;AAC9B;AAE4B,gBAAA;AAAA,EAA3B,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GANf,SAMiB,WAAA,SAAA,CAAA;AACA,gBAAA;AAAA,EAA3B,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAPf,SAOiB,WAAA,eAAA,CAAA;AACA,gBAAA;AAAA,EAA3B,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GARf,SAQiB,WAAA,QAAA,CAAA;AACgB,gBAAA;AAAA,EAA3C,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GAT/B,SASiC,WAAA,YAAA,CAAA;AACA,gBAAA;AAAA,EAA3C,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GAV/B,SAUiC,WAAA,YAAA,CAAA;AACA,gBAAA;AAAA,EAA3C,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GAX/B,SAWiC,WAAA,SAAA,CAAA;AAChB,gBAAA;AAAA,EAA3B,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAZf,SAYiB,WAAA,gBAAA,CAAA;AACA,gBAAA;AAAA,EAA3B,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAbf,SAaiB,WAAA,SAAA,CAAA;AAEX,gBAAA;AAAA,EAAhB,MAAA;AAAM,GAfI,SAeM,WAAA,iBAAA,CAAA;AAfN,WAAN,gBAAA;AAAA,EADN,cAAc,WAAW;AAAA,GACb,QAAA;"}
|
|
1
|
+
{"version":3,"file":"index56.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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"}
|