@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 +19 -4
- package/cjs/index.cjs.map +1 -1
- package/esm/index.mjs +19 -4
- package/esm/index.mjs.map +1 -1
- package/package.json +4 -4
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
|
-
|
|
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
|
-
|
|
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":"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"}
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
40
|
-
"@mantine-vue/hooks": "3.
|
|
41
|
-
"@mantine-vue/store": "3.
|
|
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
|
}
|