@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 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 5 patterns. Read `icon-scanner.md` for the full reference. Key rules for agent work:
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 props/variables)
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
- - `<RsIcon :name="variable" />` — NOT detected; add magic comment or `include`
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
 
@@ -13,6 +13,8 @@ export type RsIconProps = {
13
13
  opticalSize?: number;
14
14
  interactive?: boolean;
15
15
  ariaLabel?: string;
16
+ notification?: boolean;
17
+ notificationColor?: string;
16
18
  };
17
19
  export type RsPrimeIconOptions = {
18
20
  family?: RsIconFamily;
@@ -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;CACpB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,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":"AAiGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAyHlD,QAAA,MAAM,YAAY;;;;;;;;6EAGhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
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: import("./RsSidebar.types").RsSidebarVariant;
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":"AAwWA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AA+IxF,iBAAS,MAAM,SAEd;AAED,iBAAS,WAAW,SAInB;AAyZD,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"}
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"}
@@ -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: 72px;
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: 18px;
386
+ font-size: 16px;
353
387
  font-weight: 400;
354
388
  gap: 52px;
355
389
  height: 100%;
356
390
  overflow: hidden;
357
- transition: width 220ms cubic-bezier(0.4, 0, 0.2, 1);
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: 6px;
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: 6px;
434
+ gap: 10px;
402
435
  min-width: 0;
403
- padding: 0 24px;
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: 6px;
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 220ms cubic-bezier(0.4, 0, 0.2, 1),
450
- opacity 220ms cubic-bezier(0.4, 0, 0.2, 1);
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: 3px solid transparent;
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: 400;
572
- gap: 8px;
604
+ font-weight: 300;
605
+ gap: 10px;
573
606
  appearance: none;
574
607
  -webkit-appearance: none;
575
- height: 48px;
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: 18px;
648
- min-height: 48px;
649
- padding-bottom: 12px;
650
- padding-top: 12px;
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 = ["aria-hidden", "aria-label", "role", "width", "height"];
7
- const _hoisted_2$2 = ["href"];
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("svg", {
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, _hoisted_2$2)
84
- ], 14, _hoisted_1$2);
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: "nest_eco_leaf" },
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
- class: [
586
- "rs-sidebar__module-option",
587
- {
588
- "rs-sidebar__module-option--active": module.active || module.text === displayedHeaderTitle.value,
589
- "rs-sidebar__module-option--disabled": module.disabled
590
- }
591
- ],
592
- command: () => selectModule(module),
593
- disabled: module.disabled,
594
- label: module.text
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: __props.icon }, null, 8, ["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: __props.icon }, null, 8, ["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),