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.
- package/README.md +537 -0
- package/assets/collection.png +0 -0
- package/assets/db.png +0 -0
- package/assets/encode.png +0 -0
- package/assets/query.png +0 -0
- package/assets/rollup.png +0 -0
- package/assets/structure.png +0 -0
- package/assets/weavedb.png +0 -0
- package/assets/zkjson.png +0 -0
- package/benchmark/components/ui/avatar.jsx +49 -0
- package/benchmark/components/ui/checkbox.jsx +17 -0
- package/benchmark/components/ui/close-button.jsx +20 -0
- package/benchmark/components/ui/color-mode.jsx +89 -0
- package/benchmark/components/ui/dialog.jsx +54 -0
- package/benchmark/components/ui/drawer.jsx +44 -0
- package/benchmark/components/ui/field.jsx +22 -0
- package/benchmark/components/ui/input-group.jsx +39 -0
- package/benchmark/components/ui/popover.jsx +49 -0
- package/benchmark/components/ui/provider.jsx +12 -0
- package/benchmark/components/ui/radio.jsx +17 -0
- package/benchmark/components/ui/slider.jsx +107 -0
- package/benchmark/components/ui/tooltip.jsx +35 -0
- package/benchmark/jsconfig.json +7 -0
- package/benchmark/lib/cbor.js +387 -0
- package/benchmark/lib/msgpack.js +651 -0
- package/benchmark/next.config.mjs +6 -0
- package/benchmark/package.json +22 -0
- package/benchmark/pages/_app.js +9 -0
- package/benchmark/pages/_document.js +13 -0
- package/benchmark/pages/api/hello.js +5 -0
- package/benchmark/pages/index.js +438 -0
- package/benchmark/public/favicon.ico +0 -0
- package/benchmark/public/file.svg +1 -0
- package/benchmark/public/globe.svg +1 -0
- package/benchmark/public/next.svg +1 -0
- package/benchmark/public/vercel.svg +1 -0
- package/benchmark/public/window.svg +1 -0
- package/benchmark/yarn.lock +2448 -0
- package/circom/collection/collection.circom +32 -0
- package/circom/collection/compile.sh +10 -0
- package/circom/collection/gen.js +34 -0
- package/circom/collection/generateInput.js +10 -0
- package/circom/collection/index.circom +4 -0
- package/circom/collection/test.js +21 -0
- package/circom/collection/verifier.sol +247 -0
- package/circom/db/compile.sh +10 -0
- package/circom/db/db.circom +39 -0
- package/circom/db/gen.js +30 -0
- package/circom/db/generateInput.js +10 -0
- package/circom/db/index.circom +4 -0
- package/circom/db/test.js +21 -0
- package/circom/db/verifier.sol +261 -0
- package/circom/ipfs/calculate_total.circom +17 -0
- package/circom/ipfs/compile.sh +10 -0
- package/circom/ipfs/gen.js +18 -0
- package/circom/ipfs/generateInput.js +10 -0
- package/circom/ipfs/index.circom +4 -0
- package/circom/ipfs/ipfs.circom +62 -0
- package/circom/ipfs/parse.circom +289 -0
- package/circom/ipfs/sha256.circom +99 -0
- package/circom/ipfs/test.js +167 -0
- package/circom/ipfs/verifier.sol +261 -0
- package/circom/json/compile.sh +10 -0
- package/circom/json/gen.js +22 -0
- package/circom/json/gen2.js +21 -0
- package/circom/json/generateInput.js +20 -0
- package/circom/json/index.circom +4 -0
- package/circom/json/json.circom +81 -0
- package/circom/json/test.js +100 -0
- package/circom/json/verifier.sol +247 -0
- package/circom/query/compile.sh +10 -0
- package/circom/query/gen.js +28 -0
- package/circom/query/generateInput.js +11 -0
- package/circom/query/index.circom +4 -0
- package/circom/query/query.circom +58 -0
- package/circom/query/test.js +20 -0
- package/circom/query/verifier.sol +177 -0
- package/circom/rollup/compile.sh +10 -0
- package/circom/rollup/gen.js +36 -0
- package/circom/rollup/generateInput.js +11 -0
- package/circom/rollup/index.circom +4 -0
- package/circom/rollup/rollup.circom +43 -0
- package/circom/rollup/test.js +35 -0
- package/circom/rollup/verifier.sol +240 -0
- package/circom/scripts/ceremony.js +39 -0
- package/circom/scripts/ceremony.sh +6 -0
- package/circom/scripts/compile.js +113 -0
- package/circom/scripts/compile.sh +16 -0
- package/circom/utils/uint.circom +512 -0
- package/circom/utils/utils.circom +628 -0
- package/demos/arweave/jsconfig.json +7 -0
- package/demos/arweave/lib/ZKArweave.json +617 -0
- package/demos/arweave/lib/encoder.js +375 -0
- package/demos/arweave/next.config.js +6 -0
- package/demos/arweave/package.json +26 -0
- package/demos/arweave/pages/_app.js +9 -0
- package/demos/arweave/pages/_document.js +19 -0
- package/demos/arweave/pages/api/arweave.js +31 -0
- package/demos/arweave/pages/api/hello.js +5 -0
- package/demos/arweave/pages/index.js +869 -0
- package/demos/arweave/public/circuit.wasm +0 -0
- package/demos/arweave/public/circuit_final.zkey +0 -0
- package/demos/arweave/public/verification_key.json +149 -0
- package/demos/arweave/vercel.json +7 -0
- package/demos/arweave/yarn.lock +2510 -0
- package/demos/simple/jsconfig.json +7 -0
- package/demos/simple/lib/encoder.js +375 -0
- package/demos/simple/next.config.js +6 -0
- package/demos/simple/package.json +24 -0
- package/demos/simple/pages/_app.js +9 -0
- package/demos/simple/pages/_document.js +13 -0
- package/demos/simple/pages/api/hello.js +5 -0
- package/demos/simple/pages/index.js +342 -0
- package/demos/simple/public/circuit.wasm +0 -0
- package/demos/simple/public/circuit_final.zkey +0 -0
- package/demos/simple/public/verification_key.json +149 -0
- package/demos/simple/yarn.lock +2519 -0
- package/docs/README.md +17 -0
- package/docs/simple-zkjson.md +210 -0
- package/docs/solidity-contracts.md +216 -0
- package/docs/zk-circuits.md +125 -0
- package/docs/zkdb-rollup.md +218 -0
- package/docs/zkjson-sdk.md +254 -0
- package/docs/zkjson-v1_5.md +365 -0
- package/package.json +16 -7
- package/sdk/contracts/NORollup.sol +13 -0
- package/sdk/package.json +15 -0
- package/sdk/yarn.lock +881 -0
- package/solidity/README.md +13 -0
- package/solidity/arguments.js +4 -0
- package/solidity/contracts/NORollup.sol +13 -0
- package/solidity/contracts/OPRollup.sol +14 -0
- package/solidity/contracts/ZKIPFS.sol +95 -0
- package/solidity/contracts/ZKJson.sol +21 -0
- package/solidity/contracts/ZKQuery.sol +286 -0
- package/solidity/contracts/ZKRollup.sol +35 -0
- package/solidity/contracts/apps/NORU.sol +66 -0
- package/solidity/contracts/apps/SimpleJSON.sol +64 -0
- package/solidity/contracts/apps/SimpleOPRU.sol +67 -0
- package/solidity/contracts/apps/SimpleRU.sol +67 -0
- package/solidity/contracts/apps/Token.sol +12 -0
- package/solidity/contracts/apps/ZKArweave.sol +89 -0
- package/solidity/contracts/apps/ZKBridge.sol +74 -0
- package/solidity/contracts/apps/ZKNFT.sol +63 -0
- package/solidity/contracts/verifiers/verifier_db.sol +275 -0
- package/solidity/contracts/verifiers/verifier_ipfs.sol +464 -0
- package/solidity/contracts/verifiers/verifier_json.sol +261 -0
- package/solidity/contracts/verifiers/verifier_rollup.sol +240 -0
- package/solidity/package.json +27 -0
- package/solidity/scripts/deploy.js +33 -0
- package/solidity/test/NORU.js +66 -0
- package/solidity/test/ZKArweave.js +97 -0
- package/solidity/test/arweave.js +55 -0
- package/solidity/test/bridge.js +71 -0
- package/solidity/test/simple.js +76 -0
- package/solidity/test/simpleOPRU.js +98 -0
- package/solidity/test/simpleRU.js +94 -0
- package/solidity/test/zknft.js +98 -0
- package/solidity/yarn.lock +4152 -0
- package/test/test.js +304 -0
- /package/{circomlibjs.js → sdk/circomlibjs.js} +0 -0
- /package/{collection.js → sdk/collection.js} +0 -0
- /package/{contracts → sdk/contracts}/OPRollup.sol +0 -0
- /package/{contracts → sdk/contracts}/ZKIPFS.sol +0 -0
- /package/{contracts → sdk/contracts}/ZKJson.sol +0 -0
- /package/{contracts → sdk/contracts}/ZKQuery.sol +0 -0
- /package/{contracts → sdk/contracts}/ZKRollup.sol +0 -0
- /package/{contracts → sdk/contracts}/apps/SimpleJSON.sol +0 -0
- /package/{contracts → sdk/contracts}/apps/SimpleOPRU.sol +0 -0
- /package/{contracts → sdk/contracts}/apps/SimpleRU.sol +0 -0
- /package/{contracts → sdk/contracts}/apps/Token.sol +0 -0
- /package/{contracts → sdk/contracts}/apps/ZKArweave.sol +0 -0
- /package/{contracts → sdk/contracts}/apps/ZKBridge.sol +0 -0
- /package/{contracts → sdk/contracts}/apps/ZKNFT.sol +0 -0
- /package/{contracts → sdk/contracts}/verifiers/verifier_db.sol +0 -0
- /package/{contracts → sdk/contracts}/verifiers/verifier_ipfs.sol +0 -0
- /package/{contracts → sdk/contracts}/verifiers/verifier_json.sol +0 -0
- /package/{contracts → sdk/contracts}/verifiers/verifier_rollup.sol +0 -0
- /package/{db.js → sdk/db.js} +0 -0
- /package/{doc.js → sdk/doc.js} +0 -0
- /package/{encoder-v1_5.js → sdk/encoder-v1_5.js} +0 -0
- /package/{encoder.js → sdk/encoder.js} +0 -0
- /package/{index.js → sdk/index.js} +0 -0
- /package/{json.js → sdk/json.js} +0 -0
- /package/{nft.js → sdk/nft.js} +0 -0
- /package/{parse.js → sdk/parse.js} +0 -0
- /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
|
+
})
|