@robosophy/ui-vue 1.1.10 → 1.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +40 -40
- package/README.md +235 -235
- package/ai-context.md +53 -53
- package/components.md +447 -442
- package/dist/components/RsIcon/RsIcon.types.d.ts +2 -0
- package/dist/components/RsIcon/RsIcon.types.d.ts.map +1 -1
- package/dist/components/RsIcon/RsIcon.vue.d.ts +1 -0
- package/dist/components/RsIcon/RsIcon.vue.d.ts.map +1 -1
- package/dist/components/RsSidebar/RsSidebar.vue.d.ts.map +1 -1
- package/dist/index.css +490 -462
- package/dist/index.js +51 -18
- package/dist/index.js.map +1 -1
- package/dist/plugin.d.ts +1 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/vite.js.map +1 -1
- package/icon-scanner.md +293 -293
- package/package.json +71 -71
package/dist/index.js
CHANGED
|
@@ -3,8 +3,14 @@ import "./index.css";
|
|
|
3
3
|
import { defineComponent, computed, openBlock, createElementBlock, normalizeStyle, normalizeClass, createElementVNode, ref, onMounted, onBeforeUnmount, watch, nextTick, createVNode, unref, withModifiers, withCtx, renderSlot, toDisplayString, createBlock, Teleport, createCommentVNode, Fragment, renderList, mergeProps, createTextVNode } from "vue";
|
|
4
4
|
import Button from "primevue/button";
|
|
5
5
|
import Menu from "primevue/menu";
|
|
6
|
-
const _hoisted_1$2 =
|
|
7
|
-
|
|
6
|
+
const _hoisted_1$2 = {
|
|
7
|
+
key: 0,
|
|
8
|
+
class: "rs-icon-wrap"
|
|
9
|
+
};
|
|
10
|
+
const _hoisted_2$2 = ["aria-hidden", "aria-label", "role", "width", "height"];
|
|
11
|
+
const _hoisted_3$2 = ["href"];
|
|
12
|
+
const _hoisted_4$2 = ["aria-hidden", "aria-label", "role", "width", "height"];
|
|
13
|
+
const _hoisted_5$2 = ["href"];
|
|
8
14
|
const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
9
15
|
...{
|
|
10
16
|
name: "RsIcon"
|
|
@@ -20,7 +26,9 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
|
20
26
|
grade: { default: 0 },
|
|
21
27
|
opticalSize: {},
|
|
22
28
|
interactive: { type: Boolean, default: false },
|
|
23
|
-
ariaLabel: {}
|
|
29
|
+
ariaLabel: {},
|
|
30
|
+
notification: { type: Boolean, default: false },
|
|
31
|
+
notificationColor: {}
|
|
24
32
|
},
|
|
25
33
|
setup(__props) {
|
|
26
34
|
const GRADE_VALUES = [200, 0, -25];
|
|
@@ -69,8 +77,30 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
|
69
77
|
}));
|
|
70
78
|
const ariaHidden = computed(() => props.ariaLabel ? void 0 : "true");
|
|
71
79
|
const role = computed(() => props.ariaLabel ? "img" : void 0);
|
|
80
|
+
const notificationStyle = computed(
|
|
81
|
+
() => props.notificationColor ? { backgroundColor: props.notificationColor } : void 0
|
|
82
|
+
);
|
|
72
83
|
return (_ctx, _cache) => {
|
|
73
|
-
return openBlock(), createElementBlock("
|
|
84
|
+
return __props.notification ? (openBlock(), createElementBlock("span", _hoisted_1$2, [
|
|
85
|
+
(openBlock(), createElementBlock("svg", {
|
|
86
|
+
"aria-hidden": ariaHidden.value,
|
|
87
|
+
"aria-label": __props.ariaLabel,
|
|
88
|
+
class: normalizeClass(rootClass.value),
|
|
89
|
+
role: role.value,
|
|
90
|
+
style: normalizeStyle(rootStyle.value),
|
|
91
|
+
width: iconSize.value,
|
|
92
|
+
height: iconSize.value,
|
|
93
|
+
fill: "currentColor"
|
|
94
|
+
}, [
|
|
95
|
+
createElementVNode("use", { href: symbolHref.value }, null, 8, _hoisted_3$2)
|
|
96
|
+
], 14, _hoisted_2$2)),
|
|
97
|
+
createElementVNode("span", {
|
|
98
|
+
class: "rs-icon__notification",
|
|
99
|
+
"aria-hidden": "true",
|
|
100
|
+
style: normalizeStyle(notificationStyle.value)
|
|
101
|
+
}, null, 4)
|
|
102
|
+
])) : (openBlock(), createElementBlock("svg", {
|
|
103
|
+
key: 1,
|
|
74
104
|
"aria-hidden": ariaHidden.value,
|
|
75
105
|
"aria-label": __props.ariaLabel,
|
|
76
106
|
class: normalizeClass(rootClass.value),
|
|
@@ -80,8 +110,8 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
|
80
110
|
height: iconSize.value,
|
|
81
111
|
fill: "currentColor"
|
|
82
112
|
}, [
|
|
83
|
-
createElementVNode("use", { href: symbolHref.value }, null, 8,
|
|
84
|
-
], 14,
|
|
113
|
+
createElementVNode("use", { href: symbolHref.value }, null, 8, _hoisted_5$2)
|
|
114
|
+
], 14, _hoisted_4$2));
|
|
85
115
|
};
|
|
86
116
|
}
|
|
87
117
|
});
|
|
@@ -581,18 +611,21 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
581
611
|
);
|
|
582
612
|
const displayedHeaderTitle = computed(() => activeModule.value?.text || props.title);
|
|
583
613
|
const moduleMenuItems = computed(
|
|
584
|
-
() => visibleModules.value.map((module) =>
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
"rs-sidebar__module-option
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
614
|
+
() => visibleModules.value.map((module) => {
|
|
615
|
+
const isCurrent = module.active || module.text === displayedHeaderTitle.value;
|
|
616
|
+
return {
|
|
617
|
+
class: [
|
|
618
|
+
"rs-sidebar__module-option",
|
|
619
|
+
{
|
|
620
|
+
"rs-sidebar__module-option--active": isCurrent,
|
|
621
|
+
"rs-sidebar__module-option--disabled": module.disabled || isCurrent
|
|
622
|
+
}
|
|
623
|
+
],
|
|
624
|
+
command: () => selectModule(module),
|
|
625
|
+
disabled: module.disabled || isCurrent,
|
|
626
|
+
label: module.text
|
|
627
|
+
};
|
|
628
|
+
})
|
|
596
629
|
);
|
|
597
630
|
const displayedItems = computed(
|
|
598
631
|
() => activeParent.value ? activeParent.value.children?.filter(isVisible) ?? [] : visibleItems.value
|
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;\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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"}
|
|
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\">\r\nimport { computed } from \"vue\";\r\n\r\nimport type { RsIconProps } from \"./RsIcon.types\";\r\n\r\ndefineOptions({\r\n name: \"RsIcon\",\r\n});\r\n\r\nconst GRADE_VALUES = [200, 0, -25] as const;\r\nconst SEMANTIC_COLORS = [\"primary\", \"secondary\", \"success\", \"warning\", \"danger\", \"inherit\"] as const;\r\n\r\nconst props = withDefaults(defineProps<RsIconProps>(), {\r\n color: \"inherit\",\r\n family: \"outlined\",\r\n fill: false,\r\n grade: 0,\r\n interactive: false,\r\n notification: false,\r\n size: \"md\",\r\n weight: 400,\r\n});\r\n\r\nfunction clampGrade(grade: number): number {\r\n return GRADE_VALUES.reduce((nearest, g) =>\r\n Math.abs(g - grade) < Math.abs(nearest - grade) ? g : nearest,\r\n );\r\n}\r\n\r\nconst symbolHref = computed(() => {\r\n const family = props.family;\r\n const name = props.name;\r\n\r\n let gradeSuffix = \"\";\r\n const clamped = clampGrade(props.grade);\r\n if (clamped !== 0) {\r\n gradeSuffix = clamped > 0 ? `-grad${clamped}` : `-gradN${Math.abs(clamped)}`;\r\n }\r\n\r\n const fillSuffix = props.fill ? \"-fill\" : \"\";\r\n const weightSuffix = props.weight !== 400 ? `-wght${props.weight}` : \"\";\r\n\r\n return `#rs-icon-${family}-${name}${gradeSuffix}${fillSuffix}${weightSuffix}`;\r\n});\r\n\r\nconst isCustomColor = computed(\r\n () => !(SEMANTIC_COLORS as readonly string[]).includes(props.color),\r\n);\r\n\r\nconst iconSize = computed(() => {\r\n if (typeof props.size === \"number\") return props.size;\r\n if (props.size === \"sm\") return 18;\r\n if (props.size === \"lg\") return 32;\r\n return 24;\r\n});\r\n\r\nconst rootClass = computed(() => [\r\n \"rs-icon\",\r\n `rs-icon--${props.family}`,\r\n ...(isCustomColor.value ? [] : [`rs-icon--${props.color}`]),\r\n {\r\n \"rs-icon--interactive\": props.interactive,\r\n \"rs-icon--sm\": props.size === \"sm\",\r\n \"rs-icon--md\": props.size === \"md\",\r\n \"rs-icon--lg\": props.size === \"lg\",\r\n },\r\n]);\r\n\r\nconst rootStyle = computed(() => ({\r\n \"--rs-icon-color\": isCustomColor.value ? props.color : undefined,\r\n \"--rs-icon-size\": `${iconSize.value}px`,\r\n}));\r\n\r\nconst ariaHidden = computed(() => (props.ariaLabel ? undefined : \"true\"));\r\nconst role = computed(() => (props.ariaLabel ? \"img\" : undefined));\r\n\r\nconst notificationStyle = computed(() =>\r\n props.notificationColor ? { backgroundColor: props.notificationColor } : undefined,\r\n);\r\n</script>\r\n\r\n<template>\r\n <span v-if=\"notification\" class=\"rs-icon-wrap\">\r\n <svg\r\n :aria-hidden=\"ariaHidden\"\r\n :aria-label=\"ariaLabel\"\r\n :class=\"rootClass\"\r\n :role=\"role\"\r\n :style=\"rootStyle\"\r\n :width=\"iconSize\"\r\n :height=\"iconSize\"\r\n fill=\"currentColor\"\r\n >\r\n <use :href=\"symbolHref\" />\r\n </svg>\r\n <span\r\n class=\"rs-icon__notification\"\r\n aria-hidden=\"true\"\r\n :style=\"notificationStyle\"\r\n />\r\n </span>\r\n <svg\r\n v-else\r\n :aria-hidden=\"ariaHidden\"\r\n :aria-label=\"ariaLabel\"\r\n :class=\"rootClass\"\r\n :role=\"role\"\r\n :style=\"rootStyle\"\r\n :width=\"iconSize\"\r\n :height=\"iconSize\"\r\n fill=\"currentColor\"\r\n >\r\n <use :href=\"symbolHref\" />\r\n </svg>\r\n</template>\r\n\r\n<style src=\"./RsIcon.css\"></style>\r\n","import \"./RsIcon.css\";\r\n\r\nimport type { RsIconFamily, RsPrimeIconOptions } from \"./RsIcon.types\";\r\n\r\nconst iconNamePattern = /^[a-z0-9_]+$/;\r\n\r\nexport function rsPrimeIcon(name: string, options: RsPrimeIconOptions = {}) {\r\n const family: RsIconFamily = options.family ?? \"outlined\";\r\n const normalizedName = name.trim();\r\n\r\n if (!iconNamePattern.test(normalizedName)) {\r\n throw new Error(`Invalid Material Symbols icon name: \"${name}\"`);\r\n }\r\n\r\n return `rs-icon rs-icon--prime rs-icon--${family} rs-icon-${normalizedName}`;\r\n}\r\n\r\nexport { default } from \"./RsIcon.vue\";\r\nexport type {\r\n RsIconColor,\r\n RsIconFamily,\r\n RsIconProps,\r\n RsIconSize,\r\n RsIconWeight,\r\n RsPrimeIconOptions,\r\n} from \"./RsIcon.types\";\r\n","<script setup lang=\"ts\">\r\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from \"vue\";\r\nimport Button from \"primevue/button\";\r\n\r\nimport RsIcon from \"../RsIcon\";\r\nimport type {\r\n RsAccountSelectorAccount,\r\n RsAccountSelectorAction,\r\n RsAccountSelectorProps,\r\n} from \"./RsAccountSelector.types\";\r\n\r\ndefineOptions({\r\n name: \"RsAccountSelector\",\r\n});\r\n\r\nconst props = withDefaults(defineProps<RsAccountSelectorProps>(), {\r\n accounts: () => [],\r\n actions: () => [],\r\n activeText: \"Activo en pantalla\",\r\n emptyText: \"\",\r\n footerActions: () => [],\r\n loading: false,\r\n modelValue: null,\r\n selectText: \"Ingresar\",\r\n triggerAriaLabel: \"Abrir selector de cuenta\",\r\n width: \"270px\",\r\n});\r\n\r\nconst emit = defineEmits<{\r\n \"select-account\": [account: RsAccountSelectorAccount];\r\n action: [action: RsAccountSelectorAction];\r\n \"footer-action\": [action: RsAccountSelectorAction];\r\n \"update:modelValue\": [open: boolean];\r\n open: [];\r\n close: [];\r\n}>();\r\n\r\nconst rootRef = ref<HTMLElement | null>(null);\r\nconst panelRef = ref<HTMLElement | null>(null);\r\nconst internalOpen = ref(false);\r\n\r\nconst panelCSSVars = {\r\n \"--rs-account-selector-width\": props.width,\r\n \"--rs-account-selector-background\": \"var(--rs-color-surface-primary, #ffffff)\",\r\n \"--rs-account-selector-border\": \"var(--rs-color-stroke-default, #d1d1d1)\",\r\n \"--rs-account-selector-color\": \"var(--rs-color-text-primary, #000000)\",\r\n \"--rs-account-selector-muted\": \"var(--rs-color-text-secondary, #909090)\",\r\n \"--rs-account-selector-active\": \"var(--rs-color-text-brand-green, #4eae01)\",\r\n \"--rs-account-selector-danger\": \"var(--rs-color-text-brand-red, #d80115)\",\r\n};\r\n\r\nconst panelPosition = ref<Record<string, string>>({});\r\n\r\nlet scrollRAF: number | null = null;\r\n\r\nconst isControlled = computed(() => props.modelValue !== null);\r\nconst isOpen = computed(() =>\r\n isControlled.value ? Boolean(props.modelValue) : internalOpen.value,\r\n);\r\nconst rootStyle = computed(() => ({\r\n \"--rs-account-selector-width\": props.width,\r\n}));\r\n\r\nconst computedTitle = computed(() => {\r\n if (props.title) {\r\n return props.title;\r\n }\r\n\r\n return props.accounts.length > 1\r\n ? `Acceso a ${props.accounts.length} Cuentas`\r\n : \"Acceso a\";\r\n});\r\n\r\nconst visibleActions = computed(() =>\r\n props.actions.filter((action) => action.visible !== false),\r\n);\r\nconst visibleFooterActions = computed(() =>\r\n props.footerActions.filter((action) => action.visible !== false),\r\n);\r\nconst shouldShowAccounts = computed(() => props.accounts.length > 1);\r\nconst profileAction: RsAccountSelectorAction = {\r\n id: \"profile\",\r\n label: \"Ver mi perfil\",\r\n};\r\n\r\nfunction headerButtonProps(action: RsAccountSelectorAction) {\r\n return action.variant === \"danger\"\r\n ? { severity: \"danger\" as const, outlined: true, rounded: true }\r\n : { severity: \"secondary\" as const, outlined: true, rounded: true };\r\n}\r\n\r\nfunction footerButtonProps(action: RsAccountSelectorAction) {\r\n return action.variant === \"danger\"\r\n ? { severity: \"danger\" as const, text: true }\r\n : { severity: \"secondary\" as const, text: true };\r\n}\r\n\r\nfunction emitAction(action: RsAccountSelectorAction) {\r\n if (!action.disabled) {\r\n emit(\"action\", action);\r\n closeSelector();\r\n }\r\n}\r\n\r\nfunction emitFooterAction(action: RsAccountSelectorAction) {\r\n if (!action.disabled) {\r\n emit(\"footer-action\", action);\r\n closeSelector();\r\n }\r\n}\r\n\r\nfunction selectAccount(account: RsAccountSelectorAccount) {\r\n if (!account.active && !account.disabled) {\r\n emit(\"select-account\", account);\r\n closeSelector();\r\n }\r\n}\r\n\r\nfunction getInitials(initials?: string) {\r\n return (initials?.trim() || \"?\").slice(0, 3);\r\n}\r\n\r\nfunction setOpen(nextOpen: boolean) {\r\n if (!isControlled.value) {\r\n internalOpen.value = nextOpen;\r\n }\r\n\r\n emit(\"update:modelValue\", nextOpen);\r\n\r\n if (nextOpen) {\r\n emit(\"open\");\r\n } else {\r\n emit(\"close\");\r\n }\r\n}\r\n\r\nfunction toggleSelector() {\r\n setOpen(!isOpen.value);\r\n}\r\n\r\nfunction closeSelector() {\r\n if (isOpen.value) {\r\n setOpen(false);\r\n }\r\n}\r\n\r\nfunction updatePanelPosition() {\r\n const root = rootRef.value;\r\n const panel = panelRef.value;\r\n\r\n if (!root || !panel) {\r\n return;\r\n }\r\n\r\n const viewportWidth = window.innerWidth;\r\n const viewportPadding = 16;\r\n const rootRect = root.getBoundingClientRect();\r\n const panelRect = panel.getBoundingClientRect();\r\n const fitsRight = rootRect.left + panelRect.width <= viewportWidth - viewportPadding;\r\n const fitsLeft = rootRect.right - panelRect.width >= viewportPadding;\r\n\r\n let left: number;\r\n if (fitsRight) {\r\n left = rootRect.left;\r\n } else if (fitsLeft) {\r\n left = rootRect.right - panelRect.width;\r\n } else {\r\n left = Math.max(\r\n viewportPadding,\r\n Math.min(rootRect.left, viewportWidth - viewportPadding - panelRect.width),\r\n );\r\n }\r\n\r\n panelPosition.value = {\r\n position: \"fixed\",\r\n top: `${rootRect.bottom + 8}px`,\r\n left: `${left}px`,\r\n };\r\n}\r\n\r\nfunction handleWindowResize() {\r\n if (isOpen.value) {\r\n void updatePanelPosition();\r\n }\r\n}\r\n\r\nfunction handleScroll() {\r\n if (isOpen.value) {\r\n if (scrollRAF === null) {\r\n scrollRAF = window.requestAnimationFrame(() => {\r\n scrollRAF = null;\r\n void updatePanelPosition();\r\n });\r\n }\r\n }\r\n}\r\n\r\nfunction handleDocumentPointerDown(event: PointerEvent) {\r\n const target = event.target;\r\n\r\n if (\r\n target instanceof Node &&\r\n rootRef.value &&\r\n !rootRef.value.contains(target) &&\r\n !panelRef.value?.contains(target)\r\n ) {\r\n closeSelector();\r\n }\r\n}\r\n\r\nonMounted(() => {\r\n document.addEventListener(\"pointerdown\", handleDocumentPointerDown);\r\n window.addEventListener(\"resize\", handleWindowResize);\r\n window.addEventListener(\"scroll\", handleScroll, { passive: true });\r\n\r\n if (isOpen.value) {\r\n void updatePanelPosition();\r\n }\r\n});\r\n\r\nonBeforeUnmount(() => {\r\n document.removeEventListener(\"pointerdown\", handleDocumentPointerDown);\r\n window.removeEventListener(\"resize\", handleWindowResize);\r\n window.removeEventListener(\"scroll\", handleScroll);\r\n\r\n if (scrollRAF !== null) {\r\n cancelAnimationFrame(scrollRAF);\r\n }\r\n});\r\n\r\nwatch(isOpen, (open) => {\r\n if (open) {\r\n void nextTick().then(updatePanelPosition);\r\n }\r\n});\r\n</script>\r\n\r\n<template>\r\n <div ref=\"rootRef\" class=\"rs-account-selector-host\" :style=\"rootStyle\">\r\n <Button\r\n :aria-expanded=\"isOpen\"\r\n :aria-label=\"triggerAriaLabel\"\r\n aria-haspopup=\"menu\"\r\n :class=\"[\r\n 'rs-account-selector__trigger',\r\n { 'rs-account-selector__trigger--open': isOpen },\r\n ]\"\r\n text\r\n @click.stop=\"toggleSelector\"\r\n >\r\n <RsIcon\r\n class=\"rs-account-selector__trigger-chevron\"\r\n family=\"rounded\"\r\n name=\"arrow_drop_down\"\r\n :size=\"22\"\r\n />\r\n <slot name=\"trigger-avatar\" :user=\"user\">\r\n <span class=\"rs-account-selector__trigger-avatar\">\r\n <img\r\n v-if=\"user.avatarSrc\"\r\n class=\"rs-account-selector__avatar-image\"\r\n :src=\"user.avatarSrc\"\r\n :alt=\"user.name || user.email\"\r\n />\r\n <span\r\n v-else\r\n class=\"rs-account-selector__avatar-placeholder\"\r\n aria-hidden=\"true\"\r\n >\r\n {{ getInitials(user.initials) }}\r\n </span>\r\n </span>\r\n </slot>\r\n </Button>\r\n\r\n <Teleport to=\"body\" v-if=\"isOpen\">\r\n <section\r\n ref=\"panelRef\"\r\n :aria-busy=\"loading || undefined\"\r\n class=\"rs-account-selector\"\r\n :style=\"[panelCSSVars, panelPosition]\"\r\n >\r\n <header class=\"rs-account-selector__summary\">\r\n <slot name=\"user-avatar\" :user=\"user\">\r\n <span class=\"rs-account-selector__avatar-stack\">\r\n <span\r\n class=\"rs-account-selector__avatar rs-account-selector__avatar--lg\"\r\n >\r\n <img\r\n v-if=\"user.avatarSrc\"\r\n class=\"rs-account-selector__avatar-image\"\r\n :src=\"user.avatarSrc\"\r\n :alt=\"user.name || user.email\"\r\n />\r\n <span\r\n v-else\r\n class=\"rs-account-selector__avatar-placeholder\"\r\n aria-hidden=\"true\"\r\n >\r\n {{ getInitials(user.initials) }}\r\n </span>\r\n </span>\r\n <span\r\n v-if=\"user.secondaryAvatarSrc\"\r\n class=\"rs-account-selector__avatar rs-account-selector__avatar--lg rs-account-selector__secondary-avatar\"\r\n >\r\n <img\r\n class=\"rs-account-selector__avatar-image\"\r\n :src=\"user.secondaryAvatarSrc\"\r\n :alt=\"user.name || user.email\"\r\n />\r\n </span>\r\n </span>\r\n </slot>\r\n\r\n <div class=\"rs-account-selector__user\">\r\n <p class=\"rs-account-selector__title\">{{ computedTitle }}</p>\r\n <p v-if=\"user.name\" class=\"rs-account-selector__name\">\r\n {{ user.name }}\r\n </p>\r\n <p class=\"rs-account-selector__email\">{{ user.email }}</p>\r\n </div>\r\n\r\n <slot name=\"actions\" :actions=\"visibleActions\">\r\n <div class=\"rs-account-selector__actions\">\r\n <template v-if=\"visibleActions.length > 0\">\r\n <Button\r\n v-for=\"action in visibleActions\"\r\n :key=\"action.id\"\r\n class=\"rs-account-selector__button\"\r\n :disabled=\"action.disabled\"\r\n size=\"small\"\r\n v-bind=\"headerButtonProps(action)\"\r\n @click.stop=\"emitAction(action)\"\r\n >\r\n <span>{{ action.label }}</span>\r\n <RsIcon v-if=\"action.icon\" :name=\"action.icon\" size=\"sm\" />\r\n </Button>\r\n </template>\r\n <Button\r\n v-else\r\n class=\"rs-account-selector__button rs-account-selector__profile-button\"\r\n severity=\"secondary\"\r\n outlined\r\n rounded\r\n size=\"small\"\r\n @click.stop=\"emitAction(profileAction)\"\r\n >\r\n Ver mi perfil\r\n </Button>\r\n </div>\r\n </slot>\r\n </header>\r\n\r\n <p v-if=\"loading\" class=\"rs-account-selector__state\">\r\n Cargando cuentas...\r\n </p>\r\n\r\n <slot v-else-if=\"accounts.length === 0\" name=\"empty\">\r\n <p v-if=\"emptyText\" class=\"rs-account-selector__state\">{{ emptyText }}</p>\r\n </slot>\r\n\r\n <div v-else-if=\"shouldShowAccounts\" class=\"rs-account-selector__accounts\">\r\n <Button\r\n v-for=\"account in accounts\"\r\n :key=\"account.id\"\r\n :class=\"[\r\n 'rs-account-selector__account',\r\n {\r\n 'rs-account-selector__account--active': account.active,\r\n 'rs-account-selector__account--disabled': account.disabled,\r\n },\r\n ]\"\r\n :disabled=\"account.active || account.disabled\"\r\n text\r\n severity=\"secondary\"\r\n @click.stop=\"selectAccount(account)\"\r\n >\r\n <slot name=\"account-avatar\" :account=\"account\">\r\n <span\r\n class=\"rs-account-selector__avatar rs-account-selector__avatar--sm rs-account-selector__account-avatar\"\r\n >\r\n <img\r\n v-if=\"account.avatarSrc\"\r\n class=\"rs-account-selector__avatar-image\"\r\n :src=\"account.avatarSrc\"\r\n :alt=\"account.label\"\r\n />\r\n <span\r\n v-else\r\n class=\"rs-account-selector__avatar-placeholder\"\r\n aria-hidden=\"true\"\r\n >\r\n {{ getInitials(account.initials) }}\r\n </span>\r\n </span>\r\n </slot>\r\n\r\n <span class=\"rs-account-selector__account-info\">\r\n <span class=\"rs-account-selector__account-label\">{{\r\n account.label\r\n }}</span>\r\n <span\r\n :class=\"[\r\n 'rs-account-selector__account-state',\r\n account.active\r\n ? 'rs-account-selector__account-state--active'\r\n : 'rs-account-selector__account-state--inactive',\r\n ]\"\r\n >\r\n {{ account.active ? activeText : selectText }}\r\n </span>\r\n </span>\r\n\r\n <span class=\"rs-account-selector__account-trailing\">\r\n <slot name=\"account-trailing\" :account=\"account\">\r\n <RsIcon name=\"login\" />\r\n </slot>\r\n </span>\r\n </Button>\r\n </div>\r\n\r\n <slot name=\"footer\" :actions=\"visibleFooterActions\">\r\n <footer\r\n v-if=\"visibleFooterActions.length > 0\"\r\n class=\"rs-account-selector__footer\"\r\n >\r\n <Button\r\n v-for=\"action in visibleFooterActions\"\r\n :key=\"action.id\"\r\n class=\"rs-account-selector__button\"\r\n :disabled=\"action.disabled\"\r\n size=\"small\"\r\n v-bind=\"footerButtonProps(action)\"\r\n @click.stop=\"emitFooterAction(action)\"\r\n >\r\n <span class=\"rs-account-selector__button-content\">\r\n <span>{{ action.label }}</span>\r\n <RsIcon v-if=\"action.icon\" :name=\"action.icon\" size=\"sm\" />\r\n </span>\r\n </Button>\r\n </footer>\r\n </slot>\r\n </section>\r\n </Teleport>\r\n </div>\r\n</template>\r\n\r\n<style src=\"./RsAccountSelector.css\"></style>\r\n","<script setup lang=\"ts\">\r\nimport { computed, onBeforeUnmount, onMounted, ref, watch } from \"vue\";\r\nimport Menu from \"primevue/menu\";\r\nimport type { MenuItem } from \"primevue/menuitem\";\r\n\r\nimport RsIcon from \"../RsIcon\";\r\nimport type { RsSidebarItem, RsSidebarModule, RsSidebarProps } from \"./RsSidebar.types\";\r\n\r\ndefineOptions({\r\n name: \"RsSidebar\",\r\n});\r\n\r\nconst props = withDefaults(defineProps<RsSidebarProps>(), {\r\n ariaLabel: \"Navegacion principal\",\r\n expandOnHover: true,\r\n expanded: false,\r\n footerItems: () => [],\r\n icon: \"nest_eco_leaf\",\r\n mobileOpen: false,\r\n modules: () => [],\r\n navigateOnModuleSelect: false,\r\n title: \"\",\r\n variant: \"cyo\",\r\n});\r\n\r\nconst emit = defineEmits<{\r\n \"item-click\": [item: RsSidebarItem];\r\n \"close-mobile\": [];\r\n \"expanded-change\": [expanded: boolean];\r\n \"module-select\": [module: RsSidebarModule];\r\n}>();\r\n\r\nconst isHovered = ref(false);\r\nconst activeParent = ref<RsSidebarItem | null>(null);\r\nconst isModuleMenuOpen = ref(false);\r\nconst rootElement = ref<HTMLElement | null>(null);\r\n\r\nconst visibleItems = computed(() => props.items.filter(isVisible));\r\nconst visibleFooterItems = computed(() => props.footerItems.filter(isVisible));\r\nconst visibleModules = computed(() => props.modules);\r\nconst activeModule = computed(\r\n () =>\r\n props.modules.find((module) => module.active) ??\r\n props.modules.find((module) => module.text === props.title) ??\r\n props.modules[0] ??\r\n null,\r\n);\r\nconst displayedHeaderTitle = computed(() => activeModule.value?.text || props.title);\r\nconst moduleMenuItems = computed<MenuItem[]>(() =>\r\n visibleModules.value.map((module) => {\r\n const isCurrent = module.active || module.text === displayedHeaderTitle.value;\r\n\r\n return {\r\n class: [\r\n \"rs-sidebar__module-option\",\r\n {\r\n \"rs-sidebar__module-option--active\": isCurrent,\r\n \"rs-sidebar__module-option--disabled\": module.disabled || isCurrent,\r\n },\r\n ],\r\n command: () => selectModule(module),\r\n disabled: module.disabled || isCurrent,\r\n label: module.text,\r\n };\r\n }),\r\n);\r\n\r\nconst displayedItems = computed(() =>\r\n activeParent.value ? activeParent.value.children?.filter(isVisible) ?? [] : visibleItems.value,\r\n);\r\n\r\nconst isExpanded = computed(() => props.expanded || props.mobileOpen || isHovered.value);\r\nconst hasHeaderAction = computed(() => props.mobileOpen);\r\nconst hasModuleSelector = computed(() => props.modules.length > 0);\r\n\r\nconst rootClass = computed(() => [\r\n \"rs-sidebar\",\r\n `rs-sidebar--${props.variant}`,\r\n {\r\n \"rs-sidebar--expanded\": isExpanded.value,\r\n \"rs-sidebar--mobile-open\": props.mobileOpen,\r\n \"rs-sidebar--submenu\": !!activeParent.value,\r\n },\r\n]);\r\n\r\nwatch(\r\n () => props.mobileOpen,\r\n (isOpen) => {\r\n if (!isOpen) {\r\n activeParent.value = null;\r\n }\r\n\r\n isModuleMenuOpen.value = false;\r\n },\r\n);\r\n\r\nwatch(isExpanded, (expanded) => {\r\n if (!expanded) {\r\n activeParent.value = null;\r\n }\r\n\r\n emit(\"expanded-change\", expanded);\r\n});\r\n\r\nwatch(\r\n () => activeParent.value,\r\n () => {\r\n isModuleMenuOpen.value = false;\r\n },\r\n);\r\n\r\nonMounted(() => {\r\n document.addEventListener(\"pointerdown\", handleDocumentPointerDown);\r\n});\r\n\r\nonBeforeUnmount(() => {\r\n document.removeEventListener(\"pointerdown\", handleDocumentPointerDown);\r\n});\r\n\r\nfunction isVisible(item: RsSidebarItem) {\r\n return item.visible !== false;\r\n}\r\n\r\nfunction hasVisibleChildren(item: RsSidebarItem) {\r\n return (item.children ?? []).some(isVisible);\r\n}\r\n\r\nfunction setHovered(value: boolean) {\r\n if (!props.expandOnHover || props.mobileOpen) {\r\n return;\r\n }\r\n\r\n isHovered.value = value;\r\n if (!value) {\r\n isModuleMenuOpen.value = false;\r\n }\r\n}\r\n\r\nfunction handleItemClick(item: RsSidebarItem) {\r\n if (item.disabled) {\r\n return;\r\n }\r\n\r\n if (hasVisibleChildren(item)) {\r\n activeParent.value = item;\r\n return;\r\n }\r\n\r\n emit(\"item-click\", item);\r\n}\r\n\r\nfunction goBack() {\r\n activeParent.value = null;\r\n}\r\n\r\nfunction closeMobile() {\r\n activeParent.value = null;\r\n isModuleMenuOpen.value = false;\r\n emit(\"close-mobile\");\r\n}\r\n\r\nfunction toggleModuleMenu() {\r\n if (!hasModuleSelector.value || !isExpanded.value) {\r\n return;\r\n }\r\n\r\n isModuleMenuOpen.value = !isModuleMenuOpen.value;\r\n}\r\n\r\nfunction selectModule(module: RsSidebarModule) {\r\n if (module.disabled) {\r\n return;\r\n }\r\n\r\n isModuleMenuOpen.value = false;\r\n emit(\"module-select\", module);\r\n\r\n if (props.navigateOnModuleSelect && typeof window !== \"undefined\" && module.link) {\r\n window.location.href = module.link;\r\n }\r\n}\r\n\r\nfunction handleDocumentPointerDown(event: PointerEvent) {\r\n if (!isModuleMenuOpen.value || !rootElement.value) {\r\n return;\r\n }\r\n\r\n if (!rootElement.value.contains(event.target as Node)) {\r\n isModuleMenuOpen.value = false;\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <aside\r\n ref=\"rootElement\"\r\n :aria-label=\"ariaLabel\"\r\n :class=\"rootClass\"\r\n @mouseenter=\"setHovered(true)\"\r\n @mouseleave=\"setHovered(false)\"\r\n >\r\n <slot\r\n name=\"header\"\r\n :expanded=\"isExpanded\"\r\n :active-parent=\"activeParent\"\r\n :close-mobile=\"closeMobile\"\r\n :go-back=\"goBack\"\r\n >\r\n <header class=\"rs-sidebar__header\">\r\n <div\r\n :class=\"[\r\n 'rs-sidebar__brand',\r\n {\r\n 'rs-sidebar__brand--trigger': hasModuleSelector,\r\n },\r\n ]\"\r\n >\r\n <button\r\n v-if=\"hasModuleSelector\"\r\n class=\"rs-sidebar__module-trigger\"\r\n type=\"button\"\r\n :aria-expanded=\"isModuleMenuOpen\"\r\n aria-haspopup=\"menu\"\r\n @click=\"toggleModuleMenu\"\r\n >\r\n <RsIcon :name=\"icon\" />\r\n <span class=\"rs-sidebar__title\">{{ displayedHeaderTitle }}</span>\r\n <RsIcon\r\n class=\"rs-sidebar__module-chevron\"\r\n :name=\"isModuleMenuOpen ? 'arrow_drop_up' : 'arrow_drop_down'\"\r\n color=\"secondary\"\r\n size=\"sm\"\r\n />\r\n </button>\r\n\r\n <template v-else>\r\n <RsIcon :name=\"icon\" />\r\n <span class=\"rs-sidebar__title\">{{ displayedHeaderTitle }}</span>\r\n </template>\r\n </div>\r\n\r\n <slot\r\n name=\"header-action\"\r\n :active-parent=\"activeParent\"\r\n :close-mobile=\"closeMobile\"\r\n :go-back=\"goBack\"\r\n >\r\n <button\r\n v-if=\"hasHeaderAction\"\r\n class=\"rs-sidebar__header-button\"\r\n type=\"button\"\r\n aria-label=\"Cerrar menu\"\r\n @click=\"closeMobile\"\r\n >\r\n <RsIcon name=\"close\" />\r\n </button>\r\n </slot>\r\n </header>\r\n\r\n <Menu\r\n v-if=\"hasModuleSelector && isModuleMenuOpen\"\r\n class=\"rs-sidebar__module-menu\"\r\n :model=\"moduleMenuItems\"\r\n :pt=\"{\r\n root: { role: 'menu' },\r\n }\"\r\n />\r\n </slot>\r\n\r\n <div class=\"rs-sidebar__content\">\r\n <nav class=\"rs-sidebar__nav\" aria-label=\"Secciones\">\r\n <ul class=\"rs-sidebar__list\">\r\n <li v-if=\"activeParent\" class=\"rs-sidebar__list-item\">\r\n <button\r\n class=\"rs-sidebar__item rs-sidebar__item--back\"\r\n type=\"button\"\r\n @click=\"goBack()\"\r\n >\r\n <RsIcon\r\n class=\"rs-sidebar__item-icon\"\r\n name=\"arrow_left\"\r\n :fill=\"true\"\r\n />\r\n <span class=\"rs-sidebar__item-label\">{{ activeParent.label }}</span>\r\n </button>\r\n </li>\r\n <li v-for=\"item in displayedItems\" :key=\"item.id\" class=\"rs-sidebar__list-item\">\r\n <button\r\n :class=\"[\r\n 'rs-sidebar__item',\r\n {\r\n 'rs-sidebar__item--active': item.active,\r\n 'rs-sidebar__item--disabled': item.disabled,\r\n 'rs-sidebar__item--parent': hasVisibleChildren(item),\r\n },\r\n ]\"\r\n type=\"button\"\r\n :disabled=\"item.disabled\"\r\n @click=\"handleItemClick(item)\"\r\n >\r\n <slot name=\"item\" :item=\"item\" :expanded=\"isExpanded\">\r\n <RsIcon\r\n v-if=\"item.icon\"\r\n class=\"rs-sidebar__item-icon\"\r\n :name=\"item.icon\"\r\n />\r\n <span class=\"rs-sidebar__item-label\">{{ item.label }}</span>\r\n <RsIcon\r\n v-if=\"hasVisibleChildren(item)\"\r\n class=\"rs-sidebar__item-chevron\"\r\n name=\"chevron_right\"\r\n size=\"sm\"\r\n />\r\n </slot>\r\n </button>\r\n </li>\r\n </ul>\r\n </nav>\r\n\r\n <slot name=\"footer\" :items=\"visibleFooterItems\" :expanded=\"isExpanded\">\r\n <nav\r\n v-if=\"visibleFooterItems.length > 0\"\r\n class=\"rs-sidebar__footer\"\r\n aria-label=\"Acciones secundarias\"\r\n >\r\n <ul class=\"rs-sidebar__list\">\r\n <li v-for=\"item in visibleFooterItems\" :key=\"item.id\" class=\"rs-sidebar__list-item\">\r\n <button\r\n :class=\"[\r\n 'rs-sidebar__item',\r\n 'rs-sidebar__item--footer',\r\n {\r\n 'rs-sidebar__item--active': item.active,\r\n 'rs-sidebar__item--disabled': item.disabled,\r\n },\r\n ]\"\r\n type=\"button\"\r\n :disabled=\"item.disabled\"\r\n @click=\"handleItemClick(item)\"\r\n >\r\n <RsIcon\r\n v-if=\"item.icon\"\r\n class=\"rs-sidebar__item-icon\"\r\n :name=\"item.icon\"\r\n />\r\n <span class=\"rs-sidebar__item-label\">{{ item.label }}</span>\r\n </button>\r\n </li>\r\n </ul>\r\n </nav>\r\n </slot>\r\n </div>\r\n </aside>\r\n</template>\r\n\r\n<style src=\"./RsSidebar.css\"></style>\r\n","import type { App, Plugin } from \"vue\";\r\n\r\nimport RsAccountSelector from \"./components/RsAccountSelector\";\r\nimport RsIcon from \"./components/RsIcon\";\r\nimport RsSidebar from \"./components/RsSidebar\";\r\n\r\nexport const components = [RsAccountSelector, RsIcon, RsSidebar] as const;\r\n\r\nexport const RobosophyUiVue: Plugin = {\r\n install(app: App) {\r\n for (const component of components) {\r\n app.component(component.name ?? \"\", component);\r\n }\r\n },\r\n};\r\n\r\nexport default RobosophyUiVue;\r\n"],"names":["_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_3","_hoisted_5","_createVNode","_unref","_normalizeClass","RsIcon","_renderSlot","_toDisplayString","_createBlock","_Teleport","_normalizeStyle","_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/plugin.d.ts
CHANGED
|
@@ -115,6 +115,7 @@ export declare const components: readonly [{
|
|
|
115
115
|
weight: import(".").RsIconWeight;
|
|
116
116
|
grade: number;
|
|
117
117
|
interactive: boolean;
|
|
118
|
+
notification: boolean;
|
|
118
119
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
|
|
119
120
|
new (...args: any[]): import("vue").CreateComponentPublicInstanceWithMixins<Readonly<import(".").RsSidebarProps> & Readonly<{
|
|
120
121
|
"onItem-click"?: ((item: import(".").RsSidebarItem) => any) | undefined;
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAO,MAAM,EAAE,MAAM,KAAK,CAAC;AAMvC,eAAO,MAAM,UAAU
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAO,MAAM,EAAE,MAAM,KAAK,CAAC;AAMvC,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAAkD,CAAC;AAE1E,eAAO,MAAM,cAAc,EAAE,MAM5B,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
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; 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 skipStringBackward(source: string, pos: number, quote: string): number {\n pos--;\n while (pos >= 0) {\n if (source[pos] === \"\\\\\") {\n pos -= 2;\n continue;\n }\n if (source[pos] === quote) {\n let backslashCount = 0;\n let k = pos - 1;\n while (k >= 0 && source[k] === \"\\\\\") {\n backslashCount++;\n k--;\n }\n if (backslashCount % 2 === 1) {\n pos = pos - backslashCount - 1;\n continue;\n }\n return pos - 1;\n }\n pos--;\n }\n return -1;\n}\n\nfunction skipStringForward(source: string, pos: number, quote: string): number {\n pos++;\n while (pos < source.length) {\n if (source[pos] === \"\\\\\") {\n pos += 2;\n continue;\n }\n if (source[pos] === quote) {\n return pos + 1;\n }\n pos++;\n }\n return source.length;\n}\n\nfunction findEnclosingObject(\n source: string,\n fromIndex: number,\n): { start: number; end: number; body: string } | null {\n let depth = 0;\n let i = fromIndex;\n\n while (i >= 0) {\n const char = source[i];\n\n if (char === '\"' || char === \"'\" || char === \"`\") {\n i = skipStringBackward(source, i, char);\n continue;\n }\n\n // Line comment //\n if (char === \"/\" && i > 0 && source[i - 1] === \"/\") {\n i -= 2;\n while (i >= 0 && source[i] !== \"\\n\") i--;\n continue;\n }\n\n // Block comment */\n if (char === \"/\" && i > 0 && source[i - 1] === \"*\") {\n i -= 2;\n while (i >= 0) {\n if (source[i] === \"/\" && i + 1 < source.length && source[i + 1] === \"*\") {\n i--;\n break;\n }\n i--;\n }\n continue;\n }\n\n if (char === \"}\") {\n depth++;\n } else if (char === \"{\") {\n if (depth === 0) {\n const start = i;\n let j = i + 1;\n let innerDepth = 1;\n\n while (j < source.length) {\n const c = source[j];\n\n if (c === '\"' || c === \"'\" || c === \"`\") {\n j = skipStringForward(source, j, c);\n continue;\n }\n\n if (c === \"/\") {\n // Line comment //\n if (j + 1 < source.length && source[j + 1] === \"/\") {\n j += 2;\n while (j < source.length && source[j] !== \"\\n\") j++;\n continue;\n }\n // Block comment /*\n if (j + 1 < source.length && source[j + 1] === \"*\") {\n j += 2;\n while (j + 1 < source.length) {\n if (source[j] === \"*\" && source[j + 1] === \"/\") {\n j += 2;\n break;\n }\n j++;\n }\n continue;\n }\n }\n\n if (c === \"{\") innerDepth++;\n else if (c === \"}\") {\n innerDepth--;\n if (innerDepth === 0) {\n return {\n start,\n end: j,\n body: source.slice(start + 1, j),\n };\n }\n }\n\n j++;\n }\n\n return null;\n }\n depth--;\n }\n\n i--;\n }\n\n return null;\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 isNameDynamic = \":name\" in attrs;\n const familyList = resolveFamilies(rawFamily, hasFamily);\n const names = resolveNames(rawName, isNameDynamic);\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 const name = objectMatch[1] ?? \"\";\n const obj = findEnclosingObject(source, objectMatch.index);\n if (obj) {\n const cleanBody = obj.body.replace(/\\/\\/.*/g, \"\").replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\");\n const weightMatch = cleanBody.match(/\\bweight\\s*:\\s*(\\d+)/);\n const familyMatch = cleanBody.match(/\\bfamily\\s*:\\s*[\"'](\\w+)[\"']/);\n addUsage(usages, {\n family: familyMatch ? (familyMatch[1] as RsIconFamily) : defaultFamily,\n name,\n weight: weightMatch ? parseInt(weightMatch[1], 10) : undefined,\n });\n } else {\n addUsage(usages, { family: defaultFamily, name });\n }\n }\n\n // Pattern 4: magic comments @robosophy-icon\n // Use for icons that cannot be detected statically (props, variables, API, etc.)\n const magicCommentPattern = /\\/\\/\\s*@robosophy-icon:\\s*([a-z0-9_]+)/g;\n let magicMatch: RegExpExecArray | null;\n\n while ((magicMatch = magicCommentPattern.exec(source))) {\n const name = magicMatch[1] ?? \"\";\n const lineEnd = source.indexOf(\"\\n\", magicMatch.index);\n const line = lineEnd === -1 ? source.slice(magicMatch.index) : source.slice(magicMatch.index, lineEnd);\n const familyMatch = line.match(/\\bfamily\\s*=\\s*[\"']?(\\w+)[\"']?/);\n const weightMatch = line.match(/\\bweight\\s*=\\s*(\\d+)/);\n addUsage(usages, {\n family: familyMatch ? (familyMatch[1] as RsIconFamily) : defaultFamily,\n name,\n weight: weightMatch ? parseInt(weightMatch[1], 10) : undefined,\n });\n }\n\n // Pattern 5: icon arrays — detect arrays assigned to variables with \"icon\" in the name\n // e.g. const iconNames = [\"home\", \"search\"]\n const iconArrayPattern = /(?:const|let|var)\\s+(\\w*[Ii]con\\w*)\\s*=\\s*\\[/g;\n let arrayMatch: RegExpExecArray | null;\n\n while ((arrayMatch = iconArrayPattern.exec(source))) {\n const bracketStart = arrayMatch.index + arrayMatch[0].length - 1;\n let depth = 1;\n let j = bracketStart + 1;\n\n while (j < source.length) {\n const c = source[j];\n\n if (c === '\"' || c === \"'\" || c === \"`\") {\n j = skipStringForward(source, j, c);\n continue;\n }\n\n if (c === \"/\") {\n if (j + 1 < source.length && source[j + 1] === \"/\") {\n j += 2;\n while (j < source.length && source[j] !== \"\\n\") j++;\n continue;\n }\n if (j + 1 < source.length && source[j + 1] === \"*\") {\n j += 2;\n while (j + 1 < source.length) {\n if (source[j] === \"*\" && source[j + 1] === \"/\") {\n j += 2;\n break;\n }\n j++;\n }\n continue;\n }\n }\n\n if (c === \"[\") depth++;\n else if (c === \"]\") {\n depth--;\n if (depth === 0) break;\n }\n\n j++;\n }\n\n if (depth === 0) {\n const arrayContent = source.slice(bracketStart + 1, j);\n let braceDepth = 0;\n let k = 0;\n\n while (k < arrayContent.length) {\n const c = arrayContent[k];\n\n if (c === '\"' || c === \"'\" || c === \"`\") {\n if (braceDepth === 0) {\n const quote = c;\n let strEnd = k + 1;\n while (strEnd < arrayContent.length) {\n if (arrayContent[strEnd] === \"\\\\\") {\n strEnd += 2;\n continue;\n }\n if (arrayContent[strEnd] === quote) break;\n strEnd++;\n }\n const iconName = arrayContent.slice(k + 1, strEnd);\n if (iconNamePattern.test(iconName)) {\n addUsage(usages, { family: defaultFamily, name: iconName });\n }\n k = strEnd + 1;\n continue;\n } else {\n k = skipStringForward(arrayContent, k, c);\n continue;\n }\n }\n\n if (c === \"{\") braceDepth++;\n else if (c === \"}\") braceDepth--;\n\n k++;\n }\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, isDynamic = false): 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 if (isDynamic) return names;\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\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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"}
|
|
1
|
+
{"version":3,"file":"vite.js","sources":["../src/vite.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\r\nimport { mkdir, readFile, readdir, writeFile } from \"node:fs/promises\";\r\nimport { extname, join, sep } from \"node:path\";\r\nimport { fileURLToPath } from \"node:url\";\r\nimport type { HtmlTagDescriptor, IndexHtmlTransformResult, Plugin, ResolvedConfig } from \"vite\";\r\n\r\nimport type { RsIconFamily } from \"./components/RsIcon\";\r\n\r\ntype IconInput = string | { family?: RsIconFamily; name: string; weight?: number };\r\nexport type RsIconFontDisplay = \"block\" | \"swap\" | \"fallback\" | \"optional\";\r\n\r\nexport type RobosophyMaterialSymbolsOptions = {\r\n outputDir?: string;\r\n fontDisplay?: RsIconFontDisplay;\r\n fontVariant?: string;\r\n include?: IconInput[];\r\n preload?: boolean;\r\n roots?: string[];\r\n scan?: boolean;\r\n};\r\n\r\ntype IconUsageMap = Map<RsIconFamily, Map<string, Set<number>>>;\r\n\r\nconst families = [\"outlined\", \"rounded\", \"sharp\"] as const satisfies readonly RsIconFamily[];\r\nconst defaultFamily: RsIconFamily = \"outlined\";\r\nconst iconNamePattern = /^[a-z0-9_]+$/;\r\nconst sourceExtensions = new Set([\".js\", \".jsx\", \".mjs\", \".ts\", \".tsx\", \".vue\"]);\r\nconst skippedDirs = new Set([\".git\", \"dist\", \"node_modules\", \"storybook-static\"]);\r\nconst internalIconNames = [\r\n \"arrow_drop_down\",\r\n \"arrow_drop_up\",\r\n \"arrow_left\",\r\n \"chevron_right\",\r\n \"close\",\r\n \"login\",\r\n \"nest_eco_leaf\",\r\n];\r\n\r\nconst GITHUB_RAW =\r\n \"https://raw.githubusercontent.com/google/material-design-icons/master/symbols/web\";\r\nconst CACHE_BASE = join(\"node_modules\", \".cache\", \"robosophy-svgs\");\r\nconst BASE_OPSZ = 24;\r\nconst DEFAULT_WEIGHT = 400;\r\n\r\nconst GRADE_VARIANTS = [0, -25, 200] as const;\r\n\r\nexport function robosophyMaterialSymbols(\r\n options: RobosophyMaterialSymbolsOptions = {},\r\n): Plugin {\r\n const raw = (options.outputDir ?? \"\").trim().replace(/^\\/+/, \"\");\r\n const outputDir = raw\r\n .split(\"/\")\r\n .filter((part) => part && part !== \"..\")\r\n .join(\"/\") || \"assets\";\r\n let config: ResolvedConfig;\r\n let cacheDir: string;\r\n let cachedAssets: GeneratedMaterialSymbolsAssets | null = null;\r\n let cachedUsagesKey = \"\";\r\n let needsRegeneration = true;\r\n\r\n function usageMapKey(usages: IconUsageMap): string {\r\n const parts: string[] = [];\r\n for (const family of families) {\r\n const iconWeights = usages.get(family);\r\n if (!iconWeights || iconWeights.size === 0) continue;\r\n const entries = [...iconWeights.entries()]\r\n .map(([name, weights]) => `${name}[${[...weights].sort().join(\",\")}]`)\r\n .sort();\r\n parts.push(`${family}:${entries.join(\",\")}`);\r\n }\r\n return parts.join(\"|\") || \"(empty)\";\r\n }\r\n\r\n async function getAssets(): Promise<GeneratedMaterialSymbolsAssets> {\r\n if (!needsRegeneration && cachedAssets) return cachedAssets;\r\n\r\n const usages = await collectMaterialSymbolUsages(config, options);\r\n const newKey = usageMapKey(usages);\r\n\r\n if (newKey === cachedUsagesKey && cachedAssets) {\r\n needsRegeneration = false;\r\n return cachedAssets;\r\n }\r\n\r\n if (config.command !== \"build\" && cachedUsagesKey !== \"\") {\r\n config.logger.info(\r\n \"[robosophy-material-symbols] icon usage changed, regenerating SVG sprite\",\r\n );\r\n }\r\n\r\n cachedUsagesKey = newKey;\r\n cachedAssets = await ensureGeneratedAssets(config, options, cacheDir);\r\n needsRegeneration = false;\r\n return cachedAssets;\r\n }\r\n\r\n return {\r\n name: \"robosophy-material-symbols\",\r\n async configResolved(resolvedConfig) {\r\n config = resolvedConfig;\r\n cacheDir = join(config.root, CACHE_BASE);\r\n await mkdir(cacheDir, { recursive: true });\r\n },\r\n async buildStart() {\r\n if (config.command === \"serve\" || config.command === \"build\") {\r\n await getAssets();\r\n }\r\n },\r\n async transformIndexHtml(): Promise<IndexHtmlTransformResult> {\r\n const assets = await getAssets();\r\n\r\n const tag: HtmlTagDescriptor = {\r\n tag: \"svg\",\r\n attrs: {\r\n xmlns: \"http://www.w3.org/2000/svg\",\r\n style: \"display:none;\",\r\n \"aria-hidden\": \"true\",\r\n },\r\n children: assets.spriteContent,\r\n injectTo: \"body-prepend\",\r\n };\r\n\r\n return [tag, ...buildMaterialSymbolsCss(assets.css)];\r\n },\r\n configureServer(server) {\r\n server.watcher.on(\"all\", (_event, file) => {\r\n if (sourceExtensions.has(extname(file))) {\r\n needsRegeneration = true;\r\n }\r\n });\r\n server.middlewares.use(async (request, response, next) => {\r\n if (!request.url?.startsWith(\"/@robosophy-material-symbols/\")) {\r\n next();\r\n return;\r\n }\r\n\r\n try {\r\n const assets = await getAssets();\r\n const fileName = decodeURIComponent(\r\n request.url.replace(\"/@robosophy-material-symbols/\", \"\").split(\"?\")[0] ?? \"\",\r\n );\r\n\r\n if (fileName === \"rs-material-symbols.svg\") {\r\n response.setHeader(\"Content-Type\", \"image/svg+xml; charset=utf-8\");\r\n response.setHeader(\"Cache-Control\", \"no-cache\");\r\n response.end(assets.fullSprite);\r\n return;\r\n }\r\n\r\n next();\r\n } catch (error) {\r\n next(error);\r\n }\r\n });\r\n },\r\n async generateBundle(_outputOptions) {\r\n const assets = await getAssets();\r\n\r\n if (assets.fullSprite) {\r\n this.emitFile({\r\n fileName: `${outputDir}/rs-material-symbols.svg`,\r\n name: \"rs-material-symbols.svg\",\r\n source: assets.fullSprite,\r\n type: \"asset\",\r\n });\r\n }\r\n },\r\n };\r\n}\r\n\r\ntype GeneratedMaterialSymbolsAssets = {\r\n fullSprite: string;\r\n spriteContent: string;\r\n css: string;\r\n};\r\n\r\ntype SvgVariant = {\r\n suffix: string;\r\n symbolSuffix: string;\r\n};\r\n\r\nfunction buildSvgVariants(weight: number = DEFAULT_WEIGHT): SvgVariant[] {\r\n const variants: SvgVariant[] = [];\r\n for (const grade of GRADE_VARIANTS) {\r\n const gradeSuffix = grade === 0 ? \"\" : grade > 0 ? `grad${grade}` : `gradN${Math.abs(grade)}`;\r\n const symbolGradeSuffix = grade === 0 ? \"\" : `-${gradeSuffix}`;\r\n\r\n for (const fill of [false, true]) {\r\n const fillSuffix = fill ? \"fill1\" : \"\";\r\n const symbolFillSuffix = fill ? \"-fill\" : \"\";\r\n const weightSuffix = weight !== DEFAULT_WEIGHT ? `wght${weight}` : \"\";\r\n const weightSymbolSuffix = weight !== DEFAULT_WEIGHT ? `-wght${weight}` : \"\";\r\n const parts = [gradeSuffix, fillSuffix, weightSuffix].filter(Boolean);\r\n\r\n variants.push({\r\n suffix: parts.length > 0 ? `${parts.join(\"\")}_${BASE_OPSZ}px` : `${BASE_OPSZ}px`,\r\n symbolSuffix: `${symbolGradeSuffix}${symbolFillSuffix}${weightSymbolSuffix}`,\r\n });\r\n }\r\n }\r\n return variants;\r\n}\r\n\r\nfunction buildSvgUrl(name: string, family: RsIconFamily, suffix: string): string {\r\n const style = family === \"outlined\" ? \"materialsymbolsoutlined\"\r\n : family === \"rounded\" ? \"materialsymbolsrounded\"\r\n : \"materialsymbolssharp\";\r\n return `${GITHUB_RAW}/${name.toLowerCase()}/${style}/${name.toLowerCase()}_${suffix}.svg`;\r\n}\r\n\r\nfunction buildSymbolId(name: string, family: RsIconFamily, symbolSuffix: string): string {\r\n return `rs-icon-${family}-${name}${symbolSuffix}`;\r\n}\r\n\r\nasync function fetchSvg(url: string): Promise<string | null> {\r\n try {\r\n const response = await fetch(url);\r\n if (!response.ok) return null;\r\n return await response.text();\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nasync function loadSvgFromCache(cacheDir: string, cacheKey: string): Promise<string | null> {\r\n const cachePath = join(cacheDir, `${cacheKey}.svg`);\r\n try {\r\n return await readFile(cachePath, \"utf8\");\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nasync function saveSvgToCache(cacheDir: string, cacheKey: string, content: string): Promise<void> {\r\n const cachePath = join(cacheDir, `${cacheKey}.svg`);\r\n try {\r\n await writeFile(cachePath, content, \"utf8\");\r\n } catch {\r\n // Ignore cache write errors\r\n }\r\n}\r\n\r\nfunction parseSvgPaths(svgContent: string): string | null {\r\n const viewBoxMatch = svgContent.match(/viewBox=\"([^\"]+)\"/i);\r\n if (!viewBoxMatch) return null;\r\n\r\n const paths: string[] = [];\r\n const pathRegex = /<path\\s+([^>]*)>/g;\r\n let pathMatch: RegExpExecArray | null;\r\n\r\n while ((pathMatch = pathRegex.exec(svgContent))) {\r\n const attrs = pathMatch[1] ?? \"\";\r\n const dMatch = attrs.match(/d=\"([^\"]*)\"/);\r\n if (dMatch) {\r\n paths.push(dMatch[1] ?? \"\");\r\n }\r\n }\r\n\r\n if (paths.length === 0) return null;\r\n\r\n return paths\r\n .map((d) => `<path fill=\"currentColor\" d=\"${d}\"/>`)\r\n .join(\"\");\r\n}\r\n\r\nasync function generateSpriteAssets(\r\n usages: IconUsageMap,\r\n cacheDir: string,\r\n config: ResolvedConfig,\r\n): Promise<GeneratedMaterialSymbolsAssets> {\r\n const symbols: string[] = [];\r\n const iconClasses: string[] = [];\r\n let totalFetched = 0;\r\n let totalBytes = 0;\r\n\r\n for (const family of families) {\r\n const iconWeights = usages.get(family);\r\n if (!iconWeights || iconWeights.size === 0) continue;\r\n\r\n for (const [name, weights] of [...iconWeights.entries()].sort()) {\r\n for (const weight of [...weights].sort()) {\r\n const variants = buildSvgVariants(weight);\r\n for (const variant of variants) {\r\n const symbolId = buildSymbolId(name, family, variant.symbolSuffix);\r\n const url = buildSvgUrl(name, family, variant.suffix);\r\n const cacheKey = createHash(\"sha256\")\r\n .update(url)\r\n .digest(\"hex\")\r\n .slice(0, 12);\r\n\r\n let svgContent = cacheDir ? await loadSvgFromCache(cacheDir, cacheKey) : null;\r\n\r\n if (!svgContent) {\r\n svgContent = await fetchSvg(url);\r\n if (!svgContent) continue;\r\n\r\n if (cacheDir) {\r\n await saveSvgToCache(cacheDir, cacheKey, svgContent);\r\n }\r\n }\r\n\r\n const pathContent = parseSvgPaths(svgContent);\r\n if (!pathContent) continue;\r\n\r\n symbols.push(\r\n `<symbol id=\"${symbolId}\" viewBox=\"0 -960 960 960\" fill=\"currentColor\">${pathContent}</symbol>`,\r\n );\r\n\r\n totalFetched++;\r\n totalBytes += svgContent.length;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const iconNames = new Set<string>();\r\n for (const family of families) {\r\n const iconWeights = usages.get(family);\r\n if (iconWeights) {\r\n for (const name of iconWeights.keys()) {\r\n iconNames.add(name);\r\n }\r\n }\r\n }\r\n for (const name of [...iconNames].sort()) {\r\n iconClasses.push(`.rs-icon-${name} { --rs-icon-content: \"${name}\"; }`);\r\n }\r\n\r\n const spriteContent = `<defs>${symbols.join(\"\")}</defs>`;\r\n const fullSprite = `<svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display:none\" aria-hidden=\"true\">${spriteContent}</svg>`;\r\n const css = iconClasses.join(\"\\n\");\r\n\r\n const totalIcons = [...usages.values()].reduce((sum, m) => sum + m.size, 0);\r\n if (totalIcons > 0) {\r\n const summary = formatDetectedMaterialSymbols(usages);\r\n config.logger.info(\r\n `[robosophy-material-symbols] ${totalIcons} icons detected, ${totalFetched} SVG variants (${(totalBytes / 1024).toFixed(1)} KB)\\n${summary}`,\r\n );\r\n } else {\r\n config.logger.warn(\r\n \"[robosophy-material-symbols] No Material Symbols icons detected in source. Add them via the include option.\",\r\n );\r\n }\r\n\r\n return { fullSprite, spriteContent, css };\r\n}\r\n\r\nasync function ensureGeneratedAssets(\r\n config: ResolvedConfig,\r\n options: RobosophyMaterialSymbolsOptions,\r\n cacheDir: string,\r\n): Promise<GeneratedMaterialSymbolsAssets> {\r\n const usages = await collectMaterialSymbolUsages(config, options);\r\n return generateSpriteAssets(usages, cacheDir, config);\r\n}\r\n\r\nexport async function collectMaterialSymbolUsages(\r\n config: Pick<ResolvedConfig, \"root\">,\r\n options: RobosophyMaterialSymbolsOptions = {},\r\n): Promise<IconUsageMap> {\r\n const usages = createUsageMap();\r\n\r\n const manifest = await loadIconManifest();\r\n\r\n if (manifest) {\r\n for (const family of families) {\r\n for (const name of manifest[family] ?? []) {\r\n addUsage(usages, { family, name });\r\n }\r\n }\r\n } else {\r\n for (const name of internalIconNames) {\r\n for (const family of families) {\r\n addUsage(usages, { family, name });\r\n }\r\n }\r\n }\r\n\r\n for (const icon of options.include ?? []) {\r\n const resolved = typeof icon === \"string\" ? { family: defaultFamily, name: icon } : icon;\r\n if (resolved.weight !== undefined) {\r\n addUsage(usages, resolved);\r\n } else {\r\n for (const w of VALID_WEIGHTS) {\r\n addUsage(usages, { ...resolved, weight: w });\r\n }\r\n }\r\n }\r\n\r\n if (options.scan !== false) {\r\n const roots = options.roots ?? [join(config.root, \"src\")];\r\n\r\n for (const root of roots) {\r\n for (const filePath of await listSourceFiles(root)) {\r\n const source = await readFile(filePath, \"utf8\");\r\n collectFromSource(source, usages);\r\n }\r\n }\r\n }\r\n\r\n return usages;\r\n}\r\n\r\nexport function buildMaterialSymbolsCss(\r\n iconClasses: string,\r\n): HtmlTagDescriptor[] {\r\n if (!iconClasses) return [];\r\n\r\n return [\r\n {\r\n tag: \"style\",\r\n children: iconClasses,\r\n injectTo: \"head\",\r\n },\r\n ];\r\n}\r\n\r\nfunction skipStringBackward(source: string, pos: number, quote: string): number {\r\n pos--;\r\n while (pos >= 0) {\r\n if (source[pos] === \"\\\\\") {\r\n pos -= 2;\r\n continue;\r\n }\r\n if (source[pos] === quote) {\r\n let backslashCount = 0;\r\n let k = pos - 1;\r\n while (k >= 0 && source[k] === \"\\\\\") {\r\n backslashCount++;\r\n k--;\r\n }\r\n if (backslashCount % 2 === 1) {\r\n pos = pos - backslashCount - 1;\r\n continue;\r\n }\r\n return pos - 1;\r\n }\r\n pos--;\r\n }\r\n return -1;\r\n}\r\n\r\nfunction skipStringForward(source: string, pos: number, quote: string): number {\r\n pos++;\r\n while (pos < source.length) {\r\n if (source[pos] === \"\\\\\") {\r\n pos += 2;\r\n continue;\r\n }\r\n if (source[pos] === quote) {\r\n return pos + 1;\r\n }\r\n pos++;\r\n }\r\n return source.length;\r\n}\r\n\r\nfunction findEnclosingObject(\r\n source: string,\r\n fromIndex: number,\r\n): { start: number; end: number; body: string } | null {\r\n let depth = 0;\r\n let i = fromIndex;\r\n\r\n while (i >= 0) {\r\n const char = source[i];\r\n\r\n if (char === '\"' || char === \"'\" || char === \"`\") {\r\n i = skipStringBackward(source, i, char);\r\n continue;\r\n }\r\n\r\n // Line comment //\r\n if (char === \"/\" && i > 0 && source[i - 1] === \"/\") {\r\n i -= 2;\r\n while (i >= 0 && source[i] !== \"\\n\") i--;\r\n continue;\r\n }\r\n\r\n // Block comment */\r\n if (char === \"/\" && i > 0 && source[i - 1] === \"*\") {\r\n i -= 2;\r\n while (i >= 0) {\r\n if (source[i] === \"/\" && i + 1 < source.length && source[i + 1] === \"*\") {\r\n i--;\r\n break;\r\n }\r\n i--;\r\n }\r\n continue;\r\n }\r\n\r\n if (char === \"}\") {\r\n depth++;\r\n } else if (char === \"{\") {\r\n if (depth === 0) {\r\n const start = i;\r\n let j = i + 1;\r\n let innerDepth = 1;\r\n\r\n while (j < source.length) {\r\n const c = source[j];\r\n\r\n if (c === '\"' || c === \"'\" || c === \"`\") {\r\n j = skipStringForward(source, j, c);\r\n continue;\r\n }\r\n\r\n if (c === \"/\") {\r\n // Line comment //\r\n if (j + 1 < source.length && source[j + 1] === \"/\") {\r\n j += 2;\r\n while (j < source.length && source[j] !== \"\\n\") j++;\r\n continue;\r\n }\r\n // Block comment /*\r\n if (j + 1 < source.length && source[j + 1] === \"*\") {\r\n j += 2;\r\n while (j + 1 < source.length) {\r\n if (source[j] === \"*\" && source[j + 1] === \"/\") {\r\n j += 2;\r\n break;\r\n }\r\n j++;\r\n }\r\n continue;\r\n }\r\n }\r\n\r\n if (c === \"{\") innerDepth++;\r\n else if (c === \"}\") {\r\n innerDepth--;\r\n if (innerDepth === 0) {\r\n return {\r\n start,\r\n end: j,\r\n body: source.slice(start + 1, j),\r\n };\r\n }\r\n }\r\n\r\n j++;\r\n }\r\n\r\n return null;\r\n }\r\n depth--;\r\n }\r\n\r\n i--;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction collectFromSource(source: string, usages: IconUsageMap): void {\r\n const rsIconTagPattern = /<RsIcon\\b([^>]*)>/g;\r\n let tagMatch: RegExpExecArray | null;\r\n\r\n while ((tagMatch = rsIconTagPattern.exec(source))) {\r\n const attrs = parseStaticAttributes(tagMatch[1] ?? \"\");\r\n const rawName = attrs.name ?? attrs[\":name\"];\r\n const hasFamily = \"family\" in attrs || \":family\" in attrs;\r\n const rawFamily = attrs.family ?? attrs[\":family\"] ?? \"\";\r\n const rawWeight = attrs.weight ?? attrs[\":weight\"] ?? \"\";\r\n const weight = rawWeight ? parseInt(rawWeight, 10) : DEFAULT_WEIGHT;\r\n const resolvedWeight = !isNaN(weight) && weight > 0 ? weight : DEFAULT_WEIGHT;\r\n\r\n if (rawName) {\r\n const isNameDynamic = \":name\" in attrs;\r\n const familyList = resolveFamilies(rawFamily, hasFamily);\r\n const names = resolveNames(rawName, isNameDynamic);\r\n\r\n for (const family of familyList) {\r\n for (const name of names) {\r\n addUsage(usages, { family, name, weight: resolvedWeight });\r\n }\r\n }\r\n }\r\n }\r\n\r\n const primeHelperPattern =\r\n /\\brsPrimeIcon\\(\\s*[\"']([a-z0-9_]+)[\"'](?:\\s*,\\s*\\{([^)]*)\\})?/g;\r\n let helperMatch: RegExpExecArray | null;\r\n\r\n while ((helperMatch = primeHelperPattern.exec(source))) {\r\n const family = toFamily(helperMatch[2]?.match(/\\bfamily\\s*:\\s*[\"'](\\w+)[\"']/)?.[1]);\r\n addUsage(usages, {\r\n family: family ?? defaultFamily,\r\n name: helperMatch[1] ?? \"\",\r\n });\r\n }\r\n\r\n const objectIconPattern = /\\bicon\\s*:\\s*[\"']([a-z0-9_]+)[\"']/g;\r\n let objectMatch: RegExpExecArray | null;\r\n\r\n while ((objectMatch = objectIconPattern.exec(source))) {\r\n const name = objectMatch[1] ?? \"\";\r\n const obj = findEnclosingObject(source, objectMatch.index);\r\n if (obj) {\r\n const cleanBody = obj.body.replace(/\\/\\/.*/g, \"\").replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\");\r\n const weightMatch = cleanBody.match(/\\bweight\\s*:\\s*(\\d+)/);\r\n const familyMatch = cleanBody.match(/\\bfamily\\s*:\\s*[\"'](\\w+)[\"']/);\r\n addUsage(usages, {\r\n family: familyMatch ? (familyMatch[1] as RsIconFamily) : defaultFamily,\r\n name,\r\n weight: weightMatch ? parseInt(weightMatch[1], 10) : undefined,\r\n });\r\n } else {\r\n addUsage(usages, { family: defaultFamily, name });\r\n }\r\n }\r\n\r\n // Pattern 4: magic comments @robosophy-icon\r\n // Use for icons that cannot be detected statically (props, variables, API, etc.)\r\n const magicCommentPattern = /\\/\\/\\s*@robosophy-icon:\\s*([a-z0-9_]+)/g;\r\n let magicMatch: RegExpExecArray | null;\r\n\r\n while ((magicMatch = magicCommentPattern.exec(source))) {\r\n const name = magicMatch[1] ?? \"\";\r\n const lineEnd = source.indexOf(\"\\n\", magicMatch.index);\r\n const line = lineEnd === -1 ? source.slice(magicMatch.index) : source.slice(magicMatch.index, lineEnd);\r\n const familyMatch = line.match(/\\bfamily\\s*=\\s*[\"']?(\\w+)[\"']?/);\r\n const weightMatch = line.match(/\\bweight\\s*=\\s*(\\d+)/);\r\n addUsage(usages, {\r\n family: familyMatch ? (familyMatch[1] as RsIconFamily) : defaultFamily,\r\n name,\r\n weight: weightMatch ? parseInt(weightMatch[1], 10) : undefined,\r\n });\r\n }\r\n\r\n // Pattern 5: icon arrays — detect arrays assigned to variables with \"icon\" in the name\r\n // e.g. const iconNames = [\"home\", \"search\"]\r\n const iconArrayPattern = /(?:const|let|var)\\s+(\\w*[Ii]con\\w*)\\s*=\\s*\\[/g;\r\n let arrayMatch: RegExpExecArray | null;\r\n\r\n while ((arrayMatch = iconArrayPattern.exec(source))) {\r\n const bracketStart = arrayMatch.index + arrayMatch[0].length - 1;\r\n let depth = 1;\r\n let j = bracketStart + 1;\r\n\r\n while (j < source.length) {\r\n const c = source[j];\r\n\r\n if (c === '\"' || c === \"'\" || c === \"`\") {\r\n j = skipStringForward(source, j, c);\r\n continue;\r\n }\r\n\r\n if (c === \"/\") {\r\n if (j + 1 < source.length && source[j + 1] === \"/\") {\r\n j += 2;\r\n while (j < source.length && source[j] !== \"\\n\") j++;\r\n continue;\r\n }\r\n if (j + 1 < source.length && source[j + 1] === \"*\") {\r\n j += 2;\r\n while (j + 1 < source.length) {\r\n if (source[j] === \"*\" && source[j + 1] === \"/\") {\r\n j += 2;\r\n break;\r\n }\r\n j++;\r\n }\r\n continue;\r\n }\r\n }\r\n\r\n if (c === \"[\") depth++;\r\n else if (c === \"]\") {\r\n depth--;\r\n if (depth === 0) break;\r\n }\r\n\r\n j++;\r\n }\r\n\r\n if (depth === 0) {\r\n const arrayContent = source.slice(bracketStart + 1, j);\r\n let braceDepth = 0;\r\n let k = 0;\r\n\r\n while (k < arrayContent.length) {\r\n const c = arrayContent[k];\r\n\r\n if (c === '\"' || c === \"'\" || c === \"`\") {\r\n if (braceDepth === 0) {\r\n const quote = c;\r\n let strEnd = k + 1;\r\n while (strEnd < arrayContent.length) {\r\n if (arrayContent[strEnd] === \"\\\\\") {\r\n strEnd += 2;\r\n continue;\r\n }\r\n if (arrayContent[strEnd] === quote) break;\r\n strEnd++;\r\n }\r\n const iconName = arrayContent.slice(k + 1, strEnd);\r\n if (iconNamePattern.test(iconName)) {\r\n addUsage(usages, { family: defaultFamily, name: iconName });\r\n }\r\n k = strEnd + 1;\r\n continue;\r\n } else {\r\n k = skipStringForward(arrayContent, k, c);\r\n continue;\r\n }\r\n }\r\n\r\n if (c === \"{\") braceDepth++;\r\n else if (c === \"}\") braceDepth--;\r\n\r\n k++;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction parseStaticAttributes(source: string): Record<string, string> {\r\n const attrs: Record<string, string> = {};\r\n const attrPattern = /([:@\\w-]+)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/g;\r\n let match: RegExpExecArray | null;\r\n\r\n while ((match = attrPattern.exec(source))) {\r\n attrs[match[1] ?? \"\"] = match[2] ?? match[3] ?? \"\";\r\n }\r\n\r\n return attrs;\r\n}\r\n\r\nfunction unwrapStaticValue(value: string): string {\r\n return value.replace(/^['\"`](.+)['\"`]$/, \"$1\");\r\n}\r\n\r\nconst VALID_WEIGHTS = [100, 200, 300, 400, 500, 600, 700] as const;\r\n\r\nfunction addUsage(\r\n usages: IconUsageMap,\r\n icon: { family?: RsIconFamily; name: string; weight?: number },\r\n): void {\r\n const family = icon.family ?? defaultFamily;\r\n const name = icon.name.trim();\r\n const weight = icon.weight ?? DEFAULT_WEIGHT;\r\n\r\n if (!families.includes(family) || !iconNamePattern.test(name)) {\r\n return;\r\n }\r\n\r\n if (!VALID_WEIGHTS.includes(weight as never)) return;\r\n\r\n const iconMap = usages.get(family);\r\n if (!iconMap) return;\r\n\r\n const existing = iconMap.get(name);\r\n if (existing) {\r\n existing.add(weight);\r\n } else {\r\n iconMap.set(name, new Set([weight]));\r\n }\r\n}\r\n\r\nasync function loadIconManifest(): Promise<Record<RsIconFamily, string[]> | null> {\r\n try {\r\n const dir = join(fileURLToPath(import.meta.url), \"..\");\r\n const manifestPath = join(dir, \"icon-manifest.json\");\r\n const source = await readFile(manifestPath, \"utf8\");\r\n return JSON.parse(source) as Record<RsIconFamily, string[]>;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction toFamily(value?: string): RsIconFamily | undefined {\r\n const normalized = value ? unwrapStaticValue(value) : \"\";\r\n return families.includes(normalized as RsIconFamily)\r\n ? (normalized as RsIconFamily)\r\n : undefined;\r\n}\r\n\r\nfunction resolveNames(rawName: string, isDynamic = false): string[] {\r\n const stringLiterals = /[\"'`]([a-z0-9_]+)[\"'`]/g;\r\n let strMatch: RegExpExecArray | null;\r\n const names: string[] = [];\r\n\r\n while ((strMatch = stringLiterals.exec(rawName))) {\r\n const candidate = strMatch[1] ?? \"\";\r\n if (iconNamePattern.test(candidate)) {\r\n names.push(candidate);\r\n }\r\n }\r\n\r\n if (names.length === 0) {\r\n if (isDynamic) return names;\r\n const name = unwrapStaticValue(rawName);\r\n if (iconNamePattern.test(name)) {\r\n names.push(name);\r\n }\r\n }\r\n\r\n return names;\r\n}\r\n\r\nfunction resolveFamilies(rawFamily: string, hasFamily = true): RsIconFamily[] {\r\n const family = toFamily(rawFamily);\r\n if (family) return [family];\r\n\r\n const stringLiterals = /[\"'`](\\w+)[\"'`]/g;\r\n let strMatch: RegExpExecArray | null;\r\n const found = new Set<RsIconFamily>();\r\n\r\n while ((strMatch = stringLiterals.exec(rawFamily))) {\r\n const candidate = strMatch[1] ?? \"\";\r\n const f = toFamily(candidate);\r\n if (f) {\r\n found.add(f);\r\n }\r\n }\r\n\r\n if (found.size > 0) return [...found];\r\n\r\n if (!hasFamily) return [defaultFamily];\r\n\r\n return [...families];\r\n}\r\n\r\nfunction createUsageMap(): IconUsageMap {\r\n return new Map(families.map((family) => [family, new Map<string, Set<number>>()]));\r\n}\r\n\r\nasync function listSourceFiles(root: string): Promise<string[]> {\r\n try {\r\n const entries = await readdir(root, { withFileTypes: true });\r\n const files = await Promise.all(\r\n entries.map(async (entry) => {\r\n const path = join(root, entry.name);\r\n\r\n if (entry.isDirectory()) {\r\n return skippedDirs.has(entry.name) ? [] : listSourceFiles(path);\r\n }\r\n\r\n return sourceExtensions.has(extname(entry.name)) ? [path] : [];\r\n }),\r\n );\r\n\r\n return files.flat();\r\n } catch {\r\n return [];\r\n }\r\n}\r\n\r\nexport function formatDetectedMaterialSymbols(usages: IconUsageMap): string {\r\n return families\r\n .map((family) => {\r\n const iconWeights = usages.get(family);\r\n if (!iconWeights || iconWeights.size === 0) return `${family}: (none)`;\r\n const entries = [...iconWeights.entries()]\r\n .map(([name, weights]) => `${name}[${[...weights].sort().join(\",\")}]`)\r\n .sort()\r\n .join(\", \");\r\n return `${family}: ${entries}`;\r\n })\r\n .join(\"\\n\");\r\n}\r\n"],"names":[],"mappings":"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"}
|