@helsenorge/designsystem-react 14.7.0 → 14.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/lib/AnchorLink.js +2 -2
  2. package/lib/AnchorLink.js.map +1 -1
  3. package/lib/Avatar.js +2 -2
  4. package/lib/Avatar.js.map +1 -1
  5. package/lib/Badge.js +2 -2
  6. package/lib/Badge.js.map +1 -1
  7. package/lib/Button.js +6 -6
  8. package/lib/Button.js.map +1 -1
  9. package/lib/CHANGELOG.md +7 -0
  10. package/lib/Checkbox.js +6 -6
  11. package/lib/Checkbox.js.map +1 -1
  12. package/lib/Chip.js +60 -0
  13. package/lib/Chip.js.map +1 -0
  14. package/lib/Close.js +3 -3
  15. package/lib/Close.js.map +1 -1
  16. package/lib/DictionaryTrigger.js +2 -2
  17. package/lib/DictionaryTrigger.js.map +1 -1
  18. package/lib/Drawer.js +6 -6
  19. package/lib/Drawer.js.map +1 -1
  20. package/lib/DrawerNavigation.js +81 -0
  21. package/lib/DrawerNavigation.js.map +1 -0
  22. package/lib/DrawerNavigation2.js +5 -0
  23. package/lib/DrawerNavigation2.js.map +1 -0
  24. package/lib/Duolist.js +5 -5
  25. package/lib/Duolist.js.map +1 -1
  26. package/lib/ElementHeader.js +9 -9
  27. package/lib/ElementHeader.js.map +1 -1
  28. package/lib/ElementHeaderText.js +4 -4
  29. package/lib/ElementHeaderText.js.map +1 -1
  30. package/lib/ErrorWrapper.js +2 -2
  31. package/lib/ErrorWrapper.js.map +1 -1
  32. package/lib/Expander.js +8 -8
  33. package/lib/Expander.js.map +1 -1
  34. package/lib/Filter.js +44 -0
  35. package/lib/Filter.js.map +1 -0
  36. package/lib/FilterButton.js +40 -0
  37. package/lib/FilterButton.js.map +1 -0
  38. package/lib/FilterButtonAndChipsWrapper.js +14 -0
  39. package/lib/FilterButtonAndChipsWrapper.js.map +1 -0
  40. package/lib/FilterDrawer.js +91 -0
  41. package/lib/FilterDrawer.js.map +1 -0
  42. package/lib/FilterLinkList.js +61 -0
  43. package/lib/FilterLinkList.js.map +1 -0
  44. package/lib/FilterLinkList2.js +5 -0
  45. package/lib/FilterLinkList2.js.map +1 -0
  46. package/lib/FilterOverviewLinkList.js +22 -0
  47. package/lib/FilterOverviewLinkList.js.map +1 -0
  48. package/lib/FilterOverviewSearch.js +16 -0
  49. package/lib/FilterOverviewSearch.js.map +1 -0
  50. package/lib/FilterResultCountAndSortWrapper.js +19 -0
  51. package/lib/FilterResultCountAndSortWrapper.js.map +1 -0
  52. package/lib/FilterSearch.js +87 -0
  53. package/lib/FilterSearch.js.map +1 -0
  54. package/lib/FilterSearch2.js +5 -0
  55. package/lib/FilterSearch2.js.map +1 -0
  56. package/lib/FilterSort.js +30 -0
  57. package/lib/FilterSort.js.map +1 -0
  58. package/lib/FormFieldTag.js +2 -2
  59. package/lib/FormFieldTag.js.map +1 -1
  60. package/lib/FormGroup.js +6 -6
  61. package/lib/FormGroup.js.map +1 -1
  62. package/lib/FormLayout.js +3 -3
  63. package/lib/FormLayout.js.map +1 -1
  64. package/lib/HelpDetails.js +3 -3
  65. package/lib/HelpDetails.js.map +1 -1
  66. package/lib/HelpTriggerIcon.js +2 -2
  67. package/lib/HelpTriggerIcon.js.map +1 -1
  68. package/lib/HelpTriggerStandalone.js +2 -2
  69. package/lib/HelpTriggerStandalone.js.map +1 -1
  70. package/lib/HighlightPanel.js +3 -3
  71. package/lib/HighlightPanel.js.map +1 -1
  72. package/lib/HorizontalScroll.js +4 -4
  73. package/lib/HorizontalScroll.js.map +1 -1
  74. package/lib/Icon.js +2 -2
  75. package/lib/Icon.js.map +1 -1
  76. package/lib/InfoTeaser.js +3 -3
  77. package/lib/InfoTeaser.js.map +1 -1
  78. package/lib/Input.js +4 -4
  79. package/lib/Input.js.map +1 -1
  80. package/lib/LinkList.js +5 -5
  81. package/lib/LinkList.js.map +1 -1
  82. package/lib/List.js +2 -2
  83. package/lib/List.js.map +1 -1
  84. package/lib/ListEditMode.js +4 -4
  85. package/lib/ListEditMode.js.map +1 -1
  86. package/lib/MaxCharacters.js +2 -2
  87. package/lib/MaxCharacters.js.map +1 -1
  88. package/lib/PanelTitle.js +2 -2
  89. package/lib/PanelTitle.js.map +1 -1
  90. package/lib/PopOver.js +2 -2
  91. package/lib/PopOver.js.map +1 -1
  92. package/lib/Search.js +26 -0
  93. package/lib/Search.js.map +1 -0
  94. package/lib/Select.js +4 -4
  95. package/lib/Select.js.map +1 -1
  96. package/lib/SingleSelectItem.js +3 -3
  97. package/lib/SingleSelectItem.js.map +1 -1
  98. package/lib/Slider.js +4 -4
  99. package/lib/Slider.js.map +1 -1
  100. package/lib/Spacer.js +2 -2
  101. package/lib/Spacer.js.map +1 -1
  102. package/lib/StatusDot.js +4 -4
  103. package/lib/StatusDot.js.map +1 -1
  104. package/lib/StatusDotList.js +2 -2
  105. package/lib/StatusDotList.js.map +1 -1
  106. package/lib/StepButtons.js +5 -5
  107. package/lib/StepButtons.js.map +1 -1
  108. package/lib/TabList.js +8 -8
  109. package/lib/TabList.js.map +1 -1
  110. package/lib/TabPanel.js +2 -2
  111. package/lib/TabPanel.js.map +1 -1
  112. package/lib/TableBody.js +2 -2
  113. package/lib/TableBody.js.map +1 -1
  114. package/lib/TableCell.js +2 -2
  115. package/lib/TableCell.js.map +1 -1
  116. package/lib/TableExpandedRow.js +4 -4
  117. package/lib/TableExpandedRow.js.map +1 -1
  118. package/lib/TableExpanderCell.js +2 -2
  119. package/lib/TableExpanderCell.js.map +1 -1
  120. package/lib/TableHead.js +2 -2
  121. package/lib/TableHead.js.map +1 -1
  122. package/lib/TableHeadCell.js +3 -3
  123. package/lib/TableHeadCell.js.map +1 -1
  124. package/lib/TableRow.js +3 -3
  125. package/lib/TableRow.js.map +1 -1
  126. package/lib/Textarea.js +4 -4
  127. package/lib/Textarea.js.map +1 -1
  128. package/lib/Title.js +2 -2
  129. package/lib/Title.js.map +1 -1
  130. package/lib/Toast.js +3 -3
  131. package/lib/Toast.js.map +1 -1
  132. package/lib/components/ArticleTeaser/index.js +4 -4
  133. package/lib/components/ArticleTeaser/index.js.map +1 -1
  134. package/lib/components/Chip/index.js +1 -59
  135. package/lib/components/Dropdown/index.js +5 -5
  136. package/lib/components/Dropdown/index.js.map +1 -1
  137. package/lib/components/DropdownOld/index.js +3 -3
  138. package/lib/components/DropdownOld/index.js.map +1 -1
  139. package/lib/components/EmptyState/index.js +2 -2
  140. package/lib/components/EmptyState/index.js.map +1 -1
  141. package/lib/components/ExpanderHierarchy/index.js +7 -7
  142. package/lib/components/ExpanderHierarchy/index.js.map +1 -1
  143. package/lib/components/ExpanderList/index.js +6 -6
  144. package/lib/components/ExpanderList/index.js.map +1 -1
  145. package/lib/components/FavoriteButton/index.js +2 -2
  146. package/lib/components/FavoriteButton/index.js.map +1 -1
  147. package/lib/components/Filter/DrawerNavigation/index.js +2 -80
  148. package/lib/components/Filter/FilterButton/index.d.ts +3 -0
  149. package/lib/components/Filter/FilterButton/index.js +2 -0
  150. package/lib/components/Filter/FilterButtonAndChipsWrapper/index.d.ts +3 -0
  151. package/lib/components/Filter/FilterButtonAndChipsWrapper/index.js +2 -0
  152. package/lib/components/Filter/FilterDrawer/index.d.ts +3 -0
  153. package/lib/components/Filter/FilterDrawer/index.js +2 -0
  154. package/lib/components/Filter/FilterLinkList/index.d.ts +3 -0
  155. package/lib/components/Filter/FilterLinkList/index.js +3 -0
  156. package/lib/components/Filter/FilterOverviewLinkList/index.d.ts +3 -0
  157. package/lib/components/Filter/FilterOverviewLinkList/index.js +2 -0
  158. package/lib/components/Filter/FilterOverviewSearch/index.d.ts +3 -0
  159. package/lib/components/Filter/FilterOverviewSearch/index.js +2 -0
  160. package/lib/components/Filter/FilterResultCountAndSortWrapper/index.d.ts +3 -0
  161. package/lib/components/Filter/FilterResultCountAndSortWrapper/index.js +2 -0
  162. package/lib/components/Filter/FilterSearch/index.d.ts +3 -0
  163. package/lib/components/Filter/FilterSearch/index.js +2 -0
  164. package/lib/components/Filter/FilterSort/index.d.ts +3 -0
  165. package/lib/components/Filter/FilterSort/index.js +2 -0
  166. package/lib/components/Filter/FilterSort/styles.module.scss +4 -0
  167. package/lib/components/Filter/getFilterChips/index.d.ts +3 -0
  168. package/lib/components/Filter/getFilterChips/index.js +2 -0
  169. package/lib/components/Filter/index.d.ts +23 -0
  170. package/lib/components/Filter/index.js +30 -2
  171. package/lib/components/Filter/index.js.map +1 -1
  172. package/lib/components/HelpBubble/index.js +3 -3
  173. package/lib/components/HelpBubble/index.js.map +1 -1
  174. package/lib/components/HelpPanel/index.js +2 -2
  175. package/lib/components/HelpPanel/index.js.map +1 -1
  176. package/lib/components/HelpTriggerInline/index.js +2 -2
  177. package/lib/components/HelpTriggerInline/index.js.map +1 -1
  178. package/lib/components/Icons/Filter.js +1 -43
  179. package/lib/components/Icons/Search.js +1 -25
  180. package/lib/components/Loader/index.js +4 -4
  181. package/lib/components/Loader/index.js.map +1 -1
  182. package/lib/components/Modal/index.js +9 -9
  183. package/lib/components/Modal/index.js.map +1 -1
  184. package/lib/components/NotificationPanel/index.js +6 -6
  185. package/lib/components/NotificationPanel/index.js.map +1 -1
  186. package/lib/components/Panel/index.js +12 -12
  187. package/lib/components/Panel/index.js.map +1 -1
  188. package/lib/components/PanelList/index.js +3 -3
  189. package/lib/components/PanelList/index.js.map +1 -1
  190. package/lib/components/PopMenu/index.js +3 -3
  191. package/lib/components/PopMenu/index.js.map +1 -1
  192. package/lib/components/Progressbar/index.js +2 -2
  193. package/lib/components/Progressbar/index.js.map +1 -1
  194. package/lib/components/PromoPanel/index.js +2 -2
  195. package/lib/components/PromoPanel/index.js.map +1 -1
  196. package/lib/components/ServiceMessage/index.js +5 -5
  197. package/lib/components/ServiceMessage/index.js.map +1 -1
  198. package/lib/components/SharingStatus/index.js +4 -4
  199. package/lib/components/SharingStatus/index.js.map +1 -1
  200. package/lib/components/Step/index.js +2 -2
  201. package/lib/components/Step/index.js.map +1 -1
  202. package/lib/components/Stepper/index.js +2 -2
  203. package/lib/components/Stepper/index.js.map +1 -1
  204. package/lib/components/StickyNote/index.js +8 -8
  205. package/lib/components/StickyNote/index.js.map +1 -1
  206. package/lib/components/Table/index.js +2 -2
  207. package/lib/components/Table/index.js.map +1 -1
  208. package/lib/components/Tabs/index.js +4 -4
  209. package/lib/components/Tabs/index.js.map +1 -1
  210. package/lib/components/Tag/index.js +2 -2
  211. package/lib/components/Tag/index.js.map +1 -1
  212. package/lib/components/Tile/index.js +4 -4
  213. package/lib/components/Tile/index.js.map +1 -1
  214. package/lib/components/Toggle/index.js +7 -7
  215. package/lib/components/Toggle/index.js.map +1 -1
  216. package/lib/components/Validation/index.js +2 -2
  217. package/lib/components/Validation/index.js.map +1 -1
  218. package/lib/getFilterChips.js +30 -0
  219. package/lib/getFilterChips.js.map +1 -0
  220. package/lib/resourceHelper.js +31 -0
  221. package/lib/resourceHelper.js.map +1 -0
  222. package/lib/resources/HN.Designsystem.Filter.en-GB.json.d.ts +13 -0
  223. package/lib/resources/HN.Designsystem.Filter.nb-NO.json.d.ts +13 -0
  224. package/lib/utils2.js +7 -7
  225. package/lib/utils2.js.map +1 -1
  226. package/lib/utils3.js +5 -5
  227. package/lib/utils3.js.map +1 -1
  228. package/package.json +1 -1
  229. package/lib/components/Chip/index.js.map +0 -1
  230. package/lib/components/Filter/DrawerNavigation/index.js.map +0 -1
  231. package/lib/components/Icons/Filter.js.map +0 -1
  232. package/lib/components/Icons/Search.js.map +0 -1
package/lib/Filter.js ADDED
@@ -0,0 +1,44 @@
1
+ import { t as getIcon } from "./utils.js";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ var Filter = ({ size, isHovered }) => {
4
+ return getIcon({
5
+ size,
6
+ isHovered,
7
+ normal: /* @__PURE__ */ jsx("path", {
8
+ "fill-rule": "evenodd",
9
+ "clip-rule": "evenodd",
10
+ d: "M21.034 30.338a4 4 0 0 1 3.926 3.234H41v1.3H24.998a4 4 0 0 1-7.94-.1H7v-1.2h10.108a4 4 0 0 1 3.926-3.234Zm0 1.3a2.7 2.7 0 1 0 .001 5.4 2.7 2.7 0 0 0 0-5.4ZM32.697 20a4 4 0 0 1 3.936 3.286H41v1.3h-4.346a4 4 0 0 1-7.914 0H7v-1.3h21.762A4 4 0 0 1 32.697 20Zm0 1.3a2.7 2.7 0 1 0 0 5.4 2.7 2.7 0 0 0 0-5.4ZM16.571 9.726A4 4 0 0 1 20.505 13H41v1.3H20.53a4 4 0 0 1-7.917 0H7V13h5.638a4 4 0 0 1 3.933-3.274Zm0 1.3a2.7 2.7 0 1 0 0 5.4 2.7 2.7 0 0 0 0-5.4Z"
11
+ }),
12
+ normalHover: /* @__PURE__ */ jsxs(Fragment, { children: [
13
+ /* @__PURE__ */ jsx("path", {
14
+ "fill-rule": "evenodd",
15
+ "clip-rule": "evenodd",
16
+ d: "M17.0332 30.3389C18.9803 30.3389 20.6015 31.7297 20.959 33.5723H40.999V34.8721H20.9971C20.7361 36.8288 19.0613 38.3389 17.0332 38.3389C15.0051 38.3389 13.3303 36.8288 13.0693 34.8721H6.99902V33.5723H13.1074C13.4649 31.7297 15.0861 30.3389 17.0332 30.3389ZM17.0332 31.6387C15.542 31.6387 14.333 32.8477 14.333 34.3389C14.3333 35.8298 15.5422 37.0391 17.0332 37.0391C18.5242 37.0391 19.7331 35.8298 19.7334 34.3389C19.7334 32.8477 18.5244 31.6387 17.0332 31.6387Z"
17
+ }),
18
+ /* @__PURE__ */ jsx("path", {
19
+ "fill-rule": "evenodd",
20
+ "clip-rule": "evenodd",
21
+ d: "M32.6963 20C34.6617 20 36.2952 21.4177 36.6318 23.2861H40.999V24.5859H36.6533C36.3698 26.5173 34.7064 28 32.6963 28C30.6862 28 29.0228 26.5173 28.7393 24.5859H6.99902V23.2861H28.7607C29.0974 21.4177 30.7309 20 32.6963 20ZM32.6963 21.2998C31.2051 21.2998 29.9961 22.5088 29.9961 24C29.9961 25.4912 31.2051 26.7002 32.6963 26.7002C34.1875 26.7002 35.3965 25.4912 35.3965 24C35.3965 22.5088 34.1875 21.2998 32.6963 21.2998Z"
22
+ }),
23
+ /* @__PURE__ */ jsx("path", {
24
+ "fill-rule": "evenodd",
25
+ "clip-rule": "evenodd",
26
+ d: "M19.5703 9.72461C21.5318 9.72461 23.1627 11.1371 23.5039 13H40.999V14.2998H23.5283C23.2496 16.2366 21.5843 17.7256 19.5703 17.7256C17.5564 17.7256 15.891 16.2366 15.6123 14.2998H6.99902V13H15.6367C15.9779 11.1371 17.6088 9.72461 19.5703 9.72461ZM19.5703 11.0254C18.0791 11.0254 16.8701 12.2344 16.8701 13.7256C16.8704 15.2165 18.0793 16.4258 19.5703 16.4258C21.0613 16.4258 22.2702 15.2165 22.2705 13.7256C22.2705 12.2344 21.0615 11.0254 19.5703 11.0254Z"
27
+ })
28
+ ] }),
29
+ xSmall: /* @__PURE__ */ jsx("path", {
30
+ "fill-rule": "evenodd",
31
+ "clip-rule": "evenodd",
32
+ d: "M22.111 27.892a2.974 2.974 0 0 1 2.905 2.342h11.935v1.264H25.015a2.973 2.973 0 0 1-2.904 2.34l-.303-.015a2.973 2.973 0 0 1-2.6-2.325H11.68v-1.264h7.529a2.973 2.973 0 0 1 2.903-2.342Zm0 1.263a1.71 1.71 0 1 0 .001 3.42 1.71 1.71 0 0 0 0-3.42Zm8.669-8.229a2.974 2.974 0 0 1 2.904 2.343h3.267v1.263h-3.268a2.973 2.973 0 0 1-2.904 2.341l-.303-.016a2.973 2.973 0 0 1-2.599-2.325H11.679v-1.263h16.197a2.973 2.973 0 0 1 2.903-2.343Zm0 1.263a1.71 1.71 0 1 0 0 3.421 1.71 1.71 0 0 0 0-3.42Zm-11.987-8.295a2.974 2.974 0 0 1 2.905 2.34h15.253v1.264H21.697a2.973 2.973 0 0 1-2.904 2.342l-.303-.015a2.973 2.973 0 0 1-2.6-2.327h-4.21v-1.263h4.21a2.973 2.973 0 0 1 2.903-2.341Zm0 1.263a1.71 1.71 0 1 0 .001 3.42 1.71 1.71 0 0 0 0-3.42Z"
33
+ }),
34
+ xSmallHover: /* @__PURE__ */ jsx("path", {
35
+ "fill-rule": "evenodd",
36
+ "clip-rule": "evenodd",
37
+ d: "M19.585 27.892a2.975 2.975 0 0 1 2.906 2.342h14.46v1.264H22.489a2.973 2.973 0 0 1-2.904 2.34l-.303-.015a2.974 2.974 0 0 1-2.6-2.327h-5.003v-1.263h5.001a2.974 2.974 0 0 1 2.905-2.341Zm0 1.263a1.71 1.71 0 1 0 0 3.42 1.71 1.71 0 0 0 0-3.42Zm11.195-8.229a2.974 2.974 0 0 1 2.904 2.343h3.267v1.263h-3.268a2.973 2.973 0 0 1-2.904 2.341l-.303-.016a2.973 2.973 0 0 1-2.599-2.325H11.679v-1.263h16.197a2.973 2.973 0 0 1 2.903-2.343Zm0 1.263a1.71 1.71 0 1 0 0 3.421 1.71 1.71 0 0 0 0-3.42Zm-9.46-8.295a2.974 2.974 0 0 1 2.904 2.34h12.727v1.264H24.223a2.973 2.973 0 0 1-2.904 2.342l-.303-.015a2.973 2.973 0 0 1-2.6-2.327H11.68v-1.263h6.737a2.973 2.973 0 0 1 2.903-2.341Zm0 1.263a1.71 1.71 0 1 0 0 3.42 1.71 1.71 0 0 0 0-3.42Z"
38
+ })
39
+ });
40
+ };
41
+ var Filter_default = Filter;
42
+ export { Filter_default as t };
43
+
44
+ //# sourceMappingURL=Filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Filter.js","names":["Filter: React.FC<SvgPathProps>"],"sources":["../src/components/Icons/Filter.tsx"],"sourcesContent":["import type { SvgPathProps } from '../Icon';\n\nimport { getIcon } from '../Icon/utils';\n\nconst Filter: React.FC<SvgPathProps> = ({ size, isHovered }: SvgPathProps): React.ReactElement => {\n const normal = (\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M21.034 30.338a4 4 0 0 1 3.926 3.234H41v1.3H24.998a4 4 0 0 1-7.94-.1H7v-1.2h10.108a4 4 0 0 1 3.926-3.234Zm0 1.3a2.7 2.7 0 1 0 .001 5.4 2.7 2.7 0 0 0 0-5.4ZM32.697 20a4 4 0 0 1 3.936 3.286H41v1.3h-4.346a4 4 0 0 1-7.914 0H7v-1.3h21.762A4 4 0 0 1 32.697 20Zm0 1.3a2.7 2.7 0 1 0 0 5.4 2.7 2.7 0 0 0 0-5.4ZM16.571 9.726A4 4 0 0 1 20.505 13H41v1.3H20.53a4 4 0 0 1-7.917 0H7V13h5.638a4 4 0 0 1 3.933-3.274Zm0 1.3a2.7 2.7 0 1 0 0 5.4 2.7 2.7 0 0 0 0-5.4Z\"\n />\n );\n\n const normalHover = (\n <>\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M17.0332 30.3389C18.9803 30.3389 20.6015 31.7297 20.959 33.5723H40.999V34.8721H20.9971C20.7361 36.8288 19.0613 38.3389 17.0332 38.3389C15.0051 38.3389 13.3303 36.8288 13.0693 34.8721H6.99902V33.5723H13.1074C13.4649 31.7297 15.0861 30.3389 17.0332 30.3389ZM17.0332 31.6387C15.542 31.6387 14.333 32.8477 14.333 34.3389C14.3333 35.8298 15.5422 37.0391 17.0332 37.0391C18.5242 37.0391 19.7331 35.8298 19.7334 34.3389C19.7334 32.8477 18.5244 31.6387 17.0332 31.6387Z\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M32.6963 20C34.6617 20 36.2952 21.4177 36.6318 23.2861H40.999V24.5859H36.6533C36.3698 26.5173 34.7064 28 32.6963 28C30.6862 28 29.0228 26.5173 28.7393 24.5859H6.99902V23.2861H28.7607C29.0974 21.4177 30.7309 20 32.6963 20ZM32.6963 21.2998C31.2051 21.2998 29.9961 22.5088 29.9961 24C29.9961 25.4912 31.2051 26.7002 32.6963 26.7002C34.1875 26.7002 35.3965 25.4912 35.3965 24C35.3965 22.5088 34.1875 21.2998 32.6963 21.2998Z\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M19.5703 9.72461C21.5318 9.72461 23.1627 11.1371 23.5039 13H40.999V14.2998H23.5283C23.2496 16.2366 21.5843 17.7256 19.5703 17.7256C17.5564 17.7256 15.891 16.2366 15.6123 14.2998H6.99902V13H15.6367C15.9779 11.1371 17.6088 9.72461 19.5703 9.72461ZM19.5703 11.0254C18.0791 11.0254 16.8701 12.2344 16.8701 13.7256C16.8704 15.2165 18.0793 16.4258 19.5703 16.4258C21.0613 16.4258 22.2702 15.2165 22.2705 13.7256C22.2705 12.2344 21.0615 11.0254 19.5703 11.0254Z\"\n />\n </>\n );\n\n const xSmall = (\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M22.111 27.892a2.974 2.974 0 0 1 2.905 2.342h11.935v1.264H25.015a2.973 2.973 0 0 1-2.904 2.34l-.303-.015a2.973 2.973 0 0 1-2.6-2.325H11.68v-1.264h7.529a2.973 2.973 0 0 1 2.903-2.342Zm0 1.263a1.71 1.71 0 1 0 .001 3.42 1.71 1.71 0 0 0 0-3.42Zm8.669-8.229a2.974 2.974 0 0 1 2.904 2.343h3.267v1.263h-3.268a2.973 2.973 0 0 1-2.904 2.341l-.303-.016a2.973 2.973 0 0 1-2.599-2.325H11.679v-1.263h16.197a2.973 2.973 0 0 1 2.903-2.343Zm0 1.263a1.71 1.71 0 1 0 0 3.421 1.71 1.71 0 0 0 0-3.42Zm-11.987-8.295a2.974 2.974 0 0 1 2.905 2.34h15.253v1.264H21.697a2.973 2.973 0 0 1-2.904 2.342l-.303-.015a2.973 2.973 0 0 1-2.6-2.327h-4.21v-1.263h4.21a2.973 2.973 0 0 1 2.903-2.341Zm0 1.263a1.71 1.71 0 1 0 .001 3.42 1.71 1.71 0 0 0 0-3.42Z\"\n />\n );\n\n const xSmallHover = (\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M19.585 27.892a2.975 2.975 0 0 1 2.906 2.342h14.46v1.264H22.489a2.973 2.973 0 0 1-2.904 2.34l-.303-.015a2.974 2.974 0 0 1-2.6-2.327h-5.003v-1.263h5.001a2.974 2.974 0 0 1 2.905-2.341Zm0 1.263a1.71 1.71 0 1 0 0 3.42 1.71 1.71 0 0 0 0-3.42Zm11.195-8.229a2.974 2.974 0 0 1 2.904 2.343h3.267v1.263h-3.268a2.973 2.973 0 0 1-2.904 2.341l-.303-.016a2.973 2.973 0 0 1-2.599-2.325H11.679v-1.263h16.197a2.973 2.973 0 0 1 2.903-2.343Zm0 1.263a1.71 1.71 0 1 0 0 3.421 1.71 1.71 0 0 0 0-3.42Zm-9.46-8.295a2.974 2.974 0 0 1 2.904 2.34h12.727v1.264H24.223a2.973 2.973 0 0 1-2.904 2.342l-.303-.015a2.973 2.973 0 0 1-2.6-2.327H11.68v-1.263h6.737a2.973 2.973 0 0 1 2.903-2.341Zm0 1.263a1.71 1.71 0 1 0 0 3.42 1.71 1.71 0 0 0 0-3.42Z\"\n />\n );\n\n return getIcon({ size, isHovered, normal, normalHover, xSmall, xSmallHover });\n};\n\nexport default Filter;\n"],"mappings":";;AAIA,IAAMA,UAAkC,EAAE,MAAM,gBAAkD;AA6ChG,QAAO,QAAQ;EAAE;EAAM;EAAW,QA3ChC,oBAAC,QAAA;GACC,aAAU;GACV,aAAU;GACV,GAAE;IACF;EAuCsC,aAnCxC,qBAAA,UAAA,EAAA,UAAA;GACE,oBAAC,QAAA;IACC,aAAU;IACV,aAAU;IACV,GAAE;KACF;GACF,oBAAC,QAAA;IACC,aAAU;IACV,aAAU;IACV,GAAE;KACF;GACF,oBAAC,QAAA;IACC,aAAU;IACV,aAAU;IACV,GAAE;KACF;MACD;EAmBkD,QAfrD,oBAAC,QAAA;GACC,aAAU;GACV,aAAU;GACV,GAAE;IACF;EAW2D,aAP7D,oBAAC,QAAA;GACC,aAAU;GACV,aAAU;GACV,GAAE;IACF;EAGwE,CAAC;;AAG/E,IAAA,iBAAe"}
@@ -0,0 +1,40 @@
1
+ import { a as IconSize, s as LanguageLocales } from "./constants2.js";
2
+ import { t as usePseudoClasses } from "./usePseudoClasses.js";
3
+ import { t as Icon_default } from "./Icon.js";
4
+ import { n as useLanguage } from "./useLanguage.js";
5
+ import { t as Filter_default } from "./Filter.js";
6
+ import { t as getResources } from "./resourceHelper.js";
7
+ import cn from "classnames";
8
+ import { useRef } from "react";
9
+ import { jsx, jsxs } from "react/jsx-runtime";
10
+ import styles from "./components/Filter/FilterButton/styles.module.scss";
11
+ var FilterButton = (props) => {
12
+ const { resources } = props;
13
+ const { language } = useLanguage(LanguageLocales.NORWEGIAN);
14
+ const mergedResources = {
15
+ ...getResources(language),
16
+ ...resources
17
+ };
18
+ const buttonRef = useRef(null);
19
+ const { isHovered } = usePseudoClasses(buttonRef);
20
+ return /* @__PURE__ */ jsx("button", {
21
+ ...props,
22
+ className: styles["filter-button"],
23
+ ref: buttonRef,
24
+ children: /* @__PURE__ */ jsxs("span", {
25
+ className: cn(styles["filter-button__inner"], { [styles["filter-button__inner--hovered"]]: isHovered }),
26
+ children: [/* @__PURE__ */ jsx(Icon_default, {
27
+ svgIcon: Filter_default,
28
+ isHovered,
29
+ size: IconSize.XSmall
30
+ }), /* @__PURE__ */ jsx("span", {
31
+ className: styles["filter-button__text"],
32
+ children: mergedResources.filterButtonText
33
+ })]
34
+ })
35
+ });
36
+ };
37
+ var FilterButton_default$1 = FilterButton;
38
+ export { FilterButton_default$1 as t };
39
+
40
+ //# sourceMappingURL=FilterButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterButton.js","names":["FilterButton: React.FC<FilterButtonProps>"],"sources":["../src/components/Filter/FilterButton/FilterButton.tsx","../src/components/Filter/FilterButton/index.ts"],"sourcesContent":["import { useRef } from 'react';\n\nimport classNames from 'classnames';\n\nimport type { HNDesignsystemFilter } from '../../../resources/Resources';\n\nimport { IconSize, LanguageLocales } from '../../../constants';\nimport { useLanguage } from '../../../hooks/useLanguage';\nimport { usePseudoClasses } from '../../../hooks/usePseudoClasses';\nimport Icon from '../../Icon';\nimport Filter from '../../Icons/Filter';\nimport { getResources } from '../resourceHelper';\n\nimport styles from './styles.module.scss';\n\nexport interface FilterButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Texts if overriding SOT */\n resources?: Partial<HNDesignsystemFilter>;\n}\n\nconst FilterButton: React.FC<FilterButtonProps> = props => {\n const { resources } = props;\n\n const { language } = useLanguage<LanguageLocales>(LanguageLocales.NORWEGIAN);\n const defaultResources = getResources(language);\n\n const mergedResources = {\n ...defaultResources,\n ...resources,\n };\n\n const buttonRef = useRef<HTMLButtonElement>(null);\n const { isHovered } = usePseudoClasses(buttonRef);\n\n return (\n <button {...props} className={styles['filter-button']} ref={buttonRef}>\n <span\n className={classNames(styles['filter-button__inner'], {\n [styles['filter-button__inner--hovered']]: isHovered,\n })}\n >\n <Icon svgIcon={Filter} isHovered={isHovered} size={IconSize.XSmall} />\n <span className={styles['filter-button__text']}>{mergedResources.filterButtonText}</span>\n </span>\n </button>\n );\n};\n\nexport default FilterButton;\n","import FilterButton from './FilterButton';\nexport * from './FilterButton';\nexport default FilterButton;\n"],"mappings":";;;;;;;;;;AAoBA,IAAMA,gBAA4C,UAAS;CACzD,MAAM,EAAE,cAAc;CAEtB,MAAM,EAAE,aAAa,YAA6B,gBAAgB,UAAU;CAG5E,MAAM,kBAAkB;EACtB,GAHuB,aAAa,SAAS;EAI7C,GAAG;EACJ;CAED,MAAM,YAAY,OAA0B,KAAK;CACjD,MAAM,EAAE,cAAc,iBAAiB,UAAU;AAEjD,QACE,oBAAC,UAAA;EAAO,GAAI;EAAO,WAAW,OAAO;EAAkB,KAAK;YAC1D,qBAAC,QAAA;GACC,WAAW,GAAW,OAAO,yBAAyB,GACnD,OAAO,mCAAmC,WAC5C,CAAC;cAEF,oBAAC,cAAA;IAAK,SAAS;IAAmB;IAAW,MAAM,SAAS;KAAU,EACtE,oBAAC,QAAA;IAAK,WAAW,OAAO;cAAyB,gBAAgB;KAAwB,CAAA;IACpF;GACA;;AC1Cb,IAAA,yBD8Ce"}
@@ -0,0 +1,14 @@
1
+ import cn from "classnames";
2
+ import { jsxs } from "react/jsx-runtime";
3
+ import styles from "./components/Filter/FilterButtonAndChipsWrapper/styles.module.scss";
4
+ var FilterButtonAndChipsWrapper = ({ filterButtonComponent, filterChips, testId }) => {
5
+ return /* @__PURE__ */ jsxs("div", {
6
+ className: cn(styles["filter-chip-bar"]),
7
+ "data-testid": testId,
8
+ children: [filterButtonComponent, filterChips]
9
+ });
10
+ };
11
+ var FilterButtonAndChipsWrapper_default$1 = FilterButtonAndChipsWrapper;
12
+ export { FilterButtonAndChipsWrapper_default$1 as t };
13
+
14
+ //# sourceMappingURL=FilterButtonAndChipsWrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterButtonAndChipsWrapper.js","names":["FilterButtonAndChipsWrapper: React.FC<FilterButtonAndChipsWrapperProps>"],"sources":["../src/components/Filter/FilterButtonAndChipsWrapper/FilterButtonAndChipsWrapper.tsx","../src/components/Filter/FilterButtonAndChipsWrapper/index.ts"],"sourcesContent":["import type React from 'react';\n\nimport classNames from 'classnames';\n\nimport styles from './styles.module.scss';\n\nexport interface FilterButtonAndChipsWrapperProps {\n /** FilterButton content area */\n filterButtonComponent: React.ReactNode;\n /** Content area for rendering filter chips */\n filterChips: React.ReactNode[];\n /** test id that is placed on the wrapper */\n testId?: string;\n}\n\nconst FilterButtonAndChipsWrapper: React.FC<FilterButtonAndChipsWrapperProps> = ({ filterButtonComponent, filterChips, testId }) => {\n return (\n <div className={classNames(styles['filter-chip-bar'])} data-testid={testId}>\n {filterButtonComponent}\n {filterChips}\n </div>\n );\n};\n\nexport default FilterButtonAndChipsWrapper;\n","import FilterButtonAndChipsWrapper from './FilterButtonAndChipsWrapper';\nexport * from './FilterButtonAndChipsWrapper';\nexport default FilterButtonAndChipsWrapper;\n"],"mappings":";;;AAeA,IAAMA,+BAA2E,EAAE,uBAAuB,aAAa,aAAa;AAClI,QACE,qBAAC,OAAA;EAAI,WAAW,GAAW,OAAO,mBAAmB;EAAE,eAAa;aACjE,uBACA,YAAA;GACG;;AClBV,IAAA,wCDsBe"}
@@ -0,0 +1,91 @@
1
+ import { s as LanguageLocales } from "./constants2.js";
2
+ import { n as useLanguage } from "./useLanguage.js";
3
+ import { t as Button_default } from "./Button.js";
4
+ import { t as formatResource } from "./resource.js";
5
+ import { t as DrawerNavigation_default } from "./DrawerNavigation.js";
6
+ import { t as getResources } from "./resourceHelper.js";
7
+ import { Children, isValidElement } from "react";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ import styles from "./components/Filter/FilterDrawer/styles.module.scss";
10
+ function FilterDrawerOverview(_props) {
11
+ return null;
12
+ }
13
+ function FilterDrawerView(_props) {
14
+ return null;
15
+ }
16
+ function FilterDrawer({ drawer, onClose, footer, onReset, resultCount, resources, children }) {
17
+ const { language } = useLanguage(LanguageLocales.NORWEGIAN);
18
+ const mergedResources = {
19
+ ...getResources(language),
20
+ ...resources
21
+ };
22
+ const handleClose = () => {
23
+ if (onClose) onClose();
24
+ else drawer.close();
25
+ };
26
+ const showResultButtonText = resultCount !== void 0 ? formatResource(mergedResources.showButtonText, resultCount) : mergedResources.showButtonText;
27
+ const defaultResetButton = onReset && /* @__PURE__ */ jsx(Button_default, {
28
+ onClick: onReset,
29
+ variant: "borderless",
30
+ children: mergedResources.resetButtonText
31
+ });
32
+ const defaultShowResultsButton = showResultButtonText && /* @__PURE__ */ jsx(Button_default, {
33
+ onClick: handleClose,
34
+ children: showResultButtonText
35
+ });
36
+ const defaultFooter = onReset || showResultButtonText ? /* @__PURE__ */ jsxs("div", {
37
+ className: styles["filter-drawer__footer"],
38
+ children: [defaultResetButton, defaultShowResultsButton]
39
+ }) : void 0;
40
+ const fallbackFooter = footer ?? defaultFooter;
41
+ const generateViewFooter = (viewOnReset, viewOnClose, noResetButton) => {
42
+ if (!viewOnReset && !viewOnClose && !noResetButton) return;
43
+ return /* @__PURE__ */ jsxs("div", {
44
+ className: styles["filter-drawer__footer"],
45
+ children: [!noResetButton && (viewOnReset ? /* @__PURE__ */ jsx(Button_default, {
46
+ onClick: viewOnReset,
47
+ variant: "borderless",
48
+ children: mergedResources.resetButtonText
49
+ }) : defaultResetButton), viewOnClose ? /* @__PURE__ */ jsx(Button_default, {
50
+ onClick: viewOnClose,
51
+ children: showResultButtonText ?? mergedResources.showButtonText
52
+ }) : defaultShowResultsButton]
53
+ });
54
+ };
55
+ const processedChildren = Children.map(children, (child) => {
56
+ if (isValidElement(child) && child.type === FilterDrawerOverview) {
57
+ const viewFooter = generateViewFooter(child.props.onReset, child.props.onClose, child.props.noResetButton) ?? child.props.footer ?? fallbackFooter;
58
+ return /* @__PURE__ */ jsx(DrawerNavigation_default.View, {
59
+ id: "overview",
60
+ home: true,
61
+ title: child.props.title,
62
+ children: child.props.children,
63
+ drawerContentClassname: styles["filter-drawer__view"],
64
+ footer: viewFooter
65
+ });
66
+ }
67
+ if (isValidElement(child)) {
68
+ const viewFooter = generateViewFooter(child.props.onReset, child.props.onClose, child.props.noResetButton) ?? child.props.footer ?? fallbackFooter;
69
+ return /* @__PURE__ */ jsx(DrawerNavigation_default.View, {
70
+ id: child.props.id,
71
+ title: child.props.title,
72
+ children: child.props.children,
73
+ drawerContentClassname: styles["filter-drawer__view"],
74
+ footer: viewFooter
75
+ });
76
+ } else return child;
77
+ });
78
+ return /* @__PURE__ */ jsx(DrawerNavigation_default, {
79
+ isOpen: drawer.isOpen,
80
+ initialView: drawer.initialView,
81
+ onCloseButton: handleClose,
82
+ footer: footer ?? defaultFooter,
83
+ children: processedChildren
84
+ });
85
+ }
86
+ FilterDrawer.Overview = FilterDrawerOverview;
87
+ FilterDrawer.View = FilterDrawerView;
88
+ var FilterDrawer_default$1 = FilterDrawer;
89
+ export { FilterDrawer_default$1 as t };
90
+
91
+ //# sourceMappingURL=FilterDrawer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterDrawer.js","names":[],"sources":["../src/components/Filter/FilterDrawer/FilterDrawer.tsx","../src/components/Filter/FilterDrawer/index.ts"],"sourcesContent":["import { Children, isValidElement } from 'react';\n\nimport type { HNDesignsystemFilter } from '../../../resources/Resources';\nimport type { UseFilterDrawerReturn } from '../useFilterDrawer';\n\nimport { LanguageLocales } from '../../../constants';\nimport { useLanguage } from '../../../hooks/useLanguage';\nimport { formatResource } from '../../../utils/resource';\nimport Button from '../../Button';\nimport DrawerNavigation, { type DrawerViewProps } from '../DrawerNavigation/DrawerNavigation';\nimport { getResources } from '../resourceHelper';\n\nimport styles from './styles.module.scss';\n\nexport interface FilterDrawerProps<ViewId extends string = string> {\n /** The drawer state from useFilterDrawer */\n drawer: UseFilterDrawerReturn<ViewId>;\n /** Additional callback when the drawer closes (drawer.close() is always called automatically) */\n onClose?: () => void;\n /** Fully custom footer — overrides the default footer built from onReset/resultText */\n footer?: React.ReactNode;\n /** If provided, shows a \"Nullstill filter\" button in the default footer */\n onReset?: () => void;\n /** If provided, shows a result count button (e.g. \"Vis 5 treff\") that closes the drawer */\n resultCount?: number;\n /** Resources for the component */\n resources?: Partial<HNDesignsystemFilter>;\n /** DrawerNavigation.View children defining the overview and filter views */\n children: React.ReactNode;\n}\n\nexport interface FilterDrawerViewProps extends DrawerViewProps {\n /** Hide reset button for view */\n noResetButton?: boolean;\n /** View specific close handler */\n onClose?: () => void;\n /** View specific reset handler */\n onReset?: () => void;\n}\n\n/**\n * Never rendered directly — FilterDrawer reads its props and creates a DrawerNavigation.View\n * with id=\"overview\" and home=true.\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction FilterDrawerOverview(_props: Omit<DrawerViewProps, 'id' | 'home'>): React.ReactNode {\n return null;\n}\n\n/**\n * Never rendered directly — FilterDrawer reads its props and creates a FilterDrawerView\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction FilterDrawerView(_props: FilterDrawerViewProps): React.ReactNode {\n // DrawerView is never rendered directly — DrawerNavigation reads its props\n return null;\n}\n\nfunction FilterDrawer<ViewId extends string>({\n drawer,\n onClose,\n footer,\n onReset,\n resultCount,\n resources,\n children,\n}: FilterDrawerProps<ViewId>): React.ReactNode {\n const { language } = useLanguage<LanguageLocales>(LanguageLocales.NORWEGIAN);\n const defaultResources = getResources(language);\n const mergedResources = {\n ...defaultResources,\n ...resources,\n };\n\n const handleClose = (): void => {\n if (onClose) {\n onClose();\n } else {\n drawer.close();\n }\n };\n\n const showResultButtonText =\n resultCount !== undefined ? formatResource(mergedResources.showButtonText, resultCount) : mergedResources.showButtonText;\n\n const defaultResetButton = onReset && (\n <Button onClick={onReset} variant=\"borderless\">\n {mergedResources.resetButtonText}\n </Button>\n );\n const defaultShowResultsButton = showResultButtonText && <Button onClick={handleClose}>{showResultButtonText}</Button>;\n\n const defaultFooter =\n onReset || showResultButtonText ? (\n <div className={styles['filter-drawer__footer']}>\n {defaultResetButton}\n {defaultShowResultsButton}\n </div>\n ) : undefined;\n\n const fallbackFooter = footer ?? defaultFooter;\n\n const generateViewFooter = (viewOnReset?: () => void, viewOnClose?: () => void, noResetButton?: boolean): React.ReactNode => {\n if (!viewOnReset && !viewOnClose && !noResetButton) {\n return undefined;\n }\n\n return (\n <div className={styles['filter-drawer__footer']}>\n {!noResetButton &&\n (viewOnReset ? (\n <Button onClick={viewOnReset} variant=\"borderless\">\n {mergedResources.resetButtonText}\n </Button>\n ) : (\n defaultResetButton\n ))}\n {viewOnClose ? (\n <Button onClick={viewOnClose}>{showResultButtonText ?? mergedResources.showButtonText}</Button>\n ) : (\n defaultShowResultsButton\n )}\n </div>\n );\n };\n\n const processedChildren = Children.map(children, child => {\n if (isValidElement<Omit<FilterDrawerViewProps, 'id' | 'home'>>(child) && child.type === FilterDrawerOverview) {\n const viewDefaultFooter = generateViewFooter(child.props.onReset, child.props.onClose, child.props.noResetButton);\n const viewFooter = viewDefaultFooter ?? child.props.footer ?? fallbackFooter;\n return (\n <DrawerNavigation.View\n id=\"overview\"\n home\n title={child.props.title}\n children={child.props.children}\n drawerContentClassname={styles['filter-drawer__view']}\n footer={viewFooter}\n />\n );\n }\n if (isValidElement<FilterDrawerViewProps>(child)) {\n const viewDefaultFooter = generateViewFooter(child.props.onReset, child.props.onClose, child.props.noResetButton);\n const viewFooter = viewDefaultFooter ?? child.props.footer ?? fallbackFooter;\n return (\n <DrawerNavigation.View\n id={child.props.id}\n title={child.props.title}\n children={child.props.children}\n drawerContentClassname={styles['filter-drawer__view']}\n footer={viewFooter}\n />\n );\n } else {\n return child;\n }\n });\n\n return (\n <DrawerNavigation isOpen={drawer.isOpen} initialView={drawer.initialView} onCloseButton={handleClose} footer={footer ?? defaultFooter}>\n {processedChildren}\n </DrawerNavigation>\n );\n}\n\nFilterDrawer.Overview = FilterDrawerOverview;\nFilterDrawer.View = FilterDrawerView;\n\nexport default FilterDrawer;\n","import FilterDrawer from './FilterDrawer';\nexport * from './FilterDrawer';\nexport default FilterDrawer;\n"],"mappings":";;;;;;;;;AA6CA,SAAS,qBAAqB,QAA+D;AAC3F,QAAO;;AAOT,SAAS,iBAAiB,QAAgD;AAExE,QAAO;;AAGT,SAAS,aAAoC,EAC3C,QACA,SACA,QACA,SACA,aACA,WACA,YAC6C;CAC7C,MAAM,EAAE,aAAa,YAA6B,gBAAgB,UAAU;CAE5E,MAAM,kBAAkB;EACtB,GAFuB,aAAa,SAAS;EAG7C,GAAG;EACJ;CAED,MAAM,oBAA0B;AAC9B,MAAI,QACF,UAAS;MAET,QAAO,OAAO;;CAIlB,MAAM,uBACJ,gBAAgB,KAAA,IAAY,eAAe,gBAAgB,gBAAgB,YAAY,GAAG,gBAAgB;CAE5G,MAAM,qBAAqB,WACzB,oBAAC,gBAAA;EAAO,SAAS;EAAS,SAAQ;YAC/B,gBAAgB;GACV;CAEX,MAAM,2BAA2B,wBAAwB,oBAAC,gBAAA;EAAO,SAAS;YAAc;GAA8B;CAEtH,MAAM,gBACJ,WAAW,uBACT,qBAAC,OAAA;EAAI,WAAW,OAAO;aACpB,oBACA,yBAAA;GACG,GACJ,KAAA;CAEN,MAAM,iBAAiB,UAAU;CAEjC,MAAM,sBAAsB,aAA0B,aAA0B,kBAA6C;AAC3H,MAAI,CAAC,eAAe,CAAC,eAAe,CAAC,cACnC;AAGF,SACE,qBAAC,OAAA;GAAI,WAAW,OAAO;cACpB,CAAC,kBACC,cACC,oBAAC,gBAAA;IAAO,SAAS;IAAa,SAAQ;cACnC,gBAAgB;KACV,GAET,qBAEH,cACC,oBAAC,gBAAA;IAAO,SAAS;cAAc,wBAAwB,gBAAgB;KAAwB,GAE/F,yBAAA;IAEE;;CAIV,MAAM,oBAAoB,SAAS,IAAI,WAAU,UAAS;AACxD,MAAI,eAA2D,MAAM,IAAI,MAAM,SAAS,sBAAsB;GAE5G,MAAM,aADoB,mBAAmB,MAAM,MAAM,SAAS,MAAM,MAAM,SAAS,MAAM,MAAM,cAAc,IACzE,MAAM,MAAM,UAAU;AAC9D,UACE,oBAAC,yBAAiB,MAAA;IAChB,IAAG;IACH,MAAA;IACA,OAAO,MAAM,MAAM;IACnB,UAAU,MAAM,MAAM;IACtB,wBAAwB,OAAO;IAC/B,QAAQ;KACR;;AAGN,MAAI,eAAsC,MAAM,EAAE;GAEhD,MAAM,aADoB,mBAAmB,MAAM,MAAM,SAAS,MAAM,MAAM,SAAS,MAAM,MAAM,cAAc,IACzE,MAAM,MAAM,UAAU;AAC9D,UACE,oBAAC,yBAAiB,MAAA;IAChB,IAAI,MAAM,MAAM;IAChB,OAAO,MAAM,MAAM;IACnB,UAAU,MAAM,MAAM;IACtB,wBAAwB,OAAO;IAC/B,QAAQ;KACR;QAGJ,QAAO;GAET;AAEF,QACE,oBAAC,0BAAA;EAAiB,QAAQ,OAAO;EAAQ,aAAa,OAAO;EAAa,eAAe;EAAa,QAAQ,UAAU;YACrH;GACgB;;AAIvB,aAAa,WAAW;AACxB,aAAa,OAAO;ACpKpB,IAAA,yBDsKe"}
@@ -0,0 +1,61 @@
1
+ import { a as IconSize, n as AnalyticsId } from "./constants2.js";
2
+ import { t as usePseudoClasses } from "./usePseudoClasses.js";
3
+ import { t as Icon_default } from "./Icon.js";
4
+ import { t as ChevronRight_default } from "./ChevronRight.js";
5
+ import cn from "classnames";
6
+ import React from "react";
7
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
+ import styles from "./components/Filter/FilterLinkList/FilterLinkList.module.scss";
9
+ const Link = (props) => {
10
+ const { children, title, chips, className = "", linkRef, testId, ref, ...restProps } = props;
11
+ const { refObject, isHovered } = usePseudoClasses(linkRef);
12
+ const liClasses = cn(styles["link-list__item"]);
13
+ const linkClasses = cn(styles["link-list__button"], className);
14
+ return /* @__PURE__ */ jsx("li", {
15
+ className: liClasses,
16
+ ref,
17
+ "data-testid": testId,
18
+ "data-analyticsid": AnalyticsId.Link,
19
+ children: /* @__PURE__ */ jsxs("button", {
20
+ className: linkClasses,
21
+ ref: refObject,
22
+ type: "button",
23
+ ...restProps,
24
+ children: [/* @__PURE__ */ jsx("div", {
25
+ className: styles["link-list__button__content"],
26
+ children: title ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", { children: title }), chips && chips.length > 0 && /* @__PURE__ */ jsx("div", {
27
+ className: styles["link-list__chip-list"],
28
+ children: chips.map((chip) => /* @__PURE__ */ jsx("span", {
29
+ className: styles["link-list__chip"],
30
+ children: chip
31
+ }, chip))
32
+ })] }) : /* @__PURE__ */ jsx(Fragment, { children })
33
+ }), /* @__PURE__ */ jsx(Icon_default, {
34
+ svgIcon: ChevronRight_default,
35
+ isHovered,
36
+ size: IconSize.XSmall,
37
+ color: "var(--color-action-graphics-onlight)"
38
+ })]
39
+ })
40
+ });
41
+ };
42
+ var LinkListComponent = (props) => {
43
+ const { children, className = "", testId, ref } = props;
44
+ return /* @__PURE__ */ jsx("ul", {
45
+ ref,
46
+ className: cn(styles["link-list"], className),
47
+ "data-testid": testId,
48
+ "data-analyticsid": AnalyticsId.LinkList,
49
+ children: React.Children.map(children, (child) => {
50
+ if (React.isValidElement(child) && child.type === Link) return React.cloneElement(child);
51
+ })
52
+ });
53
+ };
54
+ const FilterLinkList = LinkListComponent;
55
+ FilterLinkList.displayName = "FilterLinkList";
56
+ FilterLinkList.Link = Link;
57
+ Link.displayName = "FilterLinkList.Link";
58
+ var FilterLinkList_default = FilterLinkList;
59
+ export { FilterLinkList_default as n, Link as r, FilterLinkList as t };
60
+
61
+ //# sourceMappingURL=FilterLinkList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterLinkList.js","names":["Link: LinkType","LinkListComponent: React.FC<LinkListProps>"],"sources":["../src/components/Filter/FilterLinkList/FilterLinkList.tsx"],"sourcesContent":["import React from 'react';\n\nimport cn from 'classnames';\n\nimport { AnalyticsId, IconSize } from '../../../constants';\nimport { usePseudoClasses } from '../../../hooks/usePseudoClasses';\nimport Icon from '../../Icon';\nimport ChevronRight from '../../Icons/ChevronRight';\n\nimport styles from './FilterLinkList.module.scss';\n\nexport type LinkType = React.FC<LinkProps>;\n\nexport interface CompoundComponent extends React.FC<LinkListProps> {\n Link: LinkType;\n}\n\nexport interface LinkListProps {\n /** Items in the LinkList */\n children: React.ReactNode;\n /** Adds custom classes to the element. */\n className?: string;\n /** Sets the data-testid attribute. */\n testId?: string;\n /** Ref passed to the ul element */\n ref?: React.Ref<HTMLUListElement | null>;\n}\n\ntype Modify<T, R> = Omit<T, keyof R> & R;\n\nexport type LinkProps = Modify<\n React.HTMLAttributes<HTMLAnchorElement | HTMLButtonElement>,\n {\n /** If needed children will be content instead of title and chips. Use only in edge cases */\n children?: React.ReactNode;\n /** Title text on link element */\n title?: string;\n /** Texts rendered inside non-interactive chips on link element */\n chips?: string[];\n /** Custom classname for link element */\n className?: string;\n /** Ref for button */\n linkRef?: React.RefObject<HTMLButtonElement | null>;\n /** Sets the data-testid attribute. */\n testId?: string;\n /** Ref passed to the list item element */\n ref?: React.Ref<HTMLLIElement | null>;\n }\n>;\n\nexport const Link: LinkType = (props: LinkProps) => {\n const { children, title, chips, className = '', linkRef, testId, ref, ...restProps } = props;\n const { refObject, isHovered } = usePseudoClasses<HTMLButtonElement | null>(linkRef);\n\n const liClasses = cn(styles['link-list__item']);\n const linkClasses = cn(styles['link-list__button'], className);\n\n return (\n <li className={liClasses} ref={ref} data-testid={testId} data-analyticsid={AnalyticsId.Link}>\n <button className={linkClasses} ref={refObject as React.RefObject<HTMLButtonElement>} type=\"button\" {...restProps}>\n <div className={styles['link-list__button__content']}>\n {title ? (\n <>\n <span>{title}</span>\n {chips && chips.length > 0 && (\n <div className={styles['link-list__chip-list']}>\n {chips.map(chip => (\n <span className={styles['link-list__chip']} key={chip}>\n {chip}\n </span>\n ))}\n </div>\n )}\n </>\n ) : (\n <>{children}</>\n )}\n </div>\n <Icon svgIcon={ChevronRight} isHovered={isHovered} size={IconSize.XSmall} color={'var(--color-action-graphics-onlight)'} />\n </button>\n </li>\n );\n};\n\nconst LinkListComponent: React.FC<LinkListProps> = (props: LinkListProps) => {\n const { children, className = '', testId, ref } = props;\n\n const listClassNames = cn(styles['link-list'], className);\n\n return (\n <ul ref={ref} className={listClassNames} data-testid={testId} data-analyticsid={AnalyticsId.LinkList}>\n {React.Children.map(children, (child: React.ReactNode) => {\n if (React.isValidElement<LinkProps>(child) && child.type === Link) {\n return React.cloneElement(child);\n }\n })}\n </ul>\n );\n};\n\nexport const FilterLinkList = LinkListComponent as CompoundComponent;\n\nFilterLinkList.displayName = 'FilterLinkList';\nFilterLinkList.Link = Link;\nLink.displayName = 'FilterLinkList.Link';\n\nexport default FilterLinkList;\n"],"mappings":";;;;;;;;AAkDA,MAAaA,QAAkB,UAAqB;CAClD,MAAM,EAAE,UAAU,OAAO,OAAO,YAAY,IAAI,SAAS,QAAQ,KAAK,GAAG,cAAc;CACvF,MAAM,EAAE,WAAW,cAAc,iBAA2C,QAAQ;CAEpF,MAAM,YAAY,GAAG,OAAO,mBAAmB;CAC/C,MAAM,cAAc,GAAG,OAAO,sBAAsB,UAAU;AAE9D,QACE,oBAAC,MAAA;EAAG,WAAW;EAAgB;EAAK,eAAa;EAAQ,oBAAkB,YAAY;YACrF,qBAAC,UAAA;GAAO,WAAW;GAAa,KAAK;GAAiD,MAAK;GAAS,GAAI;cACtG,oBAAC,OAAA;IAAI,WAAW,OAAO;cACpB,QACC,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,QAAA,EAAA,UAAM,OAAA,CAAa,EACnB,SAAS,MAAM,SAAS,KACvB,oBAAC,OAAA;KAAI,WAAW,OAAO;eACpB,MAAM,KAAI,SACT,oBAAC,QAAA;MAAK,WAAW,OAAO;gBACrB;QAD8C,KAE1C,CACP;MACE,CAAA,EAAA,CAEP,GAEH,oBAAA,UAAA,EAAG,UAAA,CAAY;KAEb,EACN,oBAAC,cAAA;IAAK,SAAS;IAAyB;IAAW,MAAM,SAAS;IAAQ,OAAO;KAA0C,CAAA;IACpH;GACN;;AAIT,IAAMC,qBAA8C,UAAyB;CAC3E,MAAM,EAAE,UAAU,YAAY,IAAI,QAAQ,QAAQ;AAIlD,QACE,oBAAC,MAAA;EAAQ;EAAK,WAHO,GAAG,OAAO,cAAc,UAAU;EAGd,eAAa;EAAQ,oBAAkB,YAAY;YACzF,MAAM,SAAS,IAAI,WAAW,UAA2B;AACxD,OAAI,MAAM,eAA0B,MAAM,IAAI,MAAM,SAAS,KAC3D,QAAO,MAAM,aAAa,MAAM;IAElC;GACC;;AAIT,MAAa,iBAAiB;AAE9B,eAAe,cAAc;AAC7B,eAAe,OAAO;AACtB,KAAK,cAAc;AAEnB,IAAA,yBAAe"}
@@ -0,0 +1,5 @@
1
+ import { n as FilterLinkList_default } from "./FilterLinkList.js";
2
+ var FilterLinkList_default$1 = FilterLinkList_default;
3
+ export { FilterLinkList_default$1 as t };
4
+
5
+ //# sourceMappingURL=FilterLinkList2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterLinkList2.js","names":[],"sources":["../src/components/Filter/FilterLinkList/index.ts"],"sourcesContent":["import FilterLinkList from './FilterLinkList';\nexport * from './FilterLinkList';\nexport default FilterLinkList;\n"],"mappings":";AAEA,IAAA,2BAAe"}
@@ -0,0 +1,22 @@
1
+ import { r as useDrawerNavigation } from "./DrawerNavigation.js";
2
+ import { n as FilterLinkList_default } from "./FilterLinkList.js";
3
+ import { jsx } from "react/jsx-runtime";
4
+ function FilterOverviewLinkList({ filter, getLabel, links }) {
5
+ const { goToView } = useDrawerNavigation();
6
+ return /* @__PURE__ */ jsx(FilterLinkList_default, { children: links.map(({ filterKey, title, viewId }) => {
7
+ const raw = filter.filters[filterKey];
8
+ let chips;
9
+ if (Array.isArray(raw)) chips = raw.map((v) => getLabel(filterKey, v));
10
+ else if (raw !== void 0 && raw !== null) chips = [getLabel(filterKey, raw)];
11
+ else chips = [];
12
+ return /* @__PURE__ */ jsx(FilterLinkList_default.Link, {
13
+ title,
14
+ chips,
15
+ onClick: () => goToView(viewId ?? filterKey)
16
+ }, filterKey);
17
+ }) });
18
+ }
19
+ var FilterOverviewLinkList_default$1 = FilterOverviewLinkList;
20
+ export { FilterOverviewLinkList_default$1 as t };
21
+
22
+ //# sourceMappingURL=FilterOverviewLinkList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterOverviewLinkList.js","names":["chips: string[]"],"sources":["../src/components/Filter/FilterOverviewLinkList/FilterOverviewLinkList.tsx","../src/components/Filter/FilterOverviewLinkList/index.ts"],"sourcesContent":["import type { FilterValues, UseFilterReturn } from '../useFilter';\n\nimport { useDrawerNavigation } from '../DrawerNavigation';\nimport FilterLinkList from '../FilterLinkList/FilterLinkList';\n\nexport interface FilterOverviewLink {\n /** The filter key to read values from */\n filterKey: string;\n /** Display title for the link */\n title: string;\n /** View ID to navigate to when clicked. Defaults to filterKey */\n viewId?: string;\n}\n\nexport interface FilterOverviewLinkListProps<T extends FilterValues> {\n /** The filter instance from useFilter */\n filter: UseFilterReturn<T>;\n /** Look up the display label for a filter key + value */\n getLabel: (key: keyof T, value: unknown) => string;\n /** Configuration for which filter keys to show as links */\n links: FilterOverviewLink[];\n}\n\nfunction FilterOverviewLinkList<T extends FilterValues>({ filter, getLabel, links }: FilterOverviewLinkListProps<T>): React.ReactNode {\n const { goToView } = useDrawerNavigation();\n\n return (\n <FilterLinkList>\n {links.map(({ filterKey, title, viewId }) => {\n const raw = filter.filters[filterKey as keyof T];\n\n let chips: string[];\n if (Array.isArray(raw)) {\n chips = raw.map(v => getLabel(filterKey as keyof T, v));\n } else if (raw !== undefined && raw !== null) {\n chips = [getLabel(filterKey as keyof T, raw)];\n } else {\n chips = [];\n }\n\n return <FilterLinkList.Link key={filterKey} title={title} chips={chips} onClick={() => goToView(viewId ?? filterKey)} />;\n })}\n </FilterLinkList>\n );\n}\n\nexport default FilterOverviewLinkList;\n","import FilterOverviewLinkList from './FilterOverviewLinkList';\nexport * from './FilterOverviewLinkList';\nexport default FilterOverviewLinkList;\n"],"mappings":";;;AAuBA,SAAS,uBAA+C,EAAE,QAAQ,UAAU,SAA0D;CACpI,MAAM,EAAE,aAAa,qBAAqB;AAE1C,QACE,oBAAC,wBAAA,EAAA,UACE,MAAM,KAAK,EAAE,WAAW,OAAO,aAAa;EAC3C,MAAM,MAAM,OAAO,QAAQ;EAE3B,IAAIA;AACJ,MAAI,MAAM,QAAQ,IAAI,CACpB,SAAQ,IAAI,KAAI,MAAK,SAAS,WAAsB,EAAE,CAAC;WAC9C,QAAQ,KAAA,KAAa,QAAQ,KACtC,SAAQ,CAAC,SAAS,WAAsB,IAAI,CAAC;MAE7C,SAAQ,EAAE;AAGZ,SAAO,oBAAC,uBAAe,MAAA;GAA4B;GAAc;GAAO,eAAe,SAAS,UAAU,UAAU;KAAnF,UAAuF;GACxH,EAAA,CACa;;ACxCrB,IAAA,mCD4Ce"}
@@ -0,0 +1,16 @@
1
+ import { t as FilterSearch_default } from "./FilterSearch.js";
2
+ import cn from "classnames";
3
+ import { jsx } from "react/jsx-runtime";
4
+ import styles from "./components/Filter/FilterOverviewSearch/styles.module.scss";
5
+ var FilterOverviewSearch = (props) => {
6
+ const { wrapperClassName, testId, ...filterSearchProps } = props;
7
+ return /* @__PURE__ */ jsx("div", {
8
+ className: cn(styles["filter-overview-search"], wrapperClassName),
9
+ "data-testid": testId,
10
+ children: /* @__PURE__ */ jsx(FilterSearch_default, { ...filterSearchProps })
11
+ });
12
+ };
13
+ var FilterOverviewSearch_default$1 = FilterOverviewSearch;
14
+ export { FilterOverviewSearch_default$1 as t };
15
+
16
+ //# sourceMappingURL=FilterOverviewSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterOverviewSearch.js","names":["FilterOverviewSearch: React.FC<FilterOverviewSearchProps>"],"sources":["../src/components/Filter/FilterOverviewSearch/FilterOverviewSearch.tsx","../src/components/Filter/FilterOverviewSearch/index.ts"],"sourcesContent":["import cn from 'classnames';\n\nimport type { FilterSearchProps } from '../FilterSearch/FilterSearch';\n\nimport FilterSearch from '../FilterSearch/FilterSearch';\n\nimport styles from './styles.module.scss';\n\nexport interface FilterOverviewSearchProps extends FilterSearchProps {\n /** Adds custom classes to the wrapper element. */\n wrapperClassName?: string;\n /** Sets the data-testid attribute. */\n testId?: string;\n}\n\nconst FilterOverviewSearch: React.FC<FilterOverviewSearchProps> = props => {\n const { wrapperClassName, testId, ...filterSearchProps } = props;\n\n return (\n <div className={cn(styles['filter-overview-search'], wrapperClassName)} data-testid={testId}>\n <FilterSearch {...filterSearchProps} />\n </div>\n );\n};\n\nexport default FilterOverviewSearch;\n","import FilterOverviewSearch from './FilterOverviewSearch';\nexport * from './FilterOverviewSearch';\nexport default FilterOverviewSearch;\n"],"mappings":";;;;AAeA,IAAMA,wBAA4D,UAAS;CACzE,MAAM,EAAE,kBAAkB,QAAQ,GAAG,sBAAsB;AAE3D,QACE,oBAAC,OAAA;EAAI,WAAW,GAAG,OAAO,2BAA2B,iBAAiB;EAAE,eAAa;YACnF,oBAAC,sBAAA,EAAa,GAAI,mBAAA,CAAqB;GACnC;;ACnBV,IAAA,iCDuBe"}
@@ -0,0 +1,19 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import styles from "./components/Filter/FilterResultCountAndSortWrapper/styles.module.scss";
3
+ var FilterResultCountAndSortWrapper = (props) => {
4
+ const { resultCount, sortComponent } = props;
5
+ return /* @__PURE__ */ jsxs("div", {
6
+ className: styles["filter-result-count-and-sort-wrapper"],
7
+ children: [/* @__PURE__ */ jsx("span", {
8
+ className: styles["filter-result-count-and-sort-wrapper__count"],
9
+ children: resultCount
10
+ }), /* @__PURE__ */ jsx("span", {
11
+ className: styles["filter-result-count-and-sort-wrapper__sort"],
12
+ children: sortComponent
13
+ })]
14
+ });
15
+ };
16
+ var FilterResultCountAndSortWrapper_default$1 = FilterResultCountAndSortWrapper;
17
+ export { FilterResultCountAndSortWrapper_default$1 as t };
18
+
19
+ //# sourceMappingURL=FilterResultCountAndSortWrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterResultCountAndSortWrapper.js","names":["FilterResultCountAndSortWrapper: React.FC<FilterResultCountAndSortWrapper>"],"sources":["../src/components/Filter/FilterResultCountAndSortWrapper/FilterResultCountAndSortWrapper.tsx","../src/components/Filter/FilterResultCountAndSortWrapper/index.ts"],"sourcesContent":["import styles from './styles.module.scss';\n\nexport interface FilterResultCountAndSortWrapper {\n /** Result count content area */\n resultCount?: React.ReactNode;\n /** FilterSort content area */\n sortComponent?: React.ReactNode;\n}\n\nconst FilterResultCountAndSortWrapper: React.FC<FilterResultCountAndSortWrapper> = props => {\n const { resultCount, sortComponent } = props;\n\n return (\n <div className={styles['filter-result-count-and-sort-wrapper']}>\n <span className={styles['filter-result-count-and-sort-wrapper__count']}>{resultCount}</span>\n <span className={styles['filter-result-count-and-sort-wrapper__sort']}>{sortComponent}</span>\n </div>\n );\n};\n\nexport default FilterResultCountAndSortWrapper;\n","import FilterResultCountAndSortWrapper from './FilterResultCountAndSortWrapper';\nexport * from './FilterResultCountAndSortWrapper';\nexport default FilterResultCountAndSortWrapper;\n"],"mappings":";;AASA,IAAMA,mCAA6E,UAAS;CAC1F,MAAM,EAAE,aAAa,kBAAkB;AAEvC,QACE,qBAAC,OAAA;EAAI,WAAW,OAAO;aACrB,oBAAC,QAAA;GAAK,WAAW,OAAO;aAAiD;IAAmB,EAC5F,oBAAC,QAAA;GAAK,WAAW,OAAO;aAAgD;IAAqB,CAAA;GACzF;;ACdV,IAAA,4CDkBe"}
@@ -0,0 +1,87 @@
1
+ import { a as IconSize, s as LanguageLocales } from "./constants2.js";
2
+ import { t as usePseudoClasses } from "./usePseudoClasses.js";
3
+ import { n as mergeRefs } from "./refs.js";
4
+ import { t as Icon_default } from "./Icon.js";
5
+ import { n as useLanguage } from "./useLanguage.js";
6
+ import { t as useIsMobileBreakpoint } from "./useIsMobileBreakpoint.js";
7
+ import { t as X_default } from "./X.js";
8
+ import { t as getResources } from "./resourceHelper.js";
9
+ import { t as Search_default } from "./Search.js";
10
+ import cn from "classnames";
11
+ import { useRef } from "react";
12
+ import { jsx, jsxs } from "react/jsx-runtime";
13
+ import styles from "./components/Filter/FilterSearch/styles.module.scss";
14
+ var FilterSearch = (props) => {
15
+ const { className, value, onChange, resources, buttonProps, clearButtonProps, ref, ...inputProps } = props;
16
+ const inputRef = useRef(null);
17
+ const inputWrapperRef = useRef(null);
18
+ const { isHovered: isWrapperHovered } = usePseudoClasses(inputWrapperRef);
19
+ const buttonRef = useRef(null);
20
+ const { isHovered: isButtonHovered } = usePseudoClasses(buttonRef);
21
+ const clearButtonRef = useRef(null);
22
+ const { isHovered: isClearButtonHovered } = usePseudoClasses(clearButtonRef);
23
+ const isMobile = useIsMobileBreakpoint();
24
+ const { language } = useLanguage(LanguageLocales.NORWEGIAN);
25
+ const mergedResources = {
26
+ ...getResources(language),
27
+ ...resources
28
+ };
29
+ const inputHasValue = !!value;
30
+ return /* @__PURE__ */ jsxs("div", {
31
+ className: cn(styles["filter-search__wrapper"], className),
32
+ children: [
33
+ /* @__PURE__ */ jsxs("label", {
34
+ className: styles["filter-search__input-wrapper"],
35
+ ref: inputWrapperRef,
36
+ children: [/* @__PURE__ */ jsx("span", {
37
+ className: styles["filter-search__input__label"],
38
+ children: inputProps["aria-label"] ?? mergedResources.searchPlaceholder
39
+ }), /* @__PURE__ */ jsx("input", {
40
+ ...inputProps,
41
+ ref: mergeRefs([inputRef, ref]),
42
+ value,
43
+ onChange,
44
+ className: cn(styles["filter-search__input"], { [styles["filter-search__input--hovered"]]: isWrapperHovered }),
45
+ placeholder: mergedResources.searchPlaceholder
46
+ })]
47
+ }),
48
+ inputHasValue && /* @__PURE__ */ jsx("button", {
49
+ type: "button",
50
+ "aria-label": mergedResources.searchClearButtonAriaLabel,
51
+ disabled: inputProps.disabled,
52
+ ...clearButtonProps,
53
+ onClick: (e) => {
54
+ clearButtonProps?.onClick?.(e);
55
+ inputRef.current?.focus();
56
+ },
57
+ ref: clearButtonRef,
58
+ className: cn(styles["filter-search__clear-button"], clearButtonProps?.className),
59
+ children: /* @__PURE__ */ jsx(Icon_default, {
60
+ svgIcon: X_default,
61
+ size: IconSize.XXSmall,
62
+ isHovered: !isMobile && isClearButtonHovered
63
+ })
64
+ }),
65
+ /* @__PURE__ */ jsx("button", {
66
+ type: "button",
67
+ "aria-label": mergedResources.searchButtonAriaLabel,
68
+ disabled: inputProps.disabled,
69
+ ...buttonProps,
70
+ ref: buttonRef,
71
+ className: cn(styles["filter-search__search-button"], buttonProps?.className),
72
+ children: /* @__PURE__ */ jsx("div", {
73
+ className: cn(styles["filter-search__search-button--inner"]),
74
+ children: /* @__PURE__ */ jsx(Icon_default, {
75
+ svgIcon: Search_default,
76
+ size: isMobile ? IconSize.XXSmall : IconSize.XSmall,
77
+ isHovered: !inputProps.disabled && isButtonHovered
78
+ })
79
+ })
80
+ })
81
+ ]
82
+ });
83
+ };
84
+ var FilterSearch_default = FilterSearch;
85
+ export { FilterSearch_default as t };
86
+
87
+ //# sourceMappingURL=FilterSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterSearch.js","names":["FilterSearch: React.FC<FilterSearchProps>"],"sources":["../src/components/Filter/FilterSearch/FilterSearch.tsx"],"sourcesContent":["import { useRef } from 'react';\n\nimport classNames from 'classnames';\n\nimport type { HNDesignsystemFilter } from '../../../resources/Resources';\n\nimport { IconSize, LanguageLocales } from '../../../constants';\nimport { useIsMobileBreakpoint } from '../../../hooks/useIsMobileBreakpoint';\nimport { useLanguage } from '../../../hooks/useLanguage';\nimport { usePseudoClasses } from '../../../hooks/usePseudoClasses';\nimport { mergeRefs } from '../../../utils/refs';\nimport Icon from '../../Icon';\nimport Search from '../../Icons/Search';\nimport X from '../../Icons/X';\nimport { getResources } from '../resourceHelper';\n\nimport styles from './styles.module.scss';\n\nexport interface FilterSearchProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'className' | 'value' | 'onChange'> {\n /** Adds custom classes to the component */\n className?: string;\n /** The value given by the user in the input field */\n value: string | undefined;\n /** onChange handler for the input field */\n onChange?: React.ChangeEventHandler<HTMLInputElement>;\n /** Props for the search button */\n buttonProps?: React.ButtonHTMLAttributes<HTMLButtonElement>;\n /** Props for the clear button */\n clearButtonProps?: React.ButtonHTMLAttributes<HTMLButtonElement>;\n /** Texts if overriding SOT */\n resources?: Partial<HNDesignsystemFilter>;\n /** Ref passed to the input element */\n ref?: React.Ref<HTMLInputElement | null>;\n}\n\nconst FilterSearch: React.FC<FilterSearchProps> = props => {\n const { className, value, onChange, resources, buttonProps, clearButtonProps, ref, ...inputProps } = props;\n\n const inputRef = useRef<HTMLInputElement>(null);\n const inputWrapperRef = useRef<HTMLLabelElement>(null);\n const { isHovered: isWrapperHovered } = usePseudoClasses(inputWrapperRef);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const { isHovered: isButtonHovered } = usePseudoClasses(buttonRef);\n const clearButtonRef = useRef<HTMLButtonElement>(null);\n const { isHovered: isClearButtonHovered } = usePseudoClasses(clearButtonRef);\n\n const isMobile = useIsMobileBreakpoint();\n\n const { language } = useLanguage<LanguageLocales>(LanguageLocales.NORWEGIAN);\n const defaultResources = getResources(language);\n\n const mergedResources = {\n ...defaultResources,\n ...resources,\n };\n\n const inputHasValue = !!value;\n\n return (\n <div className={classNames(styles['filter-search__wrapper'], className)}>\n <label className={styles['filter-search__input-wrapper']} ref={inputWrapperRef}>\n <span className={styles['filter-search__input__label']}>{inputProps['aria-label'] ?? mergedResources.searchPlaceholder}</span>\n <input\n {...inputProps}\n ref={mergeRefs([inputRef, ref])}\n value={value}\n onChange={onChange}\n className={classNames(styles['filter-search__input'], {\n [styles['filter-search__input--hovered']]: isWrapperHovered,\n })}\n placeholder={mergedResources.searchPlaceholder}\n />\n </label>\n {inputHasValue && (\n <button\n type=\"button\"\n aria-label={mergedResources.searchClearButtonAriaLabel}\n disabled={inputProps.disabled}\n {...clearButtonProps}\n onClick={e => {\n clearButtonProps?.onClick?.(e);\n inputRef.current?.focus();\n }}\n ref={clearButtonRef}\n className={classNames(styles['filter-search__clear-button'], clearButtonProps?.className)}\n >\n <Icon svgIcon={X} size={IconSize.XXSmall} isHovered={!isMobile && isClearButtonHovered} />\n </button>\n )}\n <button\n type={'button'}\n aria-label={mergedResources.searchButtonAriaLabel}\n disabled={inputProps.disabled}\n {...buttonProps}\n ref={buttonRef}\n className={classNames(styles['filter-search__search-button'], buttonProps?.className)}\n >\n <div className={classNames(styles['filter-search__search-button--inner'])}>\n <Icon svgIcon={Search} size={isMobile ? IconSize.XXSmall : IconSize.XSmall} isHovered={!inputProps.disabled && isButtonHovered} />\n </div>\n </button>\n </div>\n );\n};\n\nexport default FilterSearch;\n"],"mappings":";;;;;;;;;;;;;AAmCA,IAAMA,gBAA4C,UAAS;CACzD,MAAM,EAAE,WAAW,OAAO,UAAU,WAAW,aAAa,kBAAkB,KAAK,GAAG,eAAe;CAErG,MAAM,WAAW,OAAyB,KAAK;CAC/C,MAAM,kBAAkB,OAAyB,KAAK;CACtD,MAAM,EAAE,WAAW,qBAAqB,iBAAiB,gBAAgB;CACzE,MAAM,YAAY,OAA0B,KAAK;CACjD,MAAM,EAAE,WAAW,oBAAoB,iBAAiB,UAAU;CAClE,MAAM,iBAAiB,OAA0B,KAAK;CACtD,MAAM,EAAE,WAAW,yBAAyB,iBAAiB,eAAe;CAE5E,MAAM,WAAW,uBAAuB;CAExC,MAAM,EAAE,aAAa,YAA6B,gBAAgB,UAAU;CAG5E,MAAM,kBAAkB;EACtB,GAHuB,aAAa,SAAS;EAI7C,GAAG;EACJ;CAED,MAAM,gBAAgB,CAAC,CAAC;AAExB,QACE,qBAAC,OAAA;EAAI,WAAW,GAAW,OAAO,2BAA2B,UAAU;;GACrE,qBAAC,SAAA;IAAM,WAAW,OAAO;IAAiC,KAAK;eAC7D,oBAAC,QAAA;KAAK,WAAW,OAAO;eAAiC,WAAW,iBAAiB,gBAAgB;MAAyB,EAC9H,oBAAC,SAAA;KACC,GAAI;KACJ,KAAK,UAAU,CAAC,UAAU,IAAI,CAAC;KACxB;KACG;KACV,WAAW,GAAW,OAAO,yBAAyB,GACnD,OAAO,mCAAmC,kBAC5C,CAAC;KACF,aAAa,gBAAgB;MAC7B,CAAA;KACI;GACP,iBACC,oBAAC,UAAA;IACC,MAAK;IACL,cAAY,gBAAgB;IAC5B,UAAU,WAAW;IACrB,GAAI;IACJ,UAAS,MAAK;AACZ,uBAAkB,UAAU,EAAE;AAC9B,cAAS,SAAS,OAAO;;IAE3B,KAAK;IACL,WAAW,GAAW,OAAO,gCAAgC,kBAAkB,UAAU;cAEzF,oBAAC,cAAA;KAAK,SAAS;KAAG,MAAM,SAAS;KAAS,WAAW,CAAC,YAAY;MAAwB;KACnF;GAEX,oBAAC,UAAA;IACC,MAAM;IACN,cAAY,gBAAgB;IAC5B,UAAU,WAAW;IACrB,GAAI;IACJ,KAAK;IACL,WAAW,GAAW,OAAO,iCAAiC,aAAa,UAAU;cAErF,oBAAC,OAAA;KAAI,WAAW,GAAW,OAAO,uCAAuC;eACvE,oBAAC,cAAA;MAAK,SAAS;MAAQ,MAAM,WAAW,SAAS,UAAU,SAAS;MAAQ,WAAW,CAAC,WAAW,YAAY;OAAmB;MAC9H;KACC;;GACL;;AAIV,IAAA,uBAAe"}
@@ -0,0 +1,5 @@
1
+ import { t as FilterSearch_default } from "./FilterSearch.js";
2
+ var FilterSearch_default$1 = FilterSearch_default;
3
+ export { FilterSearch_default$1 as t };
4
+
5
+ //# sourceMappingURL=FilterSearch2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterSearch2.js","names":[],"sources":["../src/components/Filter/FilterSearch/index.ts"],"sourcesContent":["import FilterSearch from './FilterSearch';\nexport * from './FilterSearch';\nexport default FilterSearch;\n"],"mappings":";AAEA,IAAA,yBAAe"}
@@ -0,0 +1,30 @@
1
+ import { s as LanguageLocales } from "./constants2.js";
2
+ import { n as useLanguage } from "./useLanguage.js";
3
+ import { t as Label_default } from "./Label.js";
4
+ import { t as getResources } from "./resourceHelper.js";
5
+ import { t as Select_default } from "./Select.js";
6
+ import { jsx } from "react/jsx-runtime";
7
+ import styles from "./components/Filter/FilterSort/styles.module.scss";
8
+ var FilterSort = (props) => {
9
+ const { children, resources } = props;
10
+ const { language } = useLanguage(LanguageLocales.NORWEGIAN);
11
+ const mergedResources = {
12
+ ...getResources(language),
13
+ ...resources
14
+ };
15
+ return /* @__PURE__ */ jsx(Select_default, {
16
+ ...props,
17
+ label: /* @__PURE__ */ jsx(Label_default, { labelTexts: [{
18
+ text: `${mergedResources.sortLabel}:`,
19
+ type: "subdued"
20
+ }] }),
21
+ labelClassName: styles["select__label"],
22
+ className: styles["select"],
23
+ wrapperClassName: styles["select__wrapper"],
24
+ children
25
+ });
26
+ };
27
+ var FilterSort_default$1 = FilterSort;
28
+ export { FilterSort_default$1 as t };
29
+
30
+ //# sourceMappingURL=FilterSort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterSort.js","names":["FilterSort: React.FC<FilterSortProps>"],"sources":["../src/components/Filter/FilterSort/FilterSort.tsx","../src/components/Filter/FilterSort/index.ts"],"sourcesContent":["import type { HNDesignsystemFilter } from '../../../resources/Resources';\n\nimport { LanguageLocales } from '../../../constants';\nimport { useLanguage } from '../../../hooks/useLanguage';\nimport Label from '../../Label';\nimport Select, { type SelectProps } from '../../Select';\nimport { getResources } from '../resourceHelper';\n\nimport styles from './styles.module.scss';\n\nexport interface FilterSortProps extends SelectProps {\n /** Texts if overriding SOT */\n resources?: Partial<HNDesignsystemFilter>;\n}\n\nconst FilterSort: React.FC<FilterSortProps> = props => {\n const { children, resources } = props;\n\n const { language } = useLanguage<LanguageLocales>(LanguageLocales.NORWEGIAN);\n const defaultResources = getResources(language);\n\n const mergedResources = {\n ...defaultResources,\n ...resources,\n };\n\n return (\n <Select\n {...props}\n label={<Label labelTexts={[{ text: `${mergedResources.sortLabel}:`, type: 'subdued' }]} />}\n labelClassName={styles['select__label']}\n className={styles['select']}\n wrapperClassName={styles['select__wrapper']}\n >\n {children}\n </Select>\n );\n};\n\nexport default FilterSort;\n","import FilterSort from './FilterSort';\nexport * from './FilterSort';\nexport default FilterSort;\n"],"mappings":";;;;;;;AAeA,IAAMA,cAAwC,UAAS;CACrD,MAAM,EAAE,UAAU,cAAc;CAEhC,MAAM,EAAE,aAAa,YAA6B,gBAAgB,UAAU;CAG5E,MAAM,kBAAkB;EACtB,GAHuB,aAAa,SAAS;EAI7C,GAAG;EACJ;AAED,QACE,oBAAC,gBAAA;EACC,GAAI;EACJ,OAAO,oBAAC,eAAA,EAAM,YAAY,CAAC;GAAE,MAAM,GAAG,gBAAgB,UAAU;GAAI,MAAM;GAAW,CAAC,EAAA,CAAI;EAC1F,gBAAgB,OAAO;EACvB,WAAW,OAAO;EAClB,kBAAkB,OAAO;EAExB;GACM;;ACjCb,IAAA,uBDqCe"}
@@ -1,6 +1,6 @@
1
1
  import { n as AnalyticsId, s as LanguageLocales } from "./constants2.js";
2
2
  import { n as useLanguage } from "./useLanguage.js";
3
- import classNames from "classnames";
3
+ import cn from "classnames";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  import styles from "./components/FormFieldTag/styles.module.scss";
6
6
  var HN_Designsystem_FormFieldTag_en_GB_default = {
@@ -69,7 +69,7 @@ var FormFieldTag = (props) => {
69
69
  id,
70
70
  "data-testid": testId,
71
71
  "data-analyticsid": AnalyticsId.FormFieldTag,
72
- className: classNames(styles["form-field-tag"], { [styles["form-field-tag--optional"]]: isOptional }),
72
+ className: cn(styles["form-field-tag"], { [styles["form-field-tag--optional"]]: isOptional }),
73
73
  children: textMap[level]
74
74
  });
75
75
  };
@@ -1 +1 @@
1
- {"version":3,"file":"FormFieldTag.js","names":["FormFieldTag: React.FC<FormFieldTagProps>","mergedResources: HNDesignsystemFormFieldTag"],"sources":["../src/resources/HN.Designsystem.FormFieldTag.en-GB.json","../src/resources/HN.Designsystem.FormFieldTag.nb-NO.json","../src/resources/HN.Designsystem.FormFieldTag.nn-NO.json","../src/resources/HN.Designsystem.FormFieldTag.se-NO.json","../src/components/FormFieldTag/resourceHelper.ts","../src/components/FormFieldTag/FormFieldTag.tsx","../src/components/FormFieldTag/index.ts"],"sourcesContent":["{\n \"allRequired\": \"All fields must be filled out\",\n \"requiredField\": \"Required\",\n \"optional\": \"Optional\",\n \"allOptional\": \"All fields are optional\",\n \"requiredRadiobuttonList\": \"Select one\",\n \"requiredCheckboxList\": \"Select one or more\",\n \"requiredSingleCheckbox\": \"Must be selected\"\n}\n","{\n \"allRequired\": \"Alle felt må fylles ut\",\n \"requiredField\": \"Må fylles ut\",\n \"optional\": \"Valgfritt\",\n \"allOptional\": \"Alle felt er valgfrie\",\n \"requiredRadiobuttonList\": \"Velg én\",\n \"requiredCheckboxList\": \"Velg én eller flere\",\n \"requiredSingleCheckbox\": \"Må velges\"\n}\n","{\n \"allRequired\": \"Alle felt må fyllast ut\",\n \"requiredField\": \"Må fyllast ut\",\n \"optional\": \"Valfritt\",\n \"allOptional\": \"Alle felt er valfrie\",\n \"requiredRadiobuttonList\": \"Vel éin\",\n \"requiredCheckboxList\": \"Vel éin eller fleire\",\n \"requiredSingleCheckbox\": \"Må veljast\"\n}\n","{\n \"allRequired\": \"Buot sajiid ferte deavdit\",\n \"requiredField\": \"Ferte devdojuvvot\",\n \"optional\": \"Válljenláhkái\",\n \"allOptional\": \"Buot sajit eat válljenláhkái\",\n \"requiredRadiobuttonList\": \"Vállje ovtta\",\n \"requiredCheckboxList\": \"Vállje ovtta dahje máŋga\",\n \"requiredSingleCheckbox\": \"Ferte válljejuvvot\"\n}\n","import type { HNDesignsystemFormFieldTag } from '../../resources/Resources';\n\nimport { LanguageLocales } from '../../constants';\nimport enGB from '../../resources/HN.Designsystem.FormFieldTag.en-GB.json';\nimport nbNO from '../../resources/HN.Designsystem.FormFieldTag.nb-NO.json';\nimport nnNO from '../../resources/HN.Designsystem.FormFieldTag.nn-NO.json';\nimport seNO from '../../resources/HN.Designsystem.FormFieldTag.se-NO.json';\n\nexport const getResources = (language: LanguageLocales): HNDesignsystemFormFieldTag => {\n switch (language) {\n case LanguageLocales.ENGLISH:\n return enGB;\n case LanguageLocales.NORWEGIAN_NYNORSK:\n return nnNO;\n case LanguageLocales.SAMI_NORTHERN:\n return seNO;\n case LanguageLocales.NORWEGIAN:\n default:\n return nbNO;\n }\n};\n","import classNames from 'classnames';\n\nimport type { HNDesignsystemFormFieldTag } from '../../resources/Resources';\n\nimport { getResources } from './resourceHelper';\nimport { AnalyticsId, LanguageLocales } from '../../constants';\nimport { useLanguage } from '../../hooks/useLanguage';\n\nimport styles from './styles.module.scss';\n\nexport type FormFieldTagLevel =\n | 'all-required'\n | 'required-field'\n | 'optional'\n | 'all-optional'\n | 'required-radiobutton-list'\n | 'required-checkbox-list'\n | 'required-single-checkbox';\n\nexport interface FormFieldTagProps {\n /** Id that is placed on the component */\n id?: string;\n /** What level is the required tag, sets the styling and the text. */\n level: FormFieldTagLevel;\n /** Texts if overriding SOT */\n resources?: Partial<HNDesignsystemFormFieldTag>;\n /** Sets the data-testid attribute. */\n testId?: string;\n}\n\nconst FormFieldTag: React.FC<FormFieldTagProps> = props => {\n const { id, level, resources, testId } = props;\n const isOptional = level === 'optional' || level === 'all-optional';\n\n const { language } = useLanguage<LanguageLocales>(LanguageLocales.NORWEGIAN);\n const defaultResources = getResources(language);\n\n const mergedResources: HNDesignsystemFormFieldTag = {\n ...defaultResources,\n ...resources,\n };\n\n const textMap = {\n 'all-required': mergedResources.allRequired,\n 'required-field': mergedResources.requiredField,\n optional: mergedResources.optional,\n 'all-optional': mergedResources.allOptional,\n 'required-radiobutton-list': mergedResources.requiredRadiobuttonList,\n 'required-checkbox-list': mergedResources.requiredCheckboxList,\n 'required-single-checkbox': mergedResources.requiredSingleCheckbox,\n };\n\n return (\n <span\n id={id}\n data-testid={testId}\n data-analyticsid={AnalyticsId.FormFieldTag}\n className={classNames(styles['form-field-tag'], { [styles['form-field-tag--optional']]: isOptional })}\n >\n {textMap[level]}\n </span>\n );\n};\n\nexport default FormFieldTag;\n","import FormFieldTag from './FormFieldTag';\nexport * from './FormFieldTag';\nexport default FormFieldTag;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AIQA,MAAa,gBAAgB,aAA0D;AACrF,SAAQ,UAAR;EACE,KAAK,gBAAgB,QACnB,QAAO;EACT,KAAK,gBAAgB,kBACnB,QAAO;EACT,KAAK,gBAAgB,cACnB,QAAO;EACT,KAAK,gBAAgB;EACrB,QACE,QAAO;;;ACYb,IAAMA,gBAA4C,UAAS;CACzD,MAAM,EAAE,IAAI,OAAO,WAAW,WAAW;CACzC,MAAM,aAAa,UAAU,cAAc,UAAU;CAErD,MAAM,EAAE,aAAa,YAA6B,gBAAgB,UAAU;CAG5E,MAAMC,kBAA8C;EAClD,GAHuB,aAAa,SAAS;EAI7C,GAAG;EACJ;CAED,MAAM,UAAU;EACd,gBAAgB,gBAAgB;EAChC,kBAAkB,gBAAgB;EAClC,UAAU,gBAAgB;EAC1B,gBAAgB,gBAAgB;EAChC,6BAA6B,gBAAgB;EAC7C,0BAA0B,gBAAgB;EAC1C,4BAA4B,gBAAgB;EAC7C;AAED,QACE,oBAAC,QAAA;EACK;EACJ,eAAa;EACb,oBAAkB,YAAY;EAC9B,WAAW,WAAW,OAAO,mBAAmB,GAAG,OAAO,8BAA8B,YAAY,CAAC;YAEpG,QAAQ;GACJ;;AC1DX,IAAA,yBD8De"}
1
+ {"version":3,"file":"FormFieldTag.js","names":["FormFieldTag: React.FC<FormFieldTagProps>","mergedResources: HNDesignsystemFormFieldTag"],"sources":["../src/resources/HN.Designsystem.FormFieldTag.en-GB.json","../src/resources/HN.Designsystem.FormFieldTag.nb-NO.json","../src/resources/HN.Designsystem.FormFieldTag.nn-NO.json","../src/resources/HN.Designsystem.FormFieldTag.se-NO.json","../src/components/FormFieldTag/resourceHelper.ts","../src/components/FormFieldTag/FormFieldTag.tsx","../src/components/FormFieldTag/index.ts"],"sourcesContent":["{\n \"allRequired\": \"All fields must be filled out\",\n \"requiredField\": \"Required\",\n \"optional\": \"Optional\",\n \"allOptional\": \"All fields are optional\",\n \"requiredRadiobuttonList\": \"Select one\",\n \"requiredCheckboxList\": \"Select one or more\",\n \"requiredSingleCheckbox\": \"Must be selected\"\n}\n","{\n \"allRequired\": \"Alle felt må fylles ut\",\n \"requiredField\": \"Må fylles ut\",\n \"optional\": \"Valgfritt\",\n \"allOptional\": \"Alle felt er valgfrie\",\n \"requiredRadiobuttonList\": \"Velg én\",\n \"requiredCheckboxList\": \"Velg én eller flere\",\n \"requiredSingleCheckbox\": \"Må velges\"\n}\n","{\n \"allRequired\": \"Alle felt må fyllast ut\",\n \"requiredField\": \"Må fyllast ut\",\n \"optional\": \"Valfritt\",\n \"allOptional\": \"Alle felt er valfrie\",\n \"requiredRadiobuttonList\": \"Vel éin\",\n \"requiredCheckboxList\": \"Vel éin eller fleire\",\n \"requiredSingleCheckbox\": \"Må veljast\"\n}\n","{\n \"allRequired\": \"Buot sajiid ferte deavdit\",\n \"requiredField\": \"Ferte devdojuvvot\",\n \"optional\": \"Válljenláhkái\",\n \"allOptional\": \"Buot sajit eat válljenláhkái\",\n \"requiredRadiobuttonList\": \"Vállje ovtta\",\n \"requiredCheckboxList\": \"Vállje ovtta dahje máŋga\",\n \"requiredSingleCheckbox\": \"Ferte válljejuvvot\"\n}\n","import type { HNDesignsystemFormFieldTag } from '../../resources/Resources';\n\nimport { LanguageLocales } from '../../constants';\nimport enGB from '../../resources/HN.Designsystem.FormFieldTag.en-GB.json';\nimport nbNO from '../../resources/HN.Designsystem.FormFieldTag.nb-NO.json';\nimport nnNO from '../../resources/HN.Designsystem.FormFieldTag.nn-NO.json';\nimport seNO from '../../resources/HN.Designsystem.FormFieldTag.se-NO.json';\n\nexport const getResources = (language: LanguageLocales): HNDesignsystemFormFieldTag => {\n switch (language) {\n case LanguageLocales.ENGLISH:\n return enGB;\n case LanguageLocales.NORWEGIAN_NYNORSK:\n return nnNO;\n case LanguageLocales.SAMI_NORTHERN:\n return seNO;\n case LanguageLocales.NORWEGIAN:\n default:\n return nbNO;\n }\n};\n","import classNames from 'classnames';\n\nimport type { HNDesignsystemFormFieldTag } from '../../resources/Resources';\n\nimport { getResources } from './resourceHelper';\nimport { AnalyticsId, LanguageLocales } from '../../constants';\nimport { useLanguage } from '../../hooks/useLanguage';\n\nimport styles from './styles.module.scss';\n\nexport type FormFieldTagLevel =\n | 'all-required'\n | 'required-field'\n | 'optional'\n | 'all-optional'\n | 'required-radiobutton-list'\n | 'required-checkbox-list'\n | 'required-single-checkbox';\n\nexport interface FormFieldTagProps {\n /** Id that is placed on the component */\n id?: string;\n /** What level is the required tag, sets the styling and the text. */\n level: FormFieldTagLevel;\n /** Texts if overriding SOT */\n resources?: Partial<HNDesignsystemFormFieldTag>;\n /** Sets the data-testid attribute. */\n testId?: string;\n}\n\nconst FormFieldTag: React.FC<FormFieldTagProps> = props => {\n const { id, level, resources, testId } = props;\n const isOptional = level === 'optional' || level === 'all-optional';\n\n const { language } = useLanguage<LanguageLocales>(LanguageLocales.NORWEGIAN);\n const defaultResources = getResources(language);\n\n const mergedResources: HNDesignsystemFormFieldTag = {\n ...defaultResources,\n ...resources,\n };\n\n const textMap = {\n 'all-required': mergedResources.allRequired,\n 'required-field': mergedResources.requiredField,\n optional: mergedResources.optional,\n 'all-optional': mergedResources.allOptional,\n 'required-radiobutton-list': mergedResources.requiredRadiobuttonList,\n 'required-checkbox-list': mergedResources.requiredCheckboxList,\n 'required-single-checkbox': mergedResources.requiredSingleCheckbox,\n };\n\n return (\n <span\n id={id}\n data-testid={testId}\n data-analyticsid={AnalyticsId.FormFieldTag}\n className={classNames(styles['form-field-tag'], { [styles['form-field-tag--optional']]: isOptional })}\n >\n {textMap[level]}\n </span>\n );\n};\n\nexport default FormFieldTag;\n","import FormFieldTag from './FormFieldTag';\nexport * from './FormFieldTag';\nexport default FormFieldTag;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AIQA,MAAa,gBAAgB,aAA0D;AACrF,SAAQ,UAAR;EACE,KAAK,gBAAgB,QACnB,QAAO;EACT,KAAK,gBAAgB,kBACnB,QAAO;EACT,KAAK,gBAAgB,cACnB,QAAO;EACT,KAAK,gBAAgB;EACrB,QACE,QAAO;;;ACYb,IAAMA,gBAA4C,UAAS;CACzD,MAAM,EAAE,IAAI,OAAO,WAAW,WAAW;CACzC,MAAM,aAAa,UAAU,cAAc,UAAU;CAErD,MAAM,EAAE,aAAa,YAA6B,gBAAgB,UAAU;CAG5E,MAAMC,kBAA8C;EAClD,GAHuB,aAAa,SAAS;EAI7C,GAAG;EACJ;CAED,MAAM,UAAU;EACd,gBAAgB,gBAAgB;EAChC,kBAAkB,gBAAgB;EAClC,UAAU,gBAAgB;EAC1B,gBAAgB,gBAAgB;EAChC,6BAA6B,gBAAgB;EAC7C,0BAA0B,gBAAgB;EAC1C,4BAA4B,gBAAgB;EAC7C;AAED,QACE,oBAAC,QAAA;EACK;EACJ,eAAa;EACb,oBAAkB,YAAY;EAC9B,WAAW,GAAW,OAAO,mBAAmB,GAAG,OAAO,8BAA8B,YAAY,CAAC;YAEpG,QAAQ;GACJ;;AC1DX,IAAA,yBD8De"}