@robosophy/ui-vue 1.1.11 → 1.1.13
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/ai-context.md +6 -3
- package/components.md +5 -0
- package/dist/components/RsIcon/RsIcon.types.d.ts +2 -0
- package/dist/components/RsIcon/RsIcon.types.d.ts.map +1 -1
- package/dist/components/RsIcon/RsIcon.vue.d.ts +1 -0
- package/dist/components/RsIcon/RsIcon.vue.d.ts.map +1 -1
- package/dist/components/RsSidebar/RsSidebar.vue.d.ts +2 -2
- package/dist/components/RsSidebar/RsSidebar.vue.d.ts.map +1 -1
- package/dist/icon-manifest.json +7 -0
- package/dist/index.css +53 -25
- package/dist/index.js +62 -21
- package/dist/index.js.map +1 -1
- package/dist/plugin.d.ts +1 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +133 -4
- package/dist/vite.js.map +1 -1
- package/icon-scanner.md +262 -167
- package/package.json +1 -1
package/ai-context.md
CHANGED
|
@@ -27,13 +27,16 @@ Use this package for shared Vue 3 UI components.
|
|
|
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
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
|
-
- **Icon detection rules:** the scanner detects
|
|
30
|
+
- **Icon detection rules:** the scanner detects 8 patterns. Read `icon-scanner.md` for the full reference. Key rules for agent work:
|
|
31
31
|
- `<RsIcon name="..." />` — always detected (Pattern 1)
|
|
32
32
|
- `rsPrimeIcon("...")` — detected (Pattern 2)
|
|
33
33
|
- `{ icon: "..." }` in objects — detected with weight/family extraction (Pattern 3)
|
|
34
|
-
- `// @robosophy-icon: name` magic comments — detected (Pattern 4, use for
|
|
34
|
+
- `// @robosophy-icon: name` magic comments — detected (Pattern 4, use as last resort for dynamic values)
|
|
35
35
|
- Arrays like `const iconNames = ["home", ...]` — detected if variable name contains "icon" (Pattern 5)
|
|
36
|
-
-
|
|
36
|
+
- Objects like `const iconMap = { key: "home" }` — detected if variable name contains "icon" (Pattern 5b)
|
|
37
|
+
- `<CustomComponent icon="..." />` — detected for PascalCase components (Pattern 6a)
|
|
38
|
+
- `<ForwardIcon icon="..." />` — detected if the component proxies to `<RsIcon :name>` (Pattern 6b)
|
|
39
|
+
- `<RsIcon :name="variable" />` — NOT detected; use a data source with `icon:` (Pattern 3) or magic comment as last resort
|
|
37
40
|
- `<RsIcon :name="item.icon" />` — NOT detected from template, but the `icon: "..."` in the data source IS detected by Pattern 3
|
|
38
41
|
- 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`.
|
|
39
42
|
- Keep props focused on stable component API. Use slots for flexible content.
|
package/components.md
CHANGED
|
@@ -73,10 +73,15 @@ icons and inlines it in the HTML. No fonts are loaded.
|
|
|
73
73
|
<template>
|
|
74
74
|
<RsIcon name="home" />
|
|
75
75
|
<RsIcon name="settings" family="rounded" color="primary" />
|
|
76
|
+
<RsIcon name="manage_accounts" notification />
|
|
77
|
+
<RsIcon name="manage_accounts" notification notification-color="#d80115" />
|
|
76
78
|
<Button label="Inicio" :icon="rsPrimeIcon('home')" />
|
|
77
79
|
</template>
|
|
78
80
|
```
|
|
79
81
|
|
|
82
|
+
`notification` muestra un punto de aviso sobre el ícono (por defecto amarillo del design system,
|
|
83
|
+
`--rs-color-yellow-500`). `notificationColor` permite sobreescribir el color del punto.
|
|
84
|
+
|
|
80
85
|
For dynamic icon names that the scanner cannot see, add them to
|
|
81
86
|
`robosophyMaterialSymbols({ include: [...] })`.
|
|
82
87
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RsIcon.types.d.ts","sourceRoot":"","sources":["../../../src/components/RsIcon/RsIcon.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;AAE5D,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AAErD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAEjH,MAAM,MAAM,YAAY,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAEnE,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"RsIcon.types.d.ts","sourceRoot":"","sources":["../../../src/components/RsIcon/RsIcon.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;AAE5D,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AAErD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAEjH,MAAM,MAAM,YAAY,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAEnE,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,CAAC"}
|
|
@@ -7,6 +7,7 @@ declare const __VLS_export: import("vue").DefineComponent<RsIconProps, {}, {}, {
|
|
|
7
7
|
weight: import("./RsIcon.types").RsIconWeight;
|
|
8
8
|
grade: number;
|
|
9
9
|
interactive: boolean;
|
|
10
|
+
notification: boolean;
|
|
10
11
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
11
12
|
declare const _default: typeof __VLS_export;
|
|
12
13
|
export default _default;
|
|
@@ -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":"AA0HA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AA4JlD,QAAA,MAAM,YAAY;;;;;;;;;6EAGhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { RsSidebarItem, RsSidebarModule, RsSidebarProps } from "./RsSidebar.types";
|
|
1
|
+
import type { RsSidebarItem, RsSidebarModule, RsSidebarProps, RsSidebarVariant } from "./RsSidebar.types";
|
|
2
2
|
declare function goBack(): void;
|
|
3
3
|
declare function closeMobile(): void;
|
|
4
4
|
declare var __VLS_1: {
|
|
@@ -56,7 +56,7 @@ declare const __VLS_base: import("vue").DefineComponent<RsSidebarProps, {}, {},
|
|
|
56
56
|
ariaLabel: string;
|
|
57
57
|
title: string;
|
|
58
58
|
icon: string;
|
|
59
|
-
variant:
|
|
59
|
+
variant: RsSidebarVariant;
|
|
60
60
|
footerItems: RsSidebarItem[];
|
|
61
61
|
modules: RsSidebarModule[];
|
|
62
62
|
navigateOnModuleSelect: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RsSidebar.vue.d.ts","sourceRoot":"","sources":["../../../src/components/RsSidebar/RsSidebar.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RsSidebar.vue.d.ts","sourceRoot":"","sources":["../../../src/components/RsSidebar/RsSidebar.vue"],"names":[],"mappings":"AAqXA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AA4J1G,iBAAS,MAAM,SAEd;AAED,iBAAS,WAAW,SAInB;AA0ZD,QAAA,IAAI,OAAO;;;;;;;;;;;;;CAAU,EAAE,QAAQ;;;;;;;;;;;;CAAW,EAAE,QAAQ;;;CAAW,EAAE,QAAQ;;;CAAY,CAAE;AACvF,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,GAC3C;IAAE,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,GACrD;IAAE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,GAC1C;IAAE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,CAAC;AAO/C,QAAA,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;6EAId,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AAWzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
|
package/dist/icon-manifest.json
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"outlined": [
|
|
3
|
+
"account_balance_wallet",
|
|
4
|
+
"account_circle",
|
|
3
5
|
"alarm",
|
|
4
6
|
"arrow_drop_down",
|
|
5
7
|
"arrow_drop_up",
|
|
6
8
|
"arrow_left",
|
|
9
|
+
"article",
|
|
7
10
|
"block",
|
|
11
|
+
"business",
|
|
8
12
|
"check_circle",
|
|
9
13
|
"chevron_right",
|
|
10
14
|
"close",
|
|
@@ -13,6 +17,7 @@
|
|
|
13
17
|
"favorite",
|
|
14
18
|
"help",
|
|
15
19
|
"home",
|
|
20
|
+
"inbox",
|
|
16
21
|
"info",
|
|
17
22
|
"inventory",
|
|
18
23
|
"login",
|
|
@@ -35,6 +40,8 @@
|
|
|
35
40
|
],
|
|
36
41
|
"rounded": [
|
|
37
42
|
"arrow_drop_down",
|
|
43
|
+
"check_circle",
|
|
44
|
+
"home",
|
|
38
45
|
"settings"
|
|
39
46
|
],
|
|
40
47
|
"sharp": [
|
package/dist/index.css
CHANGED
|
@@ -37,6 +37,24 @@
|
|
|
37
37
|
.rs-icon--inherit {
|
|
38
38
|
color: currentColor;
|
|
39
39
|
}
|
|
40
|
+
|
|
41
|
+
.rs-icon-wrap {
|
|
42
|
+
position: relative;
|
|
43
|
+
display: inline-flex;
|
|
44
|
+
align-items: center;
|
|
45
|
+
justify-content: center;
|
|
46
|
+
vertical-align: middle;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.rs-icon__notification {
|
|
50
|
+
position: absolute;
|
|
51
|
+
top: 0;
|
|
52
|
+
right: 0;
|
|
53
|
+
width: 10px;
|
|
54
|
+
height: 10px;
|
|
55
|
+
border-radius: 50%;
|
|
56
|
+
background-color: var(--rs-color-yellow-500, #ff9001);
|
|
57
|
+
}
|
|
40
58
|
.rs-icon {
|
|
41
59
|
align-items: center;
|
|
42
60
|
color: var(--rs-icon-color, currentColor);
|
|
@@ -69,6 +87,22 @@
|
|
|
69
87
|
.rs-icon--inherit {
|
|
70
88
|
color: currentColor;
|
|
71
89
|
}
|
|
90
|
+
.rs-icon-wrap {
|
|
91
|
+
position: relative;
|
|
92
|
+
display: inline-flex;
|
|
93
|
+
align-items: center;
|
|
94
|
+
justify-content: center;
|
|
95
|
+
vertical-align: middle;
|
|
96
|
+
}
|
|
97
|
+
.rs-icon__notification {
|
|
98
|
+
position: absolute;
|
|
99
|
+
top: 0;
|
|
100
|
+
right: 0;
|
|
101
|
+
width: 10px;
|
|
102
|
+
height: 10px;
|
|
103
|
+
border-radius: 50%;
|
|
104
|
+
background-color: var(--rs-color-yellow-500, #ff9001);
|
|
105
|
+
}
|
|
72
106
|
.rs-account-selector-host {
|
|
73
107
|
--rs-account-selector-width: 270px;
|
|
74
108
|
--rs-account-selector-background: var(--rs-color-surface-primary, #ffffff);
|
|
@@ -338,7 +372,7 @@
|
|
|
338
372
|
--rs-sidebar-muted: var(--rs-color-text-secondary, #909090);
|
|
339
373
|
--rs-sidebar-active: var(--rs-color-text-button-tertiary, #48a0d4);
|
|
340
374
|
--rs-sidebar-hover: var(--rs-color-button-blue-surface, #e6f6fb);
|
|
341
|
-
--rs-sidebar-width-collapsed:
|
|
375
|
+
--rs-sidebar-width-collapsed: 75px;
|
|
342
376
|
--rs-sidebar-width-expanded: 286px;
|
|
343
377
|
|
|
344
378
|
background: var(--rs-sidebar-background);
|
|
@@ -349,12 +383,12 @@
|
|
|
349
383
|
flex-direction: column;
|
|
350
384
|
flex-shrink: 0;
|
|
351
385
|
font-family: var(--rs-font-family, "Inter", sans-serif);
|
|
352
|
-
font-size:
|
|
386
|
+
font-size: 16px;
|
|
353
387
|
font-weight: 400;
|
|
354
388
|
gap: 52px;
|
|
355
389
|
height: 100%;
|
|
356
390
|
overflow: hidden;
|
|
357
|
-
transition: width
|
|
391
|
+
transition: width 0.3s ease-in-out;
|
|
358
392
|
will-change: width;
|
|
359
393
|
width: var(--rs-sidebar-width-collapsed);
|
|
360
394
|
}
|
|
@@ -388,8 +422,7 @@
|
|
|
388
422
|
position: relative;
|
|
389
423
|
box-sizing: border-box;
|
|
390
424
|
display: flex;
|
|
391
|
-
gap:
|
|
392
|
-
height: 88px;
|
|
425
|
+
gap: 10px;
|
|
393
426
|
justify-content: flex-start;
|
|
394
427
|
padding: 0;
|
|
395
428
|
}
|
|
@@ -398,9 +431,9 @@
|
|
|
398
431
|
display: flex;
|
|
399
432
|
color: var(--rs-sidebar-active);
|
|
400
433
|
flex: 1;
|
|
401
|
-
gap:
|
|
434
|
+
gap: 10px;
|
|
402
435
|
min-width: 0;
|
|
403
|
-
padding:
|
|
436
|
+
padding: 32px 24px;
|
|
404
437
|
}
|
|
405
438
|
.rs-sidebar__module-trigger {
|
|
406
439
|
align-items: center;
|
|
@@ -411,7 +444,7 @@
|
|
|
411
444
|
display: inline-flex;
|
|
412
445
|
justify-content: flex-start;
|
|
413
446
|
font: inherit;
|
|
414
|
-
gap:
|
|
447
|
+
gap: 10px;
|
|
415
448
|
min-width: 0;
|
|
416
449
|
appearance: none;
|
|
417
450
|
-webkit-appearance: none;
|
|
@@ -446,8 +479,8 @@
|
|
|
446
479
|
opacity: 0;
|
|
447
480
|
overflow: hidden;
|
|
448
481
|
transition:
|
|
449
|
-
max-width
|
|
450
|
-
opacity
|
|
482
|
+
max-width 0.3s ease-in-out,
|
|
483
|
+
opacity 0.3s ease-in-out;
|
|
451
484
|
white-space: nowrap;
|
|
452
485
|
}
|
|
453
486
|
.rs-sidebar--expanded .rs-sidebar__title,
|
|
@@ -561,27 +594,24 @@
|
|
|
561
594
|
align-items: center;
|
|
562
595
|
background: transparent;
|
|
563
596
|
border: 0;
|
|
564
|
-
border-right:
|
|
597
|
+
border-right: 4px solid transparent;
|
|
565
598
|
box-sizing: border-box;
|
|
566
599
|
color: var(--rs-sidebar-active);
|
|
567
600
|
cursor: pointer;
|
|
568
601
|
display: flex;
|
|
569
602
|
justify-content: flex-start;
|
|
570
603
|
font: inherit;
|
|
571
|
-
font-weight:
|
|
572
|
-
gap:
|
|
604
|
+
font-weight: 300;
|
|
605
|
+
gap: 10px;
|
|
573
606
|
appearance: none;
|
|
574
607
|
-webkit-appearance: none;
|
|
575
|
-
|
|
576
|
-
padding: 12px 0;
|
|
577
|
-
padding-left: 24px;
|
|
608
|
+
padding: 10px 24px;
|
|
578
609
|
text-align: left;
|
|
579
610
|
width: 100%;
|
|
580
611
|
}
|
|
581
612
|
.rs-sidebar__item:not(.rs-sidebar__item--footer):hover:not(:disabled),
|
|
582
613
|
.rs-sidebar__item:not(.rs-sidebar__item--footer):active:not(:disabled) {
|
|
583
614
|
background: var(--rs-sidebar-hover) !important;
|
|
584
|
-
color: var(--rs-sidebar-active);
|
|
585
615
|
}
|
|
586
616
|
.rs-sidebar__item:disabled {
|
|
587
617
|
color: var(--rs-sidebar-muted);
|
|
@@ -595,11 +625,11 @@
|
|
|
595
625
|
.rs-sidebar__footer {
|
|
596
626
|
align-items: center;
|
|
597
627
|
display: flex;
|
|
598
|
-
height: 88px;
|
|
599
628
|
margin-top: 52px;
|
|
600
629
|
}
|
|
601
630
|
.rs-sidebar__item--footer {
|
|
602
631
|
color: var(--rs-sidebar-color);
|
|
632
|
+
padding: 32px 24px;
|
|
603
633
|
}
|
|
604
634
|
.rs-sidebar__item--footer .rs-sidebar__item-icon {
|
|
605
635
|
color: inherit;
|
|
@@ -635,17 +665,15 @@
|
|
|
635
665
|
width: 100%;
|
|
636
666
|
z-index: 10000;
|
|
637
667
|
}
|
|
638
|
-
.rs-sidebar--mobile-open .rs-sidebar__header {
|
|
639
|
-
height: 88px;
|
|
640
|
-
}
|
|
641
668
|
.rs-sidebar--mobile-open .rs-sidebar__module-menu {
|
|
642
669
|
left: 16px;
|
|
643
670
|
min-width: min(320px, calc(100% - 32px));
|
|
644
671
|
top: 88px;
|
|
645
672
|
}
|
|
646
673
|
.rs-sidebar--mobile-open .rs-sidebar__item {
|
|
647
|
-
font-size:
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
674
|
+
font-size: 16px;
|
|
675
|
+
padding: 20px 24px;
|
|
676
|
+
}
|
|
677
|
+
.rs-sidebar--mobile-open .rs-sidebar__item--footer {
|
|
678
|
+
padding: 32px 24px;
|
|
651
679
|
}
|
package/dist/index.js
CHANGED
|
@@ -3,8 +3,14 @@ import "./index.css";
|
|
|
3
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 =
|
|
7
|
-
|
|
6
|
+
const _hoisted_1$2 = {
|
|
7
|
+
key: 0,
|
|
8
|
+
class: "rs-icon-wrap"
|
|
9
|
+
};
|
|
10
|
+
const _hoisted_2$2 = ["aria-hidden", "aria-label", "role", "width", "height"];
|
|
11
|
+
const _hoisted_3$2 = ["href"];
|
|
12
|
+
const _hoisted_4$2 = ["aria-hidden", "aria-label", "role", "width", "height"];
|
|
13
|
+
const _hoisted_5$2 = ["href"];
|
|
8
14
|
const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
9
15
|
...{
|
|
10
16
|
name: "RsIcon"
|
|
@@ -20,7 +26,9 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
|
20
26
|
grade: { default: 0 },
|
|
21
27
|
opticalSize: {},
|
|
22
28
|
interactive: { type: Boolean, default: false },
|
|
23
|
-
ariaLabel: {}
|
|
29
|
+
ariaLabel: {},
|
|
30
|
+
notification: { type: Boolean, default: false },
|
|
31
|
+
notificationColor: {}
|
|
24
32
|
},
|
|
25
33
|
setup(__props) {
|
|
26
34
|
const GRADE_VALUES = [200, 0, -25];
|
|
@@ -69,8 +77,30 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
|
69
77
|
}));
|
|
70
78
|
const ariaHidden = computed(() => props.ariaLabel ? void 0 : "true");
|
|
71
79
|
const role = computed(() => props.ariaLabel ? "img" : void 0);
|
|
80
|
+
const notificationStyle = computed(
|
|
81
|
+
() => props.notificationColor ? { backgroundColor: props.notificationColor } : void 0
|
|
82
|
+
);
|
|
72
83
|
return (_ctx, _cache) => {
|
|
73
|
-
return openBlock(), createElementBlock("
|
|
84
|
+
return __props.notification ? (openBlock(), createElementBlock("span", _hoisted_1$2, [
|
|
85
|
+
(openBlock(), createElementBlock("svg", {
|
|
86
|
+
"aria-hidden": ariaHidden.value,
|
|
87
|
+
"aria-label": __props.ariaLabel,
|
|
88
|
+
class: normalizeClass(rootClass.value),
|
|
89
|
+
role: role.value,
|
|
90
|
+
style: normalizeStyle(rootStyle.value),
|
|
91
|
+
width: iconSize.value,
|
|
92
|
+
height: iconSize.value,
|
|
93
|
+
fill: "currentColor"
|
|
94
|
+
}, [
|
|
95
|
+
createElementVNode("use", { href: symbolHref.value }, null, 8, _hoisted_3$2)
|
|
96
|
+
], 14, _hoisted_2$2)),
|
|
97
|
+
createElementVNode("span", {
|
|
98
|
+
class: "rs-icon__notification",
|
|
99
|
+
"aria-hidden": "true",
|
|
100
|
+
style: normalizeStyle(notificationStyle.value)
|
|
101
|
+
}, null, 4)
|
|
102
|
+
])) : (openBlock(), createElementBlock("svg", {
|
|
103
|
+
key: 1,
|
|
74
104
|
"aria-hidden": ariaHidden.value,
|
|
75
105
|
"aria-label": __props.ariaLabel,
|
|
76
106
|
class: normalizeClass(rootClass.value),
|
|
@@ -80,8 +110,8 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
|
80
110
|
height: iconSize.value,
|
|
81
111
|
fill: "currentColor"
|
|
82
112
|
}, [
|
|
83
|
-
createElementVNode("use", { href: symbolHref.value }, null, 8,
|
|
84
|
-
], 14,
|
|
113
|
+
createElementVNode("use", { href: symbolHref.value }, null, 8, _hoisted_5$2)
|
|
114
|
+
], 14, _hoisted_4$2));
|
|
85
115
|
};
|
|
86
116
|
}
|
|
87
117
|
});
|
|
@@ -558,7 +588,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
558
588
|
modules: { default: () => [] },
|
|
559
589
|
navigateOnModuleSelect: { type: Boolean, default: false },
|
|
560
590
|
title: { default: "" },
|
|
561
|
-
icon: { default:
|
|
591
|
+
icon: { default: void 0 },
|
|
562
592
|
expanded: { type: Boolean, default: false },
|
|
563
593
|
expandOnHover: { type: Boolean, default: true },
|
|
564
594
|
mobileOpen: { type: Boolean, default: false },
|
|
@@ -567,6 +597,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
567
597
|
},
|
|
568
598
|
emits: ["item-click", "close-mobile", "expanded-change", "module-select"],
|
|
569
599
|
setup(__props, { emit: __emit }) {
|
|
600
|
+
const variantIconMap = {
|
|
601
|
+
pc: "article",
|
|
602
|
+
alta: "account_circle",
|
|
603
|
+
cc: "account_balance_wallet",
|
|
604
|
+
pog: "account_balance_wallet",
|
|
605
|
+
cyo: "nest_eco_leaf"
|
|
606
|
+
};
|
|
570
607
|
const props = __props;
|
|
571
608
|
const emit = __emit;
|
|
572
609
|
const isHovered = ref(false);
|
|
@@ -581,18 +618,21 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
581
618
|
);
|
|
582
619
|
const displayedHeaderTitle = computed(() => activeModule.value?.text || props.title);
|
|
583
620
|
const moduleMenuItems = computed(
|
|
584
|
-
() => visibleModules.value.map((module) =>
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
"rs-sidebar__module-option
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
621
|
+
() => visibleModules.value.map((module) => {
|
|
622
|
+
const isCurrent = module.active || module.text === displayedHeaderTitle.value;
|
|
623
|
+
return {
|
|
624
|
+
class: [
|
|
625
|
+
"rs-sidebar__module-option",
|
|
626
|
+
{
|
|
627
|
+
"rs-sidebar__module-option--active": isCurrent,
|
|
628
|
+
"rs-sidebar__module-option--disabled": module.disabled || isCurrent
|
|
629
|
+
}
|
|
630
|
+
],
|
|
631
|
+
command: () => selectModule(module),
|
|
632
|
+
disabled: module.disabled || isCurrent,
|
|
633
|
+
label: module.text
|
|
634
|
+
};
|
|
635
|
+
})
|
|
596
636
|
);
|
|
597
637
|
const displayedItems = computed(
|
|
598
638
|
() => activeParent.value ? activeParent.value.children?.filter(isVisible) ?? [] : visibleItems.value
|
|
@@ -600,6 +640,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
600
640
|
const isExpanded = computed(() => props.expanded || props.mobileOpen || isHovered.value);
|
|
601
641
|
const hasHeaderAction = computed(() => props.mobileOpen);
|
|
602
642
|
const hasModuleSelector = computed(() => props.modules.length > 0);
|
|
643
|
+
const resolvedIcon = computed(() => props.icon ?? variantIconMap[props.variant]);
|
|
603
644
|
const rootClass = computed(() => [
|
|
604
645
|
"rs-sidebar",
|
|
605
646
|
`rs-sidebar--${props.variant}`,
|
|
@@ -725,7 +766,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
725
766
|
"aria-haspopup": "menu",
|
|
726
767
|
onClick: toggleModuleMenu
|
|
727
768
|
}, [
|
|
728
|
-
createVNode(unref(_sfc_main$2), { name:
|
|
769
|
+
createVNode(unref(_sfc_main$2), { name: resolvedIcon.value }, null, 8, ["name"]),
|
|
729
770
|
createElementVNode("span", _hoisted_4, toDisplayString(displayedHeaderTitle.value), 1),
|
|
730
771
|
createVNode(unref(_sfc_main$2), {
|
|
731
772
|
class: "rs-sidebar__module-chevron",
|
|
@@ -734,7 +775,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
734
775
|
size: "sm"
|
|
735
776
|
}, null, 8, ["name"])
|
|
736
777
|
], 8, _hoisted_3)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
|
737
|
-
createVNode(unref(_sfc_main$2), { name:
|
|
778
|
+
createVNode(unref(_sfc_main$2), { name: resolvedIcon.value }, null, 8, ["name"]),
|
|
738
779
|
createElementVNode("span", _hoisted_5, toDisplayString(displayedHeaderTitle.value), 1)
|
|
739
780
|
], 64))
|
|
740
781
|
], 2),
|