@economic/taco 1.30.1 → 1.31.0
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/components/Button/Button.d.ts +1 -0
- package/dist/components/Header/components/Button.d.ts +1 -1
- package/dist/components/IconButton/IconButton.d.ts +2 -2
- package/dist/components/Menu/components/Item.d.ts +0 -1
- package/dist/components/Shortcut/Shortcut.d.ts +2 -1
- package/dist/components/Table2/Table2.d.ts +1 -1
- package/dist/components/Table2/hooks/listeners/useFilterStateListener.d.ts +3 -0
- package/dist/components/Table2/hooks/useColumnDefinitions.d.ts +3 -2
- package/dist/components/Table2/types.d.ts +3 -10
- package/dist/components/Table2/utilities/columns.d.ts +1 -1
- package/dist/esm/packages/taco/src/components/Button/Button.js +2 -1
- package/dist/esm/packages/taco/src/components/Button/Button.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Combobox/useCombobox.js +1 -1
- package/dist/esm/packages/taco/src/components/Datepicker/useDatepicker.js +1 -1
- package/dist/esm/packages/taco/src/components/Dialog/components/Content.js +1 -1
- package/dist/esm/packages/taco/src/components/Drawer/components/Content.js +3 -7
- package/dist/esm/packages/taco/src/components/Drawer/components/Content.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Header/components/PrimaryNavigation.js +1 -1
- package/dist/esm/packages/taco/src/components/Input/Input.js +1 -1
- package/dist/esm/packages/taco/src/components/Listbox/ScrollableList.js +1 -1
- package/dist/esm/packages/taco/src/components/Listbox/useListbox.js +1 -1
- package/dist/esm/packages/taco/src/components/Listbox/useMultiListbox.js +1 -1
- package/dist/esm/packages/taco/src/components/Menu/components/Item.js +9 -8
- package/dist/esm/packages/taco/src/components/Menu/components/Item.js.map +1 -1
- package/dist/esm/packages/taco/src/components/OverflowGroup/OverflowGroup.js +1 -1
- package/dist/esm/packages/taco/src/components/SearchInput/SearchInput.js +1 -1
- package/dist/esm/packages/taco/src/components/Select/useSelect.js +1 -1
- package/dist/esm/packages/taco/src/components/Select2/Select2.js +1 -1
- package/dist/esm/packages/taco/src/components/Select2/components/Trigger.js +1 -1
- package/dist/esm/packages/taco/src/components/Shortcut/Shortcut.js +32 -2
- package/dist/esm/packages/taco/src/components/Shortcut/Shortcut.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table/components/WindowedTable.js +1 -1
- package/dist/esm/packages/taco/src/components/Table2/Table2.js +3 -6
- package/dist/esm/packages/taco/src/components/Table2/Table2.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table2/components/EditModeButton.js +13 -9
- package/dist/esm/packages/taco/src/components/Table2/components/EditModeButton.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table2/components/Search.js +10 -8
- package/dist/esm/packages/taco/src/components/Table2/components/Search.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table2/components/filters/FiltersButton.js +14 -8
- package/dist/esm/packages/taco/src/components/Table2/components/filters/FiltersButton.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table2/hooks/listeners/useFilterStateListener.js +12 -0
- package/dist/esm/packages/taco/src/components/Table2/hooks/listeners/useFilterStateListener.js.map +1 -0
- package/dist/esm/packages/taco/src/components/Table2/hooks/useColumnDefinitions.js +1 -1
- package/dist/esm/packages/taco/src/components/Table2/hooks/useColumnDefinitions.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table2/hooks/useTable.js +5 -0
- package/dist/esm/packages/taco/src/components/Table2/hooks/useTable.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table2/types.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table2/utilities/columns.js +36 -49
- package/dist/esm/packages/taco/src/components/Table2/utilities/columns.js.map +1 -1
- package/dist/esm/packages/taco/src/hooks/useGlobalKeyDown.js +15 -0
- package/dist/esm/packages/taco/src/hooks/useGlobalKeyDown.js.map +1 -0
- package/dist/esm/packages/taco/src/index.js +3 -2
- package/dist/esm/packages/taco/src/index.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Button.js +21 -2
- package/dist/esm/packages/taco/src/primitives/Button.js.map +1 -1
- package/dist/esm/packages/taco/src/utils/keyboard.js +35 -0
- package/dist/esm/packages/taco/src/utils/keyboard.js.map +1 -0
- package/dist/hooks/useGlobalKeyDown.d.ts +2 -0
- package/dist/index.d.ts +1 -0
- package/dist/primitives/Button.d.ts +3 -0
- package/dist/taco.cjs.development.js +220 -133
- package/dist/taco.cjs.development.js.map +1 -1
- package/dist/taco.cjs.production.min.js +1 -1
- package/dist/taco.cjs.production.min.js.map +1 -1
- package/dist/utils/keyboard.d.ts +8 -0
- package/package.json +2 -2
- package/types.json +20 -118
- package/dist/esm/packages/taco/src/hooks/useGlobalKeyboardShortcut.js +0 -13
- package/dist/esm/packages/taco/src/hooks/useGlobalKeyboardShortcut.js.map +0 -1
- package/dist/hooks/useGlobalKeyboardShortcut.d.ts +0 -1
@@ -1,19 +1,38 @@
|
|
1
|
-
import { forwardRef, createElement, Children } from 'react';
|
1
|
+
import { forwardRef, useEffect, createElement, Children } from 'react';
|
2
|
+
import { createShortcutKeyDownHandler } from '../utils/keyboard.js';
|
3
|
+
import { useMergedRef } from '../hooks/useMergedRef.js';
|
2
4
|
|
3
5
|
const Button = /*#__PURE__*/forwardRef(function Button(props, ref) {
|
4
6
|
const {
|
5
7
|
disabled,
|
8
|
+
shortcut,
|
6
9
|
target,
|
7
10
|
type = 'button',
|
8
11
|
...otherProps
|
9
12
|
} = props;
|
13
|
+
const internalRef = useMergedRef(ref);
|
14
|
+
useEffect(() => {
|
15
|
+
let handleKeyDown;
|
16
|
+
if (shortcut) {
|
17
|
+
handleKeyDown = createShortcutKeyDownHandler(shortcut, () => {
|
18
|
+
var _internalRef$current;
|
19
|
+
(_internalRef$current = internalRef.current) === null || _internalRef$current === void 0 ? void 0 : _internalRef$current.click();
|
20
|
+
});
|
21
|
+
document.addEventListener('keydown', handleKeyDown);
|
22
|
+
}
|
23
|
+
return () => {
|
24
|
+
if (handleKeyDown) {
|
25
|
+
document.removeEventListener('keydown', handleKeyDown);
|
26
|
+
}
|
27
|
+
};
|
28
|
+
}, [shortcut]);
|
10
29
|
const Tag = props.href ? 'a' : 'button';
|
11
30
|
return /*#__PURE__*/createElement(Tag, Object.assign({}, otherProps, {
|
12
31
|
"aria-disabled": disabled ? 'true' : undefined,
|
13
32
|
disabled: disabled,
|
14
33
|
target: Tag === 'a' ? target : undefined,
|
15
34
|
type: Tag !== 'a' ? type : undefined,
|
16
|
-
ref:
|
35
|
+
ref: internalRef
|
17
36
|
}), Children.count(props.children) > 1 ? Children.map(props.children, child => typeof child === 'string' ? /*#__PURE__*/createElement("span", null, child) : child) : props.children);
|
18
37
|
});
|
19
38
|
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Button.js","sources":["../../../../../../src/primitives/Button.tsx"],"sourcesContent":["import * as React from 'react';\n\ntype ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement | HTMLAnchorElement> & {\n /** Content should be a text */\n children: React.ReactNode;\n /** Provides url for buttons being used as a link */\n href?: string;\n /** Provides target for buttons being used as a link */\n target?: '_self' | '_blank' | '_parent' | '_top';\n};\n\nconst Button = React.forwardRef(function Button(props: ButtonProps, ref: React.Ref<HTMLButtonElement | HTMLAnchorElement>) {\n const { disabled, target, type = 'button', ...otherProps } = props;\n\n const Tag = props.href ? 'a' : 'button';\n\n return (\n <Tag\n {...otherProps}\n aria-disabled={disabled ? 'true' : undefined}\n disabled={disabled}\n target={Tag === 'a' ? target : undefined}\n type={Tag !== 'a' ? type : undefined}\n ref={
|
1
|
+
{"version":3,"file":"Button.js","sources":["../../../../../../src/primitives/Button.tsx"],"sourcesContent":["import * as React from 'react';\nimport { KeyDownHandlerOptions, createShortcutKeyDownHandler } from '../utils/keyboard';\nimport { useMergedRef } from '../hooks/useMergedRef';\n\ntype ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement | HTMLAnchorElement> & {\n /** Content should be a text */\n children: React.ReactNode;\n /** Provides url for buttons being used as a link */\n href?: string;\n shortcut?: string | KeyDownHandlerOptions;\n /** Provides target for buttons being used as a link */\n target?: '_self' | '_blank' | '_parent' | '_top';\n};\n\nconst Button = React.forwardRef(function Button(props: ButtonProps, ref: React.Ref<HTMLButtonElement | HTMLAnchorElement>) {\n const { disabled, shortcut, target, type = 'button', ...otherProps } = props;\n const internalRef = useMergedRef<HTMLButtonElement | HTMLAnchorElement>(ref);\n\n React.useEffect(() => {\n let handleKeyDown;\n\n if (shortcut) {\n handleKeyDown = createShortcutKeyDownHandler(shortcut, () => {\n internalRef.current?.click();\n });\n\n document.addEventListener('keydown', handleKeyDown);\n }\n\n return () => {\n if (handleKeyDown) {\n document.removeEventListener('keydown', handleKeyDown);\n }\n };\n }, [shortcut]);\n\n const Tag = props.href ? 'a' : 'button';\n\n return (\n <Tag\n {...otherProps}\n aria-disabled={disabled ? 'true' : undefined}\n disabled={disabled}\n target={Tag === 'a' ? target : undefined}\n type={Tag !== 'a' ? type : undefined}\n ref={internalRef as any}>\n {React.Children.count(props.children) > 1\n ? React.Children.map(props.children, child => (typeof child === 'string' ? <span>{child}</span> : child))\n : props.children}\n </Tag>\n );\n});\n\nexport { Button };\nexport type { ButtonProps };\n"],"names":["Button","React","props","ref","disabled","shortcut","target","type","otherProps","internalRef","useMergedRef","handleKeyDown","createShortcutKeyDownHandler","current","click","document","addEventListener","removeEventListener","Tag","href","undefined","count","children","map","child"],"mappings":";;;;MAcMA,MAAM,gBAAGC,UAAgB,CAAC,SAASD,MAAM,CAACE,KAAkB,EAAEC,GAAqD;EACrH,MAAM;IAAEC,QAAQ;IAAEC,QAAQ;IAAEC,MAAM;IAAEC,IAAI,GAAG,QAAQ;IAAE,GAAGC;GAAY,GAAGN,KAAK;EAC5E,MAAMO,WAAW,GAAGC,YAAY,CAAwCP,GAAG,CAAC;EAE5EF,SAAe,CAAC;IACZ,IAAIU,aAAa;IAEjB,IAAIN,QAAQ,EAAE;MACVM,aAAa,GAAGC,4BAA4B,CAACP,QAAQ,EAAE;;QACnD,wBAAAI,WAAW,CAACI,OAAO,yDAAnB,qBAAqBC,KAAK,EAAE;OAC/B,CAAC;MAEFC,QAAQ,CAACC,gBAAgB,CAAC,SAAS,EAAEL,aAAa,CAAC;;IAGvD,OAAO;MACH,IAAIA,aAAa,EAAE;QACfI,QAAQ,CAACE,mBAAmB,CAAC,SAAS,EAAEN,aAAa,CAAC;;KAE7D;GACJ,EAAE,CAACN,QAAQ,CAAC,CAAC;EAEd,MAAMa,GAAG,GAAGhB,KAAK,CAACiB,IAAI,GAAG,GAAG,GAAG,QAAQ;EAEvC,oBACIlB,cAACiB,GAAG,oBACIV,UAAU;qBACCJ,QAAQ,GAAG,MAAM,GAAGgB,SAAS;IAC5ChB,QAAQ,EAAEA,QAAQ;IAClBE,MAAM,EAAEY,GAAG,KAAK,GAAG,GAAGZ,MAAM,GAAGc,SAAS;IACxCb,IAAI,EAAEW,GAAG,KAAK,GAAG,GAAGX,IAAI,GAAGa,SAAS;IACpCjB,GAAG,EAAEM;MACJR,QAAc,CAACoB,KAAK,CAACnB,KAAK,CAACoB,QAAQ,CAAC,GAAG,CAAC,GACnCrB,QAAc,CAACsB,GAAG,CAACrB,KAAK,CAACoB,QAAQ,EAAEE,KAAK,IAAK,OAAOA,KAAK,KAAK,QAAQ,gBAAGvB,4BAAOuB,KAAK,CAAQ,GAAGA,KAAM,CAAC,GACvGtB,KAAK,CAACoB,QAAQ,CAClB;AAEd,CAAC;;;;"}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
const WHITELISTED_ELEMENTS = ['INPUT', 'TEXTAREA', 'SELECT'];
|
2
|
+
function createShortcutKeyDownHandler(key, handler) {
|
3
|
+
return function (event) {
|
4
|
+
let condition = false;
|
5
|
+
if (event.target !== event.currentTarget && WHITELISTED_ELEMENTS.includes(event.target.tagName)) {
|
6
|
+
return;
|
7
|
+
}
|
8
|
+
if (typeof key === 'string') {
|
9
|
+
condition = event.key.toLowerCase() === key.toLowerCase();
|
10
|
+
} else {
|
11
|
+
if (key.meta && (isMacOs() ? !event.metaKey : !event.ctrlKey) || key.meta === false && key.meta && (isMacOs() ? event.metaKey : event.ctrlKey)) {
|
12
|
+
return;
|
13
|
+
}
|
14
|
+
if (key.shift && !event.shiftKey || key.shift === false && event.shiftKey) {
|
15
|
+
return;
|
16
|
+
}
|
17
|
+
condition = event.key.toLowerCase() === key.key.toLowerCase();
|
18
|
+
}
|
19
|
+
if (condition) {
|
20
|
+
var _event$stopImmediateP;
|
21
|
+
// stops react handlers bubbling up to global
|
22
|
+
event.stopPropagation();
|
23
|
+
// stops global handlers bubbling up to other global
|
24
|
+
(_event$stopImmediateP = event.stopImmediatePropagation) === null || _event$stopImmediateP === void 0 ? void 0 : _event$stopImmediateP.call(event);
|
25
|
+
handler(event);
|
26
|
+
}
|
27
|
+
};
|
28
|
+
}
|
29
|
+
const isMacOs = () => {
|
30
|
+
var _window;
|
31
|
+
return (_window = window) === null || _window === void 0 ? void 0 : _window.navigator.userAgent.includes('Mac');
|
32
|
+
};
|
33
|
+
|
34
|
+
export { createShortcutKeyDownHandler, isMacOs };
|
35
|
+
//# sourceMappingURL=keyboard.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"keyboard.js","sources":["../../../../../../src/utils/keyboard.ts"],"sourcesContent":["import React from 'react';\n\nexport type KeyDownHandlerOptions = { key: string; meta?: boolean; shift?: boolean };\n\nconst WHITELISTED_ELEMENTS = ['INPUT', 'TEXTAREA', 'SELECT'];\n\nexport function createShortcutKeyDownHandler<T = Element>(\n key: string | KeyDownHandlerOptions,\n handler: (event: KeyboardEvent | React.KeyboardEvent<T>) => void\n) {\n return function (event: KeyboardEvent | React.KeyboardEvent<T>) {\n let condition = false;\n\n if (event.target !== event.currentTarget && WHITELISTED_ELEMENTS.includes((event.target as HTMLElement).tagName)) {\n return;\n }\n\n if (typeof key === 'string') {\n condition = event.key.toLowerCase() === key.toLowerCase();\n } else {\n if (\n (key.meta && (isMacOs() ? !event.metaKey : !event.ctrlKey)) ||\n (key.meta === false && key.meta && (isMacOs() ? event.metaKey : event.ctrlKey))\n ) {\n return;\n }\n\n if ((key.shift && !event.shiftKey) || (key.shift === false && event.shiftKey)) {\n return;\n }\n\n condition = event.key.toLowerCase() === key.key.toLowerCase();\n }\n\n if (condition) {\n // stops react handlers bubbling up to global\n event.stopPropagation();\n // stops global handlers bubbling up to other global\n (event as KeyboardEvent).stopImmediatePropagation?.();\n handler(event);\n }\n };\n}\n\nexport const isMacOs = () => window?.navigator.userAgent.includes('Mac');\n"],"names":["WHITELISTED_ELEMENTS","createShortcutKeyDownHandler","key","handler","event","condition","target","currentTarget","includes","tagName","toLowerCase","meta","isMacOs","metaKey","ctrlKey","shift","shiftKey","stopPropagation","stopImmediatePropagation","window","navigator","userAgent"],"mappings":"AAIA,MAAMA,oBAAoB,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC;SAE5CC,4BAA4B,CACxCC,GAAmC,EACnCC,OAAgE;EAEhE,OAAO,UAAUC,KAA6C;IAC1D,IAAIC,SAAS,GAAG,KAAK;IAErB,IAAID,KAAK,CAACE,MAAM,KAAKF,KAAK,CAACG,aAAa,IAAIP,oBAAoB,CAACQ,QAAQ,CAAEJ,KAAK,CAACE,MAAsB,CAACG,OAAO,CAAC,EAAE;MAC9G;;IAGJ,IAAI,OAAOP,GAAG,KAAK,QAAQ,EAAE;MACzBG,SAAS,GAAGD,KAAK,CAACF,GAAG,CAACQ,WAAW,EAAE,KAAKR,GAAG,CAACQ,WAAW,EAAE;KAC5D,MAAM;MACH,IACKR,GAAG,CAACS,IAAI,KAAKC,OAAO,EAAE,GAAG,CAACR,KAAK,CAACS,OAAO,GAAG,CAACT,KAAK,CAACU,OAAO,CAAC,IACzDZ,GAAG,CAACS,IAAI,KAAK,KAAK,IAAIT,GAAG,CAACS,IAAI,KAAKC,OAAO,EAAE,GAAGR,KAAK,CAACS,OAAO,GAAGT,KAAK,CAACU,OAAO,CAAE,EACjF;QACE;;MAGJ,IAAKZ,GAAG,CAACa,KAAK,IAAI,CAACX,KAAK,CAACY,QAAQ,IAAMd,GAAG,CAACa,KAAK,KAAK,KAAK,IAAIX,KAAK,CAACY,QAAS,EAAE;QAC3E;;MAGJX,SAAS,GAAGD,KAAK,CAACF,GAAG,CAACQ,WAAW,EAAE,KAAKR,GAAG,CAACA,GAAG,CAACQ,WAAW,EAAE;;IAGjE,IAAIL,SAAS,EAAE;MAAA;;MAEXD,KAAK,CAACa,eAAe,EAAE;;MAEtB,yBAAAb,KAAuB,CAACc,wBAAwB,0DAAhD,2BAAAd,KAAuB,CAA6B;MACrDD,OAAO,CAACC,KAAK,CAAC;;GAErB;AACL;MAEaQ,OAAO,GAAG;EAAA;EAAA,kBAAMO,MAAM,4CAAN,QAAQC,SAAS,CAACC,SAAS,CAACb,QAAQ,CAAC,KAAK,CAAC;AAAA;;;;"}
|
package/dist/index.d.ts
CHANGED
@@ -53,6 +53,7 @@ export * from './components/Layout/Layout';
|
|
53
53
|
export * from './components/Navigation2/Navigation2';
|
54
54
|
export * as CollectionPrimitive from './primitives/Collection/Collection';
|
55
55
|
export * from './utils/date';
|
56
|
+
export * from './utils/keyboard';
|
56
57
|
export * from './utils/mergeRefs';
|
57
58
|
export * from './hooks/useBoundaryOverflowDetection';
|
58
59
|
export * from './hooks/useBoundingClientRectListener';
|
@@ -1,9 +1,11 @@
|
|
1
1
|
import * as React from 'react';
|
2
|
+
import { KeyDownHandlerOptions } from '../utils/keyboard';
|
2
3
|
declare type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement | HTMLAnchorElement> & {
|
3
4
|
/** Content should be a text */
|
4
5
|
children: React.ReactNode;
|
5
6
|
/** Provides url for buttons being used as a link */
|
6
7
|
href?: string;
|
8
|
+
shortcut?: string | KeyDownHandlerOptions;
|
7
9
|
/** Provides target for buttons being used as a link */
|
8
10
|
target?: '_self' | '_blank' | '_parent' | '_top';
|
9
11
|
};
|
@@ -12,6 +14,7 @@ declare const Button: React.ForwardRefExoticComponent<React.ButtonHTMLAttributes
|
|
12
14
|
children: React.ReactNode;
|
13
15
|
/** Provides url for buttons being used as a link */
|
14
16
|
href?: string | undefined;
|
17
|
+
shortcut?: string | KeyDownHandlerOptions | undefined;
|
15
18
|
/** Provides target for buttons being used as a link */
|
16
19
|
target?: "_self" | "_blank" | "_parent" | "_top" | undefined;
|
17
20
|
} & React.RefAttributes<HTMLButtonElement | HTMLAnchorElement>>;
|