@mantine-vue/spotlight 3.0.0 → 3.2.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.
Files changed (42) hide show
  1. package/cjs/index.cjs +570 -624
  2. package/cjs/index.cjs.map +1 -1
  3. package/esm/index.mjs +571 -625
  4. package/esm/index.mjs.map +1 -1
  5. package/lib/components/Spotlight/Spotlight.types.d.ts +34 -0
  6. package/lib/components/Spotlight/Spotlight.vue.d.ts +15 -0
  7. package/lib/components/Spotlight/index.d.ts +224 -0
  8. package/lib/components/SpotlightAction/SpotlightAction.types.d.ts +34 -0
  9. package/lib/components/SpotlightAction/SpotlightAction.vue.d.ts +11 -0
  10. package/lib/components/SpotlightAction/index.d.ts +18 -0
  11. package/lib/components/SpotlightActionsGroup/SpotlightActionsGroup.types.d.ts +13 -0
  12. package/lib/components/SpotlightActionsGroup/SpotlightActionsGroup.vue.d.ts +13 -0
  13. package/lib/components/SpotlightActionsGroup/index.d.ts +20 -0
  14. package/lib/components/SpotlightActionsList/SpotlightActionsList.types.d.ts +13 -0
  15. package/lib/components/SpotlightActionsList/SpotlightActionsList.vue.d.ts +13 -0
  16. package/lib/components/SpotlightActionsList/index.d.ts +20 -0
  17. package/lib/components/SpotlightEmpty/SpotlightEmpty.types.d.ts +11 -0
  18. package/lib/components/SpotlightEmpty/SpotlightEmpty.vue.d.ts +13 -0
  19. package/lib/components/SpotlightEmpty/index.d.ts +20 -0
  20. package/lib/components/SpotlightFooter/SpotlightFooter.types.d.ts +11 -0
  21. package/lib/components/SpotlightFooter/SpotlightFooter.vue.d.ts +13 -0
  22. package/lib/components/SpotlightFooter/index.d.ts +20 -0
  23. package/lib/components/SpotlightRoot/SpotlightRoot.types.d.ts +53 -0
  24. package/lib/components/SpotlightRoot/SpotlightRoot.vue.d.ts +23 -0
  25. package/lib/components/SpotlightRoot/index.d.ts +48 -0
  26. package/lib/components/SpotlightSearch/SpotlightSearch.types.d.ts +25 -0
  27. package/lib/components/SpotlightSearch/SpotlightSearch.vue.d.ts +11 -0
  28. package/lib/components/SpotlightSearch/index.d.ts +36 -0
  29. package/lib/default-spotlight-filter.d.ts +1 -1
  30. package/lib/index.d.mts +16 -9
  31. package/lib/index.d.ts +16 -9
  32. package/lib/is-actions-group.d.ts +1 -1
  33. package/lib/limit-actions.d.ts +1 -1
  34. package/package.json +4 -4
  35. package/lib/Spotlight.d.ts +0 -934
  36. package/lib/SpotlightAction.d.ts +0 -134
  37. package/lib/SpotlightActionsGroup.d.ts +0 -50
  38. package/lib/SpotlightActionsList.d.ts +0 -50
  39. package/lib/SpotlightEmpty.d.ts +0 -40
  40. package/lib/SpotlightFooter.d.ts +0 -40
  41. package/lib/SpotlightRoot.d.ts +0 -192
  42. package/lib/SpotlightSearch.d.ts +0 -81
package/cjs/index.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":[],"sources":["../src/spotlight.store.ts","../src/is-actions-group.ts","../src/default-spotlight-filter.ts","../src/limit-actions.ts","../src/Spotlight.context.ts","../src/Spotlight.module.css","../src/SpotlightAction.ts","../src/SpotlightActionsGroup.ts","../src/SpotlightActionsList.ts","../src/SpotlightEmpty.ts","../src/SpotlightFooter.ts","../src/get-hotkeys.ts","../src/style-api.ts","../src/SpotlightRoot.ts","../src/SpotlightSearch.ts","../src/Spotlight.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 { SpotlightActionData, SpotlightActionGroupData } from './Spotlight'\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 {\n SpotlightActionData,\n SpotlightActionGroupData,\n SpotlightActions,\n SpotlightFilterFunction,\n} from './Spotlight'\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 './Spotlight'\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","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",".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","import { defineComponent, h, type PropType, type SlotsType, type VNodeChild } from 'vue'\nimport {\n Box,\n Highlight,\n UnstyledButton,\n hasNode,\n resolveNode,\n type MantineNode,\n type SectionSlots,\n useProps,\n} from '@mantine-vue/core'\nimport { useSpotlightContext } from './Spotlight.context'\nimport { spotlightActions } from './spotlight.store'\nimport classes from './Spotlight.module.css'\n\nexport type SpotlightActionStylesNames =\n | 'action'\n | 'actionLabel'\n | 'actionDescription'\n | 'actionSection'\n | 'actionBody'\n\nexport interface SpotlightActionProps {\n label?: string\n description?: string\n leftSection?: MantineNode\n rightSection?: MantineNode\n dimmedSections?: boolean\n highlightQuery?: boolean\n highlightColor?: string\n closeSpotlightOnTrigger?: boolean\n keywords?: string | string[]\n classNames?: Record<string, any>\n styles?: Record<string, any>\n vars?: Record<string, any>\n [key: string]: any\n}\n\nconst defaultProps = {\n dimmedSections: true,\n highlightQuery: false,\n} satisfies Partial<SpotlightActionProps>\n\nexport const SpotlightAction = defineComponent({\n name: 'SpotlightAction',\n inheritAttrs: false,\n slots: Object as SlotsType<SectionSlots & { default?: () => VNodeChild }>,\n props: {\n label: { type: String, default: undefined },\n description: { type: String, default: undefined },\n leftSection: { type: null as unknown as PropType<MantineNode>, default: undefined },\n rightSection: { type: null as unknown as PropType<MantineNode>, default: undefined },\n dimmedSections: { type: Boolean, default: undefined },\n highlightQuery: { type: Boolean, default: undefined },\n highlightColor: { type: String, default: undefined },\n closeSpotlightOnTrigger: { type: Boolean, default: undefined },\n keywords: { type: [String, Array] as PropType<string | string[]>, default: undefined },\n classNames: { type: [Object, Function], default: undefined },\n styles: { type: [Object, Function], default: undefined },\n vars: { type: [Object, Function], default: undefined },\n },\n setup(rawProps, { attrs, slots }) {\n const props = useProps<SpotlightActionProps>('SpotlightAction', defaultProps, rawProps as any)\n const ctx = useSpotlightContext()\n\n return () => {\n const stylesApi = { classNames: props.classNames, styles: props.styles }\n const leftSection = resolveNode(props.leftSection, slots.leftSection)\n const rightSection = resolveNode(props.rightSection, slots.rightSection)\n const labelNode =\n props.highlightQuery && typeof props.label === 'string'\n ? h(\n Highlight,\n {\n component: 'span',\n highlight: ctx.query,\n color: props.highlightColor,\n ...ctx.getStyles('actionLabel', stylesApi),\n },\n () => props.label,\n )\n : h('span', ctx.getStyles('actionLabel', stylesApi), props.label)\n\n return h(\n UnstyledButton,\n {\n ...attrs,\n 'data-action': true,\n ...ctx.getStyles('action', {\n className: attrs.class,\n style: attrs.style,\n ...stylesApi,\n }),\n onMousedown: (event: MouseEvent) => {\n event.preventDefault()\n ;(attrs.onMousedown as ((event: MouseEvent) => void) | undefined)?.(event)\n },\n onClick: (event: MouseEvent) => {\n ;(attrs.onClick as ((event: MouseEvent) => void) | undefined)?.(event)\n\n if (props.closeSpotlightOnTrigger ?? ctx.closeOnActionTrigger) {\n spotlightActions.close(ctx.store)\n }\n },\n tabindex: -1,\n },\n () =>\n slots.default?.() ?? [\n hasNode(leftSection)\n ? h(\n Box,\n {\n component: 'span',\n mod: { position: 'left', dimmed: props.dimmedSections },\n ...ctx.getStyles('actionSection', stylesApi),\n },\n () => leftSection,\n )\n : null,\n h('span', ctx.getStyles('actionBody', stylesApi), [\n labelNode,\n h('span', ctx.getStyles('actionDescription', stylesApi), props.description),\n ]),\n hasNode(rightSection)\n ? h(\n Box,\n {\n component: 'span',\n mod: { position: 'right', dimmed: props.dimmedSections },\n ...ctx.getStyles('actionSection', stylesApi),\n },\n () => rightSection,\n )\n : null,\n ],\n )\n }\n },\n})\n\nObject.assign(SpotlightAction, { classes })\n","import { defineComponent, h, type PropType } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from './Spotlight.context'\nimport classes from './Spotlight.module.css'\n\nexport type SpotlightActionsGroupStylesNames = 'actionsGroup'\n\nexport interface SpotlightActionsGroupProps {\n label?: string\n classNames?: Record<string, any>\n styles?: Record<string, any>\n [key: string]: any\n}\n\nexport const SpotlightActionsGroup = defineComponent({\n name: 'SpotlightActionsGroup',\n inheritAttrs: false,\n props: {\n label: { type: String, default: undefined },\n classNames: { type: [Object, Function], default: undefined },\n styles: { type: [Object, Function], default: undefined },\n vars: { type: [Object, Function] as PropType<any>, default: undefined },\n },\n setup(rawProps, { attrs, slots }) {\n const props = useProps<SpotlightActionsGroupProps>(\n 'SpotlightActionsGroup',\n null,\n rawProps as any,\n )\n const ctx = useSpotlightContext()\n\n return () =>\n h(\n Box,\n {\n ...attrs,\n ...ctx.getStyles('actionsGroup', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n style: [\n ctx.getStyles('actionsGroup', { styles: props.styles }).style,\n attrs.style as any,\n {\n '--spotlight-label': `'${props.label?.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`,\n },\n ],\n },\n () => slots.default?.(),\n )\n },\n})\n\nObject.assign(SpotlightActionsGroup, { classes })\n","import { defineComponent, h, onBeforeUnmount, onMounted, type PropType } 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 classes from './Spotlight.module.css'\n\nexport type SpotlightActionsListStylesNames = 'actionsList' | 'actionsListInner'\n\nexport interface SpotlightActionsListProps {\n id?: string\n classNames?: Record<string, any>\n styles?: Record<string, any>\n [key: string]: any\n}\n\nexport const SpotlightActionsList = defineComponent({\n name: 'SpotlightActionsList',\n inheritAttrs: false,\n props: {\n id: { type: String, default: undefined },\n classNames: { type: [Object, Function], default: undefined },\n styles: { type: [Object, Function], default: undefined },\n vars: { type: [Object, Function] as PropType<any>, default: undefined },\n },\n setup(rawProps, { attrs, slots }) {\n const props = useProps<SpotlightActionsListProps>('SpotlightActionsList', null, rawProps as any)\n const ctx = useSpotlightContext()\n const generatedId = useId()\n const listId = props.id || `mantine-${generatedId.value.replace(/:/g, '')}`\n\n onMounted(() => spotlightActions.setListId(listId, ctx.store))\n onBeforeUnmount(() => spotlightActions.setListId('', ctx.store))\n\n return () =>\n h(\n ScrollAreaAutosize,\n {\n ...attrs,\n ...ctx.getStyles('actionsList', {\n className: attrs.class,\n style: attrs.style,\n classNames: props.classNames,\n styles: props.styles,\n }),\n type: 'scroll',\n scrollbarSize: 'var(--spotlight-actions-list-padding)',\n offsetScrollbars: 'y',\n id: listId,\n },\n () => slots.default?.(),\n )\n },\n})\n\nObject.assign(SpotlightActionsList, { classes })\n","import { defineComponent, h, type PropType } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from './Spotlight.context'\nimport classes from './Spotlight.module.css'\n\nexport type SpotlightEmptyStylesNames = 'empty'\n\nexport interface SpotlightEmptyProps {\n classNames?: Record<string, any>\n styles?: Record<string, any>\n [key: string]: any\n}\n\nexport const SpotlightEmpty = defineComponent({\n name: 'SpotlightEmpty',\n inheritAttrs: false,\n props: {\n classNames: { type: [Object, Function], default: undefined },\n styles: { type: [Object, Function], default: undefined },\n vars: { type: [Object, Function] as PropType<any>, default: undefined },\n },\n setup(rawProps, { attrs, slots }) {\n const props = useProps<SpotlightEmptyProps>('SpotlightEmpty', null, rawProps as any)\n const ctx = useSpotlightContext()\n\n return () =>\n h(\n Box,\n {\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 () => slots.default?.(),\n )\n },\n})\n\nObject.assign(SpotlightEmpty, { classes })\n","import { defineComponent, h, type PropType } from 'vue'\nimport { Box, useProps } from '@mantine-vue/core'\nimport { useSpotlightContext } from './Spotlight.context'\nimport classes from './Spotlight.module.css'\n\nexport type SpotlightFooterStylesNames = 'footer'\n\nexport interface SpotlightFooterProps {\n classNames?: Record<string, any>\n styles?: Record<string, any>\n [key: string]: any\n}\n\nexport const SpotlightFooter = defineComponent({\n name: 'SpotlightFooter',\n inheritAttrs: false,\n props: {\n classNames: { type: [Object, Function], default: undefined },\n styles: { type: [Object, Function], default: undefined },\n vars: { type: [Object, Function] as PropType<any>, default: undefined },\n },\n setup(rawProps, { attrs, slots }) {\n const props = useProps<SpotlightFooterProps>('SpotlightFooter', null, rawProps as any)\n const ctx = useSpotlightContext()\n\n return () =>\n h(\n Box,\n {\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 () => slots.default?.(),\n )\n },\n})\n\nObject.assign(SpotlightFooter, { classes })\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","import { computed, defineComponent, h, ref, watch, type PropType } 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 {\n spotlightActions,\n spotlightStore,\n useSpotlight,\n type SpotlightStore,\n} from './spotlight.store'\nimport classes from './Spotlight.module.css'\n\nexport type SpotlightRootStylesNames =\n | 'root'\n | 'body'\n | 'close'\n | 'content'\n | 'header'\n | 'inner'\n | 'overlay'\n | 'title'\n | 'search'\n | 'actionsList'\n | 'actionsListInner'\n | 'action'\n | 'empty'\n | 'footer'\n | 'actionBody'\n | 'actionLabel'\n | 'actionDescription'\n | 'actionSection'\n | 'actionsGroup'\n\nexport interface SpotlightRootProps {\n store?: SpotlightStore\n query?: string\n onQueryChange?: (query: string) => void\n clearQueryOnClose?: boolean\n shortcut?: string | string[] | null\n tagsToIgnore?: string[]\n triggerOnContentEditable?: boolean\n disabled?: boolean\n onSpotlightOpen?: () => void\n onSpotlightClose?: () => void\n forceOpened?: boolean\n closeOnActionTrigger?: boolean\n maxHeight?: string | number\n scrollable?: boolean\n classNames?: Record<string, any>\n styles?: Record<string, any>\n vars?: Record<string, any>\n unstyled?: boolean\n [key: string]: any\n}\n\nconst defaultProps = {\n size: 600,\n yOffset: 80,\n zIndex: getDefaultZIndex('max'),\n overlayProps: { backgroundOpacity: 0.35, blur: 7 },\n transitionProps: { duration: 200, transition: 'pop' },\n store: spotlightStore,\n clearQueryOnClose: true,\n closeOnActionTrigger: true,\n shortcut: 'mod + K',\n maxHeight: 400,\n} satisfies Partial<SpotlightRootProps>\n\nexport const SpotlightRoot = defineComponent({\n name: 'SpotlightRoot',\n inheritAttrs: false,\n props: {\n store: { type: Object as PropType<SpotlightStore>, default: undefined },\n query: { type: String, default: undefined },\n onQueryChange: { type: Function as PropType<(query: string) => void>, default: undefined },\n clearQueryOnClose: { type: Boolean, default: undefined },\n shortcut: {\n type: [String, Array, null] as PropType<string | string[] | null>,\n default: undefined,\n },\n tagsToIgnore: { type: Array as PropType<string[]>, default: undefined },\n triggerOnContentEditable: { type: Boolean, default: undefined },\n disabled: { type: Boolean, default: false },\n onSpotlightOpen: { type: Function as PropType<() => void>, default: undefined },\n onSpotlightClose: { type: Function as PropType<() => void>, default: undefined },\n forceOpened: { type: Boolean, default: false },\n closeOnActionTrigger: { type: Boolean, default: undefined },\n maxHeight: { type: [String, Number] as PropType<string | number>, default: undefined },\n scrollable: { type: Boolean, default: false },\n classNames: { type: [Object, Function], default: undefined },\n styles: { type: [Object, Function], default: undefined },\n vars: { type: [Object, Function], default: undefined },\n unstyled: { type: Boolean, default: false },\n },\n setup(rawProps, { attrs, slots }) {\n const props = useProps<SpotlightRootProps>('SpotlightRoot', defaultProps, rawProps as any)\n const state = useSpotlight(props.store!)\n const previousOpened = ref(state.value.opened)\n const currentQuery = computed(() =>\n typeof props.query === 'string' ? props.query : state.value.query,\n )\n\n const setQuery = (query: string) => {\n props.onQueryChange?.(query)\n spotlightActions.setQuery(query, props.store!)\n }\n\n const 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\n provideSpotlightContext({\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\n useHotkeys(\n () => getHotkeys(props.shortcut, props.store!),\n () => props.tagsToIgnore,\n () => props.triggerOnContentEditable,\n )\n\n watch(\n () => state.value.opened,\n (opened) => {\n if (opened === previousOpened.value) {\n return\n }\n\n if (opened) {\n props.onSpotlightOpen?.()\n } else {\n props.onSpotlightClose?.()\n }\n previousOpened.value = opened\n },\n )\n\n return () => {\n if (props.disabled) {\n return null\n }\n\n const rootStyles = getStyles('root', { className: attrs.class, style: attrs.style as any })\n\n const {\n classNames: _classNames,\n styles: _styles,\n vars: _vars,\n unstyled: _unstyled,\n store: _store,\n query: _query,\n onQueryChange: _onQueryChange,\n clearQueryOnClose: _clearQueryOnClose,\n shortcut: _shortcut,\n tagsToIgnore: _tagsToIgnore,\n triggerOnContentEditable: _triggerOnContentEditable,\n disabled: _disabled,\n onSpotlightOpen: _onSpotlightOpen,\n onSpotlightClose: _onSpotlightClose,\n forceOpened: _forceOpened,\n closeOnActionTrigger: _closeOnActionTrigger,\n maxHeight: _maxHeight,\n scrollable: _scrollable,\n ...modalAttrs\n } = { ...attrs, ...props }\n\n return h(\n Modal,\n {\n ...modalAttrs,\n withCloseButton: false,\n opened: state.value.opened || !!props.forceOpened,\n padding: 0,\n onClose: () => spotlightActions.close(props.store!),\n class: rootStyles.class,\n style: rootStyles.style,\n classNames: mergeClassNames(\n {\n body: classes.body,\n content: classes.content,\n },\n props.classNames,\n ),\n styles: mergeStyles(props.styles),\n vars: mergeStyles(\n {\n root: {\n '--spotlight-max-height': props.scrollable ? rem(props.maxHeight) : undefined,\n },\n },\n props.vars,\n ),\n onExitTransitionEnd: () => {\n if (props.clearQueryOnClose) {\n setQuery('')\n }\n\n spotlightActions.clearSpotlightState(\n { clearQuery: props.clearQueryOnClose },\n props.store!,\n )\n props.transitionProps?.onExited?.()\n props.onExitTransitionEnd?.()\n },\n 'data-scrollable': props.scrollable || undefined,\n },\n slots,\n )\n }\n },\n})\n\nObject.assign(SpotlightRoot, { classes })\n","import { defineComponent, h, ref, type PropType } 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 classes from './Spotlight.module.css'\n\nexport type SpotlightSearchStylesNames = 'input' | 'wrapper' | 'section' | 'bottomSection'\n\nexport interface SpotlightSearchProps {\n size?: string | number\n value?: string\n onChange?: (event: Event) => void\n onKeydown?: (event: KeyboardEvent) => void\n classNames?: Record<string, any>\n styles?: Record<string, any>\n vars?: Record<string, any>\n [key: string]: any\n}\n\nconst defaultProps = {\n size: 'lg',\n} satisfies Partial<SpotlightSearchProps>\n\nexport const SpotlightSearch = defineComponent({\n name: 'SpotlightSearch',\n inheritAttrs: false,\n props: {\n size: { type: [String, Number] as PropType<string | number>, default: undefined },\n value: { type: String, default: undefined },\n onChange: { type: Function as PropType<(event: Event) => void>, default: undefined },\n onKeydown: { type: Function as PropType<(event: KeyboardEvent) => void>, default: undefined },\n classNames: { type: [Object, Function], default: undefined },\n styles: { type: [Object, Function], default: undefined },\n vars: { type: [Object, Function], default: undefined },\n },\n setup(rawProps, { attrs }) {\n const props = useProps<SpotlightSearchProps>('SpotlightSearch', defaultProps, rawProps as any)\n const ctx = useSpotlightContext()\n const isComposing = ref(false)\n\n const handleKeydown = (event: KeyboardEvent) => {\n props.onKeydown?.(event)\n\n if (isComposing.value) {\n return\n }\n\n if (event.code === 'ArrowDown') {\n event.preventDefault()\n spotlightActions.selectNextAction(ctx.store)\n }\n\n if (event.code === 'ArrowUp') {\n event.preventDefault()\n spotlightActions.selectPreviousAction(ctx.store)\n }\n\n if (event.code === 'Enter' || event.code === 'NumpadEnter') {\n event.preventDefault()\n spotlightActions.triggerSelectedAction(ctx.store)\n }\n }\n\n return () => {\n const inputStyles = ctx.getStyles('search')\n\n return h(Input, {\n ...attrs,\n size: props.size,\n value: props.value ?? ctx.query,\n classNames: mergeClassNames({ input: inputStyles.class }, props.classNames),\n styles: mergeStyles({ input: inputStyles.style }, props.styles),\n vars: props.vars,\n onInput: (event: Event) => {\n ctx.setQuery((event.currentTarget as HTMLInputElement).value)\n props.onChange?.(event)\n },\n onKeydown: handleKeydown,\n onCompositionstart: () => {\n isComposing.value = true\n },\n onCompositionend: () => {\n isComposing.value = false\n },\n })\n }\n },\n})\n\nObject.assign(SpotlightSearch, { classes })\n","import { computed, defineComponent, h, ref, type PropType } from 'vue'\nimport { getDefaultZIndex, useProps } from '@mantine-vue/core'\nimport { defaultSpotlightFilter } from './default-spotlight-filter'\nimport { isActionsGroup } from './is-actions-group'\nimport { limitActions } from './limit-actions'\nimport { spotlight, spotlightStore } from './spotlight.store'\nimport {\n SpotlightAction,\n type SpotlightActionProps,\n type SpotlightActionStylesNames,\n} from './SpotlightAction'\nimport {\n SpotlightActionsGroup,\n type SpotlightActionsGroupProps,\n type SpotlightActionsGroupStylesNames,\n} from './SpotlightActionsGroup'\nimport {\n SpotlightActionsList,\n type SpotlightActionsListProps,\n type SpotlightActionsListStylesNames,\n} from './SpotlightActionsList'\nimport {\n SpotlightEmpty,\n type SpotlightEmptyProps,\n type SpotlightEmptyStylesNames,\n} from './SpotlightEmpty'\nimport {\n SpotlightFooter,\n type SpotlightFooterProps,\n type SpotlightFooterStylesNames,\n} from './SpotlightFooter'\nimport {\n SpotlightRoot,\n type SpotlightRootProps,\n type SpotlightRootStylesNames,\n} from './SpotlightRoot'\nimport {\n SpotlightSearch,\n type SpotlightSearchProps,\n type SpotlightSearchStylesNames,\n} from './SpotlightSearch'\nimport classes from './Spotlight.module.css'\n\nexport type SpotlightFilterFunction = (\n query: string,\n actions: SpotlightActions[],\n) => SpotlightActions[]\n\nexport interface SpotlightActionData extends SpotlightActionProps {\n id: string\n group?: string\n}\n\nexport interface SpotlightActionGroupData {\n group: string\n actions: SpotlightActionData[]\n}\n\nexport type SpotlightActions = SpotlightActionData | SpotlightActionGroupData\nexport type SpotlightStylesNames = SpotlightRootStylesNames\n\nexport interface SpotlightProps extends SpotlightRootProps {\n searchProps?: SpotlightSearchProps\n actions: SpotlightActions[]\n filter?: SpotlightFilterFunction\n nothingFound?: any\n highlightQuery?: boolean\n limit?: number\n scrollAreaProps?: Partial<SpotlightActionsListProps>\n}\n\nconst defaultProps = {\n size: 600,\n yOffset: 80,\n limit: Infinity,\n zIndex: getDefaultZIndex('max'),\n overlayProps: { backgroundOpacity: 0.35, blur: 7 },\n transitionProps: { duration: 200, transition: 'pop' },\n store: spotlightStore,\n filter: defaultSpotlightFilter,\n clearQueryOnClose: true,\n closeOnActionTrigger: true,\n shortcut: 'mod + K',\n} satisfies Partial<SpotlightProps>\n\nfunction renderContent(value: any) {\n return typeof value === 'function' ? value() : value\n}\n\nconst SpotlightBase = defineComponent({\n name: 'Spotlight',\n inheritAttrs: false,\n props: {\n searchProps: { type: Object as PropType<SpotlightSearchProps>, default: undefined },\n actions: { type: Array as PropType<SpotlightActions[]>, required: true },\n filter: { type: Function as PropType<SpotlightFilterFunction>, default: undefined },\n nothingFound: { type: [String, Number, Object, Function] as PropType<any>, default: undefined },\n highlightQuery: { type: Boolean, default: false },\n limit: { type: Number, default: undefined },\n scrollAreaProps: {\n type: Object as PropType<Partial<SpotlightActionsListProps>>,\n default: undefined,\n },\n query: { type: String, default: undefined },\n onQueryChange: { type: Function as PropType<(query: string) => void>, default: undefined },\n store: { type: Object as PropType<SpotlightRootProps['store']>, default: undefined },\n clearQueryOnClose: { type: Boolean, default: undefined },\n shortcut: { type: [String, Array] as PropType<string | string[] | null>, default: undefined },\n tagsToIgnore: { type: Array as PropType<string[]>, default: undefined },\n triggerOnContentEditable: { type: Boolean, default: undefined },\n disabled: { type: Boolean, default: false },\n onSpotlightOpen: { type: Function as PropType<() => void>, default: undefined },\n onSpotlightClose: { type: Function as PropType<() => void>, default: undefined },\n forceOpened: { type: Boolean, default: false },\n closeOnActionTrigger: { type: Boolean, default: undefined },\n maxHeight: { type: [String, Number] as PropType<string | number>, default: undefined },\n scrollable: { type: Boolean, default: false },\n classNames: { type: [Object, Function], default: undefined },\n styles: { type: [Object, Function], default: undefined },\n vars: { type: [Object, Function], default: undefined },\n unstyled: { type: Boolean, default: false },\n },\n setup(rawProps, { attrs }) {\n const props = useProps<SpotlightProps>('Spotlight', defaultProps, rawProps as any)\n const uncontrolledQuery = ref('')\n const currentQuery = computed(() =>\n typeof props.query === 'string' ? props.query : uncontrolledQuery.value,\n )\n\n const setQuery = (query: string) => {\n if (typeof props.query !== 'string') {\n uncontrolledQuery.value = query\n }\n\n props.onQueryChange?.(query)\n }\n\n return () => {\n const filteredActions = limitActions(\n props.filter!(currentQuery.value, props.actions),\n props.limit!,\n )\n const renderedActions = filteredActions.map((item) => {\n if (isActionsGroup(item)) {\n return h(SpotlightActionsGroup, { key: item.group, label: item.group }, () =>\n item.actions.map(({ id, ...actionData }) =>\n h(SpotlightAction, {\n key: id,\n highlightQuery: props.highlightQuery,\n ...actionData,\n }),\n ),\n )\n }\n\n const { id, ...actionData } = item\n return h(SpotlightAction, {\n key: id,\n highlightQuery: props.highlightQuery,\n ...actionData,\n })\n })\n const {\n searchProps: _searchProps,\n actions: _actions,\n filter: _filter,\n nothingFound: _nothingFound,\n highlightQuery: _highlightQuery,\n limit: _limit,\n scrollAreaProps: _scrollAreaProps,\n query: _query,\n onQueryChange: _onQueryChange,\n ...rootProps\n } = props\n\n return h(\n SpotlightRoot,\n {\n ...attrs,\n ...rootProps,\n query: currentQuery.value,\n onQueryChange: setQuery,\n },\n () => [\n h(SpotlightSearch, props.searchProps),\n renderedActions.length > 0\n ? h(SpotlightActionsList, props.scrollAreaProps, () => renderedActions)\n : null,\n renderedActions.length === 0 && props.nothingFound\n ? h(SpotlightEmpty, null, () => renderContent(props.nothingFound))\n : null,\n ],\n )\n }\n },\n})\n\nexport const Spotlight = Object.assign(SpotlightBase, {\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 SpotlightActionProps,\n SpotlightActionStylesNames,\n SpotlightActionsGroupProps,\n SpotlightActionsGroupStylesNames,\n SpotlightActionsListProps,\n SpotlightActionsListStylesNames,\n SpotlightEmptyProps,\n SpotlightEmptyStylesNames,\n SpotlightFooterProps,\n SpotlightFooterStylesNames,\n SpotlightRootProps,\n SpotlightRootStylesNames,\n SpotlightSearchProps,\n SpotlightSearchStylesNames,\n}\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 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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"}