@knime/kds-components 0.22.0 → 0.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.css CHANGED
@@ -846,12 +846,13 @@ html.kds-legacy {
846
846
  }
847
847
 
848
848
  .kds-list-item {
849
- &[data-v-0df9684f] {
849
+ &[data-v-822789ec] {
850
850
  position: relative;
851
851
  display: flex;
852
852
  gap: var(--kds-spacing-container-0-5x);
853
853
  align-items: center;
854
854
  width: 100%;
855
+ min-height: var(--kds-dimension-component-height-1-5x);
855
856
  padding: var(--kds-spacing-container-0-25x) var(--kds-spacing-container-0-5x);
856
857
  color: var(--kds-color-text-and-icon-neutral);
857
858
  cursor: pointer;
@@ -861,36 +862,36 @@ html.kds-legacy {
861
862
  border-radius: var(--kds-border-radius-container-0-31x);
862
863
  }
863
864
  &.small {
864
- &[data-v-0df9684f] {
865
+ &[data-v-822789ec] {
865
866
  gap: var(--kds-spacing-container-0-25x);
866
867
  align-items: flex-start;
867
868
  padding: var(--kds-spacing-container-0-25x)
868
869
  var(--kds-spacing-container-0-5x);
869
870
  font: var(--kds-font-base-interactive-small);
870
871
  }
871
- .accessory[data-v-0df9684f] {
872
+ .accessory[data-v-822789ec] {
872
873
  display: flex;
873
874
  padding: var(--kds-spacing-container-0-12x) 0;
874
875
  }
875
876
  }
876
877
  &.large {
877
- &[data-v-0df9684f] {
878
+ &[data-v-822789ec] {
878
879
  font: var(--kds-font-base-interactive-small-strong);
879
880
  }
880
- .accessory[data-v-0df9684f] {
881
+ .accessory[data-v-822789ec] {
881
882
  display: flex;
882
883
  align-items: center;
883
884
  }
884
885
  }
885
886
  .content {
886
- &[data-v-0df9684f] {
887
+ &[data-v-822789ec] {
887
888
  display: flex;
888
889
  flex: 1 1 auto;
889
890
  flex-direction: column;
890
891
  gap: var(--kds-spacing-container-0-12x);
891
892
  min-width: 0;
892
893
  }
893
- .large &[data-v-0df9684f] {
894
+ .large &[data-v-822789ec] {
894
895
  justify-content: center;
895
896
  min-height: calc(
896
897
  var(--kds-dimension-component-height-2-5x) - 2 *
@@ -898,19 +899,19 @@ html.kds-legacy {
898
899
  );
899
900
  }
900
901
  .label {
901
- &[data-v-0df9684f] {
902
+ &[data-v-822789ec] {
902
903
  overflow: hidden;
903
904
  text-overflow: ellipsis;
904
905
  white-space: nowrap;
905
906
  }
906
- .prefix[data-v-0df9684f] {
907
+ .prefix[data-v-822789ec] {
907
908
  flex-shrink: 0;
908
909
  }
909
- .special[data-v-0df9684f] {
910
+ .special[data-v-822789ec] {
910
911
  font: var(--kds-font-base-interactive-small-italic);
911
912
  }
912
913
  }
913
- .subtext[data-v-0df9684f] {
914
+ .subtext[data-v-822789ec] {
914
915
  display: -webkit-box;
915
916
  overflow: hidden;
916
917
  -webkit-line-clamp: 2;
@@ -921,7 +922,7 @@ html.kds-legacy {
921
922
  }
922
923
  }
923
924
  .trailing-item {
924
- &[data-v-0df9684f] {
925
+ &[data-v-822789ec] {
925
926
  display: flex;
926
927
  flex-shrink: 0;
927
928
  gap: var(--kds-spacing-container-0-12x);
@@ -929,69 +930,69 @@ html.kds-legacy {
929
930
  align-self: center;
930
931
  justify-content: flex-end;
931
932
  }
932
- .shortcut[data-v-0df9684f] {
933
+ .shortcut[data-v-822789ec] {
933
934
  flex-shrink: 0;
934
935
  font: var(--kds-font-base-interactive-xsmall-strong);
935
936
  color: var(--kds-color-text-and-icon-muted);
936
937
  text-align: right;
937
938
  white-space: nowrap;
938
939
  }
939
- .trailing-item-reserve-space[data-v-0df9684f] {
940
+ .trailing-item-reserve-space[data-v-822789ec] {
940
941
  width: var(--kds-dimension-icon-0-75x);
941
942
  }
942
943
  }
943
- &[data-v-0df9684f]:hover:not(.disabled),
944
- &.active[data-v-0df9684f]:not(.disabled) {
944
+ &[data-v-822789ec]:hover:not(.disabled),
945
+ &.active[data-v-822789ec]:not(.disabled) {
945
946
  background: var(--kds-color-background-neutral-hover);
946
947
  }
947
- &[data-v-0df9684f]:active:not(.disabled) {
948
+ &[data-v-822789ec]:active:not(.disabled) {
948
949
  background: var(--kds-color-background-neutral-active);
949
950
  }
950
951
  &.selected {
951
- &[data-v-0df9684f] {
952
+ &[data-v-822789ec] {
952
953
  color: var(--kds-color-text-and-icon-selected);
953
954
  background: var(--kds-color-background-selected-initial);
954
955
  }
955
- .subtext[data-v-0df9684f] {
956
+ .subtext[data-v-822789ec] {
956
957
  color: var(--kds-color-text-and-icon-selected);
957
958
  }
958
- &[data-v-0df9684f]:hover,
959
- &.active[data-v-0df9684f] {
959
+ &[data-v-822789ec]:hover,
960
+ &.active[data-v-822789ec] {
960
961
  background: var(--kds-color-background-selected-hover);
961
962
  }
962
- &[data-v-0df9684f]:active {
963
+ &[data-v-822789ec]:active {
963
964
  background: var(--kds-color-background-selected-active);
964
965
  }
965
- &.disabled[data-v-0df9684f] {
966
+ &.disabled[data-v-822789ec] {
966
967
  background: var(--kds-color-background-selected-initial);
967
968
  }
968
969
  }
969
970
  &.missing {
970
- &[data-v-0df9684f] {
971
+ &[data-v-822789ec] {
971
972
  color: var(--kds-color-text-and-icon-danger);
972
973
  background: var(--kds-color-background-danger-initial);
973
974
  }
974
- .subtext[data-v-0df9684f] {
975
+ .subtext[data-v-822789ec] {
975
976
  color: var(--kds-color-text-and-icon-danger);
976
977
  }
977
- &[data-v-0df9684f]:hover,
978
- &.active[data-v-0df9684f] {
978
+ &[data-v-822789ec]:hover,
979
+ &.active[data-v-822789ec] {
979
980
  background: var(--kds-color-background-danger-hover);
980
981
  }
981
- &[data-v-0df9684f]:active {
982
+ &[data-v-822789ec]:active {
982
983
  background: var(--kds-color-background-danger-active);
983
984
  }
984
- &.disabled[data-v-0df9684f] {
985
+ &.disabled[data-v-822789ec] {
985
986
  background: var(--kds-color-background-danger-initial);
986
987
  }
987
988
  }
988
989
  &.disabled {
989
- &[data-v-0df9684f] {
990
+ &[data-v-822789ec] {
990
991
  color: var(--kds-color-text-and-icon-disabled);
991
992
  cursor: default;
992
993
  }
993
- .shortcut[data-v-0df9684f],
994
- .subtext[data-v-0df9684f] {
994
+ .shortcut[data-v-822789ec],
995
+ .subtext[data-v-822789ec] {
995
996
  color: var(--kds-color-text-and-icon-disabled);
996
997
  }
997
998
  }
@@ -3362,23 +3363,23 @@ textarea[data-v-bdf12ef9]::-webkit-scrollbar {
3362
3363
  );
3363
3364
  }
3364
3365
 
3365
- .kds-dropdown-container[data-v-9f49ff8b] {
3366
+ .kds-dropdown-container[data-v-db105594] {
3366
3367
  display: flex;
3367
3368
  flex-direction: column;
3368
3369
  background-color: var(--kds-color-surface-default);
3369
3370
  border-radius: var(--kds-border-radius-container-0-50x);
3370
3371
  box-shadow: var(--kds-elevation-level-3);
3371
3372
  }
3372
- .kds-dropdown-container-sticky-top[data-v-9f49ff8b] {
3373
+ .kds-dropdown-container-sticky-top[data-v-db105594] {
3373
3374
  padding: var(--kds-spacing-container-0-25x);
3374
3375
  background-color: var(--kds-color-surface-default);
3375
3376
  border-bottom: var(--kds-border-base-subtle);
3376
3377
  }
3377
3378
  .kds-dropdown-container-list {
3378
- &[data-v-9f49ff8b] {
3379
+ &[data-v-db105594] {
3379
3380
  max-height: var(--kds-dimension-component-height-12x);
3380
3381
  }
3381
- &.multiline[data-v-9f49ff8b] {
3382
+ &.multiline[data-v-db105594] {
3382
3383
  max-height: var(--kds-dimension-component-height-20x);
3383
3384
  }
3384
3385
  }
package/dist/index.js CHANGED
@@ -1729,7 +1729,7 @@ const _sfc_main$U = /* @__PURE__ */ defineComponent({
1729
1729
  }
1730
1730
  });
1731
1731
 
1732
- const KdsListItem = /* @__PURE__ */ _export_sfc$1(_sfc_main$U, [["__scopeId", "data-v-0df9684f"]]);
1732
+ const KdsListItem = /* @__PURE__ */ _export_sfc$1(_sfc_main$U, [["__scopeId", "data-v-822789ec"]]);
1733
1733
 
1734
1734
  const _sfc_main$T = { };
1735
1735
 
@@ -15629,8 +15629,13 @@ const _sfc_main$n = /* @__PURE__ */ defineComponent({
15629
15629
 
15630
15630
  const BaseDropdown = /* @__PURE__ */ _export_sfc$1(_sfc_main$n, [["__scopeId", "data-v-cf3becf9"]]);
15631
15631
 
15632
+ const DROPDOWN_SEARCH_THRESHOLD = 12;
15633
+
15632
15634
  const _hoisted_1$h = { class: "kds-dropdown-container" };
15633
- const _hoisted_2$9 = { class: "kds-dropdown-container-sticky-top" };
15635
+ const _hoisted_2$9 = {
15636
+ key: 0,
15637
+ class: "kds-dropdown-container-sticky-top"
15638
+ };
15634
15639
  const _sfc_main$m = /* @__PURE__ */ defineComponent({
15635
15640
  __name: "DropdownContainer",
15636
15641
  props: /* @__PURE__ */ mergeModels({
@@ -15641,10 +15646,14 @@ const _sfc_main$m = /* @__PURE__ */ defineComponent({
15641
15646
  "modelValue": { default: "" },
15642
15647
  "modelModifiers": {}
15643
15648
  }),
15644
- emits: ["update:modelValue"],
15645
- setup(__props, { expose: __expose }) {
15649
+ emits: /* @__PURE__ */ mergeModels(["select"], ["update:modelValue"]),
15650
+ setup(__props, { expose: __expose, emit: __emit }) {
15646
15651
  const props = __props;
15652
+ const emit = __emit;
15647
15653
  const modelValue = useModel(__props, "modelValue");
15654
+ const searchable = computed(
15655
+ () => props.possibleValues.length >= DROPDOWN_SEARCH_THRESHOLD
15656
+ );
15648
15657
  const searchValue = ref("");
15649
15658
  const searchEl = useTemplateRef("searchEl");
15650
15659
  const listContainerRef = useTemplateRef("listContainer");
@@ -15694,12 +15703,24 @@ const _sfc_main$m = /* @__PURE__ */ defineComponent({
15694
15703
  const hasMultiline = computed(
15695
15704
  () => props.possibleValues.some((o) => o.subText !== void 0)
15696
15705
  );
15706
+ const onItemClick = (id) => {
15707
+ if (id !== void 0) {
15708
+ modelValue.value = id;
15709
+ emit("select", id);
15710
+ }
15711
+ };
15697
15712
  __expose({
15698
- focus: () => searchEl.value?.focus()
15713
+ focus: () => {
15714
+ if (searchable.value) {
15715
+ searchEl.value?.focus();
15716
+ } else {
15717
+ listContainerRef.value?.focus();
15718
+ }
15719
+ }
15699
15720
  });
15700
15721
  return (_ctx, _cache) => {
15701
15722
  return openBlock(), createElementBlock("div", _hoisted_1$h, [
15702
- createElementVNode("div", _hoisted_2$9, [
15723
+ searchable.value ? (openBlock(), createElementBlock("div", _hoisted_2$9, [
15703
15724
  createVNode(BaseInput, {
15704
15725
  ref_key: "searchEl",
15705
15726
  ref: searchEl,
@@ -15715,23 +15736,23 @@ const _sfc_main$m = /* @__PURE__ */ defineComponent({
15715
15736
  onFocus: _cache[2] || (_cache[2] = ($event) => listContainerRef.value?.handleFocus()),
15716
15737
  onBlur: _cache[3] || (_cache[3] = ($event) => listContainerRef.value?.handleBlur())
15717
15738
  }, null, 8, ["modelValue", "aria-activedescendant"])
15718
- ]),
15739
+ ])) : createCommentVNode("", true),
15719
15740
  createVNode(unref(KdsListContainer), {
15720
15741
  ref: "listContainer",
15721
15742
  class: normalizeClass(["kds-dropdown-container-list", { multiline: hasMultiline.value }]),
15722
15743
  "possible-values": props.loading ? [] : listOptions.value,
15723
15744
  loading: props.loading,
15724
15745
  "empty-text": props.emptyText,
15725
- "controlled-externally": "",
15746
+ "controlled-externally": searchable.value,
15726
15747
  "aria-label": "Dropdown options",
15727
- onItemClick: _cache[4] || (_cache[4] = ($event) => $event !== void 0 && (modelValue.value = $event))
15728
- }, null, 8, ["class", "possible-values", "loading", "empty-text"])
15748
+ onItemClick
15749
+ }, null, 8, ["class", "possible-values", "loading", "empty-text", "controlled-externally"])
15729
15750
  ]);
15730
15751
  };
15731
15752
  }
15732
15753
  });
15733
15754
 
15734
- const DropdownContainer = /* @__PURE__ */ _export_sfc$1(_sfc_main$m, [["__scopeId", "data-v-9f49ff8b"]]);
15755
+ const DropdownContainer = /* @__PURE__ */ _export_sfc$1(_sfc_main$m, [["__scopeId", "data-v-db105594"]]);
15735
15756
 
15736
15757
  const _sfc_main$l = /* @__PURE__ */ defineComponent({
15737
15758
  __name: "KdsDropdown",
@@ -15767,11 +15788,9 @@ const _sfc_main$l = /* @__PURE__ */ defineComponent({
15767
15788
  nextTick(() => dropdownContainerEl.value?.focus());
15768
15789
  }
15769
15790
  });
15770
- watch(modelValue, () => {
15771
- if (open.value) {
15772
- open.value = false;
15773
- }
15774
- });
15791
+ const closeDropdown = () => {
15792
+ open.value = false;
15793
+ };
15775
15794
  return (_ctx, _cache) => {
15776
15795
  return openBlock(), createBlock(BaseFormFieldWrapper, {
15777
15796
  id: props.id,
@@ -15805,7 +15824,7 @@ const _sfc_main$l = /* @__PURE__ */ defineComponent({
15805
15824
  placement: "bottom-left",
15806
15825
  role: "dialog",
15807
15826
  "full-width": "",
15808
- "aria-label": "Searchable dropdown options"
15827
+ "aria-label": "Dropdown menu"
15809
15828
  }, {
15810
15829
  default: withCtx(() => [
15811
15830
  createVNode(DropdownContainer, {
@@ -15815,7 +15834,8 @@ const _sfc_main$l = /* @__PURE__ */ defineComponent({
15815
15834
  "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => modelValue.value = $event),
15816
15835
  "possible-values": props.possibleValues,
15817
15836
  loading: __props.loading,
15818
- "empty-text": "No entries found"
15837
+ "empty-text": "No entries found",
15838
+ onSelect: closeDropdown
15819
15839
  }, null, 8, ["modelValue", "possible-values", "loading"])
15820
15840
  ]),
15821
15841
  _: 1