@robosophy/ui-vue 1.0.16 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -27
- package/ai-context.md +1 -1
- package/components.md +17 -21
- package/dist/components/RsAccountSelector/RsAccountSelector.vue.d.ts +1 -1
- package/dist/components/RsIcon/RsIcon.vue.d.ts.map +1 -1
- package/dist/index.css +24 -107
- package/dist/index.js +36 -10
- package/dist/index.js.map +1 -1
- package/dist/plugin.d.ts +3 -3
- package/dist/vite.d.ts +1 -13
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +192 -179
- package/dist/vite.js.map +1 -1
- package/package.json +2 -8
package/README.md
CHANGED
|
@@ -145,7 +145,8 @@ createApp(App)
|
|
|
145
145
|
|
|
146
146
|
## Material Symbols
|
|
147
147
|
|
|
148
|
-
`RsIcon`
|
|
148
|
+
`RsIcon` renderiza iconos SVG inline. Combinalo con el plugin de Vite que descarga solo los SVGs
|
|
149
|
+
necesarios desde el repositorio oficial de Google y genera un sprite inyectado en el HTML:
|
|
149
150
|
|
|
150
151
|
```ts
|
|
151
152
|
// vite.config.ts
|
|
@@ -163,9 +164,10 @@ export default defineConfig({
|
|
|
163
164
|
|
|
164
165
|
El plugin escanea automaticamente usos de `<RsIcon name="..." />`, `rsPrimeIcon("...")` y
|
|
165
166
|
objetos con `icon: "..."` en el codigo fuente. No hace falta declarar iconos a mano.
|
|
166
|
-
En build
|
|
167
|
-
|
|
168
|
-
|
|
167
|
+
En build descarga los SVGs del CDN de GitHub, los cachea localmente y genera un sprite SVG
|
|
168
|
+
inline. No se cargan fuentes tipograficas.
|
|
169
|
+
|
|
170
|
+
El sprite incluye variantes para fill (outlined/filled) y grade (-25, 0, 200).
|
|
169
171
|
|
|
170
172
|
### Iconos dinamicos (opcional)
|
|
171
173
|
|
|
@@ -181,29 +183,7 @@ robosophyMaterialSymbols({
|
|
|
181
183
|
});
|
|
182
184
|
```
|
|
183
185
|
|
|
184
|
-
###
|
|
185
|
-
|
|
186
|
-
Por defecto el plugin emite fuentes y CSS en `assets/`. Se puede cambiar con `outputDir`:
|
|
187
|
-
|
|
188
|
-
```ts
|
|
189
|
-
robosophyMaterialSymbols({
|
|
190
|
-
outputDir: "fonts",
|
|
191
|
-
});
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
Esto produce `fonts/rs-material-symbols.css` y `fonts/rs-material-symbols-{family}-{hash}.woff2`
|
|
195
|
-
en el build, y ajusta los hrefs del preload y del stylesheet en el HTML.
|
|
196
|
-
|
|
197
|
-
### Estrategia de carga
|
|
198
|
-
|
|
199
|
-
Se puede ajustar la estrategia de carga si una app lo necesita:
|
|
200
|
-
|
|
201
|
-
```ts
|
|
202
|
-
robosophyMaterialSymbols({
|
|
203
|
-
fontDisplay: "optional",
|
|
204
|
-
preload: false,
|
|
205
|
-
});
|
|
206
|
-
```
|
|
186
|
+
### PrimeVue
|
|
207
187
|
|
|
208
188
|
Para APIs de PrimeVue que reciben `icon` como string, usa el helper:
|
|
209
189
|
|
|
@@ -212,6 +192,16 @@ Para APIs de PrimeVue que reciben `icon` como string, usa el helper:
|
|
|
212
192
|
<Button label="Configurar" :icon="rsPrimeIcon('settings', { family: 'rounded' })" />
|
|
213
193
|
```
|
|
214
194
|
|
|
195
|
+
Para control total sobre props (fill, grade, etc.), usa el slot `#icon`:
|
|
196
|
+
|
|
197
|
+
```vue
|
|
198
|
+
<Button label="Favorito">
|
|
199
|
+
<template #icon>
|
|
200
|
+
<RsIcon name="favorite" fill color="danger" />
|
|
201
|
+
</template>
|
|
202
|
+
</Button>
|
|
203
|
+
```
|
|
204
|
+
|
|
215
205
|
## Component Structure
|
|
216
206
|
|
|
217
207
|
Every public component must be self-contained:
|
package/ai-context.md
CHANGED
|
@@ -26,7 +26,7 @@ Use this package for shared Vue 3 UI components.
|
|
|
26
26
|
- Use `@robosophy/tokens` CSS variables for colors, typography, strokes, and component surfaces.
|
|
27
27
|
- Use PrimeVue only when it provides real behavior for that component; actions should use PrimeVue `Button` in PrimeVue apps.
|
|
28
28
|
- `RsSidebar` and `RsAccountSelector` use native PrimeVue controls for interactive UI; PrimeVue apps should register the Robosophy PrimeVue preset and load `@robosophy/prime-theme/prime.css` so Button/Menu states receive Robosophy styling.
|
|
29
|
-
- `RsIcon` needs `robosophyMaterialSymbols()` from `@robosophy/ui-vue/vite` in consuming Vite apps so builds
|
|
29
|
+
- `RsIcon` needs `robosophyMaterialSymbols()` from `@robosophy/ui-vue/vite` in consuming Vite apps so builds generate an SVG sprite with only the needed icons. The plugin auto-detects icon usage from source — no manual declaration needed for static patterns. Use `rsPrimeIcon()` for PrimeVue APIs that accept icon class strings. Add dynamic icons via `include`. For full control over icon props, use the `#icon` slot instead of `rsPrimeIcon()`.
|
|
30
30
|
- Use `RsSidebar` for reusable module navigation. `item-click` stays in the consuming app; the optional `modules` dropdown can redirect with the provided `link` when `navigateOnModuleSelect` is `true`.
|
|
31
31
|
- Keep props focused on stable component API. Use slots for flexible content.
|
|
32
32
|
- Export every public component and public type from `src/index.ts`.
|
package/components.md
CHANGED
|
@@ -49,7 +49,7 @@ Apps without PrimeVue should import:
|
|
|
49
49
|
import "@robosophy/tokens/tokens.css";
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
RsIcon uses SVG icons inline. Enable the Vite plugin to auto-detect icons and generate an SVG sprite:
|
|
53
53
|
|
|
54
54
|
```ts
|
|
55
55
|
import { robosophyMaterialSymbols } from "@robosophy/ui-vue/vite";
|
|
@@ -60,27 +60,14 @@ export default defineConfig({
|
|
|
60
60
|
```
|
|
61
61
|
|
|
62
62
|
El plugin escanea automaticamente `<RsIcon name="..." />`, `rsPrimeIcon("...")` y
|
|
63
|
-
`icon: "..."` en el codigo fuente.
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
### Directorio de salida
|
|
67
|
-
|
|
68
|
-
Por defecto las fuentes y el CSS se emiten en `assets/`. Se puede cambiar con `outputDir`:
|
|
69
|
-
|
|
70
|
-
```ts
|
|
71
|
-
robosophyMaterialSymbols({
|
|
72
|
-
outputDir: "fonts",
|
|
73
|
-
});
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
Esto produce `fonts/rs-material-symbols.css` y `fonts/rs-material-symbols-{family}-{hash}.woff2`
|
|
77
|
-
en el build, y ajusta los hrefs del preload y del stylesheet en el HTML.
|
|
63
|
+
`icon: "..."` en el codigo fuente. Descarga los SVGs del repositorio oficial de Google
|
|
64
|
+
durante el build, los cachea localmente y genera un sprite SVG inline. Sin fuentes
|
|
65
|
+
tipograficas.
|
|
78
66
|
|
|
79
67
|
## RsIcon
|
|
80
68
|
|
|
81
|
-
Use for Material Symbols. The Vite plugin generates
|
|
82
|
-
icons
|
|
83
|
-
ligature text flashing before the icon font is ready.
|
|
69
|
+
Use for Material Symbols. The Vite plugin generates an SVG sprite with only the detected
|
|
70
|
+
icons and inlines it in the HTML. No fonts are loaded.
|
|
84
71
|
|
|
85
72
|
```vue
|
|
86
73
|
<template>
|
|
@@ -91,8 +78,17 @@ ligature text flashing before the icon font is ready.
|
|
|
91
78
|
```
|
|
92
79
|
|
|
93
80
|
For dynamic icon names that the scanner cannot see, add them to
|
|
94
|
-
`robosophyMaterialSymbols({ include: [...] })`.
|
|
95
|
-
|
|
81
|
+
`robosophyMaterialSymbols({ include: [...] })`.
|
|
82
|
+
|
|
83
|
+
For full control over icon props (fill, grade, etc.), use the slot approach:
|
|
84
|
+
|
|
85
|
+
```vue
|
|
86
|
+
<Button label="Favorito">
|
|
87
|
+
<template #icon>
|
|
88
|
+
<RsIcon name="favorite" fill color="danger" />
|
|
89
|
+
</template>
|
|
90
|
+
</Button>
|
|
91
|
+
```
|
|
96
92
|
|
|
97
93
|
## RsSidebar
|
|
98
94
|
|
|
@@ -42,6 +42,7 @@ declare const __VLS_base: import("vue").DefineComponent<RsAccountSelectorProps,
|
|
|
42
42
|
onOpen?: (() => any) | undefined;
|
|
43
43
|
onClose?: (() => any) | undefined;
|
|
44
44
|
}>, {
|
|
45
|
+
width: string;
|
|
45
46
|
accounts: RsAccountSelectorAccount[];
|
|
46
47
|
actions: RsAccountSelectorAction[];
|
|
47
48
|
footerActions: RsAccountSelectorAction[];
|
|
@@ -51,7 +52,6 @@ declare const __VLS_base: import("vue").DefineComponent<RsAccountSelectorProps,
|
|
|
51
52
|
activeText: string;
|
|
52
53
|
selectText: string;
|
|
53
54
|
triggerAriaLabel: string;
|
|
54
|
-
width: string;
|
|
55
55
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
56
56
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
57
57
|
declare const _default: typeof __VLS_export;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RsIcon.vue.d.ts","sourceRoot":"","sources":["../../../src/components/RsIcon/RsIcon.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RsIcon.vue.d.ts","sourceRoot":"","sources":["../../../src/components/RsIcon/RsIcon.vue"],"names":[],"mappings":"AA2FA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAmHlD,QAAA,MAAM,YAAY;;;;;;;;6EAGhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
|
package/dist/index.css
CHANGED
|
@@ -1,156 +1,73 @@
|
|
|
1
1
|
.rs-icon {
|
|
2
|
-
--rs-icon-color: currentColor;
|
|
3
|
-
--rs-icon-fill: 0;
|
|
4
|
-
--rs-icon-grade: 0;
|
|
5
|
-
--rs-icon-optical-size: 24;
|
|
6
|
-
--rs-icon-size: 24px;
|
|
7
|
-
--rs-icon-weight: 400;
|
|
8
|
-
|
|
9
2
|
align-items: center;
|
|
10
|
-
color: var(--rs-icon-color);
|
|
3
|
+
color: var(--rs-icon-color, currentColor);
|
|
11
4
|
display: inline-flex;
|
|
12
5
|
flex: 0 0 auto;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
font-style: normal;
|
|
16
|
-
font-feature-settings: "liga";
|
|
17
|
-
font-variation-settings:
|
|
18
|
-
"FILL" var(--rs-icon-fill),
|
|
19
|
-
"wght" var(--rs-icon-weight),
|
|
20
|
-
"GRAD" var(--rs-icon-grade),
|
|
21
|
-
"opsz" var(--rs-icon-optical-size);
|
|
22
|
-
font-weight: 400;
|
|
23
|
-
-webkit-font-feature-settings: "liga";
|
|
6
|
+
flex-shrink: 0;
|
|
7
|
+
height: var(--rs-icon-size, 24px);
|
|
24
8
|
justify-content: center;
|
|
25
|
-
direction: ltr;
|
|
26
|
-
letter-spacing: normal;
|
|
27
|
-
line-height: 1;
|
|
28
|
-
text-transform: none;
|
|
29
9
|
user-select: none;
|
|
30
|
-
|
|
31
|
-
word-wrap: normal;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
.rs-icon--sm {
|
|
35
|
-
--rs-icon-optical-size: 20;
|
|
36
|
-
--rs-icon-size: 18px;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
.rs-icon--md {
|
|
40
|
-
--rs-icon-optical-size: 24;
|
|
41
|
-
--rs-icon-size: 24px;
|
|
10
|
+
width: var(--rs-icon-size, 24px);
|
|
42
11
|
}
|
|
43
12
|
|
|
44
|
-
.rs-icon--
|
|
45
|
-
|
|
46
|
-
--rs-icon-size: 32px;
|
|
13
|
+
.rs-icon--interactive {
|
|
14
|
+
cursor: pointer;
|
|
47
15
|
}
|
|
48
16
|
|
|
49
17
|
.rs-icon--primary {
|
|
50
|
-
|
|
18
|
+
color: var(--rs-color-icon-primary, #48a0d4);
|
|
51
19
|
}
|
|
52
20
|
|
|
53
21
|
.rs-icon--secondary {
|
|
54
|
-
|
|
22
|
+
color: var(--rs-color-icon-secondary, #000000);
|
|
55
23
|
}
|
|
56
24
|
|
|
57
25
|
.rs-icon--success {
|
|
58
|
-
|
|
26
|
+
color: var(--rs-color-icon-success, #4EAE01);
|
|
59
27
|
}
|
|
60
28
|
|
|
61
29
|
.rs-icon--warning {
|
|
62
|
-
|
|
30
|
+
color: var(--rs-color-icon-warning, #FF9001);
|
|
63
31
|
}
|
|
64
32
|
|
|
65
33
|
.rs-icon--danger {
|
|
66
|
-
|
|
34
|
+
color: var(--rs-color-icon-danger, #d80115);
|
|
67
35
|
}
|
|
68
36
|
|
|
69
37
|
.rs-icon--inherit {
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
.rs-icon--rounded {
|
|
74
|
-
font-family: "Material Symbols Rounded Variable";
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
.rs-icon--sharp {
|
|
78
|
-
font-family: "Material Symbols Sharp Variable";
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
.rs-icon--interactive {
|
|
82
|
-
cursor: pointer;
|
|
38
|
+
color: currentColor;
|
|
83
39
|
}
|
|
84
40
|
.rs-icon {
|
|
85
|
-
--rs-icon-color: currentColor;
|
|
86
|
-
--rs-icon-fill: 0;
|
|
87
|
-
--rs-icon-grade: 0;
|
|
88
|
-
--rs-icon-optical-size: 24;
|
|
89
|
-
--rs-icon-size: 24px;
|
|
90
|
-
--rs-icon-weight: 400;
|
|
91
|
-
|
|
92
41
|
align-items: center;
|
|
93
|
-
color: var(--rs-icon-color);
|
|
42
|
+
color: var(--rs-icon-color, currentColor);
|
|
94
43
|
display: inline-flex;
|
|
95
44
|
flex: 0 0 auto;
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
font-style: normal;
|
|
99
|
-
font-feature-settings: "liga";
|
|
100
|
-
font-variation-settings:
|
|
101
|
-
"FILL" var(--rs-icon-fill),
|
|
102
|
-
"wght" var(--rs-icon-weight),
|
|
103
|
-
"GRAD" var(--rs-icon-grade),
|
|
104
|
-
"opsz" var(--rs-icon-optical-size);
|
|
105
|
-
font-weight: 400;
|
|
106
|
-
-webkit-font-feature-settings: "liga";
|
|
45
|
+
flex-shrink: 0;
|
|
46
|
+
height: var(--rs-icon-size, 24px);
|
|
107
47
|
justify-content: center;
|
|
108
|
-
direction: ltr;
|
|
109
|
-
letter-spacing: normal;
|
|
110
|
-
line-height: 1;
|
|
111
|
-
text-transform: none;
|
|
112
48
|
user-select: none;
|
|
113
|
-
|
|
114
|
-
word-wrap: normal;
|
|
115
|
-
}
|
|
116
|
-
.rs-icon--sm {
|
|
117
|
-
--rs-icon-optical-size: 20;
|
|
118
|
-
--rs-icon-size: 18px;
|
|
119
|
-
}
|
|
120
|
-
.rs-icon--md {
|
|
121
|
-
--rs-icon-optical-size: 24;
|
|
122
|
-
--rs-icon-size: 24px;
|
|
49
|
+
width: var(--rs-icon-size, 24px);
|
|
123
50
|
}
|
|
124
|
-
.rs-icon--
|
|
125
|
-
|
|
126
|
-
--rs-icon-size: 32px;
|
|
51
|
+
.rs-icon--interactive {
|
|
52
|
+
cursor: pointer;
|
|
127
53
|
}
|
|
128
54
|
.rs-icon--primary {
|
|
129
|
-
|
|
55
|
+
color: var(--rs-color-icon-primary, #48a0d4);
|
|
130
56
|
}
|
|
131
57
|
.rs-icon--secondary {
|
|
132
|
-
|
|
58
|
+
color: var(--rs-color-icon-secondary, #000000);
|
|
133
59
|
}
|
|
134
60
|
.rs-icon--success {
|
|
135
|
-
|
|
61
|
+
color: var(--rs-color-icon-success, #4EAE01);
|
|
136
62
|
}
|
|
137
63
|
.rs-icon--warning {
|
|
138
|
-
|
|
64
|
+
color: var(--rs-color-icon-warning, #FF9001);
|
|
139
65
|
}
|
|
140
66
|
.rs-icon--danger {
|
|
141
|
-
|
|
67
|
+
color: var(--rs-color-icon-danger, #d80115);
|
|
142
68
|
}
|
|
143
69
|
.rs-icon--inherit {
|
|
144
|
-
|
|
145
|
-
}
|
|
146
|
-
.rs-icon--rounded {
|
|
147
|
-
font-family: "Material Symbols Rounded Variable";
|
|
148
|
-
}
|
|
149
|
-
.rs-icon--sharp {
|
|
150
|
-
font-family: "Material Symbols Sharp Variable";
|
|
151
|
-
}
|
|
152
|
-
.rs-icon--interactive {
|
|
153
|
-
cursor: pointer;
|
|
70
|
+
color: currentColor;
|
|
154
71
|
}
|
|
155
72
|
.rs-account-selector-host {
|
|
156
73
|
--rs-account-selector-width: 270px;
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
// AUTO-GENERATED FILE. DO NOT EDIT MANUALLY.
|
|
2
2
|
import "./index.css";
|
|
3
|
-
import { defineComponent, computed, openBlock, createElementBlock, normalizeStyle, normalizeClass,
|
|
3
|
+
import { defineComponent, computed, openBlock, createElementBlock, normalizeStyle, normalizeClass, createElementVNode, ref, onMounted, onBeforeUnmount, watch, nextTick, createVNode, unref, withModifiers, withCtx, renderSlot, toDisplayString, createBlock, Teleport, createCommentVNode, Fragment, renderList, mergeProps, createTextVNode } from "vue";
|
|
4
4
|
import Button from "primevue/button";
|
|
5
5
|
import Menu from "primevue/menu";
|
|
6
|
-
const _hoisted_1$2 = ["aria-hidden", "aria-label", "role"];
|
|
6
|
+
const _hoisted_1$2 = ["aria-hidden", "aria-label", "role", "width", "height"];
|
|
7
|
+
const _hoisted_2$2 = ["href"];
|
|
7
8
|
const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
8
9
|
...{
|
|
9
10
|
name: "RsIcon"
|
|
@@ -22,7 +23,30 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
|
22
23
|
ariaLabel: {}
|
|
23
24
|
},
|
|
24
25
|
setup(__props) {
|
|
26
|
+
const GRADE_VALUES = [200, 0, -25];
|
|
25
27
|
const props = __props;
|
|
28
|
+
function clampGrade(grade) {
|
|
29
|
+
return GRADE_VALUES.reduce(
|
|
30
|
+
(nearest, g) => Math.abs(g - grade) < Math.abs(nearest - grade) ? g : nearest
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
const symbolHref = computed(() => {
|
|
34
|
+
const family = props.family;
|
|
35
|
+
const name = props.name;
|
|
36
|
+
let gradeSuffix = "";
|
|
37
|
+
const clamped = clampGrade(props.grade);
|
|
38
|
+
if (clamped !== 0) {
|
|
39
|
+
gradeSuffix = clamped > 0 ? `-grad${clamped}` : `-gradN${Math.abs(clamped)}`;
|
|
40
|
+
}
|
|
41
|
+
const fillSuffix = props.fill ? "-fill" : "";
|
|
42
|
+
return `#rs-icon-${family}-${name}${gradeSuffix}${fillSuffix}`;
|
|
43
|
+
});
|
|
44
|
+
const iconSize = computed(() => {
|
|
45
|
+
if (typeof props.size === "number") return props.size;
|
|
46
|
+
if (props.size === "sm") return 18;
|
|
47
|
+
if (props.size === "lg") return 32;
|
|
48
|
+
return 24;
|
|
49
|
+
});
|
|
26
50
|
const rootClass = computed(() => [
|
|
27
51
|
"rs-icon",
|
|
28
52
|
`rs-icon--${props.family}`,
|
|
@@ -35,22 +59,24 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
|
35
59
|
}
|
|
36
60
|
]);
|
|
37
61
|
const rootStyle = computed(() => ({
|
|
38
|
-
"--rs-icon-
|
|
39
|
-
"--rs-icon-
|
|
40
|
-
"--rs-icon-optical-size": props.opticalSize,
|
|
41
|
-
"--rs-icon-size": typeof props.size === "number" ? `${props.size}px` : void 0,
|
|
42
|
-
"--rs-icon-weight": props.weight
|
|
62
|
+
"--rs-icon-color": void 0,
|
|
63
|
+
"--rs-icon-size": `${iconSize.value}px`
|
|
43
64
|
}));
|
|
44
65
|
const ariaHidden = computed(() => props.ariaLabel ? void 0 : "true");
|
|
45
66
|
const role = computed(() => props.ariaLabel ? "img" : void 0);
|
|
46
67
|
return (_ctx, _cache) => {
|
|
47
|
-
return openBlock(), createElementBlock("
|
|
68
|
+
return openBlock(), createElementBlock("svg", {
|
|
48
69
|
"aria-hidden": ariaHidden.value,
|
|
49
70
|
"aria-label": __props.ariaLabel,
|
|
50
71
|
class: normalizeClass(rootClass.value),
|
|
51
72
|
role: role.value,
|
|
52
|
-
style: normalizeStyle(rootStyle.value)
|
|
53
|
-
|
|
73
|
+
style: normalizeStyle(rootStyle.value),
|
|
74
|
+
width: iconSize.value,
|
|
75
|
+
height: iconSize.value,
|
|
76
|
+
fill: "currentColor"
|
|
77
|
+
}, [
|
|
78
|
+
createElementVNode("use", { href: symbolHref.value }, null, 8, _hoisted_2$2)
|
|
79
|
+
], 14, _hoisted_1$2);
|
|
54
80
|
};
|
|
55
81
|
}
|
|
56
82
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/components/RsIcon/RsIcon.vue","../src/components/RsIcon/index.ts","../src/components/RsAccountSelector/RsAccountSelector.vue","../src/components/RsSidebar/RsSidebar.vue","../src/plugin.ts"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nimport type { RsIconProps } from \"./RsIcon.types\";\n\ndefineOptions({\n name: \"RsIcon\",\n});\n\nconst props = withDefaults(defineProps<RsIconProps>(), {\n color: \"inherit\",\n family: \"outlined\",\n fill: false,\n grade: 0,\n interactive: false,\n size: \"md\",\n weight: 400,\n});\n\nconst rootClass = computed(() => [\n \"rs-icon\",\n `rs-icon--${props.family}`,\n `rs-icon--${props.color}`,\n {\n \"rs-icon--interactive\": props.interactive,\n \"rs-icon--sm\": props.size === \"sm\",\n \"rs-icon--md\": props.size === \"md\",\n \"rs-icon--lg\": props.size === \"lg\",\n },\n]);\n\nconst rootStyle = computed(() => ({\n \"--rs-icon-fill\": props.fill ? 1 : 0,\n \"--rs-icon-grade\": props.grade,\n \"--rs-icon-optical-size\": props.opticalSize,\n \"--rs-icon-size\": typeof props.size === \"number\" ? `${props.size}px` : undefined,\n \"--rs-icon-weight\": props.weight,\n}));\n\nconst ariaHidden = computed(() => (props.ariaLabel ? undefined : \"true\"));\nconst role = computed(() => (props.ariaLabel ? \"img\" : undefined));\n</script>\n\n<template>\n <span\n :aria-hidden=\"ariaHidden\"\n :aria-label=\"ariaLabel\"\n :class=\"rootClass\"\n :role=\"role\"\n :style=\"rootStyle\"\n >\n {{ name }}\n </span>\n</template>\n\n<style src=\"./RsIcon.css\"></style>\n","import \"./RsIcon.css\";\n\nimport type { RsIconFamily, RsPrimeIconOptions } from \"./RsIcon.types\";\n\nconst iconNamePattern = /^[a-z0-9_]+$/;\n\nexport function rsPrimeIcon(name: string, options: RsPrimeIconOptions = {}) {\n const family: RsIconFamily = options.family ?? \"outlined\";\n const normalizedName = name.trim();\n\n if (!iconNamePattern.test(normalizedName)) {\n throw new Error(`Invalid Material Symbols icon name: \"${name}\"`);\n }\n\n return `rs-icon rs-icon--prime rs-icon--${family} rs-icon-${normalizedName}`;\n}\n\nexport { default } from \"./RsIcon.vue\";\nexport type {\n RsIconColor,\n RsIconFamily,\n RsIconProps,\n RsIconSize,\n RsIconWeight,\n RsPrimeIconOptions,\n} from \"./RsIcon.types\";\n","<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from \"vue\";\nimport Button from \"primevue/button\";\n\nimport RsIcon from \"../RsIcon\";\nimport type {\n RsAccountSelectorAccount,\n RsAccountSelectorAction,\n RsAccountSelectorProps,\n} from \"./RsAccountSelector.types\";\n\ndefineOptions({\n name: \"RsAccountSelector\",\n});\n\nconst props = withDefaults(defineProps<RsAccountSelectorProps>(), {\n accounts: () => [],\n actions: () => [],\n activeText: \"Activo en pantalla\",\n emptyText: \"No hay cuentas disponibles\",\n footerActions: () => [],\n loading: false,\n modelValue: null,\n selectText: \"Ingresar\",\n triggerAriaLabel: \"Abrir selector de cuenta\",\n width: \"270px\",\n});\n\nconst emit = defineEmits<{\n \"select-account\": [account: RsAccountSelectorAccount];\n action: [action: RsAccountSelectorAction];\n \"footer-action\": [action: RsAccountSelectorAction];\n \"update:modelValue\": [open: boolean];\n open: [];\n close: [];\n}>();\n\nconst rootRef = ref<HTMLElement | null>(null);\nconst panelRef = ref<HTMLElement | null>(null);\nconst internalOpen = ref(false);\n\nconst panelCSSVars = {\n \"--rs-account-selector-width\": props.width,\n \"--rs-account-selector-background\": \"var(--rs-color-surface-primary, #ffffff)\",\n \"--rs-account-selector-border\": \"var(--rs-color-stroke-default, #d1d1d1)\",\n \"--rs-account-selector-color\": \"var(--rs-color-text-primary, #000000)\",\n \"--rs-account-selector-muted\": \"var(--rs-color-text-secondary, #909090)\",\n \"--rs-account-selector-active\": \"var(--rs-color-text-brand-green, #4eae01)\",\n \"--rs-account-selector-danger\": \"var(--rs-color-text-brand-red, #d80115)\",\n};\n\nconst panelPosition = ref<Record<string, string>>({});\n\nlet scrollRAF: number | null = null;\n\nconst isControlled = computed(() => props.modelValue !== null);\nconst isOpen = computed(() =>\n isControlled.value ? Boolean(props.modelValue) : internalOpen.value,\n);\nconst rootStyle = computed(() => ({\n \"--rs-account-selector-width\": props.width,\n}));\n\nconst computedTitle = computed(() => {\n if (props.title) {\n return props.title;\n }\n\n return props.accounts.length > 1\n ? `Acceso a ${props.accounts.length} Cuentas`\n : \"Acceso a\";\n});\n\nconst visibleActions = computed(() =>\n props.actions.filter((action) => action.visible !== false),\n);\nconst visibleFooterActions = computed(() =>\n props.footerActions.filter((action) => action.visible !== false),\n);\nconst shouldShowAccounts = computed(() => props.accounts.length > 1);\nconst profileAction: RsAccountSelectorAction = {\n id: \"profile\",\n label: \"Ver mi perfil\",\n};\n\nfunction headerButtonProps(action: RsAccountSelectorAction) {\n return action.variant === \"danger\"\n ? { severity: \"danger\" as const, outlined: true, rounded: true }\n : { severity: \"secondary\" as const, outlined: true, rounded: true };\n}\n\nfunction footerButtonProps(action: RsAccountSelectorAction) {\n return action.variant === \"danger\"\n ? { severity: \"danger\" as const, text: true }\n : { severity: \"secondary\" as const, text: true };\n}\n\nfunction emitAction(action: RsAccountSelectorAction) {\n if (!action.disabled) {\n emit(\"action\", action);\n closeSelector();\n }\n}\n\nfunction emitFooterAction(action: RsAccountSelectorAction) {\n if (!action.disabled) {\n emit(\"footer-action\", action);\n closeSelector();\n }\n}\n\nfunction selectAccount(account: RsAccountSelectorAccount) {\n if (!account.active && !account.disabled) {\n emit(\"select-account\", account);\n closeSelector();\n }\n}\n\nfunction getInitials(initials?: string) {\n return (initials?.trim() || \"?\").slice(0, 3);\n}\n\nfunction setOpen(nextOpen: boolean) {\n if (!isControlled.value) {\n internalOpen.value = nextOpen;\n }\n\n emit(\"update:modelValue\", nextOpen);\n\n if (nextOpen) {\n emit(\"open\");\n } else {\n emit(\"close\");\n }\n}\n\nfunction toggleSelector() {\n setOpen(!isOpen.value);\n}\n\nfunction closeSelector() {\n if (isOpen.value) {\n setOpen(false);\n }\n}\n\nfunction updatePanelPosition() {\n const root = rootRef.value;\n const panel = panelRef.value;\n\n if (!root || !panel) {\n return;\n }\n\n const viewportWidth = window.innerWidth;\n const viewportPadding = 16;\n const rootRect = root.getBoundingClientRect();\n const panelRect = panel.getBoundingClientRect();\n const fitsRight = rootRect.left + panelRect.width <= viewportWidth - viewportPadding;\n const fitsLeft = rootRect.right - panelRect.width >= viewportPadding;\n\n let left: number;\n if (fitsRight) {\n left = rootRect.left;\n } else if (fitsLeft) {\n left = rootRect.right - panelRect.width;\n } else {\n left = Math.max(\n viewportPadding,\n Math.min(rootRect.left, viewportWidth - viewportPadding - panelRect.width),\n );\n }\n\n panelPosition.value = {\n position: \"fixed\",\n top: `${rootRect.bottom + 8}px`,\n left: `${left}px`,\n };\n}\n\nfunction handleWindowResize() {\n if (isOpen.value) {\n void updatePanelPosition();\n }\n}\n\nfunction handleScroll() {\n if (isOpen.value) {\n if (scrollRAF === null) {\n scrollRAF = window.requestAnimationFrame(() => {\n scrollRAF = null;\n void updatePanelPosition();\n });\n }\n }\n}\n\nfunction handleDocumentPointerDown(event: PointerEvent) {\n const target = event.target;\n\n if (\n target instanceof Node &&\n rootRef.value &&\n !rootRef.value.contains(target) &&\n !panelRef.value?.contains(target)\n ) {\n closeSelector();\n }\n}\n\nonMounted(() => {\n document.addEventListener(\"pointerdown\", handleDocumentPointerDown);\n window.addEventListener(\"resize\", handleWindowResize);\n window.addEventListener(\"scroll\", handleScroll, { passive: true });\n\n if (isOpen.value) {\n void updatePanelPosition();\n }\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener(\"pointerdown\", handleDocumentPointerDown);\n window.removeEventListener(\"resize\", handleWindowResize);\n window.removeEventListener(\"scroll\", handleScroll);\n\n if (scrollRAF !== null) {\n cancelAnimationFrame(scrollRAF);\n }\n});\n\nwatch(isOpen, (open) => {\n if (open) {\n void nextTick().then(updatePanelPosition);\n }\n});\n</script>\n\n<template>\n <div ref=\"rootRef\" class=\"rs-account-selector-host\" :style=\"rootStyle\">\n <Button\n :aria-expanded=\"isOpen\"\n :aria-label=\"triggerAriaLabel\"\n aria-haspopup=\"menu\"\n :class=\"[\n 'rs-account-selector__trigger',\n { 'rs-account-selector__trigger--open': isOpen },\n ]\"\n text\n @click.stop=\"toggleSelector\"\n >\n <RsIcon\n class=\"rs-account-selector__trigger-chevron\"\n family=\"rounded\"\n name=\"arrow_drop_down\"\n :size=\"22\"\n />\n <slot name=\"trigger-avatar\" :user=\"user\">\n <span class=\"rs-account-selector__trigger-avatar\">\n <img\n v-if=\"user.avatarSrc\"\n class=\"rs-account-selector__avatar-image\"\n :src=\"user.avatarSrc\"\n :alt=\"user.name || user.email\"\n />\n <span\n v-else\n class=\"rs-account-selector__avatar-placeholder\"\n aria-hidden=\"true\"\n >\n {{ getInitials(user.initials) }}\n </span>\n </span>\n </slot>\n </Button>\n\n <Teleport to=\"body\" v-if=\"isOpen\">\n <section\n ref=\"panelRef\"\n :aria-busy=\"loading || undefined\"\n class=\"rs-account-selector\"\n :style=\"[panelCSSVars, panelPosition]\"\n >\n <header class=\"rs-account-selector__summary\">\n <slot name=\"user-avatar\" :user=\"user\">\n <span class=\"rs-account-selector__avatar-stack\">\n <span\n class=\"rs-account-selector__avatar rs-account-selector__avatar--lg\"\n >\n <img\n v-if=\"user.avatarSrc\"\n class=\"rs-account-selector__avatar-image\"\n :src=\"user.avatarSrc\"\n :alt=\"user.name || user.email\"\n />\n <span\n v-else\n class=\"rs-account-selector__avatar-placeholder\"\n aria-hidden=\"true\"\n >\n {{ getInitials(user.initials) }}\n </span>\n </span>\n <span\n v-if=\"user.secondaryAvatarSrc\"\n class=\"rs-account-selector__avatar rs-account-selector__avatar--lg rs-account-selector__secondary-avatar\"\n >\n <img\n class=\"rs-account-selector__avatar-image\"\n :src=\"user.secondaryAvatarSrc\"\n :alt=\"user.name || user.email\"\n />\n </span>\n </span>\n </slot>\n\n <div class=\"rs-account-selector__user\">\n <p class=\"rs-account-selector__title\">{{ computedTitle }}</p>\n <p v-if=\"user.name\" class=\"rs-account-selector__name\">\n {{ user.name }}\n </p>\n <p class=\"rs-account-selector__email\">{{ user.email }}</p>\n </div>\n\n <slot name=\"actions\" :actions=\"visibleActions\">\n <div class=\"rs-account-selector__actions\">\n <template v-if=\"visibleActions.length > 0\">\n <Button\n v-for=\"action in visibleActions\"\n :key=\"action.id\"\n class=\"rs-account-selector__button\"\n :disabled=\"action.disabled\"\n size=\"small\"\n v-bind=\"headerButtonProps(action)\"\n @click.stop=\"emitAction(action)\"\n >\n <span>{{ action.label }}</span>\n <RsIcon v-if=\"action.icon\" :name=\"action.icon\" size=\"sm\" />\n </Button>\n </template>\n <Button\n v-else\n class=\"rs-account-selector__button rs-account-selector__profile-button\"\n severity=\"secondary\"\n outlined\n rounded\n size=\"small\"\n @click.stop=\"emitAction(profileAction)\"\n >\n Ver mi perfil\n </Button>\n </div>\n </slot>\n </header>\n\n <p v-if=\"loading\" class=\"rs-account-selector__state\">\n Cargando cuentas...\n </p>\n\n <slot v-else-if=\"accounts.length === 0\" name=\"empty\">\n <p class=\"rs-account-selector__state\">{{ emptyText }}</p>\n </slot>\n\n <div v-else-if=\"shouldShowAccounts\" class=\"rs-account-selector__accounts\">\n <Button\n v-for=\"account in accounts\"\n :key=\"account.id\"\n :class=\"[\n 'rs-account-selector__account',\n {\n 'rs-account-selector__account--active': account.active,\n 'rs-account-selector__account--disabled': account.disabled,\n },\n ]\"\n :disabled=\"account.active || account.disabled\"\n text\n severity=\"secondary\"\n @click.stop=\"selectAccount(account)\"\n >\n <slot name=\"account-avatar\" :account=\"account\">\n <span\n class=\"rs-account-selector__avatar rs-account-selector__avatar--sm rs-account-selector__account-avatar\"\n >\n <img\n v-if=\"account.avatarSrc\"\n class=\"rs-account-selector__avatar-image\"\n :src=\"account.avatarSrc\"\n :alt=\"account.label\"\n />\n <span\n v-else\n class=\"rs-account-selector__avatar-placeholder\"\n aria-hidden=\"true\"\n >\n {{ getInitials(account.initials) }}\n </span>\n </span>\n </slot>\n\n <span class=\"rs-account-selector__account-info\">\n <span class=\"rs-account-selector__account-label\">{{\n account.label\n }}</span>\n <span\n :class=\"[\n 'rs-account-selector__account-state',\n account.active\n ? 'rs-account-selector__account-state--active'\n : 'rs-account-selector__account-state--inactive',\n ]\"\n >\n {{ account.active ? activeText : selectText }}\n </span>\n </span>\n\n <span class=\"rs-account-selector__account-trailing\">\n <slot name=\"account-trailing\" :account=\"account\">\n <RsIcon name=\"login\" />\n </slot>\n </span>\n </Button>\n </div>\n\n <slot name=\"footer\" :actions=\"visibleFooterActions\">\n <footer\n v-if=\"visibleFooterActions.length > 0\"\n class=\"rs-account-selector__footer\"\n >\n <Button\n v-for=\"action in visibleFooterActions\"\n :key=\"action.id\"\n class=\"rs-account-selector__button\"\n :disabled=\"action.disabled\"\n size=\"small\"\n v-bind=\"footerButtonProps(action)\"\n @click.stop=\"emitFooterAction(action)\"\n >\n <span class=\"rs-account-selector__button-content\">\n <span>{{ action.label }}</span>\n <RsIcon v-if=\"action.icon\" :name=\"action.icon\" size=\"sm\" />\n </span>\n </Button>\n </footer>\n </slot>\n </section>\n </Teleport>\n </div>\n</template>\n\n<style src=\"./RsAccountSelector.css\"></style>\n","<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, ref, watch } from \"vue\";\nimport Menu from \"primevue/menu\";\nimport type { MenuItem } from \"primevue/menuitem\";\n\nimport RsIcon from \"../RsIcon\";\nimport type { RsSidebarItem, RsSidebarModule, RsSidebarProps } from \"./RsSidebar.types\";\n\ndefineOptions({\n name: \"RsSidebar\",\n});\n\nconst props = withDefaults(defineProps<RsSidebarProps>(), {\n ariaLabel: \"Navegacion principal\",\n expandOnHover: true,\n expanded: false,\n footerItems: () => [],\n icon: \"nest_eco_leaf\",\n mobileOpen: false,\n modules: () => [],\n navigateOnModuleSelect: false,\n title: \"\",\n variant: \"cyo\",\n});\n\nconst emit = defineEmits<{\n \"item-click\": [item: RsSidebarItem];\n \"close-mobile\": [];\n \"expanded-change\": [expanded: boolean];\n \"module-select\": [module: RsSidebarModule];\n}>();\n\nconst isHovered = ref(false);\nconst activeParent = ref<RsSidebarItem | null>(null);\nconst isModuleMenuOpen = ref(false);\nconst rootElement = ref<HTMLElement | null>(null);\n\nconst visibleItems = computed(() => props.items.filter(isVisible));\nconst visibleFooterItems = computed(() => props.footerItems.filter(isVisible));\nconst visibleModules = computed(() => props.modules);\nconst activeModule = computed(\n () =>\n props.modules.find((module) => module.active) ??\n props.modules.find((module) => module.text === props.title) ??\n props.modules[0] ??\n null,\n);\nconst displayedHeaderTitle = computed(() => activeParent.value?.label || activeModule.value?.text || props.title);\nconst moduleMenuItems = computed<MenuItem[]>(() =>\n visibleModules.value.map((module) => ({\n class: [\n \"rs-sidebar__module-option\",\n {\n \"rs-sidebar__module-option--active\": module.active || module.text === displayedHeaderTitle.value,\n \"rs-sidebar__module-option--disabled\": module.disabled,\n },\n ],\n command: () => selectModule(module),\n disabled: module.disabled,\n label: module.text,\n })),\n);\n\nconst displayedItems = computed(() =>\n activeParent.value ? activeParent.value.children?.filter(isVisible) ?? [] : visibleItems.value,\n);\n\nconst isExpanded = computed(() => props.expanded || props.mobileOpen || isHovered.value);\nconst hasHeaderAction = computed(() => props.mobileOpen || !!activeParent.value);\nconst hasModuleSelector = computed(() => !activeParent.value && props.modules.length > 0);\n\nconst rootClass = computed(() => [\n \"rs-sidebar\",\n `rs-sidebar--${props.variant}`,\n {\n \"rs-sidebar--expanded\": isExpanded.value,\n \"rs-sidebar--mobile-open\": props.mobileOpen,\n \"rs-sidebar--submenu\": !!activeParent.value,\n },\n]);\n\nwatch(\n () => props.mobileOpen,\n (isOpen) => {\n if (!isOpen) {\n activeParent.value = null;\n }\n\n isModuleMenuOpen.value = false;\n },\n);\n\nwatch(isExpanded, (expanded) => {\n if (!expanded) {\n activeParent.value = null;\n }\n\n emit(\"expanded-change\", expanded);\n});\n\nwatch(\n () => activeParent.value,\n () => {\n isModuleMenuOpen.value = false;\n },\n);\n\nonMounted(() => {\n document.addEventListener(\"pointerdown\", handleDocumentPointerDown);\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener(\"pointerdown\", handleDocumentPointerDown);\n});\n\nfunction isVisible(item: RsSidebarItem) {\n return item.visible !== false;\n}\n\nfunction hasVisibleChildren(item: RsSidebarItem) {\n return (item.children ?? []).some(isVisible);\n}\n\nfunction setHovered(value: boolean) {\n if (!props.expandOnHover || props.mobileOpen) {\n return;\n }\n\n isHovered.value = value;\n if (!value) {\n isModuleMenuOpen.value = false;\n }\n}\n\nfunction handleItemClick(item: RsSidebarItem) {\n if (item.disabled) {\n return;\n }\n\n if (hasVisibleChildren(item)) {\n activeParent.value = item;\n return;\n }\n\n emit(\"item-click\", item);\n}\n\nfunction goBack() {\n activeParent.value = null;\n}\n\nfunction closeMobile() {\n activeParent.value = null;\n isModuleMenuOpen.value = false;\n emit(\"close-mobile\");\n}\n\nfunction toggleModuleMenu() {\n if (!hasModuleSelector.value || !isExpanded.value) {\n return;\n }\n\n isModuleMenuOpen.value = !isModuleMenuOpen.value;\n}\n\nfunction selectModule(module: RsSidebarModule) {\n if (module.disabled) {\n return;\n }\n\n isModuleMenuOpen.value = false;\n emit(\"module-select\", module);\n\n if (props.navigateOnModuleSelect && typeof window !== \"undefined\" && module.link) {\n window.location.href = module.link;\n }\n}\n\nfunction handleDocumentPointerDown(event: PointerEvent) {\n if (!isModuleMenuOpen.value || !rootElement.value) {\n return;\n }\n\n if (!rootElement.value.contains(event.target as Node)) {\n isModuleMenuOpen.value = false;\n }\n}\n</script>\n\n<template>\n <aside\n ref=\"rootElement\"\n :aria-label=\"ariaLabel\"\n :class=\"rootClass\"\n @mouseenter=\"setHovered(true)\"\n @mouseleave=\"setHovered(false)\"\n >\n <slot\n name=\"header\"\n :expanded=\"isExpanded\"\n :active-parent=\"activeParent\"\n :close-mobile=\"closeMobile\"\n :go-back=\"goBack\"\n >\n <header class=\"rs-sidebar__header\">\n <div\n :class=\"[\n 'rs-sidebar__brand',\n {\n 'rs-sidebar__brand--trigger': hasModuleSelector,\n },\n ]\"\n >\n <button\n v-if=\"hasModuleSelector\"\n class=\"rs-sidebar__module-trigger\"\n type=\"button\"\n :aria-expanded=\"isModuleMenuOpen\"\n aria-haspopup=\"menu\"\n @click=\"toggleModuleMenu\"\n >\n <RsIcon :name=\"icon\" />\n <span class=\"rs-sidebar__title\">{{ displayedHeaderTitle }}</span>\n <RsIcon\n class=\"rs-sidebar__module-chevron\"\n :name=\"isModuleMenuOpen ? 'arrow_drop_up' : 'arrow_drop_down'\"\n size=\"sm\"\n />\n </button>\n\n <template v-else>\n <RsIcon :name=\"icon\" />\n <span class=\"rs-sidebar__title\">{{ displayedHeaderTitle }}</span>\n </template>\n </div>\n\n <slot\n name=\"header-action\"\n :active-parent=\"activeParent\"\n :close-mobile=\"closeMobile\"\n :go-back=\"goBack\"\n >\n <button\n v-if=\"hasHeaderAction\"\n class=\"rs-sidebar__header-button\"\n type=\"button\"\n :aria-label=\"activeParent ? 'Volver' : 'Cerrar menu'\"\n @click=\"activeParent ? goBack() : closeMobile()\"\n >\n <RsIcon :name=\"activeParent ? 'arrow_left' : 'close'\" />\n </button>\n </slot>\n </header>\n\n <Menu\n v-if=\"hasModuleSelector && isModuleMenuOpen\"\n class=\"rs-sidebar__module-menu\"\n :model=\"moduleMenuItems\"\n :pt=\"{\n root: { role: 'menu' },\n }\"\n />\n </slot>\n\n <div class=\"rs-sidebar__content\">\n <nav class=\"rs-sidebar__nav\" aria-label=\"Secciones\">\n <ul class=\"rs-sidebar__list\">\n <li v-for=\"item in displayedItems\" :key=\"item.id\" class=\"rs-sidebar__list-item\">\n <button\n :class=\"[\n 'rs-sidebar__item',\n {\n 'rs-sidebar__item--active': item.active,\n 'rs-sidebar__item--disabled': item.disabled,\n 'rs-sidebar__item--parent': hasVisibleChildren(item),\n },\n ]\"\n type=\"button\"\n :disabled=\"item.disabled\"\n @click=\"handleItemClick(item)\"\n >\n <slot name=\"item\" :item=\"item\" :expanded=\"isExpanded\">\n <RsIcon\n v-if=\"item.icon\"\n class=\"rs-sidebar__item-icon\"\n :name=\"item.icon\"\n />\n <span class=\"rs-sidebar__item-label\">{{ item.label }}</span>\n <RsIcon\n v-if=\"hasVisibleChildren(item)\"\n class=\"rs-sidebar__item-chevron\"\n name=\"chevron_right\"\n size=\"sm\"\n />\n </slot>\n </button>\n </li>\n </ul>\n </nav>\n\n <slot name=\"footer\" :items=\"visibleFooterItems\" :expanded=\"isExpanded\">\n <nav\n v-if=\"visibleFooterItems.length > 0\"\n class=\"rs-sidebar__footer\"\n aria-label=\"Acciones secundarias\"\n >\n <ul class=\"rs-sidebar__list\">\n <li v-for=\"item in visibleFooterItems\" :key=\"item.id\" class=\"rs-sidebar__list-item\">\n <button\n :class=\"[\n 'rs-sidebar__item',\n 'rs-sidebar__item--footer',\n {\n 'rs-sidebar__item--active': item.active,\n 'rs-sidebar__item--disabled': item.disabled,\n },\n ]\"\n type=\"button\"\n :disabled=\"item.disabled\"\n @click=\"handleItemClick(item)\"\n >\n <RsIcon\n v-if=\"item.icon\"\n class=\"rs-sidebar__item-icon\"\n :name=\"item.icon\"\n />\n <span class=\"rs-sidebar__item-label\">{{ item.label }}</span>\n </button>\n </li>\n </ul>\n </nav>\n </slot>\n </div>\n </aside>\n</template>\n\n<style src=\"./RsSidebar.css\"></style>\n","import type { App, Plugin } from \"vue\";\n\nimport RsAccountSelector from \"./components/RsAccountSelector\";\nimport RsIcon from \"./components/RsIcon\";\nimport RsSidebar from \"./components/RsSidebar\";\n\nexport const components = [RsAccountSelector, RsIcon, RsSidebar] as const;\n\nexport const RobosophyUiVue: Plugin = {\n install(app: App) {\n for (const component of components) {\n app.component(component.name ?? \"\", component);\n }\n },\n};\n\nexport default RobosophyUiVue;\n"],"names":["_createElementBlock","_hoisted_1","_createVNode","_unref","_normalizeClass","RsIcon","_renderSlot","_createElementVNode","_openBlock","_hoisted_3","_toDisplayString","_createBlock","_Teleport","_normalizeStyle","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_9","_hoisted_10","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_Fragment","_renderList","_mergeProps","_withModifiers","RsAccountSelector","RsSidebar"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AASA,UAAM,QAAQ;AAUd,UAAM,YAAY,SAAS,MAAM;AAAA,MAC/B;AAAA,MACA,YAAY,MAAM,MAAM;AAAA,MACxB,YAAY,MAAM,KAAK;AAAA,MACvB;AAAA,QACE,wBAAwB,MAAM;AAAA,QAC9B,eAAe,MAAM,SAAS;AAAA,QAC9B,eAAe,MAAM,SAAS;AAAA,QAC9B,eAAe,MAAM,SAAS;AAAA,MAAA;AAAA,IAChC,CACD;AAED,UAAM,YAAY,SAAS,OAAO;AAAA,MAChC,kBAAkB,MAAM,OAAO,IAAI;AAAA,MACnC,mBAAmB,MAAM;AAAA,MACzB,0BAA0B,MAAM;AAAA,MAChC,kBAAkB,OAAO,MAAM,SAAS,WAAW,GAAG,MAAM,IAAI,OAAO;AAAA,MACvE,oBAAoB,MAAM;AAAA,IAAA,EAC1B;AAEF,UAAM,aAAa,SAAS,MAAO,MAAM,YAAY,SAAY,MAAO;AACxE,UAAM,OAAO,SAAS,MAAO,MAAM,YAAY,QAAQ,MAAU;;0BAI/DA,mBAQO,QAAA;AAAA,QAPJ,eAAa,WAAA;AAAA,QACb,cAAY,QAAA;AAAA,QACZ,sBAAO,UAAA,KAAS;AAAA,QAChB,MAAM,KAAA;AAAA,QACN,sBAAO,UAAA,KAAS;AAAA,MAAA,mBAEd,QAAA,IAAI,GAAA,IAAAC,YAAA;AAAA;;;AC/CX,MAAM,kBAAkB;AAEjB,SAAS,YAAY,MAAc,UAA8B,IAAI;AAC1E,QAAM,SAAuB,QAAQ,UAAU;AAC/C,QAAM,iBAAiB,KAAK,KAAA;AAE5B,MAAI,CAAC,gBAAgB,KAAK,cAAc,GAAG;AACzC,UAAM,IAAI,MAAM,wCAAwC,IAAI,GAAG;AAAA,EACjE;AAEA,SAAO,mCAAmC,MAAM,YAAY,cAAc;AAC5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA,UAAM,QAAQ;AAad,UAAM,OAAO;AASb,UAAM,UAAU,IAAwB,IAAI;AAC5C,UAAM,WAAW,IAAwB,IAAI;AAC7C,UAAM,eAAe,IAAI,KAAK;AAE9B,UAAM,eAAe;AAAA,MACnB,+BAA+B,MAAM;AAAA,MACrC,oCAAoC;AAAA,MACpC,gCAAgC;AAAA,MAChC,+BAA+B;AAAA,MAC/B,+BAA+B;AAAA,MAC/B,gCAAgC;AAAA,MAChC,gCAAgC;AAAA,IAAA;AAGlC,UAAM,gBAAgB,IAA4B,EAAE;AAEpD,QAAI,YAA2B;AAE/B,UAAM,eAAe,SAAS,MAAM,MAAM,eAAe,IAAI;AAC7D,UAAM,SAAS;AAAA,MAAS,MACtB,aAAa,QAAQ,QAAQ,MAAM,UAAU,IAAI,aAAa;AAAA,IAAA;AAEhE,UAAM,YAAY,SAAS,OAAO;AAAA,MAChC,+BAA+B,MAAM;AAAA,IAAA,EACrC;AAEF,UAAM,gBAAgB,SAAS,MAAM;AACnC,UAAI,MAAM,OAAO;AACf,eAAO,MAAM;AAAA,MACf;AAEA,aAAO,MAAM,SAAS,SAAS,IAC3B,YAAY,MAAM,SAAS,MAAM,aACjC;AAAA,IACN,CAAC;AAED,UAAM,iBAAiB;AAAA,MAAS,MAC9B,MAAM,QAAQ,OAAO,CAAC,WAAW,OAAO,YAAY,KAAK;AAAA,IAAA;AAE3D,UAAM,uBAAuB;AAAA,MAAS,MACpC,MAAM,cAAc,OAAO,CAAC,WAAW,OAAO,YAAY,KAAK;AAAA,IAAA;AAEjE,UAAM,qBAAqB,SAAS,MAAM,MAAM,SAAS,SAAS,CAAC;AACnE,UAAM,gBAAyC;AAAA,MAC7C,IAAI;AAAA,MACJ,OAAO;AAAA,IAAA;AAGT,aAAS,kBAAkB,QAAiC;AAC1D,aAAO,OAAO,YAAY,WACtB,EAAE,UAAU,UAAmB,UAAU,MAAM,SAAS,KAAA,IACxD,EAAE,UAAU,aAAsB,UAAU,MAAM,SAAS,KAAA;AAAA,IACjE;AAEA,aAAS,kBAAkB,QAAiC;AAC1D,aAAO,OAAO,YAAY,WACtB,EAAE,UAAU,UAAmB,MAAM,KAAA,IACrC,EAAE,UAAU,aAAsB,MAAM,KAAA;AAAA,IAC9C;AAEA,aAAS,WAAW,QAAiC;AACnD,UAAI,CAAC,OAAO,UAAU;AACpB,aAAK,UAAU,MAAM;AACrB,sBAAA;AAAA,MACF;AAAA,IACF;AAEA,aAAS,iBAAiB,QAAiC;AACzD,UAAI,CAAC,OAAO,UAAU;AACpB,aAAK,iBAAiB,MAAM;AAC5B,sBAAA;AAAA,MACF;AAAA,IACF;AAEA,aAAS,cAAc,SAAmC;AACxD,UAAI,CAAC,QAAQ,UAAU,CAAC,QAAQ,UAAU;AACxC,aAAK,kBAAkB,OAAO;AAC9B,sBAAA;AAAA,MACF;AAAA,IACF;AAEA,aAAS,YAAY,UAAmB;AACtC,cAAQ,UAAU,KAAA,KAAU,KAAK,MAAM,GAAG,CAAC;AAAA,IAC7C;AAEA,aAAS,QAAQ,UAAmB;AAClC,UAAI,CAAC,aAAa,OAAO;AACvB,qBAAa,QAAQ;AAAA,MACvB;AAEA,WAAK,qBAAqB,QAAQ;AAElC,UAAI,UAAU;AACZ,aAAK,MAAM;AAAA,MACb,OAAO;AACL,aAAK,OAAO;AAAA,MACd;AAAA,IACF;AAEA,aAAS,iBAAiB;AACxB,cAAQ,CAAC,OAAO,KAAK;AAAA,IACvB;AAEA,aAAS,gBAAgB;AACvB,UAAI,OAAO,OAAO;AAChB,gBAAQ,KAAK;AAAA,MACf;AAAA,IACF;AAEA,aAAS,sBAAsB;AAC7B,YAAM,OAAO,QAAQ;AACrB,YAAM,QAAQ,SAAS;AAEvB,UAAI,CAAC,QAAQ,CAAC,OAAO;AACnB;AAAA,MACF;AAEA,YAAM,gBAAgB,OAAO;AAC7B,YAAM,kBAAkB;AACxB,YAAM,WAAW,KAAK,sBAAA;AACtB,YAAM,YAAY,MAAM,sBAAA;AACxB,YAAM,YAAY,SAAS,OAAO,UAAU,SAAS,gBAAgB;AACrE,YAAM,WAAW,SAAS,QAAQ,UAAU,SAAS;AAErD,UAAI;AACJ,UAAI,WAAW;AACb,eAAO,SAAS;AAAA,MAClB,WAAW,UAAU;AACnB,eAAO,SAAS,QAAQ,UAAU;AAAA,MACpC,OAAO;AACL,eAAO,KAAK;AAAA,UACV;AAAA,UACA,KAAK,IAAI,SAAS,MAAM,gBAAgB,kBAAkB,UAAU,KAAK;AAAA,QAAA;AAAA,MAE7E;AAEA,oBAAc,QAAQ;AAAA,QACpB,UAAU;AAAA,QACV,KAAK,GAAG,SAAS,SAAS,CAAC;AAAA,QAC3B,MAAM,GAAG,IAAI;AAAA,MAAA;AAAA,IAEjB;AAEA,aAAS,qBAAqB;AAC5B,UAAI,OAAO,OAAO;AAChB,aAAK,oBAAA;AAAA,MACP;AAAA,IACF;AAEA,aAAS,eAAe;AACtB,UAAI,OAAO,OAAO;AAChB,YAAI,cAAc,MAAM;AACtB,sBAAY,OAAO,sBAAsB,MAAM;AAC7C,wBAAY;AACZ,iBAAK,oBAAA;AAAA,UACP,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,aAAS,0BAA0B,OAAqB;AACtD,YAAM,SAAS,MAAM;AAErB,UACE,kBAAkB,QAClB,QAAQ,SACR,CAAC,QAAQ,MAAM,SAAS,MAAM,KAC9B,CAAC,SAAS,OAAO,SAAS,MAAM,GAChC;AACA,sBAAA;AAAA,MACF;AAAA,IACF;AAEA,cAAU,MAAM;AACd,eAAS,iBAAiB,eAAe,yBAAyB;AAClE,aAAO,iBAAiB,UAAU,kBAAkB;AACpD,aAAO,iBAAiB,UAAU,cAAc,EAAE,SAAS,MAAM;AAEjE,UAAI,OAAO,OAAO;AAChB,aAAK,oBAAA;AAAA,MACP;AAAA,IACF,CAAC;AAED,oBAAgB,MAAM;AACpB,eAAS,oBAAoB,eAAe,yBAAyB;AACrE,aAAO,oBAAoB,UAAU,kBAAkB;AACvD,aAAO,oBAAoB,UAAU,YAAY;AAEjD,UAAI,cAAc,MAAM;AACtB,6BAAqB,SAAS;AAAA,MAChC;AAAA,IACF,CAAC;AAED,UAAM,QAAQ,CAAC,SAAS;AACtB,UAAI,MAAM;AACR,aAAK,SAAA,EAAW,KAAK,mBAAmB;AAAA,MAC1C;AAAA,IACF,CAAC;;0BAICD,mBA+MM,OAAA;AAAA,iBA/MG;AAAA,QAAJ,KAAI;AAAA,QAAU,OAAM;AAAA,QAA4B,sBAAO,UAAA,KAAS;AAAA,MAAA;QACnEE,YAkCSC,MAAA,MAAA,GAAA;AAAA,UAjCN,iBAAe,OAAA;AAAA,UACf,cAAY,QAAA;AAAA,UACb,iBAAc;AAAA,UACb,OAAKC,eAAA;AAAA;oDAA4F,OAAA,MAAA;AAAA,UAAM;UAIxG,MAAA;AAAA,UACC,uBAAY,gBAAc,CAAA,MAAA,CAAA;AAAA,QAAA;2BAE3B,MAKE;AAAA,YALFF,YAKEC,MAAAE,WAAA,GAAA;AAAA,cAJA,OAAM;AAAA,cACN,QAAO;AAAA,cACP,MAAK;AAAA,cACJ,MAAM;AAAA,YAAA;YAETC,WAgBO,KAAA,QAAA,kBAAA,EAhBsB,MAAM,QAAA,KAAA,GAAnC,MAgBO;AAAA,cAfLC,mBAcO,QAdPN,cAcO;AAAA,gBAZG,QAAA,KAAK,0BADbD,mBAKE,OAAA;AAAA;kBAHA,OAAM;AAAA,kBACL,KAAK,QAAA,KAAK;AAAA,kBACV,KAAK,QAAA,KAAK,QAAQ,QAAA,KAAK;AAAA,gBAAA,8BAE1BQ,aAAAR,mBAMO,QANPS,cAMOC,gBADF,YAAY,QAAA,KAAK,QAAQ,CAAA,GAAA,CAAA;AAAA,cAAA;;;;;QAMV,OAAA,sBAA1BC,YAyKWC,UAAA;AAAA;UAzKD,IAAG;AAAA,QAAA;UACXL,mBAuKQ,WAAA;AAAA,qBAtKF;AAAA,YAAJ,KAAI;AAAA,YACH,aAAW,QAAA,WAAW;AAAA,YACvB,OAAM;AAAA,YACL,OAAKM,eAAA,CAAG,cAAc,cAAA,KAAa,CAAA;AAAA,UAAA;YAEtCN,mBAsES,UAtETO,cAsES;AAAA,cArEPR,WA8BO,KAAA,QAAA,eAAA,EA9BmB,MAAM,QAAA,KAAA,GAAhC,MA8BO;AAAA,gBA7BLC,mBA4BO,QA5BPQ,cA4BO;AAAA,kBA3BLR,mBAgBO,QAhBPS,cAgBO;AAAA,oBAZG,QAAA,KAAK,0BADbhB,mBAKE,OAAA;AAAA;sBAHA,OAAM;AAAA,sBACL,KAAK,QAAA,KAAK;AAAA,sBACV,KAAK,QAAA,KAAK,QAAQ,QAAA,KAAK;AAAA,oBAAA,8BAE1BQ,aAAAR,mBAMO,QANPiB,cAMOP,gBADF,YAAY,QAAA,KAAK,QAAQ,CAAA,GAAA,CAAA;AAAA,kBAAA;kBAIxB,QAAA,KAAK,sBADbF,aAAAR,mBASO,QATPkB,eASO;AAAA,oBALLX,mBAIE,OAAA;AAAA,sBAHA,OAAM;AAAA,sBACL,KAAK,QAAA,KAAK;AAAA,sBACV,KAAK,QAAA,KAAK,QAAQ,QAAA,KAAK;AAAA,oBAAA;;;;cAMhCA,mBAMM,OANNY,eAMM;AAAA,gBALJZ,mBAA6D,KAA7Da,eAA6DV,gBAApB,cAAA,KAAa,GAAA,CAAA;AAAA,gBAC7C,QAAA,KAAK,QAAdF,UAAA,GAAAR,mBAEI,KAFJqB,eAEIX,gBADC,QAAA,KAAK,IAAI,GAAA,CAAA;gBAEdH,mBAA0D,KAA1De,eAA0DZ,gBAAjB,QAAA,KAAK,KAAK,GAAA,CAAA;AAAA,cAAA;cAGrDJ,WA4BO,KAAA,QAAA,WAAA,EA5Be,SAAS,eAAA,MAAA,GAA/B,MA4BO;AAAA,gBA3BLC,mBA0BM,OA1BN,aA0BM;AAAA,kBAzBY,eAAA,MAAe,SAAM,sBACnCP,mBAWSuB,UAAA,EAAA,KAAA,KAAAC,WAVU,eAAA,OAAc,CAAxB,WAAM;AADf,2BAAAhB,aAAAG,YAWSR,eAXTsB,WAWS;AAAA,sBATN,KAAK,OAAO;AAAA,sBACb,OAAM;AAAA,sBACL,UAAU,OAAO;AAAA,sBAClB,MAAK;AAAA,oBAAA,GACG,EAAA,SAAA,QAAA,kBAAkB,MAAM,GAAA;AAAA,sBAC/B,SAAKC,cAAA,CAAA,WAAO,WAAW,MAAM,GAAA,CAAA,MAAA,CAAA;AAAA,oBAAA;uCAE9B,MAA+B;AAAA,wBAA/BnB,mBAA+B,QAAA,MAAAG,gBAAtB,OAAO,KAAK,GAAA,CAAA;AAAA,wBACP,OAAO,qBAArBC,YAA2DR,MAAAE,WAAA,GAAA;AAAA;0BAA/B,MAAM,OAAO;AAAA,0BAAM,MAAK;AAAA,wBAAA;;;;4CAGxDM,YAUSR,MAAA,MAAA,GAAA;AAAA;oBARP,OAAM;AAAA,oBACN,UAAS;AAAA,oBACT,UAAA;AAAA,oBACA,SAAA;AAAA,oBACA,MAAK;AAAA,oBACJ,SAAK,OAAA,CAAA,MAAA,OAAA,CAAA,IAAAuB,cAAA,CAAA,WAAO,WAAW,aAAa,GAAA,CAAA,MAAA,CAAA;AAAA,kBAAA;qCACtC,MAED,CAAA,GAAA,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA;AAAA,sCAFC,mBAED,EAAA;AAAA,oBAAA;;;;;;YAKG,QAAA,wBAAT1B,mBAEI,KAFJ,aAAqD,uBAErD,KAEiB,QAAA,SAAS,WAAM,IAAhCM,WAEO,kCAFP,MAEO;AAAA,cADLC,mBAAyD,KAAzD,aAAyDG,gBAAhB,QAAA,SAAS,GAAA,CAAA;AAAA,YAAA,KAGpC,mBAAA,SAAhBF,aAAAR,mBA0DM,OA1DN,aA0DM;AAAA,gCAzDJA,mBAwDSuB,UAAA,MAAAC,WAvDW,QAAA,UAAQ,CAAnB,YAAO;oCADhBb,YAwDSR,MAAA,MAAA,GAAA;AAAA,kBAtDN,KAAK,QAAQ;AAAA,kBACb,OAAKC,eAAA;AAAA;;sBAAoH,wCAAA,QAAQ;AAAA,sBAAgE,0CAAA,QAAQ;AAAA,oBAAA;AAAA;kBAOzM,UAAU,QAAQ,UAAU,QAAQ;AAAA,kBACrC,MAAA;AAAA,kBACA,UAAS;AAAA,kBACR,SAAKsB,cAAA,CAAA,WAAO,cAAc,OAAO,GAAA,CAAA,MAAA,CAAA;AAAA,gBAAA;mCAElC,MAkBO;AAAA,oBAlBPpB,WAkBO,KAAA,QAAA,kBAAA,EAlBsB,QAAA,GAA7B,MAkBO;AAAA,sBAjBLC,mBAgBO,QAhBP,aAgBO;AAAA,wBAZG,QAAQ,0BADhBP,mBAKE,OAAA;AAAA;0BAHA,OAAM;AAAA,0BACL,KAAK,QAAQ;AAAA,0BACb,KAAK,QAAQ;AAAA,wBAAA,6BAEhBQ,aAAAR,mBAMO,QANP,aAMOU,gBADF,YAAY,QAAQ,QAAQ,CAAA,GAAA,CAAA;AAAA,sBAAA;;oBAKrCH,mBAcO,QAdP,aAcO;AAAA,sBAbLA,mBAES,QAFT,aAESG,gBADP,QAAQ,KAAK,GAAA,CAAA;AAAA,sBAEfH,mBASO,QAAA;AAAA,wBARJ,OAAKH,eAAA;AAAA;0BAA0E,QAAQ;;yBAOrFM,gBAAA,QAAQ,SAAS,QAAA,aAAa,QAAA,UAAU,GAAA,CAAA;AAAA,oBAAA;oBAI/CH,mBAIO,QAJP,aAIO;AAAA,sBAHLD,WAEO,KAAA,QAAA,oBAAA,EAFwB,QAAA,GAA/B,MAEO;AAAA,wBADLJ,YAAuBC,MAAAE,WAAA,GAAA,EAAf,MAAK,SAAO;AAAA,sBAAA;;;;;;;YAM5BC,WAoBO,KAAA,QAAA,UAAA,EApBc,SAAS,qBAAA,MAAA,GAA9B,MAoBO;AAAA,cAlBG,qBAAA,MAAqB,SAAM,KADnCE,aAAAR,mBAkBS,UAlBT,aAkBS;AAAA,kCAdPA,mBAaSuB,UAAA,MAAAC,WAZU,qBAAA,OAAoB,CAA9B,WAAM;AADf,yBAAAhB,aAAAG,YAaSR,eAbTsB,WAaS;AAAA,oBAXN,KAAK,OAAO;AAAA,oBACb,OAAM;AAAA,oBACL,UAAU,OAAO;AAAA,oBAClB,MAAK;AAAA,kBAAA,GACG,EAAA,SAAA,QAAA,kBAAkB,MAAM,GAAA;AAAA,oBAC/B,SAAKC,cAAA,CAAA,WAAO,iBAAiB,MAAM,GAAA,CAAA,MAAA,CAAA;AAAA,kBAAA;qCAEpC,MAGO;AAAA,sBAHPnB,mBAGO,QAHP,aAGO;AAAA,wBAFLA,mBAA+B,QAAA,MAAAG,gBAAtB,OAAO,KAAK,GAAA,CAAA;AAAA,wBACP,OAAO,qBAArBC,YAA2DR,MAAAE,WAAA,GAAA;AAAA;0BAA/B,MAAM,OAAO;AAAA,0BAAM,MAAK;AAAA,wBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1alE,UAAM,QAAQ;AAad,UAAM,OAAO;AAOb,UAAM,YAAY,IAAI,KAAK;AAC3B,UAAM,eAAe,IAA0B,IAAI;AACnD,UAAM,mBAAmB,IAAI,KAAK;AAClC,UAAM,cAAc,IAAwB,IAAI;AAEhD,UAAM,eAAe,SAAS,MAAM,MAAM,MAAM,OAAO,SAAS,CAAC;AACjE,UAAM,qBAAqB,SAAS,MAAM,MAAM,YAAY,OAAO,SAAS,CAAC;AAC7E,UAAM,iBAAiB,SAAS,MAAM,MAAM,OAAO;AACnD,UAAM,eAAe;AAAA,MACnB,MACE,MAAM,QAAQ,KAAK,CAAC,WAAW,OAAO,MAAM,KAC5C,MAAM,QAAQ,KAAK,CAAC,WAAW,OAAO,SAAS,MAAM,KAAK,KAC1D,MAAM,QAAQ,CAAC,KACf;AAAA,IAAA;AAEJ,UAAM,uBAAuB,SAAS,MAAM,aAAa,OAAO,SAAS,aAAa,OAAO,QAAQ,MAAM,KAAK;AAChH,UAAM,kBAAkB;AAAA,MAAqB,MAC3C,eAAe,MAAM,IAAI,CAAC,YAAY;AAAA,QACpC,OAAO;AAAA,UACL;AAAA,UACA;AAAA,YACE,qCAAqC,OAAO,UAAU,OAAO,SAAS,qBAAqB;AAAA,YAC3F,uCAAuC,OAAO;AAAA,UAAA;AAAA,QAChD;AAAA,QAEF,SAAS,MAAM,aAAa,MAAM;AAAA,QAClC,UAAU,OAAO;AAAA,QACjB,OAAO,OAAO;AAAA,MAAA,EACd;AAAA,IAAA;AAGJ,UAAM,iBAAiB;AAAA,MAAS,MAC9B,aAAa,QAAQ,aAAa,MAAM,UAAU,OAAO,SAAS,KAAK,CAAA,IAAK,aAAa;AAAA,IAAA;AAG3F,UAAM,aAAa,SAAS,MAAM,MAAM,YAAY,MAAM,cAAc,UAAU,KAAK;AACvF,UAAM,kBAAkB,SAAS,MAAM,MAAM,cAAc,CAAC,CAAC,aAAa,KAAK;AAC/E,UAAM,oBAAoB,SAAS,MAAM,CAAC,aAAa,SAAS,MAAM,QAAQ,SAAS,CAAC;AAExF,UAAM,YAAY,SAAS,MAAM;AAAA,MAC/B;AAAA,MACA,eAAe,MAAM,OAAO;AAAA,MAC5B;AAAA,QACE,wBAAwB,WAAW;AAAA,QACnC,2BAA2B,MAAM;AAAA,QACjC,uBAAuB,CAAC,CAAC,aAAa;AAAA,MAAA;AAAA,IACxC,CACD;AAED;AAAA,MACE,MAAM,MAAM;AAAA,MACZ,CAAC,WAAW;AACV,YAAI,CAAC,QAAQ;AACX,uBAAa,QAAQ;AAAA,QACvB;AAEA,yBAAiB,QAAQ;AAAA,MAC3B;AAAA,IAAA;AAGF,UAAM,YAAY,CAAC,aAAa;AAC9B,UAAI,CAAC,UAAU;AACb,qBAAa,QAAQ;AAAA,MACvB;AAEA,WAAK,mBAAmB,QAAQ;AAAA,IAClC,CAAC;AAED;AAAA,MACE,MAAM,aAAa;AAAA,MACnB,MAAM;AACJ,yBAAiB,QAAQ;AAAA,MAC3B;AAAA,IAAA;AAGF,cAAU,MAAM;AACd,eAAS,iBAAiB,eAAe,yBAAyB;AAAA,IACpE,CAAC;AAED,oBAAgB,MAAM;AACpB,eAAS,oBAAoB,eAAe,yBAAyB;AAAA,IACvE,CAAC;AAED,aAAS,UAAU,MAAqB;AACtC,aAAO,KAAK,YAAY;AAAA,IAC1B;AAEA,aAAS,mBAAmB,MAAqB;AAC/C,cAAQ,KAAK,YAAY,CAAA,GAAI,KAAK,SAAS;AAAA,IAC7C;AAEA,aAAS,WAAW,OAAgB;AAClC,UAAI,CAAC,MAAM,iBAAiB,MAAM,YAAY;AAC5C;AAAA,MACF;AAEA,gBAAU,QAAQ;AAClB,UAAI,CAAC,OAAO;AACV,yBAAiB,QAAQ;AAAA,MAC3B;AAAA,IACF;AAEA,aAAS,gBAAgB,MAAqB;AAC5C,UAAI,KAAK,UAAU;AACjB;AAAA,MACF;AAEA,UAAI,mBAAmB,IAAI,GAAG;AAC5B,qBAAa,QAAQ;AACrB;AAAA,MACF;AAEA,WAAK,cAAc,IAAI;AAAA,IACzB;AAEA,aAAS,SAAS;AAChB,mBAAa,QAAQ;AAAA,IACvB;AAEA,aAAS,cAAc;AACrB,mBAAa,QAAQ;AACrB,uBAAiB,QAAQ;AACzB,WAAK,cAAc;AAAA,IACrB;AAEA,aAAS,mBAAmB;AAC1B,UAAI,CAAC,kBAAkB,SAAS,CAAC,WAAW,OAAO;AACjD;AAAA,MACF;AAEA,uBAAiB,QAAQ,CAAC,iBAAiB;AAAA,IAC7C;AAEA,aAAS,aAAa,QAAyB;AAC7C,UAAI,OAAO,UAAU;AACnB;AAAA,MACF;AAEA,uBAAiB,QAAQ;AACzB,WAAK,iBAAiB,MAAM;AAE5B,UAAI,MAAM,0BAA0B,OAAO,WAAW,eAAe,OAAO,MAAM;AAChF,eAAO,SAAS,OAAO,OAAO;AAAA,MAChC;AAAA,IACF;AAEA,aAAS,0BAA0B,OAAqB;AACtD,UAAI,CAAC,iBAAiB,SAAS,CAAC,YAAY,OAAO;AACjD;AAAA,MACF;AAEA,UAAI,CAAC,YAAY,MAAM,SAAS,MAAM,MAAc,GAAG;AACrD,yBAAiB,QAAQ;AAAA,MAC3B;AAAA,IACF;;0BAIEL,mBA+IQ,SAAA;AAAA,iBA9IF;AAAA,QAAJ,KAAI;AAAA,QACH,cAAY,QAAA;AAAA,QACZ,sBAAO,UAAA,KAAS;AAAA,QAChB,oDAAY,WAAU,IAAA;AAAA,QACtB,oDAAY,WAAU,KAAA;AAAA,MAAA;QAEvBM,WAiEO,KAAA,QAAA,UAAA;AAAA,UA/DJ,UAAU,WAAA;AAAA,UACV,cAAe,aAAA;AAAA,UACf;AAAA,UACA;AAAA,QAAA,GALH,MAiEO;AAAA,UA1DLC,mBAgDS,UAhDT,YAgDS;AAAA,YA/CPA,mBA6BM,OAAA;AAAA,cA5BH,OAAKH,eAAA;AAAA;;gDAA+F,kBAAA;AAAA,gBAAA;AAAA;;cAQ7F,kBAAA,sBADRJ,mBAeS,UAAA;AAAA;gBAbP,OAAM;AAAA,gBACN,MAAK;AAAA,gBACJ,iBAAe,iBAAA;AAAA,gBAChB,iBAAc;AAAA,gBACb,SAAO;AAAA,cAAA;gBAERE,YAAuBC,MAAAE,WAAA,GAAA,EAAd,MAAM,QAAA,KAAA,GAAI,MAAA,GAAA,CAAA,MAAA,CAAA;AAAA,gBACnBE,mBAAiE,QAAjE,YAAiEG,gBAA9B,qBAAA,KAAoB,GAAA,CAAA;AAAA,gBACvDR,YAIEC,MAAAE,WAAA,GAAA;AAAA,kBAHA,OAAM;AAAA,kBACL,MAAM,iBAAA,QAAgB,kBAAA;AAAA,kBACvB,MAAK;AAAA,gBAAA;iDAITL,mBAGWuB,UAAA,EAAA,KAAA,KAAA;AAAA,gBAFTrB,YAAuBC,MAAAE,WAAA,GAAA,EAAd,MAAM,QAAA,KAAA,GAAI,MAAA,GAAA,CAAA,MAAA,CAAA;AAAA,gBACnBE,mBAAiE,QAAjE,YAAiEG,gBAA9B,qBAAA,KAAoB,GAAA,CAAA;AAAA,cAAA;;YAI3DJ,WAeO,KAAA,QAAA,iBAAA;AAAA,cAbJ,cAAe,aAAA;AAAA,cACf;AAAA,cACA;AAAA,YAAA,GAJH,MAeO;AAAA,cARG,gBAAA,sBADRN,mBAQS,UAAA;AAAA;gBANP,OAAM;AAAA,gBACN,MAAK;AAAA,gBACJ,cAAY,aAAA,QAAY,WAAA;AAAA,gBACxB,SAAK,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAE,aAAA,QAAe,OAAA,IAAW,YAAA;AAAA,cAAW;gBAE7CE,YAAwDC,MAAAE,WAAA,GAAA;AAAA,kBAA/C,MAAM,aAAA,QAAY,eAAA;AAAA,gBAAA;;;;UAMzB,kBAAA,SAAqB,iBAAA,sBAD7BM,YAOER,MAAA,IAAA,GAAA;AAAA;YALA,OAAM;AAAA,YACL,OAAO,gBAAA;AAAA,YACP,IAAI;AAAA;;UAEJ;;QAILI,mBAoEM,OApEN,YAoEM;AAAA,UAnEJA,mBAiCM,OAjCN,YAiCM;AAAA,YAhCJA,mBA+BK,MA/BL,YA+BK;AAAA,gCA9BHP,mBA6BKuB,UAAA,MAAAC,WA7Bc,eAAA,OAAc,CAAtB,SAAI;oCAAfxB,mBA6BK,MAAA;AAAA,kBA7B+B,KAAK,KAAK;AAAA,kBAAI,OAAM;AAAA,gBAAA;kBACtDO,mBA2BS,UAAA;AAAA,oBA1BN,OAAKH,eAAA;AAAA;;wBAAwG,4BAAA,KAAK;AAAA,wBAAwD,8BAAA,KAAK;AAAA,wBAAwD,4BAAA,mBAAmB,IAAI;AAAA,sBAAA;AAAA;oBAQ/P,MAAK;AAAA,oBACJ,UAAU,KAAK;AAAA,oBACf,SAAK,CAAA,WAAE,gBAAgB,IAAI;AAAA,kBAAA;oBAE5BE,WAaO,KAAA,QAAA,QAAA;AAAA,sBAbY;AAAA,sBAAa,UAAU,WAAA;AAAA,oBAAA,GAA1C,MAaO;AAAA,sBAXG,KAAK,qBADbK,YAIER,MAAAE,WAAA,GAAA;AAAA;wBAFA,OAAM;AAAA,wBACL,MAAM,KAAK;AAAA,sBAAA;sBAEdE,mBAA4D,QAA5D,aAA4DG,gBAApB,KAAK,KAAK,GAAA,CAAA;AAAA,sBAE1C,mBAAmB,IAAI,kBAD/BC,YAKER,MAAAE,WAAA,GAAA;AAAA;wBAHA,OAAM;AAAA,wBACN,MAAK;AAAA,wBACL,MAAK;AAAA,sBAAA;;;;;;;UAQjBC,WA+BO,KAAA,QAAA,UAAA;AAAA,YA/Bc,OAAO,mBAAA;AAAA,YAAqB,UAAU,WAAA;AAAA,UAAA,GAA3D,MA+BO;AAAA,YA7BG,mBAAA,MAAmB,SAAM,KADjCE,aAAAR,mBA6BM,OA7BN,aA6BM;AAAA,cAxBJO,mBAuBK,MAvBL,aAuBK;AAAA,kCAtBHP,mBAqBKuB,UAAA,MAAAC,WArBc,mBAAA,OAAkB,CAA1B,SAAI;sCAAfxB,mBAqBK,MAAA;AAAA,oBArBmC,KAAK,KAAK;AAAA,oBAAI,OAAM;AAAA,kBAAA;oBAC1DO,mBAmBS,UAAA;AAAA,sBAlBN,OAAKH,eAAA;AAAA;;;0BAA4J,4BAAA,KAAK;AAAA,0BAA0D,8BAAA,KAAK;AAAA,wBAAA;AAAA;sBAQtO,MAAK;AAAA,sBACJ,UAAU,KAAK;AAAA,sBACf,SAAK,CAAA,WAAE,gBAAgB,IAAI;AAAA,oBAAA;sBAGpB,KAAK,qBADbO,YAIER,MAAAE,WAAA,GAAA;AAAA;wBAFA,OAAM;AAAA,wBACL,MAAM,KAAK;AAAA,sBAAA;sBAEdE,mBAA4D,QAA5D,aAA4DG,gBAApB,KAAK,KAAK,GAAA,CAAA;AAAA,oBAAA;;;;;;;;;;;AChU3D,MAAM,aAAa,CAACiB,aAAmBtB,aAAQuB,SAAS;AAExD,MAAM,iBAAyB;AAAA,EACpC,QAAQ,KAAU;AAChB,eAAW,aAAa,YAAY;AAClC,UAAI,UAAU,UAAU,QAAQ,IAAI,SAAS;AAAA,IAC/C;AAAA,EACF;AACF;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/components/RsIcon/RsIcon.vue","../src/components/RsIcon/index.ts","../src/components/RsAccountSelector/RsAccountSelector.vue","../src/components/RsSidebar/RsSidebar.vue","../src/plugin.ts"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nimport type { RsIconProps } from \"./RsIcon.types\";\n\ndefineOptions({\n name: \"RsIcon\",\n});\n\nconst GRADE_VALUES = [200, 0, -25] as const;\n\nconst props = withDefaults(defineProps<RsIconProps>(), {\n color: \"inherit\",\n family: \"outlined\",\n fill: false,\n grade: 0,\n interactive: false,\n size: \"md\",\n weight: 400,\n});\n\nfunction clampGrade(grade: number): number {\n return GRADE_VALUES.reduce((nearest, g) =>\n Math.abs(g - grade) < Math.abs(nearest - grade) ? g : nearest,\n );\n}\n\nconst symbolHref = computed(() => {\n const family = props.family;\n const name = props.name;\n\n let gradeSuffix = \"\";\n const clamped = clampGrade(props.grade);\n if (clamped !== 0) {\n gradeSuffix = clamped > 0 ? `-grad${clamped}` : `-gradN${Math.abs(clamped)}`;\n }\n\n const fillSuffix = props.fill ? \"-fill\" : \"\";\n\n return `#rs-icon-${family}-${name}${gradeSuffix}${fillSuffix}`;\n});\n\nconst iconSize = computed(() => {\n if (typeof props.size === \"number\") return props.size;\n if (props.size === \"sm\") return 18;\n if (props.size === \"lg\") return 32;\n return 24;\n});\n\nconst rootClass = computed(() => [\n \"rs-icon\",\n `rs-icon--${props.family}`,\n `rs-icon--${props.color}`,\n {\n \"rs-icon--interactive\": props.interactive,\n \"rs-icon--sm\": props.size === \"sm\",\n \"rs-icon--md\": props.size === \"md\",\n \"rs-icon--lg\": props.size === \"lg\",\n },\n]);\n\nconst rootStyle = computed(() => ({\n \"--rs-icon-color\": undefined,\n \"--rs-icon-size\": `${iconSize.value}px`,\n}));\n\nconst ariaHidden = computed(() => (props.ariaLabel ? undefined : \"true\"));\nconst role = computed(() => (props.ariaLabel ? \"img\" : undefined));\n</script>\n\n<template>\n <svg\n :aria-hidden=\"ariaHidden\"\n :aria-label=\"ariaLabel\"\n :class=\"rootClass\"\n :role=\"role\"\n :style=\"rootStyle\"\n :width=\"iconSize\"\n :height=\"iconSize\"\n fill=\"currentColor\"\n >\n <use :href=\"symbolHref\" />\n </svg>\n</template>\n\n<style src=\"./RsIcon.css\"></style>\n","import \"./RsIcon.css\";\n\nimport type { RsIconFamily, RsPrimeIconOptions } from \"./RsIcon.types\";\n\nconst iconNamePattern = /^[a-z0-9_]+$/;\n\nexport function rsPrimeIcon(name: string, options: RsPrimeIconOptions = {}) {\n const family: RsIconFamily = options.family ?? \"outlined\";\n const normalizedName = name.trim();\n\n if (!iconNamePattern.test(normalizedName)) {\n throw new Error(`Invalid Material Symbols icon name: \"${name}\"`);\n }\n\n return `rs-icon rs-icon--prime rs-icon--${family} rs-icon-${normalizedName}`;\n}\n\nexport { default } from \"./RsIcon.vue\";\nexport type {\n RsIconColor,\n RsIconFamily,\n RsIconProps,\n RsIconSize,\n RsIconWeight,\n RsPrimeIconOptions,\n} from \"./RsIcon.types\";\n","<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from \"vue\";\nimport Button from \"primevue/button\";\n\nimport RsIcon from \"../RsIcon\";\nimport type {\n RsAccountSelectorAccount,\n RsAccountSelectorAction,\n RsAccountSelectorProps,\n} from \"./RsAccountSelector.types\";\n\ndefineOptions({\n name: \"RsAccountSelector\",\n});\n\nconst props = withDefaults(defineProps<RsAccountSelectorProps>(), {\n accounts: () => [],\n actions: () => [],\n activeText: \"Activo en pantalla\",\n emptyText: \"No hay cuentas disponibles\",\n footerActions: () => [],\n loading: false,\n modelValue: null,\n selectText: \"Ingresar\",\n triggerAriaLabel: \"Abrir selector de cuenta\",\n width: \"270px\",\n});\n\nconst emit = defineEmits<{\n \"select-account\": [account: RsAccountSelectorAccount];\n action: [action: RsAccountSelectorAction];\n \"footer-action\": [action: RsAccountSelectorAction];\n \"update:modelValue\": [open: boolean];\n open: [];\n close: [];\n}>();\n\nconst rootRef = ref<HTMLElement | null>(null);\nconst panelRef = ref<HTMLElement | null>(null);\nconst internalOpen = ref(false);\n\nconst panelCSSVars = {\n \"--rs-account-selector-width\": props.width,\n \"--rs-account-selector-background\": \"var(--rs-color-surface-primary, #ffffff)\",\n \"--rs-account-selector-border\": \"var(--rs-color-stroke-default, #d1d1d1)\",\n \"--rs-account-selector-color\": \"var(--rs-color-text-primary, #000000)\",\n \"--rs-account-selector-muted\": \"var(--rs-color-text-secondary, #909090)\",\n \"--rs-account-selector-active\": \"var(--rs-color-text-brand-green, #4eae01)\",\n \"--rs-account-selector-danger\": \"var(--rs-color-text-brand-red, #d80115)\",\n};\n\nconst panelPosition = ref<Record<string, string>>({});\n\nlet scrollRAF: number | null = null;\n\nconst isControlled = computed(() => props.modelValue !== null);\nconst isOpen = computed(() =>\n isControlled.value ? Boolean(props.modelValue) : internalOpen.value,\n);\nconst rootStyle = computed(() => ({\n \"--rs-account-selector-width\": props.width,\n}));\n\nconst computedTitle = computed(() => {\n if (props.title) {\n return props.title;\n }\n\n return props.accounts.length > 1\n ? `Acceso a ${props.accounts.length} Cuentas`\n : \"Acceso a\";\n});\n\nconst visibleActions = computed(() =>\n props.actions.filter((action) => action.visible !== false),\n);\nconst visibleFooterActions = computed(() =>\n props.footerActions.filter((action) => action.visible !== false),\n);\nconst shouldShowAccounts = computed(() => props.accounts.length > 1);\nconst profileAction: RsAccountSelectorAction = {\n id: \"profile\",\n label: \"Ver mi perfil\",\n};\n\nfunction headerButtonProps(action: RsAccountSelectorAction) {\n return action.variant === \"danger\"\n ? { severity: \"danger\" as const, outlined: true, rounded: true }\n : { severity: \"secondary\" as const, outlined: true, rounded: true };\n}\n\nfunction footerButtonProps(action: RsAccountSelectorAction) {\n return action.variant === \"danger\"\n ? { severity: \"danger\" as const, text: true }\n : { severity: \"secondary\" as const, text: true };\n}\n\nfunction emitAction(action: RsAccountSelectorAction) {\n if (!action.disabled) {\n emit(\"action\", action);\n closeSelector();\n }\n}\n\nfunction emitFooterAction(action: RsAccountSelectorAction) {\n if (!action.disabled) {\n emit(\"footer-action\", action);\n closeSelector();\n }\n}\n\nfunction selectAccount(account: RsAccountSelectorAccount) {\n if (!account.active && !account.disabled) {\n emit(\"select-account\", account);\n closeSelector();\n }\n}\n\nfunction getInitials(initials?: string) {\n return (initials?.trim() || \"?\").slice(0, 3);\n}\n\nfunction setOpen(nextOpen: boolean) {\n if (!isControlled.value) {\n internalOpen.value = nextOpen;\n }\n\n emit(\"update:modelValue\", nextOpen);\n\n if (nextOpen) {\n emit(\"open\");\n } else {\n emit(\"close\");\n }\n}\n\nfunction toggleSelector() {\n setOpen(!isOpen.value);\n}\n\nfunction closeSelector() {\n if (isOpen.value) {\n setOpen(false);\n }\n}\n\nfunction updatePanelPosition() {\n const root = rootRef.value;\n const panel = panelRef.value;\n\n if (!root || !panel) {\n return;\n }\n\n const viewportWidth = window.innerWidth;\n const viewportPadding = 16;\n const rootRect = root.getBoundingClientRect();\n const panelRect = panel.getBoundingClientRect();\n const fitsRight = rootRect.left + panelRect.width <= viewportWidth - viewportPadding;\n const fitsLeft = rootRect.right - panelRect.width >= viewportPadding;\n\n let left: number;\n if (fitsRight) {\n left = rootRect.left;\n } else if (fitsLeft) {\n left = rootRect.right - panelRect.width;\n } else {\n left = Math.max(\n viewportPadding,\n Math.min(rootRect.left, viewportWidth - viewportPadding - panelRect.width),\n );\n }\n\n panelPosition.value = {\n position: \"fixed\",\n top: `${rootRect.bottom + 8}px`,\n left: `${left}px`,\n };\n}\n\nfunction handleWindowResize() {\n if (isOpen.value) {\n void updatePanelPosition();\n }\n}\n\nfunction handleScroll() {\n if (isOpen.value) {\n if (scrollRAF === null) {\n scrollRAF = window.requestAnimationFrame(() => {\n scrollRAF = null;\n void updatePanelPosition();\n });\n }\n }\n}\n\nfunction handleDocumentPointerDown(event: PointerEvent) {\n const target = event.target;\n\n if (\n target instanceof Node &&\n rootRef.value &&\n !rootRef.value.contains(target) &&\n !panelRef.value?.contains(target)\n ) {\n closeSelector();\n }\n}\n\nonMounted(() => {\n document.addEventListener(\"pointerdown\", handleDocumentPointerDown);\n window.addEventListener(\"resize\", handleWindowResize);\n window.addEventListener(\"scroll\", handleScroll, { passive: true });\n\n if (isOpen.value) {\n void updatePanelPosition();\n }\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener(\"pointerdown\", handleDocumentPointerDown);\n window.removeEventListener(\"resize\", handleWindowResize);\n window.removeEventListener(\"scroll\", handleScroll);\n\n if (scrollRAF !== null) {\n cancelAnimationFrame(scrollRAF);\n }\n});\n\nwatch(isOpen, (open) => {\n if (open) {\n void nextTick().then(updatePanelPosition);\n }\n});\n</script>\n\n<template>\n <div ref=\"rootRef\" class=\"rs-account-selector-host\" :style=\"rootStyle\">\n <Button\n :aria-expanded=\"isOpen\"\n :aria-label=\"triggerAriaLabel\"\n aria-haspopup=\"menu\"\n :class=\"[\n 'rs-account-selector__trigger',\n { 'rs-account-selector__trigger--open': isOpen },\n ]\"\n text\n @click.stop=\"toggleSelector\"\n >\n <RsIcon\n class=\"rs-account-selector__trigger-chevron\"\n family=\"rounded\"\n name=\"arrow_drop_down\"\n :size=\"22\"\n />\n <slot name=\"trigger-avatar\" :user=\"user\">\n <span class=\"rs-account-selector__trigger-avatar\">\n <img\n v-if=\"user.avatarSrc\"\n class=\"rs-account-selector__avatar-image\"\n :src=\"user.avatarSrc\"\n :alt=\"user.name || user.email\"\n />\n <span\n v-else\n class=\"rs-account-selector__avatar-placeholder\"\n aria-hidden=\"true\"\n >\n {{ getInitials(user.initials) }}\n </span>\n </span>\n </slot>\n </Button>\n\n <Teleport to=\"body\" v-if=\"isOpen\">\n <section\n ref=\"panelRef\"\n :aria-busy=\"loading || undefined\"\n class=\"rs-account-selector\"\n :style=\"[panelCSSVars, panelPosition]\"\n >\n <header class=\"rs-account-selector__summary\">\n <slot name=\"user-avatar\" :user=\"user\">\n <span class=\"rs-account-selector__avatar-stack\">\n <span\n class=\"rs-account-selector__avatar rs-account-selector__avatar--lg\"\n >\n <img\n v-if=\"user.avatarSrc\"\n class=\"rs-account-selector__avatar-image\"\n :src=\"user.avatarSrc\"\n :alt=\"user.name || user.email\"\n />\n <span\n v-else\n class=\"rs-account-selector__avatar-placeholder\"\n aria-hidden=\"true\"\n >\n {{ getInitials(user.initials) }}\n </span>\n </span>\n <span\n v-if=\"user.secondaryAvatarSrc\"\n class=\"rs-account-selector__avatar rs-account-selector__avatar--lg rs-account-selector__secondary-avatar\"\n >\n <img\n class=\"rs-account-selector__avatar-image\"\n :src=\"user.secondaryAvatarSrc\"\n :alt=\"user.name || user.email\"\n />\n </span>\n </span>\n </slot>\n\n <div class=\"rs-account-selector__user\">\n <p class=\"rs-account-selector__title\">{{ computedTitle }}</p>\n <p v-if=\"user.name\" class=\"rs-account-selector__name\">\n {{ user.name }}\n </p>\n <p class=\"rs-account-selector__email\">{{ user.email }}</p>\n </div>\n\n <slot name=\"actions\" :actions=\"visibleActions\">\n <div class=\"rs-account-selector__actions\">\n <template v-if=\"visibleActions.length > 0\">\n <Button\n v-for=\"action in visibleActions\"\n :key=\"action.id\"\n class=\"rs-account-selector__button\"\n :disabled=\"action.disabled\"\n size=\"small\"\n v-bind=\"headerButtonProps(action)\"\n @click.stop=\"emitAction(action)\"\n >\n <span>{{ action.label }}</span>\n <RsIcon v-if=\"action.icon\" :name=\"action.icon\" size=\"sm\" />\n </Button>\n </template>\n <Button\n v-else\n class=\"rs-account-selector__button rs-account-selector__profile-button\"\n severity=\"secondary\"\n outlined\n rounded\n size=\"small\"\n @click.stop=\"emitAction(profileAction)\"\n >\n Ver mi perfil\n </Button>\n </div>\n </slot>\n </header>\n\n <p v-if=\"loading\" class=\"rs-account-selector__state\">\n Cargando cuentas...\n </p>\n\n <slot v-else-if=\"accounts.length === 0\" name=\"empty\">\n <p class=\"rs-account-selector__state\">{{ emptyText }}</p>\n </slot>\n\n <div v-else-if=\"shouldShowAccounts\" class=\"rs-account-selector__accounts\">\n <Button\n v-for=\"account in accounts\"\n :key=\"account.id\"\n :class=\"[\n 'rs-account-selector__account',\n {\n 'rs-account-selector__account--active': account.active,\n 'rs-account-selector__account--disabled': account.disabled,\n },\n ]\"\n :disabled=\"account.active || account.disabled\"\n text\n severity=\"secondary\"\n @click.stop=\"selectAccount(account)\"\n >\n <slot name=\"account-avatar\" :account=\"account\">\n <span\n class=\"rs-account-selector__avatar rs-account-selector__avatar--sm rs-account-selector__account-avatar\"\n >\n <img\n v-if=\"account.avatarSrc\"\n class=\"rs-account-selector__avatar-image\"\n :src=\"account.avatarSrc\"\n :alt=\"account.label\"\n />\n <span\n v-else\n class=\"rs-account-selector__avatar-placeholder\"\n aria-hidden=\"true\"\n >\n {{ getInitials(account.initials) }}\n </span>\n </span>\n </slot>\n\n <span class=\"rs-account-selector__account-info\">\n <span class=\"rs-account-selector__account-label\">{{\n account.label\n }}</span>\n <span\n :class=\"[\n 'rs-account-selector__account-state',\n account.active\n ? 'rs-account-selector__account-state--active'\n : 'rs-account-selector__account-state--inactive',\n ]\"\n >\n {{ account.active ? activeText : selectText }}\n </span>\n </span>\n\n <span class=\"rs-account-selector__account-trailing\">\n <slot name=\"account-trailing\" :account=\"account\">\n <RsIcon name=\"login\" />\n </slot>\n </span>\n </Button>\n </div>\n\n <slot name=\"footer\" :actions=\"visibleFooterActions\">\n <footer\n v-if=\"visibleFooterActions.length > 0\"\n class=\"rs-account-selector__footer\"\n >\n <Button\n v-for=\"action in visibleFooterActions\"\n :key=\"action.id\"\n class=\"rs-account-selector__button\"\n :disabled=\"action.disabled\"\n size=\"small\"\n v-bind=\"footerButtonProps(action)\"\n @click.stop=\"emitFooterAction(action)\"\n >\n <span class=\"rs-account-selector__button-content\">\n <span>{{ action.label }}</span>\n <RsIcon v-if=\"action.icon\" :name=\"action.icon\" size=\"sm\" />\n </span>\n </Button>\n </footer>\n </slot>\n </section>\n </Teleport>\n </div>\n</template>\n\n<style src=\"./RsAccountSelector.css\"></style>\n","<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, ref, watch } from \"vue\";\nimport Menu from \"primevue/menu\";\nimport type { MenuItem } from \"primevue/menuitem\";\n\nimport RsIcon from \"../RsIcon\";\nimport type { RsSidebarItem, RsSidebarModule, RsSidebarProps } from \"./RsSidebar.types\";\n\ndefineOptions({\n name: \"RsSidebar\",\n});\n\nconst props = withDefaults(defineProps<RsSidebarProps>(), {\n ariaLabel: \"Navegacion principal\",\n expandOnHover: true,\n expanded: false,\n footerItems: () => [],\n icon: \"nest_eco_leaf\",\n mobileOpen: false,\n modules: () => [],\n navigateOnModuleSelect: false,\n title: \"\",\n variant: \"cyo\",\n});\n\nconst emit = defineEmits<{\n \"item-click\": [item: RsSidebarItem];\n \"close-mobile\": [];\n \"expanded-change\": [expanded: boolean];\n \"module-select\": [module: RsSidebarModule];\n}>();\n\nconst isHovered = ref(false);\nconst activeParent = ref<RsSidebarItem | null>(null);\nconst isModuleMenuOpen = ref(false);\nconst rootElement = ref<HTMLElement | null>(null);\n\nconst visibleItems = computed(() => props.items.filter(isVisible));\nconst visibleFooterItems = computed(() => props.footerItems.filter(isVisible));\nconst visibleModules = computed(() => props.modules);\nconst activeModule = computed(\n () =>\n props.modules.find((module) => module.active) ??\n props.modules.find((module) => module.text === props.title) ??\n props.modules[0] ??\n null,\n);\nconst displayedHeaderTitle = computed(() => activeParent.value?.label || activeModule.value?.text || props.title);\nconst moduleMenuItems = computed<MenuItem[]>(() =>\n visibleModules.value.map((module) => ({\n class: [\n \"rs-sidebar__module-option\",\n {\n \"rs-sidebar__module-option--active\": module.active || module.text === displayedHeaderTitle.value,\n \"rs-sidebar__module-option--disabled\": module.disabled,\n },\n ],\n command: () => selectModule(module),\n disabled: module.disabled,\n label: module.text,\n })),\n);\n\nconst displayedItems = computed(() =>\n activeParent.value ? activeParent.value.children?.filter(isVisible) ?? [] : visibleItems.value,\n);\n\nconst isExpanded = computed(() => props.expanded || props.mobileOpen || isHovered.value);\nconst hasHeaderAction = computed(() => props.mobileOpen || !!activeParent.value);\nconst hasModuleSelector = computed(() => !activeParent.value && props.modules.length > 0);\n\nconst rootClass = computed(() => [\n \"rs-sidebar\",\n `rs-sidebar--${props.variant}`,\n {\n \"rs-sidebar--expanded\": isExpanded.value,\n \"rs-sidebar--mobile-open\": props.mobileOpen,\n \"rs-sidebar--submenu\": !!activeParent.value,\n },\n]);\n\nwatch(\n () => props.mobileOpen,\n (isOpen) => {\n if (!isOpen) {\n activeParent.value = null;\n }\n\n isModuleMenuOpen.value = false;\n },\n);\n\nwatch(isExpanded, (expanded) => {\n if (!expanded) {\n activeParent.value = null;\n }\n\n emit(\"expanded-change\", expanded);\n});\n\nwatch(\n () => activeParent.value,\n () => {\n isModuleMenuOpen.value = false;\n },\n);\n\nonMounted(() => {\n document.addEventListener(\"pointerdown\", handleDocumentPointerDown);\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener(\"pointerdown\", handleDocumentPointerDown);\n});\n\nfunction isVisible(item: RsSidebarItem) {\n return item.visible !== false;\n}\n\nfunction hasVisibleChildren(item: RsSidebarItem) {\n return (item.children ?? []).some(isVisible);\n}\n\nfunction setHovered(value: boolean) {\n if (!props.expandOnHover || props.mobileOpen) {\n return;\n }\n\n isHovered.value = value;\n if (!value) {\n isModuleMenuOpen.value = false;\n }\n}\n\nfunction handleItemClick(item: RsSidebarItem) {\n if (item.disabled) {\n return;\n }\n\n if (hasVisibleChildren(item)) {\n activeParent.value = item;\n return;\n }\n\n emit(\"item-click\", item);\n}\n\nfunction goBack() {\n activeParent.value = null;\n}\n\nfunction closeMobile() {\n activeParent.value = null;\n isModuleMenuOpen.value = false;\n emit(\"close-mobile\");\n}\n\nfunction toggleModuleMenu() {\n if (!hasModuleSelector.value || !isExpanded.value) {\n return;\n }\n\n isModuleMenuOpen.value = !isModuleMenuOpen.value;\n}\n\nfunction selectModule(module: RsSidebarModule) {\n if (module.disabled) {\n return;\n }\n\n isModuleMenuOpen.value = false;\n emit(\"module-select\", module);\n\n if (props.navigateOnModuleSelect && typeof window !== \"undefined\" && module.link) {\n window.location.href = module.link;\n }\n}\n\nfunction handleDocumentPointerDown(event: PointerEvent) {\n if (!isModuleMenuOpen.value || !rootElement.value) {\n return;\n }\n\n if (!rootElement.value.contains(event.target as Node)) {\n isModuleMenuOpen.value = false;\n }\n}\n</script>\n\n<template>\n <aside\n ref=\"rootElement\"\n :aria-label=\"ariaLabel\"\n :class=\"rootClass\"\n @mouseenter=\"setHovered(true)\"\n @mouseleave=\"setHovered(false)\"\n >\n <slot\n name=\"header\"\n :expanded=\"isExpanded\"\n :active-parent=\"activeParent\"\n :close-mobile=\"closeMobile\"\n :go-back=\"goBack\"\n >\n <header class=\"rs-sidebar__header\">\n <div\n :class=\"[\n 'rs-sidebar__brand',\n {\n 'rs-sidebar__brand--trigger': hasModuleSelector,\n },\n ]\"\n >\n <button\n v-if=\"hasModuleSelector\"\n class=\"rs-sidebar__module-trigger\"\n type=\"button\"\n :aria-expanded=\"isModuleMenuOpen\"\n aria-haspopup=\"menu\"\n @click=\"toggleModuleMenu\"\n >\n <RsIcon :name=\"icon\" />\n <span class=\"rs-sidebar__title\">{{ displayedHeaderTitle }}</span>\n <RsIcon\n class=\"rs-sidebar__module-chevron\"\n :name=\"isModuleMenuOpen ? 'arrow_drop_up' : 'arrow_drop_down'\"\n size=\"sm\"\n />\n </button>\n\n <template v-else>\n <RsIcon :name=\"icon\" />\n <span class=\"rs-sidebar__title\">{{ displayedHeaderTitle }}</span>\n </template>\n </div>\n\n <slot\n name=\"header-action\"\n :active-parent=\"activeParent\"\n :close-mobile=\"closeMobile\"\n :go-back=\"goBack\"\n >\n <button\n v-if=\"hasHeaderAction\"\n class=\"rs-sidebar__header-button\"\n type=\"button\"\n :aria-label=\"activeParent ? 'Volver' : 'Cerrar menu'\"\n @click=\"activeParent ? goBack() : closeMobile()\"\n >\n <RsIcon :name=\"activeParent ? 'arrow_left' : 'close'\" />\n </button>\n </slot>\n </header>\n\n <Menu\n v-if=\"hasModuleSelector && isModuleMenuOpen\"\n class=\"rs-sidebar__module-menu\"\n :model=\"moduleMenuItems\"\n :pt=\"{\n root: { role: 'menu' },\n }\"\n />\n </slot>\n\n <div class=\"rs-sidebar__content\">\n <nav class=\"rs-sidebar__nav\" aria-label=\"Secciones\">\n <ul class=\"rs-sidebar__list\">\n <li v-for=\"item in displayedItems\" :key=\"item.id\" class=\"rs-sidebar__list-item\">\n <button\n :class=\"[\n 'rs-sidebar__item',\n {\n 'rs-sidebar__item--active': item.active,\n 'rs-sidebar__item--disabled': item.disabled,\n 'rs-sidebar__item--parent': hasVisibleChildren(item),\n },\n ]\"\n type=\"button\"\n :disabled=\"item.disabled\"\n @click=\"handleItemClick(item)\"\n >\n <slot name=\"item\" :item=\"item\" :expanded=\"isExpanded\">\n <RsIcon\n v-if=\"item.icon\"\n class=\"rs-sidebar__item-icon\"\n :name=\"item.icon\"\n />\n <span class=\"rs-sidebar__item-label\">{{ item.label }}</span>\n <RsIcon\n v-if=\"hasVisibleChildren(item)\"\n class=\"rs-sidebar__item-chevron\"\n name=\"chevron_right\"\n size=\"sm\"\n />\n </slot>\n </button>\n </li>\n </ul>\n </nav>\n\n <slot name=\"footer\" :items=\"visibleFooterItems\" :expanded=\"isExpanded\">\n <nav\n v-if=\"visibleFooterItems.length > 0\"\n class=\"rs-sidebar__footer\"\n aria-label=\"Acciones secundarias\"\n >\n <ul class=\"rs-sidebar__list\">\n <li v-for=\"item in visibleFooterItems\" :key=\"item.id\" class=\"rs-sidebar__list-item\">\n <button\n :class=\"[\n 'rs-sidebar__item',\n 'rs-sidebar__item--footer',\n {\n 'rs-sidebar__item--active': item.active,\n 'rs-sidebar__item--disabled': item.disabled,\n },\n ]\"\n type=\"button\"\n :disabled=\"item.disabled\"\n @click=\"handleItemClick(item)\"\n >\n <RsIcon\n v-if=\"item.icon\"\n class=\"rs-sidebar__item-icon\"\n :name=\"item.icon\"\n />\n <span class=\"rs-sidebar__item-label\">{{ item.label }}</span>\n </button>\n </li>\n </ul>\n </nav>\n </slot>\n </div>\n </aside>\n</template>\n\n<style src=\"./RsSidebar.css\"></style>\n","import type { App, Plugin } from \"vue\";\n\nimport RsAccountSelector from \"./components/RsAccountSelector\";\nimport RsIcon from \"./components/RsIcon\";\nimport RsSidebar from \"./components/RsSidebar\";\n\nexport const components = [RsAccountSelector, RsIcon, RsSidebar] as const;\n\nexport const RobosophyUiVue: Plugin = {\n install(app: App) {\n for (const component of components) {\n app.component(component.name ?? \"\", component);\n }\n },\n};\n\nexport default RobosophyUiVue;\n"],"names":["_createElementBlock","_createElementVNode","_hoisted_2","_createVNode","_unref","_normalizeClass","RsIcon","_renderSlot","_hoisted_1","_openBlock","_hoisted_3","_toDisplayString","_createBlock","_Teleport","_normalizeStyle","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_9","_hoisted_10","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_Fragment","_renderList","_mergeProps","_withModifiers","RsAccountSelector","RsSidebar"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AASA,UAAM,eAAe,CAAC,KAAK,GAAG,GAAG;AAEjC,UAAM,QAAQ;AAUd,aAAS,WAAW,OAAuB;AACzC,aAAO,aAAa;AAAA,QAAO,CAAC,SAAS,MACnC,KAAK,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,UAAU,KAAK,IAAI,IAAI;AAAA,MAAA;AAAA,IAE1D;AAEA,UAAM,aAAa,SAAS,MAAM;AAChC,YAAM,SAAS,MAAM;AACrB,YAAM,OAAO,MAAM;AAEnB,UAAI,cAAc;AAClB,YAAM,UAAU,WAAW,MAAM,KAAK;AACtC,UAAI,YAAY,GAAG;AACjB,sBAAc,UAAU,IAAI,QAAQ,OAAO,KAAK,SAAS,KAAK,IAAI,OAAO,CAAC;AAAA,MAC5E;AAEA,YAAM,aAAa,MAAM,OAAO,UAAU;AAE1C,aAAO,YAAY,MAAM,IAAI,IAAI,GAAG,WAAW,GAAG,UAAU;AAAA,IAC9D,CAAC;AAED,UAAM,WAAW,SAAS,MAAM;AAC9B,UAAI,OAAO,MAAM,SAAS,iBAAiB,MAAM;AACjD,UAAI,MAAM,SAAS,KAAM,QAAO;AAChC,UAAI,MAAM,SAAS,KAAM,QAAO;AAChC,aAAO;AAAA,IACT,CAAC;AAED,UAAM,YAAY,SAAS,MAAM;AAAA,MAC/B;AAAA,MACA,YAAY,MAAM,MAAM;AAAA,MACxB,YAAY,MAAM,KAAK;AAAA,MACvB;AAAA,QACE,wBAAwB,MAAM;AAAA,QAC9B,eAAe,MAAM,SAAS;AAAA,QAC9B,eAAe,MAAM,SAAS;AAAA,QAC9B,eAAe,MAAM,SAAS;AAAA,MAAA;AAAA,IAChC,CACD;AAED,UAAM,YAAY,SAAS,OAAO;AAAA,MAChC,mBAAmB;AAAA,MACnB,kBAAkB,GAAG,SAAS,KAAK;AAAA,IAAA,EACnC;AAEF,UAAM,aAAa,SAAS,MAAO,MAAM,YAAY,SAAY,MAAO;AACxE,UAAM,OAAO,SAAS,MAAO,MAAM,YAAY,QAAQ,MAAU;;0BAI/DA,mBAWM,OAAA;AAAA,QAVH,eAAa,WAAA;AAAA,QACb,cAAY,QAAA;AAAA,QACZ,sBAAO,UAAA,KAAS;AAAA,QAChB,MAAM,KAAA;AAAA,QACN,sBAAO,UAAA,KAAS;AAAA,QAChB,OAAO,SAAA;AAAA,QACP,QAAQ,SAAA;AAAA,QACT,MAAK;AAAA,MAAA;QAELC,mBAA0B,OAAA,EAApB,MAAM,WAAA,SAAU,MAAA,GAAAC,YAAA;AAAA,MAAA;;;;AC7E1B,MAAM,kBAAkB;AAEjB,SAAS,YAAY,MAAc,UAA8B,IAAI;AAC1E,QAAM,SAAuB,QAAQ,UAAU;AAC/C,QAAM,iBAAiB,KAAK,KAAA;AAE5B,MAAI,CAAC,gBAAgB,KAAK,cAAc,GAAG;AACzC,UAAM,IAAI,MAAM,wCAAwC,IAAI,GAAG;AAAA,EACjE;AAEA,SAAO,mCAAmC,MAAM,YAAY,cAAc;AAC5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA,UAAM,QAAQ;AAad,UAAM,OAAO;AASb,UAAM,UAAU,IAAwB,IAAI;AAC5C,UAAM,WAAW,IAAwB,IAAI;AAC7C,UAAM,eAAe,IAAI,KAAK;AAE9B,UAAM,eAAe;AAAA,MACnB,+BAA+B,MAAM;AAAA,MACrC,oCAAoC;AAAA,MACpC,gCAAgC;AAAA,MAChC,+BAA+B;AAAA,MAC/B,+BAA+B;AAAA,MAC/B,gCAAgC;AAAA,MAChC,gCAAgC;AAAA,IAAA;AAGlC,UAAM,gBAAgB,IAA4B,EAAE;AAEpD,QAAI,YAA2B;AAE/B,UAAM,eAAe,SAAS,MAAM,MAAM,eAAe,IAAI;AAC7D,UAAM,SAAS;AAAA,MAAS,MACtB,aAAa,QAAQ,QAAQ,MAAM,UAAU,IAAI,aAAa;AAAA,IAAA;AAEhE,UAAM,YAAY,SAAS,OAAO;AAAA,MAChC,+BAA+B,MAAM;AAAA,IAAA,EACrC;AAEF,UAAM,gBAAgB,SAAS,MAAM;AACnC,UAAI,MAAM,OAAO;AACf,eAAO,MAAM;AAAA,MACf;AAEA,aAAO,MAAM,SAAS,SAAS,IAC3B,YAAY,MAAM,SAAS,MAAM,aACjC;AAAA,IACN,CAAC;AAED,UAAM,iBAAiB;AAAA,MAAS,MAC9B,MAAM,QAAQ,OAAO,CAAC,WAAW,OAAO,YAAY,KAAK;AAAA,IAAA;AAE3D,UAAM,uBAAuB;AAAA,MAAS,MACpC,MAAM,cAAc,OAAO,CAAC,WAAW,OAAO,YAAY,KAAK;AAAA,IAAA;AAEjE,UAAM,qBAAqB,SAAS,MAAM,MAAM,SAAS,SAAS,CAAC;AACnE,UAAM,gBAAyC;AAAA,MAC7C,IAAI;AAAA,MACJ,OAAO;AAAA,IAAA;AAGT,aAAS,kBAAkB,QAAiC;AAC1D,aAAO,OAAO,YAAY,WACtB,EAAE,UAAU,UAAmB,UAAU,MAAM,SAAS,KAAA,IACxD,EAAE,UAAU,aAAsB,UAAU,MAAM,SAAS,KAAA;AAAA,IACjE;AAEA,aAAS,kBAAkB,QAAiC;AAC1D,aAAO,OAAO,YAAY,WACtB,EAAE,UAAU,UAAmB,MAAM,KAAA,IACrC,EAAE,UAAU,aAAsB,MAAM,KAAA;AAAA,IAC9C;AAEA,aAAS,WAAW,QAAiC;AACnD,UAAI,CAAC,OAAO,UAAU;AACpB,aAAK,UAAU,MAAM;AACrB,sBAAA;AAAA,MACF;AAAA,IACF;AAEA,aAAS,iBAAiB,QAAiC;AACzD,UAAI,CAAC,OAAO,UAAU;AACpB,aAAK,iBAAiB,MAAM;AAC5B,sBAAA;AAAA,MACF;AAAA,IACF;AAEA,aAAS,cAAc,SAAmC;AACxD,UAAI,CAAC,QAAQ,UAAU,CAAC,QAAQ,UAAU;AACxC,aAAK,kBAAkB,OAAO;AAC9B,sBAAA;AAAA,MACF;AAAA,IACF;AAEA,aAAS,YAAY,UAAmB;AACtC,cAAQ,UAAU,KAAA,KAAU,KAAK,MAAM,GAAG,CAAC;AAAA,IAC7C;AAEA,aAAS,QAAQ,UAAmB;AAClC,UAAI,CAAC,aAAa,OAAO;AACvB,qBAAa,QAAQ;AAAA,MACvB;AAEA,WAAK,qBAAqB,QAAQ;AAElC,UAAI,UAAU;AACZ,aAAK,MAAM;AAAA,MACb,OAAO;AACL,aAAK,OAAO;AAAA,MACd;AAAA,IACF;AAEA,aAAS,iBAAiB;AACxB,cAAQ,CAAC,OAAO,KAAK;AAAA,IACvB;AAEA,aAAS,gBAAgB;AACvB,UAAI,OAAO,OAAO;AAChB,gBAAQ,KAAK;AAAA,MACf;AAAA,IACF;AAEA,aAAS,sBAAsB;AAC7B,YAAM,OAAO,QAAQ;AACrB,YAAM,QAAQ,SAAS;AAEvB,UAAI,CAAC,QAAQ,CAAC,OAAO;AACnB;AAAA,MACF;AAEA,YAAM,gBAAgB,OAAO;AAC7B,YAAM,kBAAkB;AACxB,YAAM,WAAW,KAAK,sBAAA;AACtB,YAAM,YAAY,MAAM,sBAAA;AACxB,YAAM,YAAY,SAAS,OAAO,UAAU,SAAS,gBAAgB;AACrE,YAAM,WAAW,SAAS,QAAQ,UAAU,SAAS;AAErD,UAAI;AACJ,UAAI,WAAW;AACb,eAAO,SAAS;AAAA,MAClB,WAAW,UAAU;AACnB,eAAO,SAAS,QAAQ,UAAU;AAAA,MACpC,OAAO;AACL,eAAO,KAAK;AAAA,UACV;AAAA,UACA,KAAK,IAAI,SAAS,MAAM,gBAAgB,kBAAkB,UAAU,KAAK;AAAA,QAAA;AAAA,MAE7E;AAEA,oBAAc,QAAQ;AAAA,QACpB,UAAU;AAAA,QACV,KAAK,GAAG,SAAS,SAAS,CAAC;AAAA,QAC3B,MAAM,GAAG,IAAI;AAAA,MAAA;AAAA,IAEjB;AAEA,aAAS,qBAAqB;AAC5B,UAAI,OAAO,OAAO;AAChB,aAAK,oBAAA;AAAA,MACP;AAAA,IACF;AAEA,aAAS,eAAe;AACtB,UAAI,OAAO,OAAO;AAChB,YAAI,cAAc,MAAM;AACtB,sBAAY,OAAO,sBAAsB,MAAM;AAC7C,wBAAY;AACZ,iBAAK,oBAAA;AAAA,UACP,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,aAAS,0BAA0B,OAAqB;AACtD,YAAM,SAAS,MAAM;AAErB,UACE,kBAAkB,QAClB,QAAQ,SACR,CAAC,QAAQ,MAAM,SAAS,MAAM,KAC9B,CAAC,SAAS,OAAO,SAAS,MAAM,GAChC;AACA,sBAAA;AAAA,MACF;AAAA,IACF;AAEA,cAAU,MAAM;AACd,eAAS,iBAAiB,eAAe,yBAAyB;AAClE,aAAO,iBAAiB,UAAU,kBAAkB;AACpD,aAAO,iBAAiB,UAAU,cAAc,EAAE,SAAS,MAAM;AAEjE,UAAI,OAAO,OAAO;AAChB,aAAK,oBAAA;AAAA,MACP;AAAA,IACF,CAAC;AAED,oBAAgB,MAAM;AACpB,eAAS,oBAAoB,eAAe,yBAAyB;AACrE,aAAO,oBAAoB,UAAU,kBAAkB;AACvD,aAAO,oBAAoB,UAAU,YAAY;AAEjD,UAAI,cAAc,MAAM;AACtB,6BAAqB,SAAS;AAAA,MAChC;AAAA,IACF,CAAC;AAED,UAAM,QAAQ,CAAC,SAAS;AACtB,UAAI,MAAM;AACR,aAAK,SAAA,EAAW,KAAK,mBAAmB;AAAA,MAC1C;AAAA,IACF,CAAC;;0BAICF,mBA+MM,OAAA;AAAA,iBA/MG;AAAA,QAAJ,KAAI;AAAA,QAAU,OAAM;AAAA,QAA4B,sBAAO,UAAA,KAAS;AAAA,MAAA;QACnEG,YAkCSC,MAAA,MAAA,GAAA;AAAA,UAjCN,iBAAe,OAAA;AAAA,UACf,cAAY,QAAA;AAAA,UACb,iBAAc;AAAA,UACb,OAAKC,eAAA;AAAA;oDAA4F,OAAA,MAAA;AAAA,UAAM;UAIxG,MAAA;AAAA,UACC,uBAAY,gBAAc,CAAA,MAAA,CAAA;AAAA,QAAA;2BAE3B,MAKE;AAAA,YALFF,YAKEC,MAAAE,WAAA,GAAA;AAAA,cAJA,OAAM;AAAA,cACN,QAAO;AAAA,cACP,MAAK;AAAA,cACJ,MAAM;AAAA,YAAA;YAETC,WAgBO,KAAA,QAAA,kBAAA,EAhBsB,MAAM,QAAA,KAAA,GAAnC,MAgBO;AAAA,cAfLN,mBAcO,QAdPO,cAcO;AAAA,gBAZG,QAAA,KAAK,0BADbR,mBAKE,OAAA;AAAA;kBAHA,OAAM;AAAA,kBACL,KAAK,QAAA,KAAK;AAAA,kBACV,KAAK,QAAA,KAAK,QAAQ,QAAA,KAAK;AAAA,gBAAA,8BAE1BS,aAAAT,mBAMO,QANPU,cAMOC,gBADF,YAAY,QAAA,KAAK,QAAQ,CAAA,GAAA,CAAA;AAAA,cAAA;;;;;QAMV,OAAA,sBAA1BC,YAyKWC,UAAA;AAAA;UAzKD,IAAG;AAAA,QAAA;UACXZ,mBAuKQ,WAAA;AAAA,qBAtKF;AAAA,YAAJ,KAAI;AAAA,YACH,aAAW,QAAA,WAAW;AAAA,YACvB,OAAM;AAAA,YACL,OAAKa,eAAA,CAAG,cAAc,cAAA,KAAa,CAAA;AAAA,UAAA;YAEtCb,mBAsES,UAtETc,cAsES;AAAA,cArEPR,WA8BO,KAAA,QAAA,eAAA,EA9BmB,MAAM,QAAA,KAAA,GAAhC,MA8BO;AAAA,gBA7BLN,mBA4BO,QA5BPe,cA4BO;AAAA,kBA3BLf,mBAgBO,QAhBPgB,cAgBO;AAAA,oBAZG,QAAA,KAAK,0BADbjB,mBAKE,OAAA;AAAA;sBAHA,OAAM;AAAA,sBACL,KAAK,QAAA,KAAK;AAAA,sBACV,KAAK,QAAA,KAAK,QAAQ,QAAA,KAAK;AAAA,oBAAA,8BAE1BS,aAAAT,mBAMO,QANPkB,cAMOP,gBADF,YAAY,QAAA,KAAK,QAAQ,CAAA,GAAA,CAAA;AAAA,kBAAA;kBAIxB,QAAA,KAAK,sBADbF,aAAAT,mBASO,QATPmB,eASO;AAAA,oBALLlB,mBAIE,OAAA;AAAA,sBAHA,OAAM;AAAA,sBACL,KAAK,QAAA,KAAK;AAAA,sBACV,KAAK,QAAA,KAAK,QAAQ,QAAA,KAAK;AAAA,oBAAA;;;;cAMhCA,mBAMM,OANNmB,eAMM;AAAA,gBALJnB,mBAA6D,KAA7DoB,eAA6DV,gBAApB,cAAA,KAAa,GAAA,CAAA;AAAA,gBAC7C,QAAA,KAAK,QAAdF,UAAA,GAAAT,mBAEI,KAFJsB,eAEIX,gBADC,QAAA,KAAK,IAAI,GAAA,CAAA;gBAEdV,mBAA0D,KAA1DsB,eAA0DZ,gBAAjB,QAAA,KAAK,KAAK,GAAA,CAAA;AAAA,cAAA;cAGrDJ,WA4BO,KAAA,QAAA,WAAA,EA5Be,SAAS,eAAA,MAAA,GAA/B,MA4BO;AAAA,gBA3BLN,mBA0BM,OA1BN,aA0BM;AAAA,kBAzBY,eAAA,MAAe,SAAM,sBACnCD,mBAWSwB,UAAA,EAAA,KAAA,KAAAC,WAVU,eAAA,OAAc,CAAxB,WAAM;AADf,2BAAAhB,aAAAG,YAWSR,eAXTsB,WAWS;AAAA,sBATN,KAAK,OAAO;AAAA,sBACb,OAAM;AAAA,sBACL,UAAU,OAAO;AAAA,sBAClB,MAAK;AAAA,oBAAA,GACG,EAAA,SAAA,QAAA,kBAAkB,MAAM,GAAA;AAAA,sBAC/B,SAAKC,cAAA,CAAA,WAAO,WAAW,MAAM,GAAA,CAAA,MAAA,CAAA;AAAA,oBAAA;uCAE9B,MAA+B;AAAA,wBAA/B1B,mBAA+B,QAAA,MAAAU,gBAAtB,OAAO,KAAK,GAAA,CAAA;AAAA,wBACP,OAAO,qBAArBC,YAA2DR,MAAAE,WAAA,GAAA;AAAA;0BAA/B,MAAM,OAAO;AAAA,0BAAM,MAAK;AAAA,wBAAA;;;;4CAGxDM,YAUSR,MAAA,MAAA,GAAA;AAAA;oBARP,OAAM;AAAA,oBACN,UAAS;AAAA,oBACT,UAAA;AAAA,oBACA,SAAA;AAAA,oBACA,MAAK;AAAA,oBACJ,SAAK,OAAA,CAAA,MAAA,OAAA,CAAA,IAAAuB,cAAA,CAAA,WAAO,WAAW,aAAa,GAAA,CAAA,MAAA,CAAA;AAAA,kBAAA;qCACtC,MAED,CAAA,GAAA,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA;AAAA,sCAFC,mBAED,EAAA;AAAA,oBAAA;;;;;;YAKG,QAAA,wBAAT3B,mBAEI,KAFJ,aAAqD,uBAErD,KAEiB,QAAA,SAAS,WAAM,IAAhCO,WAEO,kCAFP,MAEO;AAAA,cADLN,mBAAyD,KAAzD,aAAyDU,gBAAhB,QAAA,SAAS,GAAA,CAAA;AAAA,YAAA,KAGpC,mBAAA,SAAhBF,aAAAT,mBA0DM,OA1DN,aA0DM;AAAA,gCAzDJA,mBAwDSwB,UAAA,MAAAC,WAvDW,QAAA,UAAQ,CAAnB,YAAO;oCADhBb,YAwDSR,MAAA,MAAA,GAAA;AAAA,kBAtDN,KAAK,QAAQ;AAAA,kBACb,OAAKC,eAAA;AAAA;;sBAAoH,wCAAA,QAAQ;AAAA,sBAAgE,0CAAA,QAAQ;AAAA,oBAAA;AAAA;kBAOzM,UAAU,QAAQ,UAAU,QAAQ;AAAA,kBACrC,MAAA;AAAA,kBACA,UAAS;AAAA,kBACR,SAAKsB,cAAA,CAAA,WAAO,cAAc,OAAO,GAAA,CAAA,MAAA,CAAA;AAAA,gBAAA;mCAElC,MAkBO;AAAA,oBAlBPpB,WAkBO,KAAA,QAAA,kBAAA,EAlBsB,QAAA,GAA7B,MAkBO;AAAA,sBAjBLN,mBAgBO,QAhBP,aAgBO;AAAA,wBAZG,QAAQ,0BADhBD,mBAKE,OAAA;AAAA;0BAHA,OAAM;AAAA,0BACL,KAAK,QAAQ;AAAA,0BACb,KAAK,QAAQ;AAAA,wBAAA,6BAEhBS,aAAAT,mBAMO,QANP,aAMOW,gBADF,YAAY,QAAQ,QAAQ,CAAA,GAAA,CAAA;AAAA,sBAAA;;oBAKrCV,mBAcO,QAdP,aAcO;AAAA,sBAbLA,mBAES,QAFT,aAESU,gBADP,QAAQ,KAAK,GAAA,CAAA;AAAA,sBAEfV,mBASO,QAAA;AAAA,wBARJ,OAAKI,eAAA;AAAA;0BAA0E,QAAQ;;yBAOrFM,gBAAA,QAAQ,SAAS,QAAA,aAAa,QAAA,UAAU,GAAA,CAAA;AAAA,oBAAA;oBAI/CV,mBAIO,QAJP,aAIO;AAAA,sBAHLM,WAEO,KAAA,QAAA,oBAAA,EAFwB,QAAA,GAA/B,MAEO;AAAA,wBADLJ,YAAuBC,MAAAE,WAAA,GAAA,EAAf,MAAK,SAAO;AAAA,sBAAA;;;;;;;YAM5BC,WAoBO,KAAA,QAAA,UAAA,EApBc,SAAS,qBAAA,MAAA,GAA9B,MAoBO;AAAA,cAlBG,qBAAA,MAAqB,SAAM,KADnCE,aAAAT,mBAkBS,UAlBT,aAkBS;AAAA,kCAdPA,mBAaSwB,UAAA,MAAAC,WAZU,qBAAA,OAAoB,CAA9B,WAAM;AADf,yBAAAhB,aAAAG,YAaSR,eAbTsB,WAaS;AAAA,oBAXN,KAAK,OAAO;AAAA,oBACb,OAAM;AAAA,oBACL,UAAU,OAAO;AAAA,oBAClB,MAAK;AAAA,kBAAA,GACG,EAAA,SAAA,QAAA,kBAAkB,MAAM,GAAA;AAAA,oBAC/B,SAAKC,cAAA,CAAA,WAAO,iBAAiB,MAAM,GAAA,CAAA,MAAA,CAAA;AAAA,kBAAA;qCAEpC,MAGO;AAAA,sBAHP1B,mBAGO,QAHP,aAGO;AAAA,wBAFLA,mBAA+B,QAAA,MAAAU,gBAAtB,OAAO,KAAK,GAAA,CAAA;AAAA,wBACP,OAAO,qBAArBC,YAA2DR,MAAAE,WAAA,GAAA;AAAA;0BAA/B,MAAM,OAAO;AAAA,0BAAM,MAAK;AAAA,wBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1alE,UAAM,QAAQ;AAad,UAAM,OAAO;AAOb,UAAM,YAAY,IAAI,KAAK;AAC3B,UAAM,eAAe,IAA0B,IAAI;AACnD,UAAM,mBAAmB,IAAI,KAAK;AAClC,UAAM,cAAc,IAAwB,IAAI;AAEhD,UAAM,eAAe,SAAS,MAAM,MAAM,MAAM,OAAO,SAAS,CAAC;AACjE,UAAM,qBAAqB,SAAS,MAAM,MAAM,YAAY,OAAO,SAAS,CAAC;AAC7E,UAAM,iBAAiB,SAAS,MAAM,MAAM,OAAO;AACnD,UAAM,eAAe;AAAA,MACnB,MACE,MAAM,QAAQ,KAAK,CAAC,WAAW,OAAO,MAAM,KAC5C,MAAM,QAAQ,KAAK,CAAC,WAAW,OAAO,SAAS,MAAM,KAAK,KAC1D,MAAM,QAAQ,CAAC,KACf;AAAA,IAAA;AAEJ,UAAM,uBAAuB,SAAS,MAAM,aAAa,OAAO,SAAS,aAAa,OAAO,QAAQ,MAAM,KAAK;AAChH,UAAM,kBAAkB;AAAA,MAAqB,MAC3C,eAAe,MAAM,IAAI,CAAC,YAAY;AAAA,QACpC,OAAO;AAAA,UACL;AAAA,UACA;AAAA,YACE,qCAAqC,OAAO,UAAU,OAAO,SAAS,qBAAqB;AAAA,YAC3F,uCAAuC,OAAO;AAAA,UAAA;AAAA,QAChD;AAAA,QAEF,SAAS,MAAM,aAAa,MAAM;AAAA,QAClC,UAAU,OAAO;AAAA,QACjB,OAAO,OAAO;AAAA,MAAA,EACd;AAAA,IAAA;AAGJ,UAAM,iBAAiB;AAAA,MAAS,MAC9B,aAAa,QAAQ,aAAa,MAAM,UAAU,OAAO,SAAS,KAAK,CAAA,IAAK,aAAa;AAAA,IAAA;AAG3F,UAAM,aAAa,SAAS,MAAM,MAAM,YAAY,MAAM,cAAc,UAAU,KAAK;AACvF,UAAM,kBAAkB,SAAS,MAAM,MAAM,cAAc,CAAC,CAAC,aAAa,KAAK;AAC/E,UAAM,oBAAoB,SAAS,MAAM,CAAC,aAAa,SAAS,MAAM,QAAQ,SAAS,CAAC;AAExF,UAAM,YAAY,SAAS,MAAM;AAAA,MAC/B;AAAA,MACA,eAAe,MAAM,OAAO;AAAA,MAC5B;AAAA,QACE,wBAAwB,WAAW;AAAA,QACnC,2BAA2B,MAAM;AAAA,QACjC,uBAAuB,CAAC,CAAC,aAAa;AAAA,MAAA;AAAA,IACxC,CACD;AAED;AAAA,MACE,MAAM,MAAM;AAAA,MACZ,CAAC,WAAW;AACV,YAAI,CAAC,QAAQ;AACX,uBAAa,QAAQ;AAAA,QACvB;AAEA,yBAAiB,QAAQ;AAAA,MAC3B;AAAA,IAAA;AAGF,UAAM,YAAY,CAAC,aAAa;AAC9B,UAAI,CAAC,UAAU;AACb,qBAAa,QAAQ;AAAA,MACvB;AAEA,WAAK,mBAAmB,QAAQ;AAAA,IAClC,CAAC;AAED;AAAA,MACE,MAAM,aAAa;AAAA,MACnB,MAAM;AACJ,yBAAiB,QAAQ;AAAA,MAC3B;AAAA,IAAA;AAGF,cAAU,MAAM;AACd,eAAS,iBAAiB,eAAe,yBAAyB;AAAA,IACpE,CAAC;AAED,oBAAgB,MAAM;AACpB,eAAS,oBAAoB,eAAe,yBAAyB;AAAA,IACvE,CAAC;AAED,aAAS,UAAU,MAAqB;AACtC,aAAO,KAAK,YAAY;AAAA,IAC1B;AAEA,aAAS,mBAAmB,MAAqB;AAC/C,cAAQ,KAAK,YAAY,CAAA,GAAI,KAAK,SAAS;AAAA,IAC7C;AAEA,aAAS,WAAW,OAAgB;AAClC,UAAI,CAAC,MAAM,iBAAiB,MAAM,YAAY;AAC5C;AAAA,MACF;AAEA,gBAAU,QAAQ;AAClB,UAAI,CAAC,OAAO;AACV,yBAAiB,QAAQ;AAAA,MAC3B;AAAA,IACF;AAEA,aAAS,gBAAgB,MAAqB;AAC5C,UAAI,KAAK,UAAU;AACjB;AAAA,MACF;AAEA,UAAI,mBAAmB,IAAI,GAAG;AAC5B,qBAAa,QAAQ;AACrB;AAAA,MACF;AAEA,WAAK,cAAc,IAAI;AAAA,IACzB;AAEA,aAAS,SAAS;AAChB,mBAAa,QAAQ;AAAA,IACvB;AAEA,aAAS,cAAc;AACrB,mBAAa,QAAQ;AACrB,uBAAiB,QAAQ;AACzB,WAAK,cAAc;AAAA,IACrB;AAEA,aAAS,mBAAmB;AAC1B,UAAI,CAAC,kBAAkB,SAAS,CAAC,WAAW,OAAO;AACjD;AAAA,MACF;AAEA,uBAAiB,QAAQ,CAAC,iBAAiB;AAAA,IAC7C;AAEA,aAAS,aAAa,QAAyB;AAC7C,UAAI,OAAO,UAAU;AACnB;AAAA,MACF;AAEA,uBAAiB,QAAQ;AACzB,WAAK,iBAAiB,MAAM;AAE5B,UAAI,MAAM,0BAA0B,OAAO,WAAW,eAAe,OAAO,MAAM;AAChF,eAAO,SAAS,OAAO,OAAO;AAAA,MAChC;AAAA,IACF;AAEA,aAAS,0BAA0B,OAAqB;AACtD,UAAI,CAAC,iBAAiB,SAAS,CAAC,YAAY,OAAO;AACjD;AAAA,MACF;AAEA,UAAI,CAAC,YAAY,MAAM,SAAS,MAAM,MAAc,GAAG;AACrD,yBAAiB,QAAQ;AAAA,MAC3B;AAAA,IACF;;0BAIEN,mBA+IQ,SAAA;AAAA,iBA9IF;AAAA,QAAJ,KAAI;AAAA,QACH,cAAY,QAAA;AAAA,QACZ,sBAAO,UAAA,KAAS;AAAA,QAChB,oDAAY,WAAU,IAAA;AAAA,QACtB,oDAAY,WAAU,KAAA;AAAA,MAAA;QAEvBO,WAiEO,KAAA,QAAA,UAAA;AAAA,UA/DJ,UAAU,WAAA;AAAA,UACV,cAAe,aAAA;AAAA,UACf;AAAA,UACA;AAAA,QAAA,GALH,MAiEO;AAAA,UA1DLN,mBAgDS,UAhDT,YAgDS;AAAA,YA/CPA,mBA6BM,OAAA;AAAA,cA5BH,OAAKI,eAAA;AAAA;;gDAA+F,kBAAA;AAAA,gBAAA;AAAA;;cAQ7F,kBAAA,sBADRL,mBAeS,UAAA;AAAA;gBAbP,OAAM;AAAA,gBACN,MAAK;AAAA,gBACJ,iBAAe,iBAAA;AAAA,gBAChB,iBAAc;AAAA,gBACb,SAAO;AAAA,cAAA;gBAERG,YAAuBC,MAAAE,WAAA,GAAA,EAAd,MAAM,QAAA,KAAA,GAAI,MAAA,GAAA,CAAA,MAAA,CAAA;AAAA,gBACnBL,mBAAiE,QAAjE,YAAiEU,gBAA9B,qBAAA,KAAoB,GAAA,CAAA;AAAA,gBACvDR,YAIEC,MAAAE,WAAA,GAAA;AAAA,kBAHA,OAAM;AAAA,kBACL,MAAM,iBAAA,QAAgB,kBAAA;AAAA,kBACvB,MAAK;AAAA,gBAAA;iDAITN,mBAGWwB,UAAA,EAAA,KAAA,KAAA;AAAA,gBAFTrB,YAAuBC,MAAAE,WAAA,GAAA,EAAd,MAAM,QAAA,KAAA,GAAI,MAAA,GAAA,CAAA,MAAA,CAAA;AAAA,gBACnBL,mBAAiE,QAAjE,YAAiEU,gBAA9B,qBAAA,KAAoB,GAAA,CAAA;AAAA,cAAA;;YAI3DJ,WAeO,KAAA,QAAA,iBAAA;AAAA,cAbJ,cAAe,aAAA;AAAA,cACf;AAAA,cACA;AAAA,YAAA,GAJH,MAeO;AAAA,cARG,gBAAA,sBADRP,mBAQS,UAAA;AAAA;gBANP,OAAM;AAAA,gBACN,MAAK;AAAA,gBACJ,cAAY,aAAA,QAAY,WAAA;AAAA,gBACxB,SAAK,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAE,aAAA,QAAe,OAAA,IAAW,YAAA;AAAA,cAAW;gBAE7CG,YAAwDC,MAAAE,WAAA,GAAA;AAAA,kBAA/C,MAAM,aAAA,QAAY,eAAA;AAAA,gBAAA;;;;UAMzB,kBAAA,SAAqB,iBAAA,sBAD7BM,YAOER,MAAA,IAAA,GAAA;AAAA;YALA,OAAM;AAAA,YACL,OAAO,gBAAA;AAAA,YACP,IAAI;AAAA;;UAEJ;;QAILH,mBAoEM,OApEN,YAoEM;AAAA,UAnEJA,mBAiCM,OAjCN,YAiCM;AAAA,YAhCJA,mBA+BK,MA/BL,YA+BK;AAAA,gCA9BHD,mBA6BKwB,UAAA,MAAAC,WA7Bc,eAAA,OAAc,CAAtB,SAAI;oCAAfzB,mBA6BK,MAAA;AAAA,kBA7B+B,KAAK,KAAK;AAAA,kBAAI,OAAM;AAAA,gBAAA;kBACtDC,mBA2BS,UAAA;AAAA,oBA1BN,OAAKI,eAAA;AAAA;;wBAAwG,4BAAA,KAAK;AAAA,wBAAwD,8BAAA,KAAK;AAAA,wBAAwD,4BAAA,mBAAmB,IAAI;AAAA,sBAAA;AAAA;oBAQ/P,MAAK;AAAA,oBACJ,UAAU,KAAK;AAAA,oBACf,SAAK,CAAA,WAAE,gBAAgB,IAAI;AAAA,kBAAA;oBAE5BE,WAaO,KAAA,QAAA,QAAA;AAAA,sBAbY;AAAA,sBAAa,UAAU,WAAA;AAAA,oBAAA,GAA1C,MAaO;AAAA,sBAXG,KAAK,qBADbK,YAIER,MAAAE,WAAA,GAAA;AAAA;wBAFA,OAAM;AAAA,wBACL,MAAM,KAAK;AAAA,sBAAA;sBAEdL,mBAA4D,QAA5D,aAA4DU,gBAApB,KAAK,KAAK,GAAA,CAAA;AAAA,sBAE1C,mBAAmB,IAAI,kBAD/BC,YAKER,MAAAE,WAAA,GAAA;AAAA;wBAHA,OAAM;AAAA,wBACN,MAAK;AAAA,wBACL,MAAK;AAAA,sBAAA;;;;;;;UAQjBC,WA+BO,KAAA,QAAA,UAAA;AAAA,YA/Bc,OAAO,mBAAA;AAAA,YAAqB,UAAU,WAAA;AAAA,UAAA,GAA3D,MA+BO;AAAA,YA7BG,mBAAA,MAAmB,SAAM,KADjCE,aAAAT,mBA6BM,OA7BN,aA6BM;AAAA,cAxBJC,mBAuBK,MAvBL,aAuBK;AAAA,kCAtBHD,mBAqBKwB,UAAA,MAAAC,WArBc,mBAAA,OAAkB,CAA1B,SAAI;sCAAfzB,mBAqBK,MAAA;AAAA,oBArBmC,KAAK,KAAK;AAAA,oBAAI,OAAM;AAAA,kBAAA;oBAC1DC,mBAmBS,UAAA;AAAA,sBAlBN,OAAKI,eAAA;AAAA;;;0BAA4J,4BAAA,KAAK;AAAA,0BAA0D,8BAAA,KAAK;AAAA,wBAAA;AAAA;sBAQtO,MAAK;AAAA,sBACJ,UAAU,KAAK;AAAA,sBACf,SAAK,CAAA,WAAE,gBAAgB,IAAI;AAAA,oBAAA;sBAGpB,KAAK,qBADbO,YAIER,MAAAE,WAAA,GAAA;AAAA;wBAFA,OAAM;AAAA,wBACL,MAAM,KAAK;AAAA,sBAAA;sBAEdL,mBAA4D,QAA5D,aAA4DU,gBAApB,KAAK,KAAK,GAAA,CAAA;AAAA,oBAAA;;;;;;;;;;;AChU3D,MAAM,aAAa,CAACiB,aAAmBtB,aAAQuB,SAAS;AAExD,MAAM,iBAAyB;AAAA,EACpC,QAAQ,KAAU;AAChB,eAAW,aAAa,YAAY;AAClC,UAAI,UAAU,UAAU,QAAQ,IAAI,SAAS;AAAA,IAC/C;AAAA,EACF;AACF;"}
|