@mantine/spotlight 7.13.5-alpha.0 → 7.13.5-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/Spotlight.cjs +82 -0
- package/cjs/Spotlight.cjs.map +1 -0
- package/cjs/Spotlight.context.cjs +12 -0
- package/cjs/Spotlight.context.cjs.map +1 -0
- package/cjs/Spotlight.module.css.cjs +7 -0
- package/cjs/Spotlight.module.css.cjs.map +1 -0
- package/cjs/SpotlightAction.cjs +98 -0
- package/cjs/SpotlightAction.cjs.map +1 -0
- package/cjs/SpotlightActionsGroup.cjs +32 -0
- package/cjs/SpotlightActionsGroup.cjs.map +1 -0
- package/cjs/SpotlightActionsList.cjs +43 -0
- package/cjs/SpotlightActionsList.cjs.map +1 -0
- package/cjs/SpotlightEmpty.cjs +30 -0
- package/cjs/SpotlightEmpty.cjs.map +1 -0
- package/cjs/SpotlightFooter.cjs +30 -0
- package/cjs/SpotlightFooter.cjs.map +1 -0
- package/cjs/SpotlightRoot.cjs +125 -0
- package/cjs/SpotlightRoot.cjs.map +1 -0
- package/cjs/SpotlightSearch.cjs +63 -0
- package/cjs/SpotlightSearch.cjs.map +1 -0
- package/cjs/default-spotlight-filter.cjs +55 -0
- package/cjs/default-spotlight-filter.cjs.map +1 -0
- package/cjs/get-hotkeys.cjs +18 -0
- package/cjs/get-hotkeys.cjs.map +1 -0
- package/cjs/index.cjs +32 -0
- package/cjs/index.cjs.map +1 -0
- package/cjs/is-actions-group.cjs +10 -0
- package/cjs/is-actions-group.cjs.map +1 -0
- package/cjs/limit-actions.cjs +31 -0
- package/cjs/limit-actions.cjs.map +1 -0
- package/cjs/spotlight.store.cjs +161 -0
- package/cjs/spotlight.store.cjs.map +1 -0
- package/esm/Spotlight.context.mjs +9 -0
- package/esm/Spotlight.context.mjs.map +1 -0
- package/esm/Spotlight.mjs +80 -0
- package/esm/Spotlight.mjs.map +1 -0
- package/esm/Spotlight.module.css.mjs +5 -0
- package/esm/Spotlight.module.css.mjs.map +1 -0
- package/esm/SpotlightAction.mjs +96 -0
- package/esm/SpotlightAction.mjs.map +1 -0
- package/esm/SpotlightActionsGroup.mjs +30 -0
- package/esm/SpotlightActionsGroup.mjs.map +1 -0
- package/esm/SpotlightActionsList.mjs +41 -0
- package/esm/SpotlightActionsList.mjs.map +1 -0
- package/esm/SpotlightEmpty.mjs +28 -0
- package/esm/SpotlightEmpty.mjs.map +1 -0
- package/esm/SpotlightFooter.mjs +28 -0
- package/esm/SpotlightFooter.mjs.map +1 -0
- package/esm/SpotlightRoot.mjs +123 -0
- package/esm/SpotlightRoot.mjs.map +1 -0
- package/esm/SpotlightSearch.mjs +61 -0
- package/esm/SpotlightSearch.mjs.map +1 -0
- package/esm/default-spotlight-filter.mjs +53 -0
- package/esm/default-spotlight-filter.mjs.map +1 -0
- package/esm/get-hotkeys.mjs +16 -0
- package/esm/get-hotkeys.mjs.map +1 -0
- package/esm/index.mjs +11 -0
- package/esm/index.mjs.map +1 -0
- package/esm/is-actions-group.mjs +8 -0
- package/esm/is-actions-group.mjs.map +1 -0
- package/esm/limit-actions.mjs +29 -0
- package/esm/limit-actions.mjs.map +1 -0
- package/esm/spotlight.store.mjs +138 -0
- package/esm/spotlight.store.mjs.map +1 -0
- package/lib/Spotlight.context.d.ts +15 -0
- package/lib/Spotlight.d.ts +68 -0
- package/lib/SpotlightAction.d.ts +36 -0
- package/lib/SpotlightActionsGroup.d.ts +20 -0
- package/lib/SpotlightActionsList.d.ts +16 -0
- package/lib/SpotlightEmpty.d.ts +16 -0
- package/lib/SpotlightFooter.d.ts +16 -0
- package/lib/SpotlightRoot.d.ts +45 -0
- package/lib/SpotlightSearch.d.ts +16 -0
- package/lib/default-spotlight-filter.d.ts +2 -0
- package/lib/get-hotkeys.d.ts +3 -0
- package/lib/index.d.mts +19 -0
- package/lib/index.d.ts +19 -0
- package/lib/is-actions-group.d.ts +2 -0
- package/lib/limit-actions.d.ts +2 -0
- package/lib/spotlight.store.d.ts +53 -0
- package/package.json +6 -6
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { factory, useProps, Input } from '@mantine/core';
|
|
5
|
+
import { useSpotlightContext } from './Spotlight.context.mjs';
|
|
6
|
+
import { spotlightActions } from './spotlight.store.mjs';
|
|
7
|
+
import classes from './Spotlight.module.css.mjs';
|
|
8
|
+
|
|
9
|
+
const defaultProps = {
|
|
10
|
+
size: "lg"
|
|
11
|
+
};
|
|
12
|
+
const SpotlightSearch = factory((props, ref) => {
|
|
13
|
+
const { classNames, styles, onKeyDown, onChange, vars, value, ...others } = useProps(
|
|
14
|
+
"SpotlightSearch",
|
|
15
|
+
defaultProps,
|
|
16
|
+
props
|
|
17
|
+
);
|
|
18
|
+
const ctx = useSpotlightContext();
|
|
19
|
+
const inputStyles = ctx.getStyles("search");
|
|
20
|
+
const [isComposing, setIsComposing] = useState(false);
|
|
21
|
+
const handleKeyDown = (event) => {
|
|
22
|
+
onKeyDown?.(event);
|
|
23
|
+
if (isComposing) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (event.nativeEvent.code === "ArrowDown") {
|
|
27
|
+
event.preventDefault();
|
|
28
|
+
spotlightActions.selectNextAction(ctx.store);
|
|
29
|
+
}
|
|
30
|
+
if (event.nativeEvent.code === "ArrowUp") {
|
|
31
|
+
event.preventDefault();
|
|
32
|
+
spotlightActions.selectPreviousAction(ctx.store);
|
|
33
|
+
}
|
|
34
|
+
if (event.nativeEvent.code === "Enter" || event.nativeEvent.code === "NumpadEnter") {
|
|
35
|
+
event.preventDefault();
|
|
36
|
+
spotlightActions.triggerSelectedAction(ctx.store);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
return /* @__PURE__ */ jsx(
|
|
40
|
+
Input,
|
|
41
|
+
{
|
|
42
|
+
ref,
|
|
43
|
+
classNames: [{ input: inputStyles.className }, classNames],
|
|
44
|
+
styles: [{ input: inputStyles.style }, styles],
|
|
45
|
+
...others,
|
|
46
|
+
value: value ?? ctx.query,
|
|
47
|
+
onChange: (event) => {
|
|
48
|
+
ctx.setQuery(event.currentTarget.value);
|
|
49
|
+
onChange?.(event);
|
|
50
|
+
},
|
|
51
|
+
onKeyDown: handleKeyDown,
|
|
52
|
+
onCompositionStart: () => setIsComposing(true),
|
|
53
|
+
onCompositionEnd: () => setIsComposing(false)
|
|
54
|
+
}
|
|
55
|
+
);
|
|
56
|
+
});
|
|
57
|
+
SpotlightSearch.classes = classes;
|
|
58
|
+
SpotlightSearch.displayName = "@mantine/spotlight/SpotlightSearch";
|
|
59
|
+
|
|
60
|
+
export { SpotlightSearch };
|
|
61
|
+
//# sourceMappingURL=SpotlightSearch.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpotlightSearch.mjs","sources":["../src/SpotlightSearch.tsx"],"sourcesContent":["import { useState } from 'react';\nimport {\n BoxProps,\n CompoundStylesApiProps,\n ElementProps,\n factory,\n Factory,\n Input,\n InputProps,\n InputStylesNames,\n useProps,\n} from '@mantine/core';\nimport { useSpotlightContext } from './Spotlight.context';\nimport { spotlightActions } from './spotlight.store';\nimport classes from './Spotlight.module.css';\n\nexport type SpotlightSearchStylesNames = InputStylesNames;\n\nexport interface SpotlightSearchProps\n extends BoxProps,\n Omit<InputProps, 'classNames' | 'styles' | 'vars' | 'variant'>,\n CompoundStylesApiProps<SpotlightSearchFactory>,\n ElementProps<'input', 'size'> {}\n\nexport type SpotlightSearchFactory = Factory<{\n props: SpotlightSearchProps;\n ref: HTMLInputElement;\n stylesNames: SpotlightSearchStylesNames;\n compound: true;\n}>;\n\nconst defaultProps: Partial<SpotlightSearchProps> = {\n size: 'lg',\n};\n\nexport const SpotlightSearch = factory<SpotlightSearchFactory>((props, ref) => {\n const { classNames, styles, onKeyDown, onChange, vars, value, ...others } = useProps(\n 'SpotlightSearch',\n defaultProps,\n props\n );\n const ctx = useSpotlightContext();\n const inputStyles = ctx.getStyles('search');\n const [isComposing, setIsComposing] = useState(false); // IME\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(event);\n if (isComposing) {\n return;\n }\n\n if (event.nativeEvent.code === 'ArrowDown') {\n event.preventDefault();\n spotlightActions.selectNextAction(ctx.store);\n }\n\n if (event.nativeEvent.code === 'ArrowUp') {\n event.preventDefault();\n spotlightActions.selectPreviousAction(ctx.store);\n }\n\n if (event.nativeEvent.code === 'Enter' || event.nativeEvent.code === 'NumpadEnter') {\n event.preventDefault();\n spotlightActions.triggerSelectedAction(ctx.store);\n }\n };\n\n return (\n <Input\n ref={ref}\n classNames={[{ input: inputStyles.className }, classNames] as any}\n styles={[{ input: inputStyles.style }, styles] as any}\n {...others}\n value={value ?? ctx.query}\n onChange={(event) => {\n ctx.setQuery(event.currentTarget.value);\n onChange?.(event);\n }}\n onKeyDown={handleKeyDown}\n onCompositionStart={() => setIsComposing(true)}\n onCompositionEnd={() => setIsComposing(false)}\n />\n );\n});\n\nSpotlightSearch.classes = classes;\nSpotlightSearch.displayName = '@mantine/spotlight/SpotlightSearch';\n"],"names":[],"mappings":";;;;;;;;AAWA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,YAAY,CAAG,CAAA,CAAA,CAAA;AACrB,CAAA,CAAE,IAAI,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA;AACR,CAAC,CAAA;AACW,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,GAAG,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AACvD,CAAA,CAAE,MAAM,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,EAAE,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,SAAS,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA,CAAA,CAAA,CAAI,EAAE,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,GAAG,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACtF,CAAA,CAAA,CAAA,CAAI,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACrB,CAAA,CAAA,CAAA,CAAI,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAChB,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACJ,CAAG,CAAA,CAAA,CAAA;AACH,CAAA,CAAE,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAmB,CAAE,CAAA,CAAA;AACnC,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,WAAW,CAAG,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,QAAQ,CAAC,CAAA;AAC7C,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA;AACvD,CAAA,CAAE,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAG,CAAA,CAAA,CAAC,KAAK,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AACnC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA;AACtB,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,WAAW,CAAE,CAAA,CAAA;AACrB,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACN,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,WAAW,CAAE,CAAA,CAAA;AAChD,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAE,CAAA,CAAA;AAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,gBAAgB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAC,CAAG,CAAA,CAAA,CAAC,KAAK,CAAC,CAAA;AAClD,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,KAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,SAAS,CAAE,CAAA,CAAA;AAC9C,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAE,CAAA,CAAA;AAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,gBAAgB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoB,CAAC,CAAG,CAAA,CAAA,CAAC,KAAK,CAAC,CAAA;AACtD,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAI,IAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,IAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,aAAa,CAAE,CAAA,CAAA;AACxF,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAE,CAAA,CAAA;AAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,gBAAgB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAqB,CAAC,CAAG,CAAA,CAAA,CAAC,KAAK,CAAC,CAAA;AACvD,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAG,CAAA,CAAA,CAAA;AACH,CAAA,CAAE,uBAAuB,CAAG,CAAA,CAAA,CAAA;AAC5B,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AACT,CAAI,CAAA,CAAA,CAAA,CAAA;AACJ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAG,CAAA,CAAA,CAAA;AACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAC,CAAA,CAAE,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAA;AAChE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAC,CAAA,CAAE,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA;AACpD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,KAAK,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AAC/B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AAC3B,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,KAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA;AAC/C,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA;AACzB,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACP,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,EAAE,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC9B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,kBAAkB,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,IAAI,CAAC,CAAA;AACpD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AAClD,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAG,CAAA,CAAA,CAAA;AACH,CAAC,CAAA,CAAA;AACD,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACjC,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAoC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
function getKeywords(keywords) {
|
|
3
|
+
if (Array.isArray(keywords)) {
|
|
4
|
+
return keywords.map((keyword) => keyword.trim()).join(",").toLowerCase().trim();
|
|
5
|
+
}
|
|
6
|
+
if (typeof keywords === "string") {
|
|
7
|
+
return keywords.toLowerCase().trim();
|
|
8
|
+
}
|
|
9
|
+
return "";
|
|
10
|
+
}
|
|
11
|
+
function getFlatActions(data) {
|
|
12
|
+
return data.reduce((acc, item) => {
|
|
13
|
+
if ("actions" in item) {
|
|
14
|
+
return [...acc, ...item.actions.map((action) => ({ ...action, group: item.group }))];
|
|
15
|
+
}
|
|
16
|
+
return [...acc, item];
|
|
17
|
+
}, []);
|
|
18
|
+
}
|
|
19
|
+
function flatActionsToGroups(data) {
|
|
20
|
+
const groups = {};
|
|
21
|
+
const result = [];
|
|
22
|
+
data.forEach((action) => {
|
|
23
|
+
if (action.group) {
|
|
24
|
+
if (!groups[action.group]) {
|
|
25
|
+
groups[action.group] = { pushed: false, data: { group: action.group, actions: [] } };
|
|
26
|
+
}
|
|
27
|
+
groups[action.group].data.actions.push(action);
|
|
28
|
+
if (!groups[action.group].pushed) {
|
|
29
|
+
groups[action.group].pushed = true;
|
|
30
|
+
result.push(groups[action.group].data);
|
|
31
|
+
}
|
|
32
|
+
} else {
|
|
33
|
+
result.push(action);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
const defaultSpotlightFilter = (_query, data) => {
|
|
39
|
+
const query = _query.trim().toLowerCase();
|
|
40
|
+
const priorityMatrix = [[], []];
|
|
41
|
+
const flatActions = getFlatActions(data);
|
|
42
|
+
flatActions.forEach((item) => {
|
|
43
|
+
if (item.label?.toLowerCase().includes(query)) {
|
|
44
|
+
priorityMatrix[0].push(item);
|
|
45
|
+
} else if (item.description?.toLowerCase().includes(query) || getKeywords(item.keywords).includes(query)) {
|
|
46
|
+
priorityMatrix[1].push(item);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
return flatActionsToGroups(priorityMatrix.flat());
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
export { defaultSpotlightFilter };
|
|
53
|
+
//# sourceMappingURL=default-spotlight-filter.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-spotlight-filter.mjs","sources":["../src/default-spotlight-filter.ts"],"sourcesContent":["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 [...acc, ...item.actions.map((action) => ({ ...action, group: item.group }))];\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 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"],"names":[],"mappings":";AACA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAE,CAAA,CAAA;AAC/B,CAAA,CAAE,IAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,OAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAE,CAAA,CAAA;AAC/B,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,QAAQ,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAI,EAAE,CAAC,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAC,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAA;AACnF,CAAA,CAAA,CAAA;AACA,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,QAAQ,CAAE,CAAA,CAAA;AACpC,CAAA,CAAA,CAAA,CAAI,OAAO,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,WAAW,CAAE,CAAA,CAAC,IAAI,CAAE,CAAA,CAAA;AACxC,CAAA,CAAA,CAAA;AACA,CAAA,CAAE,OAAO,CAAE,CAAA,CAAA;AACX,CAAA;AACA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAC,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAA;AAC9B,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,CAAA,CAAA,CAAG,CAAE,CAAA,CAAA,CAAA,CAAA,CAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AACpC,CAAA,CAAA,CAAA,CAAI,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAA;AAC3B,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAE,CAAA,CAAA,CAAA,CAAG,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAI,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAC,CAAC,CAAC,CAAA;AAC1F,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAI,OAAO,CAAC,CAAA,CAAA,CAAG,CAAG,CAAA,CAAA,CAAA,CAAE,IAAI,CAAC,CAAA;AACzB,CAAG,CAAA,CAAA,CAAA,CAAE,EAAE,CAAC,CAAA;AACR,CAAA;AACA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAmB,CAAC,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAA;AACnC,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAE,CAAA,CAAA;AACnB,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAE,CAAA,CAAA;AACnB,CAAA,CAAE,IAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAC,MAAM,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AAC3B,CAAA,CAAA,CAAA,CAAI,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAE,CAAA,CAAA;AACtB,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAE,CAAA,CAAA;AACjC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAG,CAAA,CAAA,CAAA,CAAE,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,IAAI,CAAE,CAAA,CAAA,CAAE,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAE,CAAA,CAAA,CAAE,CAAE,CAAA,CAAA;AAC5F,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,KAAK,CAAC,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA;AACpD,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAE,CAAA,CAAA;AACxC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,KAAK,CAAC,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAA;AAC1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA;AAC9C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACX,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA;AACzB,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAG,CAAC,CAAA;AACJ,CAAA,CAAE,OAAO,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACf,CAAA;AACY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,sBAAsB,CAAG,CAAA,CAAA,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,IAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AACxD,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,KAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAE,CAAA,CAAA;AAC3C,CAAA,CAAE,MAAM,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAC,CAAE,CAAA,CAAA,CAAE,EAAE,CAAC,CAAA;AACjC,CAAA,CAAE,MAAM,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,IAAI,CAAC,CAAA;AAC1C,CAAA,CAAE,WAAW,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAC,IAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AAChC,CAAA,CAAA,CAAA,CAAI,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAE,CAAA,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,CAAE,CAAA,CAAA;AACnD,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAC,CAAC,CAAC,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,IAAI,CAAC,CAAA;AAClC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,EAAE,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,CAAE,CAAA,CAAA;AAC9G,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAC,CAAC,CAAC,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,IAAI,CAAC,CAAA;AAClC,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAG,CAAC,CAAA;AACJ,CAAA,CAAE,OAAO,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,cAAc,CAAC,CAAA,CAAA,CAAA,CAAI,EAAE,CAAC,CAAA;AACnD,CAAA,CAAA;;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { spotlightActions } from './spotlight.store.mjs';
|
|
3
|
+
|
|
4
|
+
function getHotkeys(hotkeys, store) {
|
|
5
|
+
if (!hotkeys) {
|
|
6
|
+
return [];
|
|
7
|
+
}
|
|
8
|
+
const open = () => spotlightActions.open(store);
|
|
9
|
+
if (Array.isArray(hotkeys)) {
|
|
10
|
+
return hotkeys.map((hotkey) => [hotkey, open]);
|
|
11
|
+
}
|
|
12
|
+
return [[hotkeys, open]];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export { getHotkeys };
|
|
16
|
+
//# sourceMappingURL=get-hotkeys.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-hotkeys.mjs","sources":["../src/get-hotkeys.ts"],"sourcesContent":["import { HotkeyItem } from '@mantine/hooks';\nimport { spotlightActions, SpotlightStore } 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"],"names":[],"mappings":";;;AAEO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,KAAK,CAAE,CAAA,CAAA;AAC3C,CAAE,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAE,CAAA,CAAA;AAChB,CAAA,CAAA,CAAA,CAAI,OAAO,CAAE,CAAA,CAAA;AACb,CAAA,CAAA,CAAA;AACA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,gBAAgB,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA;AACjD,CAAA,CAAE,IAAI,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,OAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAE,CAAA,CAAA;AAC9B,CAAA,CAAA,CAAA,CAAI,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAE,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,CAAA;AAClD,CAAA,CAAA,CAAA;AACA,CAAA,CAAE,OAAO,CAAC,CAAC,OAAO,CAAE,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC,CAAA;AAC1B,CAAA;;"}
|
package/esm/index.mjs
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { closeSpotlight, createSpotlight, createSpotlightStore, openSpotlight, spotlight, toggleSpotlight, useSpotlight } from './spotlight.store.mjs';
|
|
2
|
+
export { isActionsGroup } from './is-actions-group.mjs';
|
|
3
|
+
export { Spotlight } from './Spotlight.mjs';
|
|
4
|
+
export { SpotlightRoot } from './SpotlightRoot.mjs';
|
|
5
|
+
export { SpotlightAction } from './SpotlightAction.mjs';
|
|
6
|
+
export { SpotlightActionsGroup } from './SpotlightActionsGroup.mjs';
|
|
7
|
+
export { SpotlightActionsList } from './SpotlightActionsList.mjs';
|
|
8
|
+
export { SpotlightEmpty } from './SpotlightEmpty.mjs';
|
|
9
|
+
export { SpotlightFooter } from './SpotlightFooter.mjs';
|
|
10
|
+
export { SpotlightSearch } from './SpotlightSearch.mjs';
|
|
11
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-actions-group.mjs","sources":["../src/is-actions-group.ts"],"sourcesContent":["import type { SpotlightActionData, SpotlightActionGroupData } from './Spotlight';\n\nexport function isActionsGroup(\n item: SpotlightActionData | SpotlightActionGroupData\n): item is SpotlightActionGroupData {\n const _item = item as SpotlightActionGroupData;\n return _item.group !== undefined && Array.isArray(_item.actions);\n}\n"],"names":[],"mappings":";AACO,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAC,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAA;AACrC,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAA;AACpB,CAAA,CAAE,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,KAAK,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,OAAO,CAAC,CAAA;AAC/D,CAAA;;"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { isActionsGroup } from './is-actions-group.mjs';
|
|
3
|
+
|
|
4
|
+
function limitActions(actions, limit) {
|
|
5
|
+
if (!Array.isArray(actions)) {
|
|
6
|
+
return [];
|
|
7
|
+
}
|
|
8
|
+
let count = 0;
|
|
9
|
+
return actions.reduce((acc, item) => {
|
|
10
|
+
if (count >= limit) {
|
|
11
|
+
return acc;
|
|
12
|
+
}
|
|
13
|
+
if (isActionsGroup(item)) {
|
|
14
|
+
const groupActions = limitActions(item.actions, limit - count);
|
|
15
|
+
acc.push({
|
|
16
|
+
group: item.group,
|
|
17
|
+
actions: groupActions
|
|
18
|
+
});
|
|
19
|
+
count += groupActions.length;
|
|
20
|
+
} else {
|
|
21
|
+
acc.push(item);
|
|
22
|
+
count += 1;
|
|
23
|
+
}
|
|
24
|
+
return acc;
|
|
25
|
+
}, []);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export { limitActions };
|
|
29
|
+
//# sourceMappingURL=limit-actions.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limit-actions.mjs","sources":["../src/limit-actions.ts"],"sourcesContent":["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 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"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { clamp } from '@mantine/hooks';
|
|
3
|
+
import { createStore, useStore } from '@mantine/store';
|
|
4
|
+
|
|
5
|
+
const createSpotlightStore = () => createStore({
|
|
6
|
+
opened: false,
|
|
7
|
+
empty: false,
|
|
8
|
+
selected: -1,
|
|
9
|
+
listId: "",
|
|
10
|
+
query: "",
|
|
11
|
+
registeredActions: /* @__PURE__ */ new Set()
|
|
12
|
+
});
|
|
13
|
+
const useSpotlight = (store) => useStore(store);
|
|
14
|
+
function updateSpotlightStateAction(update, store) {
|
|
15
|
+
const state = store.getState();
|
|
16
|
+
store.setState({ ...state, ...update(store.getState()) });
|
|
17
|
+
}
|
|
18
|
+
function openSpotlightAction(store) {
|
|
19
|
+
updateSpotlightStateAction(() => ({ opened: true, selected: -1 }), store);
|
|
20
|
+
}
|
|
21
|
+
function closeSpotlightAction(store) {
|
|
22
|
+
updateSpotlightStateAction(() => ({ opened: false }), store);
|
|
23
|
+
}
|
|
24
|
+
function toggleSpotlightAction(store) {
|
|
25
|
+
updateSpotlightStateAction(
|
|
26
|
+
(state) => ({ opened: !state.opened, selected: state.opened ? state.selected : -1 }),
|
|
27
|
+
store
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
function setSelectedAction(index, store) {
|
|
31
|
+
store.updateState((state) => ({ ...state, selected: index }));
|
|
32
|
+
}
|
|
33
|
+
function setListId(id, store) {
|
|
34
|
+
store.updateState((state) => ({ ...state, listId: id }));
|
|
35
|
+
}
|
|
36
|
+
function findElementByQuerySelector(selector, root = document) {
|
|
37
|
+
const element = root.querySelector(selector);
|
|
38
|
+
if (element) {
|
|
39
|
+
return element;
|
|
40
|
+
}
|
|
41
|
+
const children = root instanceof ShadowRoot ? root.host.children : root.children;
|
|
42
|
+
for (let i = 0; i < children.length; i += 1) {
|
|
43
|
+
const child = children[i];
|
|
44
|
+
if (child.shadowRoot) {
|
|
45
|
+
const shadowElement = findElementByQuerySelector(selector, child.shadowRoot);
|
|
46
|
+
if (shadowElement) {
|
|
47
|
+
return shadowElement;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const nestedElement = findElementByQuerySelector(selector, child);
|
|
51
|
+
if (nestedElement) {
|
|
52
|
+
return nestedElement;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
function selectAction(index, store) {
|
|
58
|
+
const state = store.getState();
|
|
59
|
+
const actionsList = state.listId ? findElementByQuerySelector(`#${state.listId}`) : null;
|
|
60
|
+
const selected = actionsList?.querySelector("[data-selected]");
|
|
61
|
+
const actions = actionsList?.querySelectorAll("[data-action]") ?? [];
|
|
62
|
+
const nextIndex = index === -1 ? actions.length - 1 : index === actions.length ? 0 : index;
|
|
63
|
+
const selectedIndex = clamp(nextIndex, 0, actions.length - 1);
|
|
64
|
+
selected?.removeAttribute("data-selected");
|
|
65
|
+
actions[selectedIndex]?.scrollIntoView({ block: "nearest" });
|
|
66
|
+
actions[selectedIndex]?.setAttribute("data-selected", "true");
|
|
67
|
+
setSelectedAction(selectedIndex, store);
|
|
68
|
+
return selectedIndex;
|
|
69
|
+
}
|
|
70
|
+
function selectNextAction(store) {
|
|
71
|
+
return selectAction(store.getState().selected + 1, store);
|
|
72
|
+
}
|
|
73
|
+
function selectPreviousAction(store) {
|
|
74
|
+
return selectAction(store.getState().selected - 1, store);
|
|
75
|
+
}
|
|
76
|
+
function triggerSelectedAction(store) {
|
|
77
|
+
const state = store.getState();
|
|
78
|
+
const selected = findElementByQuerySelector(
|
|
79
|
+
`#${state.listId} [data-selected]`
|
|
80
|
+
);
|
|
81
|
+
selected?.click();
|
|
82
|
+
}
|
|
83
|
+
function registerAction(id, store) {
|
|
84
|
+
const state = store.getState();
|
|
85
|
+
state.registeredActions.add(id);
|
|
86
|
+
return () => {
|
|
87
|
+
state.registeredActions.delete(id);
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function setQuery(query, store) {
|
|
91
|
+
updateSpotlightStateAction(() => ({ query }), store);
|
|
92
|
+
Promise.resolve().then(() => {
|
|
93
|
+
selectAction(0, store);
|
|
94
|
+
updateSpotlightStateAction(
|
|
95
|
+
(state) => ({
|
|
96
|
+
empty: state.query.trim().length > 0 && state.registeredActions.size === 0 || false
|
|
97
|
+
}),
|
|
98
|
+
store
|
|
99
|
+
);
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
function clearSpotlightState({ clearQuery }, store) {
|
|
103
|
+
store.updateState((state) => ({
|
|
104
|
+
...state,
|
|
105
|
+
selected: -1,
|
|
106
|
+
query: clearQuery ? "" : state.query,
|
|
107
|
+
empty: clearQuery ? false : state.empty
|
|
108
|
+
}));
|
|
109
|
+
}
|
|
110
|
+
const spotlightActions = {
|
|
111
|
+
open: openSpotlightAction,
|
|
112
|
+
close: closeSpotlightAction,
|
|
113
|
+
toggle: toggleSpotlightAction,
|
|
114
|
+
updateState: updateSpotlightStateAction,
|
|
115
|
+
setSelectedAction,
|
|
116
|
+
setListId,
|
|
117
|
+
selectAction,
|
|
118
|
+
selectNextAction,
|
|
119
|
+
selectPreviousAction,
|
|
120
|
+
triggerSelectedAction,
|
|
121
|
+
registerAction,
|
|
122
|
+
setQuery,
|
|
123
|
+
clearSpotlightState
|
|
124
|
+
};
|
|
125
|
+
function createSpotlight() {
|
|
126
|
+
const store = createSpotlightStore();
|
|
127
|
+
const actions = {
|
|
128
|
+
open: () => openSpotlightAction(store),
|
|
129
|
+
close: () => closeSpotlightAction(store),
|
|
130
|
+
toggle: () => toggleSpotlightAction(store)
|
|
131
|
+
};
|
|
132
|
+
return [store, actions];
|
|
133
|
+
}
|
|
134
|
+
const [spotlightStore, spotlight] = createSpotlight();
|
|
135
|
+
const { open: openSpotlight, close: closeSpotlight, toggle: toggleSpotlight } = spotlight;
|
|
136
|
+
|
|
137
|
+
export { clearSpotlightState, closeSpotlight, closeSpotlightAction, createSpotlight, createSpotlightStore, openSpotlight, openSpotlightAction, registerAction, selectAction, selectNextAction, selectPreviousAction, setListId, setQuery, setSelectedAction, spotlight, spotlightActions, spotlightStore, toggleSpotlight, toggleSpotlightAction, triggerSelectedAction, updateSpotlightStateAction, useSpotlight };
|
|
138
|
+
//# sourceMappingURL=spotlight.store.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spotlight.store.mjs","sources":["../src/spotlight.store.ts"],"sourcesContent":["import { clamp } from '@mantine/hooks';\nimport { createStore, MantineStore, useStore } from '@mantine/store';\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) => useStore(store);\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.updateState((state) => ({ ...state, selected: index }));\n}\n\nexport function setListId(id: string, store: SpotlightStore) {\n store.updateState((state) => ({ ...state, listId: id }));\n}\n\nfunction findElementByQuerySelector<T extends HTMLElement>(\n selector: string,\n root: Document | Element | ShadowRoot = document\n): T | null {\n // Directly try to find the element in the current root.\n const element = root.querySelector<T>(selector);\n if (element) {\n return element;\n }\n\n // Iterate through all children of the current root.\n const children = root instanceof ShadowRoot ? root.host.children : root.children;\n for (let i = 0; i < children.length; i += 1) {\n const child = children[i];\n\n // Recursively search in the child's shadow root if it exists.\n if (child.shadowRoot) {\n const shadowElement = findElementByQuerySelector<T>(selector, child.shadowRoot);\n if (shadowElement) {\n return shadowElement;\n }\n }\n\n // Also, search recursively in the child itself if it does not have a shadow root or the element wasn't found in its shadow root.\n const nestedElement = findElementByQuerySelector<T>(selector, child);\n if (nestedElement) {\n return nestedElement;\n }\n }\n\n // Return null if the element isn't found in the current root or any of its shadow DOMs.\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\n const selectedIndex = clamp(nextIndex, 0, actions.length - 1);\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 = findElementByQuerySelector<HTMLButtonElement>(\n `#${state.listId} [data-selected]`\n );\n selected?.click();\n}\n\nexport function registerAction(id: string, store: SpotlightStore) {\n const state = store.getState();\n state.registeredActions.add(id);\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.updateState((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"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { GetStylesApi } from '@mantine/core';
|
|
2
|
+
import { SpotlightStore } from './spotlight.store';
|
|
3
|
+
import type { SpotlightRootFactory } from './SpotlightRoot';
|
|
4
|
+
interface SpotlightContextValue {
|
|
5
|
+
query: string;
|
|
6
|
+
setQuery: (query: string) => void;
|
|
7
|
+
getStyles: GetStylesApi<SpotlightRootFactory>;
|
|
8
|
+
store: SpotlightStore;
|
|
9
|
+
closeOnActionTrigger: boolean | undefined;
|
|
10
|
+
}
|
|
11
|
+
export declare const SpotlightProvider: ({ children, value }: {
|
|
12
|
+
value: SpotlightContextValue;
|
|
13
|
+
children: React.ReactNode;
|
|
14
|
+
}) => import("react/jsx-runtime").JSX.Element, useSpotlightContext: () => SpotlightContextValue;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Factory } from '@mantine/core';
|
|
2
|
+
import { spotlight } from './spotlight.store';
|
|
3
|
+
import { SpotlightAction, SpotlightActionProps } from './SpotlightAction';
|
|
4
|
+
import { SpotlightActionsGroup } from './SpotlightActionsGroup';
|
|
5
|
+
import { SpotlightActionsList } from './SpotlightActionsList';
|
|
6
|
+
import { SpotlightEmpty } from './SpotlightEmpty';
|
|
7
|
+
import { SpotlightFooter } from './SpotlightFooter';
|
|
8
|
+
import { SpotlightRoot, SpotlightRootProps, SpotlightRootStylesNames } from './SpotlightRoot';
|
|
9
|
+
import { SpotlightSearch, SpotlightSearchProps } from './SpotlightSearch';
|
|
10
|
+
export type SpotlightFilterFunction = (query: string, actions: SpotlightActions[]) => SpotlightActions[];
|
|
11
|
+
export interface SpotlightActionData extends SpotlightActionProps {
|
|
12
|
+
id: string;
|
|
13
|
+
group?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface SpotlightActionGroupData {
|
|
16
|
+
group: string;
|
|
17
|
+
actions: SpotlightActionData[];
|
|
18
|
+
}
|
|
19
|
+
export type SpotlightActions = SpotlightActionData | SpotlightActionGroupData;
|
|
20
|
+
export type SpotlightStylesNames = SpotlightRootStylesNames;
|
|
21
|
+
export interface SpotlightProps extends SpotlightRootProps {
|
|
22
|
+
/** Props passed down to the `Spotlight.Search` */
|
|
23
|
+
searchProps?: SpotlightSearchProps;
|
|
24
|
+
/** Actions data, passed down to `Spotlight.Action` component */
|
|
25
|
+
actions: SpotlightActions[];
|
|
26
|
+
/** Function to filter actions data based on search query, by default actions are filtered by title, description and keywords */
|
|
27
|
+
filter?: SpotlightFilterFunction;
|
|
28
|
+
/** Message displayed when none of the actions match given `filter` */
|
|
29
|
+
nothingFound?: React.ReactNode;
|
|
30
|
+
/** Determines whether search query should be highlighted in action label, `false` by default */
|
|
31
|
+
highlightQuery?: boolean;
|
|
32
|
+
/** Maximum number of actions displayed at a time, `Infinity` by default */
|
|
33
|
+
limit?: number;
|
|
34
|
+
}
|
|
35
|
+
export type SpotlightFactory = Factory<{
|
|
36
|
+
props: SpotlightProps;
|
|
37
|
+
ref: HTMLDivElement;
|
|
38
|
+
stylesNames: SpotlightStylesNames;
|
|
39
|
+
staticComponents: {
|
|
40
|
+
Search: typeof SpotlightSearch;
|
|
41
|
+
ActionsList: typeof SpotlightActionsList;
|
|
42
|
+
Action: typeof SpotlightAction;
|
|
43
|
+
Empty: typeof SpotlightEmpty;
|
|
44
|
+
Footer: typeof SpotlightFooter;
|
|
45
|
+
ActionsGroup: typeof SpotlightActionsGroup;
|
|
46
|
+
Root: typeof SpotlightRoot;
|
|
47
|
+
open: typeof spotlight.open;
|
|
48
|
+
close: typeof spotlight.close;
|
|
49
|
+
toggle: typeof spotlight.toggle;
|
|
50
|
+
};
|
|
51
|
+
}>;
|
|
52
|
+
export declare const Spotlight: import("@mantine/core").MantineComponent<{
|
|
53
|
+
props: SpotlightProps;
|
|
54
|
+
ref: HTMLDivElement;
|
|
55
|
+
stylesNames: SpotlightStylesNames;
|
|
56
|
+
staticComponents: {
|
|
57
|
+
Search: typeof SpotlightSearch;
|
|
58
|
+
ActionsList: typeof SpotlightActionsList;
|
|
59
|
+
Action: typeof SpotlightAction;
|
|
60
|
+
Empty: typeof SpotlightEmpty;
|
|
61
|
+
Footer: typeof SpotlightFooter;
|
|
62
|
+
ActionsGroup: typeof SpotlightActionsGroup;
|
|
63
|
+
Root: typeof SpotlightRoot;
|
|
64
|
+
open: typeof spotlight.open;
|
|
65
|
+
close: typeof spotlight.close;
|
|
66
|
+
toggle: typeof spotlight.toggle;
|
|
67
|
+
};
|
|
68
|
+
}>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { BoxProps, CompoundStylesApiProps, ElementProps, Factory, MantineColor } from '@mantine/core';
|
|
2
|
+
export type SpotlightActionStylesNames = 'action' | 'actionLabel' | 'actionDescription' | 'actionSection' | 'actionBody';
|
|
3
|
+
export interface SpotlightActionProps extends BoxProps, CompoundStylesApiProps<SpotlightActionFactory>, ElementProps<'button'> {
|
|
4
|
+
/** Action label, pass string to use in default filter */
|
|
5
|
+
label?: string;
|
|
6
|
+
/** Action description, pass string to use in default filter */
|
|
7
|
+
description?: string;
|
|
8
|
+
/** Section displayed on the left side of the label, for example, icon */
|
|
9
|
+
leftSection?: React.ReactNode;
|
|
10
|
+
/** Section displayed on the right side of the label, for example, hotkey */
|
|
11
|
+
rightSection?: React.ReactNode;
|
|
12
|
+
/** Children override default action elements, if passed, label, description and sections are hidden */
|
|
13
|
+
children?: React.ReactNode;
|
|
14
|
+
/** Determines whether left and right sections should have dimmed styles, `true` by default */
|
|
15
|
+
dimmedSections?: boolean;
|
|
16
|
+
/** Determines whether search query should be highlighted in action label, `false` by default */
|
|
17
|
+
highlightQuery?: boolean;
|
|
18
|
+
/** Key of `theme.colors` of any valid CSS color that will be used to highlight search query, `'yellow'` by default */
|
|
19
|
+
highlightColor?: MantineColor;
|
|
20
|
+
/** Determines whether the spotlight should be closed when action is triggered, overrides `closeOnActionTrigger` prop set on `Spotlight` */
|
|
21
|
+
closeSpotlightOnTrigger?: boolean;
|
|
22
|
+
/** Keywords that are used for default filtering, not displayed anywhere, can be a string: "react,router,javascript" or an array: ['react', 'router', 'javascript'] */
|
|
23
|
+
keywords?: string | string[];
|
|
24
|
+
}
|
|
25
|
+
export type SpotlightActionFactory = Factory<{
|
|
26
|
+
props: SpotlightActionProps;
|
|
27
|
+
ref: HTMLButtonElement;
|
|
28
|
+
stylesNames: SpotlightActionStylesNames;
|
|
29
|
+
compound: true;
|
|
30
|
+
}>;
|
|
31
|
+
export declare const SpotlightAction: import("@mantine/core").MantineComponent<{
|
|
32
|
+
props: SpotlightActionProps;
|
|
33
|
+
ref: HTMLButtonElement;
|
|
34
|
+
stylesNames: SpotlightActionStylesNames;
|
|
35
|
+
compound: true;
|
|
36
|
+
}>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { BoxProps, CompoundStylesApiProps, ElementProps, Factory } from '@mantine/core';
|
|
2
|
+
export type SpotlightActionsGroupStylesNames = 'actionsGroup';
|
|
3
|
+
export interface SpotlightActionsGroupProps extends BoxProps, CompoundStylesApiProps<SpotlightActionsGroupFactory>, ElementProps<'div'> {
|
|
4
|
+
/** `Spotlight.Action` components */
|
|
5
|
+
children?: React.ReactNode;
|
|
6
|
+
/** Group label */
|
|
7
|
+
label?: React.ReactNode;
|
|
8
|
+
}
|
|
9
|
+
export type SpotlightActionsGroupFactory = Factory<{
|
|
10
|
+
props: SpotlightActionsGroupProps;
|
|
11
|
+
ref: HTMLDivElement;
|
|
12
|
+
stylesNames: SpotlightActionsGroupStylesNames;
|
|
13
|
+
compound: true;
|
|
14
|
+
}>;
|
|
15
|
+
export declare const SpotlightActionsGroup: import("@mantine/core").MantineComponent<{
|
|
16
|
+
props: SpotlightActionsGroupProps;
|
|
17
|
+
ref: HTMLDivElement;
|
|
18
|
+
stylesNames: SpotlightActionsGroupStylesNames;
|
|
19
|
+
compound: true;
|
|
20
|
+
}>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BoxProps, CompoundStylesApiProps, ElementProps, Factory } from '@mantine/core';
|
|
2
|
+
export type SpotlightActionsListStylesNames = 'actionsList' | 'actionsListInner';
|
|
3
|
+
export interface SpotlightActionsListProps extends BoxProps, CompoundStylesApiProps<SpotlightActionsListFactory>, ElementProps<'div'> {
|
|
4
|
+
}
|
|
5
|
+
export type SpotlightActionsListFactory = Factory<{
|
|
6
|
+
props: SpotlightActionsListProps;
|
|
7
|
+
ref: HTMLDivElement;
|
|
8
|
+
stylesNames: SpotlightActionsListStylesNames;
|
|
9
|
+
compound: true;
|
|
10
|
+
}>;
|
|
11
|
+
export declare const SpotlightActionsList: import("@mantine/core").MantineComponent<{
|
|
12
|
+
props: SpotlightActionsListProps;
|
|
13
|
+
ref: HTMLDivElement;
|
|
14
|
+
stylesNames: SpotlightActionsListStylesNames;
|
|
15
|
+
compound: true;
|
|
16
|
+
}>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BoxProps, CompoundStylesApiProps, ElementProps, Factory } from '@mantine/core';
|
|
2
|
+
export type SpotlightEmptyStylesNames = 'empty';
|
|
3
|
+
export interface SpotlightEmptyProps extends BoxProps, CompoundStylesApiProps<SpotlightEmptyFactory>, ElementProps<'div'> {
|
|
4
|
+
}
|
|
5
|
+
export type SpotlightEmptyFactory = Factory<{
|
|
6
|
+
props: SpotlightEmptyProps;
|
|
7
|
+
ref: HTMLDivElement;
|
|
8
|
+
stylesNames: SpotlightEmptyStylesNames;
|
|
9
|
+
compound: true;
|
|
10
|
+
}>;
|
|
11
|
+
export declare const SpotlightEmpty: import("@mantine/core").MantineComponent<{
|
|
12
|
+
props: SpotlightEmptyProps;
|
|
13
|
+
ref: HTMLDivElement;
|
|
14
|
+
stylesNames: SpotlightEmptyStylesNames;
|
|
15
|
+
compound: true;
|
|
16
|
+
}>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BoxProps, CompoundStylesApiProps, ElementProps, Factory } from '@mantine/core';
|
|
2
|
+
export type SpotlightFooterStylesNames = 'footer';
|
|
3
|
+
export interface SpotlightFooterProps extends BoxProps, CompoundStylesApiProps<SpotlightFooterFactory>, ElementProps<'div'> {
|
|
4
|
+
}
|
|
5
|
+
export type SpotlightFooterFactory = Factory<{
|
|
6
|
+
props: SpotlightFooterProps;
|
|
7
|
+
ref: HTMLDivElement;
|
|
8
|
+
stylesNames: SpotlightFooterStylesNames;
|
|
9
|
+
compound: true;
|
|
10
|
+
}>;
|
|
11
|
+
export declare const SpotlightFooter: import("@mantine/core").MantineComponent<{
|
|
12
|
+
props: SpotlightFooterProps;
|
|
13
|
+
ref: HTMLDivElement;
|
|
14
|
+
stylesNames: SpotlightFooterStylesNames;
|
|
15
|
+
compound: true;
|
|
16
|
+
}>;
|