@mantine-vue/spotlight 3.5.0 → 3.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/cjs/index.cjs CHANGED
@@ -160,8 +160,24 @@ var SpotlightAction_default = /* @__PURE__ */ (0, vue.defineComponent)({
160
160
  props: {
161
161
  label: {},
162
162
  description: {},
163
- leftSection: {},
164
- rightSection: {},
163
+ leftSection: { type: [
164
+ Object,
165
+ String,
166
+ Number,
167
+ Boolean,
168
+ null,
169
+ Array,
170
+ Function
171
+ ] },
172
+ rightSection: { type: [
173
+ Object,
174
+ String,
175
+ Number,
176
+ Boolean,
177
+ null,
178
+ Array,
179
+ Function
180
+ ] },
165
181
  dimmedSections: {
166
182
  type: Boolean,
167
183
  default: true
@@ -490,8 +506,7 @@ var SpotlightRoot_default = /* @__PURE__ */ (0, vue.defineComponent)({
490
506
  name: "Spotlight",
491
507
  classes: Spotlight_module_default,
492
508
  props,
493
- className: attrs.class,
494
- style: attrs.style,
509
+ attrs,
495
510
  classNames: props.classNames,
496
511
  styles: props.styles,
497
512
  unstyled: props.unstyled,
package/cjs/index.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["$slots"],"sources":["../src/spotlight.store.ts","../src/is-actions-group.ts","../src/Spotlight.context.ts","../src/components/SpotlightAction/SpotlightAction.vue","../src/components/SpotlightAction/SpotlightAction.vue","../src/components/SpotlightActionsGroup/SpotlightActionsGroup.vue","../src/components/SpotlightActionsGroup/SpotlightActionsGroup.vue","../src/components/SpotlightActionsList/SpotlightActionsList.vue","../src/components/SpotlightActionsList/SpotlightActionsList.vue","../src/components/SpotlightEmpty/SpotlightEmpty.vue","../src/components/SpotlightEmpty/SpotlightEmpty.vue","../src/get-hotkeys.ts","../src/style-api.ts","../src/Spotlight.module.css","../src/components/SpotlightRoot/SpotlightRoot.vue","../src/components/SpotlightRoot/SpotlightRoot.vue","../src/components/SpotlightSearch/SpotlightSearch.vue","../src/components/SpotlightSearch/SpotlightSearch.vue","../src/default-spotlight-filter.ts","../src/limit-actions.ts","../src/components/Spotlight/Spotlight.vue","../src/components/Spotlight/Spotlight.vue","../src/components/SpotlightAction/index.ts","../src/components/SpotlightActionsGroup/index.ts","../src/components/SpotlightActionsList/index.ts","../src/components/SpotlightEmpty/index.ts","../src/components/SpotlightFooter/SpotlightFooter.vue","../src/components/SpotlightFooter/SpotlightFooter.vue","../src/components/SpotlightFooter/index.ts","../src/components/SpotlightRoot/index.ts","../src/components/SpotlightSearch/index.ts","../src/components/Spotlight/index.ts"],"sourcesContent":["import { type Ref } from 'vue'\nimport { createStore, type MantineStore } from '@mantine-vue/store'\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.min(max, Math.max(min, value))\n}\n\nexport interface SpotlightState {\n opened: boolean\n selected: number\n listId: string\n query: string\n empty: boolean\n registeredActions: Set<string>\n}\n\nexport type SpotlightStore = MantineStore<SpotlightState>\n\nexport const createSpotlightStore = () =>\n createStore<SpotlightState>({\n opened: false,\n empty: false,\n selected: -1,\n listId: '',\n query: '',\n registeredActions: new Set(),\n })\n\nexport const useSpotlight = (store: SpotlightStore): Readonly<Ref<SpotlightState>> => store.value\n\nexport function updateSpotlightStateAction(\n update: (state: SpotlightState) => Partial<SpotlightState>,\n store: SpotlightStore,\n) {\n const state = store.getState()\n store.setState({ ...state, ...update(store.getState()) })\n}\n\nexport function openSpotlightAction(store: SpotlightStore) {\n updateSpotlightStateAction(() => ({ opened: true, selected: -1 }), store)\n}\n\nexport function closeSpotlightAction(store: SpotlightStore) {\n updateSpotlightStateAction(() => ({ opened: false }), store)\n}\n\nexport function toggleSpotlightAction(store: SpotlightStore) {\n updateSpotlightStateAction(\n (state) => ({ opened: !state.opened, selected: state.opened ? state.selected : -1 }),\n store,\n )\n}\n\nexport function setSelectedAction(index: number, store: SpotlightStore) {\n store.setState((state) => ({ ...state, selected: index }))\n}\n\nexport function setListId(id: string, store: SpotlightStore) {\n store.setState((state) => ({ ...state, listId: id }))\n}\n\nfunction findElementByQuerySelector<T extends HTMLElement>(\n selector: string,\n root: Document | Element | ShadowRoot = document,\n): T | null {\n const element = root.querySelector<T>(selector)\n\n if (element) {\n return element\n }\n\n const children = root instanceof ShadowRoot ? root.host.children : root.children\n\n for (let i = 0; i < children.length; i += 1) {\n const child = children[i]\n\n if (child.shadowRoot) {\n const shadowElement = findElementByQuerySelector<T>(selector, child.shadowRoot)\n\n if (shadowElement) {\n return shadowElement\n }\n }\n\n const nestedElement = findElementByQuerySelector<T>(selector, child)\n\n if (nestedElement) {\n return nestedElement\n }\n }\n\n return null\n}\n\nexport function selectAction(index: number, store: SpotlightStore): number {\n const state = store.getState()\n const actionsList = state.listId ? findElementByQuerySelector(`#${state.listId}`) : null\n const selected = actionsList?.querySelector<HTMLButtonElement>('[data-selected]')\n const actions = actionsList?.querySelectorAll<HTMLButtonElement>('[data-action]') ?? []\n const nextIndex = index === -1 ? actions.length - 1 : index === actions.length ? 0 : index\n const selectedIndex = clamp(nextIndex, 0, actions.length - 1)\n\n selected?.removeAttribute('data-selected')\n actions[selectedIndex]?.scrollIntoView?.({ block: 'nearest' })\n actions[selectedIndex]?.setAttribute('data-selected', 'true')\n setSelectedAction(selectedIndex, store)\n\n return selectedIndex\n}\n\nexport function selectNextAction(store: SpotlightStore) {\n return selectAction(store.getState().selected + 1, store)\n}\n\nexport function selectPreviousAction(store: SpotlightStore) {\n return selectAction(store.getState().selected - 1, store)\n}\n\nexport function triggerSelectedAction(store: SpotlightStore) {\n const state = store.getState()\n const selected = state.listId\n ? findElementByQuerySelector<HTMLButtonElement>(`#${state.listId} [data-selected]`)\n : null\n\n selected?.click()\n}\n\nexport function registerAction(id: string, store: SpotlightStore) {\n const state = store.getState()\n state.registeredActions.add(id)\n\n return () => {\n state.registeredActions.delete(id)\n }\n}\n\nexport function setQuery(query: string, store: SpotlightStore) {\n updateSpotlightStateAction(() => ({ query }), store)\n Promise.resolve().then(() => {\n selectAction(0, store)\n updateSpotlightStateAction(\n (state) => ({\n empty: (state.query.trim().length > 0 && state.registeredActions.size === 0) || false,\n }),\n store,\n )\n })\n}\n\nexport function clearSpotlightState(\n { clearQuery }: { clearQuery: boolean | undefined },\n store: SpotlightStore,\n) {\n store.setState((state) => ({\n ...state,\n selected: -1,\n query: clearQuery ? '' : state.query,\n empty: clearQuery ? false : state.empty,\n }))\n}\n\nexport const spotlightActions = {\n open: openSpotlightAction,\n close: closeSpotlightAction,\n toggle: toggleSpotlightAction,\n updateState: updateSpotlightStateAction,\n setSelectedAction,\n setListId,\n selectAction,\n selectNextAction,\n selectPreviousAction,\n triggerSelectedAction,\n registerAction,\n setQuery,\n clearSpotlightState,\n}\n\nexport function createSpotlight() {\n const store = createSpotlightStore()\n const actions = {\n open: () => openSpotlightAction(store),\n close: () => closeSpotlightAction(store),\n toggle: () => toggleSpotlightAction(store),\n }\n\n return [store, actions] as const\n}\n\nexport const [spotlightStore, spotlight] = createSpotlight()\nexport const { open: openSpotlight, close: closeSpotlight, toggle: toggleSpotlight } = spotlight\n","import type {\n SpotlightActionData,\n SpotlightActionGroupData,\n} from './components/Spotlight/Spotlight.types'\n\nexport function isActionsGroup(\n item: SpotlightActionData | SpotlightActionGroupData,\n): item is SpotlightActionGroupData {\n const group = item as SpotlightActionGroupData\n return group.group !== undefined && Array.isArray(group.actions)\n}\n","import type { InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\nimport type { SpotlightStore } from './spotlight.store'\n\nexport interface SpotlightContextValue {\n query: string\n setQuery: (query: string) => void\n getStyles: (selector: string, options?: Record<string, any>) => Record<string, any>\n store: SpotlightStore\n closeOnActionTrigger: boolean | undefined\n}\n\nconst SpotlightContextKey = Symbol('SpotlightContext') as InjectionKey<SpotlightContextValue>\n\nexport function provideSpotlightContext(value: SpotlightContextValue) {\n provide(SpotlightContextKey, value)\n}\n\nexport function useSpotlightContext() {\n const ctx = inject(SpotlightContextKey, null)\n\n if (ctx === null) {\n throw new Error('Spotlight component was not found in tree')\n }\n\n return ctx\n}\n","<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots } from 'vue'\nimport { Box, Highlight, UnstyledButton, hasNode, resolveNode, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport { spotlightActions } from '../../spotlight.store'\nimport type { SpotlightActionProps, SpotlightActionSlots } from './SpotlightAction.types'\n\ndefineOptions({ name: 'SpotlightAction', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightActionProps>(), {\n dimmedSections: true,\n highlightQuery: false,\n closeSpotlightOnTrigger: undefined,\n})\ndefineSlots<SpotlightActionSlots>()\nconst attrs = useAttrs()\nconst slots = useSlots()\nconst props = useProps('SpotlightAction', null, rawProps)\nconst ctx = useSpotlightContext()\nconst stylesApi = computed(() => ({ classNames: props.classNames, styles: props.styles }))\nconst leftSection = computed(() => resolveNode(props.leftSection, slots.leftSection))\nconst rightSection = computed(() => resolveNode(props.rightSection, slots.rightSection))\nconst renderLeftSection = () => leftSection.value\nconst renderRightSection = () => rightSection.value\nconst forwardedAttrs = computed(() => {\n const value = { ...attrs }\n delete value.onClick\n delete value.onMousedown\n return value\n})\n\nfunction mousedown(event: MouseEvent) {\n event.preventDefault()\n ;(attrs.onMousedown as ((event: MouseEvent) => void) | undefined)?.(event)\n}\n\nfunction click(event: MouseEvent) {\n ;(attrs.onClick as ((event: MouseEvent) => void) | undefined)?.(event)\n if (props.closeSpotlightOnTrigger ?? ctx.closeOnActionTrigger) {\n spotlightActions.close(ctx.store)\n }\n}\n</script>\n\n<template>\n <UnstyledButton\n v-bind=\"{\n ...forwardedAttrs,\n ...ctx.getStyles('action', { className: attrs.class, style: attrs.style, ...stylesApi }),\n }\"\n data-action\n :tabindex=\"-1\"\n @mousedown=\"mousedown\"\n @click=\"click\"\n >\n <slot v-if=\"$slots.default\" />\n <template v-else>\n <Box\n v-if=\"hasNode(leftSection)\"\n component=\"span\"\n :mod=\"{ position: 'left', dimmed: props.dimmedSections }\"\n v-bind=\"ctx.getStyles('actionSection', stylesApi)\"\n >\n <component :is=\"renderLeftSection\" />\n </Box>\n <span v-bind=\"ctx.getStyles('actionBody', stylesApi)\">\n <Highlight\n v-if=\"props.highlightQuery && typeof props.label === 'string'\"\n component=\"span\"\n :highlight=\"ctx.query\"\n :color=\"props.highlightColor\"\n v-bind=\"ctx.getStyles('actionLabel', stylesApi)\"\n >\n {{ props.label }}\n </Highlight>\n <span v-else v-bind=\"ctx.getStyles('actionLabel', stylesApi)\">{{ props.label }}</span>\n <span v-bind=\"ctx.getStyles('actionDescription', stylesApi)\">{{ props.description }}</span>\n </span>\n <Box\n v-if=\"hasNode(rightSection)\"\n component=\"span\"\n :mod=\"{ position: 'right', dimmed: props.dimmedSections }\"\n v-bind=\"ctx.getStyles('actionSection', stylesApi)\"\n >\n <component :is=\"renderRightSection\" />\n </Box>\n </template>\n </UnstyledButton>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots } from 'vue'\nimport { Box, Highlight, UnstyledButton, hasNode, resolveNode, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport { spotlightActions } from '../../spotlight.store'\nimport type { SpotlightActionProps, SpotlightActionSlots } from './SpotlightAction.types'\n\ndefineOptions({ name: 'SpotlightAction', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightActionProps>(), {\n dimmedSections: true,\n highlightQuery: false,\n closeSpotlightOnTrigger: undefined,\n})\ndefineSlots<SpotlightActionSlots>()\nconst attrs = useAttrs()\nconst slots = useSlots()\nconst props = useProps('SpotlightAction', null, rawProps)\nconst ctx = useSpotlightContext()\nconst stylesApi = computed(() => ({ classNames: props.classNames, styles: props.styles }))\nconst leftSection = computed(() => resolveNode(props.leftSection, slots.leftSection))\nconst rightSection = computed(() => resolveNode(props.rightSection, slots.rightSection))\nconst renderLeftSection = () => leftSection.value\nconst renderRightSection = () => rightSection.value\nconst forwardedAttrs = computed(() => {\n const value = { ...attrs }\n delete value.onClick\n delete value.onMousedown\n return value\n})\n\nfunction mousedown(event: MouseEvent) {\n event.preventDefault()\n ;(attrs.onMousedown as ((event: MouseEvent) => void) | undefined)?.(event)\n}\n\nfunction click(event: MouseEvent) {\n ;(attrs.onClick as ((event: MouseEvent) => void) | undefined)?.(event)\n if (props.closeSpotlightOnTrigger ?? ctx.closeOnActionTrigger) {\n spotlightActions.close(ctx.store)\n }\n}\n</script>\n\n<template>\n <UnstyledButton\n v-bind=\"{\n ...forwardedAttrs,\n ...ctx.getStyles('action', { className: attrs.class, style: attrs.style, ...stylesApi }),\n }\"\n data-action\n :tabindex=\"-1\"\n @mousedown=\"mousedown\"\n @click=\"click\"\n >\n <slot v-if=\"$slots.default\" />\n <template v-else>\n <Box\n v-if=\"hasNode(leftSection)\"\n component=\"span\"\n :mod=\"{ position: 'left', dimmed: props.dimmedSections }\"\n v-bind=\"ctx.getStyles('actionSection', stylesApi)\"\n >\n <component :is=\"renderLeftSection\" />\n </Box>\n <span v-bind=\"ctx.getStyles('actionBody', stylesApi)\">\n <Highlight\n v-if=\"props.highlightQuery && typeof props.label === 'string'\"\n component=\"span\"\n :highlight=\"ctx.query\"\n :color=\"props.highlightColor\"\n v-bind=\"ctx.getStyles('actionLabel', stylesApi)\"\n >\n {{ props.label }}\n </Highlight>\n <span v-else v-bind=\"ctx.getStyles('actionLabel', stylesApi)\">{{ props.label }}</span>\n <span v-bind=\"ctx.getStyles('actionDescription', stylesApi)\">{{ props.description }}</span>\n </span>\n <Box\n v-if=\"hasNode(rightSection)\"\n component=\"span\"\n :mod=\"{ position: 'right', dimmed: props.dimmedSections }\"\n v-bind=\"ctx.getStyles('actionSection', stylesApi)\"\n >\n <component :is=\"renderRightSection\" />\n </Box>\n </template>\n </UnstyledButton>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport type { SpotlightActionsGroupProps } from './SpotlightActionsGroup.types'\n\ndefineOptions({ name: 'SpotlightActionsGroup', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightActionsGroupProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightActionsGroup', null, rawProps)\nconst ctx = useSpotlightContext()\nconst groupStyles = computed(() =>\n ctx.getStyles('actionsGroup', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n)\nconst labelVariable = computed(() => ({\n '--spotlight-label': `'${props.label?.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`,\n}))\n</script>\n\n<template>\n <Box\n v-bind=\"{ ...attrs, ...groupStyles }\"\n :style=\"[groupStyles.style, attrs.style, labelVariable]\"\n >\n <slot />\n </Box>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport type { SpotlightActionsGroupProps } from './SpotlightActionsGroup.types'\n\ndefineOptions({ name: 'SpotlightActionsGroup', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightActionsGroupProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightActionsGroup', null, rawProps)\nconst ctx = useSpotlightContext()\nconst groupStyles = computed(() =>\n ctx.getStyles('actionsGroup', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n)\nconst labelVariable = computed(() => ({\n '--spotlight-label': `'${props.label?.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`,\n}))\n</script>\n\n<template>\n <Box\n v-bind=\"{ ...attrs, ...groupStyles }\"\n :style=\"[groupStyles.style, attrs.style, labelVariable]\"\n >\n <slot />\n </Box>\n</template>\n","<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, useAttrs } from 'vue'\nimport { ScrollAreaAutosize, useProps } from '@mantine-vue/core'\nimport { useId } from '@mantine-vue/hooks'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport { spotlightActions } from '../../spotlight.store'\nimport type { SpotlightActionsListProps } from './SpotlightActionsList.types'\n\ndefineOptions({ name: 'SpotlightActionsList', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightActionsListProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightActionsList', null, rawProps)\nconst ctx = useSpotlightContext()\nconst generatedId = useId()\nconst listId = props.id || `mantine-${generatedId.value.replace(/:/g, '')}`\nonMounted(() => spotlightActions.setListId(listId, ctx.store))\nonBeforeUnmount(() => spotlightActions.setListId('', ctx.store))\n</script>\n\n<template>\n <ScrollAreaAutosize\n v-bind=\"{\n ...attrs,\n ...ctx.getStyles('actionsList', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n }\"\n type=\"scroll\"\n scrollbar-size=\"var(--spotlight-actions-list-padding)\"\n offset-scrollbars=\"y\"\n :id=\"listId\"\n >\n <slot />\n </ScrollAreaAutosize>\n</template>\n","<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, useAttrs } from 'vue'\nimport { ScrollAreaAutosize, useProps } from '@mantine-vue/core'\nimport { useId } from '@mantine-vue/hooks'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport { spotlightActions } from '../../spotlight.store'\nimport type { SpotlightActionsListProps } from './SpotlightActionsList.types'\n\ndefineOptions({ name: 'SpotlightActionsList', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightActionsListProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightActionsList', null, rawProps)\nconst ctx = useSpotlightContext()\nconst generatedId = useId()\nconst listId = props.id || `mantine-${generatedId.value.replace(/:/g, '')}`\nonMounted(() => spotlightActions.setListId(listId, ctx.store))\nonBeforeUnmount(() => spotlightActions.setListId('', ctx.store))\n</script>\n\n<template>\n <ScrollAreaAutosize\n v-bind=\"{\n ...attrs,\n ...ctx.getStyles('actionsList', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n }\"\n type=\"scroll\"\n scrollbar-size=\"var(--spotlight-actions-list-padding)\"\n offset-scrollbars=\"y\"\n :id=\"listId\"\n >\n <slot />\n </ScrollAreaAutosize>\n</template>\n","<script setup lang=\"ts\">\nimport { useAttrs } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport type { SpotlightEmptyProps } from './SpotlightEmpty.types'\n\ndefineOptions({ name: 'SpotlightEmpty', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightEmptyProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightEmpty', null, rawProps)\nconst ctx = useSpotlightContext()\n</script>\n\n<template>\n <Box\n v-bind=\"{\n ...attrs,\n ...ctx.getStyles('empty', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n }\"\n >\n <slot />\n </Box>\n</template>\n","<script setup lang=\"ts\">\nimport { useAttrs } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport type { SpotlightEmptyProps } from './SpotlightEmpty.types'\n\ndefineOptions({ name: 'SpotlightEmpty', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightEmptyProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightEmpty', null, rawProps)\nconst ctx = useSpotlightContext()\n</script>\n\n<template>\n <Box\n v-bind=\"{\n ...attrs,\n ...ctx.getStyles('empty', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n }\"\n >\n <slot />\n </Box>\n</template>\n","import type { HotkeyItem } from '@mantine-vue/hooks'\nimport type { SpotlightStore } from './spotlight.store'\nimport { spotlightActions } from './spotlight.store'\n\nexport function getHotkeys(\n hotkeys: string | string[] | null | undefined,\n store: SpotlightStore,\n): HotkeyItem[] {\n if (!hotkeys) {\n return []\n }\n\n const open = () => spotlightActions.open(store)\n\n if (Array.isArray(hotkeys)) {\n return hotkeys.map((hotkey) => [hotkey, open])\n }\n\n return [[hotkeys, open]]\n}\n","export function mergeClassNames(...items: any[]) {\n return items.reduce<Record<string, any>>((acc, item) => {\n if (!item || typeof item !== 'object' || Array.isArray(item)) {\n return acc\n }\n\n Object.entries(item).forEach(([key, value]) => {\n acc[key] = acc[key] ? [acc[key], value] : value\n })\n\n return acc\n }, {})\n}\n\nexport function mergeStyles(...items: any[]) {\n return items.reduce<Record<string, any>>((acc, item) => {\n if (!item || typeof item !== 'object' || Array.isArray(item)) {\n return acc\n }\n\n Object.entries(item).forEach(([key, value]) => {\n acc[key] = acc[key] ? [acc[key], value] : value\n })\n\n return acc\n }, {})\n}\n\nexport function renderContent(value: any) {\n return typeof value === 'function' ? value() : value\n}\n",".root {\n &[data-scrollable] {\n --spotlight-content-height: 100%;\n }\n}\n\n.content {\n overflow: hidden;\n height: var(--spotlight-content-height, auto);\n max-height: var(--spotlight-max-height);\n}\n\n.body {\n display: flex;\n flex-direction: column;\n height: var(--spotlight-content-height, auto);\n}\n\n.search {\n border: 0;\n background-color: transparent;\n}\n\n.actionsList {\n --spotlight-actions-list-padding: 4px;\n\n border-top: 1px solid;\n flex: 1;\n padding: var(--spotlight-actions-list-padding);\n max-height: calc(100vh - 15rem);\n margin-inline-end: calc(var(--spotlight-actions-list-padding) * -1);\n width: 100%;\n\n @mixin where-light {\n border-color: var(--mantine-color-gray-2);\n }\n\n @mixin where-dark {\n border-color: var(--mantine-color-dark-4);\n }\n}\n\n.action {\n display: flex;\n align-items: center;\n width: 100%;\n padding: 7px var(--mantine-spacing-md);\n border-radius: var(--mantine-radius-default);\n background-color: transparent;\n color: inherit;\n text-align: start;\n\n &:where(:not([data-selected])) {\n @mixin hover {\n @mixin where-light {\n background-color: var(--mantine-color-gray-0);\n }\n\n @mixin where-dark {\n background-color: var(--mantine-color-dark-6);\n }\n }\n }\n\n &:where([data-selected]) {\n background-color: var(--mantine-primary-color-filled);\n color: var(--mantine-primary-color-contrast, var(--mantine-color-white));\n --action-description-color: var(--mantine-primary-color-contrast, var(--mantine-color-white));\n --action-description-opacity: 0.7;\n }\n}\n\n.actionBody {\n flex: 1;\n}\n\n.actionSection {\n opacity: 1;\n color: inherit;\n\n &:where([data-dimmed]) {\n opacity: var(--action-description-opacity, 1);\n color: var(--action-description-color, var(--mantine-color-dimmed));\n }\n\n &:where([data-position='left']) {\n margin-inline-end: var(--mantine-spacing-md);\n }\n\n &:where([data-position='right']) {\n margin-inline-start: var(--mantine-spacing-md);\n }\n\n & > svg {\n display: block;\n }\n}\n\n.actionLabel {\n display: block;\n}\n\n.actionDescription {\n display: block;\n font-size: var(--mantine-font-size-xs);\n opacity: var(--action-description-opacity, 1);\n color: var(--action-description-color, var(--mantine-color-dimmed));\n}\n\n.empty {\n color: var(--mantine-color-dimmed);\n padding: var(--mantine-spacing-md);\n text-align: center;\n}\n\n.footer {\n padding: var(--mantine-spacing-xs) calc(var(--mantine-spacing-md) + rem(4px));\n border-top: 1px solid;\n\n @mixin where-light {\n border-color: var(--mantine-color-gray-2);\n }\n\n @mixin where-dark {\n border-color: var(--mantine-color-dark-4);\n }\n}\n\n.actionsGroup {\n display: flex;\n flex-direction: column;\n margin-top: var(--mantine-spacing-md);\n\n &::before {\n content: var(--spotlight-label);\n text-transform: uppercase;\n font-size: var(--mantine-font-size-xs);\n font-weight: var(--mantine-font-weight-bold);\n color: var(--mantine-color-dimmed);\n padding-inline-start: var(--mantine-spacing-md);\n }\n\n &:empty {\n display: none;\n }\n}\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs, watch } from 'vue'\nimport { Modal, getDefaultZIndex, rem, useProps, useStyles } from '@mantine-vue/core'\nimport { useHotkeys } from '@mantine-vue/hooks'\nimport { getHotkeys } from '../../get-hotkeys'\nimport { provideSpotlightContext } from '../../Spotlight.context'\nimport { mergeClassNames, mergeStyles } from '../../style-api'\nimport { spotlightActions, spotlightStore, useSpotlight } from '../../spotlight.store'\nimport type {\n SpotlightRootEmits,\n SpotlightRootProps,\n SpotlightRootSlots,\n} from './SpotlightRoot.types'\nimport classes from '../../Spotlight.module.css'\n\ndefineOptions({ name: 'SpotlightRoot', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightRootProps>(), {\n store: () => spotlightStore,\n clearQueryOnClose: true,\n shortcut: 'mod + K',\n disabled: false,\n forceOpened: false,\n closeOnActionTrigger: true,\n maxHeight: 400,\n scrollable: false,\n})\nconst emit = defineEmits<SpotlightRootEmits>()\ndefineSlots<SpotlightRootSlots>()\nconst attrs = useAttrs()\nconst props = useProps(\n 'SpotlightRoot',\n {\n size: 600,\n yOffset: 80,\n zIndex: getDefaultZIndex('max'),\n overlayProps: { backgroundOpacity: 0.35, blur: 7 },\n transitionProps: { duration: 200, transition: 'pop' },\n },\n rawProps,\n)\nconst state = useSpotlight(props.store)\nconst previousOpened = ref(state.value.opened)\nconst currentQuery = computed(() =>\n typeof props.query === 'string' ? props.query : state.value.query,\n)\n\nfunction setQuery(query: string) {\n emit('update:query', query)\n emit('query-change', query)\n spotlightActions.setQuery(query, props.store)\n}\n\nconst getStyles = useStyles({\n name: 'Spotlight',\n classes,\n props,\n className: attrs.class,\n style: attrs.style as any,\n classNames: props.classNames as any,\n styles: props.styles as any,\n unstyled: props.unstyled,\n vars: props.vars as any,\n})\n\nprovideSpotlightContext({\n get query() {\n return currentQuery.value\n },\n setQuery,\n getStyles,\n store: props.store,\n get closeOnActionTrigger() {\n return props.closeOnActionTrigger\n },\n})\n\nuseHotkeys(\n () => getHotkeys(props.shortcut, props.store),\n () => props.tagsToIgnore,\n () => props.triggerOnContentEditable,\n)\n\nwatch(\n () => state.value.opened,\n (opened) => {\n if (opened === previousOpened.value) return\n if (opened) emit('spotlight-open')\n else emit('spotlight-close')\n previousOpened.value = opened\n },\n)\n\nconst rootStyles = computed(() =>\n getStyles('root', { className: attrs.class, style: attrs.style as any }),\n)\nconst modalAttrs = computed(() => {\n const value = { ...attrs, ...props }\n for (const key of [\n 'classNames',\n 'styles',\n 'vars',\n 'unstyled',\n 'store',\n 'query',\n 'clearQueryOnClose',\n 'shortcut',\n 'tagsToIgnore',\n 'triggerOnContentEditable',\n 'disabled',\n 'forceOpened',\n 'closeOnActionTrigger',\n 'maxHeight',\n 'scrollable',\n 'class',\n 'style',\n ])\n delete value[key]\n return value\n})\n\nfunction close() {\n spotlightActions.close(props.store)\n}\n\nfunction exitTransitionEnd() {\n if (props.clearQueryOnClose) setQuery('')\n spotlightActions.clearSpotlightState({ clearQuery: props.clearQueryOnClose }, props.store)\n props.transitionProps?.onExited?.()\n emit('exit-transition-end')\n}\n</script>\n\n<template>\n <Modal\n v-if=\"!props.disabled\"\n v-bind=\"modalAttrs\"\n :with-close-button=\"false\"\n :opened=\"state.opened || props.forceOpened\"\n :padding=\"0\"\n :class=\"rootStyles.class\"\n :style=\"rootStyles.style\"\n :class-names=\"\n mergeClassNames({ body: classes.body, content: classes.content }, props.classNames)\n \"\n :styles=\"mergeStyles(props.styles)\"\n :vars=\"\n mergeStyles(\n { root: { '--spotlight-max-height': props.scrollable ? rem(props.maxHeight) : undefined } },\n props.vars,\n )\n \"\n :data-scrollable=\"props.scrollable || undefined\"\n @close=\"close\"\n @exit-transition-end=\"exitTransitionEnd\"\n >\n <slot />\n </Modal>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs, watch } from 'vue'\nimport { Modal, getDefaultZIndex, rem, useProps, useStyles } from '@mantine-vue/core'\nimport { useHotkeys } from '@mantine-vue/hooks'\nimport { getHotkeys } from '../../get-hotkeys'\nimport { provideSpotlightContext } from '../../Spotlight.context'\nimport { mergeClassNames, mergeStyles } from '../../style-api'\nimport { spotlightActions, spotlightStore, useSpotlight } from '../../spotlight.store'\nimport type {\n SpotlightRootEmits,\n SpotlightRootProps,\n SpotlightRootSlots,\n} from './SpotlightRoot.types'\nimport classes from '../../Spotlight.module.css'\n\ndefineOptions({ name: 'SpotlightRoot', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightRootProps>(), {\n store: () => spotlightStore,\n clearQueryOnClose: true,\n shortcut: 'mod + K',\n disabled: false,\n forceOpened: false,\n closeOnActionTrigger: true,\n maxHeight: 400,\n scrollable: false,\n})\nconst emit = defineEmits<SpotlightRootEmits>()\ndefineSlots<SpotlightRootSlots>()\nconst attrs = useAttrs()\nconst props = useProps(\n 'SpotlightRoot',\n {\n size: 600,\n yOffset: 80,\n zIndex: getDefaultZIndex('max'),\n overlayProps: { backgroundOpacity: 0.35, blur: 7 },\n transitionProps: { duration: 200, transition: 'pop' },\n },\n rawProps,\n)\nconst state = useSpotlight(props.store)\nconst previousOpened = ref(state.value.opened)\nconst currentQuery = computed(() =>\n typeof props.query === 'string' ? props.query : state.value.query,\n)\n\nfunction setQuery(query: string) {\n emit('update:query', query)\n emit('query-change', query)\n spotlightActions.setQuery(query, props.store)\n}\n\nconst getStyles = useStyles({\n name: 'Spotlight',\n classes,\n props,\n className: attrs.class,\n style: attrs.style as any,\n classNames: props.classNames as any,\n styles: props.styles as any,\n unstyled: props.unstyled,\n vars: props.vars as any,\n})\n\nprovideSpotlightContext({\n get query() {\n return currentQuery.value\n },\n setQuery,\n getStyles,\n store: props.store,\n get closeOnActionTrigger() {\n return props.closeOnActionTrigger\n },\n})\n\nuseHotkeys(\n () => getHotkeys(props.shortcut, props.store),\n () => props.tagsToIgnore,\n () => props.triggerOnContentEditable,\n)\n\nwatch(\n () => state.value.opened,\n (opened) => {\n if (opened === previousOpened.value) return\n if (opened) emit('spotlight-open')\n else emit('spotlight-close')\n previousOpened.value = opened\n },\n)\n\nconst rootStyles = computed(() =>\n getStyles('root', { className: attrs.class, style: attrs.style as any }),\n)\nconst modalAttrs = computed(() => {\n const value = { ...attrs, ...props }\n for (const key of [\n 'classNames',\n 'styles',\n 'vars',\n 'unstyled',\n 'store',\n 'query',\n 'clearQueryOnClose',\n 'shortcut',\n 'tagsToIgnore',\n 'triggerOnContentEditable',\n 'disabled',\n 'forceOpened',\n 'closeOnActionTrigger',\n 'maxHeight',\n 'scrollable',\n 'class',\n 'style',\n ])\n delete value[key]\n return value\n})\n\nfunction close() {\n spotlightActions.close(props.store)\n}\n\nfunction exitTransitionEnd() {\n if (props.clearQueryOnClose) setQuery('')\n spotlightActions.clearSpotlightState({ clearQuery: props.clearQueryOnClose }, props.store)\n props.transitionProps?.onExited?.()\n emit('exit-transition-end')\n}\n</script>\n\n<template>\n <Modal\n v-if=\"!props.disabled\"\n v-bind=\"modalAttrs\"\n :with-close-button=\"false\"\n :opened=\"state.opened || props.forceOpened\"\n :padding=\"0\"\n :class=\"rootStyles.class\"\n :style=\"rootStyles.style\"\n :class-names=\"\n mergeClassNames({ body: classes.body, content: classes.content }, props.classNames)\n \"\n :styles=\"mergeStyles(props.styles)\"\n :vars=\"\n mergeStyles(\n { root: { '--spotlight-max-height': props.scrollable ? rem(props.maxHeight) : undefined } },\n props.vars,\n )\n \"\n :data-scrollable=\"props.scrollable || undefined\"\n @close=\"close\"\n @exit-transition-end=\"exitTransitionEnd\"\n >\n <slot />\n </Modal>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs } from 'vue'\nimport { Input, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport { spotlightActions } from '../../spotlight.store'\nimport { mergeClassNames, mergeStyles } from '../../style-api'\nimport type { SpotlightSearchEmits, SpotlightSearchProps } from './SpotlightSearch.types'\n\ndefineOptions({ name: 'SpotlightSearch', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightSearchProps>(), { size: 'lg' })\nconst emit = defineEmits<SpotlightSearchEmits>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightSearch', null, rawProps)\nconst ctx = useSpotlightContext()\nconst isComposing = ref(false)\nconst inputStyles = computed(() => ctx.getStyles('search'))\nconst forwardedAttrs = computed(() => {\n const value = { ...attrs }\n delete value.onInput\n delete value.onKeydown\n delete value.onCompositionstart\n delete value.onCompositionend\n return value\n})\n\nfunction input(event: Event) {\n const value = (event.currentTarget as HTMLInputElement).value\n ctx.setQuery(value)\n emit('update:modelValue', value)\n emit('change', value)\n}\n\nfunction keydown(event: KeyboardEvent) {\n emit('keydown', event)\n if (isComposing.value) return\n if (event.code === 'ArrowDown') {\n event.preventDefault()\n spotlightActions.selectNextAction(ctx.store)\n }\n if (event.code === 'ArrowUp') {\n event.preventDefault()\n spotlightActions.selectPreviousAction(ctx.store)\n }\n if (event.code === 'Enter' || event.code === 'NumpadEnter') {\n event.preventDefault()\n spotlightActions.triggerSelectedAction(ctx.store)\n }\n}\n</script>\n\n<template>\n <Input\n v-bind=\"forwardedAttrs\"\n :size=\"props.size\"\n :value=\"props.modelValue ?? ctx.query\"\n :class-names=\"mergeClassNames({ input: inputStyles.class }, props.classNames)\"\n :styles=\"mergeStyles({ input: inputStyles.style }, props.styles)\"\n :vars=\"props.vars\"\n @input=\"input\"\n @keydown=\"keydown\"\n @compositionstart=\"isComposing = true\"\n @compositionend=\"isComposing = false\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs } from 'vue'\nimport { Input, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport { spotlightActions } from '../../spotlight.store'\nimport { mergeClassNames, mergeStyles } from '../../style-api'\nimport type { SpotlightSearchEmits, SpotlightSearchProps } from './SpotlightSearch.types'\n\ndefineOptions({ name: 'SpotlightSearch', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightSearchProps>(), { size: 'lg' })\nconst emit = defineEmits<SpotlightSearchEmits>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightSearch', null, rawProps)\nconst ctx = useSpotlightContext()\nconst isComposing = ref(false)\nconst inputStyles = computed(() => ctx.getStyles('search'))\nconst forwardedAttrs = computed(() => {\n const value = { ...attrs }\n delete value.onInput\n delete value.onKeydown\n delete value.onCompositionstart\n delete value.onCompositionend\n return value\n})\n\nfunction input(event: Event) {\n const value = (event.currentTarget as HTMLInputElement).value\n ctx.setQuery(value)\n emit('update:modelValue', value)\n emit('change', value)\n}\n\nfunction keydown(event: KeyboardEvent) {\n emit('keydown', event)\n if (isComposing.value) return\n if (event.code === 'ArrowDown') {\n event.preventDefault()\n spotlightActions.selectNextAction(ctx.store)\n }\n if (event.code === 'ArrowUp') {\n event.preventDefault()\n spotlightActions.selectPreviousAction(ctx.store)\n }\n if (event.code === 'Enter' || event.code === 'NumpadEnter') {\n event.preventDefault()\n spotlightActions.triggerSelectedAction(ctx.store)\n }\n}\n</script>\n\n<template>\n <Input\n v-bind=\"forwardedAttrs\"\n :size=\"props.size\"\n :value=\"props.modelValue ?? ctx.query\"\n :class-names=\"mergeClassNames({ input: inputStyles.class }, props.classNames)\"\n :styles=\"mergeStyles({ input: inputStyles.style }, props.styles)\"\n :vars=\"props.vars\"\n @input=\"input\"\n @keydown=\"keydown\"\n @compositionstart=\"isComposing = true\"\n @compositionend=\"isComposing = false\"\n />\n</template>\n","import type {\n SpotlightActionData,\n SpotlightActionGroupData,\n SpotlightActions,\n SpotlightFilterFunction,\n} from './components/Spotlight/Spotlight.types'\n\nfunction getKeywords(keywords: string | string[] | undefined) {\n if (Array.isArray(keywords)) {\n return keywords\n .map((keyword) => keyword.trim())\n .join(',')\n .toLowerCase()\n .trim()\n }\n\n if (typeof keywords === 'string') {\n return keywords.toLowerCase().trim()\n }\n\n return ''\n}\n\nfunction getFlatActions(data: SpotlightActions[]) {\n return data.reduce<SpotlightActionData[]>((acc, item) => {\n if ('actions' in item) {\n return [\n ...acc,\n ...item.actions.map((action: SpotlightActionData) => ({ ...action, group: item.group })),\n ]\n }\n\n return [...acc, item]\n }, [])\n}\n\nfunction flatActionsToGroups(data: SpotlightActionData[]) {\n const groups: Record<string, { pushed: boolean; data: SpotlightActionGroupData }> = {}\n const result: SpotlightActions[] = []\n\n data.forEach((action) => {\n if (action.group) {\n if (!groups[action.group]) {\n groups[action.group] = { pushed: false, data: { group: action.group, actions: [] } }\n }\n\n groups[action.group].data.actions.push(action)\n\n if (!groups[action.group].pushed) {\n groups[action.group].pushed = true\n result.push(groups[action.group].data)\n }\n } else {\n result.push(action)\n }\n })\n\n return result\n}\n\nexport const defaultSpotlightFilter: SpotlightFilterFunction = (_query, data) => {\n const query = _query.trim().toLowerCase()\n const priorityMatrix: SpotlightActionData[][] = [[], []]\n const flatActions = getFlatActions(data)\n\n flatActions.forEach((item) => {\n if (item.label?.toLowerCase().includes(query)) {\n priorityMatrix[0].push(item)\n } else if (\n item.description?.toLowerCase().includes(query) ||\n getKeywords(item.keywords).includes(query)\n ) {\n priorityMatrix[1].push(item)\n }\n })\n\n return flatActionsToGroups(priorityMatrix.flat())\n}\n","import { isActionsGroup } from './is-actions-group'\nimport type { SpotlightActionData, SpotlightActions } from './components/Spotlight/Spotlight.types'\n\nexport function limitActions(actions: SpotlightActions[], limit: number) {\n if (!Array.isArray(actions)) {\n return []\n }\n\n let count = 0\n\n return actions.reduce<SpotlightActions[]>((acc, item) => {\n if (count >= limit) {\n return acc\n }\n\n if (isActionsGroup(item)) {\n const groupActions = limitActions(item.actions, limit - count)\n acc.push({\n group: item.group,\n actions: groupActions as SpotlightActionData[],\n })\n count += groupActions.length\n } else {\n acc.push(item)\n count += 1\n }\n\n return acc\n }, [])\n}\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs } from 'vue'\nimport { getDefaultZIndex, useProps } from '@mantine-vue/core'\nimport SpotlightAction from '../SpotlightAction/SpotlightAction.vue'\nimport SpotlightActionsGroup from '../SpotlightActionsGroup/SpotlightActionsGroup.vue'\nimport SpotlightActionsList from '../SpotlightActionsList/SpotlightActionsList.vue'\nimport SpotlightEmpty from '../SpotlightEmpty/SpotlightEmpty.vue'\nimport SpotlightRoot from '../SpotlightRoot/SpotlightRoot.vue'\nimport SpotlightSearch from '../SpotlightSearch/SpotlightSearch.vue'\nimport { defaultSpotlightFilter } from '../../default-spotlight-filter'\nimport { isActionsGroup } from '../../is-actions-group'\nimport { limitActions } from '../../limit-actions'\nimport { spotlightStore } from '../../spotlight.store'\nimport type { SpotlightActionData, SpotlightEmits, SpotlightProps } from './Spotlight.types'\n\ndefineOptions({ name: 'Spotlight', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightProps>(), {\n limit: Infinity,\n store: () => spotlightStore,\n filter: defaultSpotlightFilter,\n clearQueryOnClose: true,\n closeOnActionTrigger: true,\n shortcut: 'mod + K',\n highlightQuery: false,\n})\nconst emit = defineEmits<SpotlightEmits>()\nconst attrs = useAttrs()\nconst props = useProps(\n 'Spotlight',\n {\n size: 600,\n yOffset: 80,\n zIndex: getDefaultZIndex('max'),\n overlayProps: { backgroundOpacity: 0.35, blur: 7 },\n transitionProps: { duration: 200, transition: 'pop' },\n },\n rawProps,\n)\nconst uncontrolledQuery = ref('')\nconst currentQuery = computed(() =>\n typeof props.query === 'string' ? props.query : uncontrolledQuery.value,\n)\nconst filteredActions = computed(() =>\n limitActions(props.filter(currentQuery.value, props.actions), props.limit),\n)\nconst rootProps = computed(() => {\n const value = { ...attrs, ...props }\n for (const key of [\n 'searchProps',\n 'actions',\n 'filter',\n 'nothingFound',\n 'highlightQuery',\n 'limit',\n 'scrollAreaProps',\n 'query',\n ])\n delete value[key]\n return value\n})\n\nfunction setQuery(query: string) {\n if (typeof props.query !== 'string') uncontrolledQuery.value = query\n emit('update:query', query)\n emit('query-change', query)\n}\n\nfunction actionProps(action: SpotlightActionData) {\n const value = { ...action }\n delete (value as Partial<SpotlightActionData>).id\n delete (value as Partial<SpotlightActionData>).group\n return value\n}\n\nconst renderNothingFound = () =>\n typeof props.nothingFound === 'function' ? props.nothingFound() : props.nothingFound\n</script>\n\n<template>\n <SpotlightRoot v-bind=\"rootProps\" :query=\"currentQuery\" @query-change=\"setQuery\">\n <SpotlightSearch v-bind=\"props.searchProps\" />\n <SpotlightActionsList v-if=\"filteredActions.length\" v-bind=\"props.scrollAreaProps\">\n <template v-for=\"item in filteredActions\" :key=\"isActionsGroup(item) ? item.group : item.id\">\n <SpotlightActionsGroup v-if=\"isActionsGroup(item)\" :label=\"item.group\">\n <SpotlightAction\n v-for=\"action in item.actions\"\n :key=\"action.id\"\n v-bind=\"actionProps(action)\"\n :highlight-query=\"props.highlightQuery\"\n />\n </SpotlightActionsGroup>\n <SpotlightAction\n v-else\n v-bind=\"actionProps(item)\"\n :highlight-query=\"props.highlightQuery\"\n />\n </template>\n </SpotlightActionsList>\n <SpotlightEmpty v-else-if=\"props.nothingFound\">\n <component :is=\"renderNothingFound\" />\n </SpotlightEmpty>\n </SpotlightRoot>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs } from 'vue'\nimport { getDefaultZIndex, useProps } from '@mantine-vue/core'\nimport SpotlightAction from '../SpotlightAction/SpotlightAction.vue'\nimport SpotlightActionsGroup from '../SpotlightActionsGroup/SpotlightActionsGroup.vue'\nimport SpotlightActionsList from '../SpotlightActionsList/SpotlightActionsList.vue'\nimport SpotlightEmpty from '../SpotlightEmpty/SpotlightEmpty.vue'\nimport SpotlightRoot from '../SpotlightRoot/SpotlightRoot.vue'\nimport SpotlightSearch from '../SpotlightSearch/SpotlightSearch.vue'\nimport { defaultSpotlightFilter } from '../../default-spotlight-filter'\nimport { isActionsGroup } from '../../is-actions-group'\nimport { limitActions } from '../../limit-actions'\nimport { spotlightStore } from '../../spotlight.store'\nimport type { SpotlightActionData, SpotlightEmits, SpotlightProps } from './Spotlight.types'\n\ndefineOptions({ name: 'Spotlight', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightProps>(), {\n limit: Infinity,\n store: () => spotlightStore,\n filter: defaultSpotlightFilter,\n clearQueryOnClose: true,\n closeOnActionTrigger: true,\n shortcut: 'mod + K',\n highlightQuery: false,\n})\nconst emit = defineEmits<SpotlightEmits>()\nconst attrs = useAttrs()\nconst props = useProps(\n 'Spotlight',\n {\n size: 600,\n yOffset: 80,\n zIndex: getDefaultZIndex('max'),\n overlayProps: { backgroundOpacity: 0.35, blur: 7 },\n transitionProps: { duration: 200, transition: 'pop' },\n },\n rawProps,\n)\nconst uncontrolledQuery = ref('')\nconst currentQuery = computed(() =>\n typeof props.query === 'string' ? props.query : uncontrolledQuery.value,\n)\nconst filteredActions = computed(() =>\n limitActions(props.filter(currentQuery.value, props.actions), props.limit),\n)\nconst rootProps = computed(() => {\n const value = { ...attrs, ...props }\n for (const key of [\n 'searchProps',\n 'actions',\n 'filter',\n 'nothingFound',\n 'highlightQuery',\n 'limit',\n 'scrollAreaProps',\n 'query',\n ])\n delete value[key]\n return value\n})\n\nfunction setQuery(query: string) {\n if (typeof props.query !== 'string') uncontrolledQuery.value = query\n emit('update:query', query)\n emit('query-change', query)\n}\n\nfunction actionProps(action: SpotlightActionData) {\n const value = { ...action }\n delete (value as Partial<SpotlightActionData>).id\n delete (value as Partial<SpotlightActionData>).group\n return value\n}\n\nconst renderNothingFound = () =>\n typeof props.nothingFound === 'function' ? props.nothingFound() : props.nothingFound\n</script>\n\n<template>\n <SpotlightRoot v-bind=\"rootProps\" :query=\"currentQuery\" @query-change=\"setQuery\">\n <SpotlightSearch v-bind=\"props.searchProps\" />\n <SpotlightActionsList v-if=\"filteredActions.length\" v-bind=\"props.scrollAreaProps\">\n <template v-for=\"item in filteredActions\" :key=\"isActionsGroup(item) ? item.group : item.id\">\n <SpotlightActionsGroup v-if=\"isActionsGroup(item)\" :label=\"item.group\">\n <SpotlightAction\n v-for=\"action in item.actions\"\n :key=\"action.id\"\n v-bind=\"actionProps(action)\"\n :highlight-query=\"props.highlightQuery\"\n />\n </SpotlightActionsGroup>\n <SpotlightAction\n v-else\n v-bind=\"actionProps(item)\"\n :highlight-query=\"props.highlightQuery\"\n />\n </template>\n </SpotlightActionsList>\n <SpotlightEmpty v-else-if=\"props.nothingFound\">\n <component :is=\"renderNothingFound\" />\n </SpotlightEmpty>\n </SpotlightRoot>\n</template>\n","import SpotlightActionComponent from './SpotlightAction.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightAction = Object.assign(SpotlightActionComponent, { classes })\nexport type {\n SpotlightActionProps,\n SpotlightActionSlots,\n SpotlightActionStylesNames,\n} from './SpotlightAction.types'\n","import SpotlightActionsGroupComponent from './SpotlightActionsGroup.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightActionsGroup = Object.assign(SpotlightActionsGroupComponent, { classes })\nexport type {\n SpotlightActionsGroupProps,\n SpotlightActionsGroupStylesNames,\n} from './SpotlightActionsGroup.types'\n","import SpotlightActionsListComponent from './SpotlightActionsList.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightActionsList = Object.assign(SpotlightActionsListComponent, { classes })\nexport type {\n SpotlightActionsListProps,\n SpotlightActionsListStylesNames,\n} from './SpotlightActionsList.types'\n","import SpotlightEmptyComponent from './SpotlightEmpty.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightEmpty = Object.assign(SpotlightEmptyComponent, { classes })\nexport type { SpotlightEmptyProps, SpotlightEmptyStylesNames } from './SpotlightEmpty.types'\n","<script setup lang=\"ts\">\nimport { useAttrs } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport type { SpotlightFooterProps } from './SpotlightFooter.types'\n\ndefineOptions({ name: 'SpotlightFooter', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightFooterProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightFooter', null, rawProps)\nconst ctx = useSpotlightContext()\n</script>\n\n<template>\n <Box\n v-bind=\"{\n ...attrs,\n ...ctx.getStyles('footer', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n }\"\n >\n <slot />\n </Box>\n</template>\n","<script setup lang=\"ts\">\nimport { useAttrs } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport type { SpotlightFooterProps } from './SpotlightFooter.types'\n\ndefineOptions({ name: 'SpotlightFooter', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightFooterProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightFooter', null, rawProps)\nconst ctx = useSpotlightContext()\n</script>\n\n<template>\n <Box\n v-bind=\"{\n ...attrs,\n ...ctx.getStyles('footer', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n }\"\n >\n <slot />\n </Box>\n</template>\n","import SpotlightFooterComponent from './SpotlightFooter.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightFooter = Object.assign(SpotlightFooterComponent, { classes })\nexport type { SpotlightFooterProps, SpotlightFooterStylesNames } from './SpotlightFooter.types'\n","import SpotlightRootComponent from './SpotlightRoot.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightRoot = Object.assign(SpotlightRootComponent, { classes })\nexport type {\n SpotlightRootEmits,\n SpotlightRootProps,\n SpotlightRootSlots,\n SpotlightRootStylesNames,\n} from './SpotlightRoot.types'\n","import SpotlightSearchComponent from './SpotlightSearch.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightSearch = Object.assign(SpotlightSearchComponent, { classes })\nexport type {\n SpotlightSearchEmits,\n SpotlightSearchProps,\n SpotlightSearchStylesNames,\n} from './SpotlightSearch.types'\n","import SpotlightComponent from './Spotlight.vue'\nimport { SpotlightAction } from '../SpotlightAction'\nimport { SpotlightActionsGroup } from '../SpotlightActionsGroup'\nimport { SpotlightActionsList } from '../SpotlightActionsList'\nimport { SpotlightEmpty } from '../SpotlightEmpty'\nimport { SpotlightFooter } from '../SpotlightFooter'\nimport { SpotlightRoot } from '../SpotlightRoot'\nimport { SpotlightSearch } from '../SpotlightSearch'\nimport { spotlight } from '../../spotlight.store'\nimport classes from '../../Spotlight.module.css'\n\nexport const Spotlight = Object.assign(SpotlightComponent, {\n classes,\n Search: SpotlightSearch,\n ActionsList: SpotlightActionsList,\n Action: SpotlightAction,\n Empty: SpotlightEmpty,\n Footer: SpotlightFooter,\n ActionsGroup: SpotlightActionsGroup,\n Root: SpotlightRoot,\n open: spotlight.open,\n close: spotlight.close,\n toggle: spotlight.toggle,\n})\n\nexport type {\n SpotlightActionData,\n SpotlightActionGroupData,\n SpotlightActions,\n SpotlightEmits,\n SpotlightFilterFunction,\n SpotlightProps,\n SpotlightStylesNames,\n} from './Spotlight.types'\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["$slots"],"sources":["../src/spotlight.store.ts","../src/is-actions-group.ts","../src/Spotlight.context.ts","../src/components/SpotlightAction/SpotlightAction.vue","../src/components/SpotlightAction/SpotlightAction.vue","../src/components/SpotlightActionsGroup/SpotlightActionsGroup.vue","../src/components/SpotlightActionsGroup/SpotlightActionsGroup.vue","../src/components/SpotlightActionsList/SpotlightActionsList.vue","../src/components/SpotlightActionsList/SpotlightActionsList.vue","../src/components/SpotlightEmpty/SpotlightEmpty.vue","../src/components/SpotlightEmpty/SpotlightEmpty.vue","../src/get-hotkeys.ts","../src/style-api.ts","../src/Spotlight.module.css","../src/components/SpotlightRoot/SpotlightRoot.vue","../src/components/SpotlightRoot/SpotlightRoot.vue","../src/components/SpotlightSearch/SpotlightSearch.vue","../src/components/SpotlightSearch/SpotlightSearch.vue","../src/default-spotlight-filter.ts","../src/limit-actions.ts","../src/components/Spotlight/Spotlight.vue","../src/components/Spotlight/Spotlight.vue","../src/components/SpotlightAction/index.ts","../src/components/SpotlightActionsGroup/index.ts","../src/components/SpotlightActionsList/index.ts","../src/components/SpotlightEmpty/index.ts","../src/components/SpotlightFooter/SpotlightFooter.vue","../src/components/SpotlightFooter/SpotlightFooter.vue","../src/components/SpotlightFooter/index.ts","../src/components/SpotlightRoot/index.ts","../src/components/SpotlightSearch/index.ts","../src/components/Spotlight/index.ts"],"sourcesContent":["import { type Ref } from 'vue'\nimport { createStore, type MantineStore } from '@mantine-vue/store'\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.min(max, Math.max(min, value))\n}\n\nexport interface SpotlightState {\n opened: boolean\n selected: number\n listId: string\n query: string\n empty: boolean\n registeredActions: Set<string>\n}\n\nexport type SpotlightStore = MantineStore<SpotlightState>\n\nexport const createSpotlightStore = () =>\n createStore<SpotlightState>({\n opened: false,\n empty: false,\n selected: -1,\n listId: '',\n query: '',\n registeredActions: new Set(),\n })\n\nexport const useSpotlight = (store: SpotlightStore): Readonly<Ref<SpotlightState>> => store.value\n\nexport function updateSpotlightStateAction(\n update: (state: SpotlightState) => Partial<SpotlightState>,\n store: SpotlightStore,\n) {\n const state = store.getState()\n store.setState({ ...state, ...update(store.getState()) })\n}\n\nexport function openSpotlightAction(store: SpotlightStore) {\n updateSpotlightStateAction(() => ({ opened: true, selected: -1 }), store)\n}\n\nexport function closeSpotlightAction(store: SpotlightStore) {\n updateSpotlightStateAction(() => ({ opened: false }), store)\n}\n\nexport function toggleSpotlightAction(store: SpotlightStore) {\n updateSpotlightStateAction(\n (state) => ({ opened: !state.opened, selected: state.opened ? state.selected : -1 }),\n store,\n )\n}\n\nexport function setSelectedAction(index: number, store: SpotlightStore) {\n store.setState((state) => ({ ...state, selected: index }))\n}\n\nexport function setListId(id: string, store: SpotlightStore) {\n store.setState((state) => ({ ...state, listId: id }))\n}\n\nfunction findElementByQuerySelector<T extends HTMLElement>(\n selector: string,\n root: Document | Element | ShadowRoot = document,\n): T | null {\n const element = root.querySelector<T>(selector)\n\n if (element) {\n return element\n }\n\n const children = root instanceof ShadowRoot ? root.host.children : root.children\n\n for (let i = 0; i < children.length; i += 1) {\n const child = children[i]\n\n if (child.shadowRoot) {\n const shadowElement = findElementByQuerySelector<T>(selector, child.shadowRoot)\n\n if (shadowElement) {\n return shadowElement\n }\n }\n\n const nestedElement = findElementByQuerySelector<T>(selector, child)\n\n if (nestedElement) {\n return nestedElement\n }\n }\n\n return null\n}\n\nexport function selectAction(index: number, store: SpotlightStore): number {\n const state = store.getState()\n const actionsList = state.listId ? findElementByQuerySelector(`#${state.listId}`) : null\n const selected = actionsList?.querySelector<HTMLButtonElement>('[data-selected]')\n const actions = actionsList?.querySelectorAll<HTMLButtonElement>('[data-action]') ?? []\n const nextIndex = index === -1 ? actions.length - 1 : index === actions.length ? 0 : index\n const selectedIndex = clamp(nextIndex, 0, actions.length - 1)\n\n selected?.removeAttribute('data-selected')\n actions[selectedIndex]?.scrollIntoView?.({ block: 'nearest' })\n actions[selectedIndex]?.setAttribute('data-selected', 'true')\n setSelectedAction(selectedIndex, store)\n\n return selectedIndex\n}\n\nexport function selectNextAction(store: SpotlightStore) {\n return selectAction(store.getState().selected + 1, store)\n}\n\nexport function selectPreviousAction(store: SpotlightStore) {\n return selectAction(store.getState().selected - 1, store)\n}\n\nexport function triggerSelectedAction(store: SpotlightStore) {\n const state = store.getState()\n const selected = state.listId\n ? findElementByQuerySelector<HTMLButtonElement>(`#${state.listId} [data-selected]`)\n : null\n\n selected?.click()\n}\n\nexport function registerAction(id: string, store: SpotlightStore) {\n const state = store.getState()\n state.registeredActions.add(id)\n\n return () => {\n state.registeredActions.delete(id)\n }\n}\n\nexport function setQuery(query: string, store: SpotlightStore) {\n updateSpotlightStateAction(() => ({ query }), store)\n Promise.resolve().then(() => {\n selectAction(0, store)\n updateSpotlightStateAction(\n (state) => ({\n empty: (state.query.trim().length > 0 && state.registeredActions.size === 0) || false,\n }),\n store,\n )\n })\n}\n\nexport function clearSpotlightState(\n { clearQuery }: { clearQuery: boolean | undefined },\n store: SpotlightStore,\n) {\n store.setState((state) => ({\n ...state,\n selected: -1,\n query: clearQuery ? '' : state.query,\n empty: clearQuery ? false : state.empty,\n }))\n}\n\nexport const spotlightActions = {\n open: openSpotlightAction,\n close: closeSpotlightAction,\n toggle: toggleSpotlightAction,\n updateState: updateSpotlightStateAction,\n setSelectedAction,\n setListId,\n selectAction,\n selectNextAction,\n selectPreviousAction,\n triggerSelectedAction,\n registerAction,\n setQuery,\n clearSpotlightState,\n}\n\nexport function createSpotlight() {\n const store = createSpotlightStore()\n const actions = {\n open: () => openSpotlightAction(store),\n close: () => closeSpotlightAction(store),\n toggle: () => toggleSpotlightAction(store),\n }\n\n return [store, actions] as const\n}\n\nexport const [spotlightStore, spotlight] = createSpotlight()\nexport const { open: openSpotlight, close: closeSpotlight, toggle: toggleSpotlight } = spotlight\n","import type {\n SpotlightActionData,\n SpotlightActionGroupData,\n} from './components/Spotlight/Spotlight.types'\n\nexport function isActionsGroup(\n item: SpotlightActionData | SpotlightActionGroupData,\n): item is SpotlightActionGroupData {\n const group = item as SpotlightActionGroupData\n return group.group !== undefined && Array.isArray(group.actions)\n}\n","import type { InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\nimport type { SpotlightStore } from './spotlight.store'\n\nexport interface SpotlightContextValue {\n query: string\n setQuery: (query: string) => void\n getStyles: (selector: string, options?: Record<string, any>) => Record<string, any>\n store: SpotlightStore\n closeOnActionTrigger: boolean | undefined\n}\n\nconst SpotlightContextKey = Symbol('SpotlightContext') as InjectionKey<SpotlightContextValue>\n\nexport function provideSpotlightContext(value: SpotlightContextValue) {\n provide(SpotlightContextKey, value)\n}\n\nexport function useSpotlightContext() {\n const ctx = inject(SpotlightContextKey, null)\n\n if (ctx === null) {\n throw new Error('Spotlight component was not found in tree')\n }\n\n return ctx\n}\n","<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots } from 'vue'\nimport { Box, Highlight, UnstyledButton, hasNode, resolveNode, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport { spotlightActions } from '../../spotlight.store'\nimport type { SpotlightActionProps, SpotlightActionSlots } from './SpotlightAction.types'\n\ndefineOptions({ name: 'SpotlightAction', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightActionProps>(), {\n dimmedSections: true,\n highlightQuery: false,\n closeSpotlightOnTrigger: undefined,\n})\ndefineSlots<SpotlightActionSlots>()\nconst attrs = useAttrs()\nconst slots = useSlots()\nconst props = useProps('SpotlightAction', null, rawProps)\nconst ctx = useSpotlightContext()\nconst stylesApi = computed(() => ({ classNames: props.classNames, styles: props.styles }))\nconst leftSection = computed(() => resolveNode(props.leftSection, slots.leftSection))\nconst rightSection = computed(() => resolveNode(props.rightSection, slots.rightSection))\nconst renderLeftSection = () => leftSection.value\nconst renderRightSection = () => rightSection.value\nconst forwardedAttrs = computed(() => {\n const value = { ...attrs }\n delete value.onClick\n delete value.onMousedown\n return value\n})\n\nfunction mousedown(event: MouseEvent) {\n event.preventDefault()\n ;(attrs.onMousedown as ((event: MouseEvent) => void) | undefined)?.(event)\n}\n\nfunction click(event: MouseEvent) {\n ;(attrs.onClick as ((event: MouseEvent) => void) | undefined)?.(event)\n if (props.closeSpotlightOnTrigger ?? ctx.closeOnActionTrigger) {\n spotlightActions.close(ctx.store)\n }\n}\n</script>\n\n<template>\n <UnstyledButton\n v-bind=\"{\n ...forwardedAttrs,\n ...ctx.getStyles('action', { className: attrs.class, style: attrs.style, ...stylesApi }),\n }\"\n data-action\n :tabindex=\"-1\"\n @mousedown=\"mousedown\"\n @click=\"click\"\n >\n <slot v-if=\"$slots.default\" />\n <template v-else>\n <Box\n v-if=\"hasNode(leftSection)\"\n component=\"span\"\n :mod=\"{ position: 'left', dimmed: props.dimmedSections }\"\n v-bind=\"ctx.getStyles('actionSection', stylesApi)\"\n >\n <component :is=\"renderLeftSection\" />\n </Box>\n <span v-bind=\"ctx.getStyles('actionBody', stylesApi)\">\n <Highlight\n v-if=\"props.highlightQuery && typeof props.label === 'string'\"\n component=\"span\"\n :highlight=\"ctx.query\"\n :color=\"props.highlightColor\"\n v-bind=\"ctx.getStyles('actionLabel', stylesApi)\"\n >\n {{ props.label }}\n </Highlight>\n <span v-else v-bind=\"ctx.getStyles('actionLabel', stylesApi)\">{{ props.label }}</span>\n <span v-bind=\"ctx.getStyles('actionDescription', stylesApi)\">{{ props.description }}</span>\n </span>\n <Box\n v-if=\"hasNode(rightSection)\"\n component=\"span\"\n :mod=\"{ position: 'right', dimmed: props.dimmedSections }\"\n v-bind=\"ctx.getStyles('actionSection', stylesApi)\"\n >\n <component :is=\"renderRightSection\" />\n </Box>\n </template>\n </UnstyledButton>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots } from 'vue'\nimport { Box, Highlight, UnstyledButton, hasNode, resolveNode, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport { spotlightActions } from '../../spotlight.store'\nimport type { SpotlightActionProps, SpotlightActionSlots } from './SpotlightAction.types'\n\ndefineOptions({ name: 'SpotlightAction', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightActionProps>(), {\n dimmedSections: true,\n highlightQuery: false,\n closeSpotlightOnTrigger: undefined,\n})\ndefineSlots<SpotlightActionSlots>()\nconst attrs = useAttrs()\nconst slots = useSlots()\nconst props = useProps('SpotlightAction', null, rawProps)\nconst ctx = useSpotlightContext()\nconst stylesApi = computed(() => ({ classNames: props.classNames, styles: props.styles }))\nconst leftSection = computed(() => resolveNode(props.leftSection, slots.leftSection))\nconst rightSection = computed(() => resolveNode(props.rightSection, slots.rightSection))\nconst renderLeftSection = () => leftSection.value\nconst renderRightSection = () => rightSection.value\nconst forwardedAttrs = computed(() => {\n const value = { ...attrs }\n delete value.onClick\n delete value.onMousedown\n return value\n})\n\nfunction mousedown(event: MouseEvent) {\n event.preventDefault()\n ;(attrs.onMousedown as ((event: MouseEvent) => void) | undefined)?.(event)\n}\n\nfunction click(event: MouseEvent) {\n ;(attrs.onClick as ((event: MouseEvent) => void) | undefined)?.(event)\n if (props.closeSpotlightOnTrigger ?? ctx.closeOnActionTrigger) {\n spotlightActions.close(ctx.store)\n }\n}\n</script>\n\n<template>\n <UnstyledButton\n v-bind=\"{\n ...forwardedAttrs,\n ...ctx.getStyles('action', { className: attrs.class, style: attrs.style, ...stylesApi }),\n }\"\n data-action\n :tabindex=\"-1\"\n @mousedown=\"mousedown\"\n @click=\"click\"\n >\n <slot v-if=\"$slots.default\" />\n <template v-else>\n <Box\n v-if=\"hasNode(leftSection)\"\n component=\"span\"\n :mod=\"{ position: 'left', dimmed: props.dimmedSections }\"\n v-bind=\"ctx.getStyles('actionSection', stylesApi)\"\n >\n <component :is=\"renderLeftSection\" />\n </Box>\n <span v-bind=\"ctx.getStyles('actionBody', stylesApi)\">\n <Highlight\n v-if=\"props.highlightQuery && typeof props.label === 'string'\"\n component=\"span\"\n :highlight=\"ctx.query\"\n :color=\"props.highlightColor\"\n v-bind=\"ctx.getStyles('actionLabel', stylesApi)\"\n >\n {{ props.label }}\n </Highlight>\n <span v-else v-bind=\"ctx.getStyles('actionLabel', stylesApi)\">{{ props.label }}</span>\n <span v-bind=\"ctx.getStyles('actionDescription', stylesApi)\">{{ props.description }}</span>\n </span>\n <Box\n v-if=\"hasNode(rightSection)\"\n component=\"span\"\n :mod=\"{ position: 'right', dimmed: props.dimmedSections }\"\n v-bind=\"ctx.getStyles('actionSection', stylesApi)\"\n >\n <component :is=\"renderRightSection\" />\n </Box>\n </template>\n </UnstyledButton>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport type { SpotlightActionsGroupProps } from './SpotlightActionsGroup.types'\n\ndefineOptions({ name: 'SpotlightActionsGroup', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightActionsGroupProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightActionsGroup', null, rawProps)\nconst ctx = useSpotlightContext()\nconst groupStyles = computed(() =>\n ctx.getStyles('actionsGroup', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n)\nconst labelVariable = computed(() => ({\n '--spotlight-label': `'${props.label?.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`,\n}))\n</script>\n\n<template>\n <Box\n v-bind=\"{ ...attrs, ...groupStyles }\"\n :style=\"[groupStyles.style, attrs.style, labelVariable]\"\n >\n <slot />\n </Box>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport type { SpotlightActionsGroupProps } from './SpotlightActionsGroup.types'\n\ndefineOptions({ name: 'SpotlightActionsGroup', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightActionsGroupProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightActionsGroup', null, rawProps)\nconst ctx = useSpotlightContext()\nconst groupStyles = computed(() =>\n ctx.getStyles('actionsGroup', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n)\nconst labelVariable = computed(() => ({\n '--spotlight-label': `'${props.label?.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`,\n}))\n</script>\n\n<template>\n <Box\n v-bind=\"{ ...attrs, ...groupStyles }\"\n :style=\"[groupStyles.style, attrs.style, labelVariable]\"\n >\n <slot />\n </Box>\n</template>\n","<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, useAttrs } from 'vue'\nimport { ScrollAreaAutosize, useProps } from '@mantine-vue/core'\nimport { useId } from '@mantine-vue/hooks'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport { spotlightActions } from '../../spotlight.store'\nimport type { SpotlightActionsListProps } from './SpotlightActionsList.types'\n\ndefineOptions({ name: 'SpotlightActionsList', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightActionsListProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightActionsList', null, rawProps)\nconst ctx = useSpotlightContext()\nconst generatedId = useId()\nconst listId = props.id || `mantine-${generatedId.value.replace(/:/g, '')}`\nonMounted(() => spotlightActions.setListId(listId, ctx.store))\nonBeforeUnmount(() => spotlightActions.setListId('', ctx.store))\n</script>\n\n<template>\n <ScrollAreaAutosize\n v-bind=\"{\n ...attrs,\n ...ctx.getStyles('actionsList', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n }\"\n type=\"scroll\"\n scrollbar-size=\"var(--spotlight-actions-list-padding)\"\n offset-scrollbars=\"y\"\n :id=\"listId\"\n >\n <slot />\n </ScrollAreaAutosize>\n</template>\n","<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, useAttrs } from 'vue'\nimport { ScrollAreaAutosize, useProps } from '@mantine-vue/core'\nimport { useId } from '@mantine-vue/hooks'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport { spotlightActions } from '../../spotlight.store'\nimport type { SpotlightActionsListProps } from './SpotlightActionsList.types'\n\ndefineOptions({ name: 'SpotlightActionsList', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightActionsListProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightActionsList', null, rawProps)\nconst ctx = useSpotlightContext()\nconst generatedId = useId()\nconst listId = props.id || `mantine-${generatedId.value.replace(/:/g, '')}`\nonMounted(() => spotlightActions.setListId(listId, ctx.store))\nonBeforeUnmount(() => spotlightActions.setListId('', ctx.store))\n</script>\n\n<template>\n <ScrollAreaAutosize\n v-bind=\"{\n ...attrs,\n ...ctx.getStyles('actionsList', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n }\"\n type=\"scroll\"\n scrollbar-size=\"var(--spotlight-actions-list-padding)\"\n offset-scrollbars=\"y\"\n :id=\"listId\"\n >\n <slot />\n </ScrollAreaAutosize>\n</template>\n","<script setup lang=\"ts\">\nimport { useAttrs } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport type { SpotlightEmptyProps } from './SpotlightEmpty.types'\n\ndefineOptions({ name: 'SpotlightEmpty', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightEmptyProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightEmpty', null, rawProps)\nconst ctx = useSpotlightContext()\n</script>\n\n<template>\n <Box\n v-bind=\"{\n ...attrs,\n ...ctx.getStyles('empty', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n }\"\n >\n <slot />\n </Box>\n</template>\n","<script setup lang=\"ts\">\nimport { useAttrs } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport type { SpotlightEmptyProps } from './SpotlightEmpty.types'\n\ndefineOptions({ name: 'SpotlightEmpty', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightEmptyProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightEmpty', null, rawProps)\nconst ctx = useSpotlightContext()\n</script>\n\n<template>\n <Box\n v-bind=\"{\n ...attrs,\n ...ctx.getStyles('empty', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n }\"\n >\n <slot />\n </Box>\n</template>\n","import type { HotkeyItem } from '@mantine-vue/hooks'\nimport type { SpotlightStore } from './spotlight.store'\nimport { spotlightActions } from './spotlight.store'\n\nexport function getHotkeys(\n hotkeys: string | string[] | null | undefined,\n store: SpotlightStore,\n): HotkeyItem[] {\n if (!hotkeys) {\n return []\n }\n\n const open = () => spotlightActions.open(store)\n\n if (Array.isArray(hotkeys)) {\n return hotkeys.map((hotkey) => [hotkey, open])\n }\n\n return [[hotkeys, open]]\n}\n","export function mergeClassNames(...items: any[]) {\n return items.reduce<Record<string, any>>((acc, item) => {\n if (!item || typeof item !== 'object' || Array.isArray(item)) {\n return acc\n }\n\n Object.entries(item).forEach(([key, value]) => {\n acc[key] = acc[key] ? [acc[key], value] : value\n })\n\n return acc\n }, {})\n}\n\nexport function mergeStyles(...items: any[]) {\n return items.reduce<Record<string, any>>((acc, item) => {\n if (!item || typeof item !== 'object' || Array.isArray(item)) {\n return acc\n }\n\n Object.entries(item).forEach(([key, value]) => {\n acc[key] = acc[key] ? [acc[key], value] : value\n })\n\n return acc\n }, {})\n}\n\nexport function renderContent(value: any) {\n return typeof value === 'function' ? value() : value\n}\n",".root {\n &[data-scrollable] {\n --spotlight-content-height: 100%;\n }\n}\n\n.content {\n overflow: hidden;\n height: var(--spotlight-content-height, auto);\n max-height: var(--spotlight-max-height);\n}\n\n.body {\n display: flex;\n flex-direction: column;\n height: var(--spotlight-content-height, auto);\n}\n\n.search {\n border: 0;\n background-color: transparent;\n}\n\n.actionsList {\n --spotlight-actions-list-padding: 4px;\n\n border-top: 1px solid;\n flex: 1;\n padding: var(--spotlight-actions-list-padding);\n max-height: calc(100vh - 15rem);\n margin-inline-end: calc(var(--spotlight-actions-list-padding) * -1);\n width: 100%;\n\n @mixin where-light {\n border-color: var(--mantine-color-gray-2);\n }\n\n @mixin where-dark {\n border-color: var(--mantine-color-dark-4);\n }\n}\n\n.action {\n display: flex;\n align-items: center;\n width: 100%;\n padding: 7px var(--mantine-spacing-md);\n border-radius: var(--mantine-radius-default);\n background-color: transparent;\n color: inherit;\n text-align: start;\n\n &:where(:not([data-selected])) {\n @mixin hover {\n @mixin where-light {\n background-color: var(--mantine-color-gray-0);\n }\n\n @mixin where-dark {\n background-color: var(--mantine-color-dark-6);\n }\n }\n }\n\n &:where([data-selected]) {\n background-color: var(--mantine-primary-color-filled);\n color: var(--mantine-primary-color-contrast, var(--mantine-color-white));\n --action-description-color: var(--mantine-primary-color-contrast, var(--mantine-color-white));\n --action-description-opacity: 0.7;\n }\n}\n\n.actionBody {\n flex: 1;\n}\n\n.actionSection {\n opacity: 1;\n color: inherit;\n\n &:where([data-dimmed]) {\n opacity: var(--action-description-opacity, 1);\n color: var(--action-description-color, var(--mantine-color-dimmed));\n }\n\n &:where([data-position='left']) {\n margin-inline-end: var(--mantine-spacing-md);\n }\n\n &:where([data-position='right']) {\n margin-inline-start: var(--mantine-spacing-md);\n }\n\n & > svg {\n display: block;\n }\n}\n\n.actionLabel {\n display: block;\n}\n\n.actionDescription {\n display: block;\n font-size: var(--mantine-font-size-xs);\n opacity: var(--action-description-opacity, 1);\n color: var(--action-description-color, var(--mantine-color-dimmed));\n}\n\n.empty {\n color: var(--mantine-color-dimmed);\n padding: var(--mantine-spacing-md);\n text-align: center;\n}\n\n.footer {\n padding: var(--mantine-spacing-xs) calc(var(--mantine-spacing-md) + rem(4px));\n border-top: 1px solid;\n\n @mixin where-light {\n border-color: var(--mantine-color-gray-2);\n }\n\n @mixin where-dark {\n border-color: var(--mantine-color-dark-4);\n }\n}\n\n.actionsGroup {\n display: flex;\n flex-direction: column;\n margin-top: var(--mantine-spacing-md);\n\n &::before {\n content: var(--spotlight-label);\n text-transform: uppercase;\n font-size: var(--mantine-font-size-xs);\n font-weight: var(--mantine-font-weight-bold);\n color: var(--mantine-color-dimmed);\n padding-inline-start: var(--mantine-spacing-md);\n }\n\n &:empty {\n display: none;\n }\n}\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs, watch } from 'vue'\nimport { Modal, getDefaultZIndex, rem, useProps, useStyles } from '@mantine-vue/core'\nimport { useHotkeys } from '@mantine-vue/hooks'\nimport { getHotkeys } from '../../get-hotkeys'\nimport { provideSpotlightContext } from '../../Spotlight.context'\nimport { mergeClassNames, mergeStyles } from '../../style-api'\nimport { spotlightActions, spotlightStore, useSpotlight } from '../../spotlight.store'\nimport type {\n SpotlightRootEmits,\n SpotlightRootProps,\n SpotlightRootSlots,\n} from './SpotlightRoot.types'\nimport classes from '../../Spotlight.module.css'\n\ndefineOptions({ name: 'SpotlightRoot', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightRootProps>(), {\n store: () => spotlightStore,\n clearQueryOnClose: true,\n shortcut: 'mod + K',\n disabled: false,\n forceOpened: false,\n closeOnActionTrigger: true,\n maxHeight: 400,\n scrollable: false,\n})\nconst emit = defineEmits<SpotlightRootEmits>()\ndefineSlots<SpotlightRootSlots>()\nconst attrs = useAttrs()\nconst props = useProps(\n 'SpotlightRoot',\n {\n size: 600,\n yOffset: 80,\n zIndex: getDefaultZIndex('max'),\n overlayProps: { backgroundOpacity: 0.35, blur: 7 },\n transitionProps: { duration: 200, transition: 'pop' },\n },\n rawProps,\n)\nconst state = useSpotlight(props.store)\nconst previousOpened = ref(state.value.opened)\nconst currentQuery = computed(() =>\n typeof props.query === 'string' ? props.query : state.value.query,\n)\n\nfunction setQuery(query: string) {\n emit('update:query', query)\n emit('query-change', query)\n spotlightActions.setQuery(query, props.store)\n}\n\nconst getStyles = useStyles({\n name: 'Spotlight',\n classes,\n props,\n attrs,\n classNames: props.classNames as any,\n styles: props.styles as any,\n unstyled: props.unstyled,\n vars: props.vars as any,\n})\n\nprovideSpotlightContext({\n get query() {\n return currentQuery.value\n },\n setQuery,\n getStyles,\n store: props.store,\n get closeOnActionTrigger() {\n return props.closeOnActionTrigger\n },\n})\n\nuseHotkeys(\n () => getHotkeys(props.shortcut, props.store),\n () => props.tagsToIgnore,\n () => props.triggerOnContentEditable,\n)\n\nwatch(\n () => state.value.opened,\n (opened) => {\n if (opened === previousOpened.value) return\n if (opened) emit('spotlight-open')\n else emit('spotlight-close')\n previousOpened.value = opened\n },\n)\n\nconst rootStyles = computed(() =>\n getStyles('root', { className: attrs.class, style: attrs.style as any }),\n)\nconst modalAttrs = computed(() => {\n const value = { ...attrs, ...props }\n for (const key of [\n 'classNames',\n 'styles',\n 'vars',\n 'unstyled',\n 'store',\n 'query',\n 'clearQueryOnClose',\n 'shortcut',\n 'tagsToIgnore',\n 'triggerOnContentEditable',\n 'disabled',\n 'forceOpened',\n 'closeOnActionTrigger',\n 'maxHeight',\n 'scrollable',\n 'class',\n 'style',\n ])\n delete value[key]\n return value\n})\n\nfunction close() {\n spotlightActions.close(props.store)\n}\n\nfunction exitTransitionEnd() {\n if (props.clearQueryOnClose) setQuery('')\n spotlightActions.clearSpotlightState({ clearQuery: props.clearQueryOnClose }, props.store)\n props.transitionProps?.onExited?.()\n emit('exit-transition-end')\n}\n</script>\n\n<template>\n <Modal\n v-if=\"!props.disabled\"\n v-bind=\"modalAttrs\"\n :with-close-button=\"false\"\n :opened=\"state.opened || props.forceOpened\"\n :padding=\"0\"\n :class=\"rootStyles.class\"\n :style=\"rootStyles.style\"\n :class-names=\"\n mergeClassNames({ body: classes.body, content: classes.content }, props.classNames)\n \"\n :styles=\"mergeStyles(props.styles)\"\n :vars=\"\n mergeStyles(\n { root: { '--spotlight-max-height': props.scrollable ? rem(props.maxHeight) : undefined } },\n props.vars,\n )\n \"\n :data-scrollable=\"props.scrollable || undefined\"\n @close=\"close\"\n @exit-transition-end=\"exitTransitionEnd\"\n >\n <slot />\n </Modal>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs, watch } from 'vue'\nimport { Modal, getDefaultZIndex, rem, useProps, useStyles } from '@mantine-vue/core'\nimport { useHotkeys } from '@mantine-vue/hooks'\nimport { getHotkeys } from '../../get-hotkeys'\nimport { provideSpotlightContext } from '../../Spotlight.context'\nimport { mergeClassNames, mergeStyles } from '../../style-api'\nimport { spotlightActions, spotlightStore, useSpotlight } from '../../spotlight.store'\nimport type {\n SpotlightRootEmits,\n SpotlightRootProps,\n SpotlightRootSlots,\n} from './SpotlightRoot.types'\nimport classes from '../../Spotlight.module.css'\n\ndefineOptions({ name: 'SpotlightRoot', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightRootProps>(), {\n store: () => spotlightStore,\n clearQueryOnClose: true,\n shortcut: 'mod + K',\n disabled: false,\n forceOpened: false,\n closeOnActionTrigger: true,\n maxHeight: 400,\n scrollable: false,\n})\nconst emit = defineEmits<SpotlightRootEmits>()\ndefineSlots<SpotlightRootSlots>()\nconst attrs = useAttrs()\nconst props = useProps(\n 'SpotlightRoot',\n {\n size: 600,\n yOffset: 80,\n zIndex: getDefaultZIndex('max'),\n overlayProps: { backgroundOpacity: 0.35, blur: 7 },\n transitionProps: { duration: 200, transition: 'pop' },\n },\n rawProps,\n)\nconst state = useSpotlight(props.store)\nconst previousOpened = ref(state.value.opened)\nconst currentQuery = computed(() =>\n typeof props.query === 'string' ? props.query : state.value.query,\n)\n\nfunction setQuery(query: string) {\n emit('update:query', query)\n emit('query-change', query)\n spotlightActions.setQuery(query, props.store)\n}\n\nconst getStyles = useStyles({\n name: 'Spotlight',\n classes,\n props,\n attrs,\n classNames: props.classNames as any,\n styles: props.styles as any,\n unstyled: props.unstyled,\n vars: props.vars as any,\n})\n\nprovideSpotlightContext({\n get query() {\n return currentQuery.value\n },\n setQuery,\n getStyles,\n store: props.store,\n get closeOnActionTrigger() {\n return props.closeOnActionTrigger\n },\n})\n\nuseHotkeys(\n () => getHotkeys(props.shortcut, props.store),\n () => props.tagsToIgnore,\n () => props.triggerOnContentEditable,\n)\n\nwatch(\n () => state.value.opened,\n (opened) => {\n if (opened === previousOpened.value) return\n if (opened) emit('spotlight-open')\n else emit('spotlight-close')\n previousOpened.value = opened\n },\n)\n\nconst rootStyles = computed(() =>\n getStyles('root', { className: attrs.class, style: attrs.style as any }),\n)\nconst modalAttrs = computed(() => {\n const value = { ...attrs, ...props }\n for (const key of [\n 'classNames',\n 'styles',\n 'vars',\n 'unstyled',\n 'store',\n 'query',\n 'clearQueryOnClose',\n 'shortcut',\n 'tagsToIgnore',\n 'triggerOnContentEditable',\n 'disabled',\n 'forceOpened',\n 'closeOnActionTrigger',\n 'maxHeight',\n 'scrollable',\n 'class',\n 'style',\n ])\n delete value[key]\n return value\n})\n\nfunction close() {\n spotlightActions.close(props.store)\n}\n\nfunction exitTransitionEnd() {\n if (props.clearQueryOnClose) setQuery('')\n spotlightActions.clearSpotlightState({ clearQuery: props.clearQueryOnClose }, props.store)\n props.transitionProps?.onExited?.()\n emit('exit-transition-end')\n}\n</script>\n\n<template>\n <Modal\n v-if=\"!props.disabled\"\n v-bind=\"modalAttrs\"\n :with-close-button=\"false\"\n :opened=\"state.opened || props.forceOpened\"\n :padding=\"0\"\n :class=\"rootStyles.class\"\n :style=\"rootStyles.style\"\n :class-names=\"\n mergeClassNames({ body: classes.body, content: classes.content }, props.classNames)\n \"\n :styles=\"mergeStyles(props.styles)\"\n :vars=\"\n mergeStyles(\n { root: { '--spotlight-max-height': props.scrollable ? rem(props.maxHeight) : undefined } },\n props.vars,\n )\n \"\n :data-scrollable=\"props.scrollable || undefined\"\n @close=\"close\"\n @exit-transition-end=\"exitTransitionEnd\"\n >\n <slot />\n </Modal>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs } from 'vue'\nimport { Input, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport { spotlightActions } from '../../spotlight.store'\nimport { mergeClassNames, mergeStyles } from '../../style-api'\nimport type { SpotlightSearchEmits, SpotlightSearchProps } from './SpotlightSearch.types'\n\ndefineOptions({ name: 'SpotlightSearch', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightSearchProps>(), { size: 'lg' })\nconst emit = defineEmits<SpotlightSearchEmits>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightSearch', null, rawProps)\nconst ctx = useSpotlightContext()\nconst isComposing = ref(false)\nconst inputStyles = computed(() => ctx.getStyles('search'))\nconst forwardedAttrs = computed(() => {\n const value = { ...attrs }\n delete value.onInput\n delete value.onKeydown\n delete value.onCompositionstart\n delete value.onCompositionend\n return value\n})\n\nfunction input(event: Event) {\n const value = (event.currentTarget as HTMLInputElement).value\n ctx.setQuery(value)\n emit('update:modelValue', value)\n emit('change', value)\n}\n\nfunction keydown(event: KeyboardEvent) {\n emit('keydown', event)\n if (isComposing.value) return\n if (event.code === 'ArrowDown') {\n event.preventDefault()\n spotlightActions.selectNextAction(ctx.store)\n }\n if (event.code === 'ArrowUp') {\n event.preventDefault()\n spotlightActions.selectPreviousAction(ctx.store)\n }\n if (event.code === 'Enter' || event.code === 'NumpadEnter') {\n event.preventDefault()\n spotlightActions.triggerSelectedAction(ctx.store)\n }\n}\n</script>\n\n<template>\n <Input\n v-bind=\"forwardedAttrs\"\n :size=\"props.size\"\n :value=\"props.modelValue ?? ctx.query\"\n :class-names=\"mergeClassNames({ input: inputStyles.class }, props.classNames)\"\n :styles=\"mergeStyles({ input: inputStyles.style }, props.styles)\"\n :vars=\"props.vars\"\n @input=\"input\"\n @keydown=\"keydown\"\n @compositionstart=\"isComposing = true\"\n @compositionend=\"isComposing = false\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs } from 'vue'\nimport { Input, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport { spotlightActions } from '../../spotlight.store'\nimport { mergeClassNames, mergeStyles } from '../../style-api'\nimport type { SpotlightSearchEmits, SpotlightSearchProps } from './SpotlightSearch.types'\n\ndefineOptions({ name: 'SpotlightSearch', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightSearchProps>(), { size: 'lg' })\nconst emit = defineEmits<SpotlightSearchEmits>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightSearch', null, rawProps)\nconst ctx = useSpotlightContext()\nconst isComposing = ref(false)\nconst inputStyles = computed(() => ctx.getStyles('search'))\nconst forwardedAttrs = computed(() => {\n const value = { ...attrs }\n delete value.onInput\n delete value.onKeydown\n delete value.onCompositionstart\n delete value.onCompositionend\n return value\n})\n\nfunction input(event: Event) {\n const value = (event.currentTarget as HTMLInputElement).value\n ctx.setQuery(value)\n emit('update:modelValue', value)\n emit('change', value)\n}\n\nfunction keydown(event: KeyboardEvent) {\n emit('keydown', event)\n if (isComposing.value) return\n if (event.code === 'ArrowDown') {\n event.preventDefault()\n spotlightActions.selectNextAction(ctx.store)\n }\n if (event.code === 'ArrowUp') {\n event.preventDefault()\n spotlightActions.selectPreviousAction(ctx.store)\n }\n if (event.code === 'Enter' || event.code === 'NumpadEnter') {\n event.preventDefault()\n spotlightActions.triggerSelectedAction(ctx.store)\n }\n}\n</script>\n\n<template>\n <Input\n v-bind=\"forwardedAttrs\"\n :size=\"props.size\"\n :value=\"props.modelValue ?? ctx.query\"\n :class-names=\"mergeClassNames({ input: inputStyles.class }, props.classNames)\"\n :styles=\"mergeStyles({ input: inputStyles.style }, props.styles)\"\n :vars=\"props.vars\"\n @input=\"input\"\n @keydown=\"keydown\"\n @compositionstart=\"isComposing = true\"\n @compositionend=\"isComposing = false\"\n />\n</template>\n","import type {\n SpotlightActionData,\n SpotlightActionGroupData,\n SpotlightActions,\n SpotlightFilterFunction,\n} from './components/Spotlight/Spotlight.types'\n\nfunction getKeywords(keywords: string | string[] | undefined) {\n if (Array.isArray(keywords)) {\n return keywords\n .map((keyword) => keyword.trim())\n .join(',')\n .toLowerCase()\n .trim()\n }\n\n if (typeof keywords === 'string') {\n return keywords.toLowerCase().trim()\n }\n\n return ''\n}\n\nfunction getFlatActions(data: SpotlightActions[]) {\n return data.reduce<SpotlightActionData[]>((acc, item) => {\n if ('actions' in item) {\n return [\n ...acc,\n ...item.actions.map((action: SpotlightActionData) => ({ ...action, group: item.group })),\n ]\n }\n\n return [...acc, item]\n }, [])\n}\n\nfunction flatActionsToGroups(data: SpotlightActionData[]) {\n const groups: Record<string, { pushed: boolean; data: SpotlightActionGroupData }> = {}\n const result: SpotlightActions[] = []\n\n data.forEach((action) => {\n if (action.group) {\n if (!groups[action.group]) {\n groups[action.group] = { pushed: false, data: { group: action.group, actions: [] } }\n }\n\n groups[action.group].data.actions.push(action)\n\n if (!groups[action.group].pushed) {\n groups[action.group].pushed = true\n result.push(groups[action.group].data)\n }\n } else {\n result.push(action)\n }\n })\n\n return result\n}\n\nexport const defaultSpotlightFilter: SpotlightFilterFunction = (_query, data) => {\n const query = _query.trim().toLowerCase()\n const priorityMatrix: SpotlightActionData[][] = [[], []]\n const flatActions = getFlatActions(data)\n\n flatActions.forEach((item) => {\n if (item.label?.toLowerCase().includes(query)) {\n priorityMatrix[0].push(item)\n } else if (\n item.description?.toLowerCase().includes(query) ||\n getKeywords(item.keywords).includes(query)\n ) {\n priorityMatrix[1].push(item)\n }\n })\n\n return flatActionsToGroups(priorityMatrix.flat())\n}\n","import { isActionsGroup } from './is-actions-group'\nimport type { SpotlightActionData, SpotlightActions } from './components/Spotlight/Spotlight.types'\n\nexport function limitActions(actions: SpotlightActions[], limit: number) {\n if (!Array.isArray(actions)) {\n return []\n }\n\n let count = 0\n\n return actions.reduce<SpotlightActions[]>((acc, item) => {\n if (count >= limit) {\n return acc\n }\n\n if (isActionsGroup(item)) {\n const groupActions = limitActions(item.actions, limit - count)\n acc.push({\n group: item.group,\n actions: groupActions as SpotlightActionData[],\n })\n count += groupActions.length\n } else {\n acc.push(item)\n count += 1\n }\n\n return acc\n }, [])\n}\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs } from 'vue'\nimport { getDefaultZIndex, useProps } from '@mantine-vue/core'\nimport SpotlightAction from '../SpotlightAction/SpotlightAction.vue'\nimport SpotlightActionsGroup from '../SpotlightActionsGroup/SpotlightActionsGroup.vue'\nimport SpotlightActionsList from '../SpotlightActionsList/SpotlightActionsList.vue'\nimport SpotlightEmpty from '../SpotlightEmpty/SpotlightEmpty.vue'\nimport SpotlightRoot from '../SpotlightRoot/SpotlightRoot.vue'\nimport SpotlightSearch from '../SpotlightSearch/SpotlightSearch.vue'\nimport { defaultSpotlightFilter } from '../../default-spotlight-filter'\nimport { isActionsGroup } from '../../is-actions-group'\nimport { limitActions } from '../../limit-actions'\nimport { spotlightStore } from '../../spotlight.store'\nimport type { SpotlightActionData, SpotlightEmits, SpotlightProps } from './Spotlight.types'\n\ndefineOptions({ name: 'Spotlight', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightProps>(), {\n limit: Infinity,\n store: () => spotlightStore,\n filter: defaultSpotlightFilter,\n clearQueryOnClose: true,\n closeOnActionTrigger: true,\n shortcut: 'mod + K',\n highlightQuery: false,\n})\nconst emit = defineEmits<SpotlightEmits>()\nconst attrs = useAttrs()\nconst props = useProps(\n 'Spotlight',\n {\n size: 600,\n yOffset: 80,\n zIndex: getDefaultZIndex('max'),\n overlayProps: { backgroundOpacity: 0.35, blur: 7 },\n transitionProps: { duration: 200, transition: 'pop' },\n },\n rawProps,\n)\nconst uncontrolledQuery = ref('')\nconst currentQuery = computed(() =>\n typeof props.query === 'string' ? props.query : uncontrolledQuery.value,\n)\nconst filteredActions = computed(() =>\n limitActions(props.filter(currentQuery.value, props.actions), props.limit),\n)\nconst rootProps = computed(() => {\n const value = { ...attrs, ...props }\n for (const key of [\n 'searchProps',\n 'actions',\n 'filter',\n 'nothingFound',\n 'highlightQuery',\n 'limit',\n 'scrollAreaProps',\n 'query',\n ])\n delete value[key]\n return value\n})\n\nfunction setQuery(query: string) {\n if (typeof props.query !== 'string') uncontrolledQuery.value = query\n emit('update:query', query)\n emit('query-change', query)\n}\n\nfunction actionProps(action: SpotlightActionData) {\n const value = { ...action }\n delete (value as Partial<SpotlightActionData>).id\n delete (value as Partial<SpotlightActionData>).group\n return value\n}\n\nconst renderNothingFound = () =>\n typeof props.nothingFound === 'function' ? props.nothingFound() : props.nothingFound\n</script>\n\n<template>\n <SpotlightRoot v-bind=\"rootProps\" :query=\"currentQuery\" @query-change=\"setQuery\">\n <SpotlightSearch v-bind=\"props.searchProps\" />\n <SpotlightActionsList v-if=\"filteredActions.length\" v-bind=\"props.scrollAreaProps\">\n <template v-for=\"item in filteredActions\" :key=\"isActionsGroup(item) ? item.group : item.id\">\n <SpotlightActionsGroup v-if=\"isActionsGroup(item)\" :label=\"item.group\">\n <SpotlightAction\n v-for=\"action in item.actions\"\n :key=\"action.id\"\n v-bind=\"actionProps(action)\"\n :highlight-query=\"props.highlightQuery\"\n />\n </SpotlightActionsGroup>\n <SpotlightAction\n v-else\n v-bind=\"actionProps(item)\"\n :highlight-query=\"props.highlightQuery\"\n />\n </template>\n </SpotlightActionsList>\n <SpotlightEmpty v-else-if=\"props.nothingFound\">\n <component :is=\"renderNothingFound\" />\n </SpotlightEmpty>\n </SpotlightRoot>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs } from 'vue'\nimport { getDefaultZIndex, useProps } from '@mantine-vue/core'\nimport SpotlightAction from '../SpotlightAction/SpotlightAction.vue'\nimport SpotlightActionsGroup from '../SpotlightActionsGroup/SpotlightActionsGroup.vue'\nimport SpotlightActionsList from '../SpotlightActionsList/SpotlightActionsList.vue'\nimport SpotlightEmpty from '../SpotlightEmpty/SpotlightEmpty.vue'\nimport SpotlightRoot from '../SpotlightRoot/SpotlightRoot.vue'\nimport SpotlightSearch from '../SpotlightSearch/SpotlightSearch.vue'\nimport { defaultSpotlightFilter } from '../../default-spotlight-filter'\nimport { isActionsGroup } from '../../is-actions-group'\nimport { limitActions } from '../../limit-actions'\nimport { spotlightStore } from '../../spotlight.store'\nimport type { SpotlightActionData, SpotlightEmits, SpotlightProps } from './Spotlight.types'\n\ndefineOptions({ name: 'Spotlight', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightProps>(), {\n limit: Infinity,\n store: () => spotlightStore,\n filter: defaultSpotlightFilter,\n clearQueryOnClose: true,\n closeOnActionTrigger: true,\n shortcut: 'mod + K',\n highlightQuery: false,\n})\nconst emit = defineEmits<SpotlightEmits>()\nconst attrs = useAttrs()\nconst props = useProps(\n 'Spotlight',\n {\n size: 600,\n yOffset: 80,\n zIndex: getDefaultZIndex('max'),\n overlayProps: { backgroundOpacity: 0.35, blur: 7 },\n transitionProps: { duration: 200, transition: 'pop' },\n },\n rawProps,\n)\nconst uncontrolledQuery = ref('')\nconst currentQuery = computed(() =>\n typeof props.query === 'string' ? props.query : uncontrolledQuery.value,\n)\nconst filteredActions = computed(() =>\n limitActions(props.filter(currentQuery.value, props.actions), props.limit),\n)\nconst rootProps = computed(() => {\n const value = { ...attrs, ...props }\n for (const key of [\n 'searchProps',\n 'actions',\n 'filter',\n 'nothingFound',\n 'highlightQuery',\n 'limit',\n 'scrollAreaProps',\n 'query',\n ])\n delete value[key]\n return value\n})\n\nfunction setQuery(query: string) {\n if (typeof props.query !== 'string') uncontrolledQuery.value = query\n emit('update:query', query)\n emit('query-change', query)\n}\n\nfunction actionProps(action: SpotlightActionData) {\n const value = { ...action }\n delete (value as Partial<SpotlightActionData>).id\n delete (value as Partial<SpotlightActionData>).group\n return value\n}\n\nconst renderNothingFound = () =>\n typeof props.nothingFound === 'function' ? props.nothingFound() : props.nothingFound\n</script>\n\n<template>\n <SpotlightRoot v-bind=\"rootProps\" :query=\"currentQuery\" @query-change=\"setQuery\">\n <SpotlightSearch v-bind=\"props.searchProps\" />\n <SpotlightActionsList v-if=\"filteredActions.length\" v-bind=\"props.scrollAreaProps\">\n <template v-for=\"item in filteredActions\" :key=\"isActionsGroup(item) ? item.group : item.id\">\n <SpotlightActionsGroup v-if=\"isActionsGroup(item)\" :label=\"item.group\">\n <SpotlightAction\n v-for=\"action in item.actions\"\n :key=\"action.id\"\n v-bind=\"actionProps(action)\"\n :highlight-query=\"props.highlightQuery\"\n />\n </SpotlightActionsGroup>\n <SpotlightAction\n v-else\n v-bind=\"actionProps(item)\"\n :highlight-query=\"props.highlightQuery\"\n />\n </template>\n </SpotlightActionsList>\n <SpotlightEmpty v-else-if=\"props.nothingFound\">\n <component :is=\"renderNothingFound\" />\n </SpotlightEmpty>\n </SpotlightRoot>\n</template>\n","import SpotlightActionComponent from './SpotlightAction.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightAction = Object.assign(SpotlightActionComponent, { classes })\nexport type {\n SpotlightActionProps,\n SpotlightActionSlots,\n SpotlightActionStylesNames,\n} from './SpotlightAction.types'\n","import SpotlightActionsGroupComponent from './SpotlightActionsGroup.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightActionsGroup = Object.assign(SpotlightActionsGroupComponent, { classes })\nexport type {\n SpotlightActionsGroupProps,\n SpotlightActionsGroupStylesNames,\n} from './SpotlightActionsGroup.types'\n","import SpotlightActionsListComponent from './SpotlightActionsList.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightActionsList = Object.assign(SpotlightActionsListComponent, { classes })\nexport type {\n SpotlightActionsListProps,\n SpotlightActionsListStylesNames,\n} from './SpotlightActionsList.types'\n","import SpotlightEmptyComponent from './SpotlightEmpty.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightEmpty = Object.assign(SpotlightEmptyComponent, { classes })\nexport type { SpotlightEmptyProps, SpotlightEmptyStylesNames } from './SpotlightEmpty.types'\n","<script setup lang=\"ts\">\nimport { useAttrs } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport type { SpotlightFooterProps } from './SpotlightFooter.types'\n\ndefineOptions({ name: 'SpotlightFooter', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightFooterProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightFooter', null, rawProps)\nconst ctx = useSpotlightContext()\n</script>\n\n<template>\n <Box\n v-bind=\"{\n ...attrs,\n ...ctx.getStyles('footer', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n }\"\n >\n <slot />\n </Box>\n</template>\n","<script setup lang=\"ts\">\nimport { useAttrs } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport type { SpotlightFooterProps } from './SpotlightFooter.types'\n\ndefineOptions({ name: 'SpotlightFooter', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightFooterProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightFooter', null, rawProps)\nconst ctx = useSpotlightContext()\n</script>\n\n<template>\n <Box\n v-bind=\"{\n ...attrs,\n ...ctx.getStyles('footer', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n }\"\n >\n <slot />\n </Box>\n</template>\n","import SpotlightFooterComponent from './SpotlightFooter.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightFooter = Object.assign(SpotlightFooterComponent, { classes })\nexport type { SpotlightFooterProps, SpotlightFooterStylesNames } from './SpotlightFooter.types'\n","import SpotlightRootComponent from './SpotlightRoot.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightRoot = Object.assign(SpotlightRootComponent, { classes })\nexport type {\n SpotlightRootEmits,\n SpotlightRootProps,\n SpotlightRootSlots,\n SpotlightRootStylesNames,\n} from './SpotlightRoot.types'\n","import SpotlightSearchComponent from './SpotlightSearch.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightSearch = Object.assign(SpotlightSearchComponent, { classes })\nexport type {\n SpotlightSearchEmits,\n SpotlightSearchProps,\n SpotlightSearchStylesNames,\n} from './SpotlightSearch.types'\n","import SpotlightComponent from './Spotlight.vue'\nimport { SpotlightAction } from '../SpotlightAction'\nimport { SpotlightActionsGroup } from '../SpotlightActionsGroup'\nimport { SpotlightActionsList } from '../SpotlightActionsList'\nimport { SpotlightEmpty } from '../SpotlightEmpty'\nimport { SpotlightFooter } from '../SpotlightFooter'\nimport { SpotlightRoot } from '../SpotlightRoot'\nimport { SpotlightSearch } from '../SpotlightSearch'\nimport { spotlight } from '../../spotlight.store'\nimport classes from '../../Spotlight.module.css'\n\nexport const Spotlight = Object.assign(SpotlightComponent, {\n classes,\n Search: SpotlightSearch,\n ActionsList: SpotlightActionsList,\n Action: SpotlightAction,\n Empty: SpotlightEmpty,\n Footer: SpotlightFooter,\n ActionsGroup: SpotlightActionsGroup,\n Root: SpotlightRoot,\n open: spotlight.open,\n close: spotlight.close,\n toggle: spotlight.toggle,\n})\n\nexport type {\n SpotlightActionData,\n SpotlightActionGroupData,\n SpotlightActions,\n SpotlightEmits,\n SpotlightFilterFunction,\n SpotlightProps,\n SpotlightStylesNames,\n} from './Spotlight.types'\n"],"mappings":";;;;;;AAGA,SAAS,MAAM,OAAe,KAAa,KAAa;CACtD,OAAO,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC;AAC3C;AAaA,IAAa,8BAAA,GAAA,mBAAA,aACiB;CAC1B,QAAQ;CACR,OAAO;CACP,UAAU;CACV,QAAQ;CACR,OAAO;CACP,mCAAmB,IAAI,IAAI;AAC7B,CAAC;AAEH,IAAa,gBAAgB,UAAyD,MAAM;AAE5F,SAAgB,2BACd,QACA,OACA;CACA,MAAM,QAAQ,MAAM,SAAS;CAC7B,MAAM,SAAS;EAAE,GAAG;EAAO,GAAG,OAAO,MAAM,SAAS,CAAC;CAAE,CAAC;AAC1D;AAEA,SAAgB,oBAAoB,OAAuB;CACzD,kCAAkC;EAAE,QAAQ;EAAM,UAAU;CAAG,IAAI,KAAK;AAC1E;AAEA,SAAgB,qBAAqB,OAAuB;CAC1D,kCAAkC,EAAE,QAAQ,MAAM,IAAI,KAAK;AAC7D;AAEA,SAAgB,sBAAsB,OAAuB;CAC3D,4BACG,WAAW;EAAE,QAAQ,CAAC,MAAM;EAAQ,UAAU,MAAM,SAAS,MAAM,WAAW;CAAG,IAClF,KACF;AACF;AAEA,SAAgB,kBAAkB,OAAe,OAAuB;CACtE,MAAM,UAAU,WAAW;EAAE,GAAG;EAAO,UAAU;CAAM,EAAE;AAC3D;AAEA,SAAgB,UAAU,IAAY,OAAuB;CAC3D,MAAM,UAAU,WAAW;EAAE,GAAG;EAAO,QAAQ;CAAG,EAAE;AACtD;AAEA,SAAS,2BACP,UACA,OAAwC,UAC9B;CACV,MAAM,UAAU,KAAK,cAAiB,QAAQ;CAE9C,IAAI,SACF,OAAO;CAGT,MAAM,WAAW,gBAAgB,aAAa,KAAK,KAAK,WAAW,KAAK;CAExE,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK,GAAG;EAC3C,MAAM,QAAQ,SAAS;EAEvB,IAAI,MAAM,YAAY;GACpB,MAAM,gBAAgB,2BAA8B,UAAU,MAAM,UAAU;GAE9E,IAAI,eACF,OAAO;EAEX;EAEA,MAAM,gBAAgB,2BAA8B,UAAU,KAAK;EAEnE,IAAI,eACF,OAAO;CAEX;CAEA,OAAO;AACT;AAEA,SAAgB,aAAa,OAAe,OAA+B;CACzE,MAAM,QAAQ,MAAM,SAAS;CAC7B,MAAM,cAAc,MAAM,SAAS,2BAA2B,IAAI,MAAM,QAAQ,IAAI;CACpF,MAAM,WAAW,aAAa,cAAiC,iBAAiB;CAChF,MAAM,UAAU,aAAa,iBAAoC,eAAe,KAAK,CAAC;CAEtF,MAAM,gBAAgB,MADJ,UAAU,KAAK,QAAQ,SAAS,IAAI,UAAU,QAAQ,SAAS,IAAI,OAC9C,GAAG,QAAQ,SAAS,CAAC;CAE5D,UAAU,gBAAgB,eAAe;CACzC,QAAQ,gBAAgB,iBAAiB,EAAE,OAAO,UAAU,CAAC;CAC7D,QAAQ,gBAAgB,aAAa,iBAAiB,MAAM;CAC5D,kBAAkB,eAAe,KAAK;CAEtC,OAAO;AACT;AAEA,SAAgB,iBAAiB,OAAuB;CACtD,OAAO,aAAa,MAAM,SAAS,EAAE,WAAW,GAAG,KAAK;AAC1D;AAEA,SAAgB,qBAAqB,OAAuB;CAC1D,OAAO,aAAa,MAAM,SAAS,EAAE,WAAW,GAAG,KAAK;AAC1D;AAEA,SAAgB,sBAAsB,OAAuB;CAC3D,MAAM,QAAQ,MAAM,SAAS;CAK7B,CAJiB,MAAM,SACnB,2BAA8C,IAAI,MAAM,OAAO,iBAAiB,IAChF,OAEM,MAAM;AAClB;AAEA,SAAgB,eAAe,IAAY,OAAuB;CAChE,MAAM,QAAQ,MAAM,SAAS;CAC7B,MAAM,kBAAkB,IAAI,EAAE;CAE9B,aAAa;EACX,MAAM,kBAAkB,OAAO,EAAE;CACnC;AACF;AAEA,SAAgB,SAAS,OAAe,OAAuB;CAC7D,kCAAkC,EAAE,MAAM,IAAI,KAAK;CACnD,QAAQ,QAAQ,EAAE,WAAW;EAC3B,aAAa,GAAG,KAAK;EACrB,4BACG,WAAW,EACV,OAAQ,MAAM,MAAM,KAAK,EAAE,SAAS,KAAK,MAAM,kBAAkB,SAAS,KAAM,MAClF,IACA,KACF;CACF,CAAC;AACH;AAEA,SAAgB,oBACd,EAAE,cACF,OACA;CACA,MAAM,UAAU,WAAW;EACzB,GAAG;EACH,UAAU;EACV,OAAO,aAAa,KAAK,MAAM;EAC/B,OAAO,aAAa,QAAQ,MAAM;CACpC,EAAE;AACJ;AAEA,IAAa,mBAAmB;CAC9B,MAAM;CACN,OAAO;CACP,QAAQ;CACR,aAAa;CACb;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,SAAgB,kBAAkB;CAChC,MAAM,QAAQ,qBAAqB;CAOnC,OAAO,CAAC,OAAO;EALb,YAAY,oBAAoB,KAAK;EACrC,aAAa,qBAAqB,KAAK;EACvC,cAAc,sBAAsB,KAAK;CAG5B,CAAO;AACxB;AAEA,IAAa,CAAC,gBAAgB,aAAa,gBAAgB;AAC3D,IAAa,EAAE,MAAM,eAAe,OAAO,gBAAgB,QAAQ,oBAAoB;;;ACxLvF,SAAgB,eACd,MACkC;CAClC,MAAM,QAAQ;CACd,OAAO,MAAM,UAAU,KAAA,KAAa,MAAM,QAAQ,MAAM,OAAO;AACjE;;;ACEA,IAAM,sBAAsB,OAAO,kBAAkB;AAErD,SAAgB,wBAAwB,OAA8B;CACpE,CAAA,GAAA,IAAA,SAAQ,qBAAqB,KAAK;AACpC;AAEA,SAAgB,sBAAsB;CACpC,MAAM,OAAA,GAAA,IAAA,QAAa,qBAAqB,IAAI;CAE5C,IAAI,QAAQ,MACV,MAAM,IAAI,MAAM,2CAA2C;CAG7D,OAAO;AACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EClBA,MAAM,WAAW;EAMjB,MAAM,SAAA,GAAA,IAAA,UAAiB;EACvB,MAAM,SAAA,GAAA,IAAA,UAAiB;EACvB,MAAM,SAAA,GAAA,kBAAA,UAAiB,mBAAmB,MAAM,QAAQ;EACxD,MAAM,MAAM,oBAAoB;EAChC,MAAM,aAAA,GAAA,IAAA,iBAA4B;GAAE,YAAY,MAAM;GAAY,QAAQ,MAAM;EAAO,EAAE;EACzF,MAAM,eAAA,GAAA,IAAA,iBAAA,GAAA,kBAAA,aAAyC,MAAM,aAAa,MAAM,WAAW,CAAC;EACpF,MAAM,gBAAA,GAAA,IAAA,iBAAA,GAAA,kBAAA,aAA0C,MAAM,cAAc,MAAM,YAAY,CAAC;EACvF,MAAM,0BAA0B,YAAY;EAC5C,MAAM,2BAA2B,aAAa;EAC9C,MAAM,kBAAA,GAAA,IAAA,gBAAgC;GACpC,MAAM,QAAQ,EAAE,GAAG,MAAM;GACzB,OAAO,MAAM;GACb,OAAO,MAAM;GACb,OAAO;EACT,CAAC;EAED,SAAS,UAAU,OAAmB;GACpC,MAAM,eAAe;GACpB,MAAO,cAA4D,KAAK;EAC3E;EAEA,SAAS,MAAM,OAAmB;GAC/B,MAAO,UAAwD,KAAK;GACrE,IAAI,MAAM,2BAA2B,IAAI,sBACvC,iBAAiB,MAAM,IAAI,KAAK;EAEpC;;oEA8CmB,kBAAA,cAAA,IAAA,GAAA,IAAA,YAAA;OAzCI,eAAA;sBAAyB,GAAA,EAAI,UAAS,UAAA;KAAA,YAAA,GAAA,IAAA,OAAwB,KAAA,EAAM;KAAK,QAAA,GAAA,IAAA,OAAS,KAAA,EAAM;KAAK,GAAK,UAAA;IAAS,CAAA;;IAI9H,eAAA;IACC,UAAU;IACV,aAAW;IACX,SAAO;;oCAEsB,CAAlBA,KAAAA,OAAO,WAAA,GAAA,IAAA,YAAW,KAAA,QAAA,WAAA,EAAA,KAAA,EAAA,CAAA,MAAA,GAAA,IAAA,WAAA,IAAA,GAAA,IAAA,oBA+BnB,IAAA,UAAA,EAAA,KAAA,EAAA,GAAA;oBA5BD,kBAAA,OAAA,EAAQ,YAAA,KAAW,MAAA,GAAA,IAAA,WAAA,IAAA,GAAA,IAAA,cAAA,GAAA,IAAA,OAMrB,kBAAA,GAAA,IAAA,GAAA,IAAA,YAAA;;MALJ,WAAU;MACT,KAAG;OAAA,UAAA;OAAA,SAAA,GAAA,IAAA,OAA8B,KAAA,EAAM;MAAc;uBAC9C,GAAA,EAAI,UAAS,iBAAkB,UAAA,KAAS,CAAA,GAAA;sCAEX,GAAA,GAAA,IAAA,WAAA,IAAA,GAAA,IAAA,cAAA,GAAA,IAAA,yBAArB,iBAAiB,CAAA,EAAA,CAAA;;;iCAc5B,SAAA,GAAA,IAAA,iBAAA,GAAA,IAAA,qBAAA,GAAA,IAAA,OAZO,GAAA,EAAI,UAAS,cAAe,UAAA,KAAS,CAAA,CAAA,GAAA,EAAA,GAAA,IAAA,OAEzC,KAAA,EAAM,kBAAc,QAAA,GAAA,IAAA,OAAW,KAAA,EAAM,UAAK,aAAA,GAAA,IAAA,WAAA,IAAA,GAAA,IAAA,cAAA,GAAA,IAAA,OAOtC,kBAAA,SAAA,IAAA,GAAA,IAAA,YAAA;;MANV,WAAU;MACT,YAAA,GAAA,IAAA,OAAW,GAAA,EAAI;MACf,QAAA,GAAA,IAAA,OAAO,KAAA,EAAM;uBACN,GAAA,EAAI,UAAS,eAAgB,UAAA,KAAS,CAAA,GAAA;sCAE7B,EAAA,GAAA,IAAA,kBAAA,GAAA,IAAA,kBAAA,GAAA,IAAA,OAAd,KAAA,EAAM,KAAK,GAAA,CAAA,CAAA,CAAA;;0FAEsE,SAAA,GAAA,IAAA,iBAAA,GAAA,IAAA,YAAA,EAAA,KAAA,EAAA,IAAA,GAAA,IAAA,OAAjE,GAAA,EAAI,UAAS,eAAgB,UAAA,KAAS,CAAA,CAAA,IAAA,GAAA,IAAA,kBAAA,GAAA,IAAA,OAAM,KAAA,EAAM,KAAK,GAAA,EAAA,KAAA,GAAA,IAAA,oBACe,SAAA,GAAA,IAAA,iBAAA,GAAA,IAAA,qBAAA,GAAA,IAAA,OAA7E,GAAA,EAAI,UAAS,qBAAsB,UAAA,KAAS,CAAA,CAAA,IAAA,GAAA,IAAA,kBAAA,GAAA,IAAA,OAAM,KAAA,EAAM,WAAW,GAAA,EAAA,CAAA,GAAA,EAAA;oBAG3E,kBAAA,OAAA,EAAQ,aAAA,KAAY,MAAA,GAAA,IAAA,WAAA,IAAA,GAAA,IAAA,cAAA,GAAA,IAAA,OAMtB,kBAAA,GAAA,IAAA,GAAA,IAAA,YAAA;;MALJ,WAAU;MACT,KAAG;OAAA,UAAA;OAAA,SAAA,GAAA,IAAA,OAA+B,KAAA,EAAM;MAAc;uBAC/C,GAAA,EAAI,UAAS,iBAAkB,UAAA,KAAS,CAAA,GAAA;sCAEV,GAAA,GAAA,IAAA,WAAA,IAAA,GAAA,IAAA,cAAA,GAAA,IAAA,yBAAtB,kBAAkB,CAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;EE5E1C,MAAM,WAAW;EACjB,MAAM,SAAA,GAAA,IAAA,UAAiB;EACvB,MAAM,SAAA,GAAA,kBAAA,UAAiB,yBAAyB,MAAM,QAAQ;EAC9D,MAAM,MAAM,oBAAoB;EAChC,MAAM,eAAA,GAAA,IAAA,gBACJ,IAAI,UAAU,gBAAgB;GAC5B,WAAW,MAAM;GACjB,OAAO,MAAM;GACb,YAAY,MAAM;GAClB,QAAQ,MAAM;EAChB,CAAC,CACH;EACA,MAAM,iBAAA,GAAA,IAAA,iBAAgC,EACpC,qBAAqB,IAAI,MAAM,OAAO,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAK,EAAE,GACpF,EAAE;;oEASM,kBAAA,GAAA,IAAA,GAAA,IAAA,YAAA;IAAA,IAAA,GAAA,IAAA,OAJS,KAAA;IAAK,GAAK,YAAA;GAAW,GAAA,EACjC,OAAK;IAAG,YAAA,MAAY;mBAAO,KAAA,EAAM;IAAO,cAAA;GAAa,EAAA,CAAA,GAAA;oCAE9C,EAAA,GAAA,IAAA,YAAA,KAAA,QAAA,SAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;EEpBZ,MAAM,WAAW;EACjB,MAAM,SAAA,GAAA,IAAA,UAAiB;EACvB,MAAM,SAAA,GAAA,kBAAA,UAAiB,wBAAwB,MAAM,QAAQ;EAC7D,MAAM,MAAM,oBAAoB;EAChC,MAAM,eAAA,GAAA,mBAAA,OAAoB;EAC1B,MAAM,SAAS,MAAM,MAAM,WAAW,YAAY,MAAM,QAAQ,MAAM,EAAE;EACxE,CAAA,GAAA,IAAA,iBAAgB,iBAAiB,UAAU,QAAQ,IAAI,KAAK,CAAC;EAC7D,CAAA,GAAA,IAAA,uBAAsB,iBAAiB,UAAU,IAAI,IAAI,KAAK,CAAC;;oEAoBxC,kBAAA,kBAAA,IAAA,GAAA,IAAA,YAAA;sBAfA,KAAA;sBAAgB,GAAA,EAAI,UAAS,eAAA;+BAAqC,KAAA,EAAM;2BAAsB,KAAA,EAAM;gCAA2B,KAAA,EAAM;4BAA4B,KAAA,EAAM;;;IAS1L,MAAK;IACL,kBAAe;IACf,qBAAkB;IACjB,KAAA,GAAA,IAAA,OAAI,MAAA;;oCAEG,EAAA,GAAA,IAAA,YAAA,KAAA,QAAA,SAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;EE5BZ,MAAM,WAAW;EACjB,MAAM,SAAA,GAAA,IAAA,UAAiB;EACvB,MAAM,SAAA,GAAA,kBAAA,UAAiB,kBAAkB,MAAM,QAAQ;EACvD,MAAM,MAAM,oBAAoB;;oEAgBxB,kBAAA,GAAA,IAAA,GAAA,IAAA,iBAAA,GAAA,IAAA,oBAAA;sBAXe,KAAA;sBAAgB,GAAA,EAAI,UAAS,SAAA;+BAA+B,KAAA,EAAM;2BAAsB,KAAA,EAAM;gCAA2B,KAAA,EAAM;4BAA4B,KAAA,EAAM;;;oCAU5K,EAAA,GAAA,IAAA,YAAA,KAAA,QAAA,SAAA,CAAA,CAAA;;;;;;;;AErBZ,SAAgB,WACd,SACA,OACc;CACd,IAAI,CAAC,SACH,OAAO,CAAC;CAGV,MAAM,aAAa,iBAAiB,KAAK,KAAK;CAE9C,IAAI,MAAM,QAAQ,OAAO,GACvB,OAAO,QAAQ,KAAK,WAAW,CAAC,QAAQ,IAAI,CAAC;CAG/C,OAAO,CAAC,CAAC,SAAS,IAAI,CAAC;AACzB;;;ACnBA,SAAgB,gBAAgB,GAAG,OAAc;CAC/C,OAAO,MAAM,QAA6B,KAAK,SAAS;EACtD,IAAI,CAAC,QAAQ,OAAO,SAAS,YAAY,MAAM,QAAQ,IAAI,GACzD,OAAO;EAGT,OAAO,QAAQ,IAAI,EAAE,SAAS,CAAC,KAAK,WAAW;GAC7C,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,MAAM,KAAK,IAAI;EAC5C,CAAC;EAED,OAAO;CACT,GAAG,CAAC,CAAC;AACP;AAEA,SAAgB,YAAY,GAAG,OAAc;CAC3C,OAAO,MAAM,QAA6B,KAAK,SAAS;EACtD,IAAI,CAAC,QAAQ,OAAO,SAAS,YAAY,MAAM,QAAQ,IAAI,GACzD,OAAO;EAGT,OAAO,QAAQ,IAAI,EAAE,SAAS,CAAC,KAAK,WAAW;GAC7C,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,MAAM,KAAK,IAAI;EAC5C,CAAC;EAED,OAAO;CACT,GAAG,CAAC,CAAC;AACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EEVA,MAAM,WAAW;EAUjB,MAAM,OAAO;EAEb,MAAM,SAAA,GAAA,IAAA,UAAiB;EACvB,MAAM,SAAA,GAAA,kBAAA,UACJ,iBACA;GACE,MAAM;GACN,SAAS;GACT,SAAA,GAAA,kBAAA,kBAAyB,KAAK;GAC9B,cAAc;IAAE,mBAAmB;IAAM,MAAM;GAAE;GACjD,iBAAiB;IAAE,UAAU;IAAK,YAAY;GAAM;EACtD,GACA,QACF;EACA,MAAM,QAAQ,aAAa,MAAM,KAAK;EACtC,MAAM,kBAAA,GAAA,IAAA,KAAqB,MAAM,MAAM,MAAM;EAC7C,MAAM,gBAAA,GAAA,IAAA,gBACJ,OAAO,MAAM,UAAU,WAAW,MAAM,QAAQ,MAAM,MAAM,KAC9D;EAEA,SAAS,SAAS,OAAe;GAC/B,KAAK,gBAAgB,KAAK;GAC1B,KAAK,gBAAgB,KAAK;GAC1B,iBAAiB,SAAS,OAAO,MAAM,KAAK;EAC9C;EAEA,MAAM,aAAA,GAAA,kBAAA,WAAsB;GAC1B,MAAM;GACN,SAAA;GACA;GACA;GACA,YAAY,MAAM;GAClB,QAAQ,MAAM;GACd,UAAU,MAAM;GAChB,MAAM,MAAM;EACd,CAAC;EAED,wBAAwB;GACtB,IAAI,QAAQ;IACV,OAAO,aAAa;GACtB;GACA;GACA;GACA,OAAO,MAAM;GACb,IAAI,uBAAuB;IACzB,OAAO,MAAM;GACf;EACF,CAAC;EAED,CAAA,GAAA,mBAAA,kBACQ,WAAW,MAAM,UAAU,MAAM,KAAK,SACtC,MAAM,oBACN,MAAM,wBACd;EAEA,CAAA,GAAA,IAAA,aACQ,MAAM,MAAM,SACjB,WAAW;GACV,IAAI,WAAW,eAAe,OAAO;GACrC,IAAI,QAAQ,KAAK,gBAAgB;QAC5B,KAAK,iBAAiB;GAC3B,eAAe,QAAQ;EACzB,CACF;EAEA,MAAM,cAAA,GAAA,IAAA,gBACJ,UAAU,QAAQ;GAAE,WAAW,MAAM;GAAO,OAAO,MAAM;EAAa,CAAC,CACzE;EACA,MAAM,cAAA,GAAA,IAAA,gBAA4B;GAChC,MAAM,QAAQ;IAAE,GAAG;IAAO,GAAG;GAAM;GACnC,KAAK,MAAM,OAAO;IAChB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF,GACE,OAAO,MAAM;GACf,OAAO;EACT,CAAC;EAED,SAAS,QAAQ;GACf,iBAAiB,MAAM,MAAM,KAAK;EACpC;EAEA,SAAS,oBAAoB;GAC3B,IAAI,MAAM,mBAAmB,SAAS,EAAE;GACxC,iBAAiB,oBAAoB,EAAE,YAAY,MAAM,kBAAkB,GAAG,MAAM,KAAK;GACzF,MAAM,iBAAiB,WAAW;GAClC,KAAK,qBAAqB;EAC5B;;0BAKW,KAAA,EAAM,aAAA,GAAA,IAAA,WAAA,IAAA,GAAA,IAAA,cAAA,GAAA,IAAA,OAsBP,kBAAA,KAAA,IAAA,GAAA,IAAA,YAAA,EAAA,KAAA,EAAA,GArBE,WAAA,OAAU;IACjB,qBAAmB;IACnB,SAAA,GAAA,IAAA,OAAQ,KAAA,EAAM,WAAA,GAAA,IAAA,OAAU,KAAA,EAAM;IAC9B,SAAS;IACT,OAAO,WAAA,MAAW;IAClB,OAAO,WAAA,MAAW;IAClB,gBAAA,GAAA,IAAA,OAAoB,eAAA,EAAe;KAAA,OAAA,GAAA,IAAA,OAAS,wBAAA,EAAQ;KAAI,UAAA,GAAA,IAAA,OAAW,wBAAA,EAAQ;IAAO,IAAA,GAAA,IAAA,OAAI,KAAA,EAAM,UAAU;IAGtG,SAAA,GAAA,IAAA,OAAQ,WAAA,GAAA,GAAA,IAAA,OAAY,KAAA,EAAM,MAAM;IAChC,OAAA,GAAA,IAAA,OAAa,WAAA,EAAA,EAAA,MAAA,EAAA,2BAAA,GAAA,IAAA,OAAyD,KAAA,EAAM,cAAA,GAAA,IAAA,OAAa,kBAAA,GAAA,GAAA,GAAA,IAAA,OAAI,KAAA,EAAM,SAAS,IAAI,KAAA,EAAS,EAAA,IAAA,GAAA,IAAA,OAAc,KAAA,EAAM,IAAA;IAM7I,oBAAA,GAAA,IAAA,OAAiB,KAAA,EAAM,cAAc,KAAA;IACrC,SAAO;IACP,qBAAqB;;oCAEd,EAAA,GAAA,IAAA,YAAA,KAAA,QAAA,SAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EEjJZ,MAAM,WAAW;EACjB,MAAM,OAAO;EACb,MAAM,SAAA,GAAA,IAAA,UAAiB;EACvB,MAAM,SAAA,GAAA,kBAAA,UAAiB,mBAAmB,MAAM,QAAQ;EACxD,MAAM,MAAM,oBAAoB;EAChC,MAAM,eAAA,GAAA,IAAA,KAAkB,KAAK;EAC7B,MAAM,eAAA,GAAA,IAAA,gBAA6B,IAAI,UAAU,QAAQ,CAAC;EAC1D,MAAM,kBAAA,GAAA,IAAA,gBAAgC;GACpC,MAAM,QAAQ,EAAE,GAAG,MAAM;GACzB,OAAO,MAAM;GACb,OAAO,MAAM;GACb,OAAO,MAAM;GACb,OAAO,MAAM;GACb,OAAO;EACT,CAAC;EAED,SAAS,MAAM,OAAc;GAC3B,MAAM,QAAS,MAAM,cAAmC;GACxD,IAAI,SAAS,KAAK;GAClB,KAAK,qBAAqB,KAAK;GAC/B,KAAK,UAAU,KAAK;EACtB;EAEA,SAAS,QAAQ,OAAsB;GACrC,KAAK,WAAW,KAAK;GACrB,IAAI,YAAY,OAAO;GACvB,IAAI,MAAM,SAAS,aAAa;IAC9B,MAAM,eAAe;IACrB,iBAAiB,iBAAiB,IAAI,KAAK;GAC7C;GACA,IAAI,MAAM,SAAS,WAAW;IAC5B,MAAM,eAAe;IACrB,iBAAiB,qBAAqB,IAAI,KAAK;GACjD;GACA,IAAI,MAAM,SAAS,WAAW,MAAM,SAAS,eAAe;IAC1D,MAAM,eAAe;IACrB,iBAAiB,sBAAsB,IAAI,KAAK;GAClD;EACF;;oEAeI,kBAAA,KAAA,IAAA,GAAA,IAAA,YAVQ,eAUR,OAVsB;IACrB,OAAA,GAAA,IAAA,OAAM,KAAA,EAAM;IACZ,QAAA,GAAA,IAAA,OAAO,KAAA,EAAM,eAAA,GAAA,IAAA,OAAc,GAAA,EAAI;IAC/B,gBAAA,GAAA,IAAA,OAAa,eAAA,EAAe,EAAA,OAAU,YAAA,MAAY,MAAK,IAAA,GAAA,IAAA,OAAI,KAAA,EAAM,UAAU;IAC3E,SAAA,GAAA,IAAA,OAAQ,WAAA,EAAW,EAAA,OAAU,YAAA,MAAY,MAAK,IAAA,GAAA,IAAA,OAAI,KAAA,EAAM,MAAM;IAC9D,OAAA,GAAA,IAAA,OAAM,KAAA,EAAM;IACZ,SAAO;IACP,WAAS;IACT,oBAAgB,OAAA,OAAA,OAAA,MAAA,WAAE,YAAA,QAAW;IAC7B,kBAAc,OAAA,OAAA,OAAA,MAAA,WAAE,YAAA,QAAW;;;;;;;;;;;;;AEtDhC,SAAS,YAAY,UAAyC;CAC5D,IAAI,MAAM,QAAQ,QAAQ,GACxB,OAAO,SACJ,KAAK,YAAY,QAAQ,KAAK,CAAC,EAC/B,KAAK,GAAG,EACR,YAAY,EACZ,KAAK;CAGV,IAAI,OAAO,aAAa,UACtB,OAAO,SAAS,YAAY,EAAE,KAAK;CAGrC,OAAO;AACT;AAEA,SAAS,eAAe,MAA0B;CAChD,OAAO,KAAK,QAA+B,KAAK,SAAS;EACvD,IAAI,aAAa,MACf,OAAO,CACL,GAAG,KACH,GAAG,KAAK,QAAQ,KAAK,YAAiC;GAAE,GAAG;GAAQ,OAAO,KAAK;EAAM,EAAE,CACzF;EAGF,OAAO,CAAC,GAAG,KAAK,IAAI;CACtB,GAAG,CAAC,CAAC;AACP;AAEA,SAAS,oBAAoB,MAA6B;CACxD,MAAM,SAA8E,CAAC;CACrF,MAAM,SAA6B,CAAC;CAEpC,KAAK,SAAS,WAAW;EACvB,IAAI,OAAO,OAAO;GAChB,IAAI,CAAC,OAAO,OAAO,QACjB,OAAO,OAAO,SAAS;IAAE,QAAQ;IAAO,MAAM;KAAE,OAAO,OAAO;KAAO,SAAS,CAAC;IAAE;GAAE;GAGrF,OAAO,OAAO,OAAO,KAAK,QAAQ,KAAK,MAAM;GAE7C,IAAI,CAAC,OAAO,OAAO,OAAO,QAAQ;IAChC,OAAO,OAAO,OAAO,SAAS;IAC9B,OAAO,KAAK,OAAO,OAAO,OAAO,IAAI;GACvC;EACF,OACE,OAAO,KAAK,MAAM;CAEtB,CAAC;CAED,OAAO;AACT;AAEA,IAAa,0BAAmD,QAAQ,SAAS;CAC/E,MAAM,QAAQ,OAAO,KAAK,EAAE,YAAY;CACxC,MAAM,iBAA0C,CAAC,CAAC,GAAG,CAAC,CAAC;CAGvD,eAFmC,IAEnC,EAAY,SAAS,SAAS;EAC5B,IAAI,KAAK,OAAO,YAAY,EAAE,SAAS,KAAK,GAC1C,eAAe,GAAG,KAAK,IAAI;OACtB,IACL,KAAK,aAAa,YAAY,EAAE,SAAS,KAAK,KAC9C,YAAY,KAAK,QAAQ,EAAE,SAAS,KAAK,GAEzC,eAAe,GAAG,KAAK,IAAI;CAE/B,CAAC;CAED,OAAO,oBAAoB,eAAe,KAAK,CAAC;AAClD;;;AC1EA,SAAgB,aAAa,SAA6B,OAAe;CACvE,IAAI,CAAC,MAAM,QAAQ,OAAO,GACxB,OAAO,CAAC;CAGV,IAAI,QAAQ;CAEZ,OAAO,QAAQ,QAA4B,KAAK,SAAS;EACvD,IAAI,SAAS,OACX,OAAO;EAGT,IAAI,eAAe,IAAI,GAAG;GACxB,MAAM,eAAe,aAAa,KAAK,SAAS,QAAQ,KAAK;GAC7D,IAAI,KAAK;IACP,OAAO,KAAK;IACZ,SAAS;GACX,CAAC;GACD,SAAS,aAAa;EACxB,OAAO;GACL,IAAI,KAAK,IAAI;GACb,SAAS;EACX;EAEA,OAAO;CACT,GAAG,CAAC,CAAC;AACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECbA,MAAM,WAAW;EASjB,MAAM,OAAO;EACb,MAAM,SAAA,GAAA,IAAA,UAAiB;EACvB,MAAM,SAAA,GAAA,kBAAA,UACJ,aACA;GACE,MAAM;GACN,SAAS;GACT,SAAA,GAAA,kBAAA,kBAAyB,KAAK;GAC9B,cAAc;IAAE,mBAAmB;IAAM,MAAM;GAAE;GACjD,iBAAiB;IAAE,UAAU;IAAK,YAAY;GAAM;EACtD,GACA,QACF;EACA,MAAM,qBAAA,GAAA,IAAA,KAAwB,EAAE;EAChC,MAAM,gBAAA,GAAA,IAAA,gBACJ,OAAO,MAAM,UAAU,WAAW,MAAM,QAAQ,kBAAkB,KACpE;EACA,MAAM,mBAAA,GAAA,IAAA,gBACJ,aAAa,MAAM,OAAO,aAAa,OAAO,MAAM,OAAO,GAAG,MAAM,KAAK,CAC3E;EACA,MAAM,aAAA,GAAA,IAAA,gBAA2B;GAC/B,MAAM,QAAQ;IAAE,GAAG;IAAO,GAAG;GAAM;GACnC,KAAK,MAAM,OAAO;IAChB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF,GACE,OAAO,MAAM;GACf,OAAO;EACT,CAAC;EAED,SAAS,SAAS,OAAe;GAC/B,IAAI,OAAO,MAAM,UAAU,UAAU,kBAAkB,QAAQ;GAC/D,KAAK,gBAAgB,KAAK;GAC1B,KAAK,gBAAgB,KAAK;EAC5B;EAEA,SAAS,YAAY,QAA6B;GAChD,MAAM,QAAQ,EAAE,GAAG,OAAO;GAC1B,OAAQ,MAAuC;GAC/C,OAAQ,MAAuC;GAC/C,OAAO;EACT;EAEA,MAAM,2BACJ,OAAO,MAAM,iBAAiB,aAAa,MAAM,aAAa,IAAI,MAAM;;qDA0BxD,wBAAA,GAAA,IAAA,YAtBO,UAsBP,OAtBgB;IAAG,OAAO,aAAA;IAAe,eAAc;;oCACvB,EAAA,GAAA,IAAA,aAAA,0BAAA,GAAA,IAAA,iBAAA,GAAA,IAAA,qBAAA,GAAA,IAAA,OAArB,KAAA,EAAM,WAAW,CAAA,GAAA,MAAA,EAAA,GACd,gBAAA,MAAgB,WAAA,GAAA,IAAA,WAAA,IAAA,GAAA,IAAA,aAgBrB,+BAAA,GAAA,IAAA,iBAAA,GAAA,IAAA,YAAA,EAAA,KAAA,EAAA,IAAA,GAAA,IAAA,OAhBqC,KAAA,EAAM,eAAe,CAAA,GAAA;qCACtC,GAAA,GAAA,IAAA,WAAA,IAAA,IAAA,GAAA,IAAA,oBAc9B,IAAA,UAAA,OAAA,GAAA,IAAA,YAdc,gBAAA,QAAR,SAAI;mGAA2B,cAAA,EAAe,IAAI,IAAI,KAAK,QAAQ,KAAK,GAAA,GAAA,EAAA,GAAA,IAAA,OAC1D,cAAA,EAAe,IAAI,MAAA,GAAA,IAAA,WAAA,IAAA,GAAA,IAAA,aAOxB,+BAAA;;OAP4B,OAAO,KAAK;;uCAE9B,GAAA,GAAA,IAAA,WAAA,IAAA,IAAA,GAAA,IAAA,oBAI9B,IAAA,UAAA,OAAA,GAAA,IAAA,YAJiB,KAAK,UAAf,WAAM;0DAIb,0BAAA,GAAA,IAAA,YAAA,EAHC,KAAK,OAAO,GAAA,GAAA,EAAA,SAAA,KAAA,GACL,YAAY,MAAM,GAAA,EACzB,oBAAA,GAAA,IAAA,OAAiB,KAAA,EAAM,eAAA,CAAA,GAAA,MAAA,IAAA,CAAA,iBAAA,CAAA;;;yEAO1B,0BAAA,GAAA,IAAA,YAAA;;;SAFQ,YAAY,IAAI,GAAA,EACvB,oBAAA,GAAA,IAAA,OAAiB,KAAA,EAAM,eAAA,CAAA,GAAA,MAAA,IAAA,CAAA,iBAAA,CAAA,EAAA,GAAA,EAAA;;;6BAIH,KAAA,EAAM,iBAAA,GAAA,IAAA,WAAA,IAAA,GAAA,IAAA,aAEhB,wBAAA,EAAA,KAAA,EAAA,GAAA;qCADuB,GAAA,GAAA,IAAA,WAAA,IAAA,GAAA,IAAA,cAAA,GAAA,IAAA,yBAAtB,kBAAkB,CAAA,EAAA,CAAA;;;;;;;;;;AEjGxC,IAAa,kBAAkB,OAAO,OAAO,yBAA0B,EAAE,SAAA,yBAAQ,CAAC;;;ACAlF,IAAa,wBAAwB,OAAO,OAAO,+BAAgC,EAAE,SAAA,yBAAQ,CAAC;;;ACA9F,IAAa,uBAAuB,OAAO,OAAO,8BAA+B,EAAE,SAAA,yBAAQ,CAAC;;;ACA5F,IAAa,iBAAiB,OAAO,OAAO,wBAAyB,EAAE,SAAA,yBAAQ,CAAC;;;AGAhF,IAAa,kBAAkB,OAAO,OAAO;;;;;;;;;;EFK7C,MAAM,WAAW;EACjB,MAAM,SAAA,GAAA,IAAA,UAAiB;EACvB,MAAM,SAAA,GAAA,kBAAA,UAAiB,mBAAmB,MAAM,QAAQ;EACxD,MAAM,MAAM,oBAAoB;;oEAgBxB,kBAAA,GAAA,IAAA,GAAA,IAAA,iBAAA,GAAA,IAAA,oBAAA;sBAXe,KAAA;sBAAgB,GAAA,EAAI,UAAS,UAAA;+BAAgC,KAAA,EAAM;2BAAsB,KAAA,EAAM;gCAA2B,KAAA,EAAM;4BAA4B,KAAA,EAAM;;;oCAU7K,EAAA,GAAA,IAAA,YAAA,KAAA,QAAA,SAAA,CAAA,CAAA;;;;;CEvBiC,GAA0B,EAAE,SAAA,yBAAQ,CAAC;;;ACAlF,IAAa,gBAAgB,OAAO,OAAO,uBAAwB,EAAE,SAAA,yBAAQ,CAAC;;;ACA9E,IAAa,kBAAkB,OAAO,OAAO,yBAA0B,EAAE,SAAA,yBAAQ,CAAC;;;ACSlF,IAAa,YAAY,OAAO,OAAO,mBAAoB;CACzD,SAAA;CACA,QAAQ;CACR,aAAa;CACb,QAAQ;CACR,OAAO;CACP,QAAQ;CACR,cAAc;CACd,MAAM;CACN,MAAM,UAAU;CAChB,OAAO,UAAU;CACjB,QAAQ,UAAU;AACpB,CAAC"}
package/esm/index.mjs CHANGED
@@ -159,8 +159,24 @@ var SpotlightAction_default = /* @__PURE__ */ defineComponent({
159
159
  props: {
160
160
  label: {},
161
161
  description: {},
162
- leftSection: {},
163
- rightSection: {},
162
+ leftSection: { type: [
163
+ Object,
164
+ String,
165
+ Number,
166
+ Boolean,
167
+ null,
168
+ Array,
169
+ Function
170
+ ] },
171
+ rightSection: { type: [
172
+ Object,
173
+ String,
174
+ Number,
175
+ Boolean,
176
+ null,
177
+ Array,
178
+ Function
179
+ ] },
164
180
  dimmedSections: {
165
181
  type: Boolean,
166
182
  default: true
@@ -489,8 +505,7 @@ var SpotlightRoot_default = /* @__PURE__ */ defineComponent({
489
505
  name: "Spotlight",
490
506
  classes: Spotlight_module_default,
491
507
  props,
492
- className: attrs.class,
493
- style: attrs.style,
508
+ attrs,
494
509
  classNames: props.classNames,
495
510
  styles: props.styles,
496
511
  unstyled: props.unstyled,
package/esm/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["$slots"],"sources":["../src/spotlight.store.ts","../src/is-actions-group.ts","../src/Spotlight.context.ts","../src/components/SpotlightAction/SpotlightAction.vue","../src/components/SpotlightAction/SpotlightAction.vue","../src/components/SpotlightActionsGroup/SpotlightActionsGroup.vue","../src/components/SpotlightActionsGroup/SpotlightActionsGroup.vue","../src/components/SpotlightActionsList/SpotlightActionsList.vue","../src/components/SpotlightActionsList/SpotlightActionsList.vue","../src/components/SpotlightEmpty/SpotlightEmpty.vue","../src/components/SpotlightEmpty/SpotlightEmpty.vue","../src/get-hotkeys.ts","../src/style-api.ts","../src/Spotlight.module.css","../src/components/SpotlightRoot/SpotlightRoot.vue","../src/components/SpotlightRoot/SpotlightRoot.vue","../src/components/SpotlightSearch/SpotlightSearch.vue","../src/components/SpotlightSearch/SpotlightSearch.vue","../src/default-spotlight-filter.ts","../src/limit-actions.ts","../src/components/Spotlight/Spotlight.vue","../src/components/Spotlight/Spotlight.vue","../src/components/SpotlightAction/index.ts","../src/components/SpotlightActionsGroup/index.ts","../src/components/SpotlightActionsList/index.ts","../src/components/SpotlightEmpty/index.ts","../src/components/SpotlightFooter/SpotlightFooter.vue","../src/components/SpotlightFooter/SpotlightFooter.vue","../src/components/SpotlightFooter/index.ts","../src/components/SpotlightRoot/index.ts","../src/components/SpotlightSearch/index.ts","../src/components/Spotlight/index.ts"],"sourcesContent":["import { type Ref } from 'vue'\nimport { createStore, type MantineStore } from '@mantine-vue/store'\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.min(max, Math.max(min, value))\n}\n\nexport interface SpotlightState {\n opened: boolean\n selected: number\n listId: string\n query: string\n empty: boolean\n registeredActions: Set<string>\n}\n\nexport type SpotlightStore = MantineStore<SpotlightState>\n\nexport const createSpotlightStore = () =>\n createStore<SpotlightState>({\n opened: false,\n empty: false,\n selected: -1,\n listId: '',\n query: '',\n registeredActions: new Set(),\n })\n\nexport const useSpotlight = (store: SpotlightStore): Readonly<Ref<SpotlightState>> => store.value\n\nexport function updateSpotlightStateAction(\n update: (state: SpotlightState) => Partial<SpotlightState>,\n store: SpotlightStore,\n) {\n const state = store.getState()\n store.setState({ ...state, ...update(store.getState()) })\n}\n\nexport function openSpotlightAction(store: SpotlightStore) {\n updateSpotlightStateAction(() => ({ opened: true, selected: -1 }), store)\n}\n\nexport function closeSpotlightAction(store: SpotlightStore) {\n updateSpotlightStateAction(() => ({ opened: false }), store)\n}\n\nexport function toggleSpotlightAction(store: SpotlightStore) {\n updateSpotlightStateAction(\n (state) => ({ opened: !state.opened, selected: state.opened ? state.selected : -1 }),\n store,\n )\n}\n\nexport function setSelectedAction(index: number, store: SpotlightStore) {\n store.setState((state) => ({ ...state, selected: index }))\n}\n\nexport function setListId(id: string, store: SpotlightStore) {\n store.setState((state) => ({ ...state, listId: id }))\n}\n\nfunction findElementByQuerySelector<T extends HTMLElement>(\n selector: string,\n root: Document | Element | ShadowRoot = document,\n): T | null {\n const element = root.querySelector<T>(selector)\n\n if (element) {\n return element\n }\n\n const children = root instanceof ShadowRoot ? root.host.children : root.children\n\n for (let i = 0; i < children.length; i += 1) {\n const child = children[i]\n\n if (child.shadowRoot) {\n const shadowElement = findElementByQuerySelector<T>(selector, child.shadowRoot)\n\n if (shadowElement) {\n return shadowElement\n }\n }\n\n const nestedElement = findElementByQuerySelector<T>(selector, child)\n\n if (nestedElement) {\n return nestedElement\n }\n }\n\n return null\n}\n\nexport function selectAction(index: number, store: SpotlightStore): number {\n const state = store.getState()\n const actionsList = state.listId ? findElementByQuerySelector(`#${state.listId}`) : null\n const selected = actionsList?.querySelector<HTMLButtonElement>('[data-selected]')\n const actions = actionsList?.querySelectorAll<HTMLButtonElement>('[data-action]') ?? []\n const nextIndex = index === -1 ? actions.length - 1 : index === actions.length ? 0 : index\n const selectedIndex = clamp(nextIndex, 0, actions.length - 1)\n\n selected?.removeAttribute('data-selected')\n actions[selectedIndex]?.scrollIntoView?.({ block: 'nearest' })\n actions[selectedIndex]?.setAttribute('data-selected', 'true')\n setSelectedAction(selectedIndex, store)\n\n return selectedIndex\n}\n\nexport function selectNextAction(store: SpotlightStore) {\n return selectAction(store.getState().selected + 1, store)\n}\n\nexport function selectPreviousAction(store: SpotlightStore) {\n return selectAction(store.getState().selected - 1, store)\n}\n\nexport function triggerSelectedAction(store: SpotlightStore) {\n const state = store.getState()\n const selected = state.listId\n ? findElementByQuerySelector<HTMLButtonElement>(`#${state.listId} [data-selected]`)\n : null\n\n selected?.click()\n}\n\nexport function registerAction(id: string, store: SpotlightStore) {\n const state = store.getState()\n state.registeredActions.add(id)\n\n return () => {\n state.registeredActions.delete(id)\n }\n}\n\nexport function setQuery(query: string, store: SpotlightStore) {\n updateSpotlightStateAction(() => ({ query }), store)\n Promise.resolve().then(() => {\n selectAction(0, store)\n updateSpotlightStateAction(\n (state) => ({\n empty: (state.query.trim().length > 0 && state.registeredActions.size === 0) || false,\n }),\n store,\n )\n })\n}\n\nexport function clearSpotlightState(\n { clearQuery }: { clearQuery: boolean | undefined },\n store: SpotlightStore,\n) {\n store.setState((state) => ({\n ...state,\n selected: -1,\n query: clearQuery ? '' : state.query,\n empty: clearQuery ? false : state.empty,\n }))\n}\n\nexport const spotlightActions = {\n open: openSpotlightAction,\n close: closeSpotlightAction,\n toggle: toggleSpotlightAction,\n updateState: updateSpotlightStateAction,\n setSelectedAction,\n setListId,\n selectAction,\n selectNextAction,\n selectPreviousAction,\n triggerSelectedAction,\n registerAction,\n setQuery,\n clearSpotlightState,\n}\n\nexport function createSpotlight() {\n const store = createSpotlightStore()\n const actions = {\n open: () => openSpotlightAction(store),\n close: () => closeSpotlightAction(store),\n toggle: () => toggleSpotlightAction(store),\n }\n\n return [store, actions] as const\n}\n\nexport const [spotlightStore, spotlight] = createSpotlight()\nexport const { open: openSpotlight, close: closeSpotlight, toggle: toggleSpotlight } = spotlight\n","import type {\n SpotlightActionData,\n SpotlightActionGroupData,\n} from './components/Spotlight/Spotlight.types'\n\nexport function isActionsGroup(\n item: SpotlightActionData | SpotlightActionGroupData,\n): item is SpotlightActionGroupData {\n const group = item as SpotlightActionGroupData\n return group.group !== undefined && Array.isArray(group.actions)\n}\n","import type { InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\nimport type { SpotlightStore } from './spotlight.store'\n\nexport interface SpotlightContextValue {\n query: string\n setQuery: (query: string) => void\n getStyles: (selector: string, options?: Record<string, any>) => Record<string, any>\n store: SpotlightStore\n closeOnActionTrigger: boolean | undefined\n}\n\nconst SpotlightContextKey = Symbol('SpotlightContext') as InjectionKey<SpotlightContextValue>\n\nexport function provideSpotlightContext(value: SpotlightContextValue) {\n provide(SpotlightContextKey, value)\n}\n\nexport function useSpotlightContext() {\n const ctx = inject(SpotlightContextKey, null)\n\n if (ctx === null) {\n throw new Error('Spotlight component was not found in tree')\n }\n\n return ctx\n}\n","<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots } from 'vue'\nimport { Box, Highlight, UnstyledButton, hasNode, resolveNode, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport { spotlightActions } from '../../spotlight.store'\nimport type { SpotlightActionProps, SpotlightActionSlots } from './SpotlightAction.types'\n\ndefineOptions({ name: 'SpotlightAction', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightActionProps>(), {\n dimmedSections: true,\n highlightQuery: false,\n closeSpotlightOnTrigger: undefined,\n})\ndefineSlots<SpotlightActionSlots>()\nconst attrs = useAttrs()\nconst slots = useSlots()\nconst props = useProps('SpotlightAction', null, rawProps)\nconst ctx = useSpotlightContext()\nconst stylesApi = computed(() => ({ classNames: props.classNames, styles: props.styles }))\nconst leftSection = computed(() => resolveNode(props.leftSection, slots.leftSection))\nconst rightSection = computed(() => resolveNode(props.rightSection, slots.rightSection))\nconst renderLeftSection = () => leftSection.value\nconst renderRightSection = () => rightSection.value\nconst forwardedAttrs = computed(() => {\n const value = { ...attrs }\n delete value.onClick\n delete value.onMousedown\n return value\n})\n\nfunction mousedown(event: MouseEvent) {\n event.preventDefault()\n ;(attrs.onMousedown as ((event: MouseEvent) => void) | undefined)?.(event)\n}\n\nfunction click(event: MouseEvent) {\n ;(attrs.onClick as ((event: MouseEvent) => void) | undefined)?.(event)\n if (props.closeSpotlightOnTrigger ?? ctx.closeOnActionTrigger) {\n spotlightActions.close(ctx.store)\n }\n}\n</script>\n\n<template>\n <UnstyledButton\n v-bind=\"{\n ...forwardedAttrs,\n ...ctx.getStyles('action', { className: attrs.class, style: attrs.style, ...stylesApi }),\n }\"\n data-action\n :tabindex=\"-1\"\n @mousedown=\"mousedown\"\n @click=\"click\"\n >\n <slot v-if=\"$slots.default\" />\n <template v-else>\n <Box\n v-if=\"hasNode(leftSection)\"\n component=\"span\"\n :mod=\"{ position: 'left', dimmed: props.dimmedSections }\"\n v-bind=\"ctx.getStyles('actionSection', stylesApi)\"\n >\n <component :is=\"renderLeftSection\" />\n </Box>\n <span v-bind=\"ctx.getStyles('actionBody', stylesApi)\">\n <Highlight\n v-if=\"props.highlightQuery && typeof props.label === 'string'\"\n component=\"span\"\n :highlight=\"ctx.query\"\n :color=\"props.highlightColor\"\n v-bind=\"ctx.getStyles('actionLabel', stylesApi)\"\n >\n {{ props.label }}\n </Highlight>\n <span v-else v-bind=\"ctx.getStyles('actionLabel', stylesApi)\">{{ props.label }}</span>\n <span v-bind=\"ctx.getStyles('actionDescription', stylesApi)\">{{ props.description }}</span>\n </span>\n <Box\n v-if=\"hasNode(rightSection)\"\n component=\"span\"\n :mod=\"{ position: 'right', dimmed: props.dimmedSections }\"\n v-bind=\"ctx.getStyles('actionSection', stylesApi)\"\n >\n <component :is=\"renderRightSection\" />\n </Box>\n </template>\n </UnstyledButton>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots } from 'vue'\nimport { Box, Highlight, UnstyledButton, hasNode, resolveNode, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport { spotlightActions } from '../../spotlight.store'\nimport type { SpotlightActionProps, SpotlightActionSlots } from './SpotlightAction.types'\n\ndefineOptions({ name: 'SpotlightAction', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightActionProps>(), {\n dimmedSections: true,\n highlightQuery: false,\n closeSpotlightOnTrigger: undefined,\n})\ndefineSlots<SpotlightActionSlots>()\nconst attrs = useAttrs()\nconst slots = useSlots()\nconst props = useProps('SpotlightAction', null, rawProps)\nconst ctx = useSpotlightContext()\nconst stylesApi = computed(() => ({ classNames: props.classNames, styles: props.styles }))\nconst leftSection = computed(() => resolveNode(props.leftSection, slots.leftSection))\nconst rightSection = computed(() => resolveNode(props.rightSection, slots.rightSection))\nconst renderLeftSection = () => leftSection.value\nconst renderRightSection = () => rightSection.value\nconst forwardedAttrs = computed(() => {\n const value = { ...attrs }\n delete value.onClick\n delete value.onMousedown\n return value\n})\n\nfunction mousedown(event: MouseEvent) {\n event.preventDefault()\n ;(attrs.onMousedown as ((event: MouseEvent) => void) | undefined)?.(event)\n}\n\nfunction click(event: MouseEvent) {\n ;(attrs.onClick as ((event: MouseEvent) => void) | undefined)?.(event)\n if (props.closeSpotlightOnTrigger ?? ctx.closeOnActionTrigger) {\n spotlightActions.close(ctx.store)\n }\n}\n</script>\n\n<template>\n <UnstyledButton\n v-bind=\"{\n ...forwardedAttrs,\n ...ctx.getStyles('action', { className: attrs.class, style: attrs.style, ...stylesApi }),\n }\"\n data-action\n :tabindex=\"-1\"\n @mousedown=\"mousedown\"\n @click=\"click\"\n >\n <slot v-if=\"$slots.default\" />\n <template v-else>\n <Box\n v-if=\"hasNode(leftSection)\"\n component=\"span\"\n :mod=\"{ position: 'left', dimmed: props.dimmedSections }\"\n v-bind=\"ctx.getStyles('actionSection', stylesApi)\"\n >\n <component :is=\"renderLeftSection\" />\n </Box>\n <span v-bind=\"ctx.getStyles('actionBody', stylesApi)\">\n <Highlight\n v-if=\"props.highlightQuery && typeof props.label === 'string'\"\n component=\"span\"\n :highlight=\"ctx.query\"\n :color=\"props.highlightColor\"\n v-bind=\"ctx.getStyles('actionLabel', stylesApi)\"\n >\n {{ props.label }}\n </Highlight>\n <span v-else v-bind=\"ctx.getStyles('actionLabel', stylesApi)\">{{ props.label }}</span>\n <span v-bind=\"ctx.getStyles('actionDescription', stylesApi)\">{{ props.description }}</span>\n </span>\n <Box\n v-if=\"hasNode(rightSection)\"\n component=\"span\"\n :mod=\"{ position: 'right', dimmed: props.dimmedSections }\"\n v-bind=\"ctx.getStyles('actionSection', stylesApi)\"\n >\n <component :is=\"renderRightSection\" />\n </Box>\n </template>\n </UnstyledButton>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport type { SpotlightActionsGroupProps } from './SpotlightActionsGroup.types'\n\ndefineOptions({ name: 'SpotlightActionsGroup', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightActionsGroupProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightActionsGroup', null, rawProps)\nconst ctx = useSpotlightContext()\nconst groupStyles = computed(() =>\n ctx.getStyles('actionsGroup', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n)\nconst labelVariable = computed(() => ({\n '--spotlight-label': `'${props.label?.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`,\n}))\n</script>\n\n<template>\n <Box\n v-bind=\"{ ...attrs, ...groupStyles }\"\n :style=\"[groupStyles.style, attrs.style, labelVariable]\"\n >\n <slot />\n </Box>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport type { SpotlightActionsGroupProps } from './SpotlightActionsGroup.types'\n\ndefineOptions({ name: 'SpotlightActionsGroup', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightActionsGroupProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightActionsGroup', null, rawProps)\nconst ctx = useSpotlightContext()\nconst groupStyles = computed(() =>\n ctx.getStyles('actionsGroup', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n)\nconst labelVariable = computed(() => ({\n '--spotlight-label': `'${props.label?.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`,\n}))\n</script>\n\n<template>\n <Box\n v-bind=\"{ ...attrs, ...groupStyles }\"\n :style=\"[groupStyles.style, attrs.style, labelVariable]\"\n >\n <slot />\n </Box>\n</template>\n","<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, useAttrs } from 'vue'\nimport { ScrollAreaAutosize, useProps } from '@mantine-vue/core'\nimport { useId } from '@mantine-vue/hooks'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport { spotlightActions } from '../../spotlight.store'\nimport type { SpotlightActionsListProps } from './SpotlightActionsList.types'\n\ndefineOptions({ name: 'SpotlightActionsList', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightActionsListProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightActionsList', null, rawProps)\nconst ctx = useSpotlightContext()\nconst generatedId = useId()\nconst listId = props.id || `mantine-${generatedId.value.replace(/:/g, '')}`\nonMounted(() => spotlightActions.setListId(listId, ctx.store))\nonBeforeUnmount(() => spotlightActions.setListId('', ctx.store))\n</script>\n\n<template>\n <ScrollAreaAutosize\n v-bind=\"{\n ...attrs,\n ...ctx.getStyles('actionsList', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n }\"\n type=\"scroll\"\n scrollbar-size=\"var(--spotlight-actions-list-padding)\"\n offset-scrollbars=\"y\"\n :id=\"listId\"\n >\n <slot />\n </ScrollAreaAutosize>\n</template>\n","<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, useAttrs } from 'vue'\nimport { ScrollAreaAutosize, useProps } from '@mantine-vue/core'\nimport { useId } from '@mantine-vue/hooks'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport { spotlightActions } from '../../spotlight.store'\nimport type { SpotlightActionsListProps } from './SpotlightActionsList.types'\n\ndefineOptions({ name: 'SpotlightActionsList', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightActionsListProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightActionsList', null, rawProps)\nconst ctx = useSpotlightContext()\nconst generatedId = useId()\nconst listId = props.id || `mantine-${generatedId.value.replace(/:/g, '')}`\nonMounted(() => spotlightActions.setListId(listId, ctx.store))\nonBeforeUnmount(() => spotlightActions.setListId('', ctx.store))\n</script>\n\n<template>\n <ScrollAreaAutosize\n v-bind=\"{\n ...attrs,\n ...ctx.getStyles('actionsList', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n }\"\n type=\"scroll\"\n scrollbar-size=\"var(--spotlight-actions-list-padding)\"\n offset-scrollbars=\"y\"\n :id=\"listId\"\n >\n <slot />\n </ScrollAreaAutosize>\n</template>\n","<script setup lang=\"ts\">\nimport { useAttrs } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport type { SpotlightEmptyProps } from './SpotlightEmpty.types'\n\ndefineOptions({ name: 'SpotlightEmpty', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightEmptyProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightEmpty', null, rawProps)\nconst ctx = useSpotlightContext()\n</script>\n\n<template>\n <Box\n v-bind=\"{\n ...attrs,\n ...ctx.getStyles('empty', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n }\"\n >\n <slot />\n </Box>\n</template>\n","<script setup lang=\"ts\">\nimport { useAttrs } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport type { SpotlightEmptyProps } from './SpotlightEmpty.types'\n\ndefineOptions({ name: 'SpotlightEmpty', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightEmptyProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightEmpty', null, rawProps)\nconst ctx = useSpotlightContext()\n</script>\n\n<template>\n <Box\n v-bind=\"{\n ...attrs,\n ...ctx.getStyles('empty', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n }\"\n >\n <slot />\n </Box>\n</template>\n","import type { HotkeyItem } from '@mantine-vue/hooks'\nimport type { SpotlightStore } from './spotlight.store'\nimport { spotlightActions } from './spotlight.store'\n\nexport function getHotkeys(\n hotkeys: string | string[] | null | undefined,\n store: SpotlightStore,\n): HotkeyItem[] {\n if (!hotkeys) {\n return []\n }\n\n const open = () => spotlightActions.open(store)\n\n if (Array.isArray(hotkeys)) {\n return hotkeys.map((hotkey) => [hotkey, open])\n }\n\n return [[hotkeys, open]]\n}\n","export function mergeClassNames(...items: any[]) {\n return items.reduce<Record<string, any>>((acc, item) => {\n if (!item || typeof item !== 'object' || Array.isArray(item)) {\n return acc\n }\n\n Object.entries(item).forEach(([key, value]) => {\n acc[key] = acc[key] ? [acc[key], value] : value\n })\n\n return acc\n }, {})\n}\n\nexport function mergeStyles(...items: any[]) {\n return items.reduce<Record<string, any>>((acc, item) => {\n if (!item || typeof item !== 'object' || Array.isArray(item)) {\n return acc\n }\n\n Object.entries(item).forEach(([key, value]) => {\n acc[key] = acc[key] ? [acc[key], value] : value\n })\n\n return acc\n }, {})\n}\n\nexport function renderContent(value: any) {\n return typeof value === 'function' ? value() : value\n}\n",".root {\n &[data-scrollable] {\n --spotlight-content-height: 100%;\n }\n}\n\n.content {\n overflow: hidden;\n height: var(--spotlight-content-height, auto);\n max-height: var(--spotlight-max-height);\n}\n\n.body {\n display: flex;\n flex-direction: column;\n height: var(--spotlight-content-height, auto);\n}\n\n.search {\n border: 0;\n background-color: transparent;\n}\n\n.actionsList {\n --spotlight-actions-list-padding: 4px;\n\n border-top: 1px solid;\n flex: 1;\n padding: var(--spotlight-actions-list-padding);\n max-height: calc(100vh - 15rem);\n margin-inline-end: calc(var(--spotlight-actions-list-padding) * -1);\n width: 100%;\n\n @mixin where-light {\n border-color: var(--mantine-color-gray-2);\n }\n\n @mixin where-dark {\n border-color: var(--mantine-color-dark-4);\n }\n}\n\n.action {\n display: flex;\n align-items: center;\n width: 100%;\n padding: 7px var(--mantine-spacing-md);\n border-radius: var(--mantine-radius-default);\n background-color: transparent;\n color: inherit;\n text-align: start;\n\n &:where(:not([data-selected])) {\n @mixin hover {\n @mixin where-light {\n background-color: var(--mantine-color-gray-0);\n }\n\n @mixin where-dark {\n background-color: var(--mantine-color-dark-6);\n }\n }\n }\n\n &:where([data-selected]) {\n background-color: var(--mantine-primary-color-filled);\n color: var(--mantine-primary-color-contrast, var(--mantine-color-white));\n --action-description-color: var(--mantine-primary-color-contrast, var(--mantine-color-white));\n --action-description-opacity: 0.7;\n }\n}\n\n.actionBody {\n flex: 1;\n}\n\n.actionSection {\n opacity: 1;\n color: inherit;\n\n &:where([data-dimmed]) {\n opacity: var(--action-description-opacity, 1);\n color: var(--action-description-color, var(--mantine-color-dimmed));\n }\n\n &:where([data-position='left']) {\n margin-inline-end: var(--mantine-spacing-md);\n }\n\n &:where([data-position='right']) {\n margin-inline-start: var(--mantine-spacing-md);\n }\n\n & > svg {\n display: block;\n }\n}\n\n.actionLabel {\n display: block;\n}\n\n.actionDescription {\n display: block;\n font-size: var(--mantine-font-size-xs);\n opacity: var(--action-description-opacity, 1);\n color: var(--action-description-color, var(--mantine-color-dimmed));\n}\n\n.empty {\n color: var(--mantine-color-dimmed);\n padding: var(--mantine-spacing-md);\n text-align: center;\n}\n\n.footer {\n padding: var(--mantine-spacing-xs) calc(var(--mantine-spacing-md) + rem(4px));\n border-top: 1px solid;\n\n @mixin where-light {\n border-color: var(--mantine-color-gray-2);\n }\n\n @mixin where-dark {\n border-color: var(--mantine-color-dark-4);\n }\n}\n\n.actionsGroup {\n display: flex;\n flex-direction: column;\n margin-top: var(--mantine-spacing-md);\n\n &::before {\n content: var(--spotlight-label);\n text-transform: uppercase;\n font-size: var(--mantine-font-size-xs);\n font-weight: var(--mantine-font-weight-bold);\n color: var(--mantine-color-dimmed);\n padding-inline-start: var(--mantine-spacing-md);\n }\n\n &:empty {\n display: none;\n }\n}\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs, watch } from 'vue'\nimport { Modal, getDefaultZIndex, rem, useProps, useStyles } from '@mantine-vue/core'\nimport { useHotkeys } from '@mantine-vue/hooks'\nimport { getHotkeys } from '../../get-hotkeys'\nimport { provideSpotlightContext } from '../../Spotlight.context'\nimport { mergeClassNames, mergeStyles } from '../../style-api'\nimport { spotlightActions, spotlightStore, useSpotlight } from '../../spotlight.store'\nimport type {\n SpotlightRootEmits,\n SpotlightRootProps,\n SpotlightRootSlots,\n} from './SpotlightRoot.types'\nimport classes from '../../Spotlight.module.css'\n\ndefineOptions({ name: 'SpotlightRoot', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightRootProps>(), {\n store: () => spotlightStore,\n clearQueryOnClose: true,\n shortcut: 'mod + K',\n disabled: false,\n forceOpened: false,\n closeOnActionTrigger: true,\n maxHeight: 400,\n scrollable: false,\n})\nconst emit = defineEmits<SpotlightRootEmits>()\ndefineSlots<SpotlightRootSlots>()\nconst attrs = useAttrs()\nconst props = useProps(\n 'SpotlightRoot',\n {\n size: 600,\n yOffset: 80,\n zIndex: getDefaultZIndex('max'),\n overlayProps: { backgroundOpacity: 0.35, blur: 7 },\n transitionProps: { duration: 200, transition: 'pop' },\n },\n rawProps,\n)\nconst state = useSpotlight(props.store)\nconst previousOpened = ref(state.value.opened)\nconst currentQuery = computed(() =>\n typeof props.query === 'string' ? props.query : state.value.query,\n)\n\nfunction setQuery(query: string) {\n emit('update:query', query)\n emit('query-change', query)\n spotlightActions.setQuery(query, props.store)\n}\n\nconst getStyles = useStyles({\n name: 'Spotlight',\n classes,\n props,\n className: attrs.class,\n style: attrs.style as any,\n classNames: props.classNames as any,\n styles: props.styles as any,\n unstyled: props.unstyled,\n vars: props.vars as any,\n})\n\nprovideSpotlightContext({\n get query() {\n return currentQuery.value\n },\n setQuery,\n getStyles,\n store: props.store,\n get closeOnActionTrigger() {\n return props.closeOnActionTrigger\n },\n})\n\nuseHotkeys(\n () => getHotkeys(props.shortcut, props.store),\n () => props.tagsToIgnore,\n () => props.triggerOnContentEditable,\n)\n\nwatch(\n () => state.value.opened,\n (opened) => {\n if (opened === previousOpened.value) return\n if (opened) emit('spotlight-open')\n else emit('spotlight-close')\n previousOpened.value = opened\n },\n)\n\nconst rootStyles = computed(() =>\n getStyles('root', { className: attrs.class, style: attrs.style as any }),\n)\nconst modalAttrs = computed(() => {\n const value = { ...attrs, ...props }\n for (const key of [\n 'classNames',\n 'styles',\n 'vars',\n 'unstyled',\n 'store',\n 'query',\n 'clearQueryOnClose',\n 'shortcut',\n 'tagsToIgnore',\n 'triggerOnContentEditable',\n 'disabled',\n 'forceOpened',\n 'closeOnActionTrigger',\n 'maxHeight',\n 'scrollable',\n 'class',\n 'style',\n ])\n delete value[key]\n return value\n})\n\nfunction close() {\n spotlightActions.close(props.store)\n}\n\nfunction exitTransitionEnd() {\n if (props.clearQueryOnClose) setQuery('')\n spotlightActions.clearSpotlightState({ clearQuery: props.clearQueryOnClose }, props.store)\n props.transitionProps?.onExited?.()\n emit('exit-transition-end')\n}\n</script>\n\n<template>\n <Modal\n v-if=\"!props.disabled\"\n v-bind=\"modalAttrs\"\n :with-close-button=\"false\"\n :opened=\"state.opened || props.forceOpened\"\n :padding=\"0\"\n :class=\"rootStyles.class\"\n :style=\"rootStyles.style\"\n :class-names=\"\n mergeClassNames({ body: classes.body, content: classes.content }, props.classNames)\n \"\n :styles=\"mergeStyles(props.styles)\"\n :vars=\"\n mergeStyles(\n { root: { '--spotlight-max-height': props.scrollable ? rem(props.maxHeight) : undefined } },\n props.vars,\n )\n \"\n :data-scrollable=\"props.scrollable || undefined\"\n @close=\"close\"\n @exit-transition-end=\"exitTransitionEnd\"\n >\n <slot />\n </Modal>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs, watch } from 'vue'\nimport { Modal, getDefaultZIndex, rem, useProps, useStyles } from '@mantine-vue/core'\nimport { useHotkeys } from '@mantine-vue/hooks'\nimport { getHotkeys } from '../../get-hotkeys'\nimport { provideSpotlightContext } from '../../Spotlight.context'\nimport { mergeClassNames, mergeStyles } from '../../style-api'\nimport { spotlightActions, spotlightStore, useSpotlight } from '../../spotlight.store'\nimport type {\n SpotlightRootEmits,\n SpotlightRootProps,\n SpotlightRootSlots,\n} from './SpotlightRoot.types'\nimport classes from '../../Spotlight.module.css'\n\ndefineOptions({ name: 'SpotlightRoot', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightRootProps>(), {\n store: () => spotlightStore,\n clearQueryOnClose: true,\n shortcut: 'mod + K',\n disabled: false,\n forceOpened: false,\n closeOnActionTrigger: true,\n maxHeight: 400,\n scrollable: false,\n})\nconst emit = defineEmits<SpotlightRootEmits>()\ndefineSlots<SpotlightRootSlots>()\nconst attrs = useAttrs()\nconst props = useProps(\n 'SpotlightRoot',\n {\n size: 600,\n yOffset: 80,\n zIndex: getDefaultZIndex('max'),\n overlayProps: { backgroundOpacity: 0.35, blur: 7 },\n transitionProps: { duration: 200, transition: 'pop' },\n },\n rawProps,\n)\nconst state = useSpotlight(props.store)\nconst previousOpened = ref(state.value.opened)\nconst currentQuery = computed(() =>\n typeof props.query === 'string' ? props.query : state.value.query,\n)\n\nfunction setQuery(query: string) {\n emit('update:query', query)\n emit('query-change', query)\n spotlightActions.setQuery(query, props.store)\n}\n\nconst getStyles = useStyles({\n name: 'Spotlight',\n classes,\n props,\n className: attrs.class,\n style: attrs.style as any,\n classNames: props.classNames as any,\n styles: props.styles as any,\n unstyled: props.unstyled,\n vars: props.vars as any,\n})\n\nprovideSpotlightContext({\n get query() {\n return currentQuery.value\n },\n setQuery,\n getStyles,\n store: props.store,\n get closeOnActionTrigger() {\n return props.closeOnActionTrigger\n },\n})\n\nuseHotkeys(\n () => getHotkeys(props.shortcut, props.store),\n () => props.tagsToIgnore,\n () => props.triggerOnContentEditable,\n)\n\nwatch(\n () => state.value.opened,\n (opened) => {\n if (opened === previousOpened.value) return\n if (opened) emit('spotlight-open')\n else emit('spotlight-close')\n previousOpened.value = opened\n },\n)\n\nconst rootStyles = computed(() =>\n getStyles('root', { className: attrs.class, style: attrs.style as any }),\n)\nconst modalAttrs = computed(() => {\n const value = { ...attrs, ...props }\n for (const key of [\n 'classNames',\n 'styles',\n 'vars',\n 'unstyled',\n 'store',\n 'query',\n 'clearQueryOnClose',\n 'shortcut',\n 'tagsToIgnore',\n 'triggerOnContentEditable',\n 'disabled',\n 'forceOpened',\n 'closeOnActionTrigger',\n 'maxHeight',\n 'scrollable',\n 'class',\n 'style',\n ])\n delete value[key]\n return value\n})\n\nfunction close() {\n spotlightActions.close(props.store)\n}\n\nfunction exitTransitionEnd() {\n if (props.clearQueryOnClose) setQuery('')\n spotlightActions.clearSpotlightState({ clearQuery: props.clearQueryOnClose }, props.store)\n props.transitionProps?.onExited?.()\n emit('exit-transition-end')\n}\n</script>\n\n<template>\n <Modal\n v-if=\"!props.disabled\"\n v-bind=\"modalAttrs\"\n :with-close-button=\"false\"\n :opened=\"state.opened || props.forceOpened\"\n :padding=\"0\"\n :class=\"rootStyles.class\"\n :style=\"rootStyles.style\"\n :class-names=\"\n mergeClassNames({ body: classes.body, content: classes.content }, props.classNames)\n \"\n :styles=\"mergeStyles(props.styles)\"\n :vars=\"\n mergeStyles(\n { root: { '--spotlight-max-height': props.scrollable ? rem(props.maxHeight) : undefined } },\n props.vars,\n )\n \"\n :data-scrollable=\"props.scrollable || undefined\"\n @close=\"close\"\n @exit-transition-end=\"exitTransitionEnd\"\n >\n <slot />\n </Modal>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs } from 'vue'\nimport { Input, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport { spotlightActions } from '../../spotlight.store'\nimport { mergeClassNames, mergeStyles } from '../../style-api'\nimport type { SpotlightSearchEmits, SpotlightSearchProps } from './SpotlightSearch.types'\n\ndefineOptions({ name: 'SpotlightSearch', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightSearchProps>(), { size: 'lg' })\nconst emit = defineEmits<SpotlightSearchEmits>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightSearch', null, rawProps)\nconst ctx = useSpotlightContext()\nconst isComposing = ref(false)\nconst inputStyles = computed(() => ctx.getStyles('search'))\nconst forwardedAttrs = computed(() => {\n const value = { ...attrs }\n delete value.onInput\n delete value.onKeydown\n delete value.onCompositionstart\n delete value.onCompositionend\n return value\n})\n\nfunction input(event: Event) {\n const value = (event.currentTarget as HTMLInputElement).value\n ctx.setQuery(value)\n emit('update:modelValue', value)\n emit('change', value)\n}\n\nfunction keydown(event: KeyboardEvent) {\n emit('keydown', event)\n if (isComposing.value) return\n if (event.code === 'ArrowDown') {\n event.preventDefault()\n spotlightActions.selectNextAction(ctx.store)\n }\n if (event.code === 'ArrowUp') {\n event.preventDefault()\n spotlightActions.selectPreviousAction(ctx.store)\n }\n if (event.code === 'Enter' || event.code === 'NumpadEnter') {\n event.preventDefault()\n spotlightActions.triggerSelectedAction(ctx.store)\n }\n}\n</script>\n\n<template>\n <Input\n v-bind=\"forwardedAttrs\"\n :size=\"props.size\"\n :value=\"props.modelValue ?? ctx.query\"\n :class-names=\"mergeClassNames({ input: inputStyles.class }, props.classNames)\"\n :styles=\"mergeStyles({ input: inputStyles.style }, props.styles)\"\n :vars=\"props.vars\"\n @input=\"input\"\n @keydown=\"keydown\"\n @compositionstart=\"isComposing = true\"\n @compositionend=\"isComposing = false\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs } from 'vue'\nimport { Input, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport { spotlightActions } from '../../spotlight.store'\nimport { mergeClassNames, mergeStyles } from '../../style-api'\nimport type { SpotlightSearchEmits, SpotlightSearchProps } from './SpotlightSearch.types'\n\ndefineOptions({ name: 'SpotlightSearch', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightSearchProps>(), { size: 'lg' })\nconst emit = defineEmits<SpotlightSearchEmits>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightSearch', null, rawProps)\nconst ctx = useSpotlightContext()\nconst isComposing = ref(false)\nconst inputStyles = computed(() => ctx.getStyles('search'))\nconst forwardedAttrs = computed(() => {\n const value = { ...attrs }\n delete value.onInput\n delete value.onKeydown\n delete value.onCompositionstart\n delete value.onCompositionend\n return value\n})\n\nfunction input(event: Event) {\n const value = (event.currentTarget as HTMLInputElement).value\n ctx.setQuery(value)\n emit('update:modelValue', value)\n emit('change', value)\n}\n\nfunction keydown(event: KeyboardEvent) {\n emit('keydown', event)\n if (isComposing.value) return\n if (event.code === 'ArrowDown') {\n event.preventDefault()\n spotlightActions.selectNextAction(ctx.store)\n }\n if (event.code === 'ArrowUp') {\n event.preventDefault()\n spotlightActions.selectPreviousAction(ctx.store)\n }\n if (event.code === 'Enter' || event.code === 'NumpadEnter') {\n event.preventDefault()\n spotlightActions.triggerSelectedAction(ctx.store)\n }\n}\n</script>\n\n<template>\n <Input\n v-bind=\"forwardedAttrs\"\n :size=\"props.size\"\n :value=\"props.modelValue ?? ctx.query\"\n :class-names=\"mergeClassNames({ input: inputStyles.class }, props.classNames)\"\n :styles=\"mergeStyles({ input: inputStyles.style }, props.styles)\"\n :vars=\"props.vars\"\n @input=\"input\"\n @keydown=\"keydown\"\n @compositionstart=\"isComposing = true\"\n @compositionend=\"isComposing = false\"\n />\n</template>\n","import type {\n SpotlightActionData,\n SpotlightActionGroupData,\n SpotlightActions,\n SpotlightFilterFunction,\n} from './components/Spotlight/Spotlight.types'\n\nfunction getKeywords(keywords: string | string[] | undefined) {\n if (Array.isArray(keywords)) {\n return keywords\n .map((keyword) => keyword.trim())\n .join(',')\n .toLowerCase()\n .trim()\n }\n\n if (typeof keywords === 'string') {\n return keywords.toLowerCase().trim()\n }\n\n return ''\n}\n\nfunction getFlatActions(data: SpotlightActions[]) {\n return data.reduce<SpotlightActionData[]>((acc, item) => {\n if ('actions' in item) {\n return [\n ...acc,\n ...item.actions.map((action: SpotlightActionData) => ({ ...action, group: item.group })),\n ]\n }\n\n return [...acc, item]\n }, [])\n}\n\nfunction flatActionsToGroups(data: SpotlightActionData[]) {\n const groups: Record<string, { pushed: boolean; data: SpotlightActionGroupData }> = {}\n const result: SpotlightActions[] = []\n\n data.forEach((action) => {\n if (action.group) {\n if (!groups[action.group]) {\n groups[action.group] = { pushed: false, data: { group: action.group, actions: [] } }\n }\n\n groups[action.group].data.actions.push(action)\n\n if (!groups[action.group].pushed) {\n groups[action.group].pushed = true\n result.push(groups[action.group].data)\n }\n } else {\n result.push(action)\n }\n })\n\n return result\n}\n\nexport const defaultSpotlightFilter: SpotlightFilterFunction = (_query, data) => {\n const query = _query.trim().toLowerCase()\n const priorityMatrix: SpotlightActionData[][] = [[], []]\n const flatActions = getFlatActions(data)\n\n flatActions.forEach((item) => {\n if (item.label?.toLowerCase().includes(query)) {\n priorityMatrix[0].push(item)\n } else if (\n item.description?.toLowerCase().includes(query) ||\n getKeywords(item.keywords).includes(query)\n ) {\n priorityMatrix[1].push(item)\n }\n })\n\n return flatActionsToGroups(priorityMatrix.flat())\n}\n","import { isActionsGroup } from './is-actions-group'\nimport type { SpotlightActionData, SpotlightActions } from './components/Spotlight/Spotlight.types'\n\nexport function limitActions(actions: SpotlightActions[], limit: number) {\n if (!Array.isArray(actions)) {\n return []\n }\n\n let count = 0\n\n return actions.reduce<SpotlightActions[]>((acc, item) => {\n if (count >= limit) {\n return acc\n }\n\n if (isActionsGroup(item)) {\n const groupActions = limitActions(item.actions, limit - count)\n acc.push({\n group: item.group,\n actions: groupActions as SpotlightActionData[],\n })\n count += groupActions.length\n } else {\n acc.push(item)\n count += 1\n }\n\n return acc\n }, [])\n}\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs } from 'vue'\nimport { getDefaultZIndex, useProps } from '@mantine-vue/core'\nimport SpotlightAction from '../SpotlightAction/SpotlightAction.vue'\nimport SpotlightActionsGroup from '../SpotlightActionsGroup/SpotlightActionsGroup.vue'\nimport SpotlightActionsList from '../SpotlightActionsList/SpotlightActionsList.vue'\nimport SpotlightEmpty from '../SpotlightEmpty/SpotlightEmpty.vue'\nimport SpotlightRoot from '../SpotlightRoot/SpotlightRoot.vue'\nimport SpotlightSearch from '../SpotlightSearch/SpotlightSearch.vue'\nimport { defaultSpotlightFilter } from '../../default-spotlight-filter'\nimport { isActionsGroup } from '../../is-actions-group'\nimport { limitActions } from '../../limit-actions'\nimport { spotlightStore } from '../../spotlight.store'\nimport type { SpotlightActionData, SpotlightEmits, SpotlightProps } from './Spotlight.types'\n\ndefineOptions({ name: 'Spotlight', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightProps>(), {\n limit: Infinity,\n store: () => spotlightStore,\n filter: defaultSpotlightFilter,\n clearQueryOnClose: true,\n closeOnActionTrigger: true,\n shortcut: 'mod + K',\n highlightQuery: false,\n})\nconst emit = defineEmits<SpotlightEmits>()\nconst attrs = useAttrs()\nconst props = useProps(\n 'Spotlight',\n {\n size: 600,\n yOffset: 80,\n zIndex: getDefaultZIndex('max'),\n overlayProps: { backgroundOpacity: 0.35, blur: 7 },\n transitionProps: { duration: 200, transition: 'pop' },\n },\n rawProps,\n)\nconst uncontrolledQuery = ref('')\nconst currentQuery = computed(() =>\n typeof props.query === 'string' ? props.query : uncontrolledQuery.value,\n)\nconst filteredActions = computed(() =>\n limitActions(props.filter(currentQuery.value, props.actions), props.limit),\n)\nconst rootProps = computed(() => {\n const value = { ...attrs, ...props }\n for (const key of [\n 'searchProps',\n 'actions',\n 'filter',\n 'nothingFound',\n 'highlightQuery',\n 'limit',\n 'scrollAreaProps',\n 'query',\n ])\n delete value[key]\n return value\n})\n\nfunction setQuery(query: string) {\n if (typeof props.query !== 'string') uncontrolledQuery.value = query\n emit('update:query', query)\n emit('query-change', query)\n}\n\nfunction actionProps(action: SpotlightActionData) {\n const value = { ...action }\n delete (value as Partial<SpotlightActionData>).id\n delete (value as Partial<SpotlightActionData>).group\n return value\n}\n\nconst renderNothingFound = () =>\n typeof props.nothingFound === 'function' ? props.nothingFound() : props.nothingFound\n</script>\n\n<template>\n <SpotlightRoot v-bind=\"rootProps\" :query=\"currentQuery\" @query-change=\"setQuery\">\n <SpotlightSearch v-bind=\"props.searchProps\" />\n <SpotlightActionsList v-if=\"filteredActions.length\" v-bind=\"props.scrollAreaProps\">\n <template v-for=\"item in filteredActions\" :key=\"isActionsGroup(item) ? item.group : item.id\">\n <SpotlightActionsGroup v-if=\"isActionsGroup(item)\" :label=\"item.group\">\n <SpotlightAction\n v-for=\"action in item.actions\"\n :key=\"action.id\"\n v-bind=\"actionProps(action)\"\n :highlight-query=\"props.highlightQuery\"\n />\n </SpotlightActionsGroup>\n <SpotlightAction\n v-else\n v-bind=\"actionProps(item)\"\n :highlight-query=\"props.highlightQuery\"\n />\n </template>\n </SpotlightActionsList>\n <SpotlightEmpty v-else-if=\"props.nothingFound\">\n <component :is=\"renderNothingFound\" />\n </SpotlightEmpty>\n </SpotlightRoot>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs } from 'vue'\nimport { getDefaultZIndex, useProps } from '@mantine-vue/core'\nimport SpotlightAction from '../SpotlightAction/SpotlightAction.vue'\nimport SpotlightActionsGroup from '../SpotlightActionsGroup/SpotlightActionsGroup.vue'\nimport SpotlightActionsList from '../SpotlightActionsList/SpotlightActionsList.vue'\nimport SpotlightEmpty from '../SpotlightEmpty/SpotlightEmpty.vue'\nimport SpotlightRoot from '../SpotlightRoot/SpotlightRoot.vue'\nimport SpotlightSearch from '../SpotlightSearch/SpotlightSearch.vue'\nimport { defaultSpotlightFilter } from '../../default-spotlight-filter'\nimport { isActionsGroup } from '../../is-actions-group'\nimport { limitActions } from '../../limit-actions'\nimport { spotlightStore } from '../../spotlight.store'\nimport type { SpotlightActionData, SpotlightEmits, SpotlightProps } from './Spotlight.types'\n\ndefineOptions({ name: 'Spotlight', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightProps>(), {\n limit: Infinity,\n store: () => spotlightStore,\n filter: defaultSpotlightFilter,\n clearQueryOnClose: true,\n closeOnActionTrigger: true,\n shortcut: 'mod + K',\n highlightQuery: false,\n})\nconst emit = defineEmits<SpotlightEmits>()\nconst attrs = useAttrs()\nconst props = useProps(\n 'Spotlight',\n {\n size: 600,\n yOffset: 80,\n zIndex: getDefaultZIndex('max'),\n overlayProps: { backgroundOpacity: 0.35, blur: 7 },\n transitionProps: { duration: 200, transition: 'pop' },\n },\n rawProps,\n)\nconst uncontrolledQuery = ref('')\nconst currentQuery = computed(() =>\n typeof props.query === 'string' ? props.query : uncontrolledQuery.value,\n)\nconst filteredActions = computed(() =>\n limitActions(props.filter(currentQuery.value, props.actions), props.limit),\n)\nconst rootProps = computed(() => {\n const value = { ...attrs, ...props }\n for (const key of [\n 'searchProps',\n 'actions',\n 'filter',\n 'nothingFound',\n 'highlightQuery',\n 'limit',\n 'scrollAreaProps',\n 'query',\n ])\n delete value[key]\n return value\n})\n\nfunction setQuery(query: string) {\n if (typeof props.query !== 'string') uncontrolledQuery.value = query\n emit('update:query', query)\n emit('query-change', query)\n}\n\nfunction actionProps(action: SpotlightActionData) {\n const value = { ...action }\n delete (value as Partial<SpotlightActionData>).id\n delete (value as Partial<SpotlightActionData>).group\n return value\n}\n\nconst renderNothingFound = () =>\n typeof props.nothingFound === 'function' ? props.nothingFound() : props.nothingFound\n</script>\n\n<template>\n <SpotlightRoot v-bind=\"rootProps\" :query=\"currentQuery\" @query-change=\"setQuery\">\n <SpotlightSearch v-bind=\"props.searchProps\" />\n <SpotlightActionsList v-if=\"filteredActions.length\" v-bind=\"props.scrollAreaProps\">\n <template v-for=\"item in filteredActions\" :key=\"isActionsGroup(item) ? item.group : item.id\">\n <SpotlightActionsGroup v-if=\"isActionsGroup(item)\" :label=\"item.group\">\n <SpotlightAction\n v-for=\"action in item.actions\"\n :key=\"action.id\"\n v-bind=\"actionProps(action)\"\n :highlight-query=\"props.highlightQuery\"\n />\n </SpotlightActionsGroup>\n <SpotlightAction\n v-else\n v-bind=\"actionProps(item)\"\n :highlight-query=\"props.highlightQuery\"\n />\n </template>\n </SpotlightActionsList>\n <SpotlightEmpty v-else-if=\"props.nothingFound\">\n <component :is=\"renderNothingFound\" />\n </SpotlightEmpty>\n </SpotlightRoot>\n</template>\n","import SpotlightActionComponent from './SpotlightAction.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightAction = Object.assign(SpotlightActionComponent, { classes })\nexport type {\n SpotlightActionProps,\n SpotlightActionSlots,\n SpotlightActionStylesNames,\n} from './SpotlightAction.types'\n","import SpotlightActionsGroupComponent from './SpotlightActionsGroup.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightActionsGroup = Object.assign(SpotlightActionsGroupComponent, { classes })\nexport type {\n SpotlightActionsGroupProps,\n SpotlightActionsGroupStylesNames,\n} from './SpotlightActionsGroup.types'\n","import SpotlightActionsListComponent from './SpotlightActionsList.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightActionsList = Object.assign(SpotlightActionsListComponent, { classes })\nexport type {\n SpotlightActionsListProps,\n SpotlightActionsListStylesNames,\n} from './SpotlightActionsList.types'\n","import SpotlightEmptyComponent from './SpotlightEmpty.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightEmpty = Object.assign(SpotlightEmptyComponent, { classes })\nexport type { SpotlightEmptyProps, SpotlightEmptyStylesNames } from './SpotlightEmpty.types'\n","<script setup lang=\"ts\">\nimport { useAttrs } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport type { SpotlightFooterProps } from './SpotlightFooter.types'\n\ndefineOptions({ name: 'SpotlightFooter', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightFooterProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightFooter', null, rawProps)\nconst ctx = useSpotlightContext()\n</script>\n\n<template>\n <Box\n v-bind=\"{\n ...attrs,\n ...ctx.getStyles('footer', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n }\"\n >\n <slot />\n </Box>\n</template>\n","<script setup lang=\"ts\">\nimport { useAttrs } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport type { SpotlightFooterProps } from './SpotlightFooter.types'\n\ndefineOptions({ name: 'SpotlightFooter', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightFooterProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightFooter', null, rawProps)\nconst ctx = useSpotlightContext()\n</script>\n\n<template>\n <Box\n v-bind=\"{\n ...attrs,\n ...ctx.getStyles('footer', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n }\"\n >\n <slot />\n </Box>\n</template>\n","import SpotlightFooterComponent from './SpotlightFooter.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightFooter = Object.assign(SpotlightFooterComponent, { classes })\nexport type { SpotlightFooterProps, SpotlightFooterStylesNames } from './SpotlightFooter.types'\n","import SpotlightRootComponent from './SpotlightRoot.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightRoot = Object.assign(SpotlightRootComponent, { classes })\nexport type {\n SpotlightRootEmits,\n SpotlightRootProps,\n SpotlightRootSlots,\n SpotlightRootStylesNames,\n} from './SpotlightRoot.types'\n","import SpotlightSearchComponent from './SpotlightSearch.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightSearch = Object.assign(SpotlightSearchComponent, { classes })\nexport type {\n SpotlightSearchEmits,\n SpotlightSearchProps,\n SpotlightSearchStylesNames,\n} from './SpotlightSearch.types'\n","import SpotlightComponent from './Spotlight.vue'\nimport { SpotlightAction } from '../SpotlightAction'\nimport { SpotlightActionsGroup } from '../SpotlightActionsGroup'\nimport { SpotlightActionsList } from '../SpotlightActionsList'\nimport { SpotlightEmpty } from '../SpotlightEmpty'\nimport { SpotlightFooter } from '../SpotlightFooter'\nimport { SpotlightRoot } from '../SpotlightRoot'\nimport { SpotlightSearch } from '../SpotlightSearch'\nimport { spotlight } from '../../spotlight.store'\nimport classes from '../../Spotlight.module.css'\n\nexport const Spotlight = Object.assign(SpotlightComponent, {\n classes,\n Search: SpotlightSearch,\n ActionsList: SpotlightActionsList,\n Action: SpotlightAction,\n Empty: SpotlightEmpty,\n Footer: SpotlightFooter,\n ActionsGroup: SpotlightActionsGroup,\n Root: SpotlightRoot,\n open: spotlight.open,\n close: spotlight.close,\n toggle: spotlight.toggle,\n})\n\nexport type {\n SpotlightActionData,\n SpotlightActionGroupData,\n SpotlightActions,\n SpotlightEmits,\n SpotlightFilterFunction,\n SpotlightProps,\n SpotlightStylesNames,\n} from './Spotlight.types'\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["$slots"],"sources":["../src/spotlight.store.ts","../src/is-actions-group.ts","../src/Spotlight.context.ts","../src/components/SpotlightAction/SpotlightAction.vue","../src/components/SpotlightAction/SpotlightAction.vue","../src/components/SpotlightActionsGroup/SpotlightActionsGroup.vue","../src/components/SpotlightActionsGroup/SpotlightActionsGroup.vue","../src/components/SpotlightActionsList/SpotlightActionsList.vue","../src/components/SpotlightActionsList/SpotlightActionsList.vue","../src/components/SpotlightEmpty/SpotlightEmpty.vue","../src/components/SpotlightEmpty/SpotlightEmpty.vue","../src/get-hotkeys.ts","../src/style-api.ts","../src/Spotlight.module.css","../src/components/SpotlightRoot/SpotlightRoot.vue","../src/components/SpotlightRoot/SpotlightRoot.vue","../src/components/SpotlightSearch/SpotlightSearch.vue","../src/components/SpotlightSearch/SpotlightSearch.vue","../src/default-spotlight-filter.ts","../src/limit-actions.ts","../src/components/Spotlight/Spotlight.vue","../src/components/Spotlight/Spotlight.vue","../src/components/SpotlightAction/index.ts","../src/components/SpotlightActionsGroup/index.ts","../src/components/SpotlightActionsList/index.ts","../src/components/SpotlightEmpty/index.ts","../src/components/SpotlightFooter/SpotlightFooter.vue","../src/components/SpotlightFooter/SpotlightFooter.vue","../src/components/SpotlightFooter/index.ts","../src/components/SpotlightRoot/index.ts","../src/components/SpotlightSearch/index.ts","../src/components/Spotlight/index.ts"],"sourcesContent":["import { type Ref } from 'vue'\nimport { createStore, type MantineStore } from '@mantine-vue/store'\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.min(max, Math.max(min, value))\n}\n\nexport interface SpotlightState {\n opened: boolean\n selected: number\n listId: string\n query: string\n empty: boolean\n registeredActions: Set<string>\n}\n\nexport type SpotlightStore = MantineStore<SpotlightState>\n\nexport const createSpotlightStore = () =>\n createStore<SpotlightState>({\n opened: false,\n empty: false,\n selected: -1,\n listId: '',\n query: '',\n registeredActions: new Set(),\n })\n\nexport const useSpotlight = (store: SpotlightStore): Readonly<Ref<SpotlightState>> => store.value\n\nexport function updateSpotlightStateAction(\n update: (state: SpotlightState) => Partial<SpotlightState>,\n store: SpotlightStore,\n) {\n const state = store.getState()\n store.setState({ ...state, ...update(store.getState()) })\n}\n\nexport function openSpotlightAction(store: SpotlightStore) {\n updateSpotlightStateAction(() => ({ opened: true, selected: -1 }), store)\n}\n\nexport function closeSpotlightAction(store: SpotlightStore) {\n updateSpotlightStateAction(() => ({ opened: false }), store)\n}\n\nexport function toggleSpotlightAction(store: SpotlightStore) {\n updateSpotlightStateAction(\n (state) => ({ opened: !state.opened, selected: state.opened ? state.selected : -1 }),\n store,\n )\n}\n\nexport function setSelectedAction(index: number, store: SpotlightStore) {\n store.setState((state) => ({ ...state, selected: index }))\n}\n\nexport function setListId(id: string, store: SpotlightStore) {\n store.setState((state) => ({ ...state, listId: id }))\n}\n\nfunction findElementByQuerySelector<T extends HTMLElement>(\n selector: string,\n root: Document | Element | ShadowRoot = document,\n): T | null {\n const element = root.querySelector<T>(selector)\n\n if (element) {\n return element\n }\n\n const children = root instanceof ShadowRoot ? root.host.children : root.children\n\n for (let i = 0; i < children.length; i += 1) {\n const child = children[i]\n\n if (child.shadowRoot) {\n const shadowElement = findElementByQuerySelector<T>(selector, child.shadowRoot)\n\n if (shadowElement) {\n return shadowElement\n }\n }\n\n const nestedElement = findElementByQuerySelector<T>(selector, child)\n\n if (nestedElement) {\n return nestedElement\n }\n }\n\n return null\n}\n\nexport function selectAction(index: number, store: SpotlightStore): number {\n const state = store.getState()\n const actionsList = state.listId ? findElementByQuerySelector(`#${state.listId}`) : null\n const selected = actionsList?.querySelector<HTMLButtonElement>('[data-selected]')\n const actions = actionsList?.querySelectorAll<HTMLButtonElement>('[data-action]') ?? []\n const nextIndex = index === -1 ? actions.length - 1 : index === actions.length ? 0 : index\n const selectedIndex = clamp(nextIndex, 0, actions.length - 1)\n\n selected?.removeAttribute('data-selected')\n actions[selectedIndex]?.scrollIntoView?.({ block: 'nearest' })\n actions[selectedIndex]?.setAttribute('data-selected', 'true')\n setSelectedAction(selectedIndex, store)\n\n return selectedIndex\n}\n\nexport function selectNextAction(store: SpotlightStore) {\n return selectAction(store.getState().selected + 1, store)\n}\n\nexport function selectPreviousAction(store: SpotlightStore) {\n return selectAction(store.getState().selected - 1, store)\n}\n\nexport function triggerSelectedAction(store: SpotlightStore) {\n const state = store.getState()\n const selected = state.listId\n ? findElementByQuerySelector<HTMLButtonElement>(`#${state.listId} [data-selected]`)\n : null\n\n selected?.click()\n}\n\nexport function registerAction(id: string, store: SpotlightStore) {\n const state = store.getState()\n state.registeredActions.add(id)\n\n return () => {\n state.registeredActions.delete(id)\n }\n}\n\nexport function setQuery(query: string, store: SpotlightStore) {\n updateSpotlightStateAction(() => ({ query }), store)\n Promise.resolve().then(() => {\n selectAction(0, store)\n updateSpotlightStateAction(\n (state) => ({\n empty: (state.query.trim().length > 0 && state.registeredActions.size === 0) || false,\n }),\n store,\n )\n })\n}\n\nexport function clearSpotlightState(\n { clearQuery }: { clearQuery: boolean | undefined },\n store: SpotlightStore,\n) {\n store.setState((state) => ({\n ...state,\n selected: -1,\n query: clearQuery ? '' : state.query,\n empty: clearQuery ? false : state.empty,\n }))\n}\n\nexport const spotlightActions = {\n open: openSpotlightAction,\n close: closeSpotlightAction,\n toggle: toggleSpotlightAction,\n updateState: updateSpotlightStateAction,\n setSelectedAction,\n setListId,\n selectAction,\n selectNextAction,\n selectPreviousAction,\n triggerSelectedAction,\n registerAction,\n setQuery,\n clearSpotlightState,\n}\n\nexport function createSpotlight() {\n const store = createSpotlightStore()\n const actions = {\n open: () => openSpotlightAction(store),\n close: () => closeSpotlightAction(store),\n toggle: () => toggleSpotlightAction(store),\n }\n\n return [store, actions] as const\n}\n\nexport const [spotlightStore, spotlight] = createSpotlight()\nexport const { open: openSpotlight, close: closeSpotlight, toggle: toggleSpotlight } = spotlight\n","import type {\n SpotlightActionData,\n SpotlightActionGroupData,\n} from './components/Spotlight/Spotlight.types'\n\nexport function isActionsGroup(\n item: SpotlightActionData | SpotlightActionGroupData,\n): item is SpotlightActionGroupData {\n const group = item as SpotlightActionGroupData\n return group.group !== undefined && Array.isArray(group.actions)\n}\n","import type { InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\nimport type { SpotlightStore } from './spotlight.store'\n\nexport interface SpotlightContextValue {\n query: string\n setQuery: (query: string) => void\n getStyles: (selector: string, options?: Record<string, any>) => Record<string, any>\n store: SpotlightStore\n closeOnActionTrigger: boolean | undefined\n}\n\nconst SpotlightContextKey = Symbol('SpotlightContext') as InjectionKey<SpotlightContextValue>\n\nexport function provideSpotlightContext(value: SpotlightContextValue) {\n provide(SpotlightContextKey, value)\n}\n\nexport function useSpotlightContext() {\n const ctx = inject(SpotlightContextKey, null)\n\n if (ctx === null) {\n throw new Error('Spotlight component was not found in tree')\n }\n\n return ctx\n}\n","<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots } from 'vue'\nimport { Box, Highlight, UnstyledButton, hasNode, resolveNode, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport { spotlightActions } from '../../spotlight.store'\nimport type { SpotlightActionProps, SpotlightActionSlots } from './SpotlightAction.types'\n\ndefineOptions({ name: 'SpotlightAction', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightActionProps>(), {\n dimmedSections: true,\n highlightQuery: false,\n closeSpotlightOnTrigger: undefined,\n})\ndefineSlots<SpotlightActionSlots>()\nconst attrs = useAttrs()\nconst slots = useSlots()\nconst props = useProps('SpotlightAction', null, rawProps)\nconst ctx = useSpotlightContext()\nconst stylesApi = computed(() => ({ classNames: props.classNames, styles: props.styles }))\nconst leftSection = computed(() => resolveNode(props.leftSection, slots.leftSection))\nconst rightSection = computed(() => resolveNode(props.rightSection, slots.rightSection))\nconst renderLeftSection = () => leftSection.value\nconst renderRightSection = () => rightSection.value\nconst forwardedAttrs = computed(() => {\n const value = { ...attrs }\n delete value.onClick\n delete value.onMousedown\n return value\n})\n\nfunction mousedown(event: MouseEvent) {\n event.preventDefault()\n ;(attrs.onMousedown as ((event: MouseEvent) => void) | undefined)?.(event)\n}\n\nfunction click(event: MouseEvent) {\n ;(attrs.onClick as ((event: MouseEvent) => void) | undefined)?.(event)\n if (props.closeSpotlightOnTrigger ?? ctx.closeOnActionTrigger) {\n spotlightActions.close(ctx.store)\n }\n}\n</script>\n\n<template>\n <UnstyledButton\n v-bind=\"{\n ...forwardedAttrs,\n ...ctx.getStyles('action', { className: attrs.class, style: attrs.style, ...stylesApi }),\n }\"\n data-action\n :tabindex=\"-1\"\n @mousedown=\"mousedown\"\n @click=\"click\"\n >\n <slot v-if=\"$slots.default\" />\n <template v-else>\n <Box\n v-if=\"hasNode(leftSection)\"\n component=\"span\"\n :mod=\"{ position: 'left', dimmed: props.dimmedSections }\"\n v-bind=\"ctx.getStyles('actionSection', stylesApi)\"\n >\n <component :is=\"renderLeftSection\" />\n </Box>\n <span v-bind=\"ctx.getStyles('actionBody', stylesApi)\">\n <Highlight\n v-if=\"props.highlightQuery && typeof props.label === 'string'\"\n component=\"span\"\n :highlight=\"ctx.query\"\n :color=\"props.highlightColor\"\n v-bind=\"ctx.getStyles('actionLabel', stylesApi)\"\n >\n {{ props.label }}\n </Highlight>\n <span v-else v-bind=\"ctx.getStyles('actionLabel', stylesApi)\">{{ props.label }}</span>\n <span v-bind=\"ctx.getStyles('actionDescription', stylesApi)\">{{ props.description }}</span>\n </span>\n <Box\n v-if=\"hasNode(rightSection)\"\n component=\"span\"\n :mod=\"{ position: 'right', dimmed: props.dimmedSections }\"\n v-bind=\"ctx.getStyles('actionSection', stylesApi)\"\n >\n <component :is=\"renderRightSection\" />\n </Box>\n </template>\n </UnstyledButton>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs, useSlots } from 'vue'\nimport { Box, Highlight, UnstyledButton, hasNode, resolveNode, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport { spotlightActions } from '../../spotlight.store'\nimport type { SpotlightActionProps, SpotlightActionSlots } from './SpotlightAction.types'\n\ndefineOptions({ name: 'SpotlightAction', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightActionProps>(), {\n dimmedSections: true,\n highlightQuery: false,\n closeSpotlightOnTrigger: undefined,\n})\ndefineSlots<SpotlightActionSlots>()\nconst attrs = useAttrs()\nconst slots = useSlots()\nconst props = useProps('SpotlightAction', null, rawProps)\nconst ctx = useSpotlightContext()\nconst stylesApi = computed(() => ({ classNames: props.classNames, styles: props.styles }))\nconst leftSection = computed(() => resolveNode(props.leftSection, slots.leftSection))\nconst rightSection = computed(() => resolveNode(props.rightSection, slots.rightSection))\nconst renderLeftSection = () => leftSection.value\nconst renderRightSection = () => rightSection.value\nconst forwardedAttrs = computed(() => {\n const value = { ...attrs }\n delete value.onClick\n delete value.onMousedown\n return value\n})\n\nfunction mousedown(event: MouseEvent) {\n event.preventDefault()\n ;(attrs.onMousedown as ((event: MouseEvent) => void) | undefined)?.(event)\n}\n\nfunction click(event: MouseEvent) {\n ;(attrs.onClick as ((event: MouseEvent) => void) | undefined)?.(event)\n if (props.closeSpotlightOnTrigger ?? ctx.closeOnActionTrigger) {\n spotlightActions.close(ctx.store)\n }\n}\n</script>\n\n<template>\n <UnstyledButton\n v-bind=\"{\n ...forwardedAttrs,\n ...ctx.getStyles('action', { className: attrs.class, style: attrs.style, ...stylesApi }),\n }\"\n data-action\n :tabindex=\"-1\"\n @mousedown=\"mousedown\"\n @click=\"click\"\n >\n <slot v-if=\"$slots.default\" />\n <template v-else>\n <Box\n v-if=\"hasNode(leftSection)\"\n component=\"span\"\n :mod=\"{ position: 'left', dimmed: props.dimmedSections }\"\n v-bind=\"ctx.getStyles('actionSection', stylesApi)\"\n >\n <component :is=\"renderLeftSection\" />\n </Box>\n <span v-bind=\"ctx.getStyles('actionBody', stylesApi)\">\n <Highlight\n v-if=\"props.highlightQuery && typeof props.label === 'string'\"\n component=\"span\"\n :highlight=\"ctx.query\"\n :color=\"props.highlightColor\"\n v-bind=\"ctx.getStyles('actionLabel', stylesApi)\"\n >\n {{ props.label }}\n </Highlight>\n <span v-else v-bind=\"ctx.getStyles('actionLabel', stylesApi)\">{{ props.label }}</span>\n <span v-bind=\"ctx.getStyles('actionDescription', stylesApi)\">{{ props.description }}</span>\n </span>\n <Box\n v-if=\"hasNode(rightSection)\"\n component=\"span\"\n :mod=\"{ position: 'right', dimmed: props.dimmedSections }\"\n v-bind=\"ctx.getStyles('actionSection', stylesApi)\"\n >\n <component :is=\"renderRightSection\" />\n </Box>\n </template>\n </UnstyledButton>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport type { SpotlightActionsGroupProps } from './SpotlightActionsGroup.types'\n\ndefineOptions({ name: 'SpotlightActionsGroup', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightActionsGroupProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightActionsGroup', null, rawProps)\nconst ctx = useSpotlightContext()\nconst groupStyles = computed(() =>\n ctx.getStyles('actionsGroup', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n)\nconst labelVariable = computed(() => ({\n '--spotlight-label': `'${props.label?.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`,\n}))\n</script>\n\n<template>\n <Box\n v-bind=\"{ ...attrs, ...groupStyles }\"\n :style=\"[groupStyles.style, attrs.style, labelVariable]\"\n >\n <slot />\n </Box>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport type { SpotlightActionsGroupProps } from './SpotlightActionsGroup.types'\n\ndefineOptions({ name: 'SpotlightActionsGroup', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightActionsGroupProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightActionsGroup', null, rawProps)\nconst ctx = useSpotlightContext()\nconst groupStyles = computed(() =>\n ctx.getStyles('actionsGroup', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n)\nconst labelVariable = computed(() => ({\n '--spotlight-label': `'${props.label?.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`,\n}))\n</script>\n\n<template>\n <Box\n v-bind=\"{ ...attrs, ...groupStyles }\"\n :style=\"[groupStyles.style, attrs.style, labelVariable]\"\n >\n <slot />\n </Box>\n</template>\n","<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, useAttrs } from 'vue'\nimport { ScrollAreaAutosize, useProps } from '@mantine-vue/core'\nimport { useId } from '@mantine-vue/hooks'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport { spotlightActions } from '../../spotlight.store'\nimport type { SpotlightActionsListProps } from './SpotlightActionsList.types'\n\ndefineOptions({ name: 'SpotlightActionsList', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightActionsListProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightActionsList', null, rawProps)\nconst ctx = useSpotlightContext()\nconst generatedId = useId()\nconst listId = props.id || `mantine-${generatedId.value.replace(/:/g, '')}`\nonMounted(() => spotlightActions.setListId(listId, ctx.store))\nonBeforeUnmount(() => spotlightActions.setListId('', ctx.store))\n</script>\n\n<template>\n <ScrollAreaAutosize\n v-bind=\"{\n ...attrs,\n ...ctx.getStyles('actionsList', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n }\"\n type=\"scroll\"\n scrollbar-size=\"var(--spotlight-actions-list-padding)\"\n offset-scrollbars=\"y\"\n :id=\"listId\"\n >\n <slot />\n </ScrollAreaAutosize>\n</template>\n","<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, useAttrs } from 'vue'\nimport { ScrollAreaAutosize, useProps } from '@mantine-vue/core'\nimport { useId } from '@mantine-vue/hooks'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport { spotlightActions } from '../../spotlight.store'\nimport type { SpotlightActionsListProps } from './SpotlightActionsList.types'\n\ndefineOptions({ name: 'SpotlightActionsList', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightActionsListProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightActionsList', null, rawProps)\nconst ctx = useSpotlightContext()\nconst generatedId = useId()\nconst listId = props.id || `mantine-${generatedId.value.replace(/:/g, '')}`\nonMounted(() => spotlightActions.setListId(listId, ctx.store))\nonBeforeUnmount(() => spotlightActions.setListId('', ctx.store))\n</script>\n\n<template>\n <ScrollAreaAutosize\n v-bind=\"{\n ...attrs,\n ...ctx.getStyles('actionsList', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n }\"\n type=\"scroll\"\n scrollbar-size=\"var(--spotlight-actions-list-padding)\"\n offset-scrollbars=\"y\"\n :id=\"listId\"\n >\n <slot />\n </ScrollAreaAutosize>\n</template>\n","<script setup lang=\"ts\">\nimport { useAttrs } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport type { SpotlightEmptyProps } from './SpotlightEmpty.types'\n\ndefineOptions({ name: 'SpotlightEmpty', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightEmptyProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightEmpty', null, rawProps)\nconst ctx = useSpotlightContext()\n</script>\n\n<template>\n <Box\n v-bind=\"{\n ...attrs,\n ...ctx.getStyles('empty', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n }\"\n >\n <slot />\n </Box>\n</template>\n","<script setup lang=\"ts\">\nimport { useAttrs } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport type { SpotlightEmptyProps } from './SpotlightEmpty.types'\n\ndefineOptions({ name: 'SpotlightEmpty', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightEmptyProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightEmpty', null, rawProps)\nconst ctx = useSpotlightContext()\n</script>\n\n<template>\n <Box\n v-bind=\"{\n ...attrs,\n ...ctx.getStyles('empty', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n }\"\n >\n <slot />\n </Box>\n</template>\n","import type { HotkeyItem } from '@mantine-vue/hooks'\nimport type { SpotlightStore } from './spotlight.store'\nimport { spotlightActions } from './spotlight.store'\n\nexport function getHotkeys(\n hotkeys: string | string[] | null | undefined,\n store: SpotlightStore,\n): HotkeyItem[] {\n if (!hotkeys) {\n return []\n }\n\n const open = () => spotlightActions.open(store)\n\n if (Array.isArray(hotkeys)) {\n return hotkeys.map((hotkey) => [hotkey, open])\n }\n\n return [[hotkeys, open]]\n}\n","export function mergeClassNames(...items: any[]) {\n return items.reduce<Record<string, any>>((acc, item) => {\n if (!item || typeof item !== 'object' || Array.isArray(item)) {\n return acc\n }\n\n Object.entries(item).forEach(([key, value]) => {\n acc[key] = acc[key] ? [acc[key], value] : value\n })\n\n return acc\n }, {})\n}\n\nexport function mergeStyles(...items: any[]) {\n return items.reduce<Record<string, any>>((acc, item) => {\n if (!item || typeof item !== 'object' || Array.isArray(item)) {\n return acc\n }\n\n Object.entries(item).forEach(([key, value]) => {\n acc[key] = acc[key] ? [acc[key], value] : value\n })\n\n return acc\n }, {})\n}\n\nexport function renderContent(value: any) {\n return typeof value === 'function' ? value() : value\n}\n",".root {\n &[data-scrollable] {\n --spotlight-content-height: 100%;\n }\n}\n\n.content {\n overflow: hidden;\n height: var(--spotlight-content-height, auto);\n max-height: var(--spotlight-max-height);\n}\n\n.body {\n display: flex;\n flex-direction: column;\n height: var(--spotlight-content-height, auto);\n}\n\n.search {\n border: 0;\n background-color: transparent;\n}\n\n.actionsList {\n --spotlight-actions-list-padding: 4px;\n\n border-top: 1px solid;\n flex: 1;\n padding: var(--spotlight-actions-list-padding);\n max-height: calc(100vh - 15rem);\n margin-inline-end: calc(var(--spotlight-actions-list-padding) * -1);\n width: 100%;\n\n @mixin where-light {\n border-color: var(--mantine-color-gray-2);\n }\n\n @mixin where-dark {\n border-color: var(--mantine-color-dark-4);\n }\n}\n\n.action {\n display: flex;\n align-items: center;\n width: 100%;\n padding: 7px var(--mantine-spacing-md);\n border-radius: var(--mantine-radius-default);\n background-color: transparent;\n color: inherit;\n text-align: start;\n\n &:where(:not([data-selected])) {\n @mixin hover {\n @mixin where-light {\n background-color: var(--mantine-color-gray-0);\n }\n\n @mixin where-dark {\n background-color: var(--mantine-color-dark-6);\n }\n }\n }\n\n &:where([data-selected]) {\n background-color: var(--mantine-primary-color-filled);\n color: var(--mantine-primary-color-contrast, var(--mantine-color-white));\n --action-description-color: var(--mantine-primary-color-contrast, var(--mantine-color-white));\n --action-description-opacity: 0.7;\n }\n}\n\n.actionBody {\n flex: 1;\n}\n\n.actionSection {\n opacity: 1;\n color: inherit;\n\n &:where([data-dimmed]) {\n opacity: var(--action-description-opacity, 1);\n color: var(--action-description-color, var(--mantine-color-dimmed));\n }\n\n &:where([data-position='left']) {\n margin-inline-end: var(--mantine-spacing-md);\n }\n\n &:where([data-position='right']) {\n margin-inline-start: var(--mantine-spacing-md);\n }\n\n & > svg {\n display: block;\n }\n}\n\n.actionLabel {\n display: block;\n}\n\n.actionDescription {\n display: block;\n font-size: var(--mantine-font-size-xs);\n opacity: var(--action-description-opacity, 1);\n color: var(--action-description-color, var(--mantine-color-dimmed));\n}\n\n.empty {\n color: var(--mantine-color-dimmed);\n padding: var(--mantine-spacing-md);\n text-align: center;\n}\n\n.footer {\n padding: var(--mantine-spacing-xs) calc(var(--mantine-spacing-md) + rem(4px));\n border-top: 1px solid;\n\n @mixin where-light {\n border-color: var(--mantine-color-gray-2);\n }\n\n @mixin where-dark {\n border-color: var(--mantine-color-dark-4);\n }\n}\n\n.actionsGroup {\n display: flex;\n flex-direction: column;\n margin-top: var(--mantine-spacing-md);\n\n &::before {\n content: var(--spotlight-label);\n text-transform: uppercase;\n font-size: var(--mantine-font-size-xs);\n font-weight: var(--mantine-font-weight-bold);\n color: var(--mantine-color-dimmed);\n padding-inline-start: var(--mantine-spacing-md);\n }\n\n &:empty {\n display: none;\n }\n}\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs, watch } from 'vue'\nimport { Modal, getDefaultZIndex, rem, useProps, useStyles } from '@mantine-vue/core'\nimport { useHotkeys } from '@mantine-vue/hooks'\nimport { getHotkeys } from '../../get-hotkeys'\nimport { provideSpotlightContext } from '../../Spotlight.context'\nimport { mergeClassNames, mergeStyles } from '../../style-api'\nimport { spotlightActions, spotlightStore, useSpotlight } from '../../spotlight.store'\nimport type {\n SpotlightRootEmits,\n SpotlightRootProps,\n SpotlightRootSlots,\n} from './SpotlightRoot.types'\nimport classes from '../../Spotlight.module.css'\n\ndefineOptions({ name: 'SpotlightRoot', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightRootProps>(), {\n store: () => spotlightStore,\n clearQueryOnClose: true,\n shortcut: 'mod + K',\n disabled: false,\n forceOpened: false,\n closeOnActionTrigger: true,\n maxHeight: 400,\n scrollable: false,\n})\nconst emit = defineEmits<SpotlightRootEmits>()\ndefineSlots<SpotlightRootSlots>()\nconst attrs = useAttrs()\nconst props = useProps(\n 'SpotlightRoot',\n {\n size: 600,\n yOffset: 80,\n zIndex: getDefaultZIndex('max'),\n overlayProps: { backgroundOpacity: 0.35, blur: 7 },\n transitionProps: { duration: 200, transition: 'pop' },\n },\n rawProps,\n)\nconst state = useSpotlight(props.store)\nconst previousOpened = ref(state.value.opened)\nconst currentQuery = computed(() =>\n typeof props.query === 'string' ? props.query : state.value.query,\n)\n\nfunction setQuery(query: string) {\n emit('update:query', query)\n emit('query-change', query)\n spotlightActions.setQuery(query, props.store)\n}\n\nconst getStyles = useStyles({\n name: 'Spotlight',\n classes,\n props,\n attrs,\n classNames: props.classNames as any,\n styles: props.styles as any,\n unstyled: props.unstyled,\n vars: props.vars as any,\n})\n\nprovideSpotlightContext({\n get query() {\n return currentQuery.value\n },\n setQuery,\n getStyles,\n store: props.store,\n get closeOnActionTrigger() {\n return props.closeOnActionTrigger\n },\n})\n\nuseHotkeys(\n () => getHotkeys(props.shortcut, props.store),\n () => props.tagsToIgnore,\n () => props.triggerOnContentEditable,\n)\n\nwatch(\n () => state.value.opened,\n (opened) => {\n if (opened === previousOpened.value) return\n if (opened) emit('spotlight-open')\n else emit('spotlight-close')\n previousOpened.value = opened\n },\n)\n\nconst rootStyles = computed(() =>\n getStyles('root', { className: attrs.class, style: attrs.style as any }),\n)\nconst modalAttrs = computed(() => {\n const value = { ...attrs, ...props }\n for (const key of [\n 'classNames',\n 'styles',\n 'vars',\n 'unstyled',\n 'store',\n 'query',\n 'clearQueryOnClose',\n 'shortcut',\n 'tagsToIgnore',\n 'triggerOnContentEditable',\n 'disabled',\n 'forceOpened',\n 'closeOnActionTrigger',\n 'maxHeight',\n 'scrollable',\n 'class',\n 'style',\n ])\n delete value[key]\n return value\n})\n\nfunction close() {\n spotlightActions.close(props.store)\n}\n\nfunction exitTransitionEnd() {\n if (props.clearQueryOnClose) setQuery('')\n spotlightActions.clearSpotlightState({ clearQuery: props.clearQueryOnClose }, props.store)\n props.transitionProps?.onExited?.()\n emit('exit-transition-end')\n}\n</script>\n\n<template>\n <Modal\n v-if=\"!props.disabled\"\n v-bind=\"modalAttrs\"\n :with-close-button=\"false\"\n :opened=\"state.opened || props.forceOpened\"\n :padding=\"0\"\n :class=\"rootStyles.class\"\n :style=\"rootStyles.style\"\n :class-names=\"\n mergeClassNames({ body: classes.body, content: classes.content }, props.classNames)\n \"\n :styles=\"mergeStyles(props.styles)\"\n :vars=\"\n mergeStyles(\n { root: { '--spotlight-max-height': props.scrollable ? rem(props.maxHeight) : undefined } },\n props.vars,\n )\n \"\n :data-scrollable=\"props.scrollable || undefined\"\n @close=\"close\"\n @exit-transition-end=\"exitTransitionEnd\"\n >\n <slot />\n </Modal>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs, watch } from 'vue'\nimport { Modal, getDefaultZIndex, rem, useProps, useStyles } from '@mantine-vue/core'\nimport { useHotkeys } from '@mantine-vue/hooks'\nimport { getHotkeys } from '../../get-hotkeys'\nimport { provideSpotlightContext } from '../../Spotlight.context'\nimport { mergeClassNames, mergeStyles } from '../../style-api'\nimport { spotlightActions, spotlightStore, useSpotlight } from '../../spotlight.store'\nimport type {\n SpotlightRootEmits,\n SpotlightRootProps,\n SpotlightRootSlots,\n} from './SpotlightRoot.types'\nimport classes from '../../Spotlight.module.css'\n\ndefineOptions({ name: 'SpotlightRoot', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightRootProps>(), {\n store: () => spotlightStore,\n clearQueryOnClose: true,\n shortcut: 'mod + K',\n disabled: false,\n forceOpened: false,\n closeOnActionTrigger: true,\n maxHeight: 400,\n scrollable: false,\n})\nconst emit = defineEmits<SpotlightRootEmits>()\ndefineSlots<SpotlightRootSlots>()\nconst attrs = useAttrs()\nconst props = useProps(\n 'SpotlightRoot',\n {\n size: 600,\n yOffset: 80,\n zIndex: getDefaultZIndex('max'),\n overlayProps: { backgroundOpacity: 0.35, blur: 7 },\n transitionProps: { duration: 200, transition: 'pop' },\n },\n rawProps,\n)\nconst state = useSpotlight(props.store)\nconst previousOpened = ref(state.value.opened)\nconst currentQuery = computed(() =>\n typeof props.query === 'string' ? props.query : state.value.query,\n)\n\nfunction setQuery(query: string) {\n emit('update:query', query)\n emit('query-change', query)\n spotlightActions.setQuery(query, props.store)\n}\n\nconst getStyles = useStyles({\n name: 'Spotlight',\n classes,\n props,\n attrs,\n classNames: props.classNames as any,\n styles: props.styles as any,\n unstyled: props.unstyled,\n vars: props.vars as any,\n})\n\nprovideSpotlightContext({\n get query() {\n return currentQuery.value\n },\n setQuery,\n getStyles,\n store: props.store,\n get closeOnActionTrigger() {\n return props.closeOnActionTrigger\n },\n})\n\nuseHotkeys(\n () => getHotkeys(props.shortcut, props.store),\n () => props.tagsToIgnore,\n () => props.triggerOnContentEditable,\n)\n\nwatch(\n () => state.value.opened,\n (opened) => {\n if (opened === previousOpened.value) return\n if (opened) emit('spotlight-open')\n else emit('spotlight-close')\n previousOpened.value = opened\n },\n)\n\nconst rootStyles = computed(() =>\n getStyles('root', { className: attrs.class, style: attrs.style as any }),\n)\nconst modalAttrs = computed(() => {\n const value = { ...attrs, ...props }\n for (const key of [\n 'classNames',\n 'styles',\n 'vars',\n 'unstyled',\n 'store',\n 'query',\n 'clearQueryOnClose',\n 'shortcut',\n 'tagsToIgnore',\n 'triggerOnContentEditable',\n 'disabled',\n 'forceOpened',\n 'closeOnActionTrigger',\n 'maxHeight',\n 'scrollable',\n 'class',\n 'style',\n ])\n delete value[key]\n return value\n})\n\nfunction close() {\n spotlightActions.close(props.store)\n}\n\nfunction exitTransitionEnd() {\n if (props.clearQueryOnClose) setQuery('')\n spotlightActions.clearSpotlightState({ clearQuery: props.clearQueryOnClose }, props.store)\n props.transitionProps?.onExited?.()\n emit('exit-transition-end')\n}\n</script>\n\n<template>\n <Modal\n v-if=\"!props.disabled\"\n v-bind=\"modalAttrs\"\n :with-close-button=\"false\"\n :opened=\"state.opened || props.forceOpened\"\n :padding=\"0\"\n :class=\"rootStyles.class\"\n :style=\"rootStyles.style\"\n :class-names=\"\n mergeClassNames({ body: classes.body, content: classes.content }, props.classNames)\n \"\n :styles=\"mergeStyles(props.styles)\"\n :vars=\"\n mergeStyles(\n { root: { '--spotlight-max-height': props.scrollable ? rem(props.maxHeight) : undefined } },\n props.vars,\n )\n \"\n :data-scrollable=\"props.scrollable || undefined\"\n @close=\"close\"\n @exit-transition-end=\"exitTransitionEnd\"\n >\n <slot />\n </Modal>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs } from 'vue'\nimport { Input, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport { spotlightActions } from '../../spotlight.store'\nimport { mergeClassNames, mergeStyles } from '../../style-api'\nimport type { SpotlightSearchEmits, SpotlightSearchProps } from './SpotlightSearch.types'\n\ndefineOptions({ name: 'SpotlightSearch', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightSearchProps>(), { size: 'lg' })\nconst emit = defineEmits<SpotlightSearchEmits>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightSearch', null, rawProps)\nconst ctx = useSpotlightContext()\nconst isComposing = ref(false)\nconst inputStyles = computed(() => ctx.getStyles('search'))\nconst forwardedAttrs = computed(() => {\n const value = { ...attrs }\n delete value.onInput\n delete value.onKeydown\n delete value.onCompositionstart\n delete value.onCompositionend\n return value\n})\n\nfunction input(event: Event) {\n const value = (event.currentTarget as HTMLInputElement).value\n ctx.setQuery(value)\n emit('update:modelValue', value)\n emit('change', value)\n}\n\nfunction keydown(event: KeyboardEvent) {\n emit('keydown', event)\n if (isComposing.value) return\n if (event.code === 'ArrowDown') {\n event.preventDefault()\n spotlightActions.selectNextAction(ctx.store)\n }\n if (event.code === 'ArrowUp') {\n event.preventDefault()\n spotlightActions.selectPreviousAction(ctx.store)\n }\n if (event.code === 'Enter' || event.code === 'NumpadEnter') {\n event.preventDefault()\n spotlightActions.triggerSelectedAction(ctx.store)\n }\n}\n</script>\n\n<template>\n <Input\n v-bind=\"forwardedAttrs\"\n :size=\"props.size\"\n :value=\"props.modelValue ?? ctx.query\"\n :class-names=\"mergeClassNames({ input: inputStyles.class }, props.classNames)\"\n :styles=\"mergeStyles({ input: inputStyles.style }, props.styles)\"\n :vars=\"props.vars\"\n @input=\"input\"\n @keydown=\"keydown\"\n @compositionstart=\"isComposing = true\"\n @compositionend=\"isComposing = false\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs } from 'vue'\nimport { Input, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport { spotlightActions } from '../../spotlight.store'\nimport { mergeClassNames, mergeStyles } from '../../style-api'\nimport type { SpotlightSearchEmits, SpotlightSearchProps } from './SpotlightSearch.types'\n\ndefineOptions({ name: 'SpotlightSearch', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightSearchProps>(), { size: 'lg' })\nconst emit = defineEmits<SpotlightSearchEmits>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightSearch', null, rawProps)\nconst ctx = useSpotlightContext()\nconst isComposing = ref(false)\nconst inputStyles = computed(() => ctx.getStyles('search'))\nconst forwardedAttrs = computed(() => {\n const value = { ...attrs }\n delete value.onInput\n delete value.onKeydown\n delete value.onCompositionstart\n delete value.onCompositionend\n return value\n})\n\nfunction input(event: Event) {\n const value = (event.currentTarget as HTMLInputElement).value\n ctx.setQuery(value)\n emit('update:modelValue', value)\n emit('change', value)\n}\n\nfunction keydown(event: KeyboardEvent) {\n emit('keydown', event)\n if (isComposing.value) return\n if (event.code === 'ArrowDown') {\n event.preventDefault()\n spotlightActions.selectNextAction(ctx.store)\n }\n if (event.code === 'ArrowUp') {\n event.preventDefault()\n spotlightActions.selectPreviousAction(ctx.store)\n }\n if (event.code === 'Enter' || event.code === 'NumpadEnter') {\n event.preventDefault()\n spotlightActions.triggerSelectedAction(ctx.store)\n }\n}\n</script>\n\n<template>\n <Input\n v-bind=\"forwardedAttrs\"\n :size=\"props.size\"\n :value=\"props.modelValue ?? ctx.query\"\n :class-names=\"mergeClassNames({ input: inputStyles.class }, props.classNames)\"\n :styles=\"mergeStyles({ input: inputStyles.style }, props.styles)\"\n :vars=\"props.vars\"\n @input=\"input\"\n @keydown=\"keydown\"\n @compositionstart=\"isComposing = true\"\n @compositionend=\"isComposing = false\"\n />\n</template>\n","import type {\n SpotlightActionData,\n SpotlightActionGroupData,\n SpotlightActions,\n SpotlightFilterFunction,\n} from './components/Spotlight/Spotlight.types'\n\nfunction getKeywords(keywords: string | string[] | undefined) {\n if (Array.isArray(keywords)) {\n return keywords\n .map((keyword) => keyword.trim())\n .join(',')\n .toLowerCase()\n .trim()\n }\n\n if (typeof keywords === 'string') {\n return keywords.toLowerCase().trim()\n }\n\n return ''\n}\n\nfunction getFlatActions(data: SpotlightActions[]) {\n return data.reduce<SpotlightActionData[]>((acc, item) => {\n if ('actions' in item) {\n return [\n ...acc,\n ...item.actions.map((action: SpotlightActionData) => ({ ...action, group: item.group })),\n ]\n }\n\n return [...acc, item]\n }, [])\n}\n\nfunction flatActionsToGroups(data: SpotlightActionData[]) {\n const groups: Record<string, { pushed: boolean; data: SpotlightActionGroupData }> = {}\n const result: SpotlightActions[] = []\n\n data.forEach((action) => {\n if (action.group) {\n if (!groups[action.group]) {\n groups[action.group] = { pushed: false, data: { group: action.group, actions: [] } }\n }\n\n groups[action.group].data.actions.push(action)\n\n if (!groups[action.group].pushed) {\n groups[action.group].pushed = true\n result.push(groups[action.group].data)\n }\n } else {\n result.push(action)\n }\n })\n\n return result\n}\n\nexport const defaultSpotlightFilter: SpotlightFilterFunction = (_query, data) => {\n const query = _query.trim().toLowerCase()\n const priorityMatrix: SpotlightActionData[][] = [[], []]\n const flatActions = getFlatActions(data)\n\n flatActions.forEach((item) => {\n if (item.label?.toLowerCase().includes(query)) {\n priorityMatrix[0].push(item)\n } else if (\n item.description?.toLowerCase().includes(query) ||\n getKeywords(item.keywords).includes(query)\n ) {\n priorityMatrix[1].push(item)\n }\n })\n\n return flatActionsToGroups(priorityMatrix.flat())\n}\n","import { isActionsGroup } from './is-actions-group'\nimport type { SpotlightActionData, SpotlightActions } from './components/Spotlight/Spotlight.types'\n\nexport function limitActions(actions: SpotlightActions[], limit: number) {\n if (!Array.isArray(actions)) {\n return []\n }\n\n let count = 0\n\n return actions.reduce<SpotlightActions[]>((acc, item) => {\n if (count >= limit) {\n return acc\n }\n\n if (isActionsGroup(item)) {\n const groupActions = limitActions(item.actions, limit - count)\n acc.push({\n group: item.group,\n actions: groupActions as SpotlightActionData[],\n })\n count += groupActions.length\n } else {\n acc.push(item)\n count += 1\n }\n\n return acc\n }, [])\n}\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs } from 'vue'\nimport { getDefaultZIndex, useProps } from '@mantine-vue/core'\nimport SpotlightAction from '../SpotlightAction/SpotlightAction.vue'\nimport SpotlightActionsGroup from '../SpotlightActionsGroup/SpotlightActionsGroup.vue'\nimport SpotlightActionsList from '../SpotlightActionsList/SpotlightActionsList.vue'\nimport SpotlightEmpty from '../SpotlightEmpty/SpotlightEmpty.vue'\nimport SpotlightRoot from '../SpotlightRoot/SpotlightRoot.vue'\nimport SpotlightSearch from '../SpotlightSearch/SpotlightSearch.vue'\nimport { defaultSpotlightFilter } from '../../default-spotlight-filter'\nimport { isActionsGroup } from '../../is-actions-group'\nimport { limitActions } from '../../limit-actions'\nimport { spotlightStore } from '../../spotlight.store'\nimport type { SpotlightActionData, SpotlightEmits, SpotlightProps } from './Spotlight.types'\n\ndefineOptions({ name: 'Spotlight', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightProps>(), {\n limit: Infinity,\n store: () => spotlightStore,\n filter: defaultSpotlightFilter,\n clearQueryOnClose: true,\n closeOnActionTrigger: true,\n shortcut: 'mod + K',\n highlightQuery: false,\n})\nconst emit = defineEmits<SpotlightEmits>()\nconst attrs = useAttrs()\nconst props = useProps(\n 'Spotlight',\n {\n size: 600,\n yOffset: 80,\n zIndex: getDefaultZIndex('max'),\n overlayProps: { backgroundOpacity: 0.35, blur: 7 },\n transitionProps: { duration: 200, transition: 'pop' },\n },\n rawProps,\n)\nconst uncontrolledQuery = ref('')\nconst currentQuery = computed(() =>\n typeof props.query === 'string' ? props.query : uncontrolledQuery.value,\n)\nconst filteredActions = computed(() =>\n limitActions(props.filter(currentQuery.value, props.actions), props.limit),\n)\nconst rootProps = computed(() => {\n const value = { ...attrs, ...props }\n for (const key of [\n 'searchProps',\n 'actions',\n 'filter',\n 'nothingFound',\n 'highlightQuery',\n 'limit',\n 'scrollAreaProps',\n 'query',\n ])\n delete value[key]\n return value\n})\n\nfunction setQuery(query: string) {\n if (typeof props.query !== 'string') uncontrolledQuery.value = query\n emit('update:query', query)\n emit('query-change', query)\n}\n\nfunction actionProps(action: SpotlightActionData) {\n const value = { ...action }\n delete (value as Partial<SpotlightActionData>).id\n delete (value as Partial<SpotlightActionData>).group\n return value\n}\n\nconst renderNothingFound = () =>\n typeof props.nothingFound === 'function' ? props.nothingFound() : props.nothingFound\n</script>\n\n<template>\n <SpotlightRoot v-bind=\"rootProps\" :query=\"currentQuery\" @query-change=\"setQuery\">\n <SpotlightSearch v-bind=\"props.searchProps\" />\n <SpotlightActionsList v-if=\"filteredActions.length\" v-bind=\"props.scrollAreaProps\">\n <template v-for=\"item in filteredActions\" :key=\"isActionsGroup(item) ? item.group : item.id\">\n <SpotlightActionsGroup v-if=\"isActionsGroup(item)\" :label=\"item.group\">\n <SpotlightAction\n v-for=\"action in item.actions\"\n :key=\"action.id\"\n v-bind=\"actionProps(action)\"\n :highlight-query=\"props.highlightQuery\"\n />\n </SpotlightActionsGroup>\n <SpotlightAction\n v-else\n v-bind=\"actionProps(item)\"\n :highlight-query=\"props.highlightQuery\"\n />\n </template>\n </SpotlightActionsList>\n <SpotlightEmpty v-else-if=\"props.nothingFound\">\n <component :is=\"renderNothingFound\" />\n </SpotlightEmpty>\n </SpotlightRoot>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, useAttrs } from 'vue'\nimport { getDefaultZIndex, useProps } from '@mantine-vue/core'\nimport SpotlightAction from '../SpotlightAction/SpotlightAction.vue'\nimport SpotlightActionsGroup from '../SpotlightActionsGroup/SpotlightActionsGroup.vue'\nimport SpotlightActionsList from '../SpotlightActionsList/SpotlightActionsList.vue'\nimport SpotlightEmpty from '../SpotlightEmpty/SpotlightEmpty.vue'\nimport SpotlightRoot from '../SpotlightRoot/SpotlightRoot.vue'\nimport SpotlightSearch from '../SpotlightSearch/SpotlightSearch.vue'\nimport { defaultSpotlightFilter } from '../../default-spotlight-filter'\nimport { isActionsGroup } from '../../is-actions-group'\nimport { limitActions } from '../../limit-actions'\nimport { spotlightStore } from '../../spotlight.store'\nimport type { SpotlightActionData, SpotlightEmits, SpotlightProps } from './Spotlight.types'\n\ndefineOptions({ name: 'Spotlight', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<SpotlightProps>(), {\n limit: Infinity,\n store: () => spotlightStore,\n filter: defaultSpotlightFilter,\n clearQueryOnClose: true,\n closeOnActionTrigger: true,\n shortcut: 'mod + K',\n highlightQuery: false,\n})\nconst emit = defineEmits<SpotlightEmits>()\nconst attrs = useAttrs()\nconst props = useProps(\n 'Spotlight',\n {\n size: 600,\n yOffset: 80,\n zIndex: getDefaultZIndex('max'),\n overlayProps: { backgroundOpacity: 0.35, blur: 7 },\n transitionProps: { duration: 200, transition: 'pop' },\n },\n rawProps,\n)\nconst uncontrolledQuery = ref('')\nconst currentQuery = computed(() =>\n typeof props.query === 'string' ? props.query : uncontrolledQuery.value,\n)\nconst filteredActions = computed(() =>\n limitActions(props.filter(currentQuery.value, props.actions), props.limit),\n)\nconst rootProps = computed(() => {\n const value = { ...attrs, ...props }\n for (const key of [\n 'searchProps',\n 'actions',\n 'filter',\n 'nothingFound',\n 'highlightQuery',\n 'limit',\n 'scrollAreaProps',\n 'query',\n ])\n delete value[key]\n return value\n})\n\nfunction setQuery(query: string) {\n if (typeof props.query !== 'string') uncontrolledQuery.value = query\n emit('update:query', query)\n emit('query-change', query)\n}\n\nfunction actionProps(action: SpotlightActionData) {\n const value = { ...action }\n delete (value as Partial<SpotlightActionData>).id\n delete (value as Partial<SpotlightActionData>).group\n return value\n}\n\nconst renderNothingFound = () =>\n typeof props.nothingFound === 'function' ? props.nothingFound() : props.nothingFound\n</script>\n\n<template>\n <SpotlightRoot v-bind=\"rootProps\" :query=\"currentQuery\" @query-change=\"setQuery\">\n <SpotlightSearch v-bind=\"props.searchProps\" />\n <SpotlightActionsList v-if=\"filteredActions.length\" v-bind=\"props.scrollAreaProps\">\n <template v-for=\"item in filteredActions\" :key=\"isActionsGroup(item) ? item.group : item.id\">\n <SpotlightActionsGroup v-if=\"isActionsGroup(item)\" :label=\"item.group\">\n <SpotlightAction\n v-for=\"action in item.actions\"\n :key=\"action.id\"\n v-bind=\"actionProps(action)\"\n :highlight-query=\"props.highlightQuery\"\n />\n </SpotlightActionsGroup>\n <SpotlightAction\n v-else\n v-bind=\"actionProps(item)\"\n :highlight-query=\"props.highlightQuery\"\n />\n </template>\n </SpotlightActionsList>\n <SpotlightEmpty v-else-if=\"props.nothingFound\">\n <component :is=\"renderNothingFound\" />\n </SpotlightEmpty>\n </SpotlightRoot>\n</template>\n","import SpotlightActionComponent from './SpotlightAction.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightAction = Object.assign(SpotlightActionComponent, { classes })\nexport type {\n SpotlightActionProps,\n SpotlightActionSlots,\n SpotlightActionStylesNames,\n} from './SpotlightAction.types'\n","import SpotlightActionsGroupComponent from './SpotlightActionsGroup.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightActionsGroup = Object.assign(SpotlightActionsGroupComponent, { classes })\nexport type {\n SpotlightActionsGroupProps,\n SpotlightActionsGroupStylesNames,\n} from './SpotlightActionsGroup.types'\n","import SpotlightActionsListComponent from './SpotlightActionsList.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightActionsList = Object.assign(SpotlightActionsListComponent, { classes })\nexport type {\n SpotlightActionsListProps,\n SpotlightActionsListStylesNames,\n} from './SpotlightActionsList.types'\n","import SpotlightEmptyComponent from './SpotlightEmpty.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightEmpty = Object.assign(SpotlightEmptyComponent, { classes })\nexport type { SpotlightEmptyProps, SpotlightEmptyStylesNames } from './SpotlightEmpty.types'\n","<script setup lang=\"ts\">\nimport { useAttrs } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport type { SpotlightFooterProps } from './SpotlightFooter.types'\n\ndefineOptions({ name: 'SpotlightFooter', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightFooterProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightFooter', null, rawProps)\nconst ctx = useSpotlightContext()\n</script>\n\n<template>\n <Box\n v-bind=\"{\n ...attrs,\n ...ctx.getStyles('footer', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n }\"\n >\n <slot />\n </Box>\n</template>\n","<script setup lang=\"ts\">\nimport { useAttrs } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from '../../Spotlight.context'\nimport type { SpotlightFooterProps } from './SpotlightFooter.types'\n\ndefineOptions({ name: 'SpotlightFooter', inheritAttrs: false })\nconst rawProps = defineProps<SpotlightFooterProps>()\nconst attrs = useAttrs()\nconst props = useProps('SpotlightFooter', null, rawProps)\nconst ctx = useSpotlightContext()\n</script>\n\n<template>\n <Box\n v-bind=\"{\n ...attrs,\n ...ctx.getStyles('footer', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n }\"\n >\n <slot />\n </Box>\n</template>\n","import SpotlightFooterComponent from './SpotlightFooter.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightFooter = Object.assign(SpotlightFooterComponent, { classes })\nexport type { SpotlightFooterProps, SpotlightFooterStylesNames } from './SpotlightFooter.types'\n","import SpotlightRootComponent from './SpotlightRoot.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightRoot = Object.assign(SpotlightRootComponent, { classes })\nexport type {\n SpotlightRootEmits,\n SpotlightRootProps,\n SpotlightRootSlots,\n SpotlightRootStylesNames,\n} from './SpotlightRoot.types'\n","import SpotlightSearchComponent from './SpotlightSearch.vue'\nimport classes from '../../Spotlight.module.css'\nexport const SpotlightSearch = Object.assign(SpotlightSearchComponent, { classes })\nexport type {\n SpotlightSearchEmits,\n SpotlightSearchProps,\n SpotlightSearchStylesNames,\n} from './SpotlightSearch.types'\n","import SpotlightComponent from './Spotlight.vue'\nimport { SpotlightAction } from '../SpotlightAction'\nimport { SpotlightActionsGroup } from '../SpotlightActionsGroup'\nimport { SpotlightActionsList } from '../SpotlightActionsList'\nimport { SpotlightEmpty } from '../SpotlightEmpty'\nimport { SpotlightFooter } from '../SpotlightFooter'\nimport { SpotlightRoot } from '../SpotlightRoot'\nimport { SpotlightSearch } from '../SpotlightSearch'\nimport { spotlight } from '../../spotlight.store'\nimport classes from '../../Spotlight.module.css'\n\nexport const Spotlight = Object.assign(SpotlightComponent, {\n classes,\n Search: SpotlightSearch,\n ActionsList: SpotlightActionsList,\n Action: SpotlightAction,\n Empty: SpotlightEmpty,\n Footer: SpotlightFooter,\n ActionsGroup: SpotlightActionsGroup,\n Root: SpotlightRoot,\n open: spotlight.open,\n close: spotlight.close,\n toggle: spotlight.toggle,\n})\n\nexport type {\n SpotlightActionData,\n SpotlightActionGroupData,\n SpotlightActions,\n SpotlightEmits,\n SpotlightFilterFunction,\n SpotlightProps,\n SpotlightStylesNames,\n} from './Spotlight.types'\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mantine-vue/spotlight",
3
- "version": "3.5.0",
3
+ "version": "3.6.0",
4
4
  "description": "Vue command center components equivalent to @mantine/spotlight",
5
5
  "license": "MIT",
6
6
  "files": [
@@ -36,9 +36,9 @@
36
36
  "vue": "^3.5.0"
37
37
  },
38
38
  "peerDependencies": {
39
- "@mantine-vue/core": "3.5.0",
40
- "@mantine-vue/hooks": "3.5.0",
41
- "@mantine-vue/store": "3.5.0",
39
+ "@mantine-vue/core": "3.6.0",
40
+ "@mantine-vue/hooks": "3.6.0",
41
+ "@mantine-vue/store": "3.6.0",
42
42
  "vue": "^3.5.0"
43
43
  }
44
44
  }