@salt-ds/core 1.53.0 → 1.54.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/css/salt-core.css +47 -45
  3. package/dist-cjs/avatar/Avatar.css.js +1 -1
  4. package/dist-cjs/badge/Badge.css.js +1 -1
  5. package/dist-cjs/combo-box/ComboBox.js +2 -1
  6. package/dist-cjs/combo-box/ComboBox.js.map +1 -1
  7. package/dist-cjs/index.js +2 -0
  8. package/dist-cjs/index.js.map +1 -1
  9. package/dist-cjs/menu/MenuBase.js +5 -2
  10. package/dist-cjs/menu/MenuBase.js.map +1 -1
  11. package/dist-cjs/menu/MenuContext.js +3 -1
  12. package/dist-cjs/menu/MenuContext.js.map +1 -1
  13. package/dist-cjs/menu/MenuItem.js +5 -0
  14. package/dist-cjs/menu/MenuItem.js.map +1 -1
  15. package/dist-cjs/multiline-input/MultilineInput.js +2 -1
  16. package/dist-cjs/multiline-input/MultilineInput.js.map +1 -1
  17. package/dist-cjs/number-input/NumberInput.js +7 -7
  18. package/dist-cjs/number-input/NumberInput.js.map +1 -1
  19. package/dist-cjs/number-input/internal/useLongPressPointerAction.js +63 -0
  20. package/dist-cjs/number-input/internal/useLongPressPointerAction.js.map +1 -0
  21. package/dist-cjs/pill/Pill.js +72 -9
  22. package/dist-cjs/pill/Pill.js.map +1 -1
  23. package/dist-cjs/pill/PillCheckIcon.css.js +6 -0
  24. package/dist-cjs/pill/PillCheckIcon.css.js.map +1 -0
  25. package/dist-cjs/pill/PillCheckIcon.js +48 -0
  26. package/dist-cjs/pill/PillCheckIcon.js.map +1 -0
  27. package/dist-cjs/pill/PillGroup.css.js +6 -0
  28. package/dist-cjs/pill/PillGroup.css.js.map +1 -0
  29. package/dist-cjs/pill/PillGroup.js +83 -0
  30. package/dist-cjs/pill/PillGroup.js.map +1 -0
  31. package/dist-cjs/pill/PillGroupContext.js +27 -0
  32. package/dist-cjs/pill/PillGroupContext.js.map +1 -0
  33. package/dist-cjs/pill-input/PillInput.js +1 -0
  34. package/dist-cjs/pill-input/PillInput.js.map +1 -1
  35. package/dist-cjs/slider/internal/useRangeSliderThumb.js +14 -5
  36. package/dist-cjs/slider/internal/useRangeSliderThumb.js.map +1 -1
  37. package/dist-cjs/slider/internal/useSliderThumb.js +14 -5
  38. package/dist-cjs/slider/internal/useSliderThumb.js.map +1 -1
  39. package/dist-cjs/tag/Tag.css.js +1 -1
  40. package/dist-cjs/toggle-button/ToggleButton.css.js +1 -1
  41. package/dist-es/avatar/Avatar.css.js +1 -1
  42. package/dist-es/badge/Badge.css.js +1 -1
  43. package/dist-es/combo-box/ComboBox.js +3 -2
  44. package/dist-es/combo-box/ComboBox.js.map +1 -1
  45. package/dist-es/index.js +1 -0
  46. package/dist-es/index.js.map +1 -1
  47. package/dist-es/menu/MenuBase.js +5 -2
  48. package/dist-es/menu/MenuBase.js.map +1 -1
  49. package/dist-es/menu/MenuContext.js +3 -1
  50. package/dist-es/menu/MenuContext.js.map +1 -1
  51. package/dist-es/menu/MenuItem.js +6 -1
  52. package/dist-es/menu/MenuItem.js.map +1 -1
  53. package/dist-es/multiline-input/MultilineInput.js +3 -2
  54. package/dist-es/multiline-input/MultilineInput.js.map +1 -1
  55. package/dist-es/number-input/NumberInput.js +7 -7
  56. package/dist-es/number-input/NumberInput.js.map +1 -1
  57. package/dist-es/number-input/internal/useLongPressPointerAction.js +61 -0
  58. package/dist-es/number-input/internal/useLongPressPointerAction.js.map +1 -0
  59. package/dist-es/pill/Pill.js +74 -11
  60. package/dist-es/pill/Pill.js.map +1 -1
  61. package/dist-es/pill/PillCheckIcon.css.js +4 -0
  62. package/dist-es/pill/PillCheckIcon.css.js.map +1 -0
  63. package/dist-es/pill/PillCheckIcon.js +46 -0
  64. package/dist-es/pill/PillCheckIcon.js.map +1 -0
  65. package/dist-es/pill/PillGroup.css.js +4 -0
  66. package/dist-es/pill/PillGroup.css.js.map +1 -0
  67. package/dist-es/pill/PillGroup.js +81 -0
  68. package/dist-es/pill/PillGroup.js.map +1 -0
  69. package/dist-es/pill/PillGroupContext.js +24 -0
  70. package/dist-es/pill/PillGroupContext.js.map +1 -0
  71. package/dist-es/pill-input/PillInput.js +1 -0
  72. package/dist-es/pill-input/PillInput.js.map +1 -1
  73. package/dist-es/slider/internal/useRangeSliderThumb.js +14 -5
  74. package/dist-es/slider/internal/useRangeSliderThumb.js.map +1 -1
  75. package/dist-es/slider/internal/useSliderThumb.js +14 -5
  76. package/dist-es/slider/internal/useSliderThumb.js.map +1 -1
  77. package/dist-es/tag/Tag.css.js +1 -1
  78. package/dist-es/toggle-button/ToggleButton.css.js +1 -1
  79. package/dist-types/menu/MenuContext.d.ts +2 -0
  80. package/dist-types/number-input/internal/useLongPressPointerAction.d.ts +2 -0
  81. package/dist-types/pill/Pill.d.ts +1 -0
  82. package/dist-types/pill/PillCheckIcon.d.ts +7 -0
  83. package/dist-types/pill/PillGroup.d.ts +34 -0
  84. package/dist-types/pill/PillGroupContext.d.ts +9 -0
  85. package/dist-types/pill/index.d.ts +1 -0
  86. package/package.json +1 -1
  87. package/dist-cjs/number-input/internal/useActivateWhileMouseDown.js +0 -50
  88. package/dist-cjs/number-input/internal/useActivateWhileMouseDown.js.map +0 -1
  89. package/dist-es/number-input/internal/useActivateWhileMouseDown.js +0 -48
  90. package/dist-es/number-input/internal/useActivateWhileMouseDown.js.map +0 -1
  91. package/dist-types/number-input/internal/useActivateWhileMouseDown.d.ts +0 -5
@@ -0,0 +1,7 @@
1
+ export interface PillCheckIconProps {
2
+ checked?: boolean;
3
+ className?: string;
4
+ disabled?: boolean;
5
+ active?: boolean;
6
+ }
7
+ export declare const PillCheckIcon: ({ className, checked, disabled, active, }: PillCheckIconProps) => JSX.Element;
@@ -0,0 +1,34 @@
1
+ import { type ComponentPropsWithoutRef, type SyntheticEvent } from "react";
2
+ interface CommonPillGroupProps extends ComponentPropsWithoutRef<"fieldset"> {
3
+ /**
4
+ * If `true`, the Pill group will be disabled.
5
+ */
6
+ disabled?: boolean;
7
+ /**
8
+ * Selection variant of the Pill group. If "none", the Pills will not be selectable. If "multiple", pills inside behave like checkboxes.
9
+ */
10
+ selectionVariant?: "none" | "multiple";
11
+ }
12
+ interface SelectablePillGroupProps extends CommonPillGroupProps {
13
+ selectionVariant: "multiple";
14
+ /**
15
+ * The currently selected values.
16
+ */
17
+ selected?: string[];
18
+ /**
19
+ * The default selected values for un-controlled component.
20
+ */
21
+ defaultSelected?: string[];
22
+ /**
23
+ * Callback fired when the selection changes.
24
+ * @param event
25
+ * @param newSelected The new selected values.
26
+ */
27
+ onSelectionChange?: (event: SyntheticEvent, newSelected: string[]) => void;
28
+ }
29
+ interface NonSelectablePillGroupProps extends CommonPillGroupProps {
30
+ selectionVariant?: "none";
31
+ }
32
+ export type PillGroupProps = SelectablePillGroupProps | NonSelectablePillGroupProps;
33
+ export declare const PillGroup: import("react").ForwardRefExoticComponent<PillGroupProps & import("react").RefAttributes<HTMLFieldSetElement>>;
34
+ export {};
@@ -0,0 +1,9 @@
1
+ import { type SyntheticEvent } from "react";
2
+ export interface PillGroupContextValue {
3
+ selected: string[];
4
+ select: (e: SyntheticEvent, value: string) => void;
5
+ disabled?: boolean;
6
+ selectionVariant: "none" | "multiple";
7
+ }
8
+ export declare const PillGroupContext: import("react").Context<PillGroupContextValue>;
9
+ export declare function usePillGroup(): PillGroupContextValue;
@@ -1 +1,2 @@
1
1
  export * from "./Pill";
2
+ export * from "./PillGroup";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salt-ds/core",
3
- "version": "1.53.0",
3
+ "version": "1.54.0",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,50 +0,0 @@
1
- 'use strict';
2
-
3
- var window = require('@salt-ds/window');
4
- var React = require('react');
5
- var useInterval = require('./useInterval.js');
6
-
7
- const INITIAL_DELAY = 500;
8
- const INTERVAL_DELAY = 100;
9
- function useActivateWhileMouseDown(activationFn, isAtLimit) {
10
- const [buttonDown, setButtonDown] = React.useState(false);
11
- const [delay, setDelay] = React.useState(INITIAL_DELAY);
12
- const cancelInterval = React.useCallback(() => {
13
- setButtonDown(false);
14
- setDelay(INITIAL_DELAY);
15
- }, []);
16
- React.useEffect(() => {
17
- if (isAtLimit) cancelInterval();
18
- }, [isAtLimit, cancelInterval]);
19
- const targetWindow = window.useWindow();
20
- React.useEffect(() => {
21
- if (targetWindow) {
22
- targetWindow.addEventListener("mouseup", cancelInterval);
23
- }
24
- return () => {
25
- if (targetWindow) {
26
- targetWindow.removeEventListener("mouseup", cancelInterval);
27
- }
28
- };
29
- }, [cancelInterval, targetWindow]);
30
- const activate = (event) => {
31
- activationFn(event);
32
- if (event.type === "mousedown") {
33
- setButtonDown(true);
34
- }
35
- };
36
- useInterval.useInterval(
37
- () => {
38
- if (!buttonDown) return;
39
- activationFn();
40
- if (delay === INITIAL_DELAY) {
41
- setDelay(INTERVAL_DELAY);
42
- }
43
- },
44
- buttonDown ? delay : null
45
- );
46
- return { activate, buttonDown };
47
- }
48
-
49
- exports.useActivateWhileMouseDown = useActivateWhileMouseDown;
50
- //# sourceMappingURL=useActivateWhileMouseDown.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useActivateWhileMouseDown.js","sources":["../src/number-input/internal/useActivateWhileMouseDown.ts"],"sourcesContent":["import { useWindow } from \"@salt-ds/window\";\nimport { type SyntheticEvent, useCallback, useEffect, useState } from \"react\";\nimport { useInterval } from \"./useInterval\";\n\nconst INITIAL_DELAY = 500;\nconst INTERVAL_DELAY = 100;\n\nexport function useActivateWhileMouseDown(\n activationFn: (event?: SyntheticEvent) => void,\n isAtLimit: boolean,\n) {\n const [buttonDown, setButtonDown] = useState(false);\n const [delay, setDelay] = useState(INITIAL_DELAY);\n\n const cancelInterval = useCallback(() => {\n setButtonDown(false);\n setDelay(INITIAL_DELAY);\n }, []);\n\n useEffect(() => {\n if (isAtLimit) cancelInterval();\n }, [isAtLimit, cancelInterval]);\n\n const targetWindow = useWindow();\n\n useEffect(() => {\n if (targetWindow) {\n targetWindow.addEventListener(\"mouseup\", cancelInterval);\n }\n return () => {\n if (targetWindow) {\n targetWindow.removeEventListener(\"mouseup\", cancelInterval);\n }\n };\n }, [cancelInterval, targetWindow]);\n\n const activate = (event: SyntheticEvent) => {\n activationFn(event);\n if (event.type === \"mousedown\") {\n setButtonDown(true);\n }\n };\n\n useInterval(\n () => {\n if (!buttonDown) return;\n activationFn();\n if (delay === INITIAL_DELAY) {\n setDelay(INTERVAL_DELAY);\n }\n },\n buttonDown ? delay : null,\n );\n\n return { activate, buttonDown };\n}\n"],"names":["useState","useCallback","useEffect","useWindow","useInterval"],"mappings":";;;;;;AAIA,MAAM,aAAA,GAAgB,GAAA;AACtB,MAAM,cAAA,GAAiB,GAAA;AAEhB,SAAS,yBAAA,CACd,cACA,SAAA,EACA;AACA,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAS,aAAa,CAAA;AAEhD,EAAA,MAAM,cAAA,GAAiBC,kBAAY,MAAM;AACvC,IAAA,aAAA,CAAc,KAAK,CAAA;AACnB,IAAA,QAAA,CAAS,aAAa,CAAA;AAAA,EACxB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,WAAW,cAAA,EAAe;AAAA,EAChC,CAAA,EAAG,CAAC,SAAA,EAAW,cAAc,CAAC,CAAA;AAE9B,EAAA,MAAM,eAAeC,gBAAA,EAAU;AAE/B,EAAAD,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,YAAA,CAAa,gBAAA,CAAiB,WAAW,cAAc,CAAA;AAAA,IACzD;AACA,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,YAAA,CAAa,mBAAA,CAAoB,WAAW,cAAc,CAAA;AAAA,MAC5D;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,cAAA,EAAgB,YAAY,CAAC,CAAA;AAEjC,EAAA,MAAM,QAAA,GAAW,CAAC,KAAA,KAA0B;AAC1C,IAAA,YAAA,CAAa,KAAK,CAAA;AAClB,IAAA,IAAI,KAAA,CAAM,SAAS,WAAA,EAAa;AAC9B,MAAA,aAAA,CAAc,IAAI,CAAA;AAAA,IACpB;AAAA,EACF,CAAA;AAEA,EAAAE,uBAAA;AAAA,IACE,MAAM;AACJ,MAAA,IAAI,CAAC,UAAA,EAAY;AACjB,MAAA,YAAA,EAAa;AACb,MAAA,IAAI,UAAU,aAAA,EAAe;AAC3B,QAAA,QAAA,CAAS,cAAc,CAAA;AAAA,MACzB;AAAA,IACF,CAAA;AAAA,IACA,aAAa,KAAA,GAAQ;AAAA,GACvB;AAEA,EAAA,OAAO,EAAE,UAAU,UAAA,EAAW;AAChC;;;;"}
@@ -1,48 +0,0 @@
1
- import { useWindow } from '@salt-ds/window';
2
- import { useState, useCallback, useEffect } from 'react';
3
- import { useInterval } from './useInterval.js';
4
-
5
- const INITIAL_DELAY = 500;
6
- const INTERVAL_DELAY = 100;
7
- function useActivateWhileMouseDown(activationFn, isAtLimit) {
8
- const [buttonDown, setButtonDown] = useState(false);
9
- const [delay, setDelay] = useState(INITIAL_DELAY);
10
- const cancelInterval = useCallback(() => {
11
- setButtonDown(false);
12
- setDelay(INITIAL_DELAY);
13
- }, []);
14
- useEffect(() => {
15
- if (isAtLimit) cancelInterval();
16
- }, [isAtLimit, cancelInterval]);
17
- const targetWindow = useWindow();
18
- useEffect(() => {
19
- if (targetWindow) {
20
- targetWindow.addEventListener("mouseup", cancelInterval);
21
- }
22
- return () => {
23
- if (targetWindow) {
24
- targetWindow.removeEventListener("mouseup", cancelInterval);
25
- }
26
- };
27
- }, [cancelInterval, targetWindow]);
28
- const activate = (event) => {
29
- activationFn(event);
30
- if (event.type === "mousedown") {
31
- setButtonDown(true);
32
- }
33
- };
34
- useInterval(
35
- () => {
36
- if (!buttonDown) return;
37
- activationFn();
38
- if (delay === INITIAL_DELAY) {
39
- setDelay(INTERVAL_DELAY);
40
- }
41
- },
42
- buttonDown ? delay : null
43
- );
44
- return { activate, buttonDown };
45
- }
46
-
47
- export { useActivateWhileMouseDown };
48
- //# sourceMappingURL=useActivateWhileMouseDown.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useActivateWhileMouseDown.js","sources":["../src/number-input/internal/useActivateWhileMouseDown.ts"],"sourcesContent":["import { useWindow } from \"@salt-ds/window\";\nimport { type SyntheticEvent, useCallback, useEffect, useState } from \"react\";\nimport { useInterval } from \"./useInterval\";\n\nconst INITIAL_DELAY = 500;\nconst INTERVAL_DELAY = 100;\n\nexport function useActivateWhileMouseDown(\n activationFn: (event?: SyntheticEvent) => void,\n isAtLimit: boolean,\n) {\n const [buttonDown, setButtonDown] = useState(false);\n const [delay, setDelay] = useState(INITIAL_DELAY);\n\n const cancelInterval = useCallback(() => {\n setButtonDown(false);\n setDelay(INITIAL_DELAY);\n }, []);\n\n useEffect(() => {\n if (isAtLimit) cancelInterval();\n }, [isAtLimit, cancelInterval]);\n\n const targetWindow = useWindow();\n\n useEffect(() => {\n if (targetWindow) {\n targetWindow.addEventListener(\"mouseup\", cancelInterval);\n }\n return () => {\n if (targetWindow) {\n targetWindow.removeEventListener(\"mouseup\", cancelInterval);\n }\n };\n }, [cancelInterval, targetWindow]);\n\n const activate = (event: SyntheticEvent) => {\n activationFn(event);\n if (event.type === \"mousedown\") {\n setButtonDown(true);\n }\n };\n\n useInterval(\n () => {\n if (!buttonDown) return;\n activationFn();\n if (delay === INITIAL_DELAY) {\n setDelay(INTERVAL_DELAY);\n }\n },\n buttonDown ? delay : null,\n );\n\n return { activate, buttonDown };\n}\n"],"names":[],"mappings":";;;;AAIA,MAAM,aAAA,GAAgB,GAAA;AACtB,MAAM,cAAA,GAAiB,GAAA;AAEhB,SAAS,yBAAA,CACd,cACA,SAAA,EACA;AACA,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,aAAa,CAAA;AAEhD,EAAA,MAAM,cAAA,GAAiB,YAAY,MAAM;AACvC,IAAA,aAAA,CAAc,KAAK,CAAA;AACnB,IAAA,QAAA,CAAS,aAAa,CAAA;AAAA,EACxB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,WAAW,cAAA,EAAe;AAAA,EAChC,CAAA,EAAG,CAAC,SAAA,EAAW,cAAc,CAAC,CAAA;AAE9B,EAAA,MAAM,eAAe,SAAA,EAAU;AAE/B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,YAAA,CAAa,gBAAA,CAAiB,WAAW,cAAc,CAAA;AAAA,IACzD;AACA,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,YAAA,CAAa,mBAAA,CAAoB,WAAW,cAAc,CAAA;AAAA,MAC5D;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,cAAA,EAAgB,YAAY,CAAC,CAAA;AAEjC,EAAA,MAAM,QAAA,GAAW,CAAC,KAAA,KAA0B;AAC1C,IAAA,YAAA,CAAa,KAAK,CAAA;AAClB,IAAA,IAAI,KAAA,CAAM,SAAS,WAAA,EAAa;AAC9B,MAAA,aAAA,CAAc,IAAI,CAAA;AAAA,IACpB;AAAA,EACF,CAAA;AAEA,EAAA,WAAA;AAAA,IACE,MAAM;AACJ,MAAA,IAAI,CAAC,UAAA,EAAY;AACjB,MAAA,YAAA,EAAa;AACb,MAAA,IAAI,UAAU,aAAA,EAAe;AAC3B,QAAA,QAAA,CAAS,cAAc,CAAA;AAAA,MACzB;AAAA,IACF,CAAA;AAAA,IACA,aAAa,KAAA,GAAQ;AAAA,GACvB;AAEA,EAAA,OAAO,EAAE,UAAU,UAAA,EAAW;AAChC;;;;"}
@@ -1,5 +0,0 @@
1
- import { type SyntheticEvent } from "react";
2
- export declare function useActivateWhileMouseDown(activationFn: (event?: SyntheticEvent) => void, isAtLimit: boolean): {
3
- activate: (event: SyntheticEvent) => void;
4
- buttonDown: boolean;
5
- };