fds-vue-core 2.1.4 → 2.1.5

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 (120) hide show
  1. package/configs/tsconfig.base.json +2 -1
  2. package/dist/fds-vue-core.cjs.js +35 -15
  3. package/dist/fds-vue-core.cjs.js.map +1 -1
  4. package/dist/fds-vue-core.es.js +35 -15
  5. package/dist/fds-vue-core.es.js.map +1 -1
  6. package/dist/global-components.d.ts +35 -33
  7. package/package.json +22 -21
  8. package/src/.DS_Store +0 -0
  9. package/src/App.vue +133 -0
  10. package/src/apply.css +60 -0
  11. package/src/assets/icons.ts +517 -0
  12. package/src/components/Blocks/FdsBlockAlert/FdsBlockAlert.stories.ts +94 -0
  13. package/src/components/Blocks/FdsBlockAlert/FdsBlockAlert.vue +112 -0
  14. package/src/components/Blocks/FdsBlockAlert/types.ts +12 -0
  15. package/src/components/Blocks/FdsBlockContent/FdsBlockContent.stories.ts +110 -0
  16. package/src/components/Blocks/FdsBlockContent/FdsBlockContent.vue +66 -0
  17. package/src/components/Blocks/FdsBlockContent/types.ts +6 -0
  18. package/src/components/Blocks/FdsBlockExpander/FdsBlockExpander.stories.ts +123 -0
  19. package/src/components/Blocks/FdsBlockExpander/FdsBlockExpander.vue +87 -0
  20. package/src/components/Blocks/FdsBlockExpander/types.ts +8 -0
  21. package/src/components/Blocks/FdsBlockInfo/FdsBlockInfo.stories.ts +110 -0
  22. package/src/components/Blocks/FdsBlockInfo/FdsBlockInfo.vue +75 -0
  23. package/src/components/Blocks/FdsBlockInfo/types.ts +9 -0
  24. package/src/components/Blocks/FdsBlockLink/FdsBlockLink.css +9 -0
  25. package/src/components/Blocks/FdsBlockLink/FdsBlockLink.stories.ts +179 -0
  26. package/src/components/Blocks/FdsBlockLink/FdsBlockLink.vue +149 -0
  27. package/src/components/Blocks/FdsBlockLink/types.ts +14 -0
  28. package/src/components/Buttons/ButtonBaseProps.ts +18 -0
  29. package/src/components/Buttons/FdsButtonCopy/FdsButtonCopy.stories.ts +53 -0
  30. package/src/components/Buttons/FdsButtonCopy/FdsButtonCopy.vue +87 -0
  31. package/src/components/Buttons/FdsButtonCopy/types.ts +8 -0
  32. package/src/components/Buttons/FdsButtonDownload/FdsButtonDownload.stories.ts +111 -0
  33. package/src/components/Buttons/FdsButtonDownload/FdsButtonDownload.vue +187 -0
  34. package/src/components/Buttons/FdsButtonIcon/FdsButtonIcon.stories.ts +55 -0
  35. package/src/components/Buttons/FdsButtonIcon/FdsButtonIcon.vue +57 -0
  36. package/src/components/Buttons/FdsButtonIcon/types.ts +12 -0
  37. package/src/components/Buttons/FdsButtonMinor/FdsButtonMinor.stories.ts +68 -0
  38. package/src/components/Buttons/FdsButtonMinor/FdsButtonMinor.vue +126 -0
  39. package/src/components/Buttons/FdsButtonPrimary/FdsButtonPrimary.stories.ts +86 -0
  40. package/src/components/Buttons/FdsButtonPrimary/FdsButtonPrimary.vue +107 -0
  41. package/src/components/Buttons/FdsButtonSecondary/FdsButtonSecondary.stories.ts +68 -0
  42. package/src/components/Buttons/FdsButtonSecondary/FdsButtonSecondary.vue +107 -0
  43. package/src/components/FdsIcon/FdsIcon.stories.ts +69 -0
  44. package/src/components/FdsIcon/FdsIcon.vue +34 -0
  45. package/src/components/FdsIcon/types.ts +9 -0
  46. package/src/components/FdsModal/FdsModal.stories.ts +241 -0
  47. package/src/components/FdsModal/FdsModal.vue +269 -0
  48. package/src/components/FdsModal/types.ts +12 -0
  49. package/src/components/FdsPagination/FdsPagination.stories.ts +109 -0
  50. package/src/components/FdsPagination/FdsPagination.vue +193 -0
  51. package/src/components/FdsPagination/types.ts +6 -0
  52. package/src/components/FdsSearchSelect/FdsSearchSelect.stories.ts +428 -0
  53. package/src/components/FdsSearchSelect/FdsSearchSelect.vue +621 -0
  54. package/src/components/FdsSearchSelect/types.ts +25 -0
  55. package/src/components/FdsSpinner/FdsSpinner.stories.ts +31 -0
  56. package/src/components/FdsSpinner/FdsSpinner.vue +90 -0
  57. package/src/components/FdsSpinner/types.ts +6 -0
  58. package/src/components/FdsSticker/FdsSticker.stories.ts +148 -0
  59. package/src/components/FdsSticker/FdsSticker.vue +44 -0
  60. package/src/components/FdsSticker/types.ts +4 -0
  61. package/src/components/FdsTreeView/FdsTreeView.stories.ts +136 -0
  62. package/src/components/FdsTreeView/FdsTreeView.vue +162 -0
  63. package/src/components/FdsTreeView/TreeNode.vue +383 -0
  64. package/src/components/FdsTreeView/types.ts +141 -0
  65. package/src/components/FdsTreeView/useTreeState.ts +607 -0
  66. package/src/components/FdsTreeView/utils.ts +69 -0
  67. package/src/components/FdsTruncatedText/FdsTruncatedText.stories.ts +78 -0
  68. package/src/components/FdsTruncatedText/FdsTruncatedText.vue +85 -0
  69. package/src/components/FdsTruncatedText/types.ts +6 -0
  70. package/src/components/Form/FdsCheckbox/FdsCheckbox.stories.ts +275 -0
  71. package/src/components/Form/FdsCheckbox/FdsCheckbox.vue +155 -0
  72. package/src/components/Form/FdsCheckbox/types.ts +10 -0
  73. package/src/components/Form/FdsInput/FdsInput.stories.ts +319 -0
  74. package/src/components/Form/FdsInput/FdsInput.vue +233 -0
  75. package/src/components/Form/FdsInput/types.ts +25 -0
  76. package/src/components/Form/FdsRadio/FdsRadio.stories.ts +63 -0
  77. package/src/components/Form/FdsRadio/FdsRadio.vue +88 -0
  78. package/src/components/Form/FdsRadio/types.ts +12 -0
  79. package/src/components/Form/FdsSelect/FdsSelect.stories.ts +78 -0
  80. package/src/components/Form/FdsSelect/FdsSelect.vue +136 -0
  81. package/src/components/Form/FdsSelect/types.ts +13 -0
  82. package/src/components/Form/FdsTextarea/FdsTextarea.stories.ts +52 -0
  83. package/src/components/Form/FdsTextarea/FdsTextarea.vue +110 -0
  84. package/src/components/Form/FdsTextarea/types.ts +12 -0
  85. package/src/components/Table/FdsTable/FdsTable.stories.ts +221 -0
  86. package/src/components/Table/FdsTable/FdsTable.vue +25 -0
  87. package/src/components/Table/FdsTable/types.ts +4 -0
  88. package/src/components/Table/FdsTableHead/FdsTableHead.stories.ts +151 -0
  89. package/src/components/Table/FdsTableHead/FdsTableHead.vue +54 -0
  90. package/src/components/Table/FdsTableHead/types.ts +5 -0
  91. package/src/components/Tabs/FdsTabs/FdsTabs.stories.ts +247 -0
  92. package/src/components/Tabs/FdsTabs/FdsTabs.vue +27 -0
  93. package/src/components/Tabs/FdsTabs/types.ts +4 -0
  94. package/src/components/Tabs/FdsTabsItem/FdsTabsItem.vue +125 -0
  95. package/src/components/Tabs/FdsTabsItem/types.ts +16 -0
  96. package/src/components/Typography/FdsHeading/FdsHeading.stories.ts +93 -0
  97. package/src/components/Typography/FdsHeading/FdsHeading.vue +51 -0
  98. package/src/components/Typography/FdsHeading/types.ts +5 -0
  99. package/src/components/Typography/FdsListHeading/FdsListHeading.stories.ts +58 -0
  100. package/src/components/Typography/FdsListHeading/FdsListHeading.vue +62 -0
  101. package/src/components/Typography/FdsListHeading/types.ts +8 -0
  102. package/src/components/Typography/FdsSeparator/FdsSeparator.stories.ts +31 -0
  103. package/src/components/Typography/FdsSeparator/FdsSeparator.vue +5 -0
  104. package/src/components/Typography/FdsText/FdsText.stories.ts +66 -0
  105. package/src/components/Typography/FdsText/FdsText.vue +28 -0
  106. package/src/components/Typography/FdsText/types.ts +3 -0
  107. package/src/composables/useBoldQuery.ts +29 -0
  108. package/src/composables/useElementFinalSize.ts +24 -0
  109. package/src/composables/useHasSlots.ts +17 -0
  110. package/src/composables/useIsPid.ts +48 -0
  111. package/src/docs/Start/Start.mdx +12 -0
  112. package/src/docs/Usage.md +117 -0
  113. package/src/fonts.css +28 -0
  114. package/src/global-components.ts +75 -0
  115. package/src/index.ts +180 -0
  116. package/src/main.ts +7 -0
  117. package/src/slot-styles.css +93 -0
  118. package/src/style.css +89 -0
  119. package/src/tokens.css +252 -0
  120. package/dist/index.d.ts +0 -2
@@ -12,6 +12,7 @@
12
12
  }
13
13
  },
14
14
  "vueCompilerOptions": {
15
- "strictTemplates": true
15
+ "strictTemplates": true,
16
+ "types": ["fds-vue-core"]
16
17
  }
17
18
  }
@@ -1201,8 +1201,9 @@ const getTitleFromProperties = (node, titleTemplate) => {
1201
1201
  if (!titleTemplate) {
1202
1202
  return node.title;
1203
1203
  }
1204
- const templateVariables = extractTemplateVariables(titleTemplate);
1205
- let result = titleTemplate;
1204
+ const template = titleTemplate ?? "";
1205
+ const templateVariables = extractTemplateVariables(template);
1206
+ let result = template;
1206
1207
  templateVariables.forEach((variable) => {
1207
1208
  const value = getNodePropertyValue(node, variable);
1208
1209
  const regex = new RegExp(`\\[\\[${variable.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\]\\]`, "g");
@@ -1215,7 +1216,9 @@ const extractTemplateVariables = (template) => {
1215
1216
  const matches = [];
1216
1217
  let match;
1217
1218
  while ((match = regex.exec(template)) !== null) {
1218
- matches.push(match[1]);
1219
+ if (match[1]) {
1220
+ matches.push(match[1]);
1221
+ }
1219
1222
  }
1220
1223
  return matches;
1221
1224
  };
@@ -6575,6 +6578,13 @@ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
6575
6578
  "sticky bg-white bottom-0 shadow-[0px_-8px_16px_0px_rgba(255,255,255,0.59)] z-[2] -mx-6 px-6 pb-6": props.stickyFooter
6576
6579
  }
6577
6580
  ]);
6581
+ const setHtmlOverflow = (value) => {
6582
+ if (typeof document === "undefined") return;
6583
+ const htmlEl = document.documentElement;
6584
+ if (htmlEl) {
6585
+ htmlEl.style.overflow = value;
6586
+ }
6587
+ };
6578
6588
  const handleBackdropClick = () => {
6579
6589
  handleClose("backdrop");
6580
6590
  };
@@ -6583,7 +6593,7 @@ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
6583
6593
  return;
6584
6594
  }
6585
6595
  isOpen.value = false;
6586
- document.getElementsByTagName("html")[0].style.overflow = "auto";
6596
+ setHtmlOverflow("auto");
6587
6597
  vue.nextTick(() => {
6588
6598
  if (previouslyFocusedElement.value) {
6589
6599
  previouslyFocusedElement.value.focus();
@@ -6638,11 +6648,11 @@ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
6638
6648
  if (newValue) {
6639
6649
  previouslyFocusedElement.value = document.activeElement;
6640
6650
  if (props.lockScroll) {
6641
- document.getElementsByTagName("html")[0].style.overflow = "hidden";
6651
+ setHtmlOverflow("hidden");
6642
6652
  }
6643
6653
  trapFocus();
6644
6654
  } else {
6645
- document.getElementsByTagName("html")[0].style.overflow = "auto";
6655
+ setHtmlOverflow("auto");
6646
6656
  if (cleanupFocusTrap) {
6647
6657
  cleanupFocusTrap();
6648
6658
  cleanupFocusTrap = null;
@@ -6661,14 +6671,14 @@ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
6661
6671
  if (props.open) {
6662
6672
  previouslyFocusedElement.value = document.activeElement;
6663
6673
  if (props.lockScroll) {
6664
- document.getElementsByTagName("html")[0].style.overflow = "hidden";
6674
+ setHtmlOverflow("hidden");
6665
6675
  }
6666
6676
  trapFocus();
6667
6677
  }
6668
6678
  });
6669
6679
  vue.onBeforeUnmount(() => {
6670
6680
  document.removeEventListener("keydown", handleKeyDown, true);
6671
- document.getElementsByTagName("html")[0].style.overflow = "auto";
6681
+ setHtmlOverflow("auto");
6672
6682
  if (cleanupFocusTrap) {
6673
6683
  cleanupFocusTrap();
6674
6684
  }
@@ -6988,6 +6998,7 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
6988
6998
  emits: ["searchSelected", "paginate", "total", "change"],
6989
6999
  setup(__props, { emit: __emit }) {
6990
7000
  const props = __props;
7001
+ const searchFields = vue.computed(() => props.searchFields ?? []);
6991
7002
  const emit = __emit;
6992
7003
  const dropdownVisible = vue.ref(false);
6993
7004
  const singleItemName = vue.ref("");
@@ -7030,7 +7041,9 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
7030
7041
  return { maxHeight: `${maxHeight}px` };
7031
7042
  });
7032
7043
  const sortResponse = (response) => {
7033
- const allKeys = [...props.searchFields, ...Object.keys(response[0]).filter((k) => !props.searchFields.includes(k))];
7044
+ if (!response.length) return [];
7045
+ const firstItem = response[0] ?? {};
7046
+ const allKeys = [...searchFields.value, ...Object.keys(firstItem).filter((k) => !searchFields.value.includes(k))];
7034
7047
  return response.map((item) => {
7035
7048
  const sorted = {};
7036
7049
  allKeys.forEach((key) => {
@@ -7045,7 +7058,7 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
7045
7058
  const searchLower = searchValue.toLowerCase();
7046
7059
  const pidRegex = /^\d{8}[a-zA-Z0-9]{4}$/;
7047
7060
  if (pidRegex.test(searchValue)) return true;
7048
- return props.searchFields.some((key) => {
7061
+ return searchFields.value.some((key) => {
7049
7062
  const value = item[key];
7050
7063
  if (!value) return false;
7051
7064
  const stringValue = String(value);
@@ -7061,7 +7074,7 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
7061
7074
  emit("total", 0);
7062
7075
  return;
7063
7076
  }
7064
- let sourceData = props.items;
7077
+ let sourceData = props.items ?? [];
7065
7078
  if (props.preserveOrder && sourceData.length) {
7066
7079
  sourceData = sortResponse(sourceData);
7067
7080
  }
@@ -7166,7 +7179,7 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
7166
7179
  return void 0;
7167
7180
  });
7168
7181
  const handleMatchingString = (item) => {
7169
- const values = props.searchFields.map((key) => String(item[key] || ""));
7182
+ const values = searchFields.value.map((key) => String(item[key] || ""));
7170
7183
  let result = "";
7171
7184
  if (values.length === 1) {
7172
7185
  result = values[0] || "";
@@ -7208,7 +7221,8 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
7208
7221
  if (keyEvent.key === "Enter" || keyEvent.code === "Space" || e.type === "mouseup") {
7209
7222
  e.preventDefault();
7210
7223
  e.stopPropagation();
7211
- searchTerm.value = item[props.searchFields[0]] || "";
7224
+ const firstField = searchFields.value[0];
7225
+ searchTerm.value = (firstField ? item[firstField] : "") || "";
7212
7226
  selectItem(item);
7213
7227
  focusedIndex.value = -1;
7214
7228
  dropdownVisible.value = false;
@@ -7272,9 +7286,15 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
7272
7286
  case "Enter":
7273
7287
  e.preventDefault();
7274
7288
  if (focusedIndex.value >= 0 && focusedIndex.value < displayedItems.value.length) {
7275
- handleClick(e, displayedItems.value[focusedIndex.value]);
7289
+ const focusedItem = displayedItems.value[focusedIndex.value];
7290
+ if (focusedItem) {
7291
+ handleClick(e, focusedItem);
7292
+ }
7276
7293
  } else if (displayedItems.value.length === 1) {
7277
- handleClick(e, displayedItems.value[0]);
7294
+ const onlyItem = displayedItems.value[0];
7295
+ if (onlyItem) {
7296
+ handleClick(e, onlyItem);
7297
+ }
7278
7298
  }
7279
7299
  break;
7280
7300
  case "Escape":