@tamagui/select 1.0.1-beta.21 → 1.0.1-beta.210

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 (114) hide show
  1. package/dist/cjs/BubbleSelect.js +43 -0
  2. package/dist/cjs/BubbleSelect.js.map +7 -0
  3. package/dist/cjs/Select.js +412 -390
  4. package/dist/cjs/Select.js.map +3 -3
  5. package/dist/cjs/SelectContent.js +72 -0
  6. package/dist/cjs/SelectContent.js.map +7 -0
  7. package/dist/cjs/SelectContent.native.js +31 -0
  8. package/dist/cjs/SelectContent.native.js.map +7 -0
  9. package/dist/cjs/SelectImpl.js +286 -0
  10. package/dist/cjs/SelectImpl.js.map +7 -0
  11. package/dist/cjs/SelectScrollButton.js +157 -0
  12. package/dist/cjs/SelectScrollButton.js.map +7 -0
  13. package/dist/cjs/SelectScrollButton.native.js +32 -0
  14. package/dist/cjs/SelectScrollButton.native.js.map +7 -0
  15. package/dist/cjs/SelectViewport.js +126 -0
  16. package/dist/cjs/SelectViewport.js.map +7 -0
  17. package/dist/cjs/SelectViewport.native.js +41 -0
  18. package/dist/cjs/SelectViewport.native.js.map +7 -0
  19. package/dist/cjs/constants.js +47 -0
  20. package/dist/cjs/constants.js.map +7 -0
  21. package/dist/cjs/context.js +49 -0
  22. package/dist/cjs/context.js.map +7 -0
  23. package/dist/cjs/index.js +2 -0
  24. package/dist/cjs/index.js.map +2 -2
  25. package/dist/cjs/types.js +17 -0
  26. package/dist/cjs/types.js.map +7 -0
  27. package/dist/cjs/useSelectBreakpointActive.js +39 -0
  28. package/dist/cjs/useSelectBreakpointActive.js.map +7 -0
  29. package/dist/esm/BubbleSelect.js +24 -0
  30. package/dist/esm/BubbleSelect.js.map +7 -0
  31. package/dist/esm/Select.js +403 -358
  32. package/dist/esm/Select.js.map +3 -3
  33. package/dist/esm/SelectContent.js +48 -0
  34. package/dist/esm/SelectContent.js.map +7 -0
  35. package/dist/esm/SelectContent.native.js +7 -0
  36. package/dist/esm/SelectContent.native.js.map +7 -0
  37. package/dist/esm/SelectImpl.js +271 -0
  38. package/dist/esm/SelectImpl.js.map +7 -0
  39. package/dist/esm/SelectScrollButton.js +126 -0
  40. package/dist/esm/SelectScrollButton.js.map +7 -0
  41. package/dist/esm/SelectScrollButton.native.js +7 -0
  42. package/dist/esm/SelectScrollButton.native.js.map +7 -0
  43. package/dist/esm/SelectViewport.js +95 -0
  44. package/dist/esm/SelectViewport.js.map +7 -0
  45. package/dist/esm/SelectViewport.native.js +17 -0
  46. package/dist/esm/SelectViewport.native.js.map +7 -0
  47. package/dist/esm/constants.js +17 -0
  48. package/dist/esm/constants.js.map +7 -0
  49. package/dist/esm/context.js +21 -0
  50. package/dist/esm/context.js.map +7 -0
  51. package/dist/esm/index.js +1 -0
  52. package/dist/esm/index.js.map +2 -2
  53. package/dist/esm/types.js +1 -0
  54. package/dist/esm/types.js.map +7 -0
  55. package/dist/esm/useSelectBreakpointActive.js +14 -0
  56. package/dist/esm/useSelectBreakpointActive.js.map +7 -0
  57. package/dist/jsx/BubbleSelect.js +24 -0
  58. package/dist/jsx/BubbleSelect.js.map +7 -0
  59. package/dist/jsx/Select.js +283 -271
  60. package/dist/jsx/Select.js.map +7 -0
  61. package/dist/jsx/SelectContent.js +27 -0
  62. package/dist/jsx/SelectContent.js.map +7 -0
  63. package/dist/jsx/SelectContent.native.js +7 -0
  64. package/dist/jsx/SelectContent.native.js.map +7 -0
  65. package/dist/jsx/SelectImpl.js +244 -0
  66. package/dist/jsx/SelectImpl.js.map +7 -0
  67. package/dist/jsx/SelectScrollButton.js +99 -0
  68. package/dist/jsx/SelectScrollButton.js.map +7 -0
  69. package/dist/jsx/SelectScrollButton.native.js +7 -0
  70. package/dist/jsx/SelectScrollButton.native.js.map +7 -0
  71. package/dist/jsx/SelectViewport.js +72 -0
  72. package/dist/jsx/SelectViewport.js.map +7 -0
  73. package/dist/jsx/SelectViewport.native.js +13 -0
  74. package/dist/jsx/SelectViewport.native.js.map +7 -0
  75. package/dist/jsx/constants.js +17 -0
  76. package/dist/jsx/constants.js.map +7 -0
  77. package/dist/jsx/context.js +15 -0
  78. package/dist/jsx/context.js.map +7 -0
  79. package/dist/jsx/index.js +2 -0
  80. package/dist/jsx/index.js.map +7 -0
  81. package/dist/jsx/types.js +1 -0
  82. package/dist/jsx/types.js.map +7 -0
  83. package/dist/jsx/useSelectBreakpointActive.js +14 -0
  84. package/dist/jsx/useSelectBreakpointActive.js.map +7 -0
  85. package/package.json +26 -16
  86. package/src/BubbleSelect.tsx +46 -0
  87. package/src/Select.tsx +618 -0
  88. package/src/SelectContent.native.tsx +5 -0
  89. package/src/SelectContent.tsx +45 -0
  90. package/src/SelectImpl.tsx +342 -0
  91. package/src/SelectScrollButton.native.tsx +7 -0
  92. package/src/SelectScrollButton.tsx +168 -0
  93. package/src/SelectViewport.native.tsx +14 -0
  94. package/src/SelectViewport.tsx +104 -0
  95. package/src/constants.tsx +7 -0
  96. package/src/context.tsx +19 -0
  97. package/src/index.tsx +8 -0
  98. package/src/types.tsx +94 -0
  99. package/src/useSelectBreakpointActive.tsx +15 -0
  100. package/types/BubbleSelect.d.ts +2 -0
  101. package/types/Select.d.ts +753 -0
  102. package/types/SelectContent.d.ts +5 -0
  103. package/types/SelectContent.native.d.ts +4 -0
  104. package/types/SelectImpl.d.ts +9 -0
  105. package/types/SelectScrollButton.d.ts +6 -0
  106. package/types/SelectScrollButton.native.d.ts +4 -0
  107. package/types/SelectViewport.d.ts +127 -0
  108. package/types/SelectViewport.native.d.ts +7 -0
  109. package/types/constants.d.ts +8 -0
  110. package/types/context.d.ts +21 -0
  111. package/types/index.d.ts +2 -0
  112. package/types/types.d.ts +84 -0
  113. package/types/useSelectBreakpointActive.d.ts +4 -0
  114. package/types/index.d.ts.map +0 -1
@@ -0,0 +1,13 @@
1
+ import { PortalItem } from "@tamagui/portal";
2
+ import { VIEWPORT_NAME } from "./constants";
3
+ import { useSelectContext } from "./context";
4
+ const SelectViewport = (props) => {
5
+ const { __scopeSelect, children } = props;
6
+ const context = useSelectContext(VIEWPORT_NAME, __scopeSelect);
7
+ return <PortalItem hostName={`${context.scopeKey}SheetContents`}>{children}</PortalItem>;
8
+ };
9
+ SelectViewport.displayName = VIEWPORT_NAME;
10
+ export {
11
+ SelectViewport
12
+ };
13
+ //# sourceMappingURL=SelectViewport.native.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/SelectViewport.native.tsx"],
4
+ "sourcesContent": ["import { PortalItem } from '@tamagui/portal'\nimport * as React from 'react'\n\nimport { VIEWPORT_NAME } from './constants'\nimport { useSelectContext } from './context'\nimport { ScopedProps, SelectViewportProps } from './types'\n\nexport const SelectViewport = (props: ScopedProps<SelectViewportProps>) => {\n const { __scopeSelect, children } = props\n const context = useSelectContext(VIEWPORT_NAME, __scopeSelect)\n return <PortalItem hostName={`${context.scopeKey}SheetContents`}>{children}</PortalItem>\n}\n\nSelectViewport.displayName = VIEWPORT_NAME\n"],
5
+ "mappings": "AAAA,SAAS,kBAAkB;AAG3B,SAAS,qBAAqB;AAC9B,SAAS,wBAAwB;AAG1B,MAAM,iBAAiB,CAAC,UAA4C;AACzE,QAAM,EAAE,eAAe,SAAS,IAAI;AACpC,QAAM,UAAU,iBAAiB,eAAe,aAAa;AAC7D,SAAO,CAAC,WAAW,UAAU,GAAG,QAAQ,0BAA0B,SAAS,EAAnE;AACV;AAEA,eAAe,cAAc;",
6
+ "names": []
7
+ }
@@ -0,0 +1,17 @@
1
+ const SELECT_NAME = "Select";
2
+ const WINDOW_PADDING = 8;
3
+ const SCROLL_ARROW_VELOCITY = 8;
4
+ const SCROLL_ARROW_THRESHOLD = 8;
5
+ const MIN_HEIGHT = 80;
6
+ const FALLBACK_THRESHOLD = 16;
7
+ const VIEWPORT_NAME = "SelectViewport";
8
+ export {
9
+ FALLBACK_THRESHOLD,
10
+ MIN_HEIGHT,
11
+ SCROLL_ARROW_THRESHOLD,
12
+ SCROLL_ARROW_VELOCITY,
13
+ SELECT_NAME,
14
+ VIEWPORT_NAME,
15
+ WINDOW_PADDING
16
+ };
17
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/constants.tsx"],
4
+ "sourcesContent": ["export const SELECT_NAME = 'Select'\nexport const WINDOW_PADDING = 8\nexport const SCROLL_ARROW_VELOCITY = 8\nexport const SCROLL_ARROW_THRESHOLD = 8\nexport const MIN_HEIGHT = 80\nexport const FALLBACK_THRESHOLD = 16\nexport const VIEWPORT_NAME = 'SelectViewport'\n"],
5
+ "mappings": "AAAO,MAAM,cAAc;AACpB,MAAM,iBAAiB;AACvB,MAAM,wBAAwB;AAC9B,MAAM,yBAAyB;AAC/B,MAAM,aAAa;AACnB,MAAM,qBAAqB;AAC3B,MAAM,gBAAgB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,15 @@
1
+ import { createContextScope } from "@tamagui/create-context";
2
+ import { SELECT_NAME } from "./constants";
3
+ const [createSelectContext, createSelectScope] = createContextScope(SELECT_NAME);
4
+ const [SelectProvider, useSelectContext] = createSelectContext(SELECT_NAME);
5
+ const ForwardSelectContext = (props) => {
6
+ return <SelectProvider isInSheet scope={props.__scopeSelect} {...props.context}>{props.children}</SelectProvider>;
7
+ };
8
+ export {
9
+ ForwardSelectContext,
10
+ SelectProvider,
11
+ createSelectContext,
12
+ createSelectScope,
13
+ useSelectContext
14
+ };
15
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/context.tsx"],
4
+ "sourcesContent": ["import { createContextScope } from '@tamagui/create-context'\n\nimport { SELECT_NAME } from './constants'\nimport { ScopedProps, SelectContextValue } from './types'\n\nexport const [createSelectContext, createSelectScope] = createContextScope(SELECT_NAME)\n\nexport const [SelectProvider, useSelectContext] =\n createSelectContext<SelectContextValue>(SELECT_NAME)\n\nexport const ForwardSelectContext = (\n props: ScopedProps<{ children?: any; context: SelectContextValue }>\n) => {\n return (\n <SelectProvider isInSheet scope={props.__scopeSelect} {...props.context}>\n {props.children}\n </SelectProvider>\n )\n}\n"],
5
+ "mappings": "AAAA,SAAS,0BAA0B;AAEnC,SAAS,mBAAmB;AAGrB,MAAM,CAAC,qBAAqB,iBAAiB,IAAI,mBAAmB,WAAW;AAE/E,MAAM,CAAC,gBAAgB,gBAAgB,IAC5C,oBAAwC,WAAW;AAE9C,MAAM,uBAAuB,CAClC,UACG;AACH,SACE,CAAC,eAAe,UAAU,OAAO,MAAM,mBAAmB,MAAM,UAC7D,MAAM,SACT,EAFC;AAIL;",
6
+ "names": []
7
+ }
package/dist/jsx/index.js CHANGED
@@ -1 +1,3 @@
1
1
  export * from "./Select";
2
+ export * from "./context";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.tsx"],
4
+ "sourcesContent": ["export * from './Select'\nexport type {\n SelectContentProps,\n SelectProps,\n SelectScrollButtonProps,\n SelectViewportProps,\n} from './types'\nexport * from './context'\n"],
5
+ "mappings": "AAAA,cAAc;AAOd,cAAc;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,14 @@
1
+ import { useMedia } from "@tamagui/core";
2
+ const useSelectBreakpointActive = (sheetBreakpoint) => {
3
+ const media = useMedia();
4
+ return sheetBreakpoint ? media[sheetBreakpoint] : false;
5
+ };
6
+ const useShowSelectSheet = (context) => {
7
+ const breakpointActive = useSelectBreakpointActive(context.sheetBreakpoint);
8
+ return context.open === false ? false : breakpointActive;
9
+ };
10
+ export {
11
+ useSelectBreakpointActive,
12
+ useShowSelectSheet
13
+ };
14
+ //# sourceMappingURL=useSelectBreakpointActive.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/useSelectBreakpointActive.tsx"],
4
+ "sourcesContent": ["import { useMedia } from '@tamagui/core'\n\nimport { SelectContextValue } from './types'\n\nexport const useSelectBreakpointActive = (\n sheetBreakpoint: SelectContextValue['sheetBreakpoint']\n) => {\n const media = useMedia()\n return sheetBreakpoint ? media[sheetBreakpoint] : false\n}\n\nexport const useShowSelectSheet = (context: SelectContextValue) => {\n const breakpointActive = useSelectBreakpointActive(context.sheetBreakpoint)\n return context.open === false ? false : breakpointActive\n}\n"],
5
+ "mappings": "AAAA,SAAS,gBAAgB;AAIlB,MAAM,4BAA4B,CACvC,oBACG;AACH,QAAM,QAAQ,SAAS;AACvB,SAAO,kBAAkB,MAAM,mBAAmB;AACpD;AAEO,MAAM,qBAAqB,CAAC,YAAgC;AACjE,QAAM,mBAAmB,0BAA0B,QAAQ,eAAe;AAC1E,SAAO,QAAQ,SAAS,QAAQ,QAAQ;AAC1C;",
6
+ "names": []
7
+ }
package/package.json CHANGED
@@ -1,13 +1,16 @@
1
1
  {
2
2
  "name": "@tamagui/select",
3
- "version": "1.0.1-beta.21",
4
- "sideEffects": true,
3
+ "version": "1.0.1-beta.210",
4
+ "sideEffects": [
5
+ "*.css"
6
+ ],
5
7
  "source": "src/index.ts",
6
- "typings": "types",
8
+ "types": "./types/index.d.ts",
7
9
  "main": "dist/cjs",
8
10
  "module": "dist/esm",
9
11
  "module:jsx": "dist/jsx",
10
12
  "files": [
13
+ "src",
11
14
  "types",
12
15
  "dist"
13
16
  ],
@@ -15,20 +18,27 @@
15
18
  "build": "tamagui-build",
16
19
  "watch": "tamagui-build --watch",
17
20
  "clean": "tamagui-build clean",
18
- "clean:build": "tamagui-build clean:build"
21
+ "clean:build": "tamagui-build clean:build",
22
+ "lint": "eslint",
23
+ "lint:fix": "yarn lint --fix"
19
24
  },
20
25
  "dependencies": {
21
- "@floating-ui/react-dom": "0.7.0",
22
- "@floating-ui/react-dom-interactions": "^0.4.0",
23
- "@floating-ui/react-native": "^0.7.0",
24
- "@radix-ui/react-use-callback-ref": "^0.1.0",
26
+ "@floating-ui/react-dom": "^1.0.0",
27
+ "@floating-ui/react-dom-interactions": "^0.8.1",
28
+ "@floating-ui/react-native": "^0.8.0",
25
29
  "@radix-ui/react-use-previous": "^0.1.1",
26
- "@tamagui/compose-refs": "^1.0.1-beta.21",
27
- "@tamagui/core": "^1.0.1-beta.21",
28
- "@tamagui/create-context": "^1.0.1-beta.21",
29
- "@tamagui/separator": "^1.0.1-beta.21",
30
- "@tamagui/stacks": "^1.0.1-beta.21",
31
- "@tamagui/use-controllable-state": "^1.0.1-beta.21"
30
+ "@tamagui/compose-refs": "^1.0.1-beta.210",
31
+ "@tamagui/core": "^1.0.1-beta.210",
32
+ "@tamagui/create-context": "^1.0.1-beta.210",
33
+ "@tamagui/dismissable": "^1.0.1-beta.210",
34
+ "@tamagui/focus-scope": "^1.0.1-beta.210",
35
+ "@tamagui/list-item": "^1.0.1-beta.210",
36
+ "@tamagui/portal": "^1.0.1-beta.210",
37
+ "@tamagui/separator": "^1.0.1-beta.210",
38
+ "@tamagui/stacks": "^1.0.1-beta.210",
39
+ "@tamagui/text": "^1.0.1-beta.210",
40
+ "@tamagui/use-controllable-state": "^1.0.1-beta.210",
41
+ "@tamagui/use-event": "^1.0.1-beta.210"
32
42
  },
33
43
  "peerDependencies": {
34
44
  "react": "*",
@@ -36,8 +46,8 @@
36
46
  "react-native": "*"
37
47
  },
38
48
  "devDependencies": {
39
- "@tamagui/build": "^1.0.1-beta.21",
40
- "@types/react-native": "^0.67.3",
49
+ "@tamagui/build": "^1.0.1-beta.210",
50
+ "@types/react-native": "^0.69.2",
41
51
  "react": "*",
42
52
  "react-dom": "*",
43
53
  "react-native": "*"
@@ -0,0 +1,46 @@
1
+ import { usePrevious } from '@radix-ui/react-use-previous'
2
+ import { useComposedRefs } from '@tamagui/compose-refs'
3
+ import * as React from 'react'
4
+
5
+ /* -----------------------------------------------------------------------------------------------*/
6
+ const BubbleSelect = React.forwardRef<HTMLSelectElement, React.ComponentPropsWithoutRef<'select'>>(
7
+ (props, forwardedRef) => {
8
+ const { value, ...selectProps } = props
9
+ const ref = React.useRef<HTMLSelectElement>(null)
10
+ const composedRefs = useComposedRefs(forwardedRef, ref)
11
+ const prevValue = usePrevious(value)
12
+
13
+ // Bubble value change to parents (e.g form change event)
14
+ React.useEffect(() => {
15
+ const select = ref.current!
16
+ const selectProto = window.HTMLSelectElement.prototype
17
+ const descriptor = Object.getOwnPropertyDescriptor(selectProto, 'value') as PropertyDescriptor
18
+ const setValue = descriptor.set
19
+ if (prevValue !== value && setValue) {
20
+ const event = new Event('change', { bubbles: true })
21
+ setValue.call(select, value)
22
+ select.dispatchEvent(event)
23
+ }
24
+ }, [prevValue, value])
25
+
26
+ /**
27
+ * We purposefully use a `select` here to support form autofill as much
28
+ * as possible.
29
+ *
30
+ * We purposefully do not add the `value` attribute here to allow the value
31
+ * to be set programatically and bubble to any parent form `onChange` event.
32
+ * Adding the `value` will cause React to consider the programatic
33
+ * dispatch a duplicate and it will get swallowed.
34
+ *
35
+ * We use `VisuallyHidden` rather than `display: "none"` because Safari autofill
36
+ * won't work otherwise.
37
+ */
38
+ // TODO
39
+ return null
40
+ // return (
41
+ // <VisuallyHidden asChild>
42
+ // <select {...selectProps} ref={composedRefs} defaultValue={value} />
43
+ // </VisuallyHidden>
44
+ // )
45
+ }
46
+ )