@fremtind/jokul 0.30.8 → 0.31.1

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 (71) hide show
  1. package/build/build-stats.html +1 -1
  2. package/build/cjs/components/autosuggest/Autosuggest.cjs +2 -0
  3. package/build/cjs/components/autosuggest/Autosuggest.cjs.map +1 -0
  4. package/build/cjs/components/autosuggest/Autosuggest.d.cts +47 -0
  5. package/build/cjs/components/autosuggest/BaseAutosuggest.cjs +2 -0
  6. package/build/cjs/components/autosuggest/BaseAutosuggest.cjs.map +1 -0
  7. package/build/cjs/components/autosuggest/BaseAutosuggest.d.cts +16 -0
  8. package/build/cjs/components/autosuggest/ControllerButton.cjs +2 -0
  9. package/build/cjs/components/autosuggest/ControllerButton.cjs.map +1 -0
  10. package/build/cjs/components/autosuggest/ControllerButton.d.cts +8 -0
  11. package/build/cjs/components/autosuggest/Menu.cjs +2 -0
  12. package/build/cjs/components/autosuggest/Menu.cjs.map +1 -0
  13. package/build/cjs/components/autosuggest/Menu.d.cts +16 -0
  14. package/build/cjs/components/autosuggest/index.cjs +2 -0
  15. package/build/cjs/components/autosuggest/index.cjs.map +1 -0
  16. package/build/cjs/components/autosuggest/index.d.cts +2 -0
  17. package/build/cjs/components/autosuggest/utils.cjs +2 -0
  18. package/build/cjs/components/autosuggest/utils.cjs.map +1 -0
  19. package/build/cjs/components/autosuggest/utils.d.cts +1 -0
  20. package/build/es/components/autosuggest/Autosuggest.d.ts +47 -0
  21. package/build/es/components/autosuggest/Autosuggest.js +2 -0
  22. package/build/es/components/autosuggest/Autosuggest.js.map +1 -0
  23. package/build/es/components/autosuggest/BaseAutosuggest.d.ts +16 -0
  24. package/build/es/components/autosuggest/BaseAutosuggest.js +2 -0
  25. package/build/es/components/autosuggest/BaseAutosuggest.js.map +1 -0
  26. package/build/es/components/autosuggest/ControllerButton.d.ts +8 -0
  27. package/build/es/components/autosuggest/ControllerButton.js +2 -0
  28. package/build/es/components/autosuggest/ControllerButton.js.map +1 -0
  29. package/build/es/components/autosuggest/Menu.d.ts +16 -0
  30. package/build/es/components/autosuggest/Menu.js +2 -0
  31. package/build/es/components/autosuggest/Menu.js.map +1 -0
  32. package/build/es/components/autosuggest/index.d.ts +2 -0
  33. package/build/es/components/autosuggest/index.js +2 -0
  34. package/build/es/components/autosuggest/index.js.map +1 -0
  35. package/build/es/components/autosuggest/utils.d.ts +1 -0
  36. package/build/es/components/autosuggest/utils.js +2 -0
  37. package/build/es/components/autosuggest/utils.js.map +1 -0
  38. package/package.json +16 -5
  39. package/styles/components/autosuggest/_index.scss +3 -0
  40. package/styles/components/autosuggest/autosuggest.css +141 -0
  41. package/styles/components/autosuggest/autosuggest.min.css +1 -0
  42. package/styles/components/autosuggest/autosuggest.scss +126 -0
  43. package/styles/components/button/button.css +2 -2
  44. package/styles/components/button/button.min.css +1 -1
  45. package/styles/components/checkbox/checkbox.css +4 -4
  46. package/styles/components/checkbox/checkbox.min.css +1 -1
  47. package/styles/components/feedback/feedback.css +2 -2
  48. package/styles/components/feedback/feedback.min.css +1 -1
  49. package/styles/components/input-group/input-group.css +2 -2
  50. package/styles/components/input-group/input-group.min.css +1 -1
  51. package/styles/components/input-panel/checkbox-panel.css +2 -2
  52. package/styles/components/input-panel/checkbox-panel.min.css +1 -1
  53. package/styles/components/input-panel/radio-panel.css +2 -2
  54. package/styles/components/input-panel/radio-panel.min.css +1 -1
  55. package/styles/components/loader/loader.css +6 -6
  56. package/styles/components/loader/loader.min.css +1 -1
  57. package/styles/components/loader/skeleton-loader.css +5 -5
  58. package/styles/components/loader/skeleton-loader.min.css +1 -1
  59. package/styles/components/message/message.css +2 -2
  60. package/styles/components/message/message.min.css +1 -1
  61. package/styles/components/progress-bar/progress-bar.css +2 -2
  62. package/styles/components/progress-bar/progress-bar.min.css +1 -1
  63. package/styles/components/radio-button/radio-button.css +2 -2
  64. package/styles/components/radio-button/radio-button.min.css +1 -1
  65. package/styles/components/system-message/system-message.css +2 -2
  66. package/styles/components/system-message/system-message.min.css +1 -1
  67. package/styles/components/toast/toast.css +4 -4
  68. package/styles/components/toast/toast.min.css +1 -1
  69. package/styles/styles.css +2620 -2482
  70. package/styles/styles.min.css +1 -1
  71. package/styles/styles.scss +1 -0
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("react"),n=require("./BaseAutosuggest.cjs"),s=require("./utils.cjs");exports.Autosuggest=({allItems:u,onChange:r=(()=>{}),onConfirm:o=(()=>{}),onInputValueChange:i,onStateChange:a,value:l,isOpen:c,...g})=>{const[m,p]=t.useState(u);t.useEffect((()=>p(u)),[u]);return e.jsx(n,{...g,items:m,itemToString:e=>e||"",onConfirm:o,downshiftProps:{selectedItem:l,onInputValueChange:i,onStateChange:e=>{a&&a(e),void 0!==e.selectedItem?r(e.selectedItem||""):e.inputValue&&p(s.filter(u,e.inputValue))},isOpen:c}})};
2
+ //# sourceMappingURL=Autosuggest.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Autosuggest.cjs","sources":["../../../../src/components/autosuggest/Autosuggest.tsx"],"sourcesContent":["import type { StateChangeOptions } from \"downshift\";\nimport React, { type ReactNode, useEffect, useState } from \"react\";\nimport type { Density } from \"../../core/types.js\";\nimport { LabelProps } from \"../input-group/Label.js\";\nimport type { SupportLabelProps } from \"../input-group/SupportLabel.js\";\nimport type { PopupTipProps } from \"../tooltip/PopupTip.js\";\nimport BaseAutosuggest from \"./BaseAutosuggest.js\";\nimport { filter } from \"./utils.js\";\n\nexport type CommonProps = (\n | {\n label: string;\n labelProps?: Omit<\n LabelProps,\n \"children\" | \"density\" | \"htmlFor\" | \"standAlone\"\n >;\n inputId?: null;\n labelId?: null;\n }\n | {\n label?: null;\n labelProps?: null;\n inputId: string;\n labelId: string;\n }\n) & {\n className?: string;\n isOpen?: boolean;\n /** @deprecated Bruk helpLabel eller flytt denne teksten ovenfor skjemafeltets label */\n leadText?: string;\n errorLabel?: string;\n helpLabel?: string;\n supportLabelProps?: Omit<\n SupportLabelProps,\n \"id\" | \"errorLabel\" | \"helpLabel\" | \"density\"\n >;\n tooltipProps?: PopupTipProps;\n variant?: \"large\" | \"medium\" | \"small\";\n density?: Density;\n placeholder?: string;\n /** @deprecated Bruk noHits med text og evt. defaultverdier for items */\n noHitsMessage?: ReactNode;\n maxNumberOfHits?: number;\n showDropdownControllerButton?: boolean;\n onInputValueChange?: (inputValue: string) => void;\n noHits?: { items: string[]; text: ReactNode };\n};\n\nexport interface AutosuggestStringItemProps {\n allItems: string[];\n value: string;\n onChange?: (item: string) => void;\n onStateChange?: (changes: StateChangeOptions<string>) => void;\n onConfirm?: () => void;\n}\n\nexport type AutosuggestProps = CommonProps & AutosuggestStringItemProps;\n\nexport const Autosuggest = ({\n allItems,\n onChange = () => {\n /* default noop */\n },\n onConfirm = () => {\n /* noop */\n },\n onInputValueChange,\n onStateChange,\n value,\n isOpen,\n ...rest\n}: AutosuggestProps): JSX.Element => {\n const [hits, setHits] = useState(allItems);\n\n useEffect(() => setHits(allItems), [allItems]);\n\n const handleStateChange = (changes: StateChangeOptions<string>) => {\n if (onStateChange) {\n onStateChange(changes);\n }\n\n if (changes.selectedItem !== undefined) {\n onChange(changes.selectedItem || \"\");\n } else if (changes.inputValue) {\n setHits(filter(allItems, changes.inputValue));\n }\n };\n\n const itemToString = (item: string | null) => (item ? item : \"\");\n\n return (\n <BaseAutosuggest\n {...rest}\n items={hits}\n itemToString={itemToString}\n onConfirm={onConfirm}\n downshiftProps={{\n selectedItem: value,\n onInputValueChange,\n onStateChange: handleStateChange,\n isOpen,\n }}\n />\n );\n};\n"],"names":["allItems","onChange","onConfirm","onInputValueChange","onStateChange","value","isOpen","rest","hits","setHits","useState","useEffect","jsx","BaseAutosuggest","items","itemToString","item","downshiftProps","selectedItem","changes","inputValue","filter"],"mappings":"wNA0D2B,EACvBA,SAAAA,EACAC,SAAAA,EAAW,SAGXC,UAAAA,EAAY,SAGZC,mBAAAA,EACAC,cAAAA,EACAC,MAAAA,EACAC,OAAAA,KACGC,MAEH,MAAOC,EAAMC,GAAWC,WAASV,GAEjCW,EAAAA,WAAU,IAAMF,EAAQT,IAAW,CAACA,IAiBhC,OAAAY,EAAAA,IAACC,EAAA,IACON,EACJO,MAAON,EACPO,aANcC,GAAyBA,GAAc,GAOrDd,UAAAA,EACAe,eAAgB,CACZC,aAAcb,EACdF,mBAAAA,EACAC,cAvBee,IACnBf,GACAA,EAAce,QAGW,IAAzBA,EAAQD,aACCjB,EAAAkB,EAAQD,cAAgB,IAC1BC,EAAQC,YACfX,EAAQY,EAAAA,OAAOrB,EAAUmB,EAAQC,YAAW,EAgBxCd,OAAAA,IACJ"}
@@ -0,0 +1,47 @@
1
+ import { StateChangeOptions } from 'downshift';
2
+ import { ReactNode } from 'react';
3
+ import { Density } from '../../core/types.cjs';
4
+ import { LabelProps } from '../input-group/Label.cjs';
5
+ import { SupportLabelProps } from '../input-group/SupportLabel.cjs';
6
+ import { PopupTipProps } from '../tooltip/PopupTip.cjs';
7
+ export type CommonProps = ({
8
+ label: string;
9
+ labelProps?: Omit<LabelProps, "children" | "density" | "htmlFor" | "standAlone">;
10
+ inputId?: null;
11
+ labelId?: null;
12
+ } | {
13
+ label?: null;
14
+ labelProps?: null;
15
+ inputId: string;
16
+ labelId: string;
17
+ }) & {
18
+ className?: string;
19
+ isOpen?: boolean;
20
+ /** @deprecated Bruk helpLabel eller flytt denne teksten ovenfor skjemafeltets label */
21
+ leadText?: string;
22
+ errorLabel?: string;
23
+ helpLabel?: string;
24
+ supportLabelProps?: Omit<SupportLabelProps, "id" | "errorLabel" | "helpLabel" | "density">;
25
+ tooltipProps?: PopupTipProps;
26
+ variant?: "large" | "medium" | "small";
27
+ density?: Density;
28
+ placeholder?: string;
29
+ /** @deprecated Bruk noHits med text og evt. defaultverdier for items */
30
+ noHitsMessage?: ReactNode;
31
+ maxNumberOfHits?: number;
32
+ showDropdownControllerButton?: boolean;
33
+ onInputValueChange?: (inputValue: string) => void;
34
+ noHits?: {
35
+ items: string[];
36
+ text: ReactNode;
37
+ };
38
+ };
39
+ export interface AutosuggestStringItemProps {
40
+ allItems: string[];
41
+ value: string;
42
+ onChange?: (item: string) => void;
43
+ onStateChange?: (changes: StateChangeOptions<string>) => void;
44
+ onConfirm?: () => void;
45
+ }
46
+ export type AutosuggestProps = CommonProps & AutosuggestStringItemProps;
47
+ export declare const Autosuggest: ({ allItems, onChange, onConfirm, onInputValueChange, onStateChange, value, isOpen, ...rest }: AutosuggestProps) => JSX.Element;
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("react/jsx-runtime"),t=require("classnames"),s=require("downshift"),r=require("../../hooks/useId/useId.cjs"),o=require("../input-group/InputGroup.cjs"),l=require("./ControllerButton.cjs"),i=require("./Menu.cjs");module.exports=function({className:n="",label:a,labelProps:p,tooltipProps:u,supportLabelProps:d,inputId:c,labelId:g,leadText:m,errorLabel:j,helpLabel:h,density:x,variant:b="small",noHitsMessage:I,maxNumberOfHits:P,placeholder:f,itemToString:k,items:S,downshiftProps:q,showDropdownControllerButton:w=!1,onConfirm:L=(()=>{}),noHits:N}){const H=r.useId(c||"jkl-text-input",{generateSuffix:!c}),y=r.useId(g||"jkl-label",{generateSuffix:!g}),M={inputId:H,labelId:y};return e.jsx(s,{...q,...M,itemToString:k,children:({getInputProps:s,getToggleButtonProps:r,getItemProps:c,getLabelProps:g,getMenuProps:q,getRootProps:H,selectedItem:M,isOpen:T,highlightedIndex:v,clearSelection:C})=>e.jsx(o.InputGroup,{...H(),label:a,className:t("jkl-autosuggest",n),density:x,labelProps:{variant:b,...p,...g({id:y})},supportLabelProps:d,tooltipProps:u,errorLabel:j,helpLabel:h,render:o=>e.jsxs(e.Fragment,{children:[m&&e.jsx("p",{className:t("jkl-spacing-l--bottom",{"jkl-body":"compact"!==x,"jkl-small":"compact"===x}),children:m}),e.jsxs("div",{className:"jkl-text-input-wrapper","data-invalid":!!j,children:[e.jsx("input",{...o,...s({id:o.id,placeholder:f,className:"jkl-text-input__input",onKeyDown:e=>{13===e.keyCode&&!T&&L()}}),"data-testid":"autosuggest__input"}),w&&e.jsx(l,{...r(),hasSelectedItem:!!M,clearSelection:C}),T&&e.jsx(i,{downshiftProps:{getMenuProps:q,getItemProps:c},highlightedIndex:v,items:S,itemToString:k,noHitsMessage:I,maxNumberOfHits:P,noHits:N})]})]})})})};
2
+ //# sourceMappingURL=BaseAutosuggest.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseAutosuggest.cjs","sources":["../../../../src/components/autosuggest/BaseAutosuggest.tsx"],"sourcesContent":["import cn from \"classnames\";\nimport {\n Callback,\n default as Downshift,\n type DownshiftProps,\n PropGetters,\n} from \"downshift\";\nimport React, { type ReactNode } from \"react\";\nimport { useId } from \"../../hooks/useId/useId.js\";\nimport { InputGroup } from \"../input-group/InputGroup.js\";\nimport { type CommonProps } from \"./Autosuggest.js\";\nimport ControllerButton from \"./ControllerButton.js\";\nimport Menu from \"./Menu.js\";\n\nconst KEY_ENTER = 13;\n\ntype BaseAutosuggestProps<T> = CommonProps & {\n itemToString: (item: T | null) => string;\n items: T[];\n downshiftProps: DownshiftProps<T>;\n showDropdownControllerButton?: boolean;\n onConfirm?: () => void;\n noHits?: { text: ReactNode; items: T[] };\n};\ninterface Props extends PropGetters<any>, DownshiftProps<any> {\n clearSelection: (cb?: Callback) => void;\n}\n\nfunction BaseAutosuggest<T>({\n className = \"\",\n label,\n labelProps,\n tooltipProps,\n supportLabelProps,\n inputId,\n labelId,\n leadText,\n errorLabel,\n helpLabel,\n density,\n variant = \"small\",\n noHitsMessage,\n maxNumberOfHits,\n placeholder,\n itemToString,\n items,\n downshiftProps,\n showDropdownControllerButton = false,\n onConfirm = () => {\n /* noop */\n },\n noHits,\n}: BaseAutosuggestProps<T>): JSX.Element {\n const uid = useId(inputId || \"jkl-text-input\", {\n generateSuffix: !inputId,\n });\n const lid = useId(labelId || \"jkl-label\", { generateSuffix: !labelId });\n\n const customLabelProps = {\n inputId: uid,\n labelId: lid,\n };\n\n return (\n /* @ts-ignore-next-line det er noe rart og ancient med downshift */\n <Downshift\n {...downshiftProps}\n {...customLabelProps}\n itemToString={itemToString}\n >\n {({\n getInputProps,\n getToggleButtonProps,\n getItemProps,\n getLabelProps,\n getMenuProps,\n getRootProps,\n selectedItem,\n isOpen,\n highlightedIndex,\n clearSelection,\n }: Props) => {\n return (\n <InputGroup\n {...getRootProps()}\n label={label}\n className={cn(\"jkl-autosuggest\", className)}\n density={density}\n labelProps={{\n variant,\n ...labelProps,\n ...getLabelProps({\n id: lid,\n }),\n }}\n supportLabelProps={supportLabelProps}\n tooltipProps={tooltipProps}\n errorLabel={errorLabel}\n helpLabel={helpLabel}\n render={(inputProps) => (\n <>\n {leadText && (\n <p\n className={cn(\"jkl-spacing-l--bottom\", {\n \"jkl-body\": density !== \"compact\",\n \"jkl-small\": density === \"compact\",\n })}\n >\n {leadText}\n </p>\n )}\n <div\n className=\"jkl-text-input-wrapper\"\n data-invalid={!!errorLabel}\n >\n <input\n {...inputProps}\n {...getInputProps({\n id: inputProps.id,\n placeholder,\n className: \"jkl-text-input__input\",\n onKeyDown: (e) => {\n if (\n e.keyCode === KEY_ENTER &&\n !isOpen\n ) {\n onConfirm();\n }\n },\n })}\n data-testid=\"autosuggest__input\"\n />\n {showDropdownControllerButton && (\n <ControllerButton\n {...getToggleButtonProps()}\n hasSelectedItem={!!selectedItem}\n clearSelection={clearSelection}\n />\n )}\n {isOpen && (\n <Menu\n downshiftProps={{\n getMenuProps,\n getItemProps,\n }}\n highlightedIndex={highlightedIndex}\n items={items}\n itemToString={itemToString}\n noHitsMessage={noHitsMessage}\n maxNumberOfHits={maxNumberOfHits}\n noHits={noHits}\n />\n )}\n </div>\n </>\n )}\n />\n );\n }}\n </Downshift>\n );\n}\n\nexport default BaseAutosuggest;\n"],"names":["className","label","labelProps","tooltipProps","supportLabelProps","inputId","labelId","leadText","errorLabel","helpLabel","density","variant","noHitsMessage","maxNumberOfHits","placeholder","itemToString","items","downshiftProps","showDropdownControllerButton","onConfirm","noHits","uid","useId","generateSuffix","lid","customLabelProps","jsx","Downshift","children","getInputProps","getToggleButtonProps","getItemProps","getLabelProps","getMenuProps","getRootProps","selectedItem","isOpen","highlightedIndex","clearSelection","InputGroup","cn","id","render","inputProps","jsxs","Fragment","onKeyDown","e","keyCode","ControllerButton","hasSelectedItem","Menu"],"mappings":"gQA4BA,UACIA,UAAAA,EAAY,GACZC,MAAAA,EACAC,WAAAA,EACAC,aAAAA,EACAC,kBAAAA,EACAC,QAAAA,EACAC,QAAAA,EACAC,SAAAA,EACAC,WAAAA,EACAC,UAAAA,EACAC,QAAAA,EACAC,QAAAA,EAAU,QACVC,cAAAA,EACAC,gBAAAA,EACAC,YAAAA,EACAC,aAAAA,EACAC,MAAAA,EACAC,eAAAA,EACAC,6BAAAA,GAA+B,EAC/BC,UAAAA,EAAY,SAGZC,OAAAA,IAEM,MAAAC,EAAMC,EAAAA,MAAMjB,GAAW,iBAAkB,CAC3CkB,gBAAiBlB,IAEfmB,EAAMF,QAAMhB,GAAW,YAAa,CAAEiB,gBAAiBjB,IAEvDmB,EAAmB,CACrBpB,QAASgB,EACTf,QAASkB,GAGb,OAEIE,EAAAA,IAACC,EAAA,IACOV,KACAQ,EACJV,aAAAA,EAECa,SAAC,EACEC,cAAAA,EACAC,qBAAAA,EACAC,aAAAA,EACAC,cAAAA,EACAC,aAAAA,EACAC,aAAAA,EACAC,aAAAA,EACAC,OAAAA,EACAC,iBAAAA,EACAC,eAAAA,KAGIZ,EAAAA,IAACa,EAAAA,WAAA,IACOL,IACJjC,MAAAA,EACAD,UAAWwC,EAAG,kBAAmBxC,GACjCU,QAAAA,EACAR,WAAY,CACRS,QAAAA,KACGT,KACA8B,EAAc,CACbS,GAAIjB,KAGZpB,kBAAAA,EACAD,aAAAA,EACAK,WAAAA,EACAC,UAAAA,EACAiC,OAASC,GAEAC,EAAAA,KAAAC,EAAAA,SAAA,CAAAjB,SAAA,CACGrB,GAAAmB,EAAAA,IAAC,IAAA,CACG1B,UAAWwC,EAAG,wBAAyB,CACnC,WAAwB,YAAZ9B,EACZ,YAAyB,YAAZA,IAGhBkB,SAAArB,IAGTqC,EAAAA,KAAC,MAAA,CACG5C,UAAU,yBACV,iBAAgBQ,EAEhBoB,SAAA,CAAAF,EAAAA,IAAC,QAAA,IACOiB,KACAd,EAAc,CACdY,GAAIE,EAAWF,GACf3B,YAAAA,EACAd,UAAW,wBACX8C,UAAYC,IA3GtC,KA6GkCA,EAAEC,UACDZ,GAESjB,OAItB,cAAY,uBAEfD,GACGQ,EAAAA,IAACuB,EAAA,IACOnB,IACJoB,kBAAmBf,EACnBG,eAAAA,IAGPF,GACGV,EAAAA,IAACyB,EAAA,CACGlC,eAAgB,CACZgB,aAAAA,EACAF,aAAAA,GAEJM,iBAAAA,EACArB,MAAAA,EACAD,aAAAA,EACAH,cAAAA,EACAC,gBAAAA,EACAO,OAAAA,aAW5C"}
@@ -0,0 +1,16 @@
1
+ import { DownshiftProps } from 'downshift';
2
+ import { ReactNode } from 'react';
3
+ import { CommonProps } from './Autosuggest.cjs';
4
+ type BaseAutosuggestProps<T> = CommonProps & {
5
+ itemToString: (item: T | null) => string;
6
+ items: T[];
7
+ downshiftProps: DownshiftProps<T>;
8
+ showDropdownControllerButton?: boolean;
9
+ onConfirm?: () => void;
10
+ noHits?: {
11
+ text: ReactNode;
12
+ items: T[];
13
+ };
14
+ };
15
+ declare function BaseAutosuggest<T>({ className, label, labelProps, tooltipProps, supportLabelProps, inputId, labelId, leadText, errorLabel, helpLabel, density, variant, noHitsMessage, maxNumberOfHits, placeholder, itemToString, items, downshiftProps, showDropdownControllerButton, onConfirm, noHits, }: BaseAutosuggestProps<T>): JSX.Element;
16
+ export default BaseAutosuggest;
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("react/jsx-runtime"),c=require("../icon/icons/CloseIcon.cjs"),n=require("../icon/icons/SearchIcon.cjs"),o=require("../icon-button/IconButton.cjs");module.exports=({hasSelectedItem:t,clearSelection:i,onClick:s,...r})=>e.jsx(o.IconButton,{...r,className:"jkl-text-input-action-button","aria-label":t?"Fjern valg":"Vis valg",title:t?"Fjern valg":"Vis valg",onClick:t?i:s,children:t?e.jsx(c.CloseIcon,{}):e.jsx(n.SearchIcon,{})});
2
+ //# sourceMappingURL=ControllerButton.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ControllerButton.cjs","sources":["../../../../src/components/autosuggest/ControllerButton.tsx"],"sourcesContent":["import React, { FC } from \"react\";\nimport { CloseIcon } from \"../icon/icons/CloseIcon.js\";\nimport { SearchIcon } from \"../icon/icons/SearchIcon.js\";\nimport { IconButton } from \"../icon-button/IconButton.js\";\n\ninterface Props {\n clearSelection: () => void;\n hasSelectedItem: boolean;\n onClick: () => void;\n}\n\nconst ControllerButton: FC<Props> = ({\n hasSelectedItem,\n clearSelection,\n onClick,\n ...downshiftProps\n}) => (\n <IconButton\n {...downshiftProps}\n className=\"jkl-text-input-action-button\"\n aria-label={hasSelectedItem ? \"Fjern valg\" : \"Vis valg\"}\n title={hasSelectedItem ? \"Fjern valg\" : \"Vis valg\"}\n onClick={hasSelectedItem ? clearSelection : onClick}\n >\n {hasSelectedItem ? <CloseIcon /> : <SearchIcon />}\n </IconButton>\n);\n\nexport default ControllerButton;\n"],"names":["hasSelectedItem","clearSelection","onClick","downshiftProps","jsx","IconButton","className","title","children","CloseIcon","SearchIcon"],"mappings":"+LAWoC,EAChCA,gBAAAA,EACAC,eAAAA,EACAC,QAAAA,KACGC,KAEHC,EAAAA,IAACC,EAAAA,WAAA,IACOF,EACJG,UAAU,+BACV,aAAYN,EAAkB,aAAe,WAC7CO,MAAOP,EAAkB,aAAe,WACxCE,QAASF,EAAkBC,EAAiBC,EAE3CM,SAAkBR,EAAAI,EAAAA,IAACK,EAAUA,UAAA,CAAA,SAAMC,EAAWA,WAAA"}
@@ -0,0 +1,8 @@
1
+ import { FC } from 'react';
2
+ interface Props {
3
+ clearSelection: () => void;
4
+ hasSelectedItem: boolean;
5
+ onClick: () => void;
6
+ }
7
+ declare const ControllerButton: FC<Props>;
8
+ export default ControllerButton;
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("react/jsx-runtime"),t=require("react"),s=require("classnames");module.exports=function({downshiftProps:{getMenuProps:i,getItemProps:a},highlightedIndex:l,items:u,itemToString:n,noHitsMessage:g,maxNumberOfHits:r=1/0,noHits:m}){const o=u.length>r?u.slice(0,r):u;if(0===o.length&&!g&&!m)return null;const c=0===o.length&&m?m.items:o;return e.jsxs("div",{"data-testid":"autosuggest__menu",className:"jkl-autosuggest__menu",children:[(g||m)&&0===o.length&&e.jsx("div",{className:"jkl-autosuggest__no-hits-message","aria-live":"polite",children:g||(null==m?void 0:m.text)}),c.length>0&&e.jsx("ul",{...i({className:"jkl-autosuggest__item-list"}),children:c.map(((e,i)=>t.createElement("li",{...a({item:e,className:s("jkl-autosuggest__item",{"jkl-autosuggest__item--active":i===l})}),"data-testid":"autosuggest__item",key:n(e)},n(e))))})]})};
2
+ //# sourceMappingURL=Menu.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Menu.cjs","sources":["../../../../src/components/autosuggest/Menu.tsx"],"sourcesContent":["import cn from \"classnames\";\nimport { PropGetters } from \"downshift\";\nimport React, { ReactNode } from \"react\";\n\ninterface MenuProps<T> {\n downshiftProps: Pick<PropGetters<T>, \"getMenuProps\" | \"getItemProps\">;\n highlightedIndex: number | undefined | null;\n items: T[];\n itemToString: (item: T | null) => string;\n noHitsMessage?: ReactNode;\n maxNumberOfHits?: number;\n noHits?: { items: T[]; text: ReactNode };\n}\n\nfunction Menu<T>({\n downshiftProps: { getMenuProps, getItemProps },\n highlightedIndex,\n items,\n itemToString,\n noHitsMessage,\n maxNumberOfHits = Infinity,\n noHits,\n}: MenuProps<T>): JSX.Element | null {\n const visibleItems =\n items.length > maxNumberOfHits\n ? items.slice(0, maxNumberOfHits)\n : items;\n\n if (visibleItems.length === 0 && !noHitsMessage && !noHits) {\n return null;\n }\n\n const itemList =\n visibleItems.length === 0 && noHits ? noHits.items : visibleItems;\n\n return (\n <div data-testid=\"autosuggest__menu\" className=\"jkl-autosuggest__menu\">\n {(noHitsMessage || noHits) && visibleItems.length === 0 && (\n <div\n className=\"jkl-autosuggest__no-hits-message\"\n aria-live=\"polite\"\n >\n {noHitsMessage || noHits?.text}\n </div>\n )}\n\n {itemList.length > 0 && (\n <ul\n {...getMenuProps({\n className: \"jkl-autosuggest__item-list\",\n })}\n >\n {itemList.map((item, index) => (\n <li\n {...getItemProps({\n item,\n className: cn(\"jkl-autosuggest__item\", {\n \"jkl-autosuggest__item--active\":\n index === highlightedIndex,\n }),\n })}\n data-testid=\"autosuggest__item\"\n key={itemToString(item)}\n >\n {itemToString(item)}\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n\nexport default Menu;\n"],"names":["downshiftProps","getMenuProps","getItemProps","highlightedIndex","items","itemToString","noHitsMessage","maxNumberOfHits","noHits","visibleItems","length","slice","itemList","jsxs","className","children","jsx","text","map","item","index","createElement","cn","key"],"mappings":"4GAcA,UACIA,gBAAkBC,aAAAA,EAAcC,aAAAA,GAChCC,iBAAAA,EACAC,MAAAA,EACAC,aAAAA,EACAC,cAAAA,EACAC,gBAAAA,EAAkB,IAClBC,OAAAA,IAEM,MAAAC,EACFL,EAAMM,OAASH,EACTH,EAAMO,MAAM,EAAGJ,GACfH,EAEV,GAA4B,IAAxBK,EAAaC,SAAiBJ,IAAkBE,EACzC,OAAA,KAGX,MAAMI,EACsB,IAAxBH,EAAaC,QAAgBF,EAASA,EAAOJ,MAAQK,EAEzD,OACKI,EAAAA,KAAA,MAAA,CAAI,cAAY,oBAAoBC,UAAU,wBACzCC,SAAA,EAAiBT,GAAAE,IAAmC,IAAxBC,EAAaC,QACvCM,EAAAA,IAAC,MAAA,CACGF,UAAU,mCACV,YAAU,SAETC,aAAiB,MAAAP,OAAAA,EAAAA,EAAQS,QAIjCL,EAASF,OAAS,GACfM,EAAAA,IAAC,KAAA,IACOf,EAAa,CACba,UAAW,+BAGdC,SAASH,EAAAM,KAAI,CAACC,EAAMC,IACjBC,EAAAA,cAAC,KAAA,IACOnB,EAAa,CACbiB,KAAAA,EACAL,UAAWQ,EAAG,wBAAyB,CACnC,gCACIF,IAAUjB,MAGtB,cAAY,oBACZoB,IAAKlB,EAAac,IAEjBd,EAAac,UAO1C"}
@@ -0,0 +1,16 @@
1
+ import { PropGetters } from 'downshift';
2
+ import { ReactNode } from 'react';
3
+ interface MenuProps<T> {
4
+ downshiftProps: Pick<PropGetters<T>, "getMenuProps" | "getItemProps">;
5
+ highlightedIndex: number | undefined | null;
6
+ items: T[];
7
+ itemToString: (item: T | null) => string;
8
+ noHitsMessage?: ReactNode;
9
+ maxNumberOfHits?: number;
10
+ noHits?: {
11
+ items: T[];
12
+ text: ReactNode;
13
+ };
14
+ }
15
+ declare function Menu<T>({ downshiftProps: { getMenuProps, getItemProps }, highlightedIndex, items, itemToString, noHitsMessage, maxNumberOfHits, noHits, }: MenuProps<T>): JSX.Element | null;
16
+ export default Menu;
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./Autosuggest.cjs");exports.Autosuggest=t.Autosuggest;
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export type { AutosuggestProps } from './Autosuggest.cjs';
2
+ export { Autosuggest } from './Autosuggest.cjs';
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("match-sorter");exports.filter=function(e,r,o){const s=o?{keys:o}:{};return r?t.matchSorter(e,r,s):e};
2
+ //# sourceMappingURL=utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.cjs","sources":["../../../../src/components/autosuggest/utils.ts"],"sourcesContent":["import { matchSorter } from \"match-sorter\";\n\nexport function filter<T>(\n allItems: T[],\n inputValue: string | null,\n keys?: string[],\n): T[] {\n const options = keys ? { keys } : {};\n if (!inputValue) {\n return allItems;\n }\n return matchSorter(allItems, inputValue, options);\n}\n"],"names":["allItems","inputValue","keys","options","matchSorter"],"mappings":"+HAEgB,SACZA,EACAC,EACAC,GAEA,MAAMC,EAAUD,EAAO,CAAEA,KAAAA,GAAS,CAAA,EAClC,OAAKD,EAGEG,cAAYJ,EAAUC,EAAYE,GAF9BH,CAGf"}
@@ -0,0 +1 @@
1
+ export declare function filter<T>(allItems: T[], inputValue: string | null, keys?: string[]): T[];
@@ -0,0 +1,47 @@
1
+ import { StateChangeOptions } from 'downshift';
2
+ import { ReactNode } from 'react';
3
+ import { Density } from '../../core/types.js';
4
+ import { LabelProps } from '../input-group/Label.js';
5
+ import { SupportLabelProps } from '../input-group/SupportLabel.js';
6
+ import { PopupTipProps } from '../tooltip/PopupTip.js';
7
+ export type CommonProps = ({
8
+ label: string;
9
+ labelProps?: Omit<LabelProps, "children" | "density" | "htmlFor" | "standAlone">;
10
+ inputId?: null;
11
+ labelId?: null;
12
+ } | {
13
+ label?: null;
14
+ labelProps?: null;
15
+ inputId: string;
16
+ labelId: string;
17
+ }) & {
18
+ className?: string;
19
+ isOpen?: boolean;
20
+ /** @deprecated Bruk helpLabel eller flytt denne teksten ovenfor skjemafeltets label */
21
+ leadText?: string;
22
+ errorLabel?: string;
23
+ helpLabel?: string;
24
+ supportLabelProps?: Omit<SupportLabelProps, "id" | "errorLabel" | "helpLabel" | "density">;
25
+ tooltipProps?: PopupTipProps;
26
+ variant?: "large" | "medium" | "small";
27
+ density?: Density;
28
+ placeholder?: string;
29
+ /** @deprecated Bruk noHits med text og evt. defaultverdier for items */
30
+ noHitsMessage?: ReactNode;
31
+ maxNumberOfHits?: number;
32
+ showDropdownControllerButton?: boolean;
33
+ onInputValueChange?: (inputValue: string) => void;
34
+ noHits?: {
35
+ items: string[];
36
+ text: ReactNode;
37
+ };
38
+ };
39
+ export interface AutosuggestStringItemProps {
40
+ allItems: string[];
41
+ value: string;
42
+ onChange?: (item: string) => void;
43
+ onStateChange?: (changes: StateChangeOptions<string>) => void;
44
+ onConfirm?: () => void;
45
+ }
46
+ export type AutosuggestProps = CommonProps & AutosuggestStringItemProps;
47
+ export declare const Autosuggest: ({ allItems, onChange, onConfirm, onInputValueChange, onStateChange, value, isOpen, ...rest }: AutosuggestProps) => JSX.Element;
@@ -0,0 +1,2 @@
1
+ import{jsx as e}from"react/jsx-runtime";import{useState as t,useEffect as s}from"react";import n from"./BaseAutosuggest.js";import{filter as o}from"./utils.js";const a=({allItems:a,onChange:r=(()=>{}),onConfirm:i=(()=>{}),onInputValueChange:u,onStateChange:m,value:l,isOpen:p,...f})=>{const[g,c]=t(a);return s((()=>c(a)),[a]),e(n,{...f,items:g,itemToString:e=>e||"",onConfirm:i,downshiftProps:{selectedItem:l,onInputValueChange:u,onStateChange:e=>{m&&m(e),void 0!==e.selectedItem?r(e.selectedItem||""):e.inputValue&&c(o(a,e.inputValue))},isOpen:p}})};export{a as Autosuggest};
2
+ //# sourceMappingURL=Autosuggest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Autosuggest.js","sources":["../../../../src/components/autosuggest/Autosuggest.tsx"],"sourcesContent":["import type { StateChangeOptions } from \"downshift\";\nimport React, { type ReactNode, useEffect, useState } from \"react\";\nimport type { Density } from \"../../core/types.js\";\nimport { LabelProps } from \"../input-group/Label.js\";\nimport type { SupportLabelProps } from \"../input-group/SupportLabel.js\";\nimport type { PopupTipProps } from \"../tooltip/PopupTip.js\";\nimport BaseAutosuggest from \"./BaseAutosuggest.js\";\nimport { filter } from \"./utils.js\";\n\nexport type CommonProps = (\n | {\n label: string;\n labelProps?: Omit<\n LabelProps,\n \"children\" | \"density\" | \"htmlFor\" | \"standAlone\"\n >;\n inputId?: null;\n labelId?: null;\n }\n | {\n label?: null;\n labelProps?: null;\n inputId: string;\n labelId: string;\n }\n) & {\n className?: string;\n isOpen?: boolean;\n /** @deprecated Bruk helpLabel eller flytt denne teksten ovenfor skjemafeltets label */\n leadText?: string;\n errorLabel?: string;\n helpLabel?: string;\n supportLabelProps?: Omit<\n SupportLabelProps,\n \"id\" | \"errorLabel\" | \"helpLabel\" | \"density\"\n >;\n tooltipProps?: PopupTipProps;\n variant?: \"large\" | \"medium\" | \"small\";\n density?: Density;\n placeholder?: string;\n /** @deprecated Bruk noHits med text og evt. defaultverdier for items */\n noHitsMessage?: ReactNode;\n maxNumberOfHits?: number;\n showDropdownControllerButton?: boolean;\n onInputValueChange?: (inputValue: string) => void;\n noHits?: { items: string[]; text: ReactNode };\n};\n\nexport interface AutosuggestStringItemProps {\n allItems: string[];\n value: string;\n onChange?: (item: string) => void;\n onStateChange?: (changes: StateChangeOptions<string>) => void;\n onConfirm?: () => void;\n}\n\nexport type AutosuggestProps = CommonProps & AutosuggestStringItemProps;\n\nexport const Autosuggest = ({\n allItems,\n onChange = () => {\n /* default noop */\n },\n onConfirm = () => {\n /* noop */\n },\n onInputValueChange,\n onStateChange,\n value,\n isOpen,\n ...rest\n}: AutosuggestProps): JSX.Element => {\n const [hits, setHits] = useState(allItems);\n\n useEffect(() => setHits(allItems), [allItems]);\n\n const handleStateChange = (changes: StateChangeOptions<string>) => {\n if (onStateChange) {\n onStateChange(changes);\n }\n\n if (changes.selectedItem !== undefined) {\n onChange(changes.selectedItem || \"\");\n } else if (changes.inputValue) {\n setHits(filter(allItems, changes.inputValue));\n }\n };\n\n const itemToString = (item: string | null) => (item ? item : \"\");\n\n return (\n <BaseAutosuggest\n {...rest}\n items={hits}\n itemToString={itemToString}\n onConfirm={onConfirm}\n downshiftProps={{\n selectedItem: value,\n onInputValueChange,\n onStateChange: handleStateChange,\n isOpen,\n }}\n />\n );\n};\n"],"names":["Autosuggest","allItems","onChange","onConfirm","onInputValueChange","onStateChange","value","isOpen","rest","hits","setHits","useState","useEffect","jsx","BaseAutosuggest","items","itemToString","item","downshiftProps","selectedItem","changes","inputValue","filter"],"mappings":"gKA0DO,MAAMA,EAAc,EACvBC,SAAAA,EACAC,SAAAA,EAAW,SAGXC,UAAAA,EAAY,SAGZC,mBAAAA,EACAC,cAAAA,EACAC,MAAAA,EACAC,OAAAA,KACGC,MAEH,MAAOC,EAAMC,GAAWC,EAASV,GAEjCW,OAAAA,GAAU,IAAMF,EAAQT,IAAW,CAACA,IAiBhCY,EAACC,EAAA,IACON,EACJO,MAAON,EACPO,aANcC,GAAyBA,GAAc,GAOrDd,UAAAA,EACAe,eAAgB,CACZC,aAAcb,EACdF,mBAAAA,EACAC,cAvBee,IACnBf,GACAA,EAAce,QAGW,IAAzBA,EAAQD,aACCjB,EAAAkB,EAAQD,cAAgB,IAC1BC,EAAQC,YACfX,EAAQY,EAAOrB,EAAUmB,EAAQC,YAAW,EAgBxCd,OAAAA,IACJ"}
@@ -0,0 +1,16 @@
1
+ import { DownshiftProps } from 'downshift';
2
+ import { ReactNode } from 'react';
3
+ import { CommonProps } from './Autosuggest.js';
4
+ type BaseAutosuggestProps<T> = CommonProps & {
5
+ itemToString: (item: T | null) => string;
6
+ items: T[];
7
+ downshiftProps: DownshiftProps<T>;
8
+ showDropdownControllerButton?: boolean;
9
+ onConfirm?: () => void;
10
+ noHits?: {
11
+ text: ReactNode;
12
+ items: T[];
13
+ };
14
+ };
15
+ declare function BaseAutosuggest<T>({ className, label, labelProps, tooltipProps, supportLabelProps, inputId, labelId, leadText, errorLabel, helpLabel, density, variant, noHitsMessage, maxNumberOfHits, placeholder, itemToString, items, downshiftProps, showDropdownControllerButton, onConfirm, noHits, }: BaseAutosuggestProps<T>): JSX.Element;
16
+ export default BaseAutosuggest;
@@ -0,0 +1,2 @@
1
+ import{jsx as e,jsxs as t,Fragment as o}from"react/jsx-runtime";import s from"classnames";import r from"downshift";import{useId as l}from"../../hooks/useId/useId.js";import{InputGroup as a}from"../input-group/InputGroup.js";import i from"./ControllerButton.js";import n from"./Menu.js";function p({className:p="",label:m,labelProps:d,tooltipProps:u,supportLabelProps:g,inputId:c,labelId:h,leadText:f,errorLabel:b,helpLabel:I,density:P,variant:j="small",noHitsMessage:x,maxNumberOfHits:k,placeholder:S,itemToString:w,items:L,downshiftProps:N,showDropdownControllerButton:H=!1,onConfirm:y=(()=>{}),noHits:M}){const T=l(c||"jkl-text-input",{generateSuffix:!c}),v=l(h||"jkl-label",{generateSuffix:!h});return e(r,{...N,inputId:T,labelId:v,itemToString:w,children:({getInputProps:r,getToggleButtonProps:l,getItemProps:c,getLabelProps:h,getMenuProps:N,getRootProps:T,selectedItem:C,isOpen:_,highlightedIndex:B,clearSelection:O})=>e(a,{...T(),label:m,className:s("jkl-autosuggest",p),density:P,labelProps:{variant:j,...d,...h({id:v})},supportLabelProps:g,tooltipProps:u,errorLabel:b,helpLabel:I,render:a=>t(o,{children:[f&&e("p",{className:s("jkl-spacing-l--bottom",{"jkl-body":"compact"!==P,"jkl-small":"compact"===P}),children:f}),t("div",{className:"jkl-text-input-wrapper","data-invalid":!!b,children:[e("input",{...a,...r({id:a.id,placeholder:S,className:"jkl-text-input__input",onKeyDown:e=>{13===e.keyCode&&!_&&y()}}),"data-testid":"autosuggest__input"}),H&&e(i,{...l(),hasSelectedItem:!!C,clearSelection:O}),_&&e(n,{downshiftProps:{getMenuProps:N,getItemProps:c},highlightedIndex:B,items:L,itemToString:w,noHitsMessage:x,maxNumberOfHits:k,noHits:M})]})]})})})}export{p as default};
2
+ //# sourceMappingURL=BaseAutosuggest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseAutosuggest.js","sources":["../../../../src/components/autosuggest/BaseAutosuggest.tsx"],"sourcesContent":["import cn from \"classnames\";\nimport {\n Callback,\n default as Downshift,\n type DownshiftProps,\n PropGetters,\n} from \"downshift\";\nimport React, { type ReactNode } from \"react\";\nimport { useId } from \"../../hooks/useId/useId.js\";\nimport { InputGroup } from \"../input-group/InputGroup.js\";\nimport { type CommonProps } from \"./Autosuggest.js\";\nimport ControllerButton from \"./ControllerButton.js\";\nimport Menu from \"./Menu.js\";\n\nconst KEY_ENTER = 13;\n\ntype BaseAutosuggestProps<T> = CommonProps & {\n itemToString: (item: T | null) => string;\n items: T[];\n downshiftProps: DownshiftProps<T>;\n showDropdownControllerButton?: boolean;\n onConfirm?: () => void;\n noHits?: { text: ReactNode; items: T[] };\n};\ninterface Props extends PropGetters<any>, DownshiftProps<any> {\n clearSelection: (cb?: Callback) => void;\n}\n\nfunction BaseAutosuggest<T>({\n className = \"\",\n label,\n labelProps,\n tooltipProps,\n supportLabelProps,\n inputId,\n labelId,\n leadText,\n errorLabel,\n helpLabel,\n density,\n variant = \"small\",\n noHitsMessage,\n maxNumberOfHits,\n placeholder,\n itemToString,\n items,\n downshiftProps,\n showDropdownControllerButton = false,\n onConfirm = () => {\n /* noop */\n },\n noHits,\n}: BaseAutosuggestProps<T>): JSX.Element {\n const uid = useId(inputId || \"jkl-text-input\", {\n generateSuffix: !inputId,\n });\n const lid = useId(labelId || \"jkl-label\", { generateSuffix: !labelId });\n\n const customLabelProps = {\n inputId: uid,\n labelId: lid,\n };\n\n return (\n /* @ts-ignore-next-line det er noe rart og ancient med downshift */\n <Downshift\n {...downshiftProps}\n {...customLabelProps}\n itemToString={itemToString}\n >\n {({\n getInputProps,\n getToggleButtonProps,\n getItemProps,\n getLabelProps,\n getMenuProps,\n getRootProps,\n selectedItem,\n isOpen,\n highlightedIndex,\n clearSelection,\n }: Props) => {\n return (\n <InputGroup\n {...getRootProps()}\n label={label}\n className={cn(\"jkl-autosuggest\", className)}\n density={density}\n labelProps={{\n variant,\n ...labelProps,\n ...getLabelProps({\n id: lid,\n }),\n }}\n supportLabelProps={supportLabelProps}\n tooltipProps={tooltipProps}\n errorLabel={errorLabel}\n helpLabel={helpLabel}\n render={(inputProps) => (\n <>\n {leadText && (\n <p\n className={cn(\"jkl-spacing-l--bottom\", {\n \"jkl-body\": density !== \"compact\",\n \"jkl-small\": density === \"compact\",\n })}\n >\n {leadText}\n </p>\n )}\n <div\n className=\"jkl-text-input-wrapper\"\n data-invalid={!!errorLabel}\n >\n <input\n {...inputProps}\n {...getInputProps({\n id: inputProps.id,\n placeholder,\n className: \"jkl-text-input__input\",\n onKeyDown: (e) => {\n if (\n e.keyCode === KEY_ENTER &&\n !isOpen\n ) {\n onConfirm();\n }\n },\n })}\n data-testid=\"autosuggest__input\"\n />\n {showDropdownControllerButton && (\n <ControllerButton\n {...getToggleButtonProps()}\n hasSelectedItem={!!selectedItem}\n clearSelection={clearSelection}\n />\n )}\n {isOpen && (\n <Menu\n downshiftProps={{\n getMenuProps,\n getItemProps,\n }}\n highlightedIndex={highlightedIndex}\n items={items}\n itemToString={itemToString}\n noHitsMessage={noHitsMessage}\n maxNumberOfHits={maxNumberOfHits}\n noHits={noHits}\n />\n )}\n </div>\n </>\n )}\n />\n );\n }}\n </Downshift>\n );\n}\n\nexport default BaseAutosuggest;\n"],"names":["BaseAutosuggest","className","label","labelProps","tooltipProps","supportLabelProps","inputId","labelId","leadText","errorLabel","helpLabel","density","variant","noHitsMessage","maxNumberOfHits","placeholder","itemToString","items","downshiftProps","showDropdownControllerButton","onConfirm","noHits","uid","useId","generateSuffix","lid","jsx","Downshift","children","getInputProps","getToggleButtonProps","getItemProps","getLabelProps","getMenuProps","getRootProps","selectedItem","isOpen","highlightedIndex","clearSelection","InputGroup","cn","id","render","inputProps","jsxs","Fragment","onKeyDown","e","keyCode","ControllerButton","hasSelectedItem","Menu"],"mappings":"8RA4BA,SAASA,GACLC,UAAAA,EAAY,GACZC,MAAAA,EACAC,WAAAA,EACAC,aAAAA,EACAC,kBAAAA,EACAC,QAAAA,EACAC,QAAAA,EACAC,SAAAA,EACAC,WAAAA,EACAC,UAAAA,EACAC,QAAAA,EACAC,QAAAA,EAAU,QACVC,cAAAA,EACAC,gBAAAA,EACAC,YAAAA,EACAC,aAAAA,EACAC,MAAAA,EACAC,eAAAA,EACAC,6BAAAA,GAA+B,EAC/BC,UAAAA,EAAY,SAGZC,OAAAA,IAEMC,MAAAA,EAAMC,EAAMjB,GAAW,iBAAkB,CAC3CkB,gBAAiBlB,IAEfmB,EAAMF,EAAMhB,GAAW,YAAa,CAAEiB,gBAAiBjB,IAO7D,OAEImB,EAACC,EAAA,IACOT,EAPRZ,QAASgB,EACTf,QAASkB,EAQLT,aAAAA,EAECY,SAAC,EACEC,cAAAA,EACAC,qBAAAA,EACAC,aAAAA,EACAC,cAAAA,EACAC,aAAAA,EACAC,aAAAA,EACAC,aAAAA,EACAC,OAAAA,EACAC,iBAAAA,EACAC,eAAAA,KAGIZ,EAACa,EAAA,IACOL,IACJhC,MAAAA,EACAD,UAAWuC,EAAG,kBAAmBvC,GACjCU,QAAAA,EACAR,WAAY,CACRS,QAAAA,KACGT,KACA6B,EAAc,CACbS,GAAIhB,KAGZpB,kBAAAA,EACAD,aAAAA,EACAK,WAAAA,EACAC,UAAAA,EACAgC,OAASC,GAEAC,EAAAC,EAAA,CAAAjB,SAAA,CACGpB,GAAAkB,EAAC,IAAA,CACGzB,UAAWuC,EAAG,wBAAyB,CACnC,WAAwB,YAAZ7B,EACZ,YAAyB,YAAZA,IAGhBiB,SAAApB,IAGToC,EAAC,MAAA,CACG3C,UAAU,yBACV,iBAAgBQ,EAEhBmB,SAAA,CAAAF,EAAC,QAAA,IACOiB,KACAd,EAAc,CACdY,GAAIE,EAAWF,GACf1B,YAAAA,EACAd,UAAW,wBACX6C,UAAYC,IA3GtC,KA6GkCA,EAAEC,UACDZ,GAEShB,OAItB,cAAY,uBAEfD,GACGO,EAACuB,EAAA,IACOnB,IACJoB,kBAAmBf,EACnBG,eAAAA,IAGPF,GACGV,EAACyB,EAAA,CACGjC,eAAgB,CACZe,aAAAA,EACAF,aAAAA,GAEJM,iBAAAA,EACApB,MAAAA,EACAD,aAAAA,EACAH,cAAAA,EACAC,gBAAAA,EACAO,OAAAA,aAW5C"}
@@ -0,0 +1,8 @@
1
+ import { FC } from 'react';
2
+ interface Props {
3
+ clearSelection: () => void;
4
+ hasSelectedItem: boolean;
5
+ onClick: () => void;
6
+ }
7
+ declare const ControllerButton: FC<Props>;
8
+ export default ControllerButton;
@@ -0,0 +1,2 @@
1
+ import{jsx as o}from"react/jsx-runtime";import{CloseIcon as t}from"../icon/icons/CloseIcon.js";import{SearchIcon as n}from"../icon/icons/SearchIcon.js";import{IconButton as c}from"../icon-button/IconButton.js";const e=({hasSelectedItem:e,clearSelection:a,onClick:i,...s})=>o(c,{...s,className:"jkl-text-input-action-button","aria-label":e?"Fjern valg":"Vis valg",title:e?"Fjern valg":"Vis valg",onClick:e?a:i,children:o(e?t:n,{})});export{e as default};
2
+ //# sourceMappingURL=ControllerButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ControllerButton.js","sources":["../../../../src/components/autosuggest/ControllerButton.tsx"],"sourcesContent":["import React, { FC } from \"react\";\nimport { CloseIcon } from \"../icon/icons/CloseIcon.js\";\nimport { SearchIcon } from \"../icon/icons/SearchIcon.js\";\nimport { IconButton } from \"../icon-button/IconButton.js\";\n\ninterface Props {\n clearSelection: () => void;\n hasSelectedItem: boolean;\n onClick: () => void;\n}\n\nconst ControllerButton: FC<Props> = ({\n hasSelectedItem,\n clearSelection,\n onClick,\n ...downshiftProps\n}) => (\n <IconButton\n {...downshiftProps}\n className=\"jkl-text-input-action-button\"\n aria-label={hasSelectedItem ? \"Fjern valg\" : \"Vis valg\"}\n title={hasSelectedItem ? \"Fjern valg\" : \"Vis valg\"}\n onClick={hasSelectedItem ? clearSelection : onClick}\n >\n {hasSelectedItem ? <CloseIcon /> : <SearchIcon />}\n </IconButton>\n);\n\nexport default ControllerButton;\n"],"names":["ControllerButton","hasSelectedItem","clearSelection","onClick","downshiftProps","jsx","IconButton","className","title","children","CloseIcon","SearchIcon"],"mappings":"kNAWA,MAAMA,EAA8B,EAChCC,gBAAAA,EACAC,eAAAA,EACAC,QAAAA,KACGC,KAEHC,EAACC,EAAA,IACOF,EACJG,UAAU,+BACV,aAAYN,EAAkB,aAAe,WAC7CO,MAAOP,EAAkB,aAAe,WACxCE,QAASF,EAAkBC,EAAiBC,EAE3CM,SAAkBJ,EAAAJ,EAACS,EAAgBC,EAAN,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { PropGetters } from 'downshift';
2
+ import { ReactNode } from 'react';
3
+ interface MenuProps<T> {
4
+ downshiftProps: Pick<PropGetters<T>, "getMenuProps" | "getItemProps">;
5
+ highlightedIndex: number | undefined | null;
6
+ items: T[];
7
+ itemToString: (item: T | null) => string;
8
+ noHitsMessage?: ReactNode;
9
+ maxNumberOfHits?: number;
10
+ noHits?: {
11
+ items: T[];
12
+ text: ReactNode;
13
+ };
14
+ }
15
+ declare function Menu<T>({ downshiftProps: { getMenuProps, getItemProps }, highlightedIndex, items, itemToString, noHitsMessage, maxNumberOfHits, noHits, }: MenuProps<T>): JSX.Element | null;
16
+ export default Menu;
@@ -0,0 +1,2 @@
1
+ import{jsxs as t,jsx as e}from"react/jsx-runtime";import{createElement as s}from"react";import i from"classnames";function a({downshiftProps:{getMenuProps:a,getItemProps:l},highlightedIndex:m,items:n,itemToString:o,noHitsMessage:g,maxNumberOfHits:u=1/0,noHits:r}){const c=n.length>u?n.slice(0,u):n;if(0===c.length&&!g&&!r)return null;const d=0===c.length&&r?r.items:c;return t("div",{"data-testid":"autosuggest__menu",className:"jkl-autosuggest__menu",children:[(g||r)&&0===c.length&&e("div",{className:"jkl-autosuggest__no-hits-message","aria-live":"polite",children:g||(null==r?void 0:r.text)}),d.length>0&&e("ul",{...a({className:"jkl-autosuggest__item-list"}),children:d.map(((t,e)=>s("li",{...l({item:t,className:i("jkl-autosuggest__item",{"jkl-autosuggest__item--active":e===m})}),"data-testid":"autosuggest__item",key:o(t)},o(t))))})]})}export{a as default};
2
+ //# sourceMappingURL=Menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Menu.js","sources":["../../../../src/components/autosuggest/Menu.tsx"],"sourcesContent":["import cn from \"classnames\";\nimport { PropGetters } from \"downshift\";\nimport React, { ReactNode } from \"react\";\n\ninterface MenuProps<T> {\n downshiftProps: Pick<PropGetters<T>, \"getMenuProps\" | \"getItemProps\">;\n highlightedIndex: number | undefined | null;\n items: T[];\n itemToString: (item: T | null) => string;\n noHitsMessage?: ReactNode;\n maxNumberOfHits?: number;\n noHits?: { items: T[]; text: ReactNode };\n}\n\nfunction Menu<T>({\n downshiftProps: { getMenuProps, getItemProps },\n highlightedIndex,\n items,\n itemToString,\n noHitsMessage,\n maxNumberOfHits = Infinity,\n noHits,\n}: MenuProps<T>): JSX.Element | null {\n const visibleItems =\n items.length > maxNumberOfHits\n ? items.slice(0, maxNumberOfHits)\n : items;\n\n if (visibleItems.length === 0 && !noHitsMessage && !noHits) {\n return null;\n }\n\n const itemList =\n visibleItems.length === 0 && noHits ? noHits.items : visibleItems;\n\n return (\n <div data-testid=\"autosuggest__menu\" className=\"jkl-autosuggest__menu\">\n {(noHitsMessage || noHits) && visibleItems.length === 0 && (\n <div\n className=\"jkl-autosuggest__no-hits-message\"\n aria-live=\"polite\"\n >\n {noHitsMessage || noHits?.text}\n </div>\n )}\n\n {itemList.length > 0 && (\n <ul\n {...getMenuProps({\n className: \"jkl-autosuggest__item-list\",\n })}\n >\n {itemList.map((item, index) => (\n <li\n {...getItemProps({\n item,\n className: cn(\"jkl-autosuggest__item\", {\n \"jkl-autosuggest__item--active\":\n index === highlightedIndex,\n }),\n })}\n data-testid=\"autosuggest__item\"\n key={itemToString(item)}\n >\n {itemToString(item)}\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n\nexport default Menu;\n"],"names":["Menu","downshiftProps","getMenuProps","getItemProps","highlightedIndex","items","itemToString","noHitsMessage","maxNumberOfHits","noHits","visibleItems","length","slice","itemList","jsxs","className","children","jsx","text","map","item","index","createElement","cn","key"],"mappings":"kHAcA,SAASA,GACLC,gBAAkBC,aAAAA,EAAcC,aAAAA,GAChCC,iBAAAA,EACAC,MAAAA,EACAC,aAAAA,EACAC,cAAAA,EACAC,gBAAAA,EAAkB,IAClBC,OAAAA,IAEMC,MAAAA,EACFL,EAAMM,OAASH,EACTH,EAAMO,MAAM,EAAGJ,GACfH,EAEV,GAA4B,IAAxBK,EAAaC,SAAiBJ,IAAkBE,EACzC,OAAA,KAGX,MAAMI,EACsB,IAAxBH,EAAaC,QAAgBF,EAASA,EAAOJ,MAAQK,EAGpD,OAAAI,EAAA,MAAA,CAAI,cAAY,oBAAoBC,UAAU,wBACzCC,SAAA,EAAiBT,GAAAE,IAAmC,IAAxBC,EAAaC,QACvCM,EAAC,MAAA,CACGF,UAAU,mCACV,YAAU,SAETC,aAAiB,MAAAP,OAAA,EAAAA,EAAQS,QAIjCL,EAASF,OAAS,GACfM,EAAC,KAAA,IACOf,EAAa,CACba,UAAW,+BAGdC,SAASH,EAAAM,KAAI,CAACC,EAAMC,IACjBC,EAAC,KAAA,IACOnB,EAAa,CACbiB,KAAAA,EACAL,UAAWQ,EAAG,wBAAyB,CACnC,gCACIF,IAAUjB,MAGtB,cAAY,oBACZoB,IAAKlB,EAAac,IAEjBd,EAAac,UAO1C"}
@@ -0,0 +1,2 @@
1
+ export type { AutosuggestProps } from './Autosuggest.js';
2
+ export { Autosuggest } from './Autosuggest.js';
@@ -0,0 +1,2 @@
1
+ import{Autosuggest as s}from"./Autosuggest.js";export{s as Autosuggest};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export declare function filter<T>(allItems: T[], inputValue: string | null, keys?: string[]): T[];
@@ -0,0 +1,2 @@
1
+ import{matchSorter as r}from"match-sorter";function t(t,e,o){return e?r(t,e,o?{keys:o}:{}):t}export{t as filter};
2
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../../../../src/components/autosuggest/utils.ts"],"sourcesContent":["import { matchSorter } from \"match-sorter\";\n\nexport function filter<T>(\n allItems: T[],\n inputValue: string | null,\n keys?: string[],\n): T[] {\n const options = keys ? { keys } : {};\n if (!inputValue) {\n return allItems;\n }\n return matchSorter(allItems, inputValue, options);\n}\n"],"names":["filter","allItems","inputValue","keys","matchSorter"],"mappings":"2CAEgB,SAAAA,EACZC,EACAC,EACAC,GAGA,OAAKD,EAGEE,EAAYH,EAAUC,EAJbC,EAAO,CAAEA,KAAAA,GAAS,CAAA,GAEvBF,CAGf"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fremtind/jokul",
3
- "version": "0.30.8",
3
+ "version": "0.31.1",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -83,6 +83,16 @@
83
83
  "default": "./build/cjs/components/accordion/index.cjs"
84
84
  }
85
85
  },
86
+ "./components/autosuggest": {
87
+ "import": {
88
+ "types": "./build/es/components/autosuggest/index.d.ts",
89
+ "default": "./build/es/components/autosuggest/index.js"
90
+ },
91
+ "require": {
92
+ "types": "./build/cjs/components/autosuggest/index.d.cts",
93
+ "default": "./build/cjs/components/autosuggest/index.cjs"
94
+ }
95
+ },
86
96
  "./components/breadcrumb": {
87
97
  "import": {
88
98
  "types": "./build/es/components/breadcrumb/index.d.ts",
@@ -483,11 +493,12 @@
483
493
  "test": "vitest --config vite.test.config.mjs"
484
494
  },
485
495
  "dependencies": {
496
+ "@types/react": "^18.0.0",
497
+ "downshift": "^7.6.0",
498
+ "match-sorter": "^6.3.1",
499
+ "react": "^18.0.0",
486
500
  "react-dom": "^18.0.0"
487
501
  },
488
- "peerDependencies": {
489
- "react": "^18.0.0"
490
- },
491
502
  "optionalDependencies": {
492
503
  "@floating-ui/react": ">0.24.1 <0.27",
493
504
  "@react-aria/toast": "^3.0.0-beta.1",
@@ -535,5 +546,5 @@
535
546
  "@babel/preset-react"
536
547
  ]
537
548
  },
538
- "gitHead": "ba3951c628cae68874dbc4b378c08e215717447e"
549
+ "gitHead": "27c9715cd08b9cd61551ac018ecd0b249e06fe3e"
539
550
  }
@@ -0,0 +1,3 @@
1
+ @forward "autosuggest";
2
+
3
+ @use "../text-input";
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Do not edit directly
3
+ * Generated on Mon, 28 Oct 2024 14:22:00 GMT
4
+ */
5
+ @media screen and (prefers-color-scheme: light) {
6
+ :root {
7
+ --jkl-autosuggest-text-color: #1b1917;
8
+ --jkl-autosuggest-menu-background-color: #ffffff;
9
+ --jkl-autosuggest-focus-color: #1b1917;
10
+ --jkl-autosuggest-error-text-color: #1b1917;
11
+ --jkl-autosuggest-error-placeholder-color: #636060;
12
+ --jkl-autosuggest-hover-option-color: #1b1917;
13
+ --jkl-autosuggest-hover-option-background-color: #e0dbd4;
14
+ }
15
+ }
16
+ [data-theme=light] {
17
+ --jkl-autosuggest-text-color: #1b1917;
18
+ --jkl-autosuggest-menu-background-color: #ffffff;
19
+ --jkl-autosuggest-focus-color: #1b1917;
20
+ --jkl-autosuggest-error-text-color: #1b1917;
21
+ --jkl-autosuggest-error-placeholder-color: #636060;
22
+ --jkl-autosuggest-hover-option-color: #1b1917;
23
+ --jkl-autosuggest-hover-option-background-color: #e0dbd4;
24
+ }
25
+
26
+ @media screen and (prefers-color-scheme: dark) {
27
+ :root {
28
+ --jkl-autosuggest-text-color: #f9f9f9;
29
+ --jkl-autosuggest-menu-background-color: #000000;
30
+ --jkl-autosuggest-focus-color: #f9f9f9;
31
+ --jkl-autosuggest-error-text-color: #1b1917;
32
+ --jkl-autosuggest-error-placeholder-color: #636060;
33
+ --jkl-autosuggest-hover-option-color: #f9f9f9;
34
+ --jkl-autosuggest-hover-option-background-color: #636060;
35
+ }
36
+ }
37
+ [data-theme=dark] {
38
+ --jkl-autosuggest-text-color: #f9f9f9;
39
+ --jkl-autosuggest-menu-background-color: #000000;
40
+ --jkl-autosuggest-focus-color: #f9f9f9;
41
+ --jkl-autosuggest-error-text-color: #1b1917;
42
+ --jkl-autosuggest-error-placeholder-color: #636060;
43
+ --jkl-autosuggest-hover-option-color: #f9f9f9;
44
+ --jkl-autosuggest-hover-option-background-color: #636060;
45
+ }
46
+
47
+ :root,
48
+ [data-layout-density=comfortable],
49
+ [data-density=comfortable] {
50
+ --jkl-autosuggest-item-font-size: var(--jkl-body-font-size);
51
+ --jkl-autosuggest-item-line-height: var(--jkl-body-line-height);
52
+ --jkl-autosuggest-item-font-weight: var(--jkl-body-font-weight);
53
+ --jkl-autosuggest-menu-padding: 1rem 0.5rem 0;
54
+ --jkl-autosuggest-controller-button-width: auto;
55
+ --jkl-autosuggest-controller-button-padding: 0 0.75rem;
56
+ --jkl-autosuggest-controller-button-icon-size: 1.25rem;
57
+ --jkl-autosuggest-option-padding: 0 0.75rem;
58
+ --jkl-autosuggest-option-height: 3rem;
59
+ }
60
+
61
+ [data-layout-density=compact],
62
+ [data-density=compact] {
63
+ --jkl-autosuggest-item-font-size: var(--jkl-small-font-size);
64
+ --jkl-autosuggest-item-line-height: var(--jkl-small-line-height);
65
+ --jkl-autosuggest-item-font-weight: var(--jkl-small-font-weight);
66
+ --jkl-autosuggest-menu-padding: 0.25rem;
67
+ --jkl-autosuggest-controller-button-width: 1.5rem;
68
+ --jkl-autosuggest-controller-button-padding: 0;
69
+ --jkl-autosuggest-controller-button-icon-size: 1.125rem;
70
+ --jkl-autosuggest-no-hits-message-font-size: var(--jkl-small-font-size);
71
+ --jkl-autosuggest-option-padding: 0 0.5rem;
72
+ --jkl-autosuggest-option-height: 2rem;
73
+ }
74
+
75
+ .jkl-autosuggest {
76
+ display: flex;
77
+ flex-direction: column;
78
+ align-items: flex-start;
79
+ position: relative;
80
+ }
81
+ .jkl-autosuggest[aria-expanded=true] .jkl-text-input-wrapper {
82
+ border-radius: 0.1875rem 0.1875rem 0 0;
83
+ }
84
+ .jkl-autosuggest__input-group > input[aria-invalid=true] ~ .jkl-autosuggest__controller-button {
85
+ color: var(--jkl-autosuggest-error-placeholder-color);
86
+ }
87
+ .jkl-autosuggest__input-group > input[aria-invalid=true] ~ .jkl-autosuggest__controller-button:hover {
88
+ color: var(--jkl-autosuggest-error-text-color);
89
+ }
90
+ html:not([data-mousenavigation]):not([data-touchnavigation]) .jkl-autosuggest__input-group > input[aria-invalid=true] ~ .jkl-autosuggest__controller-button:focus::after {
91
+ box-shadow: inset 0 0 0 0.125rem var(--jkl-autosuggest-error-text-color);
92
+ }
93
+
94
+ .jkl-autosuggest__no-hits-message {
95
+ font-size: var(--jkl-autosuggest-no-hits-message-font-size);
96
+ padding: var(--jkl-autosuggest-option-padding);
97
+ }
98
+ .jkl-autosuggest__menu {
99
+ background-color: var(--jkl-autosuggest-menu-background-color);
100
+ border: 0.125rem solid var(--jkl-autosuggest-focus-color);
101
+ border-top: none;
102
+ border-radius: 0 0 0.1875rem 0.1875rem;
103
+ box-sizing: border-box;
104
+ color: var(--jkl-autosuggest-text-color);
105
+ position: absolute;
106
+ inset: 100% -0.0625rem auto;
107
+ margin: 0;
108
+ padding: 0;
109
+ max-height: 60vh;
110
+ overflow-y: auto;
111
+ width: calc(100% + 0.125rem);
112
+ z-index: 7000;
113
+ -webkit-overflow-scrolling: touch;
114
+ }
115
+ .jkl-autosuggest__item-list {
116
+ list-style-type: none;
117
+ margin: 0;
118
+ padding: 0;
119
+ }
120
+ .jkl-autosuggest__item {
121
+ font-size: var(--jkl-autosuggest-item-font-size);
122
+ line-height: var(--jkl-autosuggest-item-line-height);
123
+ font-weight: var(--jkl-autosuggest-item-font-weight);
124
+ color: unset;
125
+ display: flex;
126
+ align-items: center;
127
+ border: 0;
128
+ background-color: inherit;
129
+ min-height: var(--jkl-autosuggest-option-height);
130
+ text-align: left;
131
+ transition-timing-function: ease;
132
+ transition-duration: 150ms;
133
+ transition-property: color, background-color;
134
+ position: relative;
135
+ padding: var(--jkl-autosuggest-option-padding);
136
+ cursor: pointer;
137
+ }
138
+ .jkl-autosuggest__item:focus, .jkl-autosuggest__item--active, .jkl-autosuggest__item:hover {
139
+ color: var(--jkl-autosuggest-hover-option-color);
140
+ background-color: var(--jkl-autosuggest-hover-option-background-color);
141
+ }
@@ -0,0 +1 @@
1
+ @media screen and (prefers-color-scheme:light){:root{--jkl-autosuggest-text-color:#1b1917;--jkl-autosuggest-menu-background-color:#fff;--jkl-autosuggest-focus-color:#1b1917;--jkl-autosuggest-error-text-color:#1b1917;--jkl-autosuggest-error-placeholder-color:#636060;--jkl-autosuggest-hover-option-color:#1b1917;--jkl-autosuggest-hover-option-background-color:#e0dbd4}}[data-theme=light]{--jkl-autosuggest-text-color:#1b1917;--jkl-autosuggest-menu-background-color:#fff;--jkl-autosuggest-focus-color:#1b1917;--jkl-autosuggest-error-text-color:#1b1917;--jkl-autosuggest-error-placeholder-color:#636060;--jkl-autosuggest-hover-option-color:#1b1917;--jkl-autosuggest-hover-option-background-color:#e0dbd4}@media screen and (prefers-color-scheme:dark){:root{--jkl-autosuggest-text-color:#f9f9f9;--jkl-autosuggest-menu-background-color:#000;--jkl-autosuggest-focus-color:#f9f9f9;--jkl-autosuggest-error-text-color:#1b1917;--jkl-autosuggest-error-placeholder-color:#636060;--jkl-autosuggest-hover-option-color:#f9f9f9;--jkl-autosuggest-hover-option-background-color:#636060}}[data-theme=dark]{--jkl-autosuggest-text-color:#f9f9f9;--jkl-autosuggest-menu-background-color:#000;--jkl-autosuggest-focus-color:#f9f9f9;--jkl-autosuggest-error-text-color:#1b1917;--jkl-autosuggest-error-placeholder-color:#636060;--jkl-autosuggest-hover-option-color:#f9f9f9;--jkl-autosuggest-hover-option-background-color:#636060}:root,[data-density=comfortable],[data-layout-density=comfortable]{--jkl-autosuggest-item-font-size:var(--jkl-body-font-size);--jkl-autosuggest-item-line-height:var(--jkl-body-line-height);--jkl-autosuggest-item-font-weight:var(--jkl-body-font-weight);--jkl-autosuggest-menu-padding:1rem 0.5rem 0;--jkl-autosuggest-controller-button-width:auto;--jkl-autosuggest-controller-button-padding:0 0.75rem;--jkl-autosuggest-controller-button-icon-size:1.25rem;--jkl-autosuggest-option-padding:0 0.75rem;--jkl-autosuggest-option-height:3rem}[data-density=compact],[data-layout-density=compact]{--jkl-autosuggest-item-font-size:var(--jkl-small-font-size);--jkl-autosuggest-item-line-height:var(--jkl-small-line-height);--jkl-autosuggest-item-font-weight:var(--jkl-small-font-weight);--jkl-autosuggest-menu-padding:0.25rem;--jkl-autosuggest-controller-button-width:1.5rem;--jkl-autosuggest-controller-button-padding:0;--jkl-autosuggest-controller-button-icon-size:1.125rem;--jkl-autosuggest-no-hits-message-font-size:var(--jkl-small-font-size);--jkl-autosuggest-option-padding:0 0.5rem;--jkl-autosuggest-option-height:2rem}.jkl-autosuggest{align-items:flex-start;display:flex;flex-direction:column;position:relative}.jkl-autosuggest[aria-expanded=true] .jkl-text-input-wrapper{border-radius:.1875rem .1875rem 0 0}.jkl-autosuggest__input-group>input[aria-invalid=true]~.jkl-autosuggest__controller-button{color:var(--jkl-autosuggest-error-placeholder-color)}.jkl-autosuggest__input-group>input[aria-invalid=true]~.jkl-autosuggest__controller-button:hover{color:var(--jkl-autosuggest-error-text-color)}html:not([data-mousenavigation]):not([data-touchnavigation]) .jkl-autosuggest__input-group>input[aria-invalid=true]~.jkl-autosuggest__controller-button:focus:after{box-shadow:inset 0 0 0 .125rem var(--jkl-autosuggest-error-text-color)}.jkl-autosuggest__no-hits-message{font-size:var(--jkl-autosuggest-no-hits-message-font-size);padding:var(--jkl-autosuggest-option-padding)}.jkl-autosuggest__menu{background-color:var(--jkl-autosuggest-menu-background-color);border:.125rem solid var(--jkl-autosuggest-focus-color);border-radius:0 0 .1875rem .1875rem;border-top:none;box-sizing:border-box;color:var(--jkl-autosuggest-text-color);inset:100% -.0625rem auto;margin:0;max-height:60vh;overflow-y:auto;padding:0;position:absolute;width:calc(100% + .125rem);z-index:7000;-webkit-overflow-scrolling:touch}.jkl-autosuggest__item-list{list-style-type:none;margin:0;padding:0}.jkl-autosuggest__item{align-items:center;background-color:inherit;border:0;color:unset;cursor:pointer;display:flex;font-size:var(--jkl-autosuggest-item-font-size);font-weight:var(--jkl-autosuggest-item-font-weight);line-height:var(--jkl-autosuggest-item-line-height);min-height:var(--jkl-autosuggest-option-height);padding:var(--jkl-autosuggest-option-padding);position:relative;text-align:left;transition-duration:.15s;transition-property:color,background-color;transition-timing-function:ease}.jkl-autosuggest__item--active,.jkl-autosuggest__item:focus,.jkl-autosuggest__item:hover{background-color:var(--jkl-autosuggest-hover-option-background-color);color:var(--jkl-autosuggest-hover-option-color)}