fds-vue-core 2.0.2 → 2.0.3

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 (53) hide show
  1. package/dist/components/Blocks/FdsAlertBlock/FdsAlertBlock.vue.d.ts +1 -1
  2. package/dist/components/Buttons/{FdsButton/types.d.ts → ButtonBaseProps.d.ts} +4 -5
  3. package/dist/components/Buttons/ButtonBaseProps.d.ts.map +1 -0
  4. package/dist/components/Buttons/FdsButtonCopy/FdsButtonCopy.stories.d.ts +7 -0
  5. package/dist/components/Buttons/FdsButtonCopy/FdsButtonCopy.stories.d.ts.map +1 -0
  6. package/dist/components/Buttons/{FdsCopyButton/FdsCopyButton.vue.d.ts → FdsButtonCopy/FdsButtonCopy.vue.d.ts} +1 -1
  7. package/dist/components/Buttons/FdsButtonCopy/FdsButtonCopy.vue.d.ts.map +1 -0
  8. package/dist/components/Buttons/{FdsCopyButton → FdsButtonCopy}/types.d.ts +0 -1
  9. package/dist/components/Buttons/FdsButtonCopy/types.d.ts.map +1 -0
  10. package/dist/components/Buttons/FdsButtonIcon/FdsButtonIcon.stories.d.ts +7 -0
  11. package/dist/components/Buttons/FdsButtonIcon/FdsButtonIcon.stories.d.ts.map +1 -0
  12. package/dist/components/Buttons/{FdsIconButton/FdsIconButton.vue.d.ts → FdsButtonIcon/FdsButtonIcon.vue.d.ts} +1 -1
  13. package/dist/components/Buttons/FdsButtonIcon/FdsButtonIcon.vue.d.ts.map +1 -0
  14. package/dist/components/Buttons/{FdsIconButton → FdsButtonIcon}/types.d.ts +1 -2
  15. package/dist/components/Buttons/FdsButtonIcon/types.d.ts.map +1 -0
  16. package/dist/components/Buttons/FdsButtonMinor/FdsButtonMinor.stories.d.ts +7 -0
  17. package/dist/components/Buttons/FdsButtonMinor/FdsButtonMinor.stories.d.ts.map +1 -0
  18. package/dist/components/Buttons/FdsButtonMinor/FdsButtonMinor.vue.d.ts +23 -0
  19. package/dist/components/Buttons/FdsButtonMinor/FdsButtonMinor.vue.d.ts.map +1 -0
  20. package/dist/components/Buttons/FdsButtonPrimary/FdsButtonPrimary.stories.d.ts +9 -0
  21. package/dist/components/Buttons/FdsButtonPrimary/FdsButtonPrimary.stories.d.ts.map +1 -0
  22. package/dist/components/Buttons/FdsButtonPrimary/FdsButtonPrimary.vue.d.ts +20 -0
  23. package/dist/components/Buttons/FdsButtonPrimary/FdsButtonPrimary.vue.d.ts.map +1 -0
  24. package/dist/components/Buttons/FdsButtonSecondary/FdsButtonSecondary.stories.d.ts +7 -0
  25. package/dist/components/Buttons/FdsButtonSecondary/FdsButtonSecondary.stories.d.ts.map +1 -0
  26. package/dist/components/Buttons/FdsButtonSecondary/FdsButtonSecondary.vue.d.ts +20 -0
  27. package/dist/components/Buttons/FdsButtonSecondary/FdsButtonSecondary.vue.d.ts.map +1 -0
  28. package/dist/components/FdsModal/FdsModal.stories.d.ts.map +1 -1
  29. package/dist/components/FdsTreeView/TreeNode.vue.d.ts.map +1 -1
  30. package/dist/components/FdsTruncatedText/FdsTruncatedText.vue.d.ts.map +1 -1
  31. package/dist/components/Form/FdsInput/FdsInput.vue.d.ts.map +1 -1
  32. package/dist/components/Tabs/FdsTabs/FdsTabs.vue.d.ts +1 -1
  33. package/dist/fds-vue-core.cjs.js +398 -242
  34. package/dist/fds-vue-core.cjs.js.map +1 -1
  35. package/dist/fds-vue-core.css +15 -18
  36. package/dist/fds-vue-core.es.js +399 -243
  37. package/dist/fds-vue-core.es.js.map +1 -1
  38. package/dist/index.d.ts +10 -6
  39. package/dist/index.d.ts.map +1 -1
  40. package/package.json +1 -1
  41. package/dist/components/Buttons/FdsButton/FdsButton.stories.d.ts +0 -14
  42. package/dist/components/Buttons/FdsButton/FdsButton.stories.d.ts.map +0 -1
  43. package/dist/components/Buttons/FdsButton/FdsButton.vue.d.ts +0 -31
  44. package/dist/components/Buttons/FdsButton/FdsButton.vue.d.ts.map +0 -1
  45. package/dist/components/Buttons/FdsButton/types.d.ts.map +0 -1
  46. package/dist/components/Buttons/FdsCopyButton/FdsCopyButton.stories.d.ts +0 -9
  47. package/dist/components/Buttons/FdsCopyButton/FdsCopyButton.stories.d.ts.map +0 -1
  48. package/dist/components/Buttons/FdsCopyButton/FdsCopyButton.vue.d.ts.map +0 -1
  49. package/dist/components/Buttons/FdsCopyButton/types.d.ts.map +0 -1
  50. package/dist/components/Buttons/FdsIconButton/FdsIconButton.stories.d.ts +0 -9
  51. package/dist/components/Buttons/FdsIconButton/FdsIconButton.stories.d.ts.map +0 -1
  52. package/dist/components/Buttons/FdsIconButton/FdsIconButton.vue.d.ts.map +0 -1
  53. package/dist/components/Buttons/FdsIconButton/types.d.ts.map +0 -1
@@ -1,4 +1,4 @@
1
- import { reactive, ref, watch, computed, defineComponent, useSlots, nextTick, createElementBlock, openBlock, normalizeClass, withDirectives, createCommentVNode, createElementVNode, vModelCheckbox, renderSlot, normalizeStyle, createBlock, inject, resolveComponent, createVNode, unref, withCtx, Fragment, createTextVNode, toDisplayString, withModifiers, renderList, withKeys, watchEffect, resolveDynamicComponent, mergeProps, vModelDynamic, provide, vModelText, vModelSelect, onMounted, vShow, onBeforeUnmount, Teleport } from "vue";
1
+ import { reactive, ref, watch, computed, defineComponent, useSlots, nextTick, createElementBlock, openBlock, normalizeClass, withDirectives, createCommentVNode, createElementVNode, vModelCheckbox, renderSlot, normalizeStyle, createBlock, inject, resolveComponent, createVNode, unref, withCtx, Fragment, createTextVNode, toDisplayString, withModifiers, renderList, withKeys, watchEffect, resolveDynamicComponent, mergeProps, vModelDynamic, provide, onMounted, vModelText, vModelSelect, vShow, onBeforeUnmount, Teleport } from "vue";
2
2
  const getTitleFromProperties = (node, titleTemplate) => {
3
3
  if (!titleTemplate) {
4
4
  return node.title;
@@ -403,9 +403,9 @@ const useTreeState = (options = {}) => {
403
403
  isEmptySearchResult
404
404
  };
405
405
  };
406
- const _hoisted_1$k = ["id", "name", "value", "disabled", "required"];
406
+ const _hoisted_1$n = ["id", "name", "value", "disabled", "required"];
407
407
  const _hoisted_2$d = ["for"];
408
- const _sfc_main$r = /* @__PURE__ */ defineComponent({
408
+ const _sfc_main$t = /* @__PURE__ */ defineComponent({
409
409
  __name: "FdsCheckbox",
410
410
  props: {
411
411
  checked: { type: Boolean, default: false },
@@ -474,7 +474,7 @@ const _sfc_main$r = /* @__PURE__ */ defineComponent({
474
474
  checkboxClasses.value
475
475
  ]),
476
476
  onChange: handleChange
477
- }, null, 42, _hoisted_1$k), [
477
+ }, null, 42, _hoisted_1$n), [
478
478
  [vModelCheckbox, internalChecked.value]
479
479
  ]),
480
480
  slots.default ? (openBlock(), createElementBlock("label", {
@@ -1000,8 +1000,8 @@ const icons = {
1000
1000
  </defs>
1001
1001
  </svg>`
1002
1002
  };
1003
- const _hoisted_1$j = ["innerHTML"];
1004
- const _sfc_main$q = /* @__PURE__ */ defineComponent({
1003
+ const _hoisted_1$m = ["innerHTML"];
1004
+ const _sfc_main$s = /* @__PURE__ */ defineComponent({
1005
1005
  __name: "FdsIcon",
1006
1006
  props: {
1007
1007
  name: {},
@@ -1027,7 +1027,7 @@ const _sfc_main$q = /* @__PURE__ */ defineComponent({
1027
1027
  class: "inline-flex items-center justify-center align-middle",
1028
1028
  style: normalizeStyle({ width: pixelSize.value, height: pixelSize.value }),
1029
1029
  innerHTML: svgHtml.value
1030
- }, null, 12, _hoisted_1$j);
1030
+ }, null, 12, _hoisted_1$m);
1031
1031
  };
1032
1032
  }
1033
1033
  });
@@ -1038,10 +1038,10 @@ const _export_sfc = (sfc, props) => {
1038
1038
  }
1039
1039
  return target;
1040
1040
  };
1041
- const FdsIcon = /* @__PURE__ */ _export_sfc(_sfc_main$q, [["__scopeId", "data-v-e24163cd"]]);
1042
- const _hoisted_1$i = ["id", "type", "disabled", "aria-label", "aria-disabled"];
1043
- const _sfc_main$p = /* @__PURE__ */ defineComponent({
1044
- __name: "FdsIconButton",
1041
+ const FdsIcon = /* @__PURE__ */ _export_sfc(_sfc_main$s, [["__scopeId", "data-v-e24163cd"]]);
1042
+ const _hoisted_1$l = ["id", "type", "disabled", "aria-label", "aria-disabled"];
1043
+ const _sfc_main$r = /* @__PURE__ */ defineComponent({
1044
+ __name: "FdsButtonIcon",
1045
1045
  props: {
1046
1046
  icon: {},
1047
1047
  size: { default: "24px" },
@@ -1087,11 +1087,11 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
1087
1087
  name: "spinner",
1088
1088
  class: "animate-spin"
1089
1089
  }, null, 8, ["size"]))
1090
- ], 10, _hoisted_1$i);
1090
+ ], 10, _hoisted_1$l);
1091
1091
  };
1092
1092
  }
1093
1093
  });
1094
- const _sfc_main$o = /* @__PURE__ */ defineComponent({
1094
+ const _sfc_main$q = /* @__PURE__ */ defineComponent({
1095
1095
  __name: "FdsText",
1096
1096
  props: {
1097
1097
  type: { default: "default" }
@@ -1117,10 +1117,10 @@ const _sfc_main$o = /* @__PURE__ */ defineComponent({
1117
1117
  };
1118
1118
  }
1119
1119
  });
1120
- const _hoisted_1$h = { class: "block p-[2px] mb-2 last:mb-0 relative min-h-[28px]" };
1120
+ const _hoisted_1$k = { class: "block p-[2px] mb-2 last:mb-0 relative min-h-[28px]" };
1121
1121
  const _hoisted_2$c = ["id", "name", "value", "checked", "disabled", "required"];
1122
1122
  const _hoisted_3$b = ["for"];
1123
- const _sfc_main$n = /* @__PURE__ */ defineComponent({
1123
+ const _sfc_main$p = /* @__PURE__ */ defineComponent({
1124
1124
  __name: "FdsRadio",
1125
1125
  props: {
1126
1126
  checked: { type: Boolean, default: false },
@@ -1148,7 +1148,7 @@ const _sfc_main$n = /* @__PURE__ */ defineComponent({
1148
1148
  accentClass.value
1149
1149
  ]);
1150
1150
  return (_ctx, _cache) => {
1151
- return openBlock(), createElementBlock("div", _hoisted_1$h, [
1151
+ return openBlock(), createElementBlock("div", _hoisted_1$k, [
1152
1152
  createElementVNode("input", {
1153
1153
  id: inputId.value,
1154
1154
  name: _ctx.name,
@@ -1175,17 +1175,21 @@ const _sfc_main$n = /* @__PURE__ */ defineComponent({
1175
1175
  };
1176
1176
  }
1177
1177
  });
1178
- const _hoisted_1$g = { class: "flex items-center" };
1178
+ const _hoisted_1$j = { class: "flex items-start" };
1179
1179
  const _hoisted_2$b = ["innerHTML"];
1180
- const _hoisted_3$a = { key: 1 };
1180
+ const _hoisted_3$a = {
1181
+ key: 1,
1182
+ style: { "line-height": "25px" }
1183
+ };
1181
1184
  const _hoisted_4$8 = {
1182
1185
  key: 2,
1183
1186
  style: { "max-height": "28px" }
1184
1187
  };
1185
- const _hoisted_5$6 = { key: 0 };
1188
+ const _hoisted_5$6 = { class: "flex flex-col gap-2" };
1189
+ const _hoisted_6$5 = { key: 0 };
1186
1190
  const popoverWidth = 327;
1187
1191
  const popoverHeight = 80;
1188
- const _sfc_main$m = /* @__PURE__ */ defineComponent({
1192
+ const _sfc_main$o = /* @__PURE__ */ defineComponent({
1189
1193
  ...{
1190
1194
  name: "TreeNode"
1191
1195
  },
@@ -1368,30 +1372,30 @@ const _sfc_main$m = /* @__PURE__ */ defineComponent({
1368
1372
  style: normalizeStyle(indent.value),
1369
1373
  class: normalizeClass("pt-2 pb-2")
1370
1374
  }, [
1371
- createElementVNode("div", _hoisted_1$g, [
1372
- hasChildrenNodes.value ? (openBlock(), createBlock(_sfc_main$p, {
1375
+ createElementVNode("div", _hoisted_1$j, [
1376
+ hasChildrenNodes.value ? (openBlock(), createBlock(_sfc_main$r, {
1373
1377
  key: 0,
1374
1378
  onClick: _cache[0] || (_cache[0] = ($event) => unref(treeState)?.toggleExpandNode(props.nodeId)),
1375
1379
  ariaLabel: childrenToggleAriaLabel(props.title),
1376
1380
  icon: unref(treeState)?.getNodeIcon(props.nodeId, props.nodeExpandIcon, props.nodeCollapseIcon) ?? props.nodeExpandIcon,
1377
- size: "20px",
1381
+ size: "24px",
1378
1382
  class: "fill-blue-500 mr-3"
1379
1383
  }, null, 8, ["ariaLabel", "icon"])) : createCommentVNode("", true),
1380
1384
  !hasChildrenNodes.value ? (openBlock(), createElementBlock("div", {
1381
1385
  key: 1,
1382
1386
  style: normalizeStyle({ minWidth: `${_ctx.indentation}px` })
1383
1387
  }, null, 4)) : createCommentVNode("", true),
1384
- createVNode(_sfc_main$r, {
1388
+ createVNode(_sfc_main$t, {
1385
1389
  id: `checkbox-${props.nodeId}`,
1386
1390
  checked: unref(treeState)?.isNodeSelected(props.nodeId),
1387
1391
  indeterminate: _ctx.showIndeterminate && (unref(treeState)?.isNodeIndeterminateById(props.nodeId) ?? false),
1388
1392
  onChange: _cache[1] || (_cache[1] = ($event) => unref(treeState)?.toggleSelectNode(props.nodeId, props.title, props.data)),
1389
- class: "pl-0 flex-1 flex items-center"
1393
+ class: "pl-0 flex-1 flex items-start"
1390
1394
  }, {
1391
1395
  default: withCtx(() => [
1392
1396
  createElementVNode("div", null, [
1393
1397
  _ctx.title ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
1394
- _ctx.searchHighlighting && _ctx.searchEnabled && unref(treeState)?.searchTerm?.value && String(unref(treeState)?.searchTerm?.value || "").trim().length >= (unref(treeState)?.triggerLength ?? 1) ? (openBlock(), createBlock(_sfc_main$o, {
1398
+ _ctx.searchHighlighting && _ctx.searchEnabled && unref(treeState)?.searchTerm?.value && String(unref(treeState)?.searchTerm?.value || "").trim().length >= (unref(treeState)?.triggerLength ?? 1) ? (openBlock(), createBlock(_sfc_main$q, {
1395
1399
  key: 0,
1396
1400
  type: "default"
1397
1401
  }, {
@@ -1401,8 +1405,9 @@ const _sfc_main$m = /* @__PURE__ */ defineComponent({
1401
1405
  }, null, 8, _hoisted_2$b)
1402
1406
  ]),
1403
1407
  _: 1
1404
- })) : (openBlock(), createBlock(_sfc_main$o, {
1408
+ })) : (openBlock(), createBlock(_sfc_main$q, {
1405
1409
  key: 1,
1410
+ style: { "line-height": "25px" },
1406
1411
  type: "default"
1407
1412
  }, {
1408
1413
  default: withCtx(() => [
@@ -1417,7 +1422,7 @@ const _sfc_main$m = /* @__PURE__ */ defineComponent({
1417
1422
  _: 1
1418
1423
  }, 8, ["id", "checked", "indeterminate"]),
1419
1424
  unref(treeState)?.isParentOrChildrenSelected(props.nodeId) && !(unref(treeState)?.isNodeIndeterminateById(props.nodeId) ?? false) ? (openBlock(), createElementBlock("div", _hoisted_4$8, [
1420
- createVNode(_sfc_main$p, {
1425
+ createVNode(_sfc_main$r, {
1421
1426
  ref_key: "triggerRef",
1422
1427
  ref: triggerRef,
1423
1428
  icon: "more",
@@ -1445,13 +1450,12 @@ const _sfc_main$m = /* @__PURE__ */ defineComponent({
1445
1450
  }, ["stop"])),
1446
1451
  onFocusout: onPanelFocusOut
1447
1452
  }, [
1448
- createElementVNode("div", null, [
1453
+ createElementVNode("div", _hoisted_5$6, [
1449
1454
  (openBlock(), createElementBlock(Fragment, null, renderList(options, (option) => {
1450
1455
  return createElementVNode("div", {
1451
- key: option.value,
1452
- class: "flex align-center gap-2 justify-between"
1456
+ key: option.value
1453
1457
  }, [
1454
- createVNode(_sfc_main$n, {
1458
+ createVNode(_sfc_main$p, {
1455
1459
  checked: currentOption.value === option.value,
1456
1460
  id: `tree-popover-${props.nodeId}-${option.value}`,
1457
1461
  name: `tree-popover-${props.nodeId}`,
@@ -1471,7 +1475,7 @@ const _sfc_main$m = /* @__PURE__ */ defineComponent({
1471
1475
  ]);
1472
1476
  }), 64))
1473
1477
  ]),
1474
- createVNode(_sfc_main$p, {
1478
+ createVNode(_sfc_main$r, {
1475
1479
  icon: "cross",
1476
1480
  id: "tree-popover-close-button",
1477
1481
  size: "24px",
@@ -1484,7 +1488,7 @@ const _sfc_main$m = /* @__PURE__ */ defineComponent({
1484
1488
  ])) : createCommentVNode("", true)
1485
1489
  ])
1486
1490
  ], 4),
1487
- unref(expandedNodes).has(props.nodeId) ? (openBlock(), createElementBlock("div", _hoisted_5$6, [
1491
+ unref(expandedNodes).has(props.nodeId) ? (openBlock(), createElementBlock("div", _hoisted_6$5, [
1488
1492
  (openBlock(true), createElementBlock(Fragment, null, renderList(filteredNodes.value, (child) => {
1489
1493
  return openBlock(), createBlock(_component_TreeNode, {
1490
1494
  key: child.nodeId,
@@ -1531,8 +1535,8 @@ function useElementFinalSize(elementRef, onFinalSize, delay = 100) {
1531
1535
  onCleanup(() => clearTimeout(timeoutId));
1532
1536
  });
1533
1537
  }
1534
- const _hoisted_1$f = ["aria-label"];
1535
- const _sfc_main$l = /* @__PURE__ */ defineComponent({
1538
+ const _hoisted_1$i = ["aria-label"];
1539
+ const _sfc_main$n = /* @__PURE__ */ defineComponent({
1536
1540
  __name: "FdsSpinner",
1537
1541
  props: {
1538
1542
  size: { default: "48px" },
@@ -1604,23 +1608,24 @@ const _sfc_main$l = /* @__PURE__ */ defineComponent({
1604
1608
  key: 0,
1605
1609
  class: normalizeClass(_ctx.labelPosition === "bottom" ? "font-bold" : "")
1606
1610
  }, toDisplayString(_ctx.label), 3)) : createCommentVNode("", true)
1607
- ], 10, _hoisted_1$f);
1611
+ ], 10, _hoisted_1$i);
1608
1612
  };
1609
1613
  }
1610
1614
  });
1611
- const _hoisted_1$e = ["aria-disabled"];
1612
- const elBase = "box-border appearance-none inline-flex items-center justify-center cursor-pointer select-none min-h-0 min-w-12 h-12 m-0 rounded-lg text-center align-middle whitespace-nowrap no-underline shadow-[0_2px_4px_rgba(12,72,153,0.12)] transition-[box-shadow,border-color,background-color] duration-200 font-main font-bold text-base leading-5 tracking-normal focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-blue-500";
1613
- const _sfc_main$k = /* @__PURE__ */ defineComponent({
1614
- __name: "FdsButton",
1615
+ const _hoisted_1$h = ["aria-disabled"];
1616
+ const elBase$2 = "box-border appearance-none inline-flex items-center justify-center cursor-pointer shadow-none p-1 text-base h-7 select-none m-0 rounded-md textcenter align-middle whitespace-nowrap no-underline transition-[box-shadow,border-color,background-color] duration-200 font-main font-bold text-base leading-5 tracking-normal focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-blue-500";
1617
+ const _sfc_main$m = /* @__PURE__ */ defineComponent({
1618
+ __name: "FdsButtonMinor",
1615
1619
  props: {
1616
- variant: { default: "primary" },
1620
+ invert: { type: Boolean, default: false },
1621
+ text: {},
1617
1622
  loading: { type: Boolean, default: false },
1618
1623
  disabled: { type: Boolean, default: false },
1619
1624
  block: { type: Boolean, default: false },
1620
1625
  state: { default: void 0 },
1621
1626
  icon: { default: void 0 },
1622
1627
  iconPos: { default: "left" },
1623
- size: { default: "m" },
1628
+ size: {},
1624
1629
  textSelection: { type: Boolean, default: false },
1625
1630
  as: { default: "button" },
1626
1631
  href: { default: void 0 },
@@ -1630,39 +1635,25 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
1630
1635
  setup(__props, { emit: __emit }) {
1631
1636
  const props = __props;
1632
1637
  const emit = __emit;
1633
- const slots = useSlots();
1634
1638
  const rootClasses = computed(() => [
1635
1639
  "inline-block transition-opacity duration-200",
1636
1640
  props.disabled && "opacity-20 pointer-events-none",
1637
1641
  props.block && "block w-full"
1638
1642
  ]);
1639
- const sizeClasses = {
1640
- s: "text-sm h-7 px-3",
1641
- m: "text-base h-12 px-4",
1642
- l: "text-lg h-[68px] px-6"
1643
- };
1644
- const variantClasses = {
1645
- primary: "bg-red-600 border border-red-700 text-white hover:bg-red-700 active:bg-red-800 active:border-red-800",
1646
- secondary: "bg-white border-2 border-blue-500 text-blue-600 hover:border-blue-600 active:bg-blue-600 active:border-blue-600 active:text-white",
1647
- minor: "h-auto border-0 shadow-none font-normal px-0! text-blue-600 p-0 bg-transparent rounded focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-blue-500 hover:bg-blue_t-100 active:bg-blue_t-200",
1648
- "minor-invert": "h-auto border-0 shadow-none font-normal text-white p-0 bg-transparent rounded focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-white hover:bg-white-100 active:bg-white-200"
1649
- };
1643
+ const variantClasses2 = computed(
1644
+ () => props.invert ? "border-0 font-normal text-white bg-transparent focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-white hover:bg-white-100 active:bg-white-200" : "border-0 font-normal text-blue-600 bg-transparent focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-blue-500 hover:bg-blue_t-100 active:bg-blue_t-200"
1645
+ );
1650
1646
  const blockElClasses = computed(() => props.block && "w-full justify-center");
1651
- const onlyIcon = computed(() => !slots.default || String(slots.default()).trim() === "");
1652
1647
  const iconOrderClasses = computed(
1653
1648
  () => props.icon && props.iconPos === "right" ? "order-2 ml-2 mr-0" : props.icon && "mr-2"
1654
1649
  );
1655
1650
  const buttonClasses = computed(() => [
1656
- elBase,
1657
- sizeClasses[props.size],
1658
- variantClasses[props.variant],
1651
+ elBase$2,
1652
+ variantClasses2.value,
1659
1653
  blockElClasses.value,
1660
- props.textSelection && "select-text",
1661
- onlyIcon.value ? "" : ""
1654
+ props.textSelection && "select-text"
1662
1655
  ]);
1663
- const iconFillClass = computed(
1664
- () => props.variant === "primary" || props.variant === "minor-invert" ? "fill-white" : "fill-blue-500"
1665
- );
1656
+ const iconFillClass2 = computed(() => props.invert ? "fill-white" : "fill-blue-500");
1666
1657
  function onClick(ev) {
1667
1658
  if (props.disabled || props.loading) {
1668
1659
  ev.preventDefault();
@@ -1675,15 +1666,14 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
1675
1666
  class: normalizeClass(rootClasses.value),
1676
1667
  "aria-disabled": _ctx.disabled ? "true" : null
1677
1668
  }, [
1678
- (openBlock(), createBlock(resolveDynamicComponent(_ctx.as), {
1679
- href: _ctx.as === "a" ? _ctx.href : void 0,
1669
+ (openBlock(), createBlock(resolveDynamicComponent(_ctx.as), mergeProps({ href: _ctx.as === "a" ? _ctx.href : void 0, to: _ctx.as === "router-link" ? _ctx.href : void 0 }, {
1680
1670
  type: _ctx.as === "button" ? _ctx.type : void 0,
1681
1671
  disabled: _ctx.as === "button" ? _ctx.disabled : void 0,
1682
- class: normalizeClass(buttonClasses.value),
1672
+ class: buttonClasses.value,
1683
1673
  onClick
1684
- }, {
1674
+ }), {
1685
1675
  default: withCtx(() => [
1686
- _ctx.loading ? (openBlock(), createBlock(_sfc_main$l, {
1676
+ _ctx.loading ? (openBlock(), createBlock(_sfc_main$n, {
1687
1677
  key: 0,
1688
1678
  class: "mr-2",
1689
1679
  size: "24px",
@@ -1694,20 +1684,20 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
1694
1684
  "aria-hidden": "true"
1695
1685
  }, [
1696
1686
  createVNode(FdsIcon, {
1697
- class: normalizeClass(iconFillClass.value),
1687
+ class: normalizeClass(iconFillClass2.value),
1698
1688
  name: _ctx.icon,
1699
1689
  size: 24
1700
1690
  }, null, 8, ["class", "name"])
1701
1691
  ], 2)) : createCommentVNode("", true),
1702
- renderSlot(_ctx.$slots, "default")
1692
+ createTextVNode(" " + toDisplayString(_ctx.text), 1)
1703
1693
  ]),
1704
- _: 3
1705
- }, 8, ["href", "type", "disabled", "class"]))
1706
- ], 10, _hoisted_1$e);
1694
+ _: 1
1695
+ }, 16, ["type", "disabled", "class"]))
1696
+ ], 10, _hoisted_1$h);
1707
1697
  };
1708
1698
  }
1709
1699
  });
1710
- const _hoisted_1$d = { class: "flex flex-col" };
1700
+ const _hoisted_1$g = { class: "flex flex-col" };
1711
1701
  const _hoisted_2$a = ["for"];
1712
1702
  const _hoisted_3$9 = { class: "w-full" };
1713
1703
  const _hoisted_4$7 = { class: "relative" };
@@ -1716,7 +1706,7 @@ const _hoisted_6$4 = {
1716
1706
  key: 0,
1717
1707
  class: "text-red-600 font-bold mt-1"
1718
1708
  };
1719
- const _sfc_main$j = /* @__PURE__ */ defineComponent({
1709
+ const _sfc_main$l = /* @__PURE__ */ defineComponent({
1720
1710
  __name: "FdsInput",
1721
1711
  props: {
1722
1712
  value: { default: "" },
@@ -1750,7 +1740,7 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
1750
1740
  const isInvalid = computed(() => props.valid === "false" && !props.optional && !props.disabled);
1751
1741
  const isValid = computed(() => props.valid === "true");
1752
1742
  const showPasswordToggle = computed(
1753
- () => isPasswordType.value && hasPasswordLabels.value && internalValue.value.length > 0
1743
+ () => isPasswordType.value && internalValue.value.length > 0
1754
1744
  );
1755
1745
  const inputClasses = computed(() => [
1756
1746
  "block w-full rounded-md border border-gray-300 px-3 py-2",
@@ -1778,24 +1768,15 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
1778
1768
  }
1779
1769
  const showPassword = ref(false);
1780
1770
  const isPasswordType = computed(() => props.type === "password");
1781
- const passwordToggleLabels = computed(() => {
1782
- const labels = props.passwordLabels ?? [];
1783
- const off = (labels[0] ?? "Visa").toString().trim();
1784
- const on = (labels[1] ?? "Dölj").toString().trim();
1785
- return { off, on };
1786
- });
1787
1771
  function toggleShowPassword() {
1788
1772
  showPassword.value = !showPassword.value;
1789
1773
  }
1790
- const hasPasswordLabels = computed(
1791
- () => Array.isArray(props.passwordLabels) && props.passwordLabels.some((l) => (l ?? "").toString().trim().length > 0)
1792
- );
1793
1774
  return (_ctx, _cache) => {
1794
1775
  return openBlock(), createElementBlock(Fragment, null, [
1795
1776
  createElementVNode("div", {
1796
1777
  class: normalizeClass(["w-full", { "flex flex-row gap-4": _ctx.labelLeft }])
1797
1778
  }, [
1798
- createElementVNode("div", _hoisted_1$d, [
1779
+ createElementVNode("div", _hoisted_1$g, [
1799
1780
  _ctx.label ? (openBlock(), createElementBlock("label", {
1800
1781
  key: 0,
1801
1782
  for: inputId.value,
@@ -1834,23 +1815,18 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
1834
1815
  key: 1,
1835
1816
  name: "bigSuccess"
1836
1817
  })) : createCommentVNode("", true),
1837
- _ctx.clearButton && !!internalValue.value && !_ctx.disabled ? (openBlock(), createBlock(_sfc_main$p, {
1818
+ _ctx.clearButton && !!internalValue.value && !_ctx.disabled ? (openBlock(), createBlock(_sfc_main$r, {
1838
1819
  key: 2,
1839
1820
  icon: "cross",
1840
1821
  ariaLabel: clearButtonLabel.value,
1841
1822
  onClick: onClear
1842
1823
  }, null, 8, ["ariaLabel"])) : createCommentVNode("", true),
1843
- showPasswordToggle.value ? (openBlock(), createBlock(_sfc_main$k, {
1824
+ showPasswordToggle.value ? (openBlock(), createBlock(_sfc_main$m, {
1844
1825
  key: 3,
1845
- variant: "minor",
1846
1826
  icon: showPassword.value ? "viewOff" : "viewOn",
1827
+ text: "",
1847
1828
  onClick: toggleShowPassword
1848
- }, {
1849
- default: withCtx(() => [
1850
- createTextVNode(toDisplayString(showPassword.value ? passwordToggleLabels.value.off : passwordToggleLabels.value.on), 1)
1851
- ]),
1852
- _: 1
1853
- }, 8, ["icon"])) : createCommentVNode("", true)
1829
+ }, null, 8, ["icon"])) : createCommentVNode("", true)
1854
1830
  ], 2)
1855
1831
  ])
1856
1832
  ])
@@ -1860,7 +1836,7 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
1860
1836
  };
1861
1837
  }
1862
1838
  });
1863
- const _hoisted_1$c = ["id"];
1839
+ const _hoisted_1$f = ["id"];
1864
1840
  const _hoisted_2$9 = {
1865
1841
  key: 0,
1866
1842
  class: "flex items-start gap-4"
@@ -1874,7 +1850,7 @@ const _hoisted_8$1 = { class: "flex items-center gap-3" };
1874
1850
  const _hoisted_9$1 = { class: "flex items-start gap-3" };
1875
1851
  const smallIconSize = 24;
1876
1852
  const largeIconSize = 48;
1877
- const _sfc_main$i = /* @__PURE__ */ defineComponent({
1853
+ const _sfc_main$k = /* @__PURE__ */ defineComponent({
1878
1854
  __name: "FdsContentBlock",
1879
1855
  props: {
1880
1856
  variant: { default: "primary" },
@@ -1980,11 +1956,11 @@ const _sfc_main$i = /* @__PURE__ */ defineComponent({
1980
1956
  ], 2),
1981
1957
  renderSlot(_ctx.$slots, "default")
1982
1958
  ]))
1983
- ], 14, _hoisted_1$c);
1959
+ ], 14, _hoisted_1$f);
1984
1960
  };
1985
1961
  }
1986
1962
  });
1987
- const _hoisted_1$b = { key: 0 };
1963
+ const _hoisted_1$e = { key: 0 };
1988
1964
  const _hoisted_2$8 = {
1989
1965
  key: 0,
1990
1966
  class: "text-xl"
@@ -1993,7 +1969,7 @@ const _hoisted_3$7 = {
1993
1969
  key: 1,
1994
1970
  class: "text-xl"
1995
1971
  };
1996
- const _sfc_main$h = /* @__PURE__ */ defineComponent({
1972
+ const _sfc_main$j = /* @__PURE__ */ defineComponent({
1997
1973
  __name: "FdsTreeView",
1998
1974
  props: {
1999
1975
  nodeExpandIcon: {},
@@ -2074,7 +2050,7 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
2074
2050
  ref: searchContainerRef,
2075
2051
  class: "pb-4"
2076
2052
  }, [
2077
- createVNode(_sfc_main$j, {
2053
+ createVNode(_sfc_main$l, {
2078
2054
  value: unref(treeState)?.searchTerm?.value ?? "",
2079
2055
  onInput: _cache[0] || (_cache[0] = ($event) => unref(treeState)?.setSearchTerm($event.target.value)),
2080
2056
  class: "w-full",
@@ -2087,11 +2063,11 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
2087
2063
  ])]),
2088
2064
  _: 1
2089
2065
  }, 8, ["value", "label"]),
2090
- props.searchCountTemplate || props.searchCountTemplateUnfiltered ? (openBlock(), createElementBlock("div", _hoisted_1$b, [
2066
+ props.searchCountTemplate || props.searchCountTemplateUnfiltered ? (openBlock(), createElementBlock("div", _hoisted_1$e, [
2091
2067
  props.searchCountTemplate && unref(treeState)?.searchTerm?.value && String(unref(treeState)?.searchTerm?.value || "").trim().length >= (unref(treeState)?.triggerLength ?? 1) ? (openBlock(), createElementBlock("h2", _hoisted_2$8, toDisplayString(props.searchCountTemplate.replace("[[filteredNodes]]", unref(treeState)?.filteredMatchCount.value.toString()).replace("[[totalNodes]]", totalNodeCount.value.toString())), 1)) : (openBlock(), createElementBlock("h2", _hoisted_3$7, toDisplayString(props.searchCountTemplateUnfiltered?.replace("[[totalNodes]]", totalNodeCount.value.toString()).replace("[[totalNodes]]", totalNodeCount.value.toString())), 1))
2092
2068
  ])) : createCommentVNode("", true)
2093
2069
  ], 512)) : createCommentVNode("", true),
2094
- unref(treeState)?.isEmptySearchResult?.value ? (openBlock(), createBlock(_sfc_main$i, {
2070
+ unref(treeState)?.isEmptySearchResult?.value ? (openBlock(), createBlock(_sfc_main$k, {
2095
2071
  key: 1,
2096
2072
  variant: "secondary",
2097
2073
  icon: "information",
@@ -2101,7 +2077,7 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
2101
2077
  createTextVNode(toDisplayString(props.searchResultNoMatchesTitle), 1)
2102
2078
  ]),
2103
2079
  default: withCtx(() => [
2104
- createVNode(_sfc_main$o, null, {
2080
+ createVNode(_sfc_main$q, null, {
2105
2081
  default: withCtx(() => [
2106
2082
  createTextVNode(toDisplayString(props.searchResultNoMatchesBody), 1)
2107
2083
  ]),
@@ -2113,7 +2089,7 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
2113
2089
  createElementVNode("div", {
2114
2090
  class: normalizeClass(["rounded-md", { "overflow-x-auto bg-white-solid": props.horizontalScroll }])
2115
2091
  }, [
2116
- props.data && !unref(treeState)?.isEmptySearchResult?.value ? (openBlock(), createBlock(_sfc_main$m, {
2092
+ props.data && !unref(treeState)?.isEmptySearchResult?.value ? (openBlock(), createBlock(_sfc_main$o, {
2117
2093
  key: 0,
2118
2094
  style: { container: "bg-white-solid px-3 py-2" },
2119
2095
  nodes: props.data.children || [],
@@ -2144,6 +2120,264 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
2144
2120
  };
2145
2121
  }
2146
2122
  });
2123
+ const _hoisted_1$d = ["aria-disabled"];
2124
+ const elBase$1 = "box-border appearance-none inline-flex items-center justify-center cursor-pointer select-none min-h-0 min-w-12 h-12 m-0 rounded-lg text-center align-middle whitespace-nowrap no-underline shadow-[0_2px_4px_rgba(12,72,153,0.12)] transition-[box-shadow,border-color,background-color] duration-200 font-main font-bold text-base leading-5 tracking-normal focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-blue-500";
2125
+ const variantClasses$1 = "bg-red-600 border border-red-700 text-white hover:bg-red-700 active:bg-red-800 active:border-red-800";
2126
+ const iconFillClass$1 = "fill-white";
2127
+ const _sfc_main$i = /* @__PURE__ */ defineComponent({
2128
+ __name: "FdsButtonPrimary",
2129
+ props: {
2130
+ text: {},
2131
+ loading: { type: Boolean, default: false },
2132
+ disabled: { type: Boolean, default: false },
2133
+ block: { type: Boolean, default: false },
2134
+ state: { default: void 0 },
2135
+ icon: { default: void 0 },
2136
+ iconPos: { default: "left" },
2137
+ size: { default: "m" },
2138
+ textSelection: { type: Boolean, default: false },
2139
+ as: { default: "button" },
2140
+ href: { default: void 0 },
2141
+ type: { default: "button" }
2142
+ },
2143
+ emits: ["click"],
2144
+ setup(__props, { emit: __emit }) {
2145
+ const props = __props;
2146
+ const emit = __emit;
2147
+ const rootClasses = computed(() => [
2148
+ "inline-block transition-opacity duration-200",
2149
+ props.disabled && "opacity-20 pointer-events-none",
2150
+ props.block && "block w-full"
2151
+ ]);
2152
+ const sizeClasses = {
2153
+ s: "text-sm h-7 px-3",
2154
+ m: "text-base h-12 px-4",
2155
+ l: "text-lg h-[68px] px-6"
2156
+ };
2157
+ const blockElClasses = computed(() => props.block && "w-full justify-center");
2158
+ const iconOrderClasses = computed(
2159
+ () => props.icon && props.iconPos === "right" ? "order-2 ml-2 mr-0" : props.icon && "mr-2"
2160
+ );
2161
+ const buttonClasses = computed(() => [
2162
+ elBase$1,
2163
+ sizeClasses[props.size || "m"],
2164
+ variantClasses$1,
2165
+ blockElClasses.value,
2166
+ props.textSelection && "select-text"
2167
+ ]);
2168
+ function onClick(ev) {
2169
+ if (props.disabled || props.loading) {
2170
+ ev.preventDefault();
2171
+ return;
2172
+ }
2173
+ emit("click", ev);
2174
+ }
2175
+ return (_ctx, _cache) => {
2176
+ return openBlock(), createElementBlock("div", {
2177
+ class: normalizeClass(rootClasses.value),
2178
+ "aria-disabled": _ctx.disabled ? "true" : null
2179
+ }, [
2180
+ (openBlock(), createBlock(resolveDynamicComponent(_ctx.as), {
2181
+ href: _ctx.as === "a" ? _ctx.href : void 0,
2182
+ type: _ctx.as === "button" ? _ctx.type : void 0,
2183
+ disabled: _ctx.as === "button" ? _ctx.disabled : void 0,
2184
+ class: normalizeClass(buttonClasses.value),
2185
+ onClick
2186
+ }, {
2187
+ default: withCtx(() => [
2188
+ _ctx.loading ? (openBlock(), createBlock(_sfc_main$n, {
2189
+ key: 0,
2190
+ class: "mr-2",
2191
+ size: "24px",
2192
+ color: "inherit"
2193
+ })) : _ctx.icon ? (openBlock(), createElementBlock("span", {
2194
+ key: 1,
2195
+ class: normalizeClass(iconOrderClasses.value),
2196
+ "aria-hidden": "true"
2197
+ }, [
2198
+ createVNode(FdsIcon, {
2199
+ class: normalizeClass(iconFillClass$1),
2200
+ name: _ctx.icon,
2201
+ size: 24
2202
+ }, null, 8, ["name"])
2203
+ ], 2)) : createCommentVNode("", true),
2204
+ createTextVNode(" " + toDisplayString(_ctx.text), 1)
2205
+ ]),
2206
+ _: 1
2207
+ }, 8, ["href", "type", "disabled", "class"]))
2208
+ ], 10, _hoisted_1$d);
2209
+ };
2210
+ }
2211
+ });
2212
+ const _hoisted_1$c = ["aria-disabled"];
2213
+ const elBase = "box-border appearance-none inline-flex items-center justify-center cursor-pointer select-none min-h-0 min-w-12 h-12 m-0 rounded-lg text-center align-middle whitespace-nowrap no-underline shadow-[0_2px_4px_rgba(12,72,153,0.12)] transition-[box-shadow,border-color,background-color] duration-200 font-main font-bold text-base leading-5 tracking-normal focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-blue-500";
2214
+ const variantClasses = "bg-white border-2 border-blue-500 text-blue-600 hover:border-blue-600 active:bg-blue-600 active:border-blue-600 active:text-white";
2215
+ const iconFillClass = "fill-blue-500";
2216
+ const _sfc_main$h = /* @__PURE__ */ defineComponent({
2217
+ __name: "FdsButtonSecondary",
2218
+ props: {
2219
+ text: {},
2220
+ loading: { type: Boolean, default: false },
2221
+ disabled: { type: Boolean, default: false },
2222
+ block: { type: Boolean, default: false },
2223
+ state: { default: void 0 },
2224
+ icon: { default: void 0 },
2225
+ iconPos: { default: "left" },
2226
+ size: { default: "m" },
2227
+ textSelection: { type: Boolean, default: false },
2228
+ as: { default: "button" },
2229
+ href: { default: void 0 },
2230
+ type: { default: "button" }
2231
+ },
2232
+ emits: ["click"],
2233
+ setup(__props, { emit: __emit }) {
2234
+ const props = __props;
2235
+ const emit = __emit;
2236
+ const rootClasses = computed(() => [
2237
+ "inline-block transition-opacity duration-200",
2238
+ props.disabled && "opacity-20 pointer-events-none",
2239
+ props.block && "block w-full"
2240
+ ]);
2241
+ const sizeClasses = {
2242
+ s: "text-sm h-7 px-3",
2243
+ m: "text-base h-12 px-4",
2244
+ l: "text-lg h-[68px] px-6"
2245
+ };
2246
+ const blockElClasses = computed(() => props.block && "w-full justify-center");
2247
+ const iconOrderClasses = computed(
2248
+ () => props.icon && props.iconPos === "right" ? "order-2 ml-2 mr-0" : props.icon && "mr-2"
2249
+ );
2250
+ const buttonClasses = computed(() => [
2251
+ elBase,
2252
+ sizeClasses[props.size || "m"],
2253
+ variantClasses,
2254
+ blockElClasses.value,
2255
+ props.textSelection && "select-text"
2256
+ ]);
2257
+ function onClick(ev) {
2258
+ if (props.disabled || props.loading) {
2259
+ ev.preventDefault();
2260
+ return;
2261
+ }
2262
+ emit("click", ev);
2263
+ }
2264
+ return (_ctx, _cache) => {
2265
+ return openBlock(), createElementBlock("div", {
2266
+ class: normalizeClass(rootClasses.value),
2267
+ "aria-disabled": _ctx.disabled ? "true" : null
2268
+ }, [
2269
+ (openBlock(), createBlock(resolveDynamicComponent(_ctx.as), {
2270
+ href: _ctx.as === "a" ? _ctx.href : void 0,
2271
+ type: _ctx.as === "button" ? _ctx.type : void 0,
2272
+ disabled: _ctx.as === "button" ? _ctx.disabled : void 0,
2273
+ class: normalizeClass(buttonClasses.value),
2274
+ onClick
2275
+ }, {
2276
+ default: withCtx(() => [
2277
+ _ctx.loading ? (openBlock(), createBlock(_sfc_main$n, {
2278
+ key: 0,
2279
+ class: "mr-2",
2280
+ size: "24px",
2281
+ color: "inherit"
2282
+ })) : _ctx.icon ? (openBlock(), createElementBlock("span", {
2283
+ key: 1,
2284
+ class: normalizeClass(iconOrderClasses.value),
2285
+ "aria-hidden": "true"
2286
+ }, [
2287
+ createVNode(FdsIcon, {
2288
+ class: normalizeClass(iconFillClass),
2289
+ name: _ctx.icon,
2290
+ size: 24
2291
+ }, null, 8, ["name"])
2292
+ ], 2)) : createCommentVNode("", true),
2293
+ createTextVNode(" " + toDisplayString(_ctx.text), 1)
2294
+ ]),
2295
+ _: 1
2296
+ }, 8, ["href", "type", "disabled", "class"]))
2297
+ ], 10, _hoisted_1$c);
2298
+ };
2299
+ }
2300
+ });
2301
+ const _hoisted_1$b = {
2302
+ key: 0,
2303
+ class: "flex items-center gap-2 h-7"
2304
+ };
2305
+ const _sfc_main$g = /* @__PURE__ */ defineComponent({
2306
+ __name: "FdsButtonCopy",
2307
+ props: {
2308
+ value: { default: "" },
2309
+ targetId: {},
2310
+ label: { default: "Kopiera" },
2311
+ copiedLabel: { default: "Kopierat!" },
2312
+ timeoutMs: { default: 800 },
2313
+ disabled: { type: Boolean, default: false }
2314
+ },
2315
+ emits: ["click"],
2316
+ setup(__props) {
2317
+ const props = __props;
2318
+ const isCopied = ref(false);
2319
+ let resetTimer = null;
2320
+ async function copyToClipboard(text) {
2321
+ try {
2322
+ if (navigator.clipboard && navigator.clipboard.writeText) {
2323
+ await navigator.clipboard.writeText(text);
2324
+ return true;
2325
+ }
2326
+ } catch {
2327
+ }
2328
+ const textarea = document.createElement("textarea");
2329
+ textarea.value = text;
2330
+ textarea.style.position = "fixed";
2331
+ textarea.style.opacity = "0";
2332
+ document.body.appendChild(textarea);
2333
+ textarea.focus();
2334
+ textarea.select();
2335
+ let ok = false;
2336
+ try {
2337
+ ok = document.execCommand("copy");
2338
+ } catch {
2339
+ ok = false;
2340
+ }
2341
+ document.body.removeChild(textarea);
2342
+ return ok;
2343
+ }
2344
+ async function onClick() {
2345
+ if (props.disabled) return;
2346
+ let textToCopy = props.value;
2347
+ if (props.targetId) {
2348
+ const el = document.getElementById(props.targetId);
2349
+ if (el) {
2350
+ textToCopy = el.innerText || el.textContent || "";
2351
+ }
2352
+ }
2353
+ if (!textToCopy) return;
2354
+ const ok = await copyToClipboard(textToCopy);
2355
+ if (!ok) return;
2356
+ isCopied.value = true;
2357
+ if (resetTimer) clearTimeout(resetTimer);
2358
+ resetTimer = setTimeout(() => isCopied.value = false, props.timeoutMs);
2359
+ }
2360
+ onMounted(() => {
2361
+ if (resetTimer) {
2362
+ clearTimeout(resetTimer);
2363
+ resetTimer = null;
2364
+ }
2365
+ });
2366
+ return (_ctx, _cache) => {
2367
+ return isCopied.value ? (openBlock(), createElementBlock("div", _hoisted_1$b, [
2368
+ createVNode(FdsIcon, { name: "bigSuccess" }),
2369
+ createElementVNode("span", null, toDisplayString(props.copiedLabel), 1)
2370
+ ])) : (openBlock(), createBlock(_sfc_main$m, {
2371
+ key: 1,
2372
+ type: "button",
2373
+ disabled: props.disabled,
2374
+ icon: "copy",
2375
+ text: isCopied.value ? props.copiedLabel : props.label,
2376
+ onClick
2377
+ }, null, 8, ["disabled", "text"]));
2378
+ };
2379
+ }
2380
+ });
2147
2381
  const _hoisted_1$a = { class: "w-full" };
2148
2382
  const _hoisted_2$7 = ["for"];
2149
2383
  const _hoisted_3$6 = {
@@ -2160,7 +2394,7 @@ const _hoisted_7$1 = {
2160
2394
  key: 0,
2161
2395
  class: "sr-only"
2162
2396
  };
2163
- const _sfc_main$g = /* @__PURE__ */ defineComponent({
2397
+ const _sfc_main$f = /* @__PURE__ */ defineComponent({
2164
2398
  __name: "FdsTextarea",
2165
2399
  props: {
2166
2400
  value: { default: "" },
@@ -2267,7 +2501,7 @@ const _hoisted_9 = {
2267
2501
  key: 2,
2268
2502
  class: "text-red-600 font-bold mt-1"
2269
2503
  };
2270
- const _sfc_main$f = /* @__PURE__ */ defineComponent({
2504
+ const _sfc_main$e = /* @__PURE__ */ defineComponent({
2271
2505
  __name: "FdsSelect",
2272
2506
  props: {
2273
2507
  value: { default: "" },
@@ -2361,7 +2595,7 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
2361
2595
  };
2362
2596
  }
2363
2597
  });
2364
- const _sfc_main$e = /* @__PURE__ */ defineComponent({
2598
+ const _sfc_main$d = /* @__PURE__ */ defineComponent({
2365
2599
  __name: "FdsTable",
2366
2600
  props: {
2367
2601
  bordered: { type: Boolean, default: false },
@@ -2383,8 +2617,8 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent({
2383
2617
  };
2384
2618
  }
2385
2619
  });
2386
- const FdsTable = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["__scopeId", "data-v-9bc82042"]]);
2387
- const _sfc_main$d = /* @__PURE__ */ defineComponent({
2620
+ const FdsTable = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["__scopeId", "data-v-9bc82042"]]);
2621
+ const _sfc_main$c = /* @__PURE__ */ defineComponent({
2388
2622
  __name: "FdsTableHead",
2389
2623
  props: {
2390
2624
  sortable: { type: Boolean, default: false },
@@ -2428,83 +2662,6 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
2428
2662
  };
2429
2663
  }
2430
2664
  });
2431
- const _sfc_main$c = /* @__PURE__ */ defineComponent({
2432
- __name: "FdsCopyButton",
2433
- props: {
2434
- value: { default: "" },
2435
- targetId: {},
2436
- label: { default: "Kopiera" },
2437
- copiedLabel: { default: "Kopierat!" },
2438
- timeoutMs: { default: 1500 },
2439
- disabled: { type: Boolean, default: false }
2440
- },
2441
- emits: ["click"],
2442
- setup(__props) {
2443
- const props = __props;
2444
- const isCopied = ref(false);
2445
- let resetTimer = null;
2446
- async function copyToClipboard(text) {
2447
- try {
2448
- if (navigator.clipboard && navigator.clipboard.writeText) {
2449
- await navigator.clipboard.writeText(text);
2450
- return true;
2451
- }
2452
- } catch {
2453
- }
2454
- const textarea = document.createElement("textarea");
2455
- textarea.value = text;
2456
- textarea.style.position = "fixed";
2457
- textarea.style.opacity = "0";
2458
- document.body.appendChild(textarea);
2459
- textarea.focus();
2460
- textarea.select();
2461
- let ok = false;
2462
- try {
2463
- ok = document.execCommand("copy");
2464
- } catch {
2465
- ok = false;
2466
- }
2467
- document.body.removeChild(textarea);
2468
- return ok;
2469
- }
2470
- async function onClick() {
2471
- if (props.disabled) return;
2472
- let textToCopy = props.value;
2473
- if (props.targetId) {
2474
- const el = document.getElementById(props.targetId);
2475
- if (el) {
2476
- textToCopy = el.innerText || el.textContent || "";
2477
- }
2478
- }
2479
- if (!textToCopy) return;
2480
- const ok = await copyToClipboard(textToCopy);
2481
- if (!ok) return;
2482
- isCopied.value = true;
2483
- if (resetTimer) clearTimeout(resetTimer);
2484
- resetTimer = setTimeout(() => isCopied.value = false, props.timeoutMs);
2485
- }
2486
- onMounted(() => {
2487
- if (resetTimer) {
2488
- clearTimeout(resetTimer);
2489
- resetTimer = null;
2490
- }
2491
- });
2492
- return (_ctx, _cache) => {
2493
- return openBlock(), createBlock(_sfc_main$k, {
2494
- variant: "minor",
2495
- type: "button",
2496
- disabled: props.disabled,
2497
- icon: isCopied.value ? "bigSuccess" : "copy",
2498
- onClick
2499
- }, {
2500
- default: withCtx(() => [
2501
- createTextVNode(toDisplayString(isCopied.value ? props.copiedLabel : props.label), 1)
2502
- ]),
2503
- _: 1
2504
- }, 8, ["disabled", "icon"]);
2505
- };
2506
- }
2507
- });
2508
2665
  const _hoisted_1$8 = ["id"];
2509
2666
  const _hoisted_2$5 = { class: "flex items-center gap-2" };
2510
2667
  const _hoisted_3$4 = { class: "relative" };
@@ -2539,7 +2696,7 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
2539
2696
  isVisible.value = v;
2540
2697
  }
2541
2698
  );
2542
- const variantClasses = {
2699
+ const variantClasses2 = {
2543
2700
  info: "bg-blue_t-100",
2544
2701
  warning: "bg-yellow-200 border-yellow-300"
2545
2702
  };
@@ -2547,7 +2704,7 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
2547
2704
  info: "information",
2548
2705
  warning: "alert"
2549
2706
  };
2550
- const alertClasses = computed(() => ["rounded-md p-4", variantClasses[props.variant]]);
2707
+ const alertClasses = computed(() => ["rounded-md p-4", variantClasses2[props.variant]]);
2551
2708
  const autoId = `fds-alert-${Math.random().toString(36).slice(2, 9)}`;
2552
2709
  const alertId = computed(() => props.id ?? autoId);
2553
2710
  const iconName = computed(() => iconMap[props.variant]);
@@ -2583,7 +2740,7 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
2583
2740
  createElementVNode("span", null, toDisplayString(_ctx.label), 1)
2584
2741
  ]),
2585
2742
  createElementVNode("div", _hoisted_3$4, [
2586
- _ctx.closeable ? (openBlock(), createBlock(_sfc_main$p, {
2743
+ _ctx.closeable ? (openBlock(), createBlock(_sfc_main$r, {
2587
2744
  key: 0,
2588
2745
  icon: "cross",
2589
2746
  size: "24px",
@@ -2591,7 +2748,7 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
2591
2748
  ariaLabel: closeLabel.value,
2592
2749
  class: normalizeClass(["fill-gray-900! hover:bg-gray-100 active:bg-gray-200"])
2593
2750
  }, null, 8, ["ariaLabel"])) : createCommentVNode("", true),
2594
- _ctx.collapsable ? (openBlock(), createBlock(_sfc_main$p, {
2751
+ _ctx.collapsable ? (openBlock(), createBlock(_sfc_main$r, {
2595
2752
  key: 1,
2596
2753
  icon: "arrowDown",
2597
2754
  size: "24px",
@@ -2614,7 +2771,7 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
2614
2771
  };
2615
2772
  }
2616
2773
  });
2617
- const FdsAlertBlock = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-38596eb2"]]);
2774
+ const FdsAlertBlock = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-6aea4869"]]);
2618
2775
  const _hoisted_1$7 = { class: "inline-flex items-center" };
2619
2776
  const _hoisted_2$4 = {
2620
2777
  key: 0,
@@ -3164,7 +3321,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
3164
3321
  }, null, 8, ["name", "class"])) : createCommentVNode("", true),
3165
3322
  createTextVNode(" " + toDisplayString(_ctx.heading), 1)
3166
3323
  ], 2),
3167
- !_ctx.strict ? (openBlock(), createBlock(_sfc_main$p, {
3324
+ !_ctx.strict ? (openBlock(), createBlock(_sfc_main$r, {
3168
3325
  key: 0,
3169
3326
  icon: "cross",
3170
3327
  size: "24px",
@@ -3188,7 +3345,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
3188
3345
  };
3189
3346
  }
3190
3347
  });
3191
- const FdsModal = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-8b32a4a7"]]);
3348
+ const FdsModal = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-8405e00f"]]);
3192
3349
  const _hoisted_1$3 = { class: "my-6 flex items-between justify-between gap-2" };
3193
3350
  const _hoisted_2$1 = { class: "flex items-center justify-start gap-1 w-[100px]" };
3194
3351
  const _hoisted_3$1 = { class: "flex items-center justify-center w-auto gap-2 order-0 sm:order-0" };
@@ -3270,11 +3427,11 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
3270
3427
  return (_ctx, _cache) => {
3271
3428
  return openBlock(), createElementBlock("div", _hoisted_1$3, [
3272
3429
  createElementVNode("div", _hoisted_2$1, [
3273
- _ctx.loading && loadingIndicator.value === "start" ? (openBlock(), createBlock(_sfc_main$l, {
3430
+ _ctx.loading && loadingIndicator.value === "start" ? (openBlock(), createBlock(_sfc_main$n, {
3274
3431
  key: 0,
3275
3432
  size: "32px",
3276
3433
  color: "blue"
3277
- })) : (openBlock(), createBlock(_sfc_main$p, {
3434
+ })) : (openBlock(), createBlock(_sfc_main$r, {
3278
3435
  key: 1,
3279
3436
  icon: "first",
3280
3437
  size: "24px",
@@ -3283,11 +3440,11 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
3283
3440
  class: normalizeClass({ hidden: _ctx.current === 1 }),
3284
3441
  onClick: _cache[0] || (_cache[0] = ($event) => handlePagination("start"))
3285
3442
  }, null, 8, ["disabled", "ariaDisabled", "class"])),
3286
- _ctx.loading && loadingIndicator.value === "prev" ? (openBlock(), createBlock(_sfc_main$l, {
3443
+ _ctx.loading && loadingIndicator.value === "prev" ? (openBlock(), createBlock(_sfc_main$n, {
3287
3444
  key: 2,
3288
3445
  size: "24px",
3289
3446
  color: "blue"
3290
- })) : (openBlock(), createBlock(_sfc_main$p, {
3447
+ })) : (openBlock(), createBlock(_sfc_main$r, {
3291
3448
  key: 3,
3292
3449
  icon: "arrowLeft",
3293
3450
  size: "24px",
@@ -3298,14 +3455,14 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
3298
3455
  }, null, 8, ["disabled", "ariaDisabled", "class"]))
3299
3456
  ]),
3300
3457
  createElementVNode("div", _hoisted_3$1, [
3301
- _ctx.loading && loadingIndicator.value === "input" ? (openBlock(), createBlock(_sfc_main$l, {
3458
+ _ctx.loading && loadingIndicator.value === "input" ? (openBlock(), createBlock(_sfc_main$n, {
3302
3459
  key: 0,
3303
3460
  size: "24px",
3304
3461
  color: "blue",
3305
3462
  label: "Laddar",
3306
3463
  "label-position": "right"
3307
3464
  })) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
3308
- createVNode(_sfc_main$j, {
3465
+ createVNode(_sfc_main$l, {
3309
3466
  value: internalValue.value.toString(),
3310
3467
  type: "text",
3311
3468
  size: _ctx.max.toString().length,
@@ -3317,11 +3474,11 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
3317
3474
  ], 64))
3318
3475
  ]),
3319
3476
  createElementVNode("div", _hoisted_5$1, [
3320
- _ctx.loading && loadingIndicator.value === "next" ? (openBlock(), createBlock(_sfc_main$l, {
3477
+ _ctx.loading && loadingIndicator.value === "next" ? (openBlock(), createBlock(_sfc_main$n, {
3321
3478
  key: 0,
3322
3479
  size: "24px",
3323
3480
  color: "blue"
3324
- })) : (openBlock(), createBlock(_sfc_main$p, {
3481
+ })) : (openBlock(), createBlock(_sfc_main$r, {
3325
3482
  key: 1,
3326
3483
  icon: "arrowRight",
3327
3484
  size: "24px",
@@ -3330,11 +3487,11 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
3330
3487
  class: normalizeClass({ hidden: _ctx.current === _ctx.max }),
3331
3488
  onClick: _cache[2] || (_cache[2] = ($event) => handlePagination("next"))
3332
3489
  }, null, 8, ["disabled", "ariaDisabled", "class"])),
3333
- _ctx.loading && loadingIndicator.value === "end" ? (openBlock(), createBlock(_sfc_main$l, {
3490
+ _ctx.loading && loadingIndicator.value === "end" ? (openBlock(), createBlock(_sfc_main$n, {
3334
3491
  key: 2,
3335
3492
  size: "24px",
3336
3493
  color: "blue"
3337
- })) : (openBlock(), createBlock(_sfc_main$p, {
3494
+ })) : (openBlock(), createBlock(_sfc_main$r, {
3338
3495
  key: 3,
3339
3496
  icon: "last",
3340
3497
  size: "24px",
@@ -3348,7 +3505,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
3348
3505
  };
3349
3506
  }
3350
3507
  });
3351
- const FdsPagination = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-7eb40808"]]);
3508
+ const FdsPagination = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-df967fb4"]]);
3352
3509
  const _hoisted_1$2 = { class: "block mb-4" };
3353
3510
  const _sfc_main$3 = /* @__PURE__ */ defineComponent({
3354
3511
  __name: "FdsTruncatedText",
@@ -3416,23 +3573,18 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
3416
3573
  class: normalizeClass(["content", { open: isOpen.value }]),
3417
3574
  style: normalizeStyle({ maxWidth: `${containerWidth.value}px` })
3418
3575
  }, toDisplayString(_ctx.content), 7)),
3419
- shouldShowButton.value ? (openBlock(), createBlock(_sfc_main$k, {
3576
+ shouldShowButton.value ? (openBlock(), createBlock(_sfc_main$m, {
3420
3577
  key: 2,
3421
- variant: "minor",
3422
3578
  icon: isOpen.value ? "arrowUp" : "arrowDown",
3423
- "icon-pos": "right",
3579
+ iconPos: "right",
3580
+ text: isOpen.value ? _ctx.btnCollapse : _ctx.btnExpand,
3424
3581
  onClick: toggleComponent
3425
- }, {
3426
- default: withCtx(() => [
3427
- createTextVNode(toDisplayString(isOpen.value ? _ctx.btnCollapse : _ctx.btnExpand), 1)
3428
- ]),
3429
- _: 1
3430
- }, 8, ["icon"])) : createCommentVNode("", true)
3582
+ }, null, 8, ["icon", "text"])) : createCommentVNode("", true)
3431
3583
  ]);
3432
3584
  };
3433
3585
  }
3434
3586
  });
3435
- const FdsTruncatedText = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-6e02b5dc"]]);
3587
+ const FdsTruncatedText = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-7c1d8d51"]]);
3436
3588
  const _sfc_main$2 = /* @__PURE__ */ defineComponent({
3437
3589
  __name: "FdsHeading",
3438
3590
  props: {
@@ -3531,7 +3683,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
3531
3683
  };
3532
3684
  return (_ctx, _cache) => {
3533
3685
  return openBlock(), createElementBlock("div", _hoisted_1, [
3534
- _ctx.loading ? (openBlock(), createBlock(_sfc_main$l, {
3686
+ _ctx.loading ? (openBlock(), createBlock(_sfc_main$n, {
3535
3687
  key: 0,
3536
3688
  size: "24px",
3537
3689
  color: "blue",
@@ -3547,20 +3699,22 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
3547
3699
  });
3548
3700
  const FdsVueCorePlugin = {
3549
3701
  install(app) {
3550
- app.component("FdsTreeView", _sfc_main$h);
3551
- app.component("FdsButton", _sfc_main$k);
3702
+ app.component("FdsTreeView", _sfc_main$j);
3703
+ app.component("FdsButtonPrimary", _sfc_main$i);
3704
+ app.component("FdsButtonSecondary", _sfc_main$h);
3705
+ app.component("FdsButtonMinor", _sfc_main$m);
3706
+ app.component("FdsButtonIcon", _sfc_main$r);
3707
+ app.component("FdsButtonCopy", _sfc_main$g);
3552
3708
  app.component("FdsIcon", FdsIcon);
3553
- app.component("FdsSpinner", _sfc_main$l);
3554
- app.component("FdsRadio", _sfc_main$n);
3555
- app.component("FdsCheckbox", _sfc_main$r);
3556
- app.component("FdsTextarea", _sfc_main$g);
3557
- app.component("FdsSelect", _sfc_main$f);
3709
+ app.component("FdsSpinner", _sfc_main$n);
3710
+ app.component("FdsRadio", _sfc_main$p);
3711
+ app.component("FdsCheckbox", _sfc_main$t);
3712
+ app.component("FdsTextarea", _sfc_main$f);
3713
+ app.component("FdsSelect", _sfc_main$e);
3558
3714
  app.component("FdsTable", FdsTable);
3559
- app.component("FdsTableHead", _sfc_main$d);
3560
- app.component("FdsInput", _sfc_main$j);
3561
- app.component("FdsIconButton", _sfc_main$p);
3562
- app.component("FdsCopyButton", _sfc_main$c);
3563
- app.component("FdsContentBlock", _sfc_main$i);
3715
+ app.component("FdsTableHead", _sfc_main$c);
3716
+ app.component("FdsInput", _sfc_main$l);
3717
+ app.component("FdsContentBlock", _sfc_main$k);
3564
3718
  app.component("FdsAlertBlock", FdsAlertBlock);
3565
3719
  app.component("FdsExpanderBlock", FdsExpanderBlock);
3566
3720
  app.component("FdsInteractionBlock", FdsInteractionBlock);
@@ -3572,37 +3726,39 @@ const FdsVueCorePlugin = {
3572
3726
  app.component("FdsTruncatedText", FdsTruncatedText);
3573
3727
  app.component("FdsHeading", _sfc_main$2);
3574
3728
  app.component("FdsSeparator", FdsSeparator);
3575
- app.component("FdsText", _sfc_main$o);
3729
+ app.component("FdsText", _sfc_main$q);
3576
3730
  app.component("FdsListHeading", _sfc_main);
3577
3731
  }
3578
3732
  };
3579
3733
  export {
3580
3734
  FdsAlertBlock,
3581
- _sfc_main$k as FdsButton,
3582
- _sfc_main$r as FdsCheckbox,
3583
- _sfc_main$i as FdsContentBlock,
3584
- _sfc_main$c as FdsCopyButton,
3735
+ _sfc_main$g as FdsButtonCopy,
3736
+ _sfc_main$r as FdsButtonIcon,
3737
+ _sfc_main$m as FdsButtonMinor,
3738
+ _sfc_main$i as FdsButtonPrimary,
3739
+ _sfc_main$h as FdsButtonSecondary,
3740
+ _sfc_main$t as FdsCheckbox,
3741
+ _sfc_main$k as FdsContentBlock,
3585
3742
  FdsExpanderBlock,
3586
3743
  _sfc_main$2 as FdsHeading,
3587
3744
  FdsIcon,
3588
- _sfc_main$p as FdsIconButton,
3589
- _sfc_main$j as FdsInput,
3745
+ _sfc_main$l as FdsInput,
3590
3746
  FdsInteractionBlock,
3591
3747
  _sfc_main as FdsListHeading,
3592
3748
  FdsModal,
3593
3749
  FdsPagination,
3594
- _sfc_main$n as FdsRadio,
3595
- _sfc_main$f as FdsSelect,
3750
+ _sfc_main$p as FdsRadio,
3751
+ _sfc_main$e as FdsSelect,
3596
3752
  FdsSeparator,
3597
- _sfc_main$l as FdsSpinner,
3753
+ _sfc_main$n as FdsSpinner,
3598
3754
  _sfc_main$8 as FdsSticker,
3599
3755
  FdsTable,
3600
- _sfc_main$d as FdsTableHead,
3756
+ _sfc_main$c as FdsTableHead,
3601
3757
  _sfc_main$7 as FdsTabs,
3602
3758
  _sfc_main$6 as FdsTabsItem,
3603
- _sfc_main$o as FdsText,
3604
- _sfc_main$g as FdsTextarea,
3605
- _sfc_main$h as FdsTreeView,
3759
+ _sfc_main$q as FdsText,
3760
+ _sfc_main$f as FdsTextarea,
3761
+ _sfc_main$j as FdsTreeView,
3606
3762
  FdsTruncatedText,
3607
3763
  FdsVueCorePlugin as default,
3608
3764
  useTreeState