@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.
Files changed (70) hide show
  1. package/dist/components/Button/Button.d.ts +1 -0
  2. package/dist/components/Header/components/Button.d.ts +1 -1
  3. package/dist/components/IconButton/IconButton.d.ts +2 -2
  4. package/dist/components/Menu/components/Item.d.ts +0 -1
  5. package/dist/components/Shortcut/Shortcut.d.ts +2 -1
  6. package/dist/components/Table2/Table2.d.ts +1 -1
  7. package/dist/components/Table2/hooks/listeners/useFilterStateListener.d.ts +3 -0
  8. package/dist/components/Table2/hooks/useColumnDefinitions.d.ts +3 -2
  9. package/dist/components/Table2/types.d.ts +3 -10
  10. package/dist/components/Table2/utilities/columns.d.ts +1 -1
  11. package/dist/esm/packages/taco/src/components/Button/Button.js +2 -1
  12. package/dist/esm/packages/taco/src/components/Button/Button.js.map +1 -1
  13. package/dist/esm/packages/taco/src/components/Combobox/useCombobox.js +1 -1
  14. package/dist/esm/packages/taco/src/components/Datepicker/useDatepicker.js +1 -1
  15. package/dist/esm/packages/taco/src/components/Dialog/components/Content.js +1 -1
  16. package/dist/esm/packages/taco/src/components/Drawer/components/Content.js +3 -7
  17. package/dist/esm/packages/taco/src/components/Drawer/components/Content.js.map +1 -1
  18. package/dist/esm/packages/taco/src/components/Header/components/PrimaryNavigation.js +1 -1
  19. package/dist/esm/packages/taco/src/components/Input/Input.js +1 -1
  20. package/dist/esm/packages/taco/src/components/Listbox/ScrollableList.js +1 -1
  21. package/dist/esm/packages/taco/src/components/Listbox/useListbox.js +1 -1
  22. package/dist/esm/packages/taco/src/components/Listbox/useMultiListbox.js +1 -1
  23. package/dist/esm/packages/taco/src/components/Menu/components/Item.js +9 -8
  24. package/dist/esm/packages/taco/src/components/Menu/components/Item.js.map +1 -1
  25. package/dist/esm/packages/taco/src/components/OverflowGroup/OverflowGroup.js +1 -1
  26. package/dist/esm/packages/taco/src/components/SearchInput/SearchInput.js +1 -1
  27. package/dist/esm/packages/taco/src/components/Select/useSelect.js +1 -1
  28. package/dist/esm/packages/taco/src/components/Select2/Select2.js +1 -1
  29. package/dist/esm/packages/taco/src/components/Select2/components/Trigger.js +1 -1
  30. package/dist/esm/packages/taco/src/components/Shortcut/Shortcut.js +32 -2
  31. package/dist/esm/packages/taco/src/components/Shortcut/Shortcut.js.map +1 -1
  32. package/dist/esm/packages/taco/src/components/Table/components/WindowedTable.js +1 -1
  33. package/dist/esm/packages/taco/src/components/Table2/Table2.js +3 -6
  34. package/dist/esm/packages/taco/src/components/Table2/Table2.js.map +1 -1
  35. package/dist/esm/packages/taco/src/components/Table2/components/EditModeButton.js +13 -9
  36. package/dist/esm/packages/taco/src/components/Table2/components/EditModeButton.js.map +1 -1
  37. package/dist/esm/packages/taco/src/components/Table2/components/Search.js +10 -8
  38. package/dist/esm/packages/taco/src/components/Table2/components/Search.js.map +1 -1
  39. package/dist/esm/packages/taco/src/components/Table2/components/filters/FiltersButton.js +14 -8
  40. package/dist/esm/packages/taco/src/components/Table2/components/filters/FiltersButton.js.map +1 -1
  41. package/dist/esm/packages/taco/src/components/Table2/hooks/listeners/useFilterStateListener.js +12 -0
  42. package/dist/esm/packages/taco/src/components/Table2/hooks/listeners/useFilterStateListener.js.map +1 -0
  43. package/dist/esm/packages/taco/src/components/Table2/hooks/useColumnDefinitions.js +1 -1
  44. package/dist/esm/packages/taco/src/components/Table2/hooks/useColumnDefinitions.js.map +1 -1
  45. package/dist/esm/packages/taco/src/components/Table2/hooks/useTable.js +5 -0
  46. package/dist/esm/packages/taco/src/components/Table2/hooks/useTable.js.map +1 -1
  47. package/dist/esm/packages/taco/src/components/Table2/types.js.map +1 -1
  48. package/dist/esm/packages/taco/src/components/Table2/utilities/columns.js +36 -49
  49. package/dist/esm/packages/taco/src/components/Table2/utilities/columns.js.map +1 -1
  50. package/dist/esm/packages/taco/src/hooks/useGlobalKeyDown.js +15 -0
  51. package/dist/esm/packages/taco/src/hooks/useGlobalKeyDown.js.map +1 -0
  52. package/dist/esm/packages/taco/src/index.js +3 -2
  53. package/dist/esm/packages/taco/src/index.js.map +1 -1
  54. package/dist/esm/packages/taco/src/primitives/Button.js +21 -2
  55. package/dist/esm/packages/taco/src/primitives/Button.js.map +1 -1
  56. package/dist/esm/packages/taco/src/utils/keyboard.js +35 -0
  57. package/dist/esm/packages/taco/src/utils/keyboard.js.map +1 -0
  58. package/dist/hooks/useGlobalKeyDown.d.ts +2 -0
  59. package/dist/index.d.ts +1 -0
  60. package/dist/primitives/Button.d.ts +3 -0
  61. package/dist/taco.cjs.development.js +220 -133
  62. package/dist/taco.cjs.development.js.map +1 -1
  63. package/dist/taco.cjs.production.min.js +1 -1
  64. package/dist/taco.cjs.production.min.js.map +1 -1
  65. package/dist/utils/keyboard.d.ts +8 -0
  66. package/package.json +2 -2
  67. package/types.json +20 -118
  68. package/dist/esm/packages/taco/src/hooks/useGlobalKeyboardShortcut.js +0 -13
  69. package/dist/esm/packages/taco/src/hooks/useGlobalKeyboardShortcut.js.map +0 -1
  70. 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: 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={ref 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","target","type","otherProps","Tag","href","undefined","count","children","map","child"],"mappings":";;MAWMA,MAAM,gBAAGC,UAAgB,CAAC,SAASD,MAAM,CAACE,KAAkB,EAAEC,GAAqD;EACrH,MAAM;IAAEC,QAAQ;IAAEC,MAAM;IAAEC,IAAI,GAAG,QAAQ;IAAE,GAAGC;GAAY,GAAGL,KAAK;EAElE,MAAMM,GAAG,GAAGN,KAAK,CAACO,IAAI,GAAG,GAAG,GAAG,QAAQ;EAEvC,oBACIR,cAACO,GAAG,oBACID,UAAU;qBACCH,QAAQ,GAAG,MAAM,GAAGM,SAAS;IAC5CN,QAAQ,EAAEA,QAAQ;IAClBC,MAAM,EAAEG,GAAG,KAAK,GAAG,GAAGH,MAAM,GAAGK,SAAS;IACxCJ,IAAI,EAAEE,GAAG,KAAK,GAAG,GAAGF,IAAI,GAAGI,SAAS;IACpCP,GAAG,EAAEA;MACJF,QAAc,CAACU,KAAK,CAACT,KAAK,CAACU,QAAQ,CAAC,GAAG,CAAC,GACnCX,QAAc,CAACY,GAAG,CAACX,KAAK,CAACU,QAAQ,EAAEE,KAAK,IAAK,OAAOA,KAAK,KAAK,QAAQ,gBAAGb,4BAAOa,KAAK,CAAQ,GAAGA,KAAM,CAAC,GACvGZ,KAAK,CAACU,QAAQ,CAClB;AAEd,CAAC;;;;"}
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;;;;"}
@@ -0,0 +1,2 @@
1
+ import { KeyDownHandlerOptions } from '../utils/keyboard';
2
+ export declare const useGlobalKeyDown: (key: string | KeyDownHandlerOptions, handler: (event: KeyboardEvent) => void) => void;
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>>;