zkjson 0.6.0 → 1.0.2

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 (187) hide show
  1. package/README.md +537 -0
  2. package/assets/collection.png +0 -0
  3. package/assets/db.png +0 -0
  4. package/assets/encode.png +0 -0
  5. package/assets/query.png +0 -0
  6. package/assets/rollup.png +0 -0
  7. package/assets/structure.png +0 -0
  8. package/assets/weavedb.png +0 -0
  9. package/assets/zkjson.png +0 -0
  10. package/benchmark/components/ui/avatar.jsx +49 -0
  11. package/benchmark/components/ui/checkbox.jsx +17 -0
  12. package/benchmark/components/ui/close-button.jsx +20 -0
  13. package/benchmark/components/ui/color-mode.jsx +89 -0
  14. package/benchmark/components/ui/dialog.jsx +54 -0
  15. package/benchmark/components/ui/drawer.jsx +44 -0
  16. package/benchmark/components/ui/field.jsx +22 -0
  17. package/benchmark/components/ui/input-group.jsx +39 -0
  18. package/benchmark/components/ui/popover.jsx +49 -0
  19. package/benchmark/components/ui/provider.jsx +12 -0
  20. package/benchmark/components/ui/radio.jsx +17 -0
  21. package/benchmark/components/ui/slider.jsx +107 -0
  22. package/benchmark/components/ui/tooltip.jsx +35 -0
  23. package/benchmark/jsconfig.json +7 -0
  24. package/benchmark/lib/cbor.js +387 -0
  25. package/benchmark/lib/msgpack.js +651 -0
  26. package/benchmark/next.config.mjs +6 -0
  27. package/benchmark/package.json +22 -0
  28. package/benchmark/pages/_app.js +9 -0
  29. package/benchmark/pages/_document.js +13 -0
  30. package/benchmark/pages/api/hello.js +5 -0
  31. package/benchmark/pages/index.js +438 -0
  32. package/benchmark/public/favicon.ico +0 -0
  33. package/benchmark/public/file.svg +1 -0
  34. package/benchmark/public/globe.svg +1 -0
  35. package/benchmark/public/next.svg +1 -0
  36. package/benchmark/public/vercel.svg +1 -0
  37. package/benchmark/public/window.svg +1 -0
  38. package/benchmark/yarn.lock +2448 -0
  39. package/circom/collection/collection.circom +32 -0
  40. package/circom/collection/compile.sh +10 -0
  41. package/circom/collection/gen.js +34 -0
  42. package/circom/collection/generateInput.js +10 -0
  43. package/circom/collection/index.circom +4 -0
  44. package/circom/collection/test.js +21 -0
  45. package/circom/collection/verifier.sol +247 -0
  46. package/circom/db/compile.sh +10 -0
  47. package/circom/db/db.circom +39 -0
  48. package/circom/db/gen.js +30 -0
  49. package/circom/db/generateInput.js +10 -0
  50. package/circom/db/index.circom +4 -0
  51. package/circom/db/test.js +21 -0
  52. package/circom/db/verifier.sol +261 -0
  53. package/circom/ipfs/calculate_total.circom +17 -0
  54. package/circom/ipfs/compile.sh +10 -0
  55. package/circom/ipfs/gen.js +18 -0
  56. package/circom/ipfs/generateInput.js +10 -0
  57. package/circom/ipfs/index.circom +4 -0
  58. package/circom/ipfs/ipfs.circom +62 -0
  59. package/circom/ipfs/parse.circom +289 -0
  60. package/circom/ipfs/sha256.circom +99 -0
  61. package/circom/ipfs/test.js +167 -0
  62. package/circom/ipfs/verifier.sol +261 -0
  63. package/circom/json/compile.sh +10 -0
  64. package/circom/json/gen.js +22 -0
  65. package/circom/json/gen2.js +21 -0
  66. package/circom/json/generateInput.js +20 -0
  67. package/circom/json/index.circom +4 -0
  68. package/circom/json/json.circom +81 -0
  69. package/circom/json/test.js +100 -0
  70. package/circom/json/verifier.sol +247 -0
  71. package/circom/query/compile.sh +10 -0
  72. package/circom/query/gen.js +28 -0
  73. package/circom/query/generateInput.js +11 -0
  74. package/circom/query/index.circom +4 -0
  75. package/circom/query/query.circom +58 -0
  76. package/circom/query/test.js +20 -0
  77. package/circom/query/verifier.sol +177 -0
  78. package/circom/rollup/compile.sh +10 -0
  79. package/circom/rollup/gen.js +36 -0
  80. package/circom/rollup/generateInput.js +11 -0
  81. package/circom/rollup/index.circom +4 -0
  82. package/circom/rollup/rollup.circom +43 -0
  83. package/circom/rollup/test.js +35 -0
  84. package/circom/rollup/verifier.sol +240 -0
  85. package/circom/scripts/ceremony.js +39 -0
  86. package/circom/scripts/ceremony.sh +6 -0
  87. package/circom/scripts/compile.js +113 -0
  88. package/circom/scripts/compile.sh +16 -0
  89. package/circom/utils/uint.circom +512 -0
  90. package/circom/utils/utils.circom +628 -0
  91. package/demos/arweave/jsconfig.json +7 -0
  92. package/demos/arweave/lib/ZKArweave.json +617 -0
  93. package/demos/arweave/lib/encoder.js +375 -0
  94. package/demos/arweave/next.config.js +6 -0
  95. package/demos/arweave/package.json +26 -0
  96. package/demos/arweave/pages/_app.js +9 -0
  97. package/demos/arweave/pages/_document.js +19 -0
  98. package/demos/arweave/pages/api/arweave.js +31 -0
  99. package/demos/arweave/pages/api/hello.js +5 -0
  100. package/demos/arweave/pages/index.js +869 -0
  101. package/demos/arweave/public/circuit.wasm +0 -0
  102. package/demos/arweave/public/circuit_final.zkey +0 -0
  103. package/demos/arweave/public/verification_key.json +149 -0
  104. package/demos/arweave/vercel.json +7 -0
  105. package/demos/arweave/yarn.lock +2510 -0
  106. package/demos/simple/jsconfig.json +7 -0
  107. package/demos/simple/lib/encoder.js +375 -0
  108. package/demos/simple/next.config.js +6 -0
  109. package/demos/simple/package.json +24 -0
  110. package/demos/simple/pages/_app.js +9 -0
  111. package/demos/simple/pages/_document.js +13 -0
  112. package/demos/simple/pages/api/hello.js +5 -0
  113. package/demos/simple/pages/index.js +342 -0
  114. package/demos/simple/public/circuit.wasm +0 -0
  115. package/demos/simple/public/circuit_final.zkey +0 -0
  116. package/demos/simple/public/verification_key.json +149 -0
  117. package/demos/simple/yarn.lock +2519 -0
  118. package/docs/README.md +17 -0
  119. package/docs/simple-zkjson.md +210 -0
  120. package/docs/solidity-contracts.md +216 -0
  121. package/docs/zk-circuits.md +125 -0
  122. package/docs/zkdb-rollup.md +218 -0
  123. package/docs/zkjson-sdk.md +254 -0
  124. package/docs/zkjson-v1_5.md +365 -0
  125. package/package.json +16 -7
  126. package/sdk/contracts/NORollup.sol +13 -0
  127. package/sdk/package.json +15 -0
  128. package/sdk/yarn.lock +881 -0
  129. package/solidity/README.md +13 -0
  130. package/solidity/arguments.js +4 -0
  131. package/solidity/contracts/NORollup.sol +13 -0
  132. package/solidity/contracts/OPRollup.sol +14 -0
  133. package/solidity/contracts/ZKIPFS.sol +95 -0
  134. package/solidity/contracts/ZKJson.sol +21 -0
  135. package/solidity/contracts/ZKQuery.sol +286 -0
  136. package/solidity/contracts/ZKRollup.sol +35 -0
  137. package/solidity/contracts/apps/NORU.sol +66 -0
  138. package/solidity/contracts/apps/SimpleJSON.sol +64 -0
  139. package/solidity/contracts/apps/SimpleOPRU.sol +67 -0
  140. package/solidity/contracts/apps/SimpleRU.sol +67 -0
  141. package/solidity/contracts/apps/Token.sol +12 -0
  142. package/solidity/contracts/apps/ZKArweave.sol +89 -0
  143. package/solidity/contracts/apps/ZKBridge.sol +74 -0
  144. package/solidity/contracts/apps/ZKNFT.sol +63 -0
  145. package/solidity/contracts/verifiers/verifier_db.sol +275 -0
  146. package/solidity/contracts/verifiers/verifier_ipfs.sol +464 -0
  147. package/solidity/contracts/verifiers/verifier_json.sol +261 -0
  148. package/solidity/contracts/verifiers/verifier_rollup.sol +240 -0
  149. package/solidity/package.json +27 -0
  150. package/solidity/scripts/deploy.js +33 -0
  151. package/solidity/test/NORU.js +66 -0
  152. package/solidity/test/ZKArweave.js +97 -0
  153. package/solidity/test/arweave.js +55 -0
  154. package/solidity/test/bridge.js +71 -0
  155. package/solidity/test/simple.js +76 -0
  156. package/solidity/test/simpleOPRU.js +98 -0
  157. package/solidity/test/simpleRU.js +94 -0
  158. package/solidity/test/zknft.js +98 -0
  159. package/solidity/yarn.lock +4152 -0
  160. package/test/test.js +304 -0
  161. /package/{circomlibjs.js → sdk/circomlibjs.js} +0 -0
  162. /package/{collection.js → sdk/collection.js} +0 -0
  163. /package/{contracts → sdk/contracts}/OPRollup.sol +0 -0
  164. /package/{contracts → sdk/contracts}/ZKIPFS.sol +0 -0
  165. /package/{contracts → sdk/contracts}/ZKJson.sol +0 -0
  166. /package/{contracts → sdk/contracts}/ZKQuery.sol +0 -0
  167. /package/{contracts → sdk/contracts}/ZKRollup.sol +0 -0
  168. /package/{contracts → sdk/contracts}/apps/SimpleJSON.sol +0 -0
  169. /package/{contracts → sdk/contracts}/apps/SimpleOPRU.sol +0 -0
  170. /package/{contracts → sdk/contracts}/apps/SimpleRU.sol +0 -0
  171. /package/{contracts → sdk/contracts}/apps/Token.sol +0 -0
  172. /package/{contracts → sdk/contracts}/apps/ZKArweave.sol +0 -0
  173. /package/{contracts → sdk/contracts}/apps/ZKBridge.sol +0 -0
  174. /package/{contracts → sdk/contracts}/apps/ZKNFT.sol +0 -0
  175. /package/{contracts → sdk/contracts}/verifiers/verifier_db.sol +0 -0
  176. /package/{contracts → sdk/contracts}/verifiers/verifier_ipfs.sol +0 -0
  177. /package/{contracts → sdk/contracts}/verifiers/verifier_json.sol +0 -0
  178. /package/{contracts → sdk/contracts}/verifiers/verifier_rollup.sol +0 -0
  179. /package/{db.js → sdk/db.js} +0 -0
  180. /package/{doc.js → sdk/doc.js} +0 -0
  181. /package/{encoder-v1_5.js → sdk/encoder-v1_5.js} +0 -0
  182. /package/{encoder.js → sdk/encoder.js} +0 -0
  183. /package/{index.js → sdk/index.js} +0 -0
  184. /package/{json.js → sdk/json.js} +0 -0
  185. /package/{nft.js → sdk/nft.js} +0 -0
  186. /package/{parse.js → sdk/parse.js} +0 -0
  187. /package/{uint.js → sdk/uint.js} +0 -0
@@ -0,0 +1,89 @@
1
+ 'use client'
2
+
3
+ import { ClientOnly, IconButton, Skeleton, Span } from '@chakra-ui/react'
4
+ import { ThemeProvider, useTheme } from 'next-themes'
5
+
6
+ import * as React from 'react'
7
+ import { LuMoon, LuSun } from 'react-icons/lu'
8
+
9
+ export function ColorModeProvider(props) {
10
+ return (
11
+ <ThemeProvider attribute='class' disableTransitionOnChange {...props} />
12
+ )
13
+ }
14
+
15
+ export function useColorMode() {
16
+ const { resolvedTheme, setTheme } = useTheme()
17
+ const toggleColorMode = () => {
18
+ setTheme(resolvedTheme === 'dark' ? 'light' : 'dark')
19
+ }
20
+ return {
21
+ colorMode: resolvedTheme,
22
+ setColorMode: setTheme,
23
+ toggleColorMode,
24
+ }
25
+ }
26
+
27
+ export function useColorModeValue(light, dark) {
28
+ const { colorMode } = useColorMode()
29
+ return colorMode === 'dark' ? dark : light
30
+ }
31
+
32
+ export function ColorModeIcon() {
33
+ const { colorMode } = useColorMode()
34
+ return colorMode === 'dark' ? <LuMoon /> : <LuSun />
35
+ }
36
+
37
+ export const ColorModeButton = React.forwardRef(
38
+ function ColorModeButton(props, ref) {
39
+ const { toggleColorMode } = useColorMode()
40
+ return (
41
+ <ClientOnly fallback={<Skeleton boxSize='8' />}>
42
+ <IconButton
43
+ onClick={toggleColorMode}
44
+ variant='ghost'
45
+ aria-label='Toggle color mode'
46
+ size='sm'
47
+ ref={ref}
48
+ {...props}
49
+ css={{
50
+ _icon: {
51
+ width: '5',
52
+ height: '5',
53
+ },
54
+ }}
55
+ >
56
+ <ColorModeIcon />
57
+ </IconButton>
58
+ </ClientOnly>
59
+ )
60
+ },
61
+ )
62
+
63
+ export const LightMode = React.forwardRef(function LightMode(props, ref) {
64
+ return (
65
+ <Span
66
+ color='fg'
67
+ display='contents'
68
+ className='chakra-theme light'
69
+ colorPalette='gray'
70
+ colorScheme='light'
71
+ ref={ref}
72
+ {...props}
73
+ />
74
+ )
75
+ })
76
+
77
+ export const DarkMode = React.forwardRef(function DarkMode(props, ref) {
78
+ return (
79
+ <Span
80
+ color='fg'
81
+ display='contents'
82
+ className='chakra-theme dark'
83
+ colorPalette='gray'
84
+ colorScheme='dark'
85
+ ref={ref}
86
+ {...props}
87
+ />
88
+ )
89
+ })
@@ -0,0 +1,54 @@
1
+ import { Dialog as ChakraDialog, Portal } from '@chakra-ui/react'
2
+ import { CloseButton } from './close-button'
3
+ import * as React from 'react'
4
+
5
+ export const DialogContent = React.forwardRef(
6
+ function DialogContent(props, ref) {
7
+ const {
8
+ children,
9
+ portalled = true,
10
+ portalRef,
11
+ backdrop = true,
12
+ ...rest
13
+ } = props
14
+
15
+ return (
16
+ <Portal disabled={!portalled} container={portalRef}>
17
+ {backdrop && <ChakraDialog.Backdrop />}
18
+ <ChakraDialog.Positioner>
19
+ <ChakraDialog.Content ref={ref} {...rest} asChild={false}>
20
+ {children}
21
+ </ChakraDialog.Content>
22
+ </ChakraDialog.Positioner>
23
+ </Portal>
24
+ )
25
+ },
26
+ )
27
+
28
+ export const DialogCloseTrigger = React.forwardRef(
29
+ function DialogCloseTrigger(props, ref) {
30
+ return (
31
+ <ChakraDialog.CloseTrigger
32
+ position='absolute'
33
+ top='2'
34
+ insetEnd='2'
35
+ {...props}
36
+ asChild
37
+ >
38
+ <CloseButton size='sm' ref={ref}>
39
+ {props.children}
40
+ </CloseButton>
41
+ </ChakraDialog.CloseTrigger>
42
+ )
43
+ },
44
+ )
45
+
46
+ export const DialogRoot = ChakraDialog.Root
47
+ export const DialogFooter = ChakraDialog.Footer
48
+ export const DialogHeader = ChakraDialog.Header
49
+ export const DialogBody = ChakraDialog.Body
50
+ export const DialogBackdrop = ChakraDialog.Backdrop
51
+ export const DialogTitle = ChakraDialog.Title
52
+ export const DialogDescription = ChakraDialog.Description
53
+ export const DialogTrigger = ChakraDialog.Trigger
54
+ export const DialogActionTrigger = ChakraDialog.ActionTrigger
@@ -0,0 +1,44 @@
1
+ import { Drawer as ChakraDrawer, Portal } from '@chakra-ui/react'
2
+ import { CloseButton } from './close-button'
3
+ import * as React from 'react'
4
+
5
+ export const DrawerContent = React.forwardRef(
6
+ function DrawerContent(props, ref) {
7
+ const { children, portalled = true, portalRef, offset, ...rest } = props
8
+ return (
9
+ <Portal disabled={!portalled} container={portalRef}>
10
+ <ChakraDrawer.Positioner padding={offset}>
11
+ <ChakraDrawer.Content ref={ref} {...rest} asChild={false}>
12
+ {children}
13
+ </ChakraDrawer.Content>
14
+ </ChakraDrawer.Positioner>
15
+ </Portal>
16
+ )
17
+ },
18
+ )
19
+
20
+ export const DrawerCloseTrigger = React.forwardRef(
21
+ function DrawerCloseTrigger(props, ref) {
22
+ return (
23
+ <ChakraDrawer.CloseTrigger
24
+ position='absolute'
25
+ top='2'
26
+ insetEnd='2'
27
+ {...props}
28
+ asChild
29
+ >
30
+ <CloseButton size='sm' ref={ref} />
31
+ </ChakraDrawer.CloseTrigger>
32
+ )
33
+ },
34
+ )
35
+
36
+ export const DrawerTrigger = ChakraDrawer.Trigger
37
+ export const DrawerRoot = ChakraDrawer.Root
38
+ export const DrawerFooter = ChakraDrawer.Footer
39
+ export const DrawerHeader = ChakraDrawer.Header
40
+ export const DrawerBody = ChakraDrawer.Body
41
+ export const DrawerBackdrop = ChakraDrawer.Backdrop
42
+ export const DrawerDescription = ChakraDrawer.Description
43
+ export const DrawerTitle = ChakraDrawer.Title
44
+ export const DrawerActionTrigger = ChakraDrawer.ActionTrigger
@@ -0,0 +1,22 @@
1
+ import { Field as ChakraField } from '@chakra-ui/react'
2
+ import * as React from 'react'
3
+
4
+ export const Field = React.forwardRef(function Field(props, ref) {
5
+ const { label, children, helperText, errorText, optionalText, ...rest } =
6
+ props
7
+ return (
8
+ <ChakraField.Root ref={ref} {...rest}>
9
+ {label && (
10
+ <ChakraField.Label>
11
+ {label}
12
+ <ChakraField.RequiredIndicator fallback={optionalText} />
13
+ </ChakraField.Label>
14
+ )}
15
+ {children}
16
+ {helperText && (
17
+ <ChakraField.HelperText>{helperText}</ChakraField.HelperText>
18
+ )}
19
+ {errorText && <ChakraField.ErrorText>{errorText}</ChakraField.ErrorText>}
20
+ </ChakraField.Root>
21
+ )
22
+ })
@@ -0,0 +1,39 @@
1
+ import { Group, InputElement } from '@chakra-ui/react'
2
+ import * as React from 'react'
3
+
4
+ export const InputGroup = React.forwardRef(function InputGroup(props, ref) {
5
+ const {
6
+ startElement,
7
+ startElementProps,
8
+ endElement,
9
+ endElementProps,
10
+ children,
11
+ startOffset = '6px',
12
+ endOffset = '6px',
13
+ ...rest
14
+ } = props
15
+
16
+ const child = React.Children.only(children)
17
+
18
+ return (
19
+ <Group ref={ref} {...rest}>
20
+ {startElement && (
21
+ <InputElement pointerEvents='none' {...startElementProps}>
22
+ {startElement}
23
+ </InputElement>
24
+ )}
25
+ {React.cloneElement(child, {
26
+ ...(startElement && {
27
+ ps: `calc(var(--input-height) - ${startOffset})`,
28
+ }),
29
+ ...(endElement && { pe: `calc(var(--input-height) - ${endOffset})` }),
30
+ ...children.props,
31
+ })}
32
+ {endElement && (
33
+ <InputElement placement='end' {...endElementProps}>
34
+ {endElement}
35
+ </InputElement>
36
+ )}
37
+ </Group>
38
+ )
39
+ })
@@ -0,0 +1,49 @@
1
+ import { Popover as ChakraPopover, Portal } from '@chakra-ui/react'
2
+ import { CloseButton } from './close-button'
3
+ import * as React from 'react'
4
+
5
+ export const PopoverContent = React.forwardRef(
6
+ function PopoverContent(props, ref) {
7
+ const { portalled = true, portalRef, ...rest } = props
8
+ return (
9
+ <Portal disabled={!portalled} container={portalRef}>
10
+ <ChakraPopover.Positioner>
11
+ <ChakraPopover.Content ref={ref} {...rest} />
12
+ </ChakraPopover.Positioner>
13
+ </Portal>
14
+ )
15
+ },
16
+ )
17
+
18
+ export const PopoverArrow = React.forwardRef(function PopoverArrow(props, ref) {
19
+ return (
20
+ <ChakraPopover.Arrow {...props} ref={ref}>
21
+ <ChakraPopover.ArrowTip />
22
+ </ChakraPopover.Arrow>
23
+ )
24
+ })
25
+
26
+ export const PopoverCloseTrigger = React.forwardRef(
27
+ function PopoverCloseTrigger(props, ref) {
28
+ return (
29
+ <ChakraPopover.CloseTrigger
30
+ position='absolute'
31
+ top='1'
32
+ insetEnd='1'
33
+ {...props}
34
+ asChild
35
+ ref={ref}
36
+ >
37
+ <CloseButton size='sm' />
38
+ </ChakraPopover.CloseTrigger>
39
+ )
40
+ },
41
+ )
42
+
43
+ export const PopoverTitle = ChakraPopover.Title
44
+ export const PopoverDescription = ChakraPopover.Description
45
+ export const PopoverFooter = ChakraPopover.Footer
46
+ export const PopoverHeader = ChakraPopover.Header
47
+ export const PopoverRoot = ChakraPopover.Root
48
+ export const PopoverBody = ChakraPopover.Body
49
+ export const PopoverTrigger = ChakraPopover.Trigger
@@ -0,0 +1,12 @@
1
+ 'use client'
2
+
3
+ import { ChakraProvider, defaultSystem } from '@chakra-ui/react'
4
+ import { ColorModeProvider } from './color-mode'
5
+
6
+ export function Provider(props) {
7
+ return (
8
+ <ChakraProvider value={defaultSystem}>
9
+ <ColorModeProvider {...props} />
10
+ </ChakraProvider>
11
+ )
12
+ }
@@ -0,0 +1,17 @@
1
+ import { RadioGroup as ChakraRadioGroup } from '@chakra-ui/react'
2
+ import * as React from 'react'
3
+
4
+ export const Radio = React.forwardRef(function Radio(props, ref) {
5
+ const { children, inputProps, rootRef, ...rest } = props
6
+ return (
7
+ <ChakraRadioGroup.Item ref={rootRef} {...rest}>
8
+ <ChakraRadioGroup.ItemHiddenInput ref={ref} {...inputProps} />
9
+ <ChakraRadioGroup.ItemIndicator />
10
+ {children && (
11
+ <ChakraRadioGroup.ItemText>{children}</ChakraRadioGroup.ItemText>
12
+ )}
13
+ </ChakraRadioGroup.Item>
14
+ )
15
+ })
16
+
17
+ export const RadioGroup = ChakraRadioGroup.Root
@@ -0,0 +1,107 @@
1
+ function _nullishCoalesce(lhs, rhsFn) {
2
+ if (lhs != null) {
3
+ return lhs
4
+ } else {
5
+ return rhsFn()
6
+ }
7
+ }
8
+ function _optionalChain(ops) {
9
+ let lastAccessLHS = undefined
10
+ let value = ops[0]
11
+ let i = 1
12
+ while (i < ops.length) {
13
+ const op = ops[i]
14
+ const fn = ops[i + 1]
15
+ i += 2
16
+ if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {
17
+ return undefined
18
+ }
19
+ if (op === 'access' || op === 'optionalAccess') {
20
+ lastAccessLHS = value
21
+ value = fn(value)
22
+ } else if (op === 'call' || op === 'optionalCall') {
23
+ value = fn((...args) => value.call(lastAccessLHS, ...args))
24
+ lastAccessLHS = undefined
25
+ }
26
+ }
27
+ return value
28
+ }
29
+ import { Slider as ChakraSlider, For, HStack } from '@chakra-ui/react'
30
+ import * as React from 'react'
31
+
32
+ export const Slider = React.forwardRef(function Slider(props, ref) {
33
+ const { marks: marksProp, label, showValue, ...rest } = props
34
+ const value = _nullishCoalesce(props.defaultValue, () => props.value)
35
+
36
+ const marks = _optionalChain([
37
+ marksProp,
38
+ 'optionalAccess',
39
+ (_2) => _2.map,
40
+ 'call',
41
+ (_3) =>
42
+ _3((mark) => {
43
+ if (typeof mark === 'number') return { value: mark, label: undefined }
44
+ return mark
45
+ }),
46
+ ])
47
+
48
+ const hasMarkLabel = !!_optionalChain([
49
+ marks,
50
+ 'optionalAccess',
51
+ (_4) => _4.some,
52
+ 'call',
53
+ (_5) => _5((mark) => mark.label),
54
+ ])
55
+
56
+ return (
57
+ <ChakraSlider.Root ref={ref} thumbAlignment='center' {...rest}>
58
+ {label && !showValue && <ChakraSlider.Label>{label}</ChakraSlider.Label>}
59
+ {label && showValue && (
60
+ <HStack justify='space-between'>
61
+ <ChakraSlider.Label>{label}</ChakraSlider.Label>
62
+ <ChakraSlider.ValueText />
63
+ </HStack>
64
+ )}
65
+ <ChakraSlider.Control data-has-mark-label={hasMarkLabel || undefined}>
66
+ <ChakraSlider.Track>
67
+ <ChakraSlider.Range />
68
+ </ChakraSlider.Track>
69
+ <SliderThumbs value={value} />
70
+ <SliderMarks marks={marks} />
71
+ </ChakraSlider.Control>
72
+ </ChakraSlider.Root>
73
+ )
74
+ })
75
+
76
+ function SliderThumbs(props) {
77
+ const { value } = props
78
+ return (
79
+ <For each={value}>
80
+ {(_, index) => (
81
+ <ChakraSlider.Thumb key={index} index={index}>
82
+ <ChakraSlider.HiddenInput />
83
+ </ChakraSlider.Thumb>
84
+ )}
85
+ </For>
86
+ )
87
+ }
88
+
89
+ const SliderMarks = React.forwardRef(function SliderMarks(props, ref) {
90
+ const { marks } = props
91
+ if (!_optionalChain([marks, 'optionalAccess', (_6) => _6.length])) return null
92
+
93
+ return (
94
+ <ChakraSlider.MarkerGroup ref={ref}>
95
+ {marks.map((mark, index) => {
96
+ const value = typeof mark === 'number' ? mark : mark.value
97
+ const label = typeof mark === 'number' ? undefined : mark.label
98
+ return (
99
+ <ChakraSlider.Marker key={index} value={value}>
100
+ <ChakraSlider.MarkerIndicator />
101
+ {label}
102
+ </ChakraSlider.Marker>
103
+ )
104
+ })}
105
+ </ChakraSlider.MarkerGroup>
106
+ )
107
+ })
@@ -0,0 +1,35 @@
1
+ import { Tooltip as ChakraTooltip, Portal } from '@chakra-ui/react'
2
+ import * as React from 'react'
3
+
4
+ export const Tooltip = React.forwardRef(function Tooltip(props, ref) {
5
+ const {
6
+ showArrow,
7
+ children,
8
+ disabled,
9
+ portalled = true,
10
+ content,
11
+ contentProps,
12
+ portalRef,
13
+ ...rest
14
+ } = props
15
+
16
+ if (disabled) return children
17
+
18
+ return (
19
+ <ChakraTooltip.Root {...rest}>
20
+ <ChakraTooltip.Trigger asChild>{children}</ChakraTooltip.Trigger>
21
+ <Portal disabled={!portalled} container={portalRef}>
22
+ <ChakraTooltip.Positioner>
23
+ <ChakraTooltip.Content ref={ref} {...contentProps}>
24
+ {showArrow && (
25
+ <ChakraTooltip.Arrow>
26
+ <ChakraTooltip.ArrowTip />
27
+ </ChakraTooltip.Arrow>
28
+ )}
29
+ {content}
30
+ </ChakraTooltip.Content>
31
+ </ChakraTooltip.Positioner>
32
+ </Portal>
33
+ </ChakraTooltip.Root>
34
+ )
35
+ })
@@ -0,0 +1,7 @@
1
+ {
2
+ "compilerOptions": {
3
+ "paths": {
4
+ "@/*": ["./*"]
5
+ }
6
+ }
7
+ }