@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.
- package/build/build-stats.html +1 -1
- package/build/cjs/components/autosuggest/Autosuggest.cjs +2 -0
- package/build/cjs/components/autosuggest/Autosuggest.cjs.map +1 -0
- package/build/cjs/components/autosuggest/Autosuggest.d.cts +47 -0
- package/build/cjs/components/autosuggest/BaseAutosuggest.cjs +2 -0
- package/build/cjs/components/autosuggest/BaseAutosuggest.cjs.map +1 -0
- package/build/cjs/components/autosuggest/BaseAutosuggest.d.cts +16 -0
- package/build/cjs/components/autosuggest/ControllerButton.cjs +2 -0
- package/build/cjs/components/autosuggest/ControllerButton.cjs.map +1 -0
- package/build/cjs/components/autosuggest/ControllerButton.d.cts +8 -0
- package/build/cjs/components/autosuggest/Menu.cjs +2 -0
- package/build/cjs/components/autosuggest/Menu.cjs.map +1 -0
- package/build/cjs/components/autosuggest/Menu.d.cts +16 -0
- package/build/cjs/components/autosuggest/index.cjs +2 -0
- package/build/cjs/components/autosuggest/index.cjs.map +1 -0
- package/build/cjs/components/autosuggest/index.d.cts +2 -0
- package/build/cjs/components/autosuggest/utils.cjs +2 -0
- package/build/cjs/components/autosuggest/utils.cjs.map +1 -0
- package/build/cjs/components/autosuggest/utils.d.cts +1 -0
- package/build/es/components/autosuggest/Autosuggest.d.ts +47 -0
- package/build/es/components/autosuggest/Autosuggest.js +2 -0
- package/build/es/components/autosuggest/Autosuggest.js.map +1 -0
- package/build/es/components/autosuggest/BaseAutosuggest.d.ts +16 -0
- package/build/es/components/autosuggest/BaseAutosuggest.js +2 -0
- package/build/es/components/autosuggest/BaseAutosuggest.js.map +1 -0
- package/build/es/components/autosuggest/ControllerButton.d.ts +8 -0
- package/build/es/components/autosuggest/ControllerButton.js +2 -0
- package/build/es/components/autosuggest/ControllerButton.js.map +1 -0
- package/build/es/components/autosuggest/Menu.d.ts +16 -0
- package/build/es/components/autosuggest/Menu.js +2 -0
- package/build/es/components/autosuggest/Menu.js.map +1 -0
- package/build/es/components/autosuggest/index.d.ts +2 -0
- package/build/es/components/autosuggest/index.js +2 -0
- package/build/es/components/autosuggest/index.js.map +1 -0
- package/build/es/components/autosuggest/utils.d.ts +1 -0
- package/build/es/components/autosuggest/utils.js +2 -0
- package/build/es/components/autosuggest/utils.js.map +1 -0
- package/package.json +16 -5
- package/styles/components/autosuggest/_index.scss +3 -0
- package/styles/components/autosuggest/autosuggest.css +141 -0
- package/styles/components/autosuggest/autosuggest.min.css +1 -0
- package/styles/components/autosuggest/autosuggest.scss +126 -0
- package/styles/components/button/button.css +2 -2
- package/styles/components/button/button.min.css +1 -1
- package/styles/components/checkbox/checkbox.css +4 -4
- package/styles/components/checkbox/checkbox.min.css +1 -1
- package/styles/components/feedback/feedback.css +2 -2
- package/styles/components/feedback/feedback.min.css +1 -1
- package/styles/components/input-group/input-group.css +2 -2
- package/styles/components/input-group/input-group.min.css +1 -1
- package/styles/components/input-panel/checkbox-panel.css +2 -2
- package/styles/components/input-panel/checkbox-panel.min.css +1 -1
- package/styles/components/input-panel/radio-panel.css +2 -2
- package/styles/components/input-panel/radio-panel.min.css +1 -1
- package/styles/components/loader/loader.css +6 -6
- package/styles/components/loader/loader.min.css +1 -1
- package/styles/components/loader/skeleton-loader.css +5 -5
- package/styles/components/loader/skeleton-loader.min.css +1 -1
- package/styles/components/message/message.css +2 -2
- package/styles/components/message/message.min.css +1 -1
- package/styles/components/progress-bar/progress-bar.css +2 -2
- package/styles/components/progress-bar/progress-bar.min.css +1 -1
- package/styles/components/radio-button/radio-button.css +2 -2
- package/styles/components/radio-button/radio-button.min.css +1 -1
- package/styles/components/system-message/system-message.css +2 -2
- package/styles/components/system-message/system-message.min.css +1 -1
- package/styles/components/toast/toast.css +4 -4
- package/styles/components/toast/toast.min.css +1 -1
- package/styles/styles.css +2620 -2482
- package/styles/styles.min.css +1 -1
- 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,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 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -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,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 @@
|
|
|
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 @@
|
|
|
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.
|
|
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": "
|
|
549
|
+
"gitHead": "27c9715cd08b9cd61551ac018ecd0b249e06fe3e"
|
|
539
550
|
}
|
|
@@ -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)}
|