{"version":3,"file":"Spotlight.cjs","sources":["../src/Spotlight.tsx"],"sourcesContent":["import { For, JSX, splitProps } from 'solid-js';\nimport { factory, Factory, getDefaultZIndex, useProps } from '@empoleon/core';\nimport { useUncontrolled } from '@empoleon/hooks';\nimport { defaultSpotlightFilter } from './default-spotlight-filter';\nimport { isActionsGroup } from './is-actions-group';\nimport { limitActions } from './limit-actions';\nimport { spotlight, spotlightStore } from './spotlight.store';\nimport { SpotlightAction, SpotlightActionProps } from './SpotlightAction';\nimport { SpotlightActionsGroup } from './SpotlightActionsGroup';\nimport { SpotlightActionsList } from './SpotlightActionsList';\nimport { SpotlightEmpty } from './SpotlightEmpty';\nimport { SpotlightFooter } from './SpotlightFooter';\nimport { SpotlightRoot, SpotlightRootProps, SpotlightRootStylesNames } from './SpotlightRoot';\nimport { SpotlightSearch, SpotlightSearchProps } 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;\n\nexport type SpotlightStylesNames = SpotlightRootStylesNames;\n\nexport interface SpotlightProps extends SpotlightRootProps {\n  /** Props passed down to the `Spotlight.Search` */\n  searchProps?: SpotlightSearchProps;\n\n  /** Actions data, passed down to `Spotlight.Action` component */\n  actions: SpotlightActions[];\n\n  /** Function to filter actions data based on search query, by default actions are filtered by title, description and keywords */\n  filter?: SpotlightFilterFunction;\n\n  /** Message displayed when none of the actions match given `filter` */\n  nothingFound?: JSX.Element;\n\n  /** Determines whether search query should be highlighted in action label, `false` by default */\n  highlightQuery?: boolean;\n\n  /** Maximum number of actions displayed at a time, `Infinity` by default */\n  limit?: number;\n}\n\nexport type SpotlightFactory = Factory<{\n  props: SpotlightProps;\n  ref: HTMLDivElement;\n  stylesNames: SpotlightStylesNames;\n  staticComponents: {\n    Search: typeof SpotlightSearch;\n    ActionsList: typeof SpotlightActionsList;\n    Action: typeof SpotlightAction;\n    Empty: typeof SpotlightEmpty;\n    Footer: typeof SpotlightFooter;\n    ActionsGroup: typeof SpotlightActionsGroup;\n    Root: typeof SpotlightRoot;\n    open: typeof spotlight.open;\n    close: typeof spotlight.close;\n    toggle: typeof spotlight.toggle;\n  };\n}>;\n\nconst defaultProps: Partial<SpotlightProps> = {\n  size: 600,\n  yOffset: '80px',\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  highlightQuery: false,\n};\n\nexport const Spotlight = factory<SpotlightFactory>(_props => {\n  const props = useProps('Spotlight', defaultProps, _props);\n  const [local, others] = splitProps(props, [\n    'searchProps',\n    'filter',\n    'query',\n    'onQueryChange',\n    'actions',\n    'nothingFound',\n    'highlightQuery',\n    'limit',\n    'ref'\n  ]);\n\n  const [_query, setQuery] = useUncontrolled({\n    value: () => local.query,\n    defaultValue: '',\n    finalValue: '',\n    onChange: local.onQueryChange,\n  });\n\n  const filteredActions = () => (\n    <For each={limitActions(local.filter!(_query(), local.actions), local.limit!)}>\n      {(item) => {\n        if (isActionsGroup(item)) {\n          return (\n            <SpotlightActionsGroup label={item.group}>\n              <For each={item.actions}>\n                {({ id, ...actionData }) => (\n                  <SpotlightAction highlightQuery={local.highlightQuery} {...actionData} />\n                )}\n              </For>\n            </SpotlightActionsGroup>\n          );\n        }\n\n        return <SpotlightAction highlightQuery={local.highlightQuery} {...item} />;\n      }}\n    </For>\n  );\n\n  return (\n    <SpotlightRoot {...others} query={_query()} onQueryChange={setQuery} ref={local.ref}>\n      <SpotlightSearch {...local.searchProps} />\n      <SpotlightActionsList>\n        {filteredActions()}\n        {filteredActions.length === 0 && local.nothingFound && (\n          <SpotlightEmpty>{local.nothingFound}</SpotlightEmpty>\n        )}\n      </SpotlightActionsList>\n    </SpotlightRoot>\n  );\n});\n\nSpotlight.classes = classes;\nSpotlight.displayName = '@empoleon/spotlight/Spotlight';\nSpotlight.Search = SpotlightSearch;\nSpotlight.ActionsList = SpotlightActionsList;\nSpotlight.Action = SpotlightAction;\nSpotlight.Empty = SpotlightEmpty;\nSpotlight.ActionsGroup = SpotlightActionsGroup;\nSpotlight.Footer = SpotlightFooter;\nSpotlight.Root = SpotlightRoot;\nSpotlight.open = spotlight.open;\nSpotlight.close = spotlight.close;\nSpotlight.toggle = spotlight.toggle;\n"],"names":["defaultProps","size","yOffset","limit","Infinity","zIndex","getDefaultZIndex","overlayProps","backgroundOpacity","blur","transitionProps","duration","transition","store","spotlightStore","filter","defaultSpotlightFilter","clearQueryOnClose","closeOnActionTrigger","shortcut","highlightQuery","Spotlight","factory","_props","props","useProps","local","others","splitProps","_query","setQuery","useUncontrolled","value","query","defaultValue","finalValue","onChange","onQueryChange","filteredActions","_$createComponent","For","each","limitActions","actions","children","item","isActionsGroup","SpotlightActionsGroup","label","group","_ref","id","actionData","SpotlightAction","_$mergeProps","SpotlightRoot","ref","r$","_ref$","SpotlightSearch","searchProps","SpotlightActionsList","_$memo","length","nothingFound","SpotlightEmpty","classes","displayName","Search","ActionsList","Action","Empty","ActionsGroup","Footer","SpotlightFooter","Root","open","spotlight","close","toggle"],"mappings":"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"}