@vygruppen/spor-react 13.2.1 → 13.3.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.
package/dist/index.mjs CHANGED
@@ -1,10 +1,10 @@
1
- import { Accordion as Accordion$1, defineRecipe, chakra, Code as Code$1, Clipboard as Clipboard$1, RadioCard as RadioCard$1, defineStyle, Field, Dialog, createContext as createContext$1, Drawer as Drawer$1, Combobox, Fieldset as Fieldset$1, createListCollection, Select as Select$1, List as List$1, Popover as Popover$1, createToaster, Tabs as Tabs$1, defineSemanticTokens, defineSlotRecipe, defineTokens, defineAnimationStyles, defineGlobalStyles, defineTextStyles, createSystem, defaultBaseConfig, Tooltip as Tooltip$1, IconButton as IconButton$1, defineConfig, Center, Box, ClientOnly, VisuallyHidden, useSlotRecipe, Stack, HStack, Progress, Text, useRecipe, Circle, Skeleton as Skeleton$1, Button as Button$1, Group, Badge as Badge$1, useDisclosure, Alert as Alert$1, Span, Flex, Breadcrumb as Breadcrumb$1, Separator as Separator$1, useFieldContext, PopoverAnchor, Portal, useDialogContext, InputElement, Input as Input$1, useFilter, useListCollection, useCombobox, useComboboxContext, usePopoverContext, Checkbox as Checkbox$1, CheckboxGroup as CheckboxGroup$1, CheckboxCard, Tag, ListItem, Menu as Menu$1, useMenuContext as useMenuContext$1, NativeSelect as NativeSelect$1, useControllableState, RadioGroup as RadioGroup$1, useSelectContext, Switch as Switch$1, Textarea as Textarea$1, Link, PopoverCloseTrigger, Pagination as Pagination$1, usePaginationContext, ChakraProvider, Table as Table$1, Toaster as Toaster$1, Toast } from '@chakra-ui/react';
1
+ import { Accordion as Accordion$1, defineRecipe, chakra, Code as Code$1, Clipboard as Clipboard$1, RadioCard as RadioCard$1, defineStyle, Field, Dialog, createContext as createContext$1, Drawer as Drawer$1, List as List$1, Combobox, Fieldset as Fieldset$1, createListCollection, Select as Select$1, Popover as Popover$1, createToaster, Tabs as Tabs$1, defineSemanticTokens, defineSlotRecipe, defineTokens, defineAnimationStyles, defineGlobalStyles, defineTextStyles, createSystem, defaultBaseConfig, Tooltip as Tooltip$1, IconButton as IconButton$1, defineConfig, Center, Box, ClientOnly, VisuallyHidden, useSlotRecipe, Stack, HStack, Progress, Text, useRecipe, Circle, Skeleton as Skeleton$1, Button as Button$1, Group, Badge as Badge$1, useDisclosure, Alert as Alert$1, Span, Flex, Breadcrumb as Breadcrumb$1, Separator as Separator$1, useFieldContext, PopoverAnchor, Portal, useDialogContext, Link, InputElement, Input as Input$1, useFilter, useListCollection, useCombobox, useComboboxContext, usePopoverContext, Checkbox as Checkbox$1, CheckboxGroup as CheckboxGroup$1, CheckboxCard, Tag, ListItem as ListItem$1, Menu as Menu$1, useMenuContext as useMenuContext$1, NativeSelect as NativeSelect$1, useControllableState, RadioGroup as RadioGroup$1, useSelectContext, Switch as Switch$1, Textarea as Textarea$1, PopoverCloseTrigger, Pagination as Pagination$1, usePaginationContext, ChakraProvider, Table as Table$1, Toaster as Toaster$1, Toast } from '@chakra-ui/react';
2
2
  export { AspectRatio, Box, BreadcrumbCurrentLink, BreadcrumbEllipsis, BreadcrumbLink, Center, ClientOnly, Collapsible, Container, Em, Flex, For, FormatByte, FormatNumber, Grid, GridItem, HStack, Icon, Image, Kbd, LocaleProvider, Portal, Show, SimpleGrid, Spacer, Span, Stack, TableCaption, TableCell, TableColumn, TableColumnGroup, TableFooter, TableHeader, TableRoot, TableRow, VStack, VisuallyHidden, Wrap, createIcon, createListCollection, createSystem, defineConfig, defineRecipe, defineSlotRecipe, defineStyle, mergeConfigs, chakra as spor, useBreakpointValue, useCheckbox, useClipboard, useControllableProp, useDisclosure, useMediaQuery, useRecipe, useSlotRecipe, useToken } from '@chakra-ui/react';
3
3
  import * as spor_icon_react_star from '@vygruppen/spor-icon-react';
4
- import { DropdownDownFill24Icon, CloseFill18Icon, CloseFill30Icon, CloseFill24Icon, DropdownDownFill18Icon, ServiceFill24Icon, WarningFill24Icon, DropdownRightFill18Icon, CalendarOutline24Icon, DropdownLeftFill18Icon, ArrowLeftFill24Icon, ChangeDirectionOutline24Icon, CheckmarkFill18Icon, CloseOutline24Icon, SearchOutline24Icon, Forward15MediaControllerFill30Icon, Backward15MediaControllerFill30Icon, PauseMediaControllerFill24Icon, PlayMediaControllerFill24Icon, NextMediaControllerFill30Icon, PreviousMediaControllerFill30Icon, ArrowRightFill18Icon, DropdownLeftOutline18Icon, DropdownRightOutline18Icon, ArrowUpFill18Icon, ArrowDownFill18Icon, ChangeDirectionFill18Icon, CopyOutline18Icon, WalkFill30Icon, WalkFill24Icon, WalkFill18Icon, AltTransportFill30Icon, AltTransportFill24Icon, AltTransportFill18Icon, TramFill30Icon, TramFill24Icon, TramFill18Icon, SubwayFill30Icon, SubwayFill24Icon, SubwayFill18Icon, FerryFill30Icon, FerryFill24Icon, FerryFill18Icon, BusFill30Icon, BusFill24Icon, BusFill18Icon, ExpressBusFill30Icon, ExpressBusFill24Icon, ExpressBusFill18Icon, TrainFill30Icon, TrainFill24Icon, TrainFill18Icon, InformationFill24Icon, InformationFill18Icon, WarningFill18Icon, ErrorFill24Icon, ErrorFill18Icon, LinkOutOutline24Icon, LinkOutOutline18Icon, QuestionFill24Icon, ErrorOutline24Icon, SuccessFill24Icon, ArrowLeftOutline24Icon, ArrowRightOutline24Icon } from '@vygruppen/spor-icon-react';
4
+ import { DropdownDownFill24Icon, CloseFill18Icon, CloseFill30Icon, CloseFill24Icon, DropdownDownFill18Icon, ServiceFill24Icon, WarningFill24Icon, DropdownRightFill18Icon, CalendarOutline24Icon, DropdownLeftFill18Icon, ArrowLeftFill24Icon, ErrorFill24Icon, ChangeDirectionOutline24Icon, CheckmarkFill18Icon, CloseOutline24Icon, SearchOutline24Icon, Forward15MediaControllerFill30Icon, Backward15MediaControllerFill30Icon, PauseMediaControllerFill24Icon, PlayMediaControllerFill24Icon, NextMediaControllerFill30Icon, PreviousMediaControllerFill30Icon, ArrowRightFill18Icon, DropdownLeftOutline18Icon, DropdownRightOutline18Icon, ArrowUpFill18Icon, ArrowDownFill18Icon, ChangeDirectionFill18Icon, CopyOutline18Icon, LinkOutOutline24Icon, LinkOutOutline18Icon, WalkFill30Icon, WalkFill24Icon, WalkFill18Icon, AltTransportFill30Icon, AltTransportFill24Icon, AltTransportFill18Icon, TramFill30Icon, TramFill24Icon, TramFill18Icon, SubwayFill30Icon, SubwayFill24Icon, SubwayFill18Icon, FerryFill30Icon, FerryFill24Icon, FerryFill18Icon, BusFill30Icon, BusFill24Icon, BusFill18Icon, ExpressBusFill30Icon, ExpressBusFill24Icon, ExpressBusFill18Icon, TrainFill30Icon, TrainFill24Icon, TrainFill18Icon, InformationFill24Icon, InformationFill18Icon, WarningFill18Icon, ErrorFill18Icon, QuestionFill24Icon, ErrorOutline24Icon, SuccessFill24Icon, ArrowLeftOutline24Icon, ArrowRightOutline24Icon } from '@vygruppen/spor-icon-react';
5
5
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
6
- import * as React13 from 'react';
7
- import React13__default, { createContext, useContext, useId, cloneElement, isValidElement, useRef, useEffect, useImperativeHandle, useState, useLayoutEffect, useMemo } from 'react';
6
+ import * as React14 from 'react';
7
+ import React14__default, { createContext, useContext, useId, cloneElement, isValidElement, useRef, useEffect, useImperativeHandle, useState, useLayoutEffect, useMemo } from 'react';
8
8
  import { spinnerColorData, inlineLoaderColorData, contentLoaderData, fullScreenLoaderWhiteData, inlineLoaderDarkData, spinnerLightData, spinnerDarkData, fullScreenLoaderBlackData, inlineLoaderLightData } from '@vygruppen/spor-loader';
9
9
  import { useLottie } from 'lottie-react';
10
10
  import { useInterval } from 'usehooks-ts';
@@ -1159,11 +1159,11 @@ var FloatingActionButton = ({
1159
1159
  );
1160
1160
  };
1161
1161
  var useScrollDirection = () => {
1162
- const [scrollDirection, setScrollDirection] = React13__default.useState(null);
1163
- const lastScrollPosition = React13__default.useRef(
1162
+ const [scrollDirection, setScrollDirection] = React14__default.useState(null);
1163
+ const lastScrollPosition = React14__default.useRef(
1164
1164
  globalThis.window === void 0 ? 0 : window.scrollY
1165
1165
  );
1166
- React13__default.useEffect(() => {
1166
+ React14__default.useEffect(() => {
1167
1167
  const onScroll = () => {
1168
1168
  const delta = window.scrollY - lastScrollPosition.current;
1169
1169
  if (delta === 0) {
@@ -1488,12 +1488,12 @@ var Breadcrumb = ({
1488
1488
  css,
1489
1489
  ...props
1490
1490
  }) => {
1491
- const validChildren = React13__default.Children.toArray(children).filter(
1492
- (element) => React13__default.isValidElement(element)
1491
+ const validChildren = React14__default.Children.toArray(children).filter(
1492
+ (element) => React14__default.isValidElement(element)
1493
1493
  );
1494
1494
  return /* @__PURE__ */ jsx(Breadcrumb$1.Root, { ref, css, ...props, children: /* @__PURE__ */ jsx(Breadcrumb$1.List, { "data-part": "list", children: validChildren.map((child, index) => {
1495
1495
  const isLast = index === validChildren.length - 1;
1496
- return /* @__PURE__ */ jsxs(React13__default.Fragment, { children: [
1496
+ return /* @__PURE__ */ jsxs(React14__default.Fragment, { children: [
1497
1497
  /* @__PURE__ */ jsx(Breadcrumb$1.Item, { "data-part": "item", children: child }),
1498
1498
  !isLast && /* @__PURE__ */ jsx(
1499
1499
  Breadcrumb$1.Separator,
@@ -2164,13 +2164,13 @@ var labelStyles = defineStyle({
2164
2164
  }
2165
2165
  });
2166
2166
  function renderLabelWithIndicator(label, labelAsChild) {
2167
- if (!labelAsChild || !React13.isValidElement(label)) {
2167
+ if (!labelAsChild || !React14.isValidElement(label)) {
2168
2168
  return /* @__PURE__ */ jsxs(Fragment, { children: [
2169
2169
  label,
2170
2170
  /* @__PURE__ */ jsx(Field.RequiredIndicator, {})
2171
2171
  ] });
2172
2172
  }
2173
- return React13.cloneElement(
2173
+ return React14.cloneElement(
2174
2174
  label,
2175
2175
  {},
2176
2176
  /* @__PURE__ */ jsxs(Fragment, { children: [
@@ -3345,6 +3345,124 @@ var texts13 = createTexts({
3345
3345
  sv: "St\xE4ng"
3346
3346
  }
3347
3347
  });
3348
+ var ExternalIcon = ({
3349
+ label,
3350
+ size
3351
+ }) => /* @__PURE__ */ jsxs(Fragment, { children: [
3352
+ size === "lg" || size === "md" ? /* @__PURE__ */ jsx(LinkOutOutline24Icon, { "aria-hidden": true, display: "inline" }) : /* @__PURE__ */ jsx(LinkOutOutline18Icon, { "aria-hidden": true, display: "inline" }),
3353
+ /* @__PURE__ */ jsx(VisuallyHidden, { children: label })
3354
+ ] });
3355
+ var TextLink = ({
3356
+ ref,
3357
+ children,
3358
+ external,
3359
+ href,
3360
+ ...props
3361
+ }) => {
3362
+ const { t } = useTranslation();
3363
+ const isExternal = external ?? Boolean((href == null ? void 0 : href.startsWith("http://")) || (href == null ? void 0 : href.startsWith("https://")));
3364
+ const externalLabel = t ? t(texts14.externalLink) : texts14.externalLink.en;
3365
+ if (props.asChild && isValidElement(children)) {
3366
+ return /* @__PURE__ */ jsx(
3367
+ Link,
3368
+ {
3369
+ href,
3370
+ ...props,
3371
+ ref,
3372
+ ...isExternal && {
3373
+ target: "_blank",
3374
+ rel: "noopener noreferrer"
3375
+ },
3376
+ children: cloneElement(children, {
3377
+ ...children.props,
3378
+ children: /* @__PURE__ */ jsxs(Fragment, { children: [
3379
+ children.props.children,
3380
+ isExternal && /* @__PURE__ */ jsx(ExternalIcon, { label: externalLabel, size: props.size })
3381
+ ] })
3382
+ })
3383
+ }
3384
+ );
3385
+ }
3386
+ return /* @__PURE__ */ jsxs(
3387
+ Link,
3388
+ {
3389
+ href,
3390
+ ...props,
3391
+ ref,
3392
+ ...isExternal && {
3393
+ target: "_blank",
3394
+ rel: "noopener noreferrer"
3395
+ },
3396
+ children: [
3397
+ children,
3398
+ isExternal && /* @__PURE__ */ jsx(ExternalIcon, { label: externalLabel, size: props.size })
3399
+ ]
3400
+ }
3401
+ );
3402
+ };
3403
+ var texts14 = createTexts({
3404
+ externalLink: {
3405
+ nb: "Ekstern lenke",
3406
+ nn: "Ekstern lenke",
3407
+ sv: "Extern l\xE4nk",
3408
+ en: "External link"
3409
+ }
3410
+ });
3411
+ var List = List$1.Root;
3412
+ var ListItem = List$1.Item;
3413
+ var ListIndicator = List$1.Indicator;
3414
+ var ErrorSummary = ({
3415
+ ref: externalRef,
3416
+ children,
3417
+ headingLevel = "h2",
3418
+ heading,
3419
+ ...rest
3420
+ }) => {
3421
+ const recipe = useSlotRecipe({ key: "errorSummary" });
3422
+ const styles = recipe();
3423
+ const wrapperRef = useRef(null);
3424
+ const headingRef = useRef(null);
3425
+ const ref = externalRef ?? wrapperRef;
3426
+ return /* @__PURE__ */ jsxs(
3427
+ Box,
3428
+ {
3429
+ css: styles.container,
3430
+ ref,
3431
+ ...rest,
3432
+ "aria-labelledby": slugify(heading),
3433
+ tabIndex: -1,
3434
+ children: [
3435
+ heading && /* @__PURE__ */ jsxs(Flex, { css: styles.heading, children: [
3436
+ /* @__PURE__ */ jsx(
3437
+ ErrorFill24Icon,
3438
+ {
3439
+ css: {
3440
+ flexShrink: 0,
3441
+ "& path:first-of-type": {
3442
+ fill: `icon.critical`
3443
+ },
3444
+ "& path:not(:first-of-type)": {
3445
+ fill: `surface.critical`
3446
+ }
3447
+ }
3448
+ }
3449
+ ),
3450
+ /* @__PURE__ */ jsx(Heading, { as: headingLevel, variant: "md", autoId: true, ref: headingRef, children: heading })
3451
+ ] }),
3452
+ /* @__PURE__ */ jsx(List, { css: styles.list, gap: 2, children })
3453
+ ]
3454
+ }
3455
+ );
3456
+ };
3457
+ var ErrorSummaryItem = ({
3458
+ children,
3459
+ href,
3460
+ ...rest
3461
+ }) => {
3462
+ const recipe = useSlotRecipe({ key: "errorSummary" });
3463
+ const styles = recipe();
3464
+ return /* @__PURE__ */ jsx(ListItem, { css: styles.item, ...rest, children: /* @__PURE__ */ jsx(TextLink, { href, children }) });
3465
+ };
3348
3466
  var AttachedInputs = ({
3349
3467
  ref,
3350
3468
  ...props
@@ -3426,7 +3544,7 @@ function useFloatingInputState({
3426
3544
  );
3427
3545
  const inputValue = isControlled ? String(value ?? "") : uncontrolledValue;
3428
3546
  const shouldFloat = inputValue.length > 0 || focused;
3429
- const syncFromRef = React13__default.useCallback(() => {
3547
+ const syncFromRef = React14__default.useCallback(() => {
3430
3548
  if (!isControlled && (inputRef == null ? void 0 : inputRef.current)) {
3431
3549
  const v = inputRef.current.value;
3432
3550
  if (v !== uncontrolledValue) {
@@ -3590,7 +3708,7 @@ function Autocomplete({
3590
3708
  }) {
3591
3709
  const { contains } = useFilter({ sensitivity: "base" });
3592
3710
  const { t } = useTranslation();
3593
- const extractedItems = React13__default.useMemo(
3711
+ const extractedItems = React14__default.useMemo(
3594
3712
  () => extractItemsFromChildren(children),
3595
3713
  [children]
3596
3714
  );
@@ -3598,11 +3716,11 @@ function Autocomplete({
3598
3716
  initialItems: extractedItems,
3599
3717
  filter: filteredExternally ? void 0 : contains
3600
3718
  });
3601
- React13__default.useEffect(() => {
3719
+ React14__default.useEffect(() => {
3602
3720
  if (filteredExternally)
3603
3721
  reset();
3604
3722
  }, [extractedItems, reset, filteredExternally]);
3605
- const filteredChildren = React13__default.useMemo(
3723
+ const filteredChildren = React14__default.useMemo(
3606
3724
  () => filterChildren(children, collection.items),
3607
3725
  [children, collection.items]
3608
3726
  );
@@ -3647,10 +3765,10 @@ function Autocomplete({
3647
3765
  }
3648
3766
  }
3649
3767
  ) }),
3650
- /* @__PURE__ */ jsx(Combobox.IndicatorGroup, { children: /* @__PURE__ */ jsx(Combobox.ClearTrigger, { asChild: true, "aria-label": t(texts14.clearValue), children: /* @__PURE__ */ jsx(CloseButton, { size: "xs", tabIndex: 0 }) }) })
3768
+ /* @__PURE__ */ jsx(Combobox.IndicatorGroup, { children: /* @__PURE__ */ jsx(Combobox.ClearTrigger, { asChild: true, "aria-label": t(texts15.clearValue), children: /* @__PURE__ */ jsx(CloseButton, { size: "xs", tabIndex: 0 }) }) })
3651
3769
  ] }),
3652
3770
  /* @__PURE__ */ jsx(Combobox.Positioner, { children: /* @__PURE__ */ jsxs(Combobox.Content, { children: [
3653
- !loading && /* @__PURE__ */ jsx(Combobox.Empty, { children: emptyLabel ?? t(texts14.noItemsFound) }),
3771
+ !loading && /* @__PURE__ */ jsx(Combobox.Empty, { children: emptyLabel ?? t(texts15.noItemsFound) }),
3654
3772
  loading ? /* @__PURE__ */ jsx(ColorSpinner, { width: "1.5rem", p: "2" }) : filteredChildren
3655
3773
  ] }) })
3656
3774
  ] });
@@ -3666,9 +3784,9 @@ var AutocompleteItem = ({ children, ...props }) => {
3666
3784
  };
3667
3785
  var filterChildren = (children, collectionItems) => {
3668
3786
  const collectionValues = new Set(collectionItems.map((item) => item.value));
3669
- return React13__default.Children.toArray(children).map((child) => {
3787
+ return React14__default.Children.toArray(children).map((child) => {
3670
3788
  var _a6;
3671
- if (!React13__default.isValidElement(child))
3789
+ if (!React14__default.isValidElement(child))
3672
3790
  return null;
3673
3791
  if (child.type === AutocompleteItemGroup) {
3674
3792
  const groupProps = child.props;
@@ -3677,11 +3795,11 @@ var filterChildren = (children, collectionItems) => {
3677
3795
  collectionItems
3678
3796
  );
3679
3797
  const hasItems = filteredGroupChildren.some(
3680
- (groupChild) => React13__default.isValidElement(groupChild) && groupChild.type !== AutocompleteItemGroupLabel
3798
+ (groupChild) => React14__default.isValidElement(groupChild) && groupChild.type !== AutocompleteItemGroupLabel
3681
3799
  );
3682
3800
  if (!hasItems)
3683
3801
  return null;
3684
- return React13__default.cloneElement(child, groupProps, ...filteredGroupChildren);
3802
+ return React14__default.cloneElement(child, groupProps, ...filteredGroupChildren);
3685
3803
  }
3686
3804
  const itemProps = (_a6 = child.props) == null ? void 0 : _a6.item;
3687
3805
  if (itemProps) {
@@ -3692,8 +3810,8 @@ var filterChildren = (children, collectionItems) => {
3692
3810
  };
3693
3811
  var extractItemsFromChildren = (children) => {
3694
3812
  const items = [];
3695
- React13__default.Children.forEach(children, (child) => {
3696
- if (!React13__default.isValidElement(child))
3813
+ React14__default.Children.forEach(children, (child) => {
3814
+ if (!React14__default.isValidElement(child))
3697
3815
  return;
3698
3816
  if (child.type === AutocompleteItemGroup) {
3699
3817
  items.push(
@@ -3709,7 +3827,7 @@ var extractItemsFromChildren = (children) => {
3709
3827
  });
3710
3828
  return items;
3711
3829
  };
3712
- var texts14 = createTexts({
3830
+ var texts15 = createTexts({
3713
3831
  noItemsFound: {
3714
3832
  nb: "Ingen resultater",
3715
3833
  nn: "Ingen resultat",
@@ -4230,7 +4348,7 @@ function Option({ item, state }) {
4230
4348
  );
4231
4349
  }, []);
4232
4350
  return /* @__PURE__ */ jsx(OptionContext.Provider, { value: { labelProps, descriptionProps }, children: /* @__PURE__ */ jsx(
4233
- ListItem,
4351
+ ListItem$1,
4234
4352
  {
4235
4353
  ...optionProps,
4236
4354
  ...dataFields,
@@ -4242,7 +4360,7 @@ function Option({ item, state }) {
4242
4360
  }
4243
4361
  ) });
4244
4362
  }
4245
- var OptionContext = React13__default.createContext({
4363
+ var OptionContext = React14__default.createContext({
4246
4364
  labelProps: {},
4247
4365
  descriptionProps: {}
4248
4366
  });
@@ -4257,7 +4375,7 @@ function ListBoxSection({ section, state }) {
4257
4375
  });
4258
4376
  const isFirstSection = section.key === state.collection.getFirstKey();
4259
4377
  const titleColor = useColorModeValue("darkGrey", "white");
4260
- return /* @__PURE__ */ jsx(List, { children: /* @__PURE__ */ jsxs(ListItem, { ...itemProps, listStyleType: "none", marginLeft: "0", paddingX: "1", children: [
4378
+ return /* @__PURE__ */ jsx(List, { children: /* @__PURE__ */ jsxs(ListItem$1, { ...itemProps, listStyleType: "none", marginLeft: "0", paddingX: "1", children: [
4261
4379
  section.rendered && /* @__PURE__ */ jsx(
4262
4380
  Box,
4263
4381
  {
@@ -4525,7 +4643,7 @@ var NumericStepper = ({
4525
4643
  {
4526
4644
  icon: /* @__PURE__ */ jsx(SubtractIcon, { stepLabel: clampedStepSize }),
4527
4645
  "aria-label": t(
4528
- texts15.decrementButtonAriaLabel(
4646
+ texts16.decrementButtonAriaLabel(
4529
4647
  clampedStepSize,
4530
4648
  stepSize === 1 ? ariaLabelContext.singular : ariaLabelContext.plural
4531
4649
  )
@@ -4552,7 +4670,7 @@ var NumericStepper = ({
4552
4670
  css: styles.input,
4553
4671
  width: `${Math.max(value.toString().length + 1, 3)}ch`,
4554
4672
  "aria-live": "assertive",
4555
- "aria-label": ariaLabelContext.plural === "" ? "" : t(texts15.currentNumberAriaLabel(ariaLabelContext.plural)),
4673
+ "aria-label": ariaLabelContext.plural === "" ? "" : t(texts16.currentNumberAriaLabel(ariaLabelContext.plural)),
4556
4674
  onChange: (event) => {
4557
4675
  const numericInput = Number(event.target.value);
4558
4676
  if (Number.isNaN(numericInput)) {
@@ -4573,7 +4691,7 @@ var NumericStepper = ({
4573
4691
  paddingX: 0.5,
4574
4692
  padding: 0,
4575
4693
  textAlign: "center",
4576
- "aria-label": ariaLabelContext.plural === "" ? "" : t(texts15.currentNumberAriaLabel(ariaLabelContext.plural)),
4694
+ "aria-label": ariaLabelContext.plural === "" ? "" : t(texts16.currentNumberAriaLabel(ariaLabelContext.plural)),
4577
4695
  children: value
4578
4696
  }
4579
4697
  ),
@@ -4583,7 +4701,7 @@ var NumericStepper = ({
4583
4701
  ref: addButtonRef,
4584
4702
  icon: /* @__PURE__ */ jsx(AddIcon, { stepLabel: clampedStepSize }),
4585
4703
  "aria-label": t(
4586
- texts15.incrementButtonAriaLabel(
4704
+ texts16.incrementButtonAriaLabel(
4587
4705
  clampedStepSize,
4588
4706
  stepSize === 1 ? ariaLabelContext.singular : ariaLabelContext.plural
4589
4707
  )
@@ -4657,7 +4775,7 @@ var AddIcon = ({ stepLabel }) => /* @__PURE__ */ jsxs(Fragment, { children: [
4657
4775
  ] }),
4658
4776
  stepLabel > 1 && /* @__PURE__ */ jsx(chakra.span, { paddingRight: "1", children: stepLabel.toString() })
4659
4777
  ] });
4660
- var texts15 = createTexts({
4778
+ var texts16 = createTexts({
4661
4779
  currentNumberAriaLabel(ariaContext) {
4662
4780
  return {
4663
4781
  nb: `Valgt antall ${ariaContext}`,
@@ -4721,7 +4839,7 @@ var PasswordInput = ({
4721
4839
  event.preventDefault();
4722
4840
  setVisible(!visible);
4723
4841
  },
4724
- children: visible ? t(texts16.hidePassword) : t(texts16.showPassword)
4842
+ children: visible ? t(texts17.hidePassword) : t(texts17.showPassword)
4725
4843
  }
4726
4844
  ),
4727
4845
  ...rest
@@ -4746,7 +4864,7 @@ var VisibilityTrigger = ({
4746
4864
  }
4747
4865
  );
4748
4866
  };
4749
- var texts16 = createTexts({
4867
+ var texts17 = createTexts({
4750
4868
  showPassword: {
4751
4869
  nb: "Vis",
4752
4870
  nn: "Vis",
@@ -4798,14 +4916,14 @@ var CountryCodeSelect = ({
4798
4916
  positioning: { placement: "bottom", flip: false },
4799
4917
  collection: filteredCallingCodes,
4800
4918
  lazyMount: true,
4801
- "aria-label": t(texts17.countryCode),
4919
+ "aria-label": t(texts18.countryCode),
4802
4920
  sideRadiusVariant: "rightSideSquare",
4803
4921
  role: "combobox",
4804
4922
  children: filteredCallingCodes.items.map((code) => /* @__PURE__ */ jsx(SelectItem, { item: code, children: code.label }, code.label))
4805
4923
  }
4806
4924
  );
4807
4925
  };
4808
- var texts17 = createTexts({
4926
+ var texts18 = createTexts({
4809
4927
  countryCode: {
4810
4928
  nb: "Landkode",
4811
4929
  nn: "Landskode",
@@ -4828,7 +4946,7 @@ var PhoneNumberInput = ({
4828
4946
  errorText
4829
4947
  } = props;
4830
4948
  const { t } = useTranslation();
4831
- const label = externalLabel ?? (optional ? t(texts18.phoneNumberOptional) : t(texts18.phoneNumber));
4949
+ const label = externalLabel ?? (optional ? t(texts19.phoneNumberOptional) : t(texts19.phoneNumber));
4832
4950
  const [value, onChange] = useControllableState({
4833
4951
  value: externalValue,
4834
4952
  onChange: externalOnChange,
@@ -4883,7 +5001,7 @@ var PhoneNumberInput = ({
4883
5001
  )
4884
5002
  ] });
4885
5003
  };
4886
- var texts18 = createTexts({
5004
+ var texts19 = createTexts({
4887
5005
  phoneNumber: {
4888
5006
  nb: "Telefonnummer",
4889
5007
  nn: "Telefonnummer",
@@ -4935,16 +5053,16 @@ var SearchInput = ({
4935
5053
  variant: "ghost",
4936
5054
  type: "button",
4937
5055
  size: "sm",
4938
- "aria-label": t(texts19.reset),
5056
+ "aria-label": t(texts20.reset),
4939
5057
  icon: /* @__PURE__ */ jsx(CloseOutline24Icon, {}),
4940
5058
  onClick: onReset
4941
5059
  }
4942
5060
  ),
4943
- label: label ?? t(texts19.label)
5061
+ label: label ?? t(texts20.label)
4944
5062
  }
4945
5063
  );
4946
5064
  };
4947
- var texts19 = createTexts({
5065
+ var texts20 = createTexts({
4948
5066
  label: {
4949
5067
  nb: "S\xF8k",
4950
5068
  nn: "S\xF8k",
@@ -5480,72 +5598,6 @@ var TravelTag = function TravelTag2({
5480
5598
  }
5481
5599
  );
5482
5600
  };
5483
- var ExternalIcon = ({
5484
- label,
5485
- size
5486
- }) => /* @__PURE__ */ jsxs(Fragment, { children: [
5487
- size === "lg" || size === "md" ? /* @__PURE__ */ jsx(LinkOutOutline24Icon, { "aria-hidden": true, display: "inline" }) : /* @__PURE__ */ jsx(LinkOutOutline18Icon, { "aria-hidden": true, display: "inline" }),
5488
- /* @__PURE__ */ jsx(VisuallyHidden, { children: label })
5489
- ] });
5490
- var TextLink = ({
5491
- ref,
5492
- children,
5493
- external,
5494
- href,
5495
- ...props
5496
- }) => {
5497
- const { t } = useTranslation();
5498
- const isExternal = external ?? Boolean((href == null ? void 0 : href.startsWith("http://")) || (href == null ? void 0 : href.startsWith("https://")));
5499
- const externalLabel = t ? t(texts20.externalLink) : texts20.externalLink.en;
5500
- if (props.asChild && isValidElement(children)) {
5501
- return /* @__PURE__ */ jsx(
5502
- Link,
5503
- {
5504
- href,
5505
- ...props,
5506
- ref,
5507
- ...isExternal && {
5508
- target: "_blank",
5509
- rel: "noopener noreferrer"
5510
- },
5511
- children: cloneElement(children, {
5512
- ...children.props,
5513
- children: /* @__PURE__ */ jsxs(Fragment, { children: [
5514
- children.props.children,
5515
- isExternal && /* @__PURE__ */ jsx(ExternalIcon, { label: externalLabel, size: props.size })
5516
- ] })
5517
- })
5518
- }
5519
- );
5520
- }
5521
- return /* @__PURE__ */ jsxs(
5522
- Link,
5523
- {
5524
- href,
5525
- ...props,
5526
- ref,
5527
- ...isExternal && {
5528
- target: "_blank",
5529
- rel: "noopener noreferrer"
5530
- },
5531
- children: [
5532
- children,
5533
- isExternal && /* @__PURE__ */ jsx(ExternalIcon, { label: externalLabel, size: props.size })
5534
- ]
5535
- }
5536
- );
5537
- };
5538
- var texts20 = createTexts({
5539
- externalLink: {
5540
- nb: "Ekstern lenke",
5541
- nn: "Ekstern lenke",
5542
- sv: "Extern l\xE4nk",
5543
- en: "External link"
5544
- }
5545
- });
5546
- var List = List$1.Root;
5547
- var ListItem2 = List$1.Item;
5548
- var ListIndicator = List$1.Indicator;
5549
5601
  var CargonetLogo = ({
5550
5602
  ref,
5551
5603
  ...props
@@ -6206,16 +6258,16 @@ var NudgeContent = ({
6206
6258
  ...props
6207
6259
  }) => {
6208
6260
  const [currentStep, setCurrentStep] = useState(1);
6209
- const childrenArray = React13__default.Children.toArray(children);
6261
+ const childrenArray = React14__default.Children.toArray(children);
6210
6262
  const { open } = usePopoverContext();
6211
6263
  useEffect(() => {
6212
6264
  setCurrentStep(1);
6213
6265
  }, [children, open]);
6214
6266
  const wizardPages = childrenArray.filter(
6215
- (child) => React13__default.isValidElement(child) && child.type === NudgeWizardStep
6267
+ (child) => React14__default.isValidElement(child) && child.type === NudgeWizardStep
6216
6268
  );
6217
6269
  const restChildren = childrenArray.filter(
6218
- (child) => !React13__default.isValidElement(child) || child.type !== NudgeWizardStep
6270
+ (child) => !React14__default.isValidElement(child) || child.type !== NudgeWizardStep
6219
6271
  );
6220
6272
  const totalSteps = wizardPages.length;
6221
6273
  const isLastStep = totalSteps === currentStep;
@@ -6333,7 +6385,7 @@ var PaginationEllipsis = ({
6333
6385
  ref,
6334
6386
  ...props
6335
6387
  }) => {
6336
- return /* @__PURE__ */ jsx(ListItem2, { children: /* @__PURE__ */ jsx(Pagination$1.Ellipsis, { ref, ...props, asChild: true, children: /* @__PURE__ */ jsx(Box, { cursor: "default", children: "..." }) }) });
6388
+ return /* @__PURE__ */ jsx(ListItem, { children: /* @__PURE__ */ jsx(Pagination$1.Ellipsis, { ref, ...props, asChild: true, children: /* @__PURE__ */ jsx(Box, { cursor: "default", children: "..." }) }) });
6337
6389
  };
6338
6390
  var PaginationItem = ({
6339
6391
  ref,
@@ -6343,7 +6395,7 @@ var PaginationItem = ({
6343
6395
  const { t } = useTranslation();
6344
6396
  const { page, totalPages } = usePaginationContext();
6345
6397
  if (rootProps.getHref) {
6346
- return /* @__PURE__ */ jsx(ListItem2, { children: /* @__PURE__ */ jsx(
6398
+ return /* @__PURE__ */ jsx(ListItem, { children: /* @__PURE__ */ jsx(
6347
6399
  Pagination$1.Item,
6348
6400
  {
6349
6401
  as: props.as ?? "a",
@@ -6358,7 +6410,7 @@ var PaginationItem = ({
6358
6410
  }
6359
6411
  ) });
6360
6412
  }
6361
- return /* @__PURE__ */ jsx(ListItem2, { children: /* @__PURE__ */ jsx(
6413
+ return /* @__PURE__ */ jsx(ListItem, { children: /* @__PURE__ */ jsx(
6362
6414
  Pagination$1.Item,
6363
6415
  {
6364
6416
  as: props.as ?? "button",
@@ -6382,7 +6434,7 @@ var PaginationPrevTrigger = ({
6382
6434
  if (page <= 1)
6383
6435
  return null;
6384
6436
  if (rootProps.getHref) {
6385
- return /* @__PURE__ */ jsx(ListItem2, { children: /* @__PURE__ */ jsx(
6437
+ return /* @__PURE__ */ jsx(ListItem, { children: /* @__PURE__ */ jsx(
6386
6438
  Pagination$1.PrevTrigger,
6387
6439
  {
6388
6440
  as: props.as ?? "a",
@@ -6399,7 +6451,7 @@ var PaginationPrevTrigger = ({
6399
6451
  }
6400
6452
  ) });
6401
6453
  }
6402
- return /* @__PURE__ */ jsx(ListItem2, { children: /* @__PURE__ */ jsx(
6454
+ return /* @__PURE__ */ jsx(ListItem, { children: /* @__PURE__ */ jsx(
6403
6455
  Pagination$1.PrevTrigger,
6404
6456
  {
6405
6457
  ref,
@@ -6424,7 +6476,7 @@ var PaginationNextTrigger = ({
6424
6476
  if (page >= totalPages)
6425
6477
  return null;
6426
6478
  if (rootProps.getHref) {
6427
- return /* @__PURE__ */ jsx(ListItem2, { children: /* @__PURE__ */ jsx(
6479
+ return /* @__PURE__ */ jsx(ListItem, { children: /* @__PURE__ */ jsx(
6428
6480
  Pagination$1.NextTrigger,
6429
6481
  {
6430
6482
  ref,
@@ -6439,7 +6491,7 @@ var PaginationNextTrigger = ({
6439
6491
  }
6440
6492
  ) });
6441
6493
  }
6442
- return /* @__PURE__ */ jsx(ListItem2, { children: /* @__PURE__ */ jsx(
6494
+ return /* @__PURE__ */ jsx(ListItem, { children: /* @__PURE__ */ jsx(
6443
6495
  Pagination$1.NextTrigger,
6444
6496
  {
6445
6497
  ref,
@@ -6518,7 +6570,7 @@ var PopoverContent = ({
6518
6570
  ...props
6519
6571
  }) => {
6520
6572
  const { colorMode } = useColorMode();
6521
- const closeButtonRef = React13__default.useRef(null);
6573
+ const closeButtonRef = React14__default.useRef(null);
6522
6574
  const { open } = usePopoverContext();
6523
6575
  useEffect(() => {
6524
6576
  if (showCloseButton && open && closeButtonRef.current) {
@@ -6720,7 +6772,7 @@ var SporProvider = ({
6720
6772
  children
6721
6773
  ] }) }) });
6722
6774
  };
6723
- var StepperContext = React13__default.createContext(null);
6775
+ var StepperContext = React14__default.createContext(null);
6724
6776
  var StepperProvider = ({
6725
6777
  activeStep,
6726
6778
  children,
@@ -6737,7 +6789,7 @@ var StepperProvider = ({
6737
6789
  );
6738
6790
  };
6739
6791
  var useStepper = () => {
6740
- const context = React13__default.useContext(StepperContext);
6792
+ const context = React14__default.useContext(StepperContext);
6741
6793
  if (!context) {
6742
6794
  throw new Error(
6743
6795
  "useStepper must be used within a StepperProvider. Most likely, you forgot to wrap your StepperStep in a Stepper component"
@@ -8065,6 +8117,12 @@ var menuAnatomy = createAnatomy("menu").parts(
8065
8117
  "triggerItem",
8066
8118
  "checkboxItem"
8067
8119
  );
8120
+ var errorSummaryAnatomy = createAnatomy("error-summary").parts(
8121
+ "container",
8122
+ "heading",
8123
+ "list",
8124
+ "item"
8125
+ );
8068
8126
 
8069
8127
  // src/theme/slot-recipes/accordion.ts
8070
8128
  var accordionSlotRecipe = defineSlotRecipe({
@@ -9601,6 +9659,34 @@ var drawerSlotRecipe = defineSlotRecipe({
9601
9659
  }
9602
9660
  }
9603
9661
  });
9662
+ var errorSummarySlotRecipe = defineSlotRecipe({
9663
+ slots: errorSummaryAnatomy.keys(),
9664
+ className: "spor-error-summary",
9665
+ base: {
9666
+ container: {
9667
+ display: "flex",
9668
+ flexDirection: "column",
9669
+ padding: [3, 5],
9670
+ backgroundColor: "surface.critical",
9671
+ borderRadius: "md"
9672
+ },
9673
+ heading: {
9674
+ fontSize: "md",
9675
+ fontWeight: "bold",
9676
+ color: "text.critical",
9677
+ gap: [1, 1.5],
9678
+ alignItems: "center"
9679
+ },
9680
+ list: {
9681
+ alignItems: "flex-start",
9682
+ paddingLeft: [4, 5]
9683
+ },
9684
+ item: {
9685
+ color: "text.critical.subtle",
9686
+ marginTop: [2, 1.5]
9687
+ }
9688
+ }
9689
+ });
9604
9690
  var fieldSlotRecipe = defineSlotRecipe({
9605
9691
  className: "spor-field",
9606
9692
  slots: fieldAnatomy.keys(),
@@ -12150,7 +12236,8 @@ var slotRecipes = {
12150
12236
  tooltip: popoverSlotRecipe,
12151
12237
  tag: inputChipSlotRecipe,
12152
12238
  menu: menuSlotRecipe,
12153
- choiceChip: choiceChipSlotRecipe
12239
+ choiceChip: choiceChipSlotRecipe,
12240
+ errorSummary: errorSummarySlotRecipe
12154
12241
  };
12155
12242
  var animations = defineTokens.animations({
12156
12243
  spin: {
@@ -12998,6 +13085,6 @@ var TooltipContent = ({
12998
13085
  ] }) }) });
12999
13086
  };
13000
13087
 
13001
- export { Accordion, AccordionItem, AccordionItemContent, AccordionItemTrigger, Alert, AttachedInputs, Autocomplete, AutocompleteItem, AutocompleteItemGroup, AutocompleteItemGroupLabel, Badge, Brand, Breadcrumb, Button, ButtonGroup, Calendar, CalendarCell, CalendarGrid, CalendarHeader, CalendarProvider, CardSelect, CardSelectContent, CardSelectTrigger, CargonetLogo, Checkbox, CheckboxGroup, ChoiceChip, ChoiceChipGroup, ChoiceChipLabel, Clipboard, ClipboardButton, CloseButton, CloseDrawerLine, Code, ColorInlineLoader, ColorModeButton, ColorModeIcon, ColorModeProvider, ColorSpinner, Combobox2 as Combobox, ContentLoader, DarkFullScreenLoader, DarkInlineLoader, DarkSpinner, DatePicker, DateRangePicker, DialogActionTrigger, DialogBackdrop, DialogBody, DialogCloseTrigger, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogRoot, DialogTitle, DialogTrigger, Drawer, DrawerActionTrigger, DrawerBackTrigger, DrawerBackdrop, DrawerBody, DrawerCloseTrigger, DrawerContent, DrawerFooter, DrawerFullScreenHeader, DrawerHeader, DrawerTitle, DrawerTrigger, Expandable, ExpandableAlert, ExpandableItem, Field3 as Field, FieldErrorText, FieldLabel, Fieldset, FieldsetContent, FieldsetErrorText, FieldsetHelperText, FieldsetLegend, FilterChip, FloatingActionButton, Heading, IconButton, InfoTag, Input, InputChip, ItemDescription, ItemLabel, JumpButton, Language, LanguageProvider, LightFullScreenLoader, LightInlineLoader, LightSpinner, LineIcon, List, ListBox, ListIndicator, ListItem2 as ListItem, Menu, MenuCheckboxItem, MenuContent, MenuItem, MenuItemGroup, MenuRadioItem, MenuRadioItemGroup, MenuSeparator, MenuTrigger, MenuTriggerItem, NativeSelect, Nudge, NudgeActions, NudgeCloseTrigger, NudgeContent, NudgeTrigger, NudgeWizardStep, NumericStepper, Pagination, PaginationEllipsis, PaginationItem, PaginationItems, PaginationNextTrigger, PaginationPrevTrigger, PasswordInput, PhoneNumberInput, PlayPauseButton, Popover2 as Popover, PopoverContent, PopoverTrigger, PressableCard, ProgressBar, ProgressIndicator, ProgressLoader, Radio, RadioCard, RadioCardGroup, RadioCardLabel, RadioGroup, RangeCalendar, ScrollCalendar, SearchInput, Select, SelectContent, SelectItem, SelectItemGroup, SelectItemText, SelectLabel, SelectRoot, SelectTrigger, SelectValueText, Separator, ServiceAlert, Skeleton, SkeletonCircle, SkeletonText, SkipButton, SporProvider, StaticCard, Stepper, StepperStep, SvgBox, Switch, Table, TableBody, TableColumnHeader, Tabs, TabsContent, TabsIndicator, TabsList, TabsTrigger, Text3 as Text, TextLink, Textarea, TimePicker, Tooltip, TooltipContent, TooltipTrigger, TravelTag, VyLogo, VyLogoPride, createTexts, createToast, fontFaces, slugify, system, themes, useCalendar, useColorMode, useColorModeValue, useMenuContext, useTableSort, useTranslation };
13088
+ export { Accordion, AccordionItem, AccordionItemContent, AccordionItemTrigger, Alert, AttachedInputs, Autocomplete, AutocompleteItem, AutocompleteItemGroup, AutocompleteItemGroupLabel, Badge, Brand, Breadcrumb, Button, ButtonGroup, Calendar, CalendarCell, CalendarGrid, CalendarHeader, CalendarProvider, CardSelect, CardSelectContent, CardSelectTrigger, CargonetLogo, Checkbox, CheckboxGroup, ChoiceChip, ChoiceChipGroup, ChoiceChipLabel, Clipboard, ClipboardButton, CloseButton, CloseDrawerLine, Code, ColorInlineLoader, ColorModeButton, ColorModeIcon, ColorModeProvider, ColorSpinner, Combobox2 as Combobox, ContentLoader, DarkFullScreenLoader, DarkInlineLoader, DarkSpinner, DatePicker, DateRangePicker, DialogActionTrigger, DialogBackdrop, DialogBody, DialogCloseTrigger, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogRoot, DialogTitle, DialogTrigger, Drawer, DrawerActionTrigger, DrawerBackTrigger, DrawerBackdrop, DrawerBody, DrawerCloseTrigger, DrawerContent, DrawerFooter, DrawerFullScreenHeader, DrawerHeader, DrawerTitle, DrawerTrigger, ErrorSummary, ErrorSummaryItem, Expandable, ExpandableAlert, ExpandableItem, Field3 as Field, FieldErrorText, FieldLabel, Fieldset, FieldsetContent, FieldsetErrorText, FieldsetHelperText, FieldsetLegend, FilterChip, FloatingActionButton, Heading, IconButton, InfoTag, Input, InputChip, ItemDescription, ItemLabel, JumpButton, Language, LanguageProvider, LightFullScreenLoader, LightInlineLoader, LightSpinner, LineIcon, List, ListBox, ListIndicator, ListItem, Menu, MenuCheckboxItem, MenuContent, MenuItem, MenuItemGroup, MenuRadioItem, MenuRadioItemGroup, MenuSeparator, MenuTrigger, MenuTriggerItem, NativeSelect, Nudge, NudgeActions, NudgeCloseTrigger, NudgeContent, NudgeTrigger, NudgeWizardStep, NumericStepper, Pagination, PaginationEllipsis, PaginationItem, PaginationItems, PaginationNextTrigger, PaginationPrevTrigger, PasswordInput, PhoneNumberInput, PlayPauseButton, Popover2 as Popover, PopoverContent, PopoverTrigger, PressableCard, ProgressBar, ProgressIndicator, ProgressLoader, Radio, RadioCard, RadioCardGroup, RadioCardLabel, RadioGroup, RangeCalendar, ScrollCalendar, SearchInput, Select, SelectContent, SelectItem, SelectItemGroup, SelectItemText, SelectLabel, SelectRoot, SelectTrigger, SelectValueText, Separator, ServiceAlert, Skeleton, SkeletonCircle, SkeletonText, SkipButton, SporProvider, StaticCard, Stepper, StepperStep, SvgBox, Switch, Table, TableBody, TableColumnHeader, Tabs, TabsContent, TabsIndicator, TabsList, TabsTrigger, Text3 as Text, TextLink, Textarea, TimePicker, Tooltip, TooltipContent, TooltipTrigger, TravelTag, VyLogo, VyLogoPride, createTexts, createToast, fontFaces, slugify, system, themes, useCalendar, useColorMode, useColorModeValue, useMenuContext, useTableSort, useTranslation };
13002
13089
  //# sourceMappingURL=out.js.map
13003
13090
  //# sourceMappingURL=index.mjs.map