@fremtind/jokul 0.69.1 → 0.70.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/build/build-stats.html +1 -1
  2. package/build/cjs/components/expander/types.d.cts +2 -2
  3. package/build/cjs/components/file/File.cjs +2 -0
  4. package/build/cjs/components/file/File.cjs.map +1 -0
  5. package/build/cjs/components/file/File.d.cts +3 -0
  6. package/build/cjs/components/file/index.cjs +2 -0
  7. package/build/cjs/components/file/index.cjs.map +1 -0
  8. package/build/cjs/components/file/index.d.cts +2 -0
  9. package/build/cjs/components/file/stories/File.stories.cjs +2 -0
  10. package/build/cjs/components/file/stories/File.stories.cjs.map +1 -0
  11. package/build/cjs/components/file/stories/File.stories.d.cts +33 -0
  12. package/build/cjs/components/file/types.cjs +2 -0
  13. package/build/cjs/components/file/types.cjs.map +1 -0
  14. package/build/cjs/components/file/types.d.cts +12 -0
  15. package/build/cjs/components/file-input/FileInput.cjs.map +1 -1
  16. package/build/cjs/components/file-input/FileInput.d.cts +1 -24
  17. package/build/cjs/components/file-input/index.cjs +1 -1
  18. package/build/cjs/components/file-input/index.d.cts +2 -3
  19. package/build/cjs/components/file-input/internal/Dropzone.cjs +1 -1
  20. package/build/cjs/components/file-input/internal/Dropzone.cjs.map +1 -1
  21. package/build/cjs/components/file-input/internal/Input.cjs +1 -1
  22. package/build/cjs/components/file-input/internal/Input.cjs.map +1 -1
  23. package/build/cjs/components/file-input/internal/fileInputContext.cjs.map +1 -1
  24. package/build/cjs/components/file-input/internal/fileInputContext.d.cts +3 -3
  25. package/build/cjs/components/file-input/internal/validateFileInputFiles.cjs +2 -0
  26. package/build/cjs/components/file-input/internal/validateFileInputFiles.cjs.map +1 -0
  27. package/build/cjs/components/file-input/internal/validateFileInputFiles.d.cts +2 -0
  28. package/build/cjs/components/file-input/stories/FileInput.stories.cjs +1 -1
  29. package/build/cjs/components/file-input/stories/FileInput.stories.cjs.map +1 -1
  30. package/build/cjs/components/file-input/types.cjs +1 -1
  31. package/build/cjs/components/file-input/types.d.cts +29 -5
  32. package/build/cjs/components/index.cjs +1 -1
  33. package/build/cjs/components/message/types.d.cts +2 -7
  34. package/build/cjs/components/select/Select.cjs.map +1 -1
  35. package/build/cjs/components/toggle-switch/usePillStyles.cjs.map +1 -1
  36. package/build/cjs/components/toggle-switch/usePillStyles.d.cts +1 -1
  37. package/build/cjs/hooks/useAnimatedHeight/types.d.cts +3 -3
  38. package/build/cjs/hooks/useAnimatedHeight/useAnimatedHeightBetween.cjs.map +1 -1
  39. package/build/cjs/hooks/useAnimatedHeight/useAutoAnimateHeight.cjs.map +1 -1
  40. package/build/cjs/hooks/useAnimatedHeight/useAutoAnimateHeight.d.cts +2 -2
  41. package/build/cjs/hooks/useClickOutside/useClickOutside.cjs.map +1 -1
  42. package/build/cjs/hooks/useClickOutside/useClickOutside.d.cts +1 -1
  43. package/build/cjs/hooks/useFocusOutside/useFocusOutside.cjs.map +1 -1
  44. package/build/cjs/hooks/useFocusOutside/useFocusOutside.d.cts +1 -1
  45. package/build/cjs/hooks/useKeyListener/useKeyListener.cjs.map +1 -1
  46. package/build/cjs/hooks/useKeyListener/useKeyListener.d.cts +1 -1
  47. package/build/cjs/hooks/useListNavigation/useListNavigation.cjs.map +1 -1
  48. package/build/cjs/hooks/useListNavigation/useListNavigation.d.cts +1 -1
  49. package/build/cjs/hooks/useMutationObserver/useMutationObserver.cjs.map +1 -1
  50. package/build/cjs/hooks/useMutationObserver/useMutationObserver.d.cts +1 -1
  51. package/build/cjs/hooks/useScrollIntoView/useScrollIntoView.cjs.map +1 -1
  52. package/build/cjs/hooks/useScrollIntoView/useScrollIntoView.d.cts +1 -1
  53. package/build/cjs/index.cjs +1 -1
  54. package/build/es/components/expander/types.d.ts +2 -2
  55. package/build/es/components/file/File.d.ts +3 -0
  56. package/build/es/components/file/File.js +2 -0
  57. package/build/es/components/file/File.js.map +1 -0
  58. package/build/es/components/file/index.d.ts +2 -0
  59. package/build/es/components/file/index.js +2 -0
  60. package/build/es/components/file/index.js.map +1 -0
  61. package/build/es/components/file/stories/File.stories.d.ts +33 -0
  62. package/build/es/components/file/stories/File.stories.js +2 -0
  63. package/build/es/components/file/stories/File.stories.js.map +1 -0
  64. package/build/es/components/file/types.d.ts +12 -0
  65. package/build/es/components/file/types.js +2 -0
  66. package/build/es/components/file/types.js.map +1 -0
  67. package/build/es/components/file-input/FileInput.d.ts +1 -24
  68. package/build/es/components/file-input/FileInput.js.map +1 -1
  69. package/build/es/components/file-input/index.d.ts +2 -3
  70. package/build/es/components/file-input/index.js +1 -1
  71. package/build/es/components/file-input/internal/Dropzone.js +1 -1
  72. package/build/es/components/file-input/internal/Dropzone.js.map +1 -1
  73. package/build/es/components/file-input/internal/Input.js +1 -1
  74. package/build/es/components/file-input/internal/Input.js.map +1 -1
  75. package/build/es/components/file-input/internal/fileInputContext.d.ts +3 -3
  76. package/build/es/components/file-input/internal/fileInputContext.js.map +1 -1
  77. package/build/es/components/file-input/internal/validateFileInputFiles.d.ts +2 -0
  78. package/build/es/components/file-input/internal/{validateFile.js → validateFileInputFiles.js} +2 -2
  79. package/build/es/components/file-input/internal/validateFileInputFiles.js.map +1 -0
  80. package/build/es/components/file-input/stories/FileInput.stories.js +1 -1
  81. package/build/es/components/file-input/stories/FileInput.stories.js.map +1 -1
  82. package/build/es/components/file-input/types.d.ts +29 -5
  83. package/build/es/components/file-input/types.js +1 -1
  84. package/build/es/components/index.js +1 -1
  85. package/build/es/components/message/types.d.ts +2 -7
  86. package/build/es/components/select/Select.js.map +1 -1
  87. package/build/es/components/toggle-switch/usePillStyles.d.ts +1 -1
  88. package/build/es/components/toggle-switch/usePillStyles.js.map +1 -1
  89. package/build/es/hooks/useAnimatedHeight/types.d.ts +3 -3
  90. package/build/es/hooks/useAnimatedHeight/useAnimatedHeightBetween.js.map +1 -1
  91. package/build/es/hooks/useAnimatedHeight/useAutoAnimateHeight.d.ts +2 -2
  92. package/build/es/hooks/useAnimatedHeight/useAutoAnimateHeight.js.map +1 -1
  93. package/build/es/hooks/useClickOutside/useClickOutside.d.ts +1 -1
  94. package/build/es/hooks/useClickOutside/useClickOutside.js.map +1 -1
  95. package/build/es/hooks/useFocusOutside/useFocusOutside.d.ts +1 -1
  96. package/build/es/hooks/useFocusOutside/useFocusOutside.js.map +1 -1
  97. package/build/es/hooks/useKeyListener/useKeyListener.d.ts +1 -1
  98. package/build/es/hooks/useKeyListener/useKeyListener.js.map +1 -1
  99. package/build/es/hooks/useListNavigation/useListNavigation.d.ts +1 -1
  100. package/build/es/hooks/useListNavigation/useListNavigation.js.map +1 -1
  101. package/build/es/hooks/useMutationObserver/useMutationObserver.d.ts +1 -1
  102. package/build/es/hooks/useMutationObserver/useMutationObserver.js.map +1 -1
  103. package/build/es/hooks/useScrollIntoView/useScrollIntoView.d.ts +1 -1
  104. package/build/es/hooks/useScrollIntoView/useScrollIntoView.js.map +1 -1
  105. package/build/es/index.js +1 -1
  106. package/build/jokul.css +1 -1
  107. package/package.json +12 -1
  108. package/styles/components/checkbox/checkbox.css +4 -4
  109. package/styles/components/checkbox/checkbox.min.css +1 -1
  110. package/styles/components/checkbox-panel/checkbox-panel.css +2 -2
  111. package/styles/components/checkbox-panel/checkbox-panel.min.css +1 -1
  112. package/styles/components/countdown/countdown.css +2 -2
  113. package/styles/components/countdown/countdown.min.css +1 -1
  114. package/styles/components/feedback/feedback.css +2 -2
  115. package/styles/components/feedback/feedback.min.css +1 -1
  116. package/styles/components/file/_index.scss +3 -0
  117. package/styles/components/file/file.css +144 -0
  118. package/styles/components/file/file.min.css +1 -0
  119. package/styles/components/file/file.scss +164 -0
  120. package/styles/components/file-input/_index.scss +1 -0
  121. package/styles/components/file-input/file-input.css +511 -129
  122. package/styles/components/file-input/file-input.min.css +1 -1
  123. package/styles/components/file-input/file-input.scss +1 -1
  124. package/styles/components/input-group/input-group.css +2 -2
  125. package/styles/components/input-group/input-group.min.css +1 -1
  126. package/styles/components/loader/loader.css +6 -6
  127. package/styles/components/loader/loader.min.css +1 -1
  128. package/styles/components/loader/skeleton-loader.css +5 -5
  129. package/styles/components/loader/skeleton-loader.min.css +1 -1
  130. package/styles/components/message/message.css +2 -2
  131. package/styles/components/message/message.min.css +1 -1
  132. package/styles/components/progress-bar/progress-bar.css +1 -1
  133. package/styles/components/progress-bar/progress-bar.min.css +1 -1
  134. package/styles/components/radio-button/radio-button.css +2 -2
  135. package/styles/components/radio-button/radio-button.min.css +1 -1
  136. package/styles/components/radio-panel/radio-panel.css +2 -2
  137. package/styles/components/radio-panel/radio-panel.min.css +1 -1
  138. package/styles/components/system-message/system-message.css +2 -2
  139. package/styles/components/system-message/system-message.min.css +1 -1
  140. package/styles/components/toast/toast.css +4 -4
  141. package/styles/components/toast/toast.min.css +1 -1
  142. package/styles/styles.css +36 -36
  143. package/styles/styles.min.css +1 -1
  144. package/build/cjs/components/file-input/File.cjs +0 -2
  145. package/build/cjs/components/file-input/File.cjs.map +0 -1
  146. package/build/cjs/components/file-input/File.d.cts +0 -14
  147. package/build/cjs/components/file-input/internal/Thumbnail.cjs +0 -2
  148. package/build/cjs/components/file-input/internal/Thumbnail.cjs.map +0 -1
  149. package/build/cjs/components/file-input/internal/Thumbnail.d.cts +0 -11
  150. package/build/cjs/components/file-input/internal/validateFile.cjs +0 -2
  151. package/build/cjs/components/file-input/internal/validateFile.cjs.map +0 -1
  152. package/build/cjs/components/file-input/internal/validateFile.d.cts +0 -2
  153. package/build/cjs/components/file-input/stories/File.stories.cjs +0 -2
  154. package/build/cjs/components/file-input/stories/File.stories.cjs.map +0 -1
  155. package/build/cjs/components/file-input/stories/File.stories.d.cts +0 -17
  156. package/build/cjs/components/file-input/stories/FileInput.stories.d.cts +0 -13
  157. package/build/cjs/components/file-input/stories/fileBytes.cjs +0 -2
  158. package/build/cjs/components/file-input/stories/fileBytes.cjs.map +0 -1
  159. package/build/cjs/components/file-input/stories/fileBytes.d.cts +0 -2
  160. package/build/es/components/file-input/File.d.ts +0 -14
  161. package/build/es/components/file-input/File.js +0 -2
  162. package/build/es/components/file-input/File.js.map +0 -1
  163. package/build/es/components/file-input/internal/Thumbnail.d.ts +0 -11
  164. package/build/es/components/file-input/internal/Thumbnail.js +0 -2
  165. package/build/es/components/file-input/internal/Thumbnail.js.map +0 -1
  166. package/build/es/components/file-input/internal/validateFile.d.ts +0 -2
  167. package/build/es/components/file-input/internal/validateFile.js.map +0 -1
  168. package/build/es/components/file-input/stories/File.stories.d.ts +0 -17
  169. package/build/es/components/file-input/stories/File.stories.js +0 -2
  170. package/build/es/components/file-input/stories/File.stories.js.map +0 -1
  171. package/build/es/components/file-input/stories/FileInput.stories.d.ts +0 -13
  172. package/build/es/components/file-input/stories/fileBytes.d.ts +0 -2
  173. package/build/es/components/file-input/stories/fileBytes.js +0 -2
  174. package/build/es/components/file-input/stories/fileBytes.js.map +0 -1
  175. package/build/index-C4ABwKfA.js +0 -20
  176. package/build/index-C4ABwKfA.js.map +0 -1
  177. package/build/index-ZdY5zxEI.cjs +0 -20
  178. package/build/index-ZdY5zxEI.cjs.map +0 -1
  179. package/build/style.css +0 -1
  180. package/styles/components/file-input/_file.scss +0 -176
  181. package/styles/components/file-input/development/public/fonts/_index.scss +0 -1
  182. package/styles/components/file-input/development/public/fonts/webfonts.css +0 -108
  183. package/styles/components/file-input/development/public/fonts/webfonts.min.css +0 -1
  184. package/styles/components/file-input/development/public/fonts/webfonts.scss +0 -137
  185. package/styles/components/menu/development/public/fonts/_index.scss +0 -1
  186. package/styles/components/menu/development/public/fonts/webfonts.css +0 -108
  187. package/styles/components/menu/development/public/fonts/webfonts.min.css +0 -1
  188. package/styles/components/menu/development/public/fonts/webfonts.scss +0 -137
  189. package/styles/vind/_flex.scss +0 -113
  190. package/styles/vind/_font.scss +0 -19
  191. package/styles/vind/_index.scss +0 -1
  192. package/styles/vind/_margin.scss +0 -43
  193. package/styles/vind/_padding.scss +0 -43
  194. package/styles/vind/_space-between.scss +0 -13
  195. package/styles/vind/_typography.scss +0 -47
  196. package/styles/vind/vind.css +0 -1756
  197. package/styles/vind/vind.min.css +0 -1
  198. package/styles/vind/vind.scss +0 -6
@@ -0,0 +1,12 @@
1
+ import { MouseEvent } from 'react';
2
+ export type FileProps = {
3
+ fileName: string;
4
+ fileType: string;
5
+ fileSize: number;
6
+ path?: string;
7
+ errorLabel?: string;
8
+ state?: "error" | "loading";
9
+ variant?: "list" | "card";
10
+ file?: File;
11
+ onRemove?: (e: MouseEvent<HTMLButtonElement>) => void;
12
+ };
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,26 +1,3 @@
1
1
  import { default as React } from 'react';
2
- import { Density } from '../../core/types.js';
3
- import { FieldGroupProps } from '../input-group/types.js';
4
- import { FileInputFile } from './types.js';
5
- export interface FileInputProps extends Omit<FieldGroupProps, "onChange"> {
6
- className?: string;
7
- id?: string;
8
- density?: Density;
9
- /**
10
- * En string som begrenser hvilke filtyper som kan velges.
11
- *
12
- * Flere filtyper kan defineres som en kommaseparert liste.
13
- *
14
- * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept
15
- */
16
- accept?: "image/*" | ".pdf" | "image/*,.pdf" | HTMLInputElement["accept"];
17
- maxSizeBytes?: number;
18
- /**
19
- * @default true
20
- */
21
- multiple?: boolean;
22
- value: FileInputFile[];
23
- variant?: "flexible" | "small";
24
- onChange: (e: React.ChangeEvent<HTMLInputElement> | React.DragEvent<HTMLDivElement>, files: FileInputFile[]) => void;
25
- }
2
+ import { FileInputProps } from './types.js';
26
3
  export declare const FileInput: React.ForwardRefExoticComponent<FileInputProps & React.RefAttributes<HTMLInputElement>>;
@@ -1 +1 @@
1
- {"version":3,"file":"FileInput.js","sources":["../../../../src/components/file-input/FileInput.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { forwardRef, useId } from \"react\";\nimport { FieldGroup } from \"../../components/input-group/FieldGroup.js\";\nimport type { Density } from \"../../core/types.js\";\nimport type { FieldGroupProps } from \"../input-group/types.js\";\nimport { Dropzone } from \"./internal/Dropzone.js\";\nimport { Input } from \"./internal/Input.js\";\nimport { MaxSize } from \"./internal/MaxSize.js\";\nimport { FileInputContextProvider } from \"./internal/fileInputContext.js\";\nimport type { FileInputFile } from \"./types.js\";\n\nexport interface FileInputProps extends Omit<FieldGroupProps, \"onChange\"> {\n className?: string;\n id?: string;\n density?: Density;\n /**\n * En string som begrenser hvilke filtyper som kan velges.\n *\n * Flere filtyper kan defineres som en kommaseparert liste.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept\n */\n accept?: \"image/*\" | \".pdf\" | \"image/*,.pdf\" | HTMLInputElement[\"accept\"];\n maxSizeBytes?: number;\n /**\n * @default true\n */\n multiple?: boolean;\n value: FileInputFile[];\n variant?: \"flexible\" | \"small\";\n onChange: (\n e:\n | React.ChangeEvent<HTMLInputElement>\n | React.DragEvent<HTMLDivElement>,\n files: FileInputFile[],\n ) => void;\n}\n\nexport const FileInput = forwardRef<HTMLInputElement, FileInputProps>(\n (props, ref) => {\n const {\n accept,\n className,\n children,\n id,\n value,\n density,\n multiple = true,\n maxSizeBytes,\n onChange,\n variant,\n ...rest\n } = props;\n\n const hasFiles = value.length > 0;\n\n const maxSizeDescriptionId = useId();\n\n if (variant === \"small\") {\n return (\n <FileInputContextProvider\n context={{ accept, onChange, maxSizeBytes, files: value }}\n >\n <FieldGroup\n className={clsx(\n \"jkl-file-input\",\n \"jkl-file-input--small\",\n className,\n {\n \"jkl-file-input--has-files\": hasFiles,\n },\n )}\n data-layout-density={density ? density : \"compact\"}\n {...rest}\n >\n <Dropzone>\n <div className=\"jkl-file-input__call-to-action\">\n <Input\n id={id}\n label=\"Legg til fil\"\n multiple={multiple}\n ref={ref}\n aria-describedby={maxSizeDescriptionId}\n />\n </div>\n </Dropzone>\n <MaxSize id={maxSizeDescriptionId} />\n {value.length > 0 && (\n <ul className=\"jkl-file-input__files\">\n {children}\n </ul>\n )}\n </FieldGroup>\n </FileInputContextProvider>\n );\n }\n\n return (\n <FileInputContextProvider\n context={{ accept, onChange, maxSizeBytes, files: value }}\n >\n <FieldGroup\n className={clsx(\"jkl-file-input\", className, {\n \"jkl-file-input--has-files\": hasFiles,\n })}\n data-layout-density={density}\n {...rest}\n >\n <Dropzone>\n {value.length > 0 && (\n <ul className=\"jkl-file-input__files\">\n {children}\n </ul>\n )}\n <div className=\"jkl-file-input__call-to-action\">\n <Input\n id={id}\n label={\n multiple && hasFiles\n ? \"Legg til flere filer\"\n : \"Legg til fil\"\n }\n multiple={multiple}\n ref={ref}\n aria-describedby={maxSizeDescriptionId}\n />\n <MaxSize id={maxSizeDescriptionId} />\n </div>\n </Dropzone>\n </FieldGroup>\n </FileInputContextProvider>\n );\n },\n);\n\nFileInput.displayName = \"FileInput\";\n"],"names":["FileInput","forwardRef","props","ref","accept","className","children","id","value","density","multiple","maxSizeBytes","onChange","variant","rest","hasFiles","length","maxSizeDescriptionId","useId","jsx","FileInputContextProvider","context","files","jsxs","FieldGroup","clsx","Dropzone","Input","label","MaxSize","displayName"],"mappings":"gaAsCO,MAAMA,EAAYC,GACrB,CAACC,EAAOC,KACE,MACFC,OAAAA,EACAC,UAAAA,EACAC,SAAAA,EACAC,GAAAA,EACAC,MAAAA,EACAC,QAAAA,EACAC,SAAAA,GAAW,EACXC,aAAAA,EACAC,SAAAA,EACAC,QAAAA,KACGC,GACHZ,EAEEa,EAAWP,EAAMQ,OAAS,EAE1BC,EAAuBC,IAEzBL,OAEIM,EAACC,EAFO,UAAZP,EAEK,CACGQ,QAAS,CAAEjB,OAAAA,EAAQQ,SAAAA,EAAUD,aAAAA,EAAcW,MAAOd,GAElDF,SAAAiB,EAACC,EAAA,CACGnB,UAAWoB,EACP,iBACA,wBACApB,EACA,CACI,4BAA6BU,IAGrC,sBAAqBN,GAAoB,aACrCK,EAEJR,SAAA,CAAAa,EAACO,EACG,CAAApB,SAAAa,EAAC,MAAI,CAAAd,UAAU,iCACXC,SAAAa,EAACQ,EAAA,CACGpB,GAAAA,EACAqB,MAAM,eACNlB,SAAAA,EACAP,IAAAA,EACA,mBAAkBc,QAI9BE,EAACU,EAAQ,CAAAtB,GAAIU,IACZT,EAAMQ,OAAS,KACX,KAAG,CAAAX,UAAU,wBACTC,SAAAA,QASpB,CACGe,QAAS,CAAEjB,OAAAA,EAAQQ,SAAAA,EAAUD,aAAAA,EAAcW,MAAOd,GAElDF,SAAAa,EAACK,EAAA,CACGnB,UAAWoB,EAAK,iBAAkBpB,EAAW,CACzC,4BAA6BU,IAEjC,sBAAqBN,KACjBK,EAEJR,WAACoB,EACI,CAAApB,SAAA,CAAAE,EAAMQ,OAAS,GACZG,EAAC,KAAG,CAAAd,UAAU,wBACTC,SAAAA,IAGTiB,EAAC,MAAI,CAAAlB,UAAU,iCACXC,SAAA,CAAAa,EAACQ,EAAA,CACGpB,GAAAA,EACAqB,MACIlB,GAAYK,EACN,uBACA,eAEVL,SAAAA,EACAP,IAAAA,EACA,mBAAkBc,IAEtBE,EAACU,EAAQ,CAAAtB,GAAIU,aAI7B,IAKZjB,EAAU8B,YAAc"}
1
+ {"version":3,"file":"FileInput.js","sources":["../../../../src/components/file-input/FileInput.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, {forwardRef, useId} from \"react\";\nimport {FieldGroup} from \"../../components/input-group/FieldGroup.js\";\nimport {Dropzone} from \"./internal/Dropzone.js\";\nimport {Input} from \"./internal/Input.js\";\nimport {MaxSize} from \"./internal/MaxSize.js\";\nimport {FileInputContextProvider} from \"./internal/fileInputContext.js\";\nimport type {FileInputProps} from \"./types.js\";\n\nexport const FileInput = forwardRef<HTMLInputElement, FileInputProps>(\n (props, ref) => {\n const {\n accept,\n className,\n children,\n id,\n value,\n density,\n multiple = true,\n maxSizeBytes,\n onChange,\n variant,\n ...rest\n } = props;\n\n const hasFiles = value.length > 0;\n\n const maxSizeDescriptionId = useId();\n\n if (variant === \"small\") {\n return (\n <FileInputContextProvider\n context={{ accept, onChange, maxSizeBytes, files: value }}\n >\n <FieldGroup\n className={clsx(\n \"jkl-file-input\",\n \"jkl-file-input--small\",\n className,\n {\n \"jkl-file-input--has-files\": hasFiles,\n },\n )}\n data-layout-density={density ? density : \"compact\"}\n {...rest}\n >\n <Dropzone>\n <div className=\"jkl-file-input__call-to-action\">\n <Input\n id={id}\n label=\"Legg til fil\"\n multiple={multiple}\n ref={ref}\n aria-describedby={maxSizeDescriptionId}\n />\n </div>\n </Dropzone>\n <MaxSize id={maxSizeDescriptionId} />\n {value.length > 0 && (\n <ul className=\"jkl-file-input__files\">\n {children}\n </ul>\n )}\n </FieldGroup>\n </FileInputContextProvider>\n );\n }\n\n return (\n <FileInputContextProvider\n context={{ accept, onChange, maxSizeBytes, files: value }}\n >\n <FieldGroup\n className={clsx(\"jkl-file-input\", className, {\n \"jkl-file-input--has-files\": hasFiles,\n })}\n data-layout-density={density}\n {...rest}\n >\n <Dropzone>\n {value.length > 0 && (\n <ul className=\"jkl-file-input__files\">\n {children}\n </ul>\n )}\n <div className=\"jkl-file-input__call-to-action\">\n <Input\n id={id}\n label={\n multiple && hasFiles\n ? \"Legg til flere filer\"\n : \"Legg til fil\"\n }\n multiple={multiple}\n ref={ref}\n aria-describedby={maxSizeDescriptionId}\n />\n <MaxSize id={maxSizeDescriptionId} />\n </div>\n </Dropzone>\n </FieldGroup>\n </FileInputContextProvider>\n );\n },\n);\n\nFileInput.displayName = \"FileInput\";\n"],"names":["FileInput","forwardRef","props","ref","accept","className","children","id","value","density","multiple","maxSizeBytes","onChange","variant","rest","hasFiles","length","maxSizeDescriptionId","useId","jsx","FileInputContextProvider","context","files","jsxs","FieldGroup","clsx","Dropzone","Input","label","MaxSize","displayName"],"mappings":"gaASO,MAAMA,EAAYC,GACrB,CAACC,EAAOC,KACE,MACFC,OAAAA,EACAC,UAAAA,EACAC,SAAAA,EACAC,GAAAA,EACAC,MAAAA,EACAC,QAAAA,EACAC,SAAAA,GAAW,EACXC,aAAAA,EACAC,SAAAA,EACAC,QAAAA,KACGC,GACHZ,EAEEa,EAAWP,EAAMQ,OAAS,EAE1BC,EAAuBC,IAEzBL,OAEIM,EAACC,EAFO,UAAZP,EAEK,CACGQ,QAAS,CAAEjB,OAAAA,EAAQQ,SAAAA,EAAUD,aAAAA,EAAcW,MAAOd,GAElDF,SAAAiB,EAACC,EAAA,CACGnB,UAAWoB,EACP,iBACA,wBACApB,EACA,CACI,4BAA6BU,IAGrC,sBAAqBN,GAAoB,aACrCK,EAEJR,SAAA,CAAAa,EAACO,EACG,CAAApB,SAAAa,EAAC,MAAI,CAAAd,UAAU,iCACXC,SAAAa,EAACQ,EAAA,CACGpB,GAAAA,EACAqB,MAAM,eACNlB,SAAAA,EACAP,IAAAA,EACA,mBAAkBc,QAI9BE,EAACU,EAAQ,CAAAtB,GAAIU,IACZT,EAAMQ,OAAS,KACX,KAAG,CAAAX,UAAU,wBACTC,SAAAA,QASpB,CACGe,QAAS,CAAEjB,OAAAA,EAAQQ,SAAAA,EAAUD,aAAAA,EAAcW,MAAOd,GAElDF,SAAAa,EAACK,EAAA,CACGnB,UAAWoB,EAAK,iBAAkBpB,EAAW,CACzC,4BAA6BU,IAEjC,sBAAqBN,KACjBK,EAEJR,WAACoB,EACI,CAAApB,SAAA,CAAAE,EAAMQ,OAAS,GACZG,EAAC,KAAG,CAAAd,UAAU,wBACTC,SAAAA,IAGTiB,EAAC,MAAI,CAAAlB,UAAU,iCACXC,SAAA,CAAAa,EAACQ,EAAA,CACGpB,GAAAA,EACAqB,MACIlB,GAAYK,EACN,uBACA,eAEVL,SAAAA,EACAP,IAAAA,EACA,mBAAkBc,IAEtBE,EAACU,EAAQ,CAAAtB,GAAIU,aAI7B,IAKZjB,EAAU8B,YAAc"}
@@ -1,4 +1,3 @@
1
- export { File, type FileProps } from './File.js';
2
- export { FileInput, type FileInputProps } from './FileInput.js';
3
- export type { FileInputFile, FileInputFileValidation, FileInputFileState, } from './types.js';
1
+ export { FileInput } from './FileInput.js';
4
2
  export { upload } from './utils.js';
3
+ export type { FileInputProps } from './types.js';
@@ -1,2 +1,2 @@
1
- import{File as i}from"./File.js";import{FileInput as s}from"./FileInput.js";import{upload as l}from"./utils.js";export{i as File,s as FileInput,l as upload};
1
+ import{FileInput as p}from"./FileInput.js";import{upload as o}from"./utils.js";export{p as FileInput,o as upload};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e}from"react/jsx-runtime";import{c as r}from"../../../../clsx-BeLtu-UY.js";import{forwardRef as t,useState as a}from"react";import{useFileInputContext as n}from"./fileInputContext.js";import{validateFile as o}from"./validateFile.js";const i=t(((t,i)=>{const{children:s,...l}=t,[p,f]=a(""),d=n();if(!d)return e("p",{children:"Dropzone must be placed inside a FileInputContextProvider."});const{maxSizeBytes:u,accept:m,onChange:c}=d;return e("div",{...l,ref:i,className:r("jkl-file-input__dropzone",p),onDragEnter:e=>{f("jkl-file-input__dropzone--enter"),e.preventDefault()},onDragOver:e=>{f("jkl-file-input__dropzone--enter"),e.preventDefault()},onDrop:e=>{e.preventDefault(),f(""),e.dataTransfer.files&&c(e,[...e.dataTransfer.files].map((e=>({file:e,state:"SELECTED",validation:o(e,m,u),uploadProgress:0}))))},onDragLeave:e=>{f(""),e.preventDefault()},children:s})}));i.displayName="Dropzone";export{i as Dropzone};
1
+ import{jsx as e}from"react/jsx-runtime";import{c as t}from"../../../../clsx-BeLtu-UY.js";import{forwardRef as r,useState as a}from"react";import{useFileInputContext as n}from"./fileInputContext.js";import{validateFileInputFiles as o}from"./validateFileInputFiles.js";const i=r(((r,i)=>{const{children:s,...l}=r,[p,f]=a(""),d=n();if(!d)return e("p",{children:"Dropzone must be placed inside a FileInputContextProvider."});const{maxSizeBytes:u,accept:m,onChange:c}=d;return e("div",{...l,ref:i,className:t("jkl-file-input__dropzone",p),onDragEnter:e=>{f("jkl-file-input__dropzone--enter"),e.preventDefault()},onDragOver:e=>{f("jkl-file-input__dropzone--enter"),e.preventDefault()},onDrop:e=>{e.preventDefault(),f(""),e.dataTransfer.files&&c(e,[...e.dataTransfer.files].map((e=>({file:e,state:void 0,validation:o(e,m,u),uploadProgress:0}))))},onDragLeave:e=>{f(""),e.preventDefault()},children:s})}));i.displayName="Dropzone";export{i as Dropzone};
2
2
  //# sourceMappingURL=Dropzone.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Dropzone.js","sources":["../../../../../src/components/file-input/internal/Dropzone.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { forwardRef, useState } from \"react\";\nimport type { WithChildren } from \"../../../core/types.js\";\nimport type { FileInputFile } from \"../types.js\";\nimport { useFileInputContext } from \"./fileInputContext.js\";\nimport { validateFile } from \"./validateFile.js\";\n\ninterface DropzoneProps extends WithChildren {}\n\nexport const Dropzone = forwardRef<HTMLDivElement, DropzoneProps>(\n (props, ref) => {\n const { children, ...rest } = props;\n const [onDragClassName, setOnDragClassName] = useState<string>(\"\");\n\n const context = useFileInputContext();\n if (!context) {\n return (\n <p>\n Dropzone must be placed inside a FileInputContextProvider.\n </p>\n );\n }\n const { maxSizeBytes, accept, onChange } = context;\n\n return (\n <div\n {...rest}\n ref={ref}\n className={clsx(\"jkl-file-input__dropzone\", onDragClassName)}\n onDragEnter={(e) => {\n setOnDragClassName(\"jkl-file-input__dropzone--enter\");\n e.preventDefault();\n }}\n onDragOver={(e) => {\n /* Prevent browser from opening file in a new tab */\n setOnDragClassName(\"jkl-file-input__dropzone--enter\");\n e.preventDefault();\n }}\n onDrop={(e) => {\n e.preventDefault();\n setOnDragClassName(\"\");\n\n if (e.dataTransfer.files) {\n onChange(\n e,\n [...e.dataTransfer.files].map<FileInputFile>(\n (file) => ({\n file,\n state: \"SELECTED\",\n validation: validateFile(\n file,\n accept,\n maxSizeBytes,\n ),\n uploadProgress: 0,\n }),\n ),\n );\n }\n }}\n onDragLeave={(e) => {\n setOnDragClassName(\"\");\n e.preventDefault();\n }}\n >\n {children}\n </div>\n );\n },\n);\n\nDropzone.displayName = \"Dropzone\";\n"],"names":["Dropzone","forwardRef","props","ref","children","rest","onDragClassName","setOnDragClassName","useState","context","useFileInputContext","jsx","maxSizeBytes","accept","onChange","className","clsx","onDragEnter","e","preventDefault","onDragOver","onDrop","dataTransfer","files","map","file","state","validation","validateFile","uploadProgress","onDragLeave","displayName"],"mappings":"uPASO,MAAMA,EAAWC,GACpB,CAACC,EAAOC,KACJ,MAAQC,SAAAA,KAAaC,GAASH,GACvBI,EAAiBC,GAAsBC,EAAiB,IAEzDC,EAAUC,IAChB,IAAKD,EAEG,OAAAE,EAAC,KAAEP,SAEH,+DAGR,MAAQQ,aAAAA,EAAcC,OAAAA,EAAQC,SAAAA,GAAaL,EAGvC,OAAAE,EAAC,MAAA,IACON,EACJF,IAAAA,EACAY,UAAWC,EAAK,2BAA4BV,GAC5CW,YAAcC,IACVX,EAAmB,mCACnBW,EAAEC,gBAAe,EAErBC,WAAaF,IAETX,EAAmB,mCACnBW,EAAEC,gBAAe,EAErBE,OAASH,IACLA,EAAEC,iBACFZ,EAAmB,IAEfW,EAAEI,aAAaC,OACfT,EACII,EACA,IAAIA,EAAEI,aAAaC,OAAOC,KACrBC,IAAU,CACPA,KAAAA,EACAC,MAAO,WACPC,WAAYC,EACRH,EACAZ,EACAD,GAEJiB,eAAgB,MAG5B,EAGRC,YAAcZ,IACVX,EAAmB,IACnBW,EAAEC,gBAAe,EAGpBf,SAAAA,GACL,IAKZJ,EAAS+B,YAAc"}
1
+ {"version":3,"file":"Dropzone.js","sources":["../../../../../src/components/file-input/internal/Dropzone.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, {forwardRef, useState} from \"react\";\nimport type {WithChildren} from \"../../../core/types.js\";\nimport type {UploadedFile} from \"../types.js\";\nimport {useFileInputContext} from \"./fileInputContext.js\";\nimport {validateFileInputFiles} from \"./validateFileInputFiles.js\";\n\ninterface DropzoneProps extends WithChildren {}\n\nexport const Dropzone = forwardRef<HTMLDivElement, DropzoneProps>(\n (props, ref) => {\n const { children, ...rest } = props;\n const [onDragClassName, setOnDragClassName] = useState<string>(\"\");\n\n const context = useFileInputContext();\n if (!context) {\n return (\n <p>\n Dropzone must be placed inside a FileInputContextProvider.\n </p>\n );\n }\n const { maxSizeBytes, accept, onChange } = context;\n\n return (\n <div\n {...rest}\n ref={ref}\n className={clsx(\"jkl-file-input__dropzone\", onDragClassName)}\n onDragEnter={(e) => {\n setOnDragClassName(\"jkl-file-input__dropzone--enter\");\n e.preventDefault();\n }}\n onDragOver={(e) => {\n /* Prevent browser from opening file in a new tab */\n setOnDragClassName(\"jkl-file-input__dropzone--enter\");\n e.preventDefault();\n }}\n onDrop={(e) => {\n e.preventDefault();\n setOnDragClassName(\"\");\n\n if (e.dataTransfer.files) {\n onChange(\n e,\n [...e.dataTransfer.files].map<UploadedFile>(\n (file) => ({\n file,\n state: undefined,\n validation: validateFileInputFiles(\n file,\n accept,\n maxSizeBytes,\n ),\n uploadProgress: 0,\n }),\n ),\n );\n }\n }}\n onDragLeave={(e) => {\n setOnDragClassName(\"\");\n e.preventDefault();\n }}\n >\n {children}\n </div>\n );\n },\n);\n\nDropzone.displayName = \"Dropzone\";\n"],"names":["Dropzone","forwardRef","props","ref","children","rest","onDragClassName","setOnDragClassName","useState","context","useFileInputContext","jsx","maxSizeBytes","accept","onChange","className","clsx","onDragEnter","e","preventDefault","onDragOver","onDrop","dataTransfer","files","map","file","state","validation","validateFileInputFiles","uploadProgress","onDragLeave","displayName"],"mappings":"2QASO,MAAMA,EAAWC,GACpB,CAACC,EAAOC,KACJ,MAAQC,SAAAA,KAAaC,GAASH,GACvBI,EAAiBC,GAAsBC,EAAiB,IAEzDC,EAAUC,IAChB,IAAKD,EAEG,OAAAE,EAAC,KAAEP,SAEH,+DAGR,MAAQQ,aAAAA,EAAcC,OAAAA,EAAQC,SAAAA,GAAaL,EAGvC,OAAAE,EAAC,MAAA,IACON,EACJF,IAAAA,EACAY,UAAWC,EAAK,2BAA4BV,GAC5CW,YAAcC,IACVX,EAAmB,mCACnBW,EAAEC,gBAAe,EAErBC,WAAaF,IAETX,EAAmB,mCACnBW,EAAEC,gBAAe,EAErBE,OAASH,IACLA,EAAEC,iBACFZ,EAAmB,IAEfW,EAAEI,aAAaC,OACfT,EACII,EACA,IAAIA,EAAEI,aAAaC,OAAOC,KACrBC,IAAU,CACPA,KAAAA,EACAC,WAAO,EACPC,WAAYC,EACRH,EACAZ,EACAD,GAEJiB,eAAgB,MAG5B,EAGRC,YAAcZ,IACVX,EAAmB,IACnBW,EAAEC,gBAAe,EAGpBf,SAAAA,GACL,IAKZJ,EAAS+B,YAAc"}
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as t,Fragment as a}from"react/jsx-runtime";import{forwardRef as i,useId as l}from"react";import{useFileInputContext as r}from"./fileInputContext.js";import{validateFile as s}from"./validateFile.js";const n=i(((i,n)=>{const{multiple:o,id:p,label:d,...c}=i,m=l(),u=`${p}-description`,f=o?"filer":"fil",h=r();if(!h)return e("p",{children:"Input must be placed inside a FileInputContextProvider."});const{accept:j,maxSizeBytes:b,onChange:x}=h,I=p||m;return t(a,{children:[e("label",{className:"jkl-button jkl-button--secondary",htmlFor:I,id:`${I}__add-btn`,children:d}),e("input",{...c,ref:n,id:I,accept:j,"aria-describedby":b?u:void 0,className:"jkl-sr-only",type:"file",multiple:o,value:"",onChange:e=>{e.target.files&&x(e,[...e.target.files].map((e=>({file:e,state:"SELECTED",validation:s(e,j,b),uploadProgress:0}))))}}),t("p",{className:"jkl-file-input__dropzone-hint",children:["eller slipp ",f," her"]})," "]})}));n.displayName="Input";export{n as Input};
1
+ import{jsx as e,jsxs as t,Fragment as i}from"react/jsx-runtime";import{forwardRef as a,useId as l}from"react";import{useFileInputContext as s}from"./fileInputContext.js";import{validateFileInputFiles as r}from"./validateFileInputFiles.js";const n=a(((a,n)=>{const{multiple:o,id:p,label:d,...u}=a,c=l(),m=`${p}-description`,f=o?"filer":"fil",h=s();if(!h)return e("p",{children:"Input must be placed inside a FileInputContextProvider."});const{accept:j,maxSizeBytes:I,onChange:b}=h,x=p||c;return t(i,{children:[e("label",{className:"jkl-button jkl-button--secondary",htmlFor:x,id:`${x}__add-btn`,children:d}),e("input",{...u,ref:n,id:x,accept:j,"aria-describedby":I?m:void 0,className:"jkl-sr-only",type:"file",multiple:o,value:"",onChange:e=>{e.target.files&&b(e,[...e.target.files].map((e=>({file:e,state:void 0,validation:r(e,j,I),uploadProgress:0}))))}}),t("p",{className:"jkl-file-input__dropzone-hint",children:["eller slipp ",f," her"]})," "]})}));n.displayName="Input";export{n as Input};
2
2
  //# sourceMappingURL=Input.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Input.js","sources":["../../../../../src/components/file-input/internal/Input.tsx"],"sourcesContent":["import React, { forwardRef, useId } from \"react\";\nimport type { FileInputFile } from \"../types.js\";\nimport { useFileInputContext } from \"./fileInputContext.js\";\nimport { validateFile } from \"./validateFile.js\";\n\ninterface FileInputProps {\n id?: string;\n label: string;\n multiple: boolean;\n}\n\nexport const Input = forwardRef<HTMLInputElement, FileInputProps>(\n (props, ref) => {\n const { multiple, id, label, ...rest } = props;\n\n const defaultId = useId();\n\n const maxSizeDescriptionId = `${id}-description`;\n const descriptor = multiple ? \"filer\" : \"fil\";\n\n const context = useFileInputContext();\n if (!context) {\n return (\n <p>Input must be placed inside a FileInputContextProvider.</p>\n );\n }\n const { accept, maxSizeBytes, onChange } = context;\n\n const elementId = id || defaultId;\n\n return (\n <>\n <label\n className=\"jkl-button jkl-button--secondary\"\n htmlFor={elementId}\n id={`${elementId}__add-btn`}\n >\n {label}\n </label>\n <input\n {...rest}\n ref={ref}\n id={elementId}\n accept={accept}\n aria-describedby={\n maxSizeBytes ? maxSizeDescriptionId : undefined\n }\n className=\"jkl-sr-only\"\n type=\"file\"\n multiple={multiple}\n value=\"\"\n onChange={(e) => {\n if (e.target.files) {\n onChange(\n e,\n [...e.target.files].map<FileInputFile>(\n (file) => ({\n file,\n state: \"SELECTED\",\n validation: validateFile(\n file,\n accept,\n maxSizeBytes,\n ),\n uploadProgress: 0,\n }),\n ),\n );\n }\n }}\n />\n <p className=\"jkl-file-input__dropzone-hint\">\n eller slipp {descriptor} her\n </p>{\" \"}\n </>\n );\n },\n);\n\nInput.displayName = \"Input\";\n"],"names":["Input","forwardRef","props","ref","multiple","id","label","rest","defaultId","useId","maxSizeDescriptionId","descriptor","context","useFileInputContext","jsx","children","accept","maxSizeBytes","onChange","elementId","jsxs","Fragment","className","htmlFor","type","value","e","target","files","map","file","state","validation","validateFile","uploadProgress","displayName"],"mappings":"2NAWO,MAAMA,EAAQC,GACjB,CAACC,EAAOC,KACE,MAAEC,SAAAA,EAAUC,GAAAA,EAAIC,MAAAA,KAAUC,GAASL,EAEnCM,EAAYC,IAEZC,EAAuB,GAAGL,gBAC1BM,EAAaP,EAAW,QAAU,MAElCQ,EAAUC,IAChB,IAAKD,EAEG,OAAAE,EAAC,KAAEC,SAAuD,4DAG5D,MAAEC,OAAAA,EAAQC,aAAAA,EAAcC,SAAAA,GAAaN,EAErCO,EAAYd,GAAMG,EAExB,OAEQY,EAAAC,EAAA,CAAAN,SAAA,CAAAD,EAAC,QAAA,CACGQ,UAAU,mCACVC,QAASJ,EACTd,GAAI,GAAGc,aAENJ,SAAAT,IAELQ,EAAC,QAAA,IACOP,EACJJ,IAAAA,EACAE,GAAIc,EACJH,OAAAA,EACA,mBACIC,EAAeP,OAAuB,EAE1CY,UAAU,cACVE,KAAK,OACLpB,SAAAA,EACAqB,MAAM,GACNP,SAAWQ,IACHA,EAAEC,OAAOC,OACTV,EACIQ,EACA,IAAIA,EAAEC,OAAOC,OAAOC,KACfC,IAAU,CACPA,KAAAA,EACAC,MAAO,WACPC,WAAYC,EACRH,EACAd,EACAC,GAEJiB,eAAgB,MAG5B,IAIZd,EAAC,IAAE,CAAAE,UAAU,gCAAgCP,SAAA,CAAA,eAC5BJ,EAAW,UACvB,MACT,IAKZX,EAAMmC,YAAc"}
1
+ {"version":3,"file":"Input.js","sources":["../../../../../src/components/file-input/internal/Input.tsx"],"sourcesContent":["import React, {forwardRef, useId} from \"react\";\nimport type {UploadedFile} from \"../types.js\";\nimport {useFileInputContext} from \"./fileInputContext.js\";\nimport {validateFileInputFiles} from \"./validateFileInputFiles.js\";\n\ninterface FileInputProps {\n id?: string;\n label: string;\n multiple: boolean;\n}\n\nexport const Input = forwardRef<HTMLInputElement, FileInputProps>(\n (props, ref) => {\n const { multiple, id, label, ...rest } = props;\n\n const defaultId = useId();\n\n const maxSizeDescriptionId = `${id}-description`;\n const descriptor = multiple ? \"filer\" : \"fil\";\n\n const context = useFileInputContext();\n if (!context) {\n return (\n <p>Input must be placed inside a FileInputContextProvider.</p>\n );\n }\n const { accept, maxSizeBytes, onChange } = context;\n\n const elementId = id || defaultId;\n\n return (\n <>\n <label\n className=\"jkl-button jkl-button--secondary\"\n htmlFor={elementId}\n id={`${elementId}__add-btn`}\n >\n {label}\n </label>\n <input\n {...rest}\n ref={ref}\n id={elementId}\n accept={accept}\n aria-describedby={\n maxSizeBytes ? maxSizeDescriptionId : undefined\n }\n className=\"jkl-sr-only\"\n type=\"file\"\n multiple={multiple}\n value=\"\"\n onChange={(e) => {\n if (e.target.files) {\n onChange(\n e,\n [...e.target.files].map<UploadedFile>(\n (file) => ({\n file,\n state: undefined,\n validation: validateFileInputFiles(\n file,\n accept,\n maxSizeBytes,\n ),\n uploadProgress: 0,\n }),\n ),\n );\n }\n }}\n />\n <p className=\"jkl-file-input__dropzone-hint\">\n eller slipp {descriptor} her\n </p>{\" \"}\n </>\n );\n },\n);\n\nInput.displayName = \"Input\";\n"],"names":["Input","forwardRef","props","ref","multiple","id","label","rest","defaultId","useId","maxSizeDescriptionId","descriptor","context","useFileInputContext","jsx","children","accept","maxSizeBytes","onChange","elementId","jsxs","Fragment","className","htmlFor","type","value","e","target","files","map","file","state","validation","validateFileInputFiles","uploadProgress","displayName"],"mappings":"+OAWO,MAAMA,EAAQC,GACjB,CAACC,EAAOC,KACE,MAAEC,SAAAA,EAAUC,GAAAA,EAAIC,MAAAA,KAAUC,GAASL,EAEnCM,EAAYC,IAEZC,EAAuB,GAAGL,gBAC1BM,EAAaP,EAAW,QAAU,MAElCQ,EAAUC,IAChB,IAAKD,EAEG,OAAAE,EAAC,KAAEC,SAAuD,4DAG5D,MAAEC,OAAAA,EAAQC,aAAAA,EAAcC,SAAAA,GAAaN,EAErCO,EAAYd,GAAMG,EAExB,OAEQY,EAAAC,EAAA,CAAAN,SAAA,CAAAD,EAAC,QAAA,CACGQ,UAAU,mCACVC,QAASJ,EACTd,GAAI,GAAGc,aAENJ,SAAAT,IAELQ,EAAC,QAAA,IACOP,EACJJ,IAAAA,EACAE,GAAIc,EACJH,OAAAA,EACA,mBACIC,EAAeP,OAAuB,EAE1CY,UAAU,cACVE,KAAK,OACLpB,SAAAA,EACAqB,MAAM,GACNP,SAAWQ,IACHA,EAAEC,OAAOC,OACTV,EACIQ,EACA,IAAIA,EAAEC,OAAOC,OAAOC,KACfC,IAAU,CACPA,KAAAA,EACAC,WAAO,EACPC,WAAYC,EACRH,EACAd,EACAC,GAEJiB,eAAgB,MAG5B,IAIZd,EAAC,IAAE,CAAAE,UAAU,gCAAgCP,SAAA,CAAA,eAC5BJ,EAAW,UACvB,MACT,IAKZX,EAAMmC,YAAc"}
@@ -1,11 +1,11 @@
1
1
  import { default as React } from 'react';
2
2
  import { WithChildren } from '../../../core/types.js';
3
- import { FileInputFile } from '../types.js';
3
+ import { UploadedFile } from '../types.js';
4
4
  type FileInputContext = {
5
5
  accept?: "image/*" | ".pdf" | "image/*,.pdf" | HTMLInputElement["accept"];
6
6
  maxSizeBytes?: number;
7
- files: FileInputFile[];
8
- onChange: (e: React.ChangeEvent<HTMLInputElement> | React.DragEvent<HTMLDivElement>, files: FileInputFile[]) => void;
7
+ files: UploadedFile[];
8
+ onChange: (e: React.ChangeEvent<HTMLInputElement> | React.DragEvent<HTMLDivElement>, files: UploadedFile[]) => void;
9
9
  };
10
10
  export declare const useFileInputContext: () => FileInputContext | null;
11
11
  export interface FileInputContextProviderProps extends WithChildren {
@@ -1 +1 @@
1
- {"version":3,"file":"fileInputContext.js","sources":["../../../../../src/components/file-input/internal/fileInputContext.tsx"],"sourcesContent":["import React, { createContext, useContext } from \"react\";\nimport type { WithChildren } from \"../../../core/types.js\";\nimport type { FileInputFile } from \"../types.js\";\n\ntype FileInputContext = {\n accept?: \"image/*\" | \".pdf\" | \"image/*,.pdf\" | HTMLInputElement[\"accept\"];\n maxSizeBytes?: number;\n files: FileInputFile[];\n onChange: (\n e:\n | React.ChangeEvent<HTMLInputElement>\n | React.DragEvent<HTMLDivElement>,\n files: FileInputFile[],\n ) => void;\n};\n\nconst fileInputContext = createContext<FileInputContext | null>(null);\n\nexport const useFileInputContext = (): FileInputContext | null =>\n useContext(fileInputContext);\n\nexport interface FileInputContextProviderProps extends WithChildren {\n context: FileInputContext;\n}\n\nexport const FileInputContextProvider: React.FC<\n FileInputContextProviderProps\n> = ({ context, children }) => (\n <fileInputContext.Provider value={context}>\n {children}\n </fileInputContext.Provider>\n);\n"],"names":["fileInputContext","createContext","useFileInputContext","useContext","FileInputContextProvider","context","children","jsx","Provider","value"],"mappings":"8FAgBA,MAAMA,EAAmBC,EAAuC,MAEnDC,EAAsB,IAC/BC,EAAWH,GAMFI,EAET,EAAGC,QAAAA,EAASC,SAAAA,KACXC,EAAAP,EAAiBQ,SAAjB,CAA0BC,MAAOJ,EAC7BC,SAAAA"}
1
+ {"version":3,"file":"fileInputContext.js","sources":["../../../../../src/components/file-input/internal/fileInputContext.tsx"],"sourcesContent":["import React, {createContext, useContext} from \"react\";\nimport type {WithChildren} from \"../../../core/types.js\";\nimport type {UploadedFile} from \"../types.js\";\n\ntype FileInputContext = {\n accept?: \"image/*\" | \".pdf\" | \"image/*,.pdf\" | HTMLInputElement[\"accept\"];\n maxSizeBytes?: number;\n files: UploadedFile[];\n onChange: (\n e:\n | React.ChangeEvent<HTMLInputElement>\n | React.DragEvent<HTMLDivElement>,\n files: UploadedFile[],\n ) => void;\n};\n\nconst fileInputContext = createContext<FileInputContext | null>(null);\n\nexport const useFileInputContext = (): FileInputContext | null =>\n useContext(fileInputContext);\n\nexport interface FileInputContextProviderProps extends WithChildren {\n context: FileInputContext;\n}\n\nexport const FileInputContextProvider: React.FC<\n FileInputContextProviderProps\n> = ({ context, children }) => (\n <fileInputContext.Provider value={context}>\n {children}\n </fileInputContext.Provider>\n);\n"],"names":["fileInputContext","createContext","useFileInputContext","useContext","FileInputContextProvider","context","children","jsx","Provider","value"],"mappings":"8FAgBA,MAAMA,EAAmBC,EAAuC,MAEnDC,EAAsB,IAC/BC,EAAWH,GAMFI,EAET,EAAGC,QAAAA,EAASC,SAAAA,KACXC,EAAAP,EAAiBQ,SAAjB,CAA0BC,MAAOJ,EAC7BC,SAAAA"}
@@ -0,0 +1,2 @@
1
+ import { UploadedFile } from '../types.js';
2
+ export declare function validateFileInputFiles(file: File, accept?: string, maxSizeBytes?: number): UploadedFile["validation"] | undefined;
@@ -1,2 +1,2 @@
1
- import{formatBytes as e}from"../../../utilities/formatters/bytes/formatBytes.js";function t(t,s="",a){var i;const o=s.split(",").map((e=>e.toLowerCase())).map((e=>e.replaceAll("*",""))).map((e=>e.trim()));let m=0===o.length;return m=o.some((e=>t.type.toLowerCase().includes(e)||t.name.toLowerCase().endsWith(e))),m?typeof a<"u"&&t.size>a?{type:"TOO_LARGE",message:`Filen er ${e(t.size)}, men kan maksimalt være ${e(a)}`}:void 0:{type:"WRONG_TYPE",message:`Filtypen ${(null==(i=t.name)?void 0:i.split(".")[1])||""} støttes ikke`}}export{t as validateFile};
2
- //# sourceMappingURL=validateFile.js.map
1
+ import{formatBytes as e}from"../../../utilities/formatters/bytes/formatBytes.js";function t(t,s="",a){var i;const o=s.split(",").map((e=>e.toLowerCase())).map((e=>e.replaceAll("*",""))).map((e=>e.trim()));let l=0===o.length;return l=o.some((e=>t.type.toLowerCase().includes(e)||t.name.toLowerCase().endsWith(e))),l?typeof a<"u"&&t.size>a?{type:"TOO_LARGE",message:`Filen er ${e(t.size)}, men kan maksimalt være ${e(a)}`}:void 0:{type:"WRONG_TYPE",message:`Filtypen ${(null==(i=t.name)?void 0:i.split(".")[1])||""} støttes ikke`}}export{t as validateFileInputFiles};
2
+ //# sourceMappingURL=validateFileInputFiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateFileInputFiles.js","sources":["../../../../../src/components/file-input/internal/validateFileInputFiles.ts"],"sourcesContent":["import {formatBytes} from \"../../../utilities/formatters/bytes/formatBytes.js\";\nimport type {UploadedFile} from \"../types.js\";\n\nexport function validateFileInputFiles(\n file: File,\n accept = \"\",\n maxSizeBytes?: number,\n): UploadedFile[\"validation\"] | undefined {\n const acceptStrings = accept\n .split(\",\")\n .map((s) => s.toLowerCase())\n .map((s) => s.replaceAll(\"*\", \"\"))\n .map((s) => s.trim());\n\n let isValidFormat = acceptStrings.length === 0;\n\n isValidFormat = acceptStrings.some(\n (acceptString) =>\n file.type.toLowerCase().includes(acceptString) ||\n file.name.toLowerCase().endsWith(acceptString),\n );\n\n if (!isValidFormat) {\n return {\n type: \"WRONG_TYPE\",\n message: `Filtypen ${file.name?.split(\".\")[1] || \"\"} støttes ikke`,\n };\n }\n\n if (typeof maxSizeBytes !== \"undefined\" && file.size > maxSizeBytes) {\n return {\n type: \"TOO_LARGE\",\n message: `Filen er ${formatBytes(\n file.size,\n )}, men kan maksimalt være ${formatBytes(maxSizeBytes)}`,\n };\n }\n\n return undefined;\n}\n"],"names":["validateFileInputFiles","file","accept","maxSizeBytes","acceptStrings","split","map","s","toLowerCase","replaceAll","trim","isValidFormat","length","some","acceptString","type","includes","name","endsWith","size","message","formatBytes","_a"],"mappings":"iFAGO,SAASA,EACZC,EACAC,EAAS,GACTC,SAEMC,MAAAA,EAAgBF,EACjBG,MAAM,KACNC,KAAKC,GAAMA,EAAEC,gBACbF,KAAKC,GAAMA,EAAEE,WAAW,IAAK,MAC7BH,KAAKC,GAAMA,EAAEG,SAEdC,IAAAA,EAAyC,IAAzBP,EAAcQ,OAQlC,OANAD,EAAgBP,EAAcS,MACzBC,GACGb,EAAKc,KAAKP,cAAcQ,SAASF,IACjCb,EAAKgB,KAAKT,cAAcU,SAASJ,KAGpCH,SAOMR,EAAiB,KAAeF,EAAKkB,KAAOhB,EAC5C,CACHY,KAAM,YACNK,QAAS,YAAYC,EACjBpB,EAAKkB,iCACoBE,EAAYlB,WALjD,EANW,CACHY,KAAM,aACNK,QAAS,aAAY,OAAAE,EAAArB,EAAKgB,aAALK,EAAWjB,MAAM,KAAK,KAAM,kBAc7D"}
@@ -1,2 +1,2 @@
1
- import{jsxs as e,jsx as t}from"react/jsx-runtime";import{useState as i}from"react";/* empty css */import{formatBytes as a}from"../../../utilities/formatters/bytes/formatBytes.js";import"../../../utilities/polymorphism/SlotComponent.js";import{Button as o,PrimaryButton as s}from"../../button/Button.js";import{File as n}from"../File.js";import{FileInput as l}from"../FileInput.js";import{Dropzone as r}from"../internal/Dropzone.js";import{MaxSize as p}from"../internal/MaxSize.js";const m={title:"Komponenter/FileInput",component:l,subcomponents:{File:n,Dropzone:r,MaxSize:p,Button:o},parameters:{layout:"centered"},tags:["autodocs"]},u={name:"FileInput",args:{variant:"flexible",value:[],onChange:console.info,legend:"Legg til fil",labelProps:{variant:"medium"},accept:"image/*,.pdf",maxSizeBytes:8e6},render:o=>{const[r,p]=i([]);return e("div",{children:[t(l,{...o,id:"file-input-example",className:"jkl-spacing-16-24--bottom",value:r,onChange:(e,t)=>{p((e=>[...e,...t]))},children:r.map((({state:e,file:i,validation:s},l)=>{var m;let u,c,f=e;const d="UPLOADING"===e;return"WRONG_TYPE"===(null==s?void 0:s.type)?(c="warning",u=`Filtypen ${(null==(m=i.name)?void 0:m.split(".")[1])||""} støttes ikke`):"UPLOAD_SUCCESS"===e?(c="success",u="Lastet opp",f="UPLOAD_SUCCESS"):"UPLOAD_ERROR"===e?(c="error",u="Filen lot seg ikke laste opp",f="UPLOAD_ERROR"):"TOO_LARGE"===(null==s?void 0:s.type)&&o.maxSizeBytes?(c="error",u=`Filen er større enn ${a(o.maxSizeBytes)} og kan ikke lastes opp`):d&&(u="Laster opp…",f="UPLOADING"),t(n,{fileName:i.name,fileType:i.type,fileSize:i.size,path:`/path/fil-${l}`,file:i,state:f,supportLabel:u,supportLabelType:c,onRemove:["UPLOAD_ERROR","SELECTED"].includes(e)?()=>{p([...r.slice(0,l),...r.slice(l+1)])}:void 0},`${i.name}-${l}`)}))}),t(s,{className:"jkl-spacing-16--top",type:"button",onClick:async()=>{const e=r.filter((e=>"SELECTED"===e.state&&typeof e.validation>"u")),t=e.map((e=>new Promise((t=>{setTimeout((()=>{p((t=>t.map((t=>t.file.name===e.file.name?{...t,state:"UPLOAD_SUCCESS"}:t)))),t()}),5e3)})))),i=r.map((t=>e.includes(t)?{...t,state:"UPLOADING"}:t));p(i),await Promise.all(t)},children:"Last opp"})]})}};export{u as FileInputStory,m as default};
1
+ import{jsxs as e,jsx as t}from"react/jsx-runtime";import{useState as a}from"react";/* empty css */import{Button as i,PrimaryButton as o}from"../../button/Button.js";import{File as n}from"../../file/File.js";import{FileInput as l}from"../FileInput.js";import{Dropzone as s}from"../internal/Dropzone.js";import{MaxSize as r}from"../internal/MaxSize.js";const p={title:"Komponenter/File/FileInput",component:l,subcomponents:{File:n,Dropzone:s,MaxSize:r,Button:i},parameters:{layout:"centered"},tags:["autodocs"]},m={name:"FileInput",args:{variant:"flexible",value:[],onChange:console.info,legend:"Legg til fil",labelProps:{variant:"medium"},accept:"image/*,.pdf",maxSizeBytes:8e6},render:i=>{const[s,r]=a([]);return e("div",{children:[t(l,{...i,id:"file-input-example",className:"jkl-spacing-16-24--bottom",value:s,onChange:(e,t)=>{r((e=>[...e,...t]))},children:s.map((({state:e,file:a,validation:i},o)=>t(n,{fileName:a.name,fileType:a.type,fileSize:a.size,path:`/path/fil-${o}`,file:a,state:e,onRemove:"loading"!==e?e=>"":void 0},`${a.name}-${o}`)))}),t(o,{className:"jkl-spacing-16--top",type:"button",onClick:async()=>{const e=s.filter((e=>typeof e.validation>"u")),t=s.map((t=>e.includes(t)?{...t}:t));r(t.map((e=>({...e,state:"loading"})))),await Promise.all(t)},children:"Last opp"})]})}};export{m as FileInputStory,p as default};
2
2
  //# sourceMappingURL=FileInput.stories.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FileInput.stories.js","sources":["../../../../../src/components/file-input/stories/FileInput.stories.tsx"],"sourcesContent":["import type {Meta, StoryObj} from \"@storybook/react\";\nimport React, {useState} from \"react\";\nimport \"../styles/_index.scss\";\nimport {formatBytes} from \"../../../utilities/index.js\";\nimport {Button, PrimaryButton} from \"../../button/index.js\";\nimport type {SupportLabelType} from \"../../input-group/index.js\";\nimport {File} from \"../File.js\";\nimport {FileInput} from \"../FileInput.js\";\nimport {Dropzone} from \"../internal/Dropzone.js\";\nimport {MaxSize} from \"../internal/MaxSize.js\";\nimport type {FileInputFile, FileInputFileState} from \"../types.js\";\n\nconst meta = {\n title: \"Komponenter/FileInput\",\n component: FileInput,\n subcomponents: {File, Dropzone, MaxSize, Button},\n parameters: {\n layout: \"centered\",\n },\n tags: [\"autodocs\"],\n} satisfies Meta<typeof FileInput>;\n\nexport default meta;\n\ntype Story = StoryObj<typeof meta>;\n\nexport const FileInputStory: Story = {\n name: \"FileInput\",\n args: {\n variant: \"flexible\",\n value: [],\n onChange: console.info,\n legend: \"Legg til fil\",\n labelProps: {\n variant: \"medium\",\n },\n accept: \"image/*,.pdf\",\n maxSizeBytes: 8_000_000,\n },\n render: (args) => {\n const [files, setFiles] = useState<FileInputFile[]>([]);\n\n return (\n <div>\n <FileInput\n {...args}\n id=\"file-input-example\"\n className=\"jkl-spacing-16-24--bottom\"\n value={files}\n onChange={(_e, newFiles) => {\n setFiles((currentFiles) => [\n ...currentFiles,\n ...newFiles,\n ]);\n }}\n >\n {files.map(({state, file, validation}, index) => {\n let label: string | undefined = undefined;\n let labelType: SupportLabelType | undefined = undefined;\n let demoState: FileInputFileState = state;\n\n const isUploading = state === \"UPLOADING\";\n\n if (validation?.type === \"WRONG_TYPE\") {\n labelType = \"warning\";\n label = `Filtypen ${\n file.name?.split(\".\")[1] || \"\"\n } støttes ikke`;\n } else if (state === \"UPLOAD_SUCCESS\") {\n labelType = \"success\";\n label = \"Lastet opp\";\n demoState = \"UPLOAD_SUCCESS\";\n } else if (state === \"UPLOAD_ERROR\") {\n labelType = \"error\";\n label = \"Filen lot seg ikke laste opp\";\n demoState = \"UPLOAD_ERROR\";\n } else if (\n validation?.type === \"TOO_LARGE\" &&\n args.maxSizeBytes\n ) {\n labelType = \"error\";\n label = `Filen er større enn ${formatBytes(\n args.maxSizeBytes,\n )} og kan ikke lastes opp`;\n } else if (isUploading) {\n label = \"Laster opp…\";\n demoState = \"UPLOADING\";\n }\n\n return (\n <File\n key={`${file.name}-${index}`}\n fileName={file.name}\n fileType={file.type}\n fileSize={file.size}\n path={`/path/fil-${index}`}\n file={file}\n state={demoState}\n supportLabel={label}\n supportLabelType={labelType}\n onRemove={\n [\"UPLOAD_ERROR\", \"SELECTED\"].includes(state)\n ? () => {\n setFiles([\n ...files.slice(0, index),\n ...files.slice(index + 1),\n ]);\n }\n : undefined\n }\n />\n );\n })}\n </FileInput>\n <PrimaryButton\n className=\"jkl-spacing-16--top\"\n type=\"button\"\n onClick={async () => {\n const toUpload = files.filter(\n (fileState) =>\n fileState.state === \"SELECTED\" &&\n typeof fileState.validation === \"undefined\",\n );\n\n const promises = toUpload.map(\n (fileToUpload) =>\n new Promise<void>((resolve) => {\n const timeout = 5000;\n setTimeout(() => {\n setFiles((currentFiles) =>\n currentFiles.map((file) =>\n file.file.name ===\n fileToUpload.file.name\n ? {\n ...file,\n state: \"UPLOAD_SUCCESS\",\n }\n : file,\n ),\n );\n resolve();\n }, timeout);\n }),\n );\n\n const newFiles = files.map((file) =>\n toUpload.includes(file)\n ? {\n ...file,\n state: \"UPLOADING\" as FileInputFileState,\n }\n : file,\n );\n\n setFiles(newFiles);\n\n await Promise.all(promises);\n }}\n >\n Last opp\n </PrimaryButton>\n </div>\n );\n },\n};\n"],"names":["meta","title","component","FileInput","subcomponents","File","Dropzone","MaxSize","Button","parameters","layout","tags","FileInputStory","name","args","variant","value","onChange","console","info","legend","labelProps","accept","maxSizeBytes","render","files","setFiles","useState","children","jsx","id","className","_e","newFiles","currentFiles","map","state","file","validation","index","label","labelType","demoState","isUploading","type","_a","split","formatBytes","fileName","fileType","fileSize","size","path","supportLabel","supportLabelType","onRemove","includes","slice","PrimaryButton","onClick","async","toUpload","filter","fileState","promises","fileToUpload","Promise","resolve","setTimeout","all"],"mappings":"yfAYA,MAAMA,EAAO,CACTC,MAAO,wBACPC,UAAWC,EACXC,cAAe,CAACC,KAAAA,EAAMC,SAAAA,EAAUC,QAAAA,EAASC,OAAAA,GACzCC,WAAY,CACRC,OAAQ,YAEZC,KAAM,CAAC,aAOEC,EAAwB,CACjCC,KAAM,YACNC,KAAM,CACFC,QAAS,WACTC,MAAO,GACPC,SAAUC,QAAQC,KAClBC,OAAQ,eACRC,WAAY,CACRN,QAAS,UAEbO,OAAQ,eACRC,aAAc,KAElBC,OAASV,IACL,MAAOW,EAAOC,GAAYC,EAA0B,IAEpD,SACK,MACG,CAAAC,SAAA,CAAAC,EAAC1B,EAAA,IACOW,EACJgB,GAAG,qBACHC,UAAU,4BACVf,MAAOS,EACPR,SAAU,CAACe,EAAIC,KACXP,GAAUQ,GAAiB,IACpBA,KACAD,IACN,EAGJL,SAAAH,EAAMU,KAAI,EAAEC,MAAAA,EAAOC,KAAAA,EAAMC,WAAAA,GAAaC,WAC/BC,IAAAA,EACAC,EACAC,EAAgCN,EAEpC,MAAMO,EAAwB,cAAVP,EAEhBE,MAAqB,gBAArB,MAAAA,SAAAA,EAAYM,OACAH,EAAA,UACJD,EAAA,aACJ,OAAAK,EAAAR,EAAKxB,WAAL,EAAAgC,EAAWC,MAAM,KAAK,KAAM,mBAEf,mBAAVV,GACKK,EAAA,UACJD,EAAA,aACIE,EAAA,kBACK,iBAAVN,GACKK,EAAA,QACJD,EAAA,+BACIE,EAAA,gBAES,eAArB,MAAAJ,OAAA,EAAAA,EAAYM,OACZ9B,EAAKS,cAEOkB,EAAA,QACZD,EAAQ,uBAAuBO,EAC3BjC,EAAKS,wCAEFoB,IACCH,EAAA,cACIE,EAAA,aAIZb,EAACxB,EAAA,CAEG2C,SAAUX,EAAKxB,KACfoC,SAAUZ,EAAKO,KACfM,SAAUb,EAAKc,KACfC,KAAM,aAAab,IACnBF,KAAAA,EACAD,MAAOM,EACPW,aAAcb,EACdc,iBAAkBb,EAClBc,SACI,CAAC,eAAgB,YAAYC,SAASpB,GAChC,KACWV,EAAA,IACFD,EAAMgC,MAAM,EAAGlB,MACfd,EAAMgC,MAAMlB,EAAQ,IAC1B,OAEH,GAjBL,GAAGF,EAAKxB,QAAQ0B,IAmBzB,MAIZV,EAAC6B,EAAA,CACG3B,UAAU,sBACVa,KAAK,SACLe,QAASC,UACL,MAAMC,EAAWpC,EAAMqC,QAClBC,GACuB,aAApBA,EAAU3B,cACH2B,EAAUzB,WAAe,MAGlC0B,EAAWH,EAAS1B,KACrB8B,GACG,IAAIC,SAAeC,IAEfC,YAAW,KACP1C,GAAUQ,GACNA,EAAaC,KAAKE,GACdA,EAAKA,KAAKxB,OACVoD,EAAa5B,KAAKxB,KACZ,IACKwB,EACHD,MAAO,kBAETC,MAGN8B,GAAA,GACT,IAAO,MAIhBlC,EAAWR,EAAMU,KAAKE,GACxBwB,EAASL,SAASnB,GACZ,IACKA,EACHD,MAAO,aAETC,IAGVX,EAASO,SAEHiC,QAAQG,IAAIL,EAAQ,EAEjCpC,SAAA,eAGL"}
1
+ {"version":3,"file":"FileInput.stories.js","sources":["../../../../../src/components/file-input/stories/FileInput.stories.tsx"],"sourcesContent":["import type {Meta, StoryObj} from \"@storybook/react\";\nimport React, {useState} from \"react\";\nimport \"../styles/_index.scss\";\nimport {Button, PrimaryButton} from \"../../button/index.js\";\nimport {File} from \"../../file/File.js\";\nimport {FileInput} from \"../FileInput.js\";\nimport {Dropzone} from \"../internal/Dropzone.js\";\nimport {MaxSize} from \"../internal/MaxSize.js\";\nimport type {UploadedFile} from \"../types.js\";\n\nconst meta = {\n title: \"Komponenter/File/FileInput\",\n component: FileInput,\n subcomponents: {File, Dropzone, MaxSize, Button},\n parameters: {\n layout: \"centered\",\n },\n tags: [\"autodocs\"],\n} satisfies Meta<typeof FileInput>;\n\nexport default meta;\n\ntype Story = StoryObj<typeof meta>;\n\nexport const FileInputStory: Story = {\n name: \"FileInput\",\n args: {\n variant: \"flexible\",\n value: [],\n onChange: console.info,\n legend: \"Legg til fil\",\n labelProps: {\n variant: \"medium\",\n },\n accept: \"image/*,.pdf\",\n maxSizeBytes: 8_000_000,\n },\n render: (args) => {\n const [files, setFiles] = useState<UploadedFile[]>([]);\n\n return (\n <div>\n <FileInput\n {...args}\n id=\"file-input-example\"\n className=\"jkl-spacing-16-24--bottom\"\n value={files}\n onChange={(_e, newFiles) => {\n setFiles((currentFiles) => [\n ...currentFiles,\n ...newFiles,\n ]);\n }}\n >\n {files.map(({state, file, validation}, index) => {\n return (\n <File\n key={`${file.name}-${index}`}\n fileName={file.name}\n fileType={file.type}\n fileSize={file.size}\n path={`/path/fil-${index}`}\n file={file}\n state={state}\n onRemove={\n state !== \"loading\" ? (e) => \"\" : undefined\n }\n />\n );\n })}\n </FileInput>\n <PrimaryButton\n className=\"jkl-spacing-16--top\"\n type=\"button\"\n onClick={async () => {\n const toUpload = files.filter(\n (fileState) =>\n typeof fileState.validation === \"undefined\",\n );\n\n const newFiles = files.map((file) =>\n toUpload.includes(file)\n ? {\n ...file,\n }\n : file,\n );\n\n setFiles(\n newFiles.map((file) => {\n return {...file, state: \"loading\"};\n }),\n );\n\n await Promise.all(newFiles);\n }}\n >\n Last opp\n </PrimaryButton>\n </div>\n );\n },\n};\n"],"names":["meta","title","component","FileInput","subcomponents","File","Dropzone","MaxSize","Button","parameters","layout","tags","FileInputStory","name","args","variant","value","onChange","console","info","legend","labelProps","accept","maxSizeBytes","render","files","setFiles","useState","children","jsx","id","className","_e","newFiles","currentFiles","map","state","file","validation","index","fileName","fileType","type","fileSize","size","path","onRemove","e","PrimaryButton","onClick","async","toUpload","filter","fileState","includes","Promise","all"],"mappings":"uXAUA,MAAMA,EAAO,CACTC,MAAO,6BACPC,UAAWC,EACXC,cAAe,CAACC,KAAAA,EAAMC,SAAAA,EAAUC,QAAAA,EAASC,OAAAA,GACzCC,WAAY,CACRC,OAAQ,YAEZC,KAAM,CAAC,aAOEC,EAAwB,CACjCC,KAAM,YACNC,KAAM,CACFC,QAAS,WACTC,MAAO,GACPC,SAAUC,QAAQC,KAClBC,OAAQ,eACRC,WAAY,CACRN,QAAS,UAEbO,OAAQ,eACRC,aAAc,KAElBC,OAASV,IACL,MAAOW,EAAOC,GAAYC,EAAyB,IAEnD,SACK,MACG,CAAAC,SAAA,CAAAC,EAAC1B,EAAA,IACOW,EACJgB,GAAG,qBACHC,UAAU,4BACVf,MAAOS,EACPR,SAAU,CAACe,EAAIC,KACXP,GAAUQ,GAAiB,IACpBA,KACAD,IACN,EAGJL,SAAAH,EAAMU,KAAI,EAAEC,MAAAA,EAAOC,KAAAA,EAAMC,WAAAA,GAAaC,IAE/BV,EAACxB,EAAA,CAEGmC,SAAUH,EAAKxB,KACf4B,SAAUJ,EAAKK,KACfC,SAAUN,EAAKO,KACfC,KAAM,aAAaN,IACnBF,KAAAA,EACAD,MAAAA,EACAU,SACc,YAAVV,EAAuBW,GAAM,QAAK,GARjC,GAAGV,EAAKxB,QAAQ0B,SAcrCV,EAACmB,EAAA,CACGjB,UAAU,sBACVW,KAAK,SACLO,QAASC,UACL,MAAMC,EAAW1B,EAAM2B,QAClBC,UACUA,EAAUf,WAAe,MAGlCL,EAAWR,EAAMU,KAAKE,GACxBc,EAASG,SAASjB,GACZ,IACKA,GAELA,IAGVX,EACIO,EAASE,KAAKE,IAAAA,IACCA,EAAMD,MAAO,qBAI1BmB,QAAQC,IAAIvB,EAAQ,EAEjCL,SAAA,eAGL"}
@@ -1,11 +1,35 @@
1
- export interface FileInputFileValidation {
1
+ import { default as React } from 'react';
2
+ import { Density } from '../../core/index.js';
3
+ import { FileProps } from '../file/types.js';
4
+ import { FieldGroupProps } from '../input-group/index.js';
5
+ export interface UploadedFileValidation {
2
6
  type: "TOO_LARGE" | "WRONG_TYPE";
3
7
  message: string;
4
8
  }
5
- export type FileInputFileState = "SELECTED" | "UPLOADING" | "UPLOAD_ERROR" | "UPLOAD_SUCCESS";
6
- export interface FileInputFile {
9
+ export interface UploadedFile {
7
10
  file: File;
8
- validation?: FileInputFileValidation;
9
- state: FileInputFileState;
11
+ validation?: UploadedFileValidation;
12
+ state: FileProps["state"];
10
13
  uploadProgress: number;
11
14
  }
15
+ export interface FileInputProps extends Omit<FieldGroupProps, "onChange"> {
16
+ className?: string;
17
+ id?: string;
18
+ density?: Density;
19
+ /**
20
+ * En string som begrenser hvilke filtyper som kan velges.
21
+ *
22
+ * Flere filtyper kan defineres som en kommaseparert liste.
23
+ *
24
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept
25
+ */
26
+ accept?: "image/*" | ".pdf" | "image/*,.pdf" | HTMLInputElement["accept"];
27
+ maxSizeBytes?: number;
28
+ /**
29
+ * @default true
30
+ */
31
+ multiple?: boolean;
32
+ value: UploadedFile[];
33
+ variant?: "flexible" | "small";
34
+ onChange: (e: React.ChangeEvent<HTMLInputElement> | React.DragEvent<HTMLDivElement>, files: UploadedFile[]) => void;
35
+ }
@@ -1,2 +1,2 @@
1
-
1
+ import"react";
2
2
  //# sourceMappingURL=types.js.map
@@ -1,2 +1,2 @@
1
- import{Accordion as o}from"./accordion/Accordion.js";import{AccordionItem as a}from"./accordion/AccordionItem.js";import{Autosuggest as s}from"./autosuggest/Autosuggest.js";import{Breadcrumb as e}from"./breadcrumb/Breadcrumb.js";import{BreadcrumbItem as r}from"./breadcrumb/BreadcrumbItem.js";import{Button as t,PrimaryButton as n,SecondaryButton as i,TertiaryButton as m}from"./button/Button.js";import{Card as l}from"./card/Card.js";import{CardImage as p}from"./card/CardImage.js";import{InfoBlock as c,NavCard as d}from"./card/NavCard.js";import{TaskCard as u}from"./card/TaskCard.js";import{InfoCard as b}from"./card/InfoCard.js";import{CheckboxPanel as f}from"./checkbox-panel/CheckboxPanel.js";import{Checkbox as I}from"./checkbox/Checkbox.js";import{Chip as T}from"./chip/Chip.js";import{Combobox as j,getComboboxValuePair as g}from"./combobox/Combobox.js";import{CookieConsent as C}from"./cookie-consent/CookieConsent.js";import{CookieConsentProvider as k,useCookieConsent as S}from"./cookie-consent/CookieConsentContext.js";import{Countdown as x}from"./countdown/Countdown.js";import{DatePicker as h}from"./datepicker/DatePicker.js";import{isCorrectFormat as B,isWithinLowerBound as L,isWithinUpperBound as v}from"./datepicker/validation.js";import{formatInput as w,isBlurTargetOutside as A,parseDateString as M}from"./datepicker/utils.js";import{DescriptionDetail as P,DescriptionList as F,DescriptionTerm as R}from"./description-list/DescriptionList.js";import{ExpandablePanel as E}from"./expander/ExpandablePanel.js";import{Expander as D}from"./expander/Expander.js";import{ExpandSection as y}from"./expander/deprecated/ExpandSection.js";import{Feedback as G}from"./feedback/Feedback.js";import{PRESETS as N}from"./feedback/presets.js";import{File as H}from"./file-input/File.js";import{FileInput as U}from"./file-input/FileInput.js";import{upload as W}from"./file-input/utils.js";import{Flex as O}from"./flex/Flex.js";import{IconButton as V}from"./icon-button/IconButton.js";import{Icon as z}from"./icon/Icon.js";import{ArrowVerticalAnimated as Q}from"./icon/icons/animated/ArrowVerticalAnimated.js";import{ArrowHorizontalAnimated as q}from"./icon/icons/animated/ArrowHorizontalAnimated.js";import{PlusRemoveAnimated as J}from"./icon/icons/animated/PlusRemoveAnimated.js";import{ArrowDownIcon as K}from"./icon/icons/ArrowDownIcon.js";import{ArrowLeftIcon as X}from"./icon/icons/ArrowLeftIcon.js";import{ArrowNorthEastIcon as Y}from"./icon/icons/ArrowNorthEastIcon.js";import{ArrowRightIcon as Z}from"./icon/icons/ArrowRightIcon.js";import{ArrowUpIcon as $}from"./icon/icons/ArrowUpIcon.js";import{CalendarIcon as _}from"./icon/icons/CalendarIcon.js";import{CheckIcon as oo}from"./icon/icons/CheckIcon.js";import{ChevronDownIcon as ao}from"./icon/icons/ChevronDownIcon.js";import{ChevronLeftIcon as so}from"./icon/icons/ChevronLeftIcon.js";import{ChevronRightIcon as eo}from"./icon/icons/ChevronRightIcon.js";import{ChevronUpIcon as ro}from"./icon/icons/ChevronUpIcon.js";import{CloseIcon as to}from"./icon/icons/CloseIcon.js";import{CopyIcon as no}from"./icon/icons/CopyIcon.js";import{DotsIcon as io}from"./icon/icons/DotsIcon.js";import{DragIcon as mo}from"./icon/icons/DragIcon.js";import{ErrorIcon as lo}from"./icon/icons/ErrorIcon.js";import{GreenCheckIcon as po}from"./icon/icons/GreenCheckIcon.js";import{HamburgerIcon as co}from"./icon/icons/HamburgerIcon.js";import{InfoIcon as uo}from"./icon/icons/InfoIcon.js";import{LinkIcon as bo}from"./icon/icons/LinkIcon.js";import{MinusIcon as fo}from"./icon/icons/MinusIcon.js";import{OpenInNewIcon as Io}from"./icon/icons/OpenInNewIcon.js";import{PenIcon as To}from"./icon/icons/PenIcon.js";import{PlusIcon as jo}from"./icon/icons/PlusIcon.js";import{QuestionIcon as go}from"./icon/icons/QuestionIcon.js";import{RedCrossIcon as Co}from"./icon/icons/RedCrossIcon.js";import{SearchIcon as ko}from"./icon/icons/SearchIcon.js";import{SuccessIcon as So}from"./icon/icons/SuccessIcon.js";import{ThumbDownIcon as xo}from"./icon/icons/ThumbDownIcon.js";import{ThumbUpIcon as ho}from"./icon/icons/ThumbUpIcon.js";import{TrashCanIcon as Bo}from"./icon/icons/TrashCanIcon.js";import{WarningIcon as Lo}from"./icon/icons/WarningIcon.js";import{Image as vo}from"./image/Image.js";import{FieldGroup as wo}from"./input-group/FieldGroup.js";import{InputGroup as Ao}from"./input-group/InputGroup.js";import{Label as Mo}from"./input-group/Label.js";import{SupportLabel as Po}from"./input-group/SupportLabel.js";import{LinkList as Fo}from"./link-list/LinkList.js";import{Link as Ro}from"./link/Link.js";import{List as Eo,OrderedList as Do,UnorderedList as yo}from"./list/List.js";import{CheckListItem as Go,CrossListItem as No,ListItem as Ho}from"./list/ListItem.js";import{Loader as Uo}from"./loader/Loader.js";import{SkeletonAnimation as Wo}from"./loader/skeletons/SkeletonAnimation.js";import{SkeletonButton as Oo}from"./loader/skeletons/SkeletonButton.js";import{SkeletonCheckboxGroup as Vo}from"./loader/skeletons/SkeletonCheckboxGroup.js";import{SkeletonElement as zo}from"./loader/skeletons/SkeletonElement.js";import{SkeletonInput as Qo}from"./loader/skeletons/SkeletonInput.js";import{SkeletonRadioButtonGroup as qo}from"./loader/skeletons/SkeletonRadioButtonGroup.js";import{SkeletonTable as Jo,SkeletonTableHeader as Ko,SkeletonTableRow as Xo}from"./loader/skeletons/SkeletonTable.js";import{SkeletonTextArea as Yo}from"./loader/skeletons/SkeletonTextArea.js";import{Logo as Zo}from"./logo/Logo.js";import{LogoStamp as $o}from"./logo/LogoStamp.js";import{ForsikringLevertAvFremtind as _o}from"./logo/text-paths/ForsikringLevertAvFremtind.js";import{FraSB1ogDNB as oa}from"./logo/text-paths/FraSB1ogDNB.js";import{InnovasjonFraFremtind as aa}from"./logo/text-paths/InnovasjonFraFremtind.js";import{TeknologiFraFremtind as sa}from"./logo/text-paths/TeknologiFraFremtind.js";import{VartEgetForsikringsselskap as ea}from"./logo/text-paths/VartEgetForsikringsselskap.js";import{VartForsikringsselskap as ra}from"./logo/text-paths/VartForsikringsselskap.js";import{Menu as ta}from"./menu/Menu.js";import{MenuItem as na}from"./menu/MenuItem.js";import{MenuItemCheckbox as ia}from"./menu/MenuItemCheckbox.js";import{MenuDivider as ma}from"./menu/MenuDivider.js";import{ErrorMessage as la,InfoMessage as pa,SuccessMessage as ca,WarningMessage as da}from"./message/Message.js";import{FormErrorMessage as ua}from"./message/FormErrorMessage.js";import{Modal as ba,ModalActions as fa,ModalBody as Ia,ModalCloseButton as Ta,ModalContainer as ja,ModalHeader as ga,ModalOverlay as Ca,ModalTitle as ka}from"./modal/Modal.js";import{useModal as Sa}from"./modal/useModal.js";import{NavLink as xa}from"./nav-link/NavLink.js";import{Pagination as ha}from"./pagination/Pagination.js";import{Popover as Ba}from"./popover/Popover.js";import{ProgressBar as La}from"./progress-bar/ProgressBar.js";import{RadioButton as va}from"./radio-button/RadioButton.js";import{RadioButtonGroup as wa}from"./radio-button/RadioButtonGroup.js";import{BaseRadioButton as Aa}from"./radio-button/BaseRadioButton.js";import{RadioPanel as Ma}from"./radio-panel/RadioPanel.js";import{RadioPanelGroup as Pa}from"./radio-panel/RadioPanelGroup.js";import{Select as Fa}from"./select/Select.js";import{NativeSelect as Ra}from"./select/NativeSelect.js";import{SummaryTable as Ea}from"./summary-table/SummaryTable.js";import{SummaryTableRow as Da}from"./summary-table/SummaryTableRow.js";import{ErrorSystemMessage as ya,InfoSystemMessage as Ga,SuccessSystemMessage as Na,WarningSystemMessage as Ha}from"./system-message/SystemMessage.js";import{DataTable as Ua}from"./table/DataTable.js";import{Table as Wa}from"./table/Table.js";import{TableBody as Oa}from"./table/TableBody.js";import{TableCaption as Va}from"./table/TableCaption.js";import{TableCell as za}from"./table/TableCell.js";import{TableColumn as Qa}from"./table/TableColumn.js";import{TableColumnGroup as qa}from"./table/TableColumnGroup.js";import{TableContextProvider as Ja,useTableContext as Ka}from"./table/tableContext.js";import{TableSectionContextProvider as Xa,useTableSectionContext as Ya}from"./table/tableSectionContext.js";import{TableFooter as Za}from"./table/TableFooter.js";import{TableHead as $a}from"./table/TableHead.js";import{TableHeader as _a}from"./table/TableHeader.js";import{TablePagination as os}from"./table/TablePagination.js";import{TableRow as as}from"./table/TableRow.js";import{ExpandableTableRow as ss}from"./table/ExpandableTableRow.js";import{ExpandableTableRowController as es}from"./table/ExpandableTableRowController.js";import{useSortableTableHeader as rs}from"./table/utils.js";import{NavTab as ts}from"./tabs/NavTab.js";import{NavTabs as ns}from"./tabs/NavTabs.js";import{Tabs as is}from"./tabs/Tabs.js";import{TabList as ms}from"./tabs/TabList.js";import{Tab as ls}from"./tabs/Tab.js";import{TabPanel as ps}from"./tabs/TabPanel.js";import{ErrorTag as cs,InfoTag as ds,SuccessTag as us,Tag as bs,WarningTag as fs}from"./tag/Tag.js";import{BaseTextArea as Is}from"./text-area/BaseTextArea.js";import{TextArea as Ts}from"./text-area/TextArea.js";import{BaseTextInput as js}from"./text-input/BaseTextInput.js";import{TextInput as gs}from"./text-input/TextInput.js";import{ToastProvider as Cs,useToast as ks}from"./toast/toastContext.js";import{ToggleSwitch as Ss}from"./toggle-switch/ToggleSwitch.js";import{ToggleSlider as xs}from"./toggle-switch/ToggleSlider.js";import{Tooltip as hs}from"./tooltip/Tooltip.js";import{TooltipContent as Bs}from"./tooltip/TooltipContent.js";import{TooltipTrigger as Ls}from"./tooltip/TooltipTrigger.js";import{PopupTip as vs}from"./tooltip/PopupTip.js";import{ScreenReaderOnly as ws}from"./ScreenReaderOnly.js";export{o as Accordion,a as AccordionItem,K as ArrowDownIcon,q as ArrowHorizontalAnimated,X as ArrowLeftIcon,Y as ArrowNorthEastIcon,Z as ArrowRightIcon,$ as ArrowUpIcon,Q as ArrowVerticalAnimated,s as Autosuggest,Aa as BaseRadioButton,Is as BaseTextArea,js as BaseTextInput,e as Breadcrumb,r as BreadcrumbItem,t as Button,_ as CalendarIcon,l as Card,p as CardImage,oo as CheckIcon,Go as CheckListItem,I as Checkbox,f as CheckboxPanel,ao as ChevronDownIcon,so as ChevronLeftIcon,eo as ChevronRightIcon,ro as ChevronUpIcon,T as Chip,to as CloseIcon,j as Combobox,C as CookieConsent,k as CookieConsentProvider,no as CopyIcon,x as Countdown,No as CrossListItem,Ua as DataTable,h as DatePicker,P as DescriptionDetail,F as DescriptionList,R as DescriptionTerm,io as DotsIcon,mo as DragIcon,lo as ErrorIcon,la as ErrorMessage,ya as ErrorSystemMessage,cs as ErrorTag,y as ExpandSection,E as ExpandablePanel,ss as ExpandableTableRow,es as ExpandableTableRowController,D as Expander,G as Feedback,wo as FieldGroup,H as File,U as FileInput,O as Flex,ua as FormErrorMessage,_o as ForsikringLevertAvFremtind,oa as FraSB1ogDNB,po as GreenCheckIcon,co as HamburgerIcon,z as Icon,V as IconButton,vo as Image,c as InfoBlock,b as InfoCard,uo as InfoIcon,pa as InfoMessage,Ga as InfoSystemMessage,ds as InfoTag,aa as InnovasjonFraFremtind,Ao as InputGroup,Mo as Label,Ro as Link,bo as LinkIcon,Fo as LinkList,Eo as List,Ho as ListItem,Uo as Loader,Zo as Logo,$o as LogoStamp,ta as Menu,ma as MenuDivider,na as MenuItem,ia as MenuItemCheckbox,fo as MinusIcon,ba as Modal,fa as ModalActions,Ia as ModalBody,Ta as ModalCloseButton,ja as ModalContainer,ga as ModalHeader,Ca as ModalOverlay,ka as ModalTitle,Ra as NativeSelect,d as NavCard,xa as NavLink,ts as NavTab,ns as NavTabs,Io as OpenInNewIcon,Do as OrderedList,N as PRESETS,ha as Pagination,To as PenIcon,jo as PlusIcon,J as PlusRemoveAnimated,Ba as Popover,vs as PopupTip,n as PrimaryButton,La as ProgressBar,go as QuestionIcon,va as RadioButton,wa as RadioButtonGroup,Ma as RadioPanel,Pa as RadioPanelGroup,Co as RedCrossIcon,ws as ScreenReaderOnly,ko as SearchIcon,i as SecondaryButton,Fa as Select,Wo as SkeletonAnimation,Oo as SkeletonButton,Vo as SkeletonCheckboxGroup,zo as SkeletonElement,Qo as SkeletonInput,qo as SkeletonRadioButtonGroup,Jo as SkeletonTable,Ko as SkeletonTableHeader,Xo as SkeletonTableRow,Yo as SkeletonTextArea,So as SuccessIcon,ca as SuccessMessage,Na as SuccessSystemMessage,us as SuccessTag,Ea as SummaryTable,Da as SummaryTableRow,Po as SupportLabel,ls as Tab,ms as TabList,ps as TabPanel,Wa as Table,Oa as TableBody,Va as TableCaption,za as TableCell,Qa as TableColumn,qa as TableColumnGroup,Ja as TableContextProvider,Za as TableFooter,$a as TableHead,_a as TableHeader,os as TablePagination,as as TableRow,Xa as TableSectionContextProvider,is as Tabs,bs as Tag,u as TaskCard,sa as TeknologiFraFremtind,m as TertiaryButton,Ts as TextArea,gs as TextInput,xo as ThumbDownIcon,ho as ThumbUpIcon,Cs as ToastProvider,xs as ToggleSlider,Ss as ToggleSwitch,hs as Tooltip,Bs as TooltipContent,Ls as TooltipTrigger,Bo as TrashCanIcon,yo as UnorderedList,ea as VartEgetForsikringsselskap,ra as VartForsikringsselskap,Lo as WarningIcon,da as WarningMessage,Ha as WarningSystemMessage,fs as WarningTag,w as formatInput,g as getComboboxValuePair,A as isBlurTargetOutside,B as isCorrectFormat,L as isWithinLowerBound,v as isWithinUpperBound,M as parseDateString,W as upload,S as useCookieConsent,Sa as useModal,rs as useSortableTableHeader,Ka as useTableContext,Ya as useTableSectionContext,ks as useToast};
1
+ import{Accordion as o}from"./accordion/Accordion.js";import{AccordionItem as a}from"./accordion/AccordionItem.js";import{Autosuggest as s}from"./autosuggest/Autosuggest.js";import{Breadcrumb as e}from"./breadcrumb/Breadcrumb.js";import{BreadcrumbItem as r}from"./breadcrumb/BreadcrumbItem.js";import{Button as t,PrimaryButton as n,SecondaryButton as i,TertiaryButton as m}from"./button/Button.js";import{Card as l}from"./card/Card.js";import{CardImage as p}from"./card/CardImage.js";import{InfoBlock as c,NavCard as d}from"./card/NavCard.js";import{TaskCard as u}from"./card/TaskCard.js";import{InfoCard as b}from"./card/InfoCard.js";import{CheckboxPanel as f}from"./checkbox-panel/CheckboxPanel.js";import{Checkbox as I}from"./checkbox/Checkbox.js";import{Chip as T}from"./chip/Chip.js";import{Combobox as j,getComboboxValuePair as g}from"./combobox/Combobox.js";import{CookieConsent as C}from"./cookie-consent/CookieConsent.js";import{CookieConsentProvider as k,useCookieConsent as S}from"./cookie-consent/CookieConsentContext.js";import{Countdown as x}from"./countdown/Countdown.js";import{DatePicker as h}from"./datepicker/DatePicker.js";import{isCorrectFormat as B,isWithinLowerBound as L,isWithinUpperBound as v}from"./datepicker/validation.js";import{formatInput as w,isBlurTargetOutside as A,parseDateString as M}from"./datepicker/utils.js";import{DescriptionDetail as P,DescriptionList as R,DescriptionTerm as F}from"./description-list/DescriptionList.js";import{ExpandablePanel as E}from"./expander/ExpandablePanel.js";import{Expander as D}from"./expander/Expander.js";import{ExpandSection as y}from"./expander/deprecated/ExpandSection.js";import{Feedback as G}from"./feedback/Feedback.js";import{PRESETS as N}from"./feedback/presets.js";import{FileInput as H}from"./file-input/FileInput.js";import{upload as U}from"./file-input/utils.js";import{Flex as W}from"./flex/Flex.js";import{IconButton as O}from"./icon-button/IconButton.js";import{Icon as V}from"./icon/Icon.js";import{ArrowVerticalAnimated as z}from"./icon/icons/animated/ArrowVerticalAnimated.js";import{ArrowHorizontalAnimated as Q}from"./icon/icons/animated/ArrowHorizontalAnimated.js";import{PlusRemoveAnimated as q}from"./icon/icons/animated/PlusRemoveAnimated.js";import{ArrowDownIcon as J}from"./icon/icons/ArrowDownIcon.js";import{ArrowLeftIcon as K}from"./icon/icons/ArrowLeftIcon.js";import{ArrowNorthEastIcon as X}from"./icon/icons/ArrowNorthEastIcon.js";import{ArrowRightIcon as Y}from"./icon/icons/ArrowRightIcon.js";import{ArrowUpIcon as Z}from"./icon/icons/ArrowUpIcon.js";import{CalendarIcon as $}from"./icon/icons/CalendarIcon.js";import{CheckIcon as _}from"./icon/icons/CheckIcon.js";import{ChevronDownIcon as oo}from"./icon/icons/ChevronDownIcon.js";import{ChevronLeftIcon as ao}from"./icon/icons/ChevronLeftIcon.js";import{ChevronRightIcon as so}from"./icon/icons/ChevronRightIcon.js";import{ChevronUpIcon as eo}from"./icon/icons/ChevronUpIcon.js";import{CloseIcon as ro}from"./icon/icons/CloseIcon.js";import{CopyIcon as to}from"./icon/icons/CopyIcon.js";import{DotsIcon as no}from"./icon/icons/DotsIcon.js";import{DragIcon as io}from"./icon/icons/DragIcon.js";import{ErrorIcon as mo}from"./icon/icons/ErrorIcon.js";import{GreenCheckIcon as lo}from"./icon/icons/GreenCheckIcon.js";import{HamburgerIcon as po}from"./icon/icons/HamburgerIcon.js";import{InfoIcon as co}from"./icon/icons/InfoIcon.js";import{LinkIcon as uo}from"./icon/icons/LinkIcon.js";import{MinusIcon as bo}from"./icon/icons/MinusIcon.js";import{OpenInNewIcon as fo}from"./icon/icons/OpenInNewIcon.js";import{PenIcon as Io}from"./icon/icons/PenIcon.js";import{PlusIcon as To}from"./icon/icons/PlusIcon.js";import{QuestionIcon as jo}from"./icon/icons/QuestionIcon.js";import{RedCrossIcon as go}from"./icon/icons/RedCrossIcon.js";import{SearchIcon as Co}from"./icon/icons/SearchIcon.js";import{SuccessIcon as ko}from"./icon/icons/SuccessIcon.js";import{ThumbDownIcon as So}from"./icon/icons/ThumbDownIcon.js";import{ThumbUpIcon as xo}from"./icon/icons/ThumbUpIcon.js";import{TrashCanIcon as ho}from"./icon/icons/TrashCanIcon.js";import{WarningIcon as Bo}from"./icon/icons/WarningIcon.js";import{Image as Lo}from"./image/Image.js";import{FieldGroup as vo}from"./input-group/FieldGroup.js";import{InputGroup as wo}from"./input-group/InputGroup.js";import{Label as Ao}from"./input-group/Label.js";import{SupportLabel as Mo}from"./input-group/SupportLabel.js";import{LinkList as Po}from"./link-list/LinkList.js";import{Link as Ro}from"./link/Link.js";import{List as Fo,OrderedList as Eo,UnorderedList as Do}from"./list/List.js";import{CheckListItem as yo,CrossListItem as Go,ListItem as No}from"./list/ListItem.js";import{Loader as Ho}from"./loader/Loader.js";import{SkeletonAnimation as Uo}from"./loader/skeletons/SkeletonAnimation.js";import{SkeletonButton as Wo}from"./loader/skeletons/SkeletonButton.js";import{SkeletonCheckboxGroup as Oo}from"./loader/skeletons/SkeletonCheckboxGroup.js";import{SkeletonElement as Vo}from"./loader/skeletons/SkeletonElement.js";import{SkeletonInput as zo}from"./loader/skeletons/SkeletonInput.js";import{SkeletonRadioButtonGroup as Qo}from"./loader/skeletons/SkeletonRadioButtonGroup.js";import{SkeletonTable as qo,SkeletonTableHeader as Jo,SkeletonTableRow as Ko}from"./loader/skeletons/SkeletonTable.js";import{SkeletonTextArea as Xo}from"./loader/skeletons/SkeletonTextArea.js";import{Logo as Yo}from"./logo/Logo.js";import{LogoStamp as Zo}from"./logo/LogoStamp.js";import{ForsikringLevertAvFremtind as $o}from"./logo/text-paths/ForsikringLevertAvFremtind.js";import{FraSB1ogDNB as _o}from"./logo/text-paths/FraSB1ogDNB.js";import{InnovasjonFraFremtind as oa}from"./logo/text-paths/InnovasjonFraFremtind.js";import{TeknologiFraFremtind as aa}from"./logo/text-paths/TeknologiFraFremtind.js";import{VartEgetForsikringsselskap as sa}from"./logo/text-paths/VartEgetForsikringsselskap.js";import{VartForsikringsselskap as ea}from"./logo/text-paths/VartForsikringsselskap.js";import{Menu as ra}from"./menu/Menu.js";import{MenuItem as ta}from"./menu/MenuItem.js";import{MenuItemCheckbox as na}from"./menu/MenuItemCheckbox.js";import{MenuDivider as ia}from"./menu/MenuDivider.js";import{ErrorMessage as ma,InfoMessage as la,SuccessMessage as pa,WarningMessage as ca}from"./message/Message.js";import{FormErrorMessage as da}from"./message/FormErrorMessage.js";import{Modal as ua,ModalActions as ba,ModalBody as fa,ModalCloseButton as Ia,ModalContainer as Ta,ModalHeader as ja,ModalOverlay as ga,ModalTitle as Ca}from"./modal/Modal.js";import{useModal as ka}from"./modal/useModal.js";import{NavLink as Sa}from"./nav-link/NavLink.js";import{Pagination as xa}from"./pagination/Pagination.js";import{Popover as ha}from"./popover/Popover.js";import{ProgressBar as Ba}from"./progress-bar/ProgressBar.js";import{RadioButton as La}from"./radio-button/RadioButton.js";import{RadioButtonGroup as va}from"./radio-button/RadioButtonGroup.js";import{BaseRadioButton as wa}from"./radio-button/BaseRadioButton.js";import{RadioPanel as Aa}from"./radio-panel/RadioPanel.js";import{RadioPanelGroup as Ma}from"./radio-panel/RadioPanelGroup.js";import{Select as Pa}from"./select/Select.js";import{NativeSelect as Ra}from"./select/NativeSelect.js";import{SummaryTable as Fa}from"./summary-table/SummaryTable.js";import{SummaryTableRow as Ea}from"./summary-table/SummaryTableRow.js";import{ErrorSystemMessage as Da,InfoSystemMessage as ya,SuccessSystemMessage as Ga,WarningSystemMessage as Na}from"./system-message/SystemMessage.js";import{DataTable as Ha}from"./table/DataTable.js";import{Table as Ua}from"./table/Table.js";import{TableBody as Wa}from"./table/TableBody.js";import{TableCaption as Oa}from"./table/TableCaption.js";import{TableCell as Va}from"./table/TableCell.js";import{TableColumn as za}from"./table/TableColumn.js";import{TableColumnGroup as Qa}from"./table/TableColumnGroup.js";import{TableContextProvider as qa,useTableContext as Ja}from"./table/tableContext.js";import{TableSectionContextProvider as Ka,useTableSectionContext as Xa}from"./table/tableSectionContext.js";import{TableFooter as Ya}from"./table/TableFooter.js";import{TableHead as Za}from"./table/TableHead.js";import{TableHeader as $a}from"./table/TableHeader.js";import{TablePagination as _a}from"./table/TablePagination.js";import{TableRow as os}from"./table/TableRow.js";import{ExpandableTableRow as as}from"./table/ExpandableTableRow.js";import{ExpandableTableRowController as ss}from"./table/ExpandableTableRowController.js";import{useSortableTableHeader as es}from"./table/utils.js";import{NavTab as rs}from"./tabs/NavTab.js";import{NavTabs as ts}from"./tabs/NavTabs.js";import{Tabs as ns}from"./tabs/Tabs.js";import{TabList as is}from"./tabs/TabList.js";import{Tab as ms}from"./tabs/Tab.js";import{TabPanel as ls}from"./tabs/TabPanel.js";import{ErrorTag as ps,InfoTag as cs,SuccessTag as ds,Tag as us,WarningTag as bs}from"./tag/Tag.js";import{BaseTextArea as fs}from"./text-area/BaseTextArea.js";import{TextArea as Is}from"./text-area/TextArea.js";import{BaseTextInput as Ts}from"./text-input/BaseTextInput.js";import{TextInput as js}from"./text-input/TextInput.js";import{ToastProvider as gs,useToast as Cs}from"./toast/toastContext.js";import{ToggleSwitch as ks}from"./toggle-switch/ToggleSwitch.js";import{ToggleSlider as Ss}from"./toggle-switch/ToggleSlider.js";import{Tooltip as xs}from"./tooltip/Tooltip.js";import{TooltipContent as hs}from"./tooltip/TooltipContent.js";import{TooltipTrigger as Bs}from"./tooltip/TooltipTrigger.js";import{PopupTip as Ls}from"./tooltip/PopupTip.js";import{ScreenReaderOnly as vs}from"./ScreenReaderOnly.js";export{o as Accordion,a as AccordionItem,J as ArrowDownIcon,Q as ArrowHorizontalAnimated,K as ArrowLeftIcon,X as ArrowNorthEastIcon,Y as ArrowRightIcon,Z as ArrowUpIcon,z as ArrowVerticalAnimated,s as Autosuggest,wa as BaseRadioButton,fs as BaseTextArea,Ts as BaseTextInput,e as Breadcrumb,r as BreadcrumbItem,t as Button,$ as CalendarIcon,l as Card,p as CardImage,_ as CheckIcon,yo as CheckListItem,I as Checkbox,f as CheckboxPanel,oo as ChevronDownIcon,ao as ChevronLeftIcon,so as ChevronRightIcon,eo as ChevronUpIcon,T as Chip,ro as CloseIcon,j as Combobox,C as CookieConsent,k as CookieConsentProvider,to as CopyIcon,x as Countdown,Go as CrossListItem,Ha as DataTable,h as DatePicker,P as DescriptionDetail,R as DescriptionList,F as DescriptionTerm,no as DotsIcon,io as DragIcon,mo as ErrorIcon,ma as ErrorMessage,Da as ErrorSystemMessage,ps as ErrorTag,y as ExpandSection,E as ExpandablePanel,as as ExpandableTableRow,ss as ExpandableTableRowController,D as Expander,G as Feedback,vo as FieldGroup,H as FileInput,W as Flex,da as FormErrorMessage,$o as ForsikringLevertAvFremtind,_o as FraSB1ogDNB,lo as GreenCheckIcon,po as HamburgerIcon,V as Icon,O as IconButton,Lo as Image,c as InfoBlock,b as InfoCard,co as InfoIcon,la as InfoMessage,ya as InfoSystemMessage,cs as InfoTag,oa as InnovasjonFraFremtind,wo as InputGroup,Ao as Label,Ro as Link,uo as LinkIcon,Po as LinkList,Fo as List,No as ListItem,Ho as Loader,Yo as Logo,Zo as LogoStamp,ra as Menu,ia as MenuDivider,ta as MenuItem,na as MenuItemCheckbox,bo as MinusIcon,ua as Modal,ba as ModalActions,fa as ModalBody,Ia as ModalCloseButton,Ta as ModalContainer,ja as ModalHeader,ga as ModalOverlay,Ca as ModalTitle,Ra as NativeSelect,d as NavCard,Sa as NavLink,rs as NavTab,ts as NavTabs,fo as OpenInNewIcon,Eo as OrderedList,N as PRESETS,xa as Pagination,Io as PenIcon,To as PlusIcon,q as PlusRemoveAnimated,ha as Popover,Ls as PopupTip,n as PrimaryButton,Ba as ProgressBar,jo as QuestionIcon,La as RadioButton,va as RadioButtonGroup,Aa as RadioPanel,Ma as RadioPanelGroup,go as RedCrossIcon,vs as ScreenReaderOnly,Co as SearchIcon,i as SecondaryButton,Pa as Select,Uo as SkeletonAnimation,Wo as SkeletonButton,Oo as SkeletonCheckboxGroup,Vo as SkeletonElement,zo as SkeletonInput,Qo as SkeletonRadioButtonGroup,qo as SkeletonTable,Jo as SkeletonTableHeader,Ko as SkeletonTableRow,Xo as SkeletonTextArea,ko as SuccessIcon,pa as SuccessMessage,Ga as SuccessSystemMessage,ds as SuccessTag,Fa as SummaryTable,Ea as SummaryTableRow,Mo as SupportLabel,ms as Tab,is as TabList,ls as TabPanel,Ua as Table,Wa as TableBody,Oa as TableCaption,Va as TableCell,za as TableColumn,Qa as TableColumnGroup,qa as TableContextProvider,Ya as TableFooter,Za as TableHead,$a as TableHeader,_a as TablePagination,os as TableRow,Ka as TableSectionContextProvider,ns as Tabs,us as Tag,u as TaskCard,aa as TeknologiFraFremtind,m as TertiaryButton,Is as TextArea,js as TextInput,So as ThumbDownIcon,xo as ThumbUpIcon,gs as ToastProvider,Ss as ToggleSlider,ks as ToggleSwitch,xs as Tooltip,hs as TooltipContent,Bs as TooltipTrigger,ho as TrashCanIcon,Do as UnorderedList,sa as VartEgetForsikringsselskap,ea as VartForsikringsselskap,Bo as WarningIcon,ca as WarningMessage,Na as WarningSystemMessage,bs as WarningTag,w as formatInput,g as getComboboxValuePair,A as isBlurTargetOutside,B as isCorrectFormat,L as isWithinLowerBound,v as isWithinUpperBound,M as parseDateString,U as upload,S as useCookieConsent,ka as useModal,es as useSortableTableHeader,Ja as useTableContext,Xa as useTableSectionContext,Cs as useToast};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,17 +1,12 @@
1
- import { AriaRole } from 'react';
2
- import { Density, WithChildren } from '../../core/types.js';
3
- export interface MessageProps extends WithChildren {
4
- id?: string;
5
- title?: string;
1
+ import { Density } from '../../core/types.js';
2
+ export interface MessageProps extends React.ComponentPropsWithoutRef<"div"> {
6
3
  fullWidth?: boolean;
7
4
  density?: Density;
8
- className?: string;
9
5
  dismissed?: boolean;
10
6
  dismissAction?: {
11
7
  handleDismiss: () => void;
12
8
  buttonTitle?: string;
13
9
  };
14
- role?: AriaRole;
15
10
  }
16
11
  export interface FormErrorMessageProps {
17
12
  className?: string;