@robosophy/ui-vue 1.1.7 → 1.1.9

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.
@@ -1,6 +1,6 @@
1
1
  export type RsIconFamily = "outlined" | "rounded" | "sharp";
2
2
  export type RsIconSize = "sm" | "md" | "lg" | number;
3
- export type RsIconColor = "primary" | "secondary" | "success" | "warning" | "danger" | "inherit";
3
+ export type RsIconColor = "primary" | "secondary" | "success" | "warning" | "danger" | "inherit" | (string & {});
4
4
  export type RsIconWeight = 100 | 200 | 300 | 400 | 500 | 600 | 700;
5
5
  export type RsIconProps = {
6
6
  name: string;
@@ -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,CAAC;AAEjG,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;CACpB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,CAAC"}
@@ -1 +1 @@
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"}
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"}
@@ -22,6 +22,7 @@
22
22
  "nest_eco_leaf",
23
23
  "notifications",
24
24
  "package_2",
25
+ "palette",
25
26
  "person",
26
27
  "search",
27
28
  "sell",
package/dist/index.js CHANGED
@@ -24,6 +24,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
24
24
  },
25
25
  setup(__props) {
26
26
  const GRADE_VALUES = [200, 0, -25];
27
+ const SEMANTIC_COLORS = ["primary", "secondary", "success", "warning", "danger", "inherit"];
27
28
  const props = __props;
28
29
  function clampGrade(grade) {
29
30
  return GRADE_VALUES.reduce(
@@ -39,8 +40,12 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
39
40
  gradeSuffix = clamped > 0 ? `-grad${clamped}` : `-gradN${Math.abs(clamped)}`;
40
41
  }
41
42
  const fillSuffix = props.fill ? "-fill" : "";
42
- return `#rs-icon-${family}-${name}${gradeSuffix}${fillSuffix}`;
43
+ const weightSuffix = props.weight !== 400 ? `-wght${props.weight}` : "";
44
+ return `#rs-icon-${family}-${name}${gradeSuffix}${fillSuffix}${weightSuffix}`;
43
45
  });
46
+ const isCustomColor = computed(
47
+ () => !SEMANTIC_COLORS.includes(props.color)
48
+ );
44
49
  const iconSize = computed(() => {
45
50
  if (typeof props.size === "number") return props.size;
46
51
  if (props.size === "sm") return 18;
@@ -50,7 +55,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
50
55
  const rootClass = computed(() => [
51
56
  "rs-icon",
52
57
  `rs-icon--${props.family}`,
53
- `rs-icon--${props.color}`,
58
+ ...isCustomColor.value ? [] : [`rs-icon--${props.color}`],
54
59
  {
55
60
  "rs-icon--interactive": props.interactive,
56
61
  "rs-icon--sm": props.size === "sm",
@@ -59,7 +64,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
59
64
  }
60
65
  ]);
61
66
  const rootStyle = computed(() => ({
62
- "--rs-icon-color": void 0,
67
+ "--rs-icon-color": isCustomColor.value ? props.color : void 0,
63
68
  "--rs-icon-size": `${iconSize.value}px`
64
69
  }));
65
70
  const ariaHidden = computed(() => props.ariaLabel ? void 0 : "true");
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 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: \"\",\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 v-if=\"emptyText\" 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(() => 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);\nconst hasModuleSelector = computed(() => 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 color=\"secondary\"\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=\"Cerrar menu\"\n @click=\"closeMobile\"\n >\n <RsIcon name=\"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-if=\"activeParent\" class=\"rs-sidebar__list-item\">\n <button\n class=\"rs-sidebar__item rs-sidebar__item--back\"\n type=\"button\"\n @click=\"goBack()\"\n >\n <RsIcon\n class=\"rs-sidebar__item-icon\"\n name=\"arrow_left\"\n :fill=\"true\"\n />\n <span class=\"rs-sidebar__item-label\">{{ activeParent.label }}</span>\n </button>\n </li>\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","_hoisted_16","_Fragment","_renderList","_mergeProps","_withModifiers","RsAccountSelector","RsSidebar"],"mappings":"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"}
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;\nconst SEMANTIC_COLORS = [\"primary\", \"secondary\", \"success\", \"warning\", \"danger\", \"inherit\"] 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 const weightSuffix = props.weight !== 400 ? `-wght${props.weight}` : \"\";\n\n return `#rs-icon-${family}-${name}${gradeSuffix}${fillSuffix}${weightSuffix}`;\n});\n\nconst isCustomColor = computed(\n () => !(SEMANTIC_COLORS as readonly string[]).includes(props.color),\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 ...(isCustomColor.value ? [] : [`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\": isCustomColor.value ? props.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: \"\",\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 v-if=\"emptyText\" 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(() => 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);\nconst hasModuleSelector = computed(() => 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 color=\"secondary\"\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=\"Cerrar menu\"\n @click=\"closeMobile\"\n >\n <RsIcon name=\"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-if=\"activeParent\" class=\"rs-sidebar__list-item\">\n <button\n class=\"rs-sidebar__item rs-sidebar__item--back\"\n type=\"button\"\n @click=\"goBack()\"\n >\n <RsIcon\n class=\"rs-sidebar__item-icon\"\n name=\"arrow_left\"\n :fill=\"true\"\n />\n <span class=\"rs-sidebar__item-label\">{{ activeParent.label }}</span>\n </button>\n </li>\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","_hoisted_16","_Fragment","_renderList","_mergeProps","_withModifiers","RsAccountSelector","RsSidebar"],"mappings":"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"}
package/dist/vite.d.ts CHANGED
@@ -3,6 +3,7 @@ import type { RsIconFamily } from "./components/RsIcon";
3
3
  type IconInput = string | {
4
4
  family?: RsIconFamily;
5
5
  name: string;
6
+ weight?: number;
6
7
  };
7
8
  export type RsIconFontDisplay = "block" | "swap" | "fallback" | "optional";
8
9
  export type RobosophyMaterialSymbolsOptions = {
@@ -14,7 +15,7 @@ export type RobosophyMaterialSymbolsOptions = {
14
15
  roots?: string[];
15
16
  scan?: boolean;
16
17
  };
17
- type IconUsageMap = Map<RsIconFamily, Set<string>>;
18
+ type IconUsageMap = Map<RsIconFamily, Map<string, Set<number>>>;
18
19
  export declare function robosophyMaterialSymbols(options?: RobosophyMaterialSymbolsOptions): Plugin;
19
20
  export declare function collectMaterialSymbolUsages(config: Pick<ResolvedConfig, "root">, options?: RobosophyMaterialSymbolsOptions): Promise<IconUsageMap>;
20
21
  export declare function buildMaterialSymbolsCss(iconClasses: string): HtmlTagDescriptor[];
@@ -1 +1 @@
1
- {"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAA4B,MAAM,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAEhG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,KAAK,SAAS,GAAG,MAAM,GAAG;IAAE,MAAM,CAAC,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAClE,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;AAE3E,MAAM,MAAM,+BAA+B,GAAG;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,KAAK,YAAY,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAyBnD,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,+BAAoC,GAC5C,MAAM,CAsHR;AAqLD,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,EACpC,OAAO,GAAE,+BAAoC,GAC5C,OAAO,CAAC,YAAY,CAAC,CAmCvB;AAED,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,GAClB,iBAAiB,EAAE,CAUrB;AAuKD,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAI1E"}
1
+ {"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAA4B,MAAM,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAEhG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,KAAK,SAAS,GAAG,MAAM,GAAG;IAAE,MAAM,CAAC,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACnF,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;AAE3E,MAAM,MAAM,+BAA+B,GAAG;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,KAAK,YAAY,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAyBhE,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,+BAAoC,GAC5C,MAAM,CAwHR;AA4LD,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,EACpC,OAAO,GAAE,+BAAoC,GAC5C,OAAO,CAAC,YAAY,CAAC,CA0CvB;AAED,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,GAClB,iBAAiB,EAAE,CAUrB;AA0LD,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAY1E"}
package/dist/vite.js CHANGED
@@ -19,6 +19,7 @@ const internalIconNames = [
19
19
  const GITHUB_RAW = "https://raw.githubusercontent.com/google/material-design-icons/master/symbols/web";
20
20
  const CACHE_BASE = join("node_modules", ".cache", "robosophy-svgs");
21
21
  const BASE_OPSZ = 24;
22
+ const DEFAULT_WEIGHT = 400;
22
23
  const GRADE_VARIANTS = [0, -25, 200];
23
24
  function robosophyMaterialSymbols(options = {}) {
24
25
  const raw = (options.outputDir ?? "").trim().replace(/^\/+/, "");
@@ -31,10 +32,10 @@ function robosophyMaterialSymbols(options = {}) {
31
32
  function usageMapKey(usages) {
32
33
  const parts = [];
33
34
  for (const family of families) {
34
- const names = [...usages.get(family) ?? []].sort();
35
- if (names.length > 0) {
36
- parts.push(`${family}:${names.join(",")}`);
37
- }
35
+ const iconWeights = usages.get(family);
36
+ if (!iconWeights || iconWeights.size === 0) continue;
37
+ const entries = [...iconWeights.entries()].map(([name, weights]) => `${name}[${[...weights].sort().join(",")}]`).sort();
38
+ parts.push(`${family}:${entries.join(",")}`);
38
39
  }
39
40
  return parts.join("|") || "(empty)";
40
41
  }
@@ -123,7 +124,7 @@ function robosophyMaterialSymbols(options = {}) {
123
124
  }
124
125
  };
125
126
  }
126
- function buildSvgVariants() {
127
+ function buildSvgVariants(weight = DEFAULT_WEIGHT) {
127
128
  const variants = [];
128
129
  for (const grade of GRADE_VARIANTS) {
129
130
  const gradeSuffix = grade === 0 ? "" : grade > 0 ? `grad${grade}` : `gradN${Math.abs(grade)}`;
@@ -131,10 +132,12 @@ function buildSvgVariants() {
131
132
  for (const fill of [false, true]) {
132
133
  const fillSuffix = fill ? "fill1" : "";
133
134
  const symbolFillSuffix = fill ? "-fill" : "";
134
- const parts = [gradeSuffix, fillSuffix].filter(Boolean);
135
+ const weightSuffix = weight !== DEFAULT_WEIGHT ? `wght${weight}` : "";
136
+ const weightSymbolSuffix = weight !== DEFAULT_WEIGHT ? `-wght${weight}` : "";
137
+ const parts = [gradeSuffix, fillSuffix, weightSuffix].filter(Boolean);
135
138
  variants.push({
136
139
  suffix: parts.length > 0 ? `${parts.join("")}_${BASE_OPSZ}px` : `${BASE_OPSZ}px`,
137
- symbolSuffix: `${symbolGradeSuffix}${symbolFillSuffix}`
140
+ symbolSuffix: `${symbolGradeSuffix}${symbolFillSuffix}${weightSymbolSuffix}`
138
141
  });
139
142
  }
140
143
  }
@@ -190,39 +193,44 @@ function parseSvgPaths(svgContent) {
190
193
  async function generateSpriteAssets(usages, cacheDir, config) {
191
194
  const symbols = [];
192
195
  const iconClasses = [];
193
- const variants = buildSvgVariants();
194
196
  let totalFetched = 0;
195
197
  let totalBytes = 0;
196
198
  for (const family of families) {
197
- const names = [...usages.get(family) ?? []].sort();
198
- if (names.length === 0) continue;
199
- for (const name of names) {
200
- for (const variant of variants) {
201
- const symbolId = buildSymbolId(name, family, variant.symbolSuffix);
202
- const url = buildSvgUrl(name, family, variant.suffix);
203
- const cacheKey = createHash("sha256").update(url).digest("hex").slice(0, 12);
204
- let svgContent = cacheDir ? await loadSvgFromCache(cacheDir, cacheKey) : null;
205
- if (!svgContent) {
206
- svgContent = await fetchSvg(url);
207
- if (!svgContent) continue;
208
- if (cacheDir) {
209
- await saveSvgToCache(cacheDir, cacheKey, svgContent);
199
+ const iconWeights = usages.get(family);
200
+ if (!iconWeights || iconWeights.size === 0) continue;
201
+ for (const [name, weights] of [...iconWeights.entries()].sort()) {
202
+ for (const weight of [...weights].sort()) {
203
+ const variants = buildSvgVariants(weight);
204
+ for (const variant of variants) {
205
+ const symbolId = buildSymbolId(name, family, variant.symbolSuffix);
206
+ const url = buildSvgUrl(name, family, variant.suffix);
207
+ const cacheKey = createHash("sha256").update(url).digest("hex").slice(0, 12);
208
+ let svgContent = cacheDir ? await loadSvgFromCache(cacheDir, cacheKey) : null;
209
+ if (!svgContent) {
210
+ svgContent = await fetchSvg(url);
211
+ if (!svgContent) continue;
212
+ if (cacheDir) {
213
+ await saveSvgToCache(cacheDir, cacheKey, svgContent);
214
+ }
210
215
  }
216
+ const pathContent = parseSvgPaths(svgContent);
217
+ if (!pathContent) continue;
218
+ symbols.push(
219
+ `<symbol id="${symbolId}" viewBox="0 -960 960 960" fill="currentColor">${pathContent}</symbol>`
220
+ );
221
+ totalFetched++;
222
+ totalBytes += svgContent.length;
211
223
  }
212
- const pathContent = parseSvgPaths(svgContent);
213
- if (!pathContent) continue;
214
- symbols.push(
215
- `<symbol id="${symbolId}" viewBox="0 -960 960 960" fill="currentColor">${pathContent}</symbol>`
216
- );
217
- totalFetched++;
218
- totalBytes += svgContent.length;
219
224
  }
220
225
  }
221
226
  }
222
227
  const iconNames = /* @__PURE__ */ new Set();
223
228
  for (const family of families) {
224
- for (const name of usages.get(family) ?? []) {
225
- iconNames.add(name);
229
+ const iconWeights = usages.get(family);
230
+ if (iconWeights) {
231
+ for (const name of iconWeights.keys()) {
232
+ iconNames.add(name);
233
+ }
226
234
  }
227
235
  }
228
236
  for (const name of [...iconNames].sort()) {
@@ -231,7 +239,7 @@ async function generateSpriteAssets(usages, cacheDir, config) {
231
239
  const spriteContent = `<defs>${symbols.join("")}</defs>`;
232
240
  const fullSprite = `<svg xmlns="http://www.w3.org/2000/svg" style="display:none" aria-hidden="true">${spriteContent}</svg>`;
233
241
  const css = iconClasses.join("\n");
234
- const totalIcons = [...usages.values()].reduce((sum, s) => sum + s.size, 0);
242
+ const totalIcons = [...usages.values()].reduce((sum, m) => sum + m.size, 0);
235
243
  if (totalIcons > 0) {
236
244
  const summary = formatDetectedMaterialSymbols(usages);
237
245
  config.logger.info(
@@ -266,7 +274,14 @@ async function collectMaterialSymbolUsages(config, options = {}) {
266
274
  }
267
275
  }
268
276
  for (const icon of options.include ?? []) {
269
- addUsage(usages, typeof icon === "string" ? { family: defaultFamily, name: icon } : icon);
277
+ const resolved = typeof icon === "string" ? { family: defaultFamily, name: icon } : icon;
278
+ if (resolved.weight !== void 0) {
279
+ addUsage(usages, resolved);
280
+ } else {
281
+ for (const w of VALID_WEIGHTS) {
282
+ addUsage(usages, { ...resolved, weight: w });
283
+ }
284
+ }
270
285
  }
271
286
  if (options.scan !== false) {
272
287
  const roots = options.roots ?? [join(config.root, "src")];
@@ -297,12 +312,15 @@ function collectFromSource(source, usages) {
297
312
  const rawName = attrs.name ?? attrs[":name"];
298
313
  const hasFamily = "family" in attrs || ":family" in attrs;
299
314
  const rawFamily = attrs.family ?? attrs[":family"] ?? "";
315
+ const rawWeight = attrs.weight ?? attrs[":weight"] ?? "";
316
+ const weight = rawWeight ? parseInt(rawWeight, 10) : DEFAULT_WEIGHT;
317
+ const resolvedWeight = !isNaN(weight) && weight > 0 ? weight : DEFAULT_WEIGHT;
300
318
  if (rawName) {
301
319
  const familyList = resolveFamilies(rawFamily, hasFamily);
302
320
  const names = resolveNames(rawName);
303
321
  for (const family of familyList) {
304
322
  for (const name of names) {
305
- addUsage(usages, { family, name });
323
+ addUsage(usages, { family, name, weight: resolvedWeight });
306
324
  }
307
325
  }
308
326
  }
@@ -337,13 +355,23 @@ function parseStaticAttributes(source) {
337
355
  function unwrapStaticValue(value) {
338
356
  return value.replace(/^['"](.+)['"]$/, "$1");
339
357
  }
358
+ const VALID_WEIGHTS = [100, 200, 300, 400, 500, 600, 700];
340
359
  function addUsage(usages, icon) {
341
360
  const family = icon.family ?? defaultFamily;
342
361
  const name = icon.name.trim();
362
+ const weight = icon.weight ?? DEFAULT_WEIGHT;
343
363
  if (!families.includes(family) || !iconNamePattern.test(name)) {
344
364
  return;
345
365
  }
346
- usages.get(family)?.add(name);
366
+ if (!VALID_WEIGHTS.includes(weight)) return;
367
+ const iconMap = usages.get(family);
368
+ if (!iconMap) return;
369
+ const existing = iconMap.get(name);
370
+ if (existing) {
371
+ existing.add(weight);
372
+ } else {
373
+ iconMap.set(name, /* @__PURE__ */ new Set([weight]));
374
+ }
347
375
  }
348
376
  async function loadIconManifest() {
349
377
  try {
@@ -395,7 +423,7 @@ function resolveFamilies(rawFamily, hasFamily = true) {
395
423
  return [...families];
396
424
  }
397
425
  function createUsageMap() {
398
- return new Map(families.map((family) => [family, /* @__PURE__ */ new Set()]));
426
+ return new Map(families.map((family) => [family, /* @__PURE__ */ new Map()]));
399
427
  }
400
428
  async function listSourceFiles(root) {
401
429
  try {
@@ -415,7 +443,12 @@ async function listSourceFiles(root) {
415
443
  }
416
444
  }
417
445
  function formatDetectedMaterialSymbols(usages) {
418
- return families.map((family) => `${family}: ${[...usages.get(family) ?? []].sort().join(", ")}`).join("\n");
446
+ return families.map((family) => {
447
+ const iconWeights = usages.get(family);
448
+ if (!iconWeights || iconWeights.size === 0) return `${family}: (none)`;
449
+ const entries = [...iconWeights.entries()].map(([name, weights]) => `${name}[${[...weights].sort().join(",")}]`).sort().join(", ");
450
+ return `${family}: ${entries}`;
451
+ }).join("\n");
419
452
  }
420
453
  export {
421
454
  buildMaterialSymbolsCss,
package/dist/vite.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"vite.js","sources":["../src/vite.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { mkdir, readFile, readdir, writeFile } from \"node:fs/promises\";\nimport { extname, join, sep } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { HtmlTagDescriptor, IndexHtmlTransformResult, Plugin, ResolvedConfig } from \"vite\";\n\nimport type { RsIconFamily } from \"./components/RsIcon\";\n\ntype IconInput = string | { family?: RsIconFamily; name: string };\nexport type RsIconFontDisplay = \"block\" | \"swap\" | \"fallback\" | \"optional\";\n\nexport type RobosophyMaterialSymbolsOptions = {\n outputDir?: string;\n fontDisplay?: RsIconFontDisplay;\n fontVariant?: string;\n include?: IconInput[];\n preload?: boolean;\n roots?: string[];\n scan?: boolean;\n};\n\ntype IconUsageMap = Map<RsIconFamily, Set<string>>;\n\nconst families = [\"outlined\", \"rounded\", \"sharp\"] as const satisfies readonly RsIconFamily[];\nconst defaultFamily: RsIconFamily = \"outlined\";\nconst iconNamePattern = /^[a-z0-9_]+$/;\nconst sourceExtensions = new Set([\".js\", \".jsx\", \".mjs\", \".ts\", \".tsx\", \".vue\"]);\nconst skippedDirs = new Set([\".git\", \"dist\", \"node_modules\", \"storybook-static\"]);\nconst internalIconNames = [\n \"arrow_drop_down\",\n \"arrow_drop_up\",\n \"arrow_left\",\n \"chevron_right\",\n \"close\",\n \"login\",\n \"nest_eco_leaf\",\n];\n\nconst GITHUB_RAW =\n \"https://raw.githubusercontent.com/google/material-design-icons/master/symbols/web\";\nconst CACHE_BASE = join(\"node_modules\", \".cache\", \"robosophy-svgs\");\nconst BASE_OPSZ = 24;\nconst DEFAULT_WEIGHT = 400;\n\nconst GRADE_VARIANTS = [0, -25, 200] as const;\n\nexport function robosophyMaterialSymbols(\n options: RobosophyMaterialSymbolsOptions = {},\n): Plugin {\n const raw = (options.outputDir ?? \"\").trim().replace(/^\\/+/, \"\");\n const outputDir = raw\n .split(\"/\")\n .filter((part) => part && part !== \"..\")\n .join(\"/\") || \"assets\";\n let config: ResolvedConfig;\n let cacheDir: string;\n let cachedAssets: GeneratedMaterialSymbolsAssets | null = null;\n let cachedUsagesKey = \"\";\n let needsRegeneration = true;\n\n function usageMapKey(usages: IconUsageMap): string {\n const parts: string[] = [];\n for (const family of families) {\n const names = [...(usages.get(family) ?? [])].sort();\n if (names.length > 0) {\n parts.push(`${family}:${names.join(\",\")}`);\n }\n }\n return parts.join(\"|\") || \"(empty)\";\n }\n\n async function getAssets(): Promise<GeneratedMaterialSymbolsAssets> {\n if (!needsRegeneration && cachedAssets) return cachedAssets;\n\n const usages = await collectMaterialSymbolUsages(config, options);\n const newKey = usageMapKey(usages);\n\n if (newKey === cachedUsagesKey && cachedAssets) {\n needsRegeneration = false;\n return cachedAssets;\n }\n\n if (config.command !== \"build\" && cachedUsagesKey !== \"\") {\n config.logger.info(\n \"[robosophy-material-symbols] icon usage changed, regenerating SVG sprite\",\n );\n }\n\n cachedUsagesKey = newKey;\n cachedAssets = await ensureGeneratedAssets(config, options, cacheDir);\n needsRegeneration = false;\n return cachedAssets;\n }\n\n return {\n name: \"robosophy-material-symbols\",\n async configResolved(resolvedConfig) {\n config = resolvedConfig;\n cacheDir = join(config.root, CACHE_BASE);\n await mkdir(cacheDir, { recursive: true });\n },\n async buildStart() {\n if (config.command === \"serve\" || config.command === \"build\") {\n await getAssets();\n }\n },\n async transformIndexHtml(): Promise<IndexHtmlTransformResult> {\n const assets = await getAssets();\n\n const tag: HtmlTagDescriptor = {\n tag: \"svg\",\n attrs: {\n xmlns: \"http://www.w3.org/2000/svg\",\n style: \"display:none;\",\n \"aria-hidden\": \"true\",\n },\n children: assets.spriteContent,\n injectTo: \"body-prepend\",\n };\n\n return [tag, ...buildMaterialSymbolsCss(assets.css)];\n },\n configureServer(server) {\n server.watcher.on(\"all\", (_event, file) => {\n if (sourceExtensions.has(extname(file))) {\n needsRegeneration = true;\n }\n });\n server.middlewares.use(async (request, response, next) => {\n if (!request.url?.startsWith(\"/@robosophy-material-symbols/\")) {\n next();\n return;\n }\n\n try {\n const assets = await getAssets();\n const fileName = decodeURIComponent(\n request.url.replace(\"/@robosophy-material-symbols/\", \"\").split(\"?\")[0] ?? \"\",\n );\n\n if (fileName === \"rs-material-symbols.svg\") {\n response.setHeader(\"Content-Type\", \"image/svg+xml; charset=utf-8\");\n response.setHeader(\"Cache-Control\", \"no-cache\");\n response.end(assets.fullSprite);\n return;\n }\n\n next();\n } catch (error) {\n next(error);\n }\n });\n },\n async generateBundle(_outputOptions) {\n const assets = await getAssets();\n\n if (assets.fullSprite) {\n this.emitFile({\n fileName: `${outputDir}/rs-material-symbols.svg`,\n name: \"rs-material-symbols.svg\",\n source: assets.fullSprite,\n type: \"asset\",\n });\n }\n },\n };\n}\n\ntype GeneratedMaterialSymbolsAssets = {\n fullSprite: string;\n spriteContent: string;\n css: string;\n};\n\ntype SvgVariant = {\n suffix: string;\n symbolSuffix: string;\n};\n\nfunction buildSvgVariants(): SvgVariant[] {\n const variants: SvgVariant[] = [];\n for (const grade of GRADE_VARIANTS) {\n const gradeSuffix = grade === 0 ? \"\" : grade > 0 ? `grad${grade}` : `gradN${Math.abs(grade)}`;\n const symbolGradeSuffix = grade === 0 ? \"\" : `-${gradeSuffix}`;\n\n for (const fill of [false, true]) {\n const fillSuffix = fill ? \"fill1\" : \"\";\n const symbolFillSuffix = fill ? \"-fill\" : \"\";\n const parts = [gradeSuffix, fillSuffix].filter(Boolean);\n\n variants.push({\n suffix: parts.length > 0 ? `${parts.join(\"\")}_${BASE_OPSZ}px` : `${BASE_OPSZ}px`,\n symbolSuffix: `${symbolGradeSuffix}${symbolFillSuffix}`,\n });\n }\n }\n return variants;\n}\n\nfunction buildSvgUrl(name: string, family: RsIconFamily, suffix: string): string {\n const style = family === \"outlined\" ? \"materialsymbolsoutlined\"\n : family === \"rounded\" ? \"materialsymbolsrounded\"\n : \"materialsymbolssharp\";\n return `${GITHUB_RAW}/${name.toLowerCase()}/${style}/${name.toLowerCase()}_${suffix}.svg`;\n}\n\nfunction buildSymbolId(name: string, family: RsIconFamily, symbolSuffix: string): string {\n return `rs-icon-${family}-${name}${symbolSuffix}`;\n}\n\nasync function fetchSvg(url: string): Promise<string | null> {\n try {\n const response = await fetch(url);\n if (!response.ok) return null;\n return await response.text();\n } catch {\n return null;\n }\n}\n\nasync function loadSvgFromCache(cacheDir: string, cacheKey: string): Promise<string | null> {\n const cachePath = join(cacheDir, `${cacheKey}.svg`);\n try {\n return await readFile(cachePath, \"utf8\");\n } catch {\n return null;\n }\n}\n\nasync function saveSvgToCache(cacheDir: string, cacheKey: string, content: string): Promise<void> {\n const cachePath = join(cacheDir, `${cacheKey}.svg`);\n try {\n await writeFile(cachePath, content, \"utf8\");\n } catch {\n // Ignore cache write errors\n }\n}\n\nfunction parseSvgPaths(svgContent: string): string | null {\n const viewBoxMatch = svgContent.match(/viewBox=\"([^\"]+)\"/i);\n if (!viewBoxMatch) return null;\n\n const paths: string[] = [];\n const pathRegex = /<path\\s+([^>]*)>/g;\n let pathMatch: RegExpExecArray | null;\n\n while ((pathMatch = pathRegex.exec(svgContent))) {\n const attrs = pathMatch[1] ?? \"\";\n const dMatch = attrs.match(/d=\"([^\"]*)\"/);\n if (dMatch) {\n paths.push(dMatch[1] ?? \"\");\n }\n }\n\n if (paths.length === 0) return null;\n\n return paths\n .map((d) => `<path fill=\"currentColor\" d=\"${d}\"/>`)\n .join(\"\");\n}\n\nasync function generateSpriteAssets(\n usages: IconUsageMap,\n cacheDir: string,\n config: ResolvedConfig,\n): Promise<GeneratedMaterialSymbolsAssets> {\n const symbols: string[] = [];\n const iconClasses: string[] = [];\n const variants = buildSvgVariants();\n let totalFetched = 0;\n let totalBytes = 0;\n\n for (const family of families) {\n const names = [...(usages.get(family) ?? [])].sort();\n if (names.length === 0) continue;\n\n for (const name of names) {\n for (const variant of variants) {\n const symbolId = buildSymbolId(name, family, variant.symbolSuffix);\n const url = buildSvgUrl(name, family, variant.suffix);\n const cacheKey = createHash(\"sha256\")\n .update(url)\n .digest(\"hex\")\n .slice(0, 12);\n\n let svgContent = cacheDir ? await loadSvgFromCache(cacheDir, cacheKey) : null;\n\n if (!svgContent) {\n svgContent = await fetchSvg(url);\n if (!svgContent) continue;\n\n if (cacheDir) {\n await saveSvgToCache(cacheDir, cacheKey, svgContent);\n }\n }\n\n const pathContent = parseSvgPaths(svgContent);\n if (!pathContent) continue;\n\n symbols.push(\n `<symbol id=\"${symbolId}\" viewBox=\"0 -960 960 960\" fill=\"currentColor\">${pathContent}</symbol>`,\n );\n\n totalFetched++;\n totalBytes += svgContent.length;\n }\n }\n }\n\n const iconNames = new Set<string>();\n for (const family of families) {\n for (const name of usages.get(family) ?? []) {\n iconNames.add(name);\n }\n }\n for (const name of [...iconNames].sort()) {\n iconClasses.push(`.rs-icon-${name} { --rs-icon-content: \"${name}\"; }`);\n }\n\n const spriteContent = `<defs>${symbols.join(\"\")}</defs>`;\n const fullSprite = `<svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display:none\" aria-hidden=\"true\">${spriteContent}</svg>`;\n const css = iconClasses.join(\"\\n\");\n\n const totalIcons = [...usages.values()].reduce((sum, s) => sum + s.size, 0);\n if (totalIcons > 0) {\n const summary = formatDetectedMaterialSymbols(usages);\n config.logger.info(\n `[robosophy-material-symbols] ${totalIcons} icons detected, ${totalFetched} SVG variants (${(totalBytes / 1024).toFixed(1)} KB)\\n${summary}`,\n );\n } else {\n config.logger.warn(\n \"[robosophy-material-symbols] No Material Symbols icons detected in source. Add them via the include option.\",\n );\n }\n\n return { fullSprite, spriteContent, css };\n}\n\nasync function ensureGeneratedAssets(\n config: ResolvedConfig,\n options: RobosophyMaterialSymbolsOptions,\n cacheDir: string,\n): Promise<GeneratedMaterialSymbolsAssets> {\n const usages = await collectMaterialSymbolUsages(config, options);\n return generateSpriteAssets(usages, cacheDir, config);\n}\n\nexport async function collectMaterialSymbolUsages(\n config: Pick<ResolvedConfig, \"root\">,\n options: RobosophyMaterialSymbolsOptions = {},\n): Promise<IconUsageMap> {\n const usages = createUsageMap();\n\n const manifest = await loadIconManifest();\n\n if (manifest) {\n for (const family of families) {\n for (const name of manifest[family] ?? []) {\n addUsage(usages, { family, name });\n }\n }\n } else {\n for (const name of internalIconNames) {\n for (const family of families) {\n addUsage(usages, { family, name });\n }\n }\n }\n\n for (const icon of options.include ?? []) {\n addUsage(usages, typeof icon === \"string\" ? { family: defaultFamily, name: icon } : icon);\n }\n\n if (options.scan !== false) {\n const roots = options.roots ?? [join(config.root, \"src\")];\n\n for (const root of roots) {\n for (const filePath of await listSourceFiles(root)) {\n const source = await readFile(filePath, \"utf8\");\n collectFromSource(source, usages);\n }\n }\n }\n\n return usages;\n}\n\nexport function buildMaterialSymbolsCss(\n iconClasses: string,\n): HtmlTagDescriptor[] {\n if (!iconClasses) return [];\n\n return [\n {\n tag: \"style\",\n children: iconClasses,\n injectTo: \"head\",\n },\n ];\n}\n\nfunction collectFromSource(source: string, usages: IconUsageMap): void {\n const rsIconTagPattern = /<RsIcon\\b([^>]*)>/g;\n let tagMatch: RegExpExecArray | null;\n\n while ((tagMatch = rsIconTagPattern.exec(source))) {\n const attrs = parseStaticAttributes(tagMatch[1] ?? \"\");\n const rawName = attrs.name ?? attrs[\":name\"];\n const hasFamily = \"family\" in attrs || \":family\" in attrs;\n const rawFamily = attrs.family ?? attrs[\":family\"] ?? \"\";\n\n if (rawName) {\n const familyList = resolveFamilies(rawFamily, hasFamily);\n const names = resolveNames(rawName);\n\n for (const family of familyList) {\n for (const name of names) {\n addUsage(usages, { family, name });\n }\n }\n }\n }\n\n const primeHelperPattern =\n /\\brsPrimeIcon\\(\\s*[\"']([a-z0-9_]+)[\"'](?:\\s*,\\s*\\{([^)]*)\\})?/g;\n let helperMatch: RegExpExecArray | null;\n\n while ((helperMatch = primeHelperPattern.exec(source))) {\n const family = toFamily(helperMatch[2]?.match(/\\bfamily\\s*:\\s*[\"'](\\w+)[\"']/)?.[1]);\n addUsage(usages, {\n family: family ?? defaultFamily,\n name: helperMatch[1] ?? \"\",\n });\n }\n\n const objectIconPattern = /\\bicon\\s*:\\s*[\"']([a-z0-9_]+)[\"']/g;\n let objectMatch: RegExpExecArray | null;\n\n while ((objectMatch = objectIconPattern.exec(source))) {\n addUsage(usages, {\n family: defaultFamily,\n name: objectMatch[1] ?? \"\",\n });\n }\n}\n\nfunction parseStaticAttributes(source: string): Record<string, string> {\n const attrs: Record<string, string> = {};\n const attrPattern = /([:@\\w-]+)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/g;\n let match: RegExpExecArray | null;\n\n while ((match = attrPattern.exec(source))) {\n attrs[match[1] ?? \"\"] = match[2] ?? match[3] ?? \"\";\n }\n\n return attrs;\n}\n\nfunction unwrapStaticValue(value: string): string {\n return value.replace(/^['\"](.+)['\"]$/, \"$1\");\n}\n\nfunction addUsage(usages: IconUsageMap, icon: { family?: RsIconFamily; name: string }): void {\n const family = icon.family ?? defaultFamily;\n const name = icon.name.trim();\n\n if (!families.includes(family) || !iconNamePattern.test(name)) {\n return;\n }\n\n usages.get(family)?.add(name);\n}\n\nasync function loadIconManifest(): Promise<Record<RsIconFamily, string[]> | null> {\n try {\n const dir = join(fileURLToPath(import.meta.url), \"..\");\n const manifestPath = join(dir, \"icon-manifest.json\");\n const source = await readFile(manifestPath, \"utf8\");\n return JSON.parse(source) as Record<RsIconFamily, string[]>;\n } catch {\n return null;\n }\n}\n\nfunction toFamily(value?: string): RsIconFamily | undefined {\n const normalized = value ? unwrapStaticValue(value) : \"\";\n return families.includes(normalized as RsIconFamily)\n ? (normalized as RsIconFamily)\n : undefined;\n}\n\nfunction resolveNames(rawName: string): string[] {\n const stringLiterals = /[\"']([a-z0-9_]+)[\"']/g;\n let strMatch: RegExpExecArray | null;\n const names: string[] = [];\n\n while ((strMatch = stringLiterals.exec(rawName))) {\n const candidate = strMatch[1] ?? \"\";\n if (iconNamePattern.test(candidate)) {\n names.push(candidate);\n }\n }\n\n if (names.length === 0) {\n const name = unwrapStaticValue(rawName);\n if (iconNamePattern.test(name)) {\n names.push(name);\n }\n }\n\n return names;\n}\n\nfunction resolveFamilies(rawFamily: string, hasFamily = true): RsIconFamily[] {\n const family = toFamily(rawFamily);\n if (family) return [family];\n\n const stringLiterals = /[\"'](\\w+)[\"']/g;\n let strMatch: RegExpExecArray | null;\n const found = new Set<RsIconFamily>();\n\n while ((strMatch = stringLiterals.exec(rawFamily))) {\n const candidate = strMatch[1] ?? \"\";\n const f = toFamily(candidate);\n if (f) {\n found.add(f);\n }\n }\n\n if (found.size > 0) return [...found];\n\n if (!hasFamily) return [defaultFamily];\n\n return [...families];\n}\n\nfunction createUsageMap(): IconUsageMap {\n return new Map(families.map((family) => [family, new Set<string>()]));\n}\n\nasync function listSourceFiles(root: string): Promise<string[]> {\n try {\n const entries = await readdir(root, { withFileTypes: true });\n const files = await Promise.all(\n entries.map(async (entry) => {\n const path = join(root, entry.name);\n\n if (entry.isDirectory()) {\n return skippedDirs.has(entry.name) ? [] : listSourceFiles(path);\n }\n\n return sourceExtensions.has(extname(entry.name)) ? [path] : [];\n }),\n );\n\n return files.flat();\n } catch {\n return [];\n }\n}\n\nfunction withBase(base: string, path: string): string {\n const cleanBase = base.endsWith(\"/\") ? base : `${base}/`;\n return `${cleanBase}${path}`.replaceAll(`${sep}`, \"/\");\n}\n\nexport function formatDetectedMaterialSymbols(usages: IconUsageMap): string {\n return families\n .map((family) => `${family}: ${[...(usages.get(family) ?? [])].sort().join(\", \")}`)\n .join(\"\\n\");\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vite.js","sources":["../src/vite.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { mkdir, readFile, readdir, writeFile } from \"node:fs/promises\";\nimport { extname, join, sep } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { HtmlTagDescriptor, IndexHtmlTransformResult, Plugin, ResolvedConfig } from \"vite\";\n\nimport type { RsIconFamily } from \"./components/RsIcon\";\n\ntype IconInput = string | { family?: RsIconFamily; name: string; weight?: number };\nexport type RsIconFontDisplay = \"block\" | \"swap\" | \"fallback\" | \"optional\";\n\nexport type RobosophyMaterialSymbolsOptions = {\n outputDir?: string;\n fontDisplay?: RsIconFontDisplay;\n fontVariant?: string;\n include?: IconInput[];\n preload?: boolean;\n roots?: string[];\n scan?: boolean;\n};\n\ntype IconUsageMap = Map<RsIconFamily, Map<string, Set<number>>>;\n\nconst families = [\"outlined\", \"rounded\", \"sharp\"] as const satisfies readonly RsIconFamily[];\nconst defaultFamily: RsIconFamily = \"outlined\";\nconst iconNamePattern = /^[a-z0-9_]+$/;\nconst sourceExtensions = new Set([\".js\", \".jsx\", \".mjs\", \".ts\", \".tsx\", \".vue\"]);\nconst skippedDirs = new Set([\".git\", \"dist\", \"node_modules\", \"storybook-static\"]);\nconst internalIconNames = [\n \"arrow_drop_down\",\n \"arrow_drop_up\",\n \"arrow_left\",\n \"chevron_right\",\n \"close\",\n \"login\",\n \"nest_eco_leaf\",\n];\n\nconst GITHUB_RAW =\n \"https://raw.githubusercontent.com/google/material-design-icons/master/symbols/web\";\nconst CACHE_BASE = join(\"node_modules\", \".cache\", \"robosophy-svgs\");\nconst BASE_OPSZ = 24;\nconst DEFAULT_WEIGHT = 400;\n\nconst GRADE_VARIANTS = [0, -25, 200] as const;\n\nexport function robosophyMaterialSymbols(\n options: RobosophyMaterialSymbolsOptions = {},\n): Plugin {\n const raw = (options.outputDir ?? \"\").trim().replace(/^\\/+/, \"\");\n const outputDir = raw\n .split(\"/\")\n .filter((part) => part && part !== \"..\")\n .join(\"/\") || \"assets\";\n let config: ResolvedConfig;\n let cacheDir: string;\n let cachedAssets: GeneratedMaterialSymbolsAssets | null = null;\n let cachedUsagesKey = \"\";\n let needsRegeneration = true;\n\n function usageMapKey(usages: IconUsageMap): string {\n const parts: string[] = [];\n for (const family of families) {\n const iconWeights = usages.get(family);\n if (!iconWeights || iconWeights.size === 0) continue;\n const entries = [...iconWeights.entries()]\n .map(([name, weights]) => `${name}[${[...weights].sort().join(\",\")}]`)\n .sort();\n parts.push(`${family}:${entries.join(\",\")}`);\n }\n return parts.join(\"|\") || \"(empty)\";\n }\n\n async function getAssets(): Promise<GeneratedMaterialSymbolsAssets> {\n if (!needsRegeneration && cachedAssets) return cachedAssets;\n\n const usages = await collectMaterialSymbolUsages(config, options);\n const newKey = usageMapKey(usages);\n\n if (newKey === cachedUsagesKey && cachedAssets) {\n needsRegeneration = false;\n return cachedAssets;\n }\n\n if (config.command !== \"build\" && cachedUsagesKey !== \"\") {\n config.logger.info(\n \"[robosophy-material-symbols] icon usage changed, regenerating SVG sprite\",\n );\n }\n\n cachedUsagesKey = newKey;\n cachedAssets = await ensureGeneratedAssets(config, options, cacheDir);\n needsRegeneration = false;\n return cachedAssets;\n }\n\n return {\n name: \"robosophy-material-symbols\",\n async configResolved(resolvedConfig) {\n config = resolvedConfig;\n cacheDir = join(config.root, CACHE_BASE);\n await mkdir(cacheDir, { recursive: true });\n },\n async buildStart() {\n if (config.command === \"serve\" || config.command === \"build\") {\n await getAssets();\n }\n },\n async transformIndexHtml(): Promise<IndexHtmlTransformResult> {\n const assets = await getAssets();\n\n const tag: HtmlTagDescriptor = {\n tag: \"svg\",\n attrs: {\n xmlns: \"http://www.w3.org/2000/svg\",\n style: \"display:none;\",\n \"aria-hidden\": \"true\",\n },\n children: assets.spriteContent,\n injectTo: \"body-prepend\",\n };\n\n return [tag, ...buildMaterialSymbolsCss(assets.css)];\n },\n configureServer(server) {\n server.watcher.on(\"all\", (_event, file) => {\n if (sourceExtensions.has(extname(file))) {\n needsRegeneration = true;\n }\n });\n server.middlewares.use(async (request, response, next) => {\n if (!request.url?.startsWith(\"/@robosophy-material-symbols/\")) {\n next();\n return;\n }\n\n try {\n const assets = await getAssets();\n const fileName = decodeURIComponent(\n request.url.replace(\"/@robosophy-material-symbols/\", \"\").split(\"?\")[0] ?? \"\",\n );\n\n if (fileName === \"rs-material-symbols.svg\") {\n response.setHeader(\"Content-Type\", \"image/svg+xml; charset=utf-8\");\n response.setHeader(\"Cache-Control\", \"no-cache\");\n response.end(assets.fullSprite);\n return;\n }\n\n next();\n } catch (error) {\n next(error);\n }\n });\n },\n async generateBundle(_outputOptions) {\n const assets = await getAssets();\n\n if (assets.fullSprite) {\n this.emitFile({\n fileName: `${outputDir}/rs-material-symbols.svg`,\n name: \"rs-material-symbols.svg\",\n source: assets.fullSprite,\n type: \"asset\",\n });\n }\n },\n };\n}\n\ntype GeneratedMaterialSymbolsAssets = {\n fullSprite: string;\n spriteContent: string;\n css: string;\n};\n\ntype SvgVariant = {\n suffix: string;\n symbolSuffix: string;\n};\n\nfunction buildSvgVariants(weight: number = DEFAULT_WEIGHT): SvgVariant[] {\n const variants: SvgVariant[] = [];\n for (const grade of GRADE_VARIANTS) {\n const gradeSuffix = grade === 0 ? \"\" : grade > 0 ? `grad${grade}` : `gradN${Math.abs(grade)}`;\n const symbolGradeSuffix = grade === 0 ? \"\" : `-${gradeSuffix}`;\n\n for (const fill of [false, true]) {\n const fillSuffix = fill ? \"fill1\" : \"\";\n const symbolFillSuffix = fill ? \"-fill\" : \"\";\n const weightSuffix = weight !== DEFAULT_WEIGHT ? `wght${weight}` : \"\";\n const weightSymbolSuffix = weight !== DEFAULT_WEIGHT ? `-wght${weight}` : \"\";\n const parts = [gradeSuffix, fillSuffix, weightSuffix].filter(Boolean);\n\n variants.push({\n suffix: parts.length > 0 ? `${parts.join(\"\")}_${BASE_OPSZ}px` : `${BASE_OPSZ}px`,\n symbolSuffix: `${symbolGradeSuffix}${symbolFillSuffix}${weightSymbolSuffix}`,\n });\n }\n }\n return variants;\n}\n\nfunction buildSvgUrl(name: string, family: RsIconFamily, suffix: string): string {\n const style = family === \"outlined\" ? \"materialsymbolsoutlined\"\n : family === \"rounded\" ? \"materialsymbolsrounded\"\n : \"materialsymbolssharp\";\n return `${GITHUB_RAW}/${name.toLowerCase()}/${style}/${name.toLowerCase()}_${suffix}.svg`;\n}\n\nfunction buildSymbolId(name: string, family: RsIconFamily, symbolSuffix: string): string {\n return `rs-icon-${family}-${name}${symbolSuffix}`;\n}\n\nasync function fetchSvg(url: string): Promise<string | null> {\n try {\n const response = await fetch(url);\n if (!response.ok) return null;\n return await response.text();\n } catch {\n return null;\n }\n}\n\nasync function loadSvgFromCache(cacheDir: string, cacheKey: string): Promise<string | null> {\n const cachePath = join(cacheDir, `${cacheKey}.svg`);\n try {\n return await readFile(cachePath, \"utf8\");\n } catch {\n return null;\n }\n}\n\nasync function saveSvgToCache(cacheDir: string, cacheKey: string, content: string): Promise<void> {\n const cachePath = join(cacheDir, `${cacheKey}.svg`);\n try {\n await writeFile(cachePath, content, \"utf8\");\n } catch {\n // Ignore cache write errors\n }\n}\n\nfunction parseSvgPaths(svgContent: string): string | null {\n const viewBoxMatch = svgContent.match(/viewBox=\"([^\"]+)\"/i);\n if (!viewBoxMatch) return null;\n\n const paths: string[] = [];\n const pathRegex = /<path\\s+([^>]*)>/g;\n let pathMatch: RegExpExecArray | null;\n\n while ((pathMatch = pathRegex.exec(svgContent))) {\n const attrs = pathMatch[1] ?? \"\";\n const dMatch = attrs.match(/d=\"([^\"]*)\"/);\n if (dMatch) {\n paths.push(dMatch[1] ?? \"\");\n }\n }\n\n if (paths.length === 0) return null;\n\n return paths\n .map((d) => `<path fill=\"currentColor\" d=\"${d}\"/>`)\n .join(\"\");\n}\n\nasync function generateSpriteAssets(\n usages: IconUsageMap,\n cacheDir: string,\n config: ResolvedConfig,\n): Promise<GeneratedMaterialSymbolsAssets> {\n const symbols: string[] = [];\n const iconClasses: string[] = [];\n let totalFetched = 0;\n let totalBytes = 0;\n\n for (const family of families) {\n const iconWeights = usages.get(family);\n if (!iconWeights || iconWeights.size === 0) continue;\n\n for (const [name, weights] of [...iconWeights.entries()].sort()) {\n for (const weight of [...weights].sort()) {\n const variants = buildSvgVariants(weight);\n for (const variant of variants) {\n const symbolId = buildSymbolId(name, family, variant.symbolSuffix);\n const url = buildSvgUrl(name, family, variant.suffix);\n const cacheKey = createHash(\"sha256\")\n .update(url)\n .digest(\"hex\")\n .slice(0, 12);\n\n let svgContent = cacheDir ? await loadSvgFromCache(cacheDir, cacheKey) : null;\n\n if (!svgContent) {\n svgContent = await fetchSvg(url);\n if (!svgContent) continue;\n\n if (cacheDir) {\n await saveSvgToCache(cacheDir, cacheKey, svgContent);\n }\n }\n\n const pathContent = parseSvgPaths(svgContent);\n if (!pathContent) continue;\n\n symbols.push(\n `<symbol id=\"${symbolId}\" viewBox=\"0 -960 960 960\" fill=\"currentColor\">${pathContent}</symbol>`,\n );\n\n totalFetched++;\n totalBytes += svgContent.length;\n }\n }\n }\n }\n\n const iconNames = new Set<string>();\n for (const family of families) {\n const iconWeights = usages.get(family);\n if (iconWeights) {\n for (const name of iconWeights.keys()) {\n iconNames.add(name);\n }\n }\n }\n for (const name of [...iconNames].sort()) {\n iconClasses.push(`.rs-icon-${name} { --rs-icon-content: \"${name}\"; }`);\n }\n\n const spriteContent = `<defs>${symbols.join(\"\")}</defs>`;\n const fullSprite = `<svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display:none\" aria-hidden=\"true\">${spriteContent}</svg>`;\n const css = iconClasses.join(\"\\n\");\n\n const totalIcons = [...usages.values()].reduce((sum, m) => sum + m.size, 0);\n if (totalIcons > 0) {\n const summary = formatDetectedMaterialSymbols(usages);\n config.logger.info(\n `[robosophy-material-symbols] ${totalIcons} icons detected, ${totalFetched} SVG variants (${(totalBytes / 1024).toFixed(1)} KB)\\n${summary}`,\n );\n } else {\n config.logger.warn(\n \"[robosophy-material-symbols] No Material Symbols icons detected in source. Add them via the include option.\",\n );\n }\n\n return { fullSprite, spriteContent, css };\n}\n\nasync function ensureGeneratedAssets(\n config: ResolvedConfig,\n options: RobosophyMaterialSymbolsOptions,\n cacheDir: string,\n): Promise<GeneratedMaterialSymbolsAssets> {\n const usages = await collectMaterialSymbolUsages(config, options);\n return generateSpriteAssets(usages, cacheDir, config);\n}\n\nexport async function collectMaterialSymbolUsages(\n config: Pick<ResolvedConfig, \"root\">,\n options: RobosophyMaterialSymbolsOptions = {},\n): Promise<IconUsageMap> {\n const usages = createUsageMap();\n\n const manifest = await loadIconManifest();\n\n if (manifest) {\n for (const family of families) {\n for (const name of manifest[family] ?? []) {\n addUsage(usages, { family, name });\n }\n }\n } else {\n for (const name of internalIconNames) {\n for (const family of families) {\n addUsage(usages, { family, name });\n }\n }\n }\n\n for (const icon of options.include ?? []) {\n const resolved = typeof icon === \"string\" ? { family: defaultFamily, name: icon } : icon;\n if (resolved.weight !== undefined) {\n addUsage(usages, resolved);\n } else {\n for (const w of VALID_WEIGHTS) {\n addUsage(usages, { ...resolved, weight: w });\n }\n }\n }\n\n if (options.scan !== false) {\n const roots = options.roots ?? [join(config.root, \"src\")];\n\n for (const root of roots) {\n for (const filePath of await listSourceFiles(root)) {\n const source = await readFile(filePath, \"utf8\");\n collectFromSource(source, usages);\n }\n }\n }\n\n return usages;\n}\n\nexport function buildMaterialSymbolsCss(\n iconClasses: string,\n): HtmlTagDescriptor[] {\n if (!iconClasses) return [];\n\n return [\n {\n tag: \"style\",\n children: iconClasses,\n injectTo: \"head\",\n },\n ];\n}\n\nfunction collectFromSource(source: string, usages: IconUsageMap): void {\n const rsIconTagPattern = /<RsIcon\\b([^>]*)>/g;\n let tagMatch: RegExpExecArray | null;\n\n while ((tagMatch = rsIconTagPattern.exec(source))) {\n const attrs = parseStaticAttributes(tagMatch[1] ?? \"\");\n const rawName = attrs.name ?? attrs[\":name\"];\n const hasFamily = \"family\" in attrs || \":family\" in attrs;\n const rawFamily = attrs.family ?? attrs[\":family\"] ?? \"\";\n const rawWeight = attrs.weight ?? attrs[\":weight\"] ?? \"\";\n const weight = rawWeight ? parseInt(rawWeight, 10) : DEFAULT_WEIGHT;\n const resolvedWeight = !isNaN(weight) && weight > 0 ? weight : DEFAULT_WEIGHT;\n\n if (rawName) {\n const familyList = resolveFamilies(rawFamily, hasFamily);\n const names = resolveNames(rawName);\n\n for (const family of familyList) {\n for (const name of names) {\n addUsage(usages, { family, name, weight: resolvedWeight });\n }\n }\n }\n }\n\n const primeHelperPattern =\n /\\brsPrimeIcon\\(\\s*[\"']([a-z0-9_]+)[\"'](?:\\s*,\\s*\\{([^)]*)\\})?/g;\n let helperMatch: RegExpExecArray | null;\n\n while ((helperMatch = primeHelperPattern.exec(source))) {\n const family = toFamily(helperMatch[2]?.match(/\\bfamily\\s*:\\s*[\"'](\\w+)[\"']/)?.[1]);\n addUsage(usages, {\n family: family ?? defaultFamily,\n name: helperMatch[1] ?? \"\",\n });\n }\n\n const objectIconPattern = /\\bicon\\s*:\\s*[\"']([a-z0-9_]+)[\"']/g;\n let objectMatch: RegExpExecArray | null;\n\n while ((objectMatch = objectIconPattern.exec(source))) {\n addUsage(usages, {\n family: defaultFamily,\n name: objectMatch[1] ?? \"\",\n });\n }\n}\n\nfunction parseStaticAttributes(source: string): Record<string, string> {\n const attrs: Record<string, string> = {};\n const attrPattern = /([:@\\w-]+)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/g;\n let match: RegExpExecArray | null;\n\n while ((match = attrPattern.exec(source))) {\n attrs[match[1] ?? \"\"] = match[2] ?? match[3] ?? \"\";\n }\n\n return attrs;\n}\n\nfunction unwrapStaticValue(value: string): string {\n return value.replace(/^['\"](.+)['\"]$/, \"$1\");\n}\n\nconst VALID_WEIGHTS = [100, 200, 300, 400, 500, 600, 700] as const;\n\nfunction addUsage(\n usages: IconUsageMap,\n icon: { family?: RsIconFamily; name: string; weight?: number },\n): void {\n const family = icon.family ?? defaultFamily;\n const name = icon.name.trim();\n const weight = icon.weight ?? DEFAULT_WEIGHT;\n\n if (!families.includes(family) || !iconNamePattern.test(name)) {\n return;\n }\n\n if (!VALID_WEIGHTS.includes(weight as never)) return;\n\n const iconMap = usages.get(family);\n if (!iconMap) return;\n\n const existing = iconMap.get(name);\n if (existing) {\n existing.add(weight);\n } else {\n iconMap.set(name, new Set([weight]));\n }\n}\n\nasync function loadIconManifest(): Promise<Record<RsIconFamily, string[]> | null> {\n try {\n const dir = join(fileURLToPath(import.meta.url), \"..\");\n const manifestPath = join(dir, \"icon-manifest.json\");\n const source = await readFile(manifestPath, \"utf8\");\n return JSON.parse(source) as Record<RsIconFamily, string[]>;\n } catch {\n return null;\n }\n}\n\nfunction toFamily(value?: string): RsIconFamily | undefined {\n const normalized = value ? unwrapStaticValue(value) : \"\";\n return families.includes(normalized as RsIconFamily)\n ? (normalized as RsIconFamily)\n : undefined;\n}\n\nfunction resolveNames(rawName: string): string[] {\n const stringLiterals = /[\"']([a-z0-9_]+)[\"']/g;\n let strMatch: RegExpExecArray | null;\n const names: string[] = [];\n\n while ((strMatch = stringLiterals.exec(rawName))) {\n const candidate = strMatch[1] ?? \"\";\n if (iconNamePattern.test(candidate)) {\n names.push(candidate);\n }\n }\n\n if (names.length === 0) {\n const name = unwrapStaticValue(rawName);\n if (iconNamePattern.test(name)) {\n names.push(name);\n }\n }\n\n return names;\n}\n\nfunction resolveFamilies(rawFamily: string, hasFamily = true): RsIconFamily[] {\n const family = toFamily(rawFamily);\n if (family) return [family];\n\n const stringLiterals = /[\"'](\\w+)[\"']/g;\n let strMatch: RegExpExecArray | null;\n const found = new Set<RsIconFamily>();\n\n while ((strMatch = stringLiterals.exec(rawFamily))) {\n const candidate = strMatch[1] ?? \"\";\n const f = toFamily(candidate);\n if (f) {\n found.add(f);\n }\n }\n\n if (found.size > 0) return [...found];\n\n if (!hasFamily) return [defaultFamily];\n\n return [...families];\n}\n\nfunction createUsageMap(): IconUsageMap {\n return new Map(families.map((family) => [family, new Map<string, Set<number>>()]));\n}\n\nasync function listSourceFiles(root: string): Promise<string[]> {\n try {\n const entries = await readdir(root, { withFileTypes: true });\n const files = await Promise.all(\n entries.map(async (entry) => {\n const path = join(root, entry.name);\n\n if (entry.isDirectory()) {\n return skippedDirs.has(entry.name) ? [] : listSourceFiles(path);\n }\n\n return sourceExtensions.has(extname(entry.name)) ? [path] : [];\n }),\n );\n\n return files.flat();\n } catch {\n return [];\n }\n}\n\nfunction withBase(base: string, path: string): string {\n const cleanBase = base.endsWith(\"/\") ? base : `${base}/`;\n return `${cleanBase}${path}`.replaceAll(`${sep}`, \"/\");\n}\n\nexport function formatDetectedMaterialSymbols(usages: IconUsageMap): string {\n return families\n .map((family) => {\n const iconWeights = usages.get(family);\n if (!iconWeights || iconWeights.size === 0) return `${family}: (none)`;\n const entries = [...iconWeights.entries()]\n .map(([name, weights]) => `${name}[${[...weights].sort().join(\",\")}]`)\n .sort()\n .join(\", \");\n return `${family}: ${entries}`;\n })\n .join(\"\\n\");\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@robosophy/ui-vue",
3
- "version": "1.1.7",
3
+ "version": "1.1.9",
4
4
  "private": false,
5
5
  "license": "UNLICENSED",
6
6
  "homepage": "https://robosophy.gitlab.io/robosophy-basf/robosophy-library/",