@salt-ds/lab 1.0.0-alpha.35 → 1.0.0-alpha.36

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 (39) hide show
  1. package/css/salt-lab.css +247 -6
  2. package/dist-cjs/combo-box-next/ComboBoxNext.css.js +6 -0
  3. package/dist-cjs/combo-box-next/ComboBoxNext.css.js.map +1 -0
  4. package/dist-cjs/combo-box-next/ComboBoxNext.js +31 -3
  5. package/dist-cjs/combo-box-next/ComboBoxNext.js.map +1 -1
  6. package/dist-cjs/dropdown-next/DropdownNext.js +1 -1
  7. package/dist-cjs/dropdown-next/DropdownNext.js.map +1 -1
  8. package/dist-cjs/option/Option.css.js +1 -1
  9. package/dist-cjs/option/OptionList.css.js +1 -1
  10. package/dist-cjs/pill-input/PillInput.css.js +6 -0
  11. package/dist-cjs/pill-input/PillInput.css.js.map +1 -0
  12. package/dist-cjs/pill-input/PillInput.js +256 -0
  13. package/dist-cjs/pill-input/PillInput.js.map +1 -0
  14. package/dist-cjs/pill-input/useTruncatePills.js +85 -0
  15. package/dist-cjs/pill-input/useTruncatePills.js.map +1 -0
  16. package/dist-cjs/utils/useValueEffect.js +40 -0
  17. package/dist-cjs/utils/useValueEffect.js.map +1 -0
  18. package/dist-es/combo-box-next/ComboBoxNext.css.js +4 -0
  19. package/dist-es/combo-box-next/ComboBoxNext.css.js.map +1 -0
  20. package/dist-es/combo-box-next/ComboBoxNext.js +32 -4
  21. package/dist-es/combo-box-next/ComboBoxNext.js.map +1 -1
  22. package/dist-es/dropdown-next/DropdownNext.js +1 -1
  23. package/dist-es/dropdown-next/DropdownNext.js.map +1 -1
  24. package/dist-es/option/Option.css.js +1 -1
  25. package/dist-es/option/OptionList.css.js +1 -1
  26. package/dist-es/pill-input/PillInput.css.js +4 -0
  27. package/dist-es/pill-input/PillInput.css.js.map +1 -0
  28. package/dist-es/pill-input/PillInput.js +252 -0
  29. package/dist-es/pill-input/PillInput.js.map +1 -0
  30. package/dist-es/pill-input/useTruncatePills.js +81 -0
  31. package/dist-es/pill-input/useTruncatePills.js.map +1 -0
  32. package/dist-es/utils/useValueEffect.js +36 -0
  33. package/dist-es/utils/useValueEffect.js.map +1 -0
  34. package/dist-types/combo-box-next/ComboBoxNext.d.ts +3 -3
  35. package/dist-types/pill-input/PillInput.d.ts +48 -0
  36. package/dist-types/pill-input/index.d.ts +1 -0
  37. package/dist-types/pill-input/useTruncatePills.d.ts +8 -0
  38. package/dist-types/utils/useValueEffect.d.ts +4 -0
  39. package/package.json +1 -1
@@ -0,0 +1,81 @@
1
+ import { useRef, useCallback } from 'react';
2
+ import { useIsomorphicLayoutEffect } from '@salt-ds/core';
3
+ import { useValueEffect } from '../utils/useValueEffect.js';
4
+ import { useWindow } from '@salt-ds/window';
5
+ import 'react/jsx-runtime';
6
+ import { useResizeObserver } from '../responsive/useResizeObserver.js';
7
+
8
+ function useTruncatePills({
9
+ pills,
10
+ enable
11
+ }) {
12
+ const pillListRef = useRef(null);
13
+ const [{ visibleCount }, setVisibleItems] = useValueEffect({
14
+ visibleCount: pills.length
15
+ });
16
+ const targetWindow = useWindow();
17
+ const updateOverflow = useCallback(() => {
18
+ if (!enable) {
19
+ return;
20
+ }
21
+ const computeVisible = (visibleCount2) => {
22
+ const pillList = pillListRef.current;
23
+ if (pillList && targetWindow) {
24
+ let pillElements = Array.from(
25
+ pillList.querySelectorAll('[role="listitem"]')
26
+ );
27
+ const maxWidth = pillList.getBoundingClientRect().width;
28
+ const listGap = parseInt(targetWindow.getComputedStyle(pillList).gap);
29
+ let isShowingOverflow = pillList.querySelector(
30
+ "[data-overflowindicator]"
31
+ );
32
+ let currentSize = 0;
33
+ let newVisibleCount = 0;
34
+ if (isShowingOverflow) {
35
+ let pill = pillElements.pop();
36
+ if (pill) {
37
+ let pillWidth = pill.getBoundingClientRect().width;
38
+ currentSize += pillWidth + listGap;
39
+ }
40
+ }
41
+ for (let pill of pillElements) {
42
+ let pillWidth = pill.getBoundingClientRect().width;
43
+ currentSize += pillWidth + listGap;
44
+ if (Math.round(currentSize) <= Math.round(maxWidth)) {
45
+ newVisibleCount++;
46
+ } else {
47
+ break;
48
+ }
49
+ }
50
+ return newVisibleCount;
51
+ }
52
+ return visibleCount2;
53
+ };
54
+ setVisibleItems(function* () {
55
+ yield {
56
+ visibleCount: pills.length
57
+ };
58
+ let newVisibleCount = computeVisible(pills.length);
59
+ let isMeasuring = newVisibleCount < pills.length && newVisibleCount > 0;
60
+ yield {
61
+ visibleCount: newVisibleCount
62
+ };
63
+ if (isMeasuring) {
64
+ newVisibleCount = computeVisible(visibleCount);
65
+ yield {
66
+ visibleCount: newVisibleCount
67
+ };
68
+ }
69
+ });
70
+ }, [pills, setVisibleItems, enable, targetWindow]);
71
+ useIsomorphicLayoutEffect(updateOverflow, [updateOverflow, pills]);
72
+ useResizeObserver(pillListRef, ["width"], updateOverflow, true);
73
+ return {
74
+ pillListRef,
75
+ visibleCount,
76
+ visiblePills: enable ? pills.slice(0, visibleCount) : pills
77
+ };
78
+ }
79
+
80
+ export { useTruncatePills };
81
+ //# sourceMappingURL=useTruncatePills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTruncatePills.js","sources":["../src/pill-input/useTruncatePills.ts"],"sourcesContent":["import { useCallback, useRef } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport { useValueEffect } from \"../utils/useValueEffect\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useResizeObserver } from \"../responsive\";\n\nexport function useTruncatePills({\n pills,\n enable,\n}: {\n pills: string[];\n enable?: boolean;\n}) {\n const pillListRef = useRef<HTMLDivElement>(null);\n const [{ visibleCount }, setVisibleItems] = useValueEffect({\n visibleCount: pills.length,\n });\n const targetWindow = useWindow();\n\n const updateOverflow = useCallback(() => {\n if (!enable) {\n return;\n }\n\n const computeVisible = (visibleCount: number) => {\n const pillList = pillListRef.current;\n\n if (pillList && targetWindow) {\n let pillElements = Array.from(\n pillList.querySelectorAll('[role=\"listitem\"]')\n ) as HTMLLIElement[];\n const maxWidth = pillList.getBoundingClientRect().width;\n const listGap = parseInt(targetWindow.getComputedStyle(pillList).gap);\n let isShowingOverflow = pillList.querySelector(\n \"[data-overflowindicator]\"\n );\n\n let currentSize = 0;\n let newVisibleCount = 0;\n\n if (isShowingOverflow) {\n let pill = pillElements.pop();\n if (pill) {\n let pillWidth = pill.getBoundingClientRect().width;\n currentSize += pillWidth + listGap;\n }\n }\n\n for (let pill of pillElements) {\n let pillWidth = pill.getBoundingClientRect().width;\n currentSize += pillWidth + listGap;\n\n if (Math.round(currentSize) <= Math.round(maxWidth)) {\n newVisibleCount++;\n } else {\n break;\n }\n }\n return newVisibleCount;\n }\n return visibleCount;\n };\n\n setVisibleItems(function* () {\n // Show all\n yield {\n visibleCount: pills.length,\n };\n\n // Measure the visible count\n let newVisibleCount = computeVisible(pills.length);\n let isMeasuring = newVisibleCount < pills.length && newVisibleCount > 0;\n yield {\n visibleCount: newVisibleCount,\n };\n\n // ensure the visible count is correct\n if (isMeasuring) {\n newVisibleCount = computeVisible(visibleCount);\n yield {\n visibleCount: newVisibleCount,\n };\n }\n });\n }, [pills, setVisibleItems, enable, targetWindow]);\n\n useIsomorphicLayoutEffect(updateOverflow, [updateOverflow, pills]);\n useResizeObserver(pillListRef, [\"width\"], updateOverflow, true);\n\n return {\n pillListRef,\n visibleCount,\n visiblePills: enable ? pills.slice(0, visibleCount) : pills,\n };\n}\n"],"names":["visibleCount"],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { useState, useRef } from 'react';
2
+ import { useIsomorphicLayoutEffect } from '@salt-ds/core';
3
+ import { useEventCallback } from './useEventCallback.js';
4
+
5
+ function useValueEffect(defaultValue) {
6
+ let [value, setValue] = useState(defaultValue);
7
+ let effect = useRef(null);
8
+ let nextRef = useEventCallback(() => {
9
+ if (!effect.current) {
10
+ return;
11
+ }
12
+ let newValue = effect.current.next();
13
+ if (newValue.done) {
14
+ effect.current = null;
15
+ return;
16
+ }
17
+ if (value === newValue.value) {
18
+ nextRef();
19
+ } else {
20
+ setValue(newValue.value);
21
+ }
22
+ });
23
+ useIsomorphicLayoutEffect(() => {
24
+ if (effect.current) {
25
+ nextRef();
26
+ }
27
+ });
28
+ let queue = useEventCallback((fn) => {
29
+ effect.current = fn(value);
30
+ nextRef();
31
+ });
32
+ return [value, queue];
33
+ }
34
+
35
+ export { useValueEffect };
36
+ //# sourceMappingURL=useValueEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useValueEffect.js","sources":["../src/utils/useValueEffect.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport { Dispatch, MutableRefObject, useRef, useState } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport { useEventCallback } from \"./useEventCallback\";\n\ntype SetValueAction<S> = (prev: S) => Generator<any, void, unknown>;\n\n// This hook works like `useState`, but when setting the value, you pass a generator function\n// that can yield multiple values. Each yielded value updates the state and waits for the next\n// layout effect, then continues the generator. This allows sequential updates to state to be\n// written linearly.\nexport function useValueEffect<S>(\n defaultValue: S | (() => S)\n): [S, Dispatch<SetValueAction<S>>] {\n let [value, setValue] = useState(defaultValue);\n let effect: MutableRefObject<Generator<S> | null> =\n useRef<Generator<S> | null>(null);\n\n // Store the function in a ref so we can always access the current version\n // which has the proper `value` in scope.\n let nextRef = useEventCallback(() => {\n if (!effect.current) {\n return;\n }\n // Run the generator to the next yield.\n let newValue = effect.current.next();\n\n // If the generator is done, reset the effect.\n if (newValue.done) {\n effect.current = null;\n return;\n }\n\n // If the value is the same as the current value,\n // then continue to the next yield. Otherwise,\n // set the value in state and wait for the next layout effect.\n if (value === newValue.value) {\n nextRef();\n } else {\n setValue(newValue.value);\n }\n });\n\n useIsomorphicLayoutEffect(() => {\n // If there is an effect currently running, continue to the next yield.\n if (effect.current) {\n nextRef();\n }\n });\n\n let queue: Dispatch<SetValueAction<S>> = useEventCallback((fn) => {\n effect.current = fn(value);\n nextRef();\n });\n\n return [value, queue];\n}\n"],"names":[],"mappings":";;;;AAsBO,SAAS,eACd,YACkC,EAAA;AAClC,EAAA,IAAI,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,YAAY,CAAA,CAAA;AAC7C,EAAI,IAAA,MAAA,GACF,OAA4B,IAAI,CAAA,CAAA;AAIlC,EAAI,IAAA,OAAA,GAAU,iBAAiB,MAAM;AACnC,IAAI,IAAA,CAAC,OAAO,OAAS,EAAA;AACnB,MAAA,OAAA;AAAA,KACF;AAEA,IAAI,IAAA,QAAA,GAAW,MAAO,CAAA,OAAA,CAAQ,IAAK,EAAA,CAAA;AAGnC,IAAA,IAAI,SAAS,IAAM,EAAA;AACjB,MAAA,MAAA,CAAO,OAAU,GAAA,IAAA,CAAA;AACjB,MAAA,OAAA;AAAA,KACF;AAKA,IAAI,IAAA,KAAA,KAAU,SAAS,KAAO,EAAA;AAC5B,MAAQ,OAAA,EAAA,CAAA;AAAA,KACH,MAAA;AACL,MAAA,QAAA,CAAS,SAAS,KAAK,CAAA,CAAA;AAAA,KACzB;AAAA,GACD,CAAA,CAAA;AAED,EAAA,yBAAA,CAA0B,MAAM;AAE9B,IAAA,IAAI,OAAO,OAAS,EAAA;AAClB,MAAQ,OAAA,EAAA,CAAA;AAAA,KACV;AAAA,GACD,CAAA,CAAA;AAED,EAAI,IAAA,KAAA,GAAqC,gBAAiB,CAAA,CAAC,EAAO,KAAA;AAChE,IAAO,MAAA,CAAA,OAAA,GAAU,GAAG,KAAK,CAAA,CAAA;AACzB,IAAQ,OAAA,EAAA,CAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAO,OAAA,CAAC,OAAO,KAAK,CAAA,CAAA;AACtB;;;;"}
@@ -1,17 +1,17 @@
1
1
  import { ReactNode, Ref } from "react";
2
- import { InputProps } from "@salt-ds/core";
3
2
  import { UseComboBoxNextProps } from "./useComboBoxNext";
3
+ import { PillInputProps } from "../pill-input";
4
4
  export declare type ComboBoxNextProps<Item = string> = {
5
5
  /**
6
6
  * The options to display in the combo box.
7
7
  */
8
8
  children?: ReactNode;
9
- } & UseComboBoxNextProps<Item> & InputProps;
9
+ } & UseComboBoxNextProps<Item> & PillInputProps;
10
10
  export declare const ComboBoxNext: <Item = string>(props: {
11
11
  /**
12
12
  * The options to display in the combo box.
13
13
  */
14
14
  children?: ReactNode;
15
- } & import("../list-control/ListControlState").ListControlProps<Item> & Pick<Omit<import("react").DetailedHTMLProps<import("react").InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref">, "defaultValue" | "value"> & InputProps & {
15
+ } & import("../list-control/ListControlState").ListControlProps<Item> & Pick<Omit<import("react").DetailedHTMLProps<import("react").InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref">, "defaultValue" | "value"> & PillInputProps & {
16
16
  ref?: Ref<HTMLDivElement> | undefined;
17
17
  }) => JSX.Element;
@@ -0,0 +1,48 @@
1
+ import { SyntheticEvent, ComponentPropsWithoutRef, InputHTMLAttributes, ReactNode, Ref } from "react";
2
+ export interface PillInputProps extends Omit<ComponentPropsWithoutRef<"div">, "defaultValue">, Pick<ComponentPropsWithoutRef<"input">, "disabled" | "value" | "defaultValue" | "placeholder"> {
3
+ /**
4
+ * The marker to use in an empty read only Input.
5
+ * Use `''` to disable this feature. Defaults to '—'.
6
+ */
7
+ emptyReadOnlyMarker?: string;
8
+ /**
9
+ * End adornment component
10
+ */
11
+ endAdornment?: ReactNode;
12
+ /**
13
+ * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.
14
+ */
15
+ inputProps?: InputHTMLAttributes<HTMLInputElement>;
16
+ /**
17
+ * Optional ref for the input component
18
+ */
19
+ inputRef?: Ref<HTMLInputElement>;
20
+ /**
21
+ * If `true`, the component is read only.
22
+ */
23
+ readOnly?: boolean;
24
+ /**
25
+ * The tokens to display in the input.
26
+ */
27
+ pills?: any[];
28
+ onPillRemove?: (event: SyntheticEvent, index: number) => void;
29
+ /**
30
+ * Start adornment component
31
+ */
32
+ startAdornment?: ReactNode;
33
+ /**
34
+ * Alignment of text within container. Defaults to "left"
35
+ */
36
+ textAlign?: "left" | "center" | "right";
37
+ /**
38
+ * Validation status.
39
+ */
40
+ validationStatus?: "error" | "warning" | "success";
41
+ /**
42
+ * Styling variant. Defaults to "primary".
43
+ */
44
+ variant?: "primary" | "secondary";
45
+ hidePillClose?: boolean;
46
+ truncate?: boolean;
47
+ }
48
+ export declare const PillInput: import("react").ForwardRefExoticComponent<PillInputProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1 @@
1
+ export * from "./PillInput";
@@ -0,0 +1,8 @@
1
+ export declare function useTruncatePills({ pills, enable, }: {
2
+ pills: string[];
3
+ enable?: boolean;
4
+ }): {
5
+ pillListRef: import("react").RefObject<HTMLDivElement>;
6
+ visibleCount: number;
7
+ visiblePills: string[];
8
+ };
@@ -0,0 +1,4 @@
1
+ import { Dispatch } from "react";
2
+ declare type SetValueAction<S> = (prev: S) => Generator<any, void, unknown>;
3
+ export declare function useValueEffect<S>(defaultValue: S | (() => S)): [S, Dispatch<SetValueAction<S>>];
4
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salt-ds/lab",
3
- "version": "1.0.0-alpha.35",
3
+ "version": "1.0.0-alpha.36",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",