@impulse-ui-native/color-picker 14.1.1 → 15.0.0
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 +9 -1
- package/dist/components/alpha-input.js +9 -2
- package/dist/components/alpha-input.js.map +1 -1
- package/dist/components/alpha-slider.js +2 -1
- package/dist/components/alpha-slider.js.map +1 -1
- package/dist/components/apply.js +1 -0
- package/dist/components/apply.js.map +1 -1
- package/dist/components/cancel.js +1 -0
- package/dist/components/cancel.js.map +1 -1
- package/dist/components/channel-input.js +9 -2
- package/dist/components/channel-input.js.map +1 -1
- package/dist/components/hex-input.d.mts +1 -1
- package/dist/components/hex-input.js +3 -0
- package/dist/components/hex-input.js.map +1 -1
- package/dist/components/hue-slider.js +2 -1
- package/dist/components/hue-slider.js.map +1 -1
- package/dist/components/root.d.mts +1 -1
- package/dist/components/root.js +3 -1
- package/dist/components/root.js.map +1 -1
- package/dist/components/swatch.js +9 -8
- package/dist/components/swatch.js.map +1 -1
- package/dist/hooks/use-color-picker.hook.d.mts +1 -1
- package/dist/hooks/use-color-picker.hook.js +4 -1
- package/dist/hooks/use-color-picker.hook.js.map +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/types/color-picker-internal.types.d.mts +3 -1
- package/dist/types/color-picker.types.d.mts +2 -1
- package/package.json +7 -7
package/README.md
CHANGED
|
@@ -90,7 +90,7 @@ Native device verification of dragging, keyboard entry, font scaling, and nested
|
|
|
90
90
|
## Field appearance
|
|
91
91
|
|
|
92
92
|
Rectangular fields support `variant="outlined" | "soft" | "filled"` and
|
|
93
|
-
`tone="neutral" | "primary" | "secondary"`.
|
|
93
|
+
`tone="neutral" | "primary" | "secondary"`. Inputs default to `outlined` and inherit the root tone (`primary` by default). Set `tone="neutral"` on an input to use the standard neutral field appearance.
|
|
94
94
|
Outlined uses a transparent surface with a tone border; soft uses a subtle tone
|
|
95
95
|
surface; filled uses the tone fill with its paired foreground. Colors come from
|
|
96
96
|
the active theme in both schemes. Error styling overrides the selected tone;
|
|
@@ -102,3 +102,11 @@ Customize `components.controlContainer.colors[tone][variant][state]`,
|
|
|
102
102
|
the previous `variants[variant][state]` maps.
|
|
103
103
|
|
|
104
104
|
`ColorPicker.HexInput`, `ColorPicker.ChannelInput`, and `ColorPicker.AlphaInput` accept the field appearance props individually.
|
|
105
|
+
|
|
106
|
+
## Repository palette consistency
|
|
107
|
+
|
|
108
|
+
ColorPicker.Root and the convenience ColorPicker accept tone (default primary).
|
|
109
|
+
Inputs, sliders, confirm actions, and selected swatch rings inherit it; explicit
|
|
110
|
+
child tones override it. The hue/saturation spectrum, presets, alpha checkerboard,
|
|
111
|
+
and user-selected color are data, so changing tone does not change those values.
|
|
112
|
+
Selection ring tokens move to colorPicker.colors[tone].
|
|
@@ -10,7 +10,14 @@ const ColorPickerAlphaInput = memo(function ColorPickerAlphaInput2({
|
|
|
10
10
|
variant,
|
|
11
11
|
tone
|
|
12
12
|
}) {
|
|
13
|
-
const {
|
|
13
|
+
const {
|
|
14
|
+
hsva,
|
|
15
|
+
disabled,
|
|
16
|
+
size,
|
|
17
|
+
tone: rootTone,
|
|
18
|
+
setAlpha,
|
|
19
|
+
resetKey
|
|
20
|
+
} = useColorPickerContext();
|
|
14
21
|
const commit = useEventCallback((text) => {
|
|
15
22
|
const percentage = parseColorPercentage(text);
|
|
16
23
|
if (percentage === void 0) {
|
|
@@ -30,7 +37,7 @@ const ColorPickerAlphaInput = memo(function ColorPickerAlphaInput2({
|
|
|
30
37
|
{
|
|
31
38
|
label,
|
|
32
39
|
variant,
|
|
33
|
-
tone,
|
|
40
|
+
tone: tone ?? rootTone,
|
|
34
41
|
size,
|
|
35
42
|
disabled,
|
|
36
43
|
keyboardType: "number-pad",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/alpha-input.tsx"],"sourcesContent":["import { memo } from \"react\";\n\nimport { useEventCallback } from \"@impulse-ui-native/core\";\nimport { Input } from \"@impulse-ui-native/input\";\n\nimport type { ColorPickerAlphaInputProps } from \"../types\";\nimport { useColorInput } from \"../hooks/use-color-input.hook\";\nimport { useColorPickerContext } from \"../hooks/use-color-picker-context.hook\";\nimport { parseColorPercentage } from \"../utils/color.utils\";\n\nexport const ColorPickerAlphaInput = memo(function ColorPickerAlphaInput({\n label,\n variant,\n tone,\n}: ColorPickerAlphaInputProps) {\n const {
|
|
1
|
+
{"version":3,"sources":["../../src/components/alpha-input.tsx"],"sourcesContent":["import { memo } from \"react\";\n\nimport { useEventCallback } from \"@impulse-ui-native/core\";\nimport { Input } from \"@impulse-ui-native/input\";\n\nimport type { ColorPickerAlphaInputProps } from \"../types\";\nimport { useColorInput } from \"../hooks/use-color-input.hook\";\nimport { useColorPickerContext } from \"../hooks/use-color-picker-context.hook\";\nimport { parseColorPercentage } from \"../utils/color.utils\";\n\nexport const ColorPickerAlphaInput = memo(function ColorPickerAlphaInput({\n label,\n variant,\n tone,\n}: ColorPickerAlphaInputProps) {\n const {\n hsva,\n disabled,\n size,\n tone: rootTone,\n setAlpha,\n resetKey,\n } = useColorPickerContext();\n const commit = useEventCallback((text: string): string | undefined => {\n const percentage = parseColorPercentage(text);\n\n if (percentage === undefined) {\n return undefined;\n }\n\n setAlpha(percentage / 100);\n\n return String(percentage);\n });\n const input = useColorInput({\n resetKey,\n value: String(Math.round(hsva.a * 100)),\n disabled,\n commit,\n });\n\n return (\n <Input\n label={label}\n variant={variant}\n tone={tone ?? rootTone}\n size={size}\n disabled={disabled}\n keyboardType=\"number-pad\"\n maxLength={3}\n value={input.text}\n onChangeText={input.onChangeText}\n onBlur={input.onCommit}\n onSubmitEditing={input.onCommit}\n error={input.invalid ? \"Use 0-100\" : undefined}\n />\n );\n});\n"],"mappings":"AA0CI;AA1CJ,SAAS,YAAY;AAErB,SAAS,wBAAwB;AACjC,SAAS,aAAa;AAGtB,SAAS,qBAAqB;AAC9B,SAAS,6BAA6B;AACtC,SAAS,4BAA4B;AAE9B,MAAM,wBAAwB,KAAK,SAASA,uBAAsB;AAAA,EACvE;AAAA,EACA;AAAA,EACA;AACF,GAA+B;AAC7B,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF,IAAI,sBAAsB;AAC1B,QAAM,SAAS,iBAAiB,CAAC,SAAqC;AACpE,UAAM,aAAa,qBAAqB,IAAI;AAE5C,QAAI,eAAe,QAAW;AAC5B,aAAO;AAAA,IACT;AAEA,aAAS,aAAa,GAAG;AAEzB,WAAO,OAAO,UAAU;AAAA,EAC1B,CAAC;AACD,QAAM,QAAQ,cAAc;AAAA,IAC1B;AAAA,IACA,OAAO,OAAO,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC;AAAA,IACtC;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,MAAM,QAAQ;AAAA,MACd;AAAA,MACA;AAAA,MACA,cAAa;AAAA,MACb,WAAW;AAAA,MACX,OAAO,MAAM;AAAA,MACb,cAAc,MAAM;AAAA,MACpB,QAAQ,MAAM;AAAA,MACd,iBAAiB,MAAM;AAAA,MACvB,OAAO,MAAM,UAAU,cAAc;AAAA;AAAA,EACvC;AAEJ,CAAC;","names":["ColorPickerAlphaInput"]}
|
|
@@ -5,7 +5,7 @@ import { Slider } from "@impulse-ui-native/slider";
|
|
|
5
5
|
import { useColorPickerContext } from "../hooks/use-color-picker-context.hook";
|
|
6
6
|
import { ColorMotionGradient } from "./motion-gradient";
|
|
7
7
|
const ColorPickerAlphaSlider = memo(function ColorPickerAlphaSlider2() {
|
|
8
|
-
const { hsva, disabled, size, gesture, motion } = useColorPickerContext();
|
|
8
|
+
const { hsva, disabled, size, tone, gesture, motion } = useColorPickerContext();
|
|
9
9
|
const trackContent = useMemo(
|
|
10
10
|
() => /* @__PURE__ */ jsx(ColorMotionGradient, { rgba: motion.rgba }),
|
|
11
11
|
[motion.rgba]
|
|
@@ -17,6 +17,7 @@ const ColorPickerAlphaSlider = memo(function ColorPickerAlphaSlider2() {
|
|
|
17
17
|
return /* @__PURE__ */ jsx(
|
|
18
18
|
Slider,
|
|
19
19
|
{
|
|
20
|
+
tone,
|
|
20
21
|
min: 0,
|
|
21
22
|
max: 1,
|
|
22
23
|
step: 0.01,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/alpha-slider.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\n\nimport { useEventCallback } from \"@impulse-ui-native/core\";\nimport { Slider } from \"@impulse-ui-native/slider\";\n\nimport { useColorPickerContext } from \"../hooks/use-color-picker-context.hook\";\nimport { ColorMotionGradient } from \"./motion-gradient\";\n\nexport const ColorPickerAlphaSlider = memo(function ColorPickerAlphaSlider() {\n const { hsva, disabled, size, gesture, motion }
|
|
1
|
+
{"version":3,"sources":["../../src/components/alpha-slider.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\n\nimport { useEventCallback } from \"@impulse-ui-native/core\";\nimport { Slider } from \"@impulse-ui-native/slider\";\n\nimport { useColorPickerContext } from \"../hooks/use-color-picker-context.hook\";\nimport { ColorMotionGradient } from \"./motion-gradient\";\n\nexport const ColorPickerAlphaSlider = memo(function ColorPickerAlphaSlider() {\n const { hsva, disabled, size, tone, gesture, motion } =\n useColorPickerContext();\n const trackContent = useMemo(\n () => <ColorMotionGradient rgba={motion.rgba} />,\n [motion.rgba],\n );\n const handleComplete = useEventCallback((value: number) => {\n gesture.setAlpha(value);\n motion.finish();\n });\n\n return (\n <Slider\n tone={tone}\n min={0}\n max={1}\n step={0.01}\n value={hsva.a}\n onValueChange={gesture.setAlpha}\n onValueChangeWorklet={motion.setAlpha}\n onSlidingComplete={handleComplete}\n disabled={disabled}\n size={size}\n variant=\"outlined\"\n trackContent={trackContent}\n />\n );\n});\n"],"mappings":"AAYU;AAZV,SAAS,MAAM,eAAe;AAE9B,SAAS,wBAAwB;AACjC,SAAS,cAAc;AAEvB,SAAS,6BAA6B;AACtC,SAAS,2BAA2B;AAE7B,MAAM,yBAAyB,KAAK,SAASA,0BAAyB;AAC3E,QAAM,EAAE,MAAM,UAAU,MAAM,MAAM,SAAS,OAAO,IAClD,sBAAsB;AACxB,QAAM,eAAe;AAAA,IACnB,MAAM,oBAAC,uBAAoB,MAAM,OAAO,MAAM;AAAA,IAC9C,CAAC,OAAO,IAAI;AAAA,EACd;AACA,QAAM,iBAAiB,iBAAiB,CAAC,UAAkB;AACzD,YAAQ,SAAS,KAAK;AACtB,WAAO,OAAO;AAAA,EAChB,CAAC;AAED,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,MAAM;AAAA,MACN,OAAO,KAAK;AAAA,MACZ,eAAe,QAAQ;AAAA,MACvB,sBAAsB,OAAO;AAAA,MAC7B,mBAAmB;AAAA,MACnB;AAAA,MACA;AAAA,MACA,SAAQ;AAAA,MACR;AAAA;AAAA,EACF;AAEJ,CAAC;","names":["ColorPickerAlphaSlider"]}
|
package/dist/components/apply.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/apply.tsx"],"sourcesContent":["import type { GestureResponderEvent } from \"react-native\";\nimport { memo } from \"react\";\n\nimport { useEventCallback } from \"@impulse-ui-native/core\";\nimport { Button } from \"@impulse-ui-native/primitives\";\n\nimport type { ColorPickerActionProps } from \"../types\";\nimport { useColorPickerContext } from \"../hooks/use-color-picker-context.hook\";\n\nexport const ColorPickerApply = memo(function ColorPickerApply({\n disabled,\n loading,\n onPress,\n ...props\n}: ColorPickerActionProps) {\n const picker = useColorPickerContext();\n const blocked = picker.disabled || disabled === true || loading === true;\n const handlePress = useEventCallback((event: GestureResponderEvent) => {\n if (blocked) {\n return;\n }\n\n picker.apply();\n onPress?.(event);\n });\n\n return (\n <Button\n size={picker.size}\n {...props}\n loading={loading}\n disabled={blocked}\n onPress={handlePress}\n />\n );\n});\n"],"mappings":"AA2BI;AA1BJ,SAAS,YAAY;AAErB,SAAS,wBAAwB;AACjC,SAAS,cAAc;AAGvB,SAAS,6BAA6B;AAE/B,MAAM,mBAAmB,KAAK,SAASA,kBAAiB;AAAA,EAC7D;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA2B;AACzB,QAAM,SAAS,sBAAsB;AACrC,QAAM,UAAU,OAAO,YAAY,aAAa,QAAQ,YAAY;AACpE,QAAM,cAAc,iBAAiB,CAAC,UAAiC;AACrE,QAAI,SAAS;AACX;AAAA,IACF;AAEA,WAAO,MAAM;AACb,cAAU,KAAK;AAAA,EACjB,CAAC;AAED,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,OAAO;AAAA,MACZ,GAAG;AAAA,MACJ;AAAA,MACA,UAAU;AAAA,MACV,SAAS;AAAA;AAAA,EACX;AAEJ,CAAC;","names":["ColorPickerApply"]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/apply.tsx"],"sourcesContent":["import type { GestureResponderEvent } from \"react-native\";\nimport { memo } from \"react\";\n\nimport { useEventCallback } from \"@impulse-ui-native/core\";\nimport { Button } from \"@impulse-ui-native/primitives\";\n\nimport type { ColorPickerActionProps } from \"../types\";\nimport { useColorPickerContext } from \"../hooks/use-color-picker-context.hook\";\n\nexport const ColorPickerApply = memo(function ColorPickerApply({\n disabled,\n loading,\n onPress,\n ...props\n}: ColorPickerActionProps) {\n const picker = useColorPickerContext();\n const blocked = picker.disabled || disabled === true || loading === true;\n const handlePress = useEventCallback((event: GestureResponderEvent) => {\n if (blocked) {\n return;\n }\n\n picker.apply();\n onPress?.(event);\n });\n\n return (\n <Button\n tone={picker.tone}\n size={picker.size}\n {...props}\n loading={loading}\n disabled={blocked}\n onPress={handlePress}\n />\n );\n});\n"],"mappings":"AA2BI;AA1BJ,SAAS,YAAY;AAErB,SAAS,wBAAwB;AACjC,SAAS,cAAc;AAGvB,SAAS,6BAA6B;AAE/B,MAAM,mBAAmB,KAAK,SAASA,kBAAiB;AAAA,EAC7D;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA2B;AACzB,QAAM,SAAS,sBAAsB;AACrC,QAAM,UAAU,OAAO,YAAY,aAAa,QAAQ,YAAY;AACpE,QAAM,cAAc,iBAAiB,CAAC,UAAiC;AACrE,QAAI,SAAS;AACX;AAAA,IACF;AAEA,WAAO,MAAM;AACb,cAAU,KAAK;AAAA,EACjB,CAAC;AAED,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,OAAO;AAAA,MACb,MAAM,OAAO;AAAA,MACZ,GAAG;AAAA,MACJ;AAAA,MACA,UAAU;AAAA,MACV,SAAS;AAAA;AAAA,EACX;AAEJ,CAAC;","names":["ColorPickerApply"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/cancel.tsx"],"sourcesContent":["import type { GestureResponderEvent } from \"react-native\";\nimport { memo } from \"react\";\n\nimport { useEventCallback } from \"@impulse-ui-native/core\";\nimport { Button } from \"@impulse-ui-native/primitives\";\n\nimport type { ColorPickerActionProps } from \"../types\";\nimport { useColorPickerContext } from \"../hooks/use-color-picker-context.hook\";\n\nexport const ColorPickerCancel = memo(function ColorPickerCancel({\n disabled,\n loading,\n onPress,\n ...props\n}: ColorPickerActionProps) {\n const picker = useColorPickerContext();\n const blocked = picker.disabled || disabled === true || loading === true;\n const handlePress = useEventCallback((event: GestureResponderEvent) => {\n if (blocked) {\n return;\n }\n\n picker.cancel();\n onPress?.(event);\n });\n\n return (\n <Button\n size={picker.size}\n variant=\"outlined\"\n {...props}\n loading={loading}\n disabled={blocked}\n onPress={handlePress}\n />\n );\n});\n"],"mappings":"AA2BI;AA1BJ,SAAS,YAAY;AAErB,SAAS,wBAAwB;AACjC,SAAS,cAAc;AAGvB,SAAS,6BAA6B;AAE/B,MAAM,oBAAoB,KAAK,SAASA,mBAAkB;AAAA,EAC/D;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA2B;AACzB,QAAM,SAAS,sBAAsB;AACrC,QAAM,UAAU,OAAO,YAAY,aAAa,QAAQ,YAAY;AACpE,QAAM,cAAc,iBAAiB,CAAC,UAAiC;AACrE,QAAI,SAAS;AACX;AAAA,IACF;AAEA,WAAO,OAAO;AACd,cAAU,KAAK;AAAA,EACjB,CAAC;AAED,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,OAAO;AAAA,MACb,SAAQ;AAAA,MACP,GAAG;AAAA,MACJ;AAAA,MACA,UAAU;AAAA,MACV,SAAS;AAAA;AAAA,EACX;AAEJ,CAAC;","names":["ColorPickerCancel"]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/cancel.tsx"],"sourcesContent":["import type { GestureResponderEvent } from \"react-native\";\nimport { memo } from \"react\";\n\nimport { useEventCallback } from \"@impulse-ui-native/core\";\nimport { Button } from \"@impulse-ui-native/primitives\";\n\nimport type { ColorPickerActionProps } from \"../types\";\nimport { useColorPickerContext } from \"../hooks/use-color-picker-context.hook\";\n\nexport const ColorPickerCancel = memo(function ColorPickerCancel({\n disabled,\n loading,\n onPress,\n ...props\n}: ColorPickerActionProps) {\n const picker = useColorPickerContext();\n const blocked = picker.disabled || disabled === true || loading === true;\n const handlePress = useEventCallback((event: GestureResponderEvent) => {\n if (blocked) {\n return;\n }\n\n picker.cancel();\n onPress?.(event);\n });\n\n return (\n <Button\n tone={picker.tone}\n size={picker.size}\n variant=\"outlined\"\n {...props}\n loading={loading}\n disabled={blocked}\n onPress={handlePress}\n />\n );\n});\n"],"mappings":"AA2BI;AA1BJ,SAAS,YAAY;AAErB,SAAS,wBAAwB;AACjC,SAAS,cAAc;AAGvB,SAAS,6BAA6B;AAE/B,MAAM,oBAAoB,KAAK,SAASA,mBAAkB;AAAA,EAC/D;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA2B;AACzB,QAAM,SAAS,sBAAsB;AACrC,QAAM,UAAU,OAAO,YAAY,aAAa,QAAQ,YAAY;AACpE,QAAM,cAAc,iBAAiB,CAAC,UAAiC;AACrE,QAAI,SAAS;AACX;AAAA,IACF;AAEA,WAAO,OAAO;AACd,cAAU,KAAK;AAAA,EACjB,CAAC;AAED,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,OAAO;AAAA,MACb,MAAM,OAAO;AAAA,MACb,SAAQ;AAAA,MACP,GAAG;AAAA,MACJ;AAAA,MACA,UAAU;AAAA,MACV,SAAS;AAAA;AAAA,EACX;AAEJ,CAAC;","names":["ColorPickerCancel"]}
|
|
@@ -11,7 +11,14 @@ const ColorPickerChannelInput = memo(function ColorPickerChannelInput2({
|
|
|
11
11
|
variant,
|
|
12
12
|
tone
|
|
13
13
|
}) {
|
|
14
|
-
const {
|
|
14
|
+
const {
|
|
15
|
+
rgba,
|
|
16
|
+
disabled,
|
|
17
|
+
size,
|
|
18
|
+
tone: rootTone,
|
|
19
|
+
setChannel,
|
|
20
|
+
resetKey
|
|
21
|
+
} = useColorPickerContext();
|
|
15
22
|
const commit = useEventCallback((text) => {
|
|
16
23
|
const number = parseColorChannel(text);
|
|
17
24
|
if (number === void 0) {
|
|
@@ -31,7 +38,7 @@ const ColorPickerChannelInput = memo(function ColorPickerChannelInput2({
|
|
|
31
38
|
{
|
|
32
39
|
label,
|
|
33
40
|
variant,
|
|
34
|
-
tone,
|
|
41
|
+
tone: tone ?? rootTone,
|
|
35
42
|
size,
|
|
36
43
|
disabled,
|
|
37
44
|
keyboardType: "number-pad",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/channel-input.tsx"],"sourcesContent":["import { memo } from \"react\";\n\nimport { useEventCallback } from \"@impulse-ui-native/core\";\nimport { Input } from \"@impulse-ui-native/input\";\n\nimport type { ColorPickerChannelInputProps } from \"../types\";\nimport { useColorInput } from \"../hooks/use-color-input.hook\";\nimport { useColorPickerContext } from \"../hooks/use-color-picker-context.hook\";\nimport { parseColorChannel } from \"../utils/color.utils\";\n\nexport const ColorPickerChannelInput = memo(function ColorPickerChannelInput({\n channel,\n label,\n variant,\n tone,\n}: ColorPickerChannelInputProps) {\n const {
|
|
1
|
+
{"version":3,"sources":["../../src/components/channel-input.tsx"],"sourcesContent":["import { memo } from \"react\";\n\nimport { useEventCallback } from \"@impulse-ui-native/core\";\nimport { Input } from \"@impulse-ui-native/input\";\n\nimport type { ColorPickerChannelInputProps } from \"../types\";\nimport { useColorInput } from \"../hooks/use-color-input.hook\";\nimport { useColorPickerContext } from \"../hooks/use-color-picker-context.hook\";\nimport { parseColorChannel } from \"../utils/color.utils\";\n\nexport const ColorPickerChannelInput = memo(function ColorPickerChannelInput({\n channel,\n label,\n variant,\n tone,\n}: ColorPickerChannelInputProps) {\n const {\n rgba,\n disabled,\n size,\n tone: rootTone,\n setChannel,\n resetKey,\n } = useColorPickerContext();\n const commit = useEventCallback((text: string): string | undefined => {\n const number = parseColorChannel(text);\n\n if (number === undefined) {\n return undefined;\n }\n\n setChannel(channel, number);\n\n return String(number);\n });\n const input = useColorInput({\n resetKey,\n value: String(rgba[channel]),\n disabled,\n commit,\n });\n\n return (\n <Input\n label={label}\n variant={variant}\n tone={tone ?? rootTone}\n size={size}\n disabled={disabled}\n keyboardType=\"number-pad\"\n maxLength={3}\n value={input.text}\n onChangeText={input.onChangeText}\n onBlur={input.onCommit}\n onSubmitEditing={input.onCommit}\n error={input.invalid ? \"Use 0-255\" : undefined}\n />\n );\n});\n"],"mappings":"AA2CI;AA3CJ,SAAS,YAAY;AAErB,SAAS,wBAAwB;AACjC,SAAS,aAAa;AAGtB,SAAS,qBAAqB;AAC9B,SAAS,6BAA6B;AACtC,SAAS,yBAAyB;AAE3B,MAAM,0BAA0B,KAAK,SAASA,yBAAwB;AAAA,EAC3E;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAiC;AAC/B,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF,IAAI,sBAAsB;AAC1B,QAAM,SAAS,iBAAiB,CAAC,SAAqC;AACpE,UAAM,SAAS,kBAAkB,IAAI;AAErC,QAAI,WAAW,QAAW;AACxB,aAAO;AAAA,IACT;AAEA,eAAW,SAAS,MAAM;AAE1B,WAAO,OAAO,MAAM;AAAA,EACtB,CAAC;AACD,QAAM,QAAQ,cAAc;AAAA,IAC1B;AAAA,IACA,OAAO,OAAO,KAAK,OAAO,CAAC;AAAA,IAC3B;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,MAAM,QAAQ;AAAA,MACd;AAAA,MACA;AAAA,MACA,cAAa;AAAA,MACb,WAAW;AAAA,MACX,OAAO,MAAM;AAAA,MACb,cAAc,MAAM;AAAA,MACpB,QAAQ,MAAM;AAAA,MACd,iBAAiB,MAAM;AAAA,MACvB,OAAO,MAAM,UAAU,cAAc;AAAA;AAAA,EACvC;AAEJ,CAAC;","names":["ColorPickerChannelInput"]}
|
|
@@ -2,6 +2,6 @@ import * as react from 'react';
|
|
|
2
2
|
import { ColorPickerHexInputProps } from '../types/color-input.types.mjs';
|
|
3
3
|
import '@impulse-ui-native/input';
|
|
4
4
|
|
|
5
|
-
declare const ColorPickerHexInput: react.MemoExoticComponent<({ disabled: disabledProp, onBlur, onSubmitEditing, error, ...props }: ColorPickerHexInputProps) => react.JSX.Element>;
|
|
5
|
+
declare const ColorPickerHexInput: react.MemoExoticComponent<({ disabled: disabledProp, onBlur, onSubmitEditing, error, tone, ...props }: ColorPickerHexInputProps) => react.JSX.Element>;
|
|
6
6
|
|
|
7
7
|
export { ColorPickerHexInput };
|
|
@@ -10,12 +10,14 @@ const ColorPickerHexInput = memo(function ColorPickerHexInput2({
|
|
|
10
10
|
onBlur,
|
|
11
11
|
onSubmitEditing,
|
|
12
12
|
error,
|
|
13
|
+
tone,
|
|
13
14
|
...props
|
|
14
15
|
}) {
|
|
15
16
|
const {
|
|
16
17
|
value,
|
|
17
18
|
disabled: rootDisabled,
|
|
18
19
|
size,
|
|
20
|
+
tone: rootTone,
|
|
19
21
|
setColor,
|
|
20
22
|
resetKey
|
|
21
23
|
} = useColorPickerContext();
|
|
@@ -40,6 +42,7 @@ const ColorPickerHexInput = memo(function ColorPickerHexInput2({
|
|
|
40
42
|
return /* @__PURE__ */ jsx(
|
|
41
43
|
Input,
|
|
42
44
|
{
|
|
45
|
+
tone: tone ?? rootTone,
|
|
43
46
|
size,
|
|
44
47
|
autoCapitalize: "characters",
|
|
45
48
|
autoCorrect: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/hex-input.tsx"],"sourcesContent":["import { memo } from \"react\";\n\nimport { useEventCallback } from \"@impulse-ui-native/core\";\nimport { Input } from \"@impulse-ui-native/input\";\n\nimport type { ColorPickerHexInputProps } from \"../types/color-input.types\";\nimport { useColorInput } from \"../hooks/use-color-input.hook\";\nimport { useColorPickerContext } from \"../hooks/use-color-picker-context.hook\";\nimport { parseHexColor, rgbaToHex } from \"../utils/color.utils\";\n\nexport const ColorPickerHexInput = memo(function ColorPickerHexInput({\n disabled: disabledProp,\n onBlur,\n onSubmitEditing,\n error,\n ...props\n}: ColorPickerHexInputProps) {\n const {\n value,\n disabled: rootDisabled,\n size,\n setColor,\n resetKey,\n } = useColorPickerContext();\n const disabled = rootDisabled || disabledProp === true;\n const commit = useEventCallback((text: string): string | undefined => {\n const parsed = parseHexColor(text);\n\n if (!parsed || !setColor(text)) {\n return undefined;\n }\n\n return rgbaToHex(parsed);\n });\n const input = useColorInput({ value, disabled, commit, resetKey });\n const handleBlur = useEventCallback<\n NonNullable<ColorPickerHexInputProps[\"onBlur\"]>\n >((event) => {\n input.onCommit();\n onBlur?.(event);\n });\n const handleSubmit = useEventCallback<\n NonNullable<ColorPickerHexInputProps[\"onSubmitEditing\"]>\n >((event) => {\n input.onCommit();\n onSubmitEditing?.(event);\n });\n\n const inputError =\n error ?? (input.invalid ? \"Enter a valid hex color\" : undefined);\n\n return (\n <Input\n size={size}\n autoCapitalize=\"characters\"\n autoCorrect={false}\n maxLength={9}\n {...props}\n disabled={disabled}\n value={input.text}\n onChangeText={input.onChangeText}\n onBlur={handleBlur}\n onSubmitEditing={handleSubmit}\n error={inputError}\n />\n );\n});\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/components/hex-input.tsx"],"sourcesContent":["import { memo } from \"react\";\n\nimport { useEventCallback } from \"@impulse-ui-native/core\";\nimport { Input } from \"@impulse-ui-native/input\";\n\nimport type { ColorPickerHexInputProps } from \"../types/color-input.types\";\nimport { useColorInput } from \"../hooks/use-color-input.hook\";\nimport { useColorPickerContext } from \"../hooks/use-color-picker-context.hook\";\nimport { parseHexColor, rgbaToHex } from \"../utils/color.utils\";\n\nexport const ColorPickerHexInput = memo(function ColorPickerHexInput({\n disabled: disabledProp,\n onBlur,\n onSubmitEditing,\n error,\n tone,\n ...props\n}: ColorPickerHexInputProps) {\n const {\n value,\n disabled: rootDisabled,\n size,\n tone: rootTone,\n setColor,\n resetKey,\n } = useColorPickerContext();\n const disabled = rootDisabled || disabledProp === true;\n const commit = useEventCallback((text: string): string | undefined => {\n const parsed = parseHexColor(text);\n\n if (!parsed || !setColor(text)) {\n return undefined;\n }\n\n return rgbaToHex(parsed);\n });\n const input = useColorInput({ value, disabled, commit, resetKey });\n const handleBlur = useEventCallback<\n NonNullable<ColorPickerHexInputProps[\"onBlur\"]>\n >((event) => {\n input.onCommit();\n onBlur?.(event);\n });\n const handleSubmit = useEventCallback<\n NonNullable<ColorPickerHexInputProps[\"onSubmitEditing\"]>\n >((event) => {\n input.onCommit();\n onSubmitEditing?.(event);\n });\n\n const inputError =\n error ?? (input.invalid ? \"Enter a valid hex color\" : undefined);\n\n return (\n <Input\n tone={tone ?? rootTone}\n size={size}\n autoCapitalize=\"characters\"\n autoCorrect={false}\n maxLength={9}\n {...props}\n disabled={disabled}\n value={input.text}\n onChangeText={input.onChangeText}\n onBlur={handleBlur}\n onSubmitEditing={handleSubmit}\n error={inputError}\n />\n );\n});\n"],"mappings":"AAsDI;AAtDJ,SAAS,YAAY;AAErB,SAAS,wBAAwB;AACjC,SAAS,aAAa;AAGtB,SAAS,qBAAqB;AAC9B,SAAS,6BAA6B;AACtC,SAAS,eAAe,iBAAiB;AAElC,MAAM,sBAAsB,KAAK,SAASA,qBAAoB;AAAA,EACnE,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA6B;AAC3B,QAAM;AAAA,IACJ;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF,IAAI,sBAAsB;AAC1B,QAAM,WAAW,gBAAgB,iBAAiB;AAClD,QAAM,SAAS,iBAAiB,CAAC,SAAqC;AACpE,UAAM,SAAS,cAAc,IAAI;AAEjC,QAAI,CAAC,UAAU,CAAC,SAAS,IAAI,GAAG;AAC9B,aAAO;AAAA,IACT;AAEA,WAAO,UAAU,MAAM;AAAA,EACzB,CAAC;AACD,QAAM,QAAQ,cAAc,EAAE,OAAO,UAAU,QAAQ,SAAS,CAAC;AACjE,QAAM,aAAa,iBAEjB,CAAC,UAAU;AACX,UAAM,SAAS;AACf,aAAS,KAAK;AAAA,EAChB,CAAC;AACD,QAAM,eAAe,iBAEnB,CAAC,UAAU;AACX,UAAM,SAAS;AACf,sBAAkB,KAAK;AAAA,EACzB,CAAC;AAED,QAAM,aACJ,UAAU,MAAM,UAAU,4BAA4B;AAExD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,QAAQ;AAAA,MACd;AAAA,MACA,gBAAe;AAAA,MACf,aAAa;AAAA,MACb,WAAW;AAAA,MACV,GAAG;AAAA,MACJ;AAAA,MACA,OAAO,MAAM;AAAA,MACb,cAAc,MAAM;AAAA,MACpB,QAAQ;AAAA,MACR,iBAAiB;AAAA,MACjB,OAAO;AAAA;AAAA,EACT;AAEJ,CAAC;","names":["ColorPickerHexInput"]}
|
|
@@ -6,7 +6,7 @@ import { HueStops } from "../constants/color.constants";
|
|
|
6
6
|
import { useColorPickerContext } from "../hooks/use-color-picker-context.hook";
|
|
7
7
|
import { ColorGradient } from "./gradient";
|
|
8
8
|
const ColorPickerHueSlider = memo(function ColorPickerHueSlider2() {
|
|
9
|
-
const { hsva, disabled, size, gesture, motion } = useColorPickerContext();
|
|
9
|
+
const { hsva, disabled, size, tone, gesture, motion } = useColorPickerContext();
|
|
10
10
|
const trackContent = useMemo(() => /* @__PURE__ */ jsx(ColorGradient, { colors: HueStops }), []);
|
|
11
11
|
const handleComplete = useEventCallback((value) => {
|
|
12
12
|
gesture.setHue(value);
|
|
@@ -15,6 +15,7 @@ const ColorPickerHueSlider = memo(function ColorPickerHueSlider2() {
|
|
|
15
15
|
return /* @__PURE__ */ jsx(
|
|
16
16
|
Slider,
|
|
17
17
|
{
|
|
18
|
+
tone,
|
|
18
19
|
min: 0,
|
|
19
20
|
max: 360,
|
|
20
21
|
step: 1,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/hue-slider.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\n\nimport { useEventCallback } from \"@impulse-ui-native/core\";\nimport { Slider } from \"@impulse-ui-native/slider\";\n\nimport { HueStops } from \"../constants/color.constants\";\nimport { useColorPickerContext } from \"../hooks/use-color-picker-context.hook\";\nimport { ColorGradient } from \"./gradient\";\n\nexport const ColorPickerHueSlider = memo(function ColorPickerHueSlider() {\n const { hsva, disabled, size, gesture, motion }
|
|
1
|
+
{"version":3,"sources":["../../src/components/hue-slider.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\n\nimport { useEventCallback } from \"@impulse-ui-native/core\";\nimport { Slider } from \"@impulse-ui-native/slider\";\n\nimport { HueStops } from \"../constants/color.constants\";\nimport { useColorPickerContext } from \"../hooks/use-color-picker-context.hook\";\nimport { ColorGradient } from \"./gradient\";\n\nexport const ColorPickerHueSlider = memo(function ColorPickerHueSlider() {\n const { hsva, disabled, size, tone, gesture, motion } =\n useColorPickerContext();\n const trackContent = useMemo(() => <ColorGradient colors={HueStops} />, []);\n const handleComplete = useEventCallback((value: number) => {\n gesture.setHue(value);\n motion.finish();\n });\n\n return (\n <Slider\n tone={tone}\n min={0}\n max={360}\n step={1}\n value={hsva.h}\n onValueChange={gesture.setHue}\n onValueChangeWorklet={motion.setHue}\n onSlidingComplete={handleComplete}\n disabled={disabled}\n size={size}\n variant=\"outlined\"\n trackContent={trackContent}\n />\n );\n});\n"],"mappings":"AAYqC;AAZrC,SAAS,MAAM,eAAe;AAE9B,SAAS,wBAAwB;AACjC,SAAS,cAAc;AAEvB,SAAS,gBAAgB;AACzB,SAAS,6BAA6B;AACtC,SAAS,qBAAqB;AAEvB,MAAM,uBAAuB,KAAK,SAASA,wBAAuB;AACvE,QAAM,EAAE,MAAM,UAAU,MAAM,MAAM,SAAS,OAAO,IAClD,sBAAsB;AACxB,QAAM,eAAe,QAAQ,MAAM,oBAAC,iBAAc,QAAQ,UAAU,GAAI,CAAC,CAAC;AAC1E,QAAM,iBAAiB,iBAAiB,CAAC,UAAkB;AACzD,YAAQ,OAAO,KAAK;AACpB,WAAO,OAAO;AAAA,EAChB,CAAC;AAED,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,MAAM;AAAA,MACN,OAAO,KAAK;AAAA,MACZ,eAAe,QAAQ;AAAA,MACvB,sBAAsB,OAAO;AAAA,MAC7B,mBAAmB;AAAA,MACnB;AAAA,MACA;AAAA,MACA,SAAQ;AAAA,MACR;AAAA;AAAA,EACF;AAEJ,CAAC;","names":["ColorPickerHueSlider"]}
|
|
@@ -5,6 +5,6 @@ import '@impulse-ui-native/primitives';
|
|
|
5
5
|
import '@impulse-ui-native/theme';
|
|
6
6
|
import '../types/color.types.mjs';
|
|
7
7
|
|
|
8
|
-
declare const ColorPickerRoot: react.MemoExoticComponent<({ children, style, value, defaultValue, onChange, disabled, size, commitMode, ...props }: ColorPickerRootProps) => react.JSX.Element>;
|
|
8
|
+
declare const ColorPickerRoot: react.MemoExoticComponent<({ children, style, value, defaultValue, onChange, disabled, size, commitMode, tone, ...props }: ColorPickerRootProps) => react.JSX.Element>;
|
|
9
9
|
|
|
10
10
|
export { ColorPickerRoot };
|
package/dist/components/root.js
CHANGED
|
@@ -14,6 +14,7 @@ const ColorPickerRoot = memo(function ColorPickerRoot2({
|
|
|
14
14
|
disabled,
|
|
15
15
|
size,
|
|
16
16
|
commitMode,
|
|
17
|
+
tone,
|
|
17
18
|
...props
|
|
18
19
|
}) {
|
|
19
20
|
const context = useColorPicker({
|
|
@@ -22,7 +23,8 @@ const ColorPickerRoot = memo(function ColorPickerRoot2({
|
|
|
22
23
|
onChange,
|
|
23
24
|
disabled,
|
|
24
25
|
size,
|
|
25
|
-
commitMode
|
|
26
|
+
commitMode,
|
|
27
|
+
tone
|
|
26
28
|
});
|
|
27
29
|
const styles = useThemedStyles(themedStyles);
|
|
28
30
|
const extractedStyleProps = useStyleProps(props);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/root.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\nimport { StyleSheet } from \"react-native\";\n\nimport type { AppTheme } from \"@impulse-ui-native/theme\";\nimport { View } from \"@impulse-ui-native/primitives\";\nimport { useStyleProps, useThemedStyles } from \"@impulse-ui-native/theme\";\n\nimport type { ColorPickerRootProps } from \"../types\";\nimport { ColorPickerContext } from \"../contexts/color-picker.context\";\nimport { useColorPicker } from \"../hooks/use-color-picker.hook\";\n\nexport const ColorPickerRoot = memo(function ColorPickerRoot({\n children,\n style,\n value,\n defaultValue,\n onChange,\n disabled,\n size,\n commitMode,\n ...props\n}: ColorPickerRootProps) {\n const context = useColorPicker({\n value,\n defaultValue,\n onChange,\n disabled,\n size,\n commitMode,\n });\n const styles = useThemedStyles(themedStyles);\n const extractedStyleProps = useStyleProps(props);\n const rootStyle = useMemo(\n () => [styles.root, extractedStyleProps, style],\n [styles.root, extractedStyleProps, style],\n );\n\n return (\n <ColorPickerContext.Provider value={context}>\n <View {...props} style={rootStyle}>\n {children}\n </View>\n </ColorPickerContext.Provider>\n );\n});\n\nfunction themedStyles(theme: AppTheme) {\n const tokens = theme.components.colorPicker;\n\n return StyleSheet.create({\n root: {\n gap: tokens.gap,\n padding: tokens.padding,\n borderRadius: tokens.borderRadius,\n borderWidth: tokens.borderWidth,\n borderColor: tokens.borderColor,\n backgroundColor: tokens.backgroundColor,\n },\n });\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/components/root.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\nimport { StyleSheet } from \"react-native\";\n\nimport type { AppTheme } from \"@impulse-ui-native/theme\";\nimport { View } from \"@impulse-ui-native/primitives\";\nimport { useStyleProps, useThemedStyles } from \"@impulse-ui-native/theme\";\n\nimport type { ColorPickerRootProps } from \"../types\";\nimport { ColorPickerContext } from \"../contexts/color-picker.context\";\nimport { useColorPicker } from \"../hooks/use-color-picker.hook\";\n\nexport const ColorPickerRoot = memo(function ColorPickerRoot({\n children,\n style,\n value,\n defaultValue,\n onChange,\n disabled,\n size,\n commitMode,\n tone,\n ...props\n}: ColorPickerRootProps) {\n const context = useColorPicker({\n value,\n defaultValue,\n onChange,\n disabled,\n size,\n commitMode,\n tone,\n });\n const styles = useThemedStyles(themedStyles);\n const extractedStyleProps = useStyleProps(props);\n const rootStyle = useMemo(\n () => [styles.root, extractedStyleProps, style],\n [styles.root, extractedStyleProps, style],\n );\n\n return (\n <ColorPickerContext.Provider value={context}>\n <View {...props} style={rootStyle}>\n {children}\n </View>\n </ColorPickerContext.Provider>\n );\n});\n\nfunction themedStyles(theme: AppTheme) {\n const tokens = theme.components.colorPicker;\n\n return StyleSheet.create({\n root: {\n gap: tokens.gap,\n padding: tokens.padding,\n borderRadius: tokens.borderRadius,\n borderWidth: tokens.borderWidth,\n borderColor: tokens.borderColor,\n backgroundColor: tokens.backgroundColor,\n },\n });\n}\n"],"mappings":"AAyCM;AAzCN,SAAS,MAAM,eAAe;AAC9B,SAAS,kBAAkB;AAG3B,SAAS,YAAY;AACrB,SAAS,eAAe,uBAAuB;AAG/C,SAAS,0BAA0B;AACnC,SAAS,sBAAsB;AAExB,MAAM,kBAAkB,KAAK,SAASA,iBAAgB;AAAA,EAC3D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAyB;AACvB,QAAM,UAAU,eAAe;AAAA,IAC7B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,SAAS,gBAAgB,YAAY;AAC3C,QAAM,sBAAsB,cAAc,KAAK;AAC/C,QAAM,YAAY;AAAA,IAChB,MAAM,CAAC,OAAO,MAAM,qBAAqB,KAAK;AAAA,IAC9C,CAAC,OAAO,MAAM,qBAAqB,KAAK;AAAA,EAC1C;AAEA,SACE,oBAAC,mBAAmB,UAAnB,EAA4B,OAAO,SAClC,8BAAC,QAAM,GAAG,OAAO,OAAO,WACrB,UACH,GACF;AAEJ,CAAC;AAED,SAAS,aAAa,OAAiB;AACrC,QAAM,SAAS,MAAM,WAAW;AAEhC,SAAO,WAAW,OAAO;AAAA,IACvB,MAAM;AAAA,MACJ,KAAK,OAAO;AAAA,MACZ,SAAS,OAAO;AAAA,MAChB,cAAc,OAAO;AAAA,MACrB,aAAa,OAAO;AAAA,MACpB,aAAa,OAAO;AAAA,MACpB,iBAAiB,OAAO;AAAA,IAC1B;AAAA,EACF,CAAC;AACH;","names":["ColorPickerRoot"]}
|
|
@@ -19,16 +19,17 @@ const ColorPickerSwatch = memo(function ColorPickerSwatch2({
|
|
|
19
19
|
value,
|
|
20
20
|
disabled: rootDisabled,
|
|
21
21
|
size,
|
|
22
|
-
setColor
|
|
22
|
+
setColor,
|
|
23
|
+
tone
|
|
23
24
|
} = useColorPickerContext();
|
|
24
25
|
const parsed = parseHexColor(color);
|
|
25
26
|
const disabled = rootDisabled || disabledProp === true || parsed === void 0;
|
|
26
27
|
const selected = parsed !== void 0 && rgbaToHex(parsed) === value;
|
|
27
|
-
const styles = useThemedStyles(
|
|
28
|
-
|
|
29
|
-
disabled,
|
|
30
|
-
selected
|
|
31
|
-
|
|
28
|
+
const styles = useThemedStyles(
|
|
29
|
+
themedStyles,
|
|
30
|
+
{ size, disabled, selected, tone },
|
|
31
|
+
[size, disabled, selected, tone]
|
|
32
|
+
);
|
|
32
33
|
const colors = useMemo(() => [color, color], [color]);
|
|
33
34
|
const swatchStyle = useCallback(
|
|
34
35
|
(state) => [
|
|
@@ -58,7 +59,7 @@ const ColorPickerSwatch = memo(function ColorPickerSwatch2({
|
|
|
58
59
|
}
|
|
59
60
|
);
|
|
60
61
|
});
|
|
61
|
-
function themedStyles(theme, { size, selected }) {
|
|
62
|
+
function themedStyles(theme, { size, selected, tone, disabled }) {
|
|
62
63
|
const tokens = theme.components.colorPicker;
|
|
63
64
|
const sizeTokens = tokens.sizes[size];
|
|
64
65
|
return StyleSheet.create({
|
|
@@ -72,7 +73,7 @@ function themedStyles(theme, { size, selected }) {
|
|
|
72
73
|
padding: tokens.swatchRingPadding,
|
|
73
74
|
borderRadius: tokens.swatchBorderRadius,
|
|
74
75
|
borderWidth: tokens.swatchRingBorderWidth,
|
|
75
|
-
borderColor: selected ? tokens.selectedBorderColor : "transparent"
|
|
76
|
+
borderColor: selected ? disabled ? tokens.disabledBorderColor : tokens.colors[tone].selectedBorderColor : "transparent"
|
|
76
77
|
},
|
|
77
78
|
color: {
|
|
78
79
|
width: sizeTokens.swatchSize,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/swatch.tsx"],"sourcesContent":["import type {\n GestureResponderEvent,\n PressableStateCallbackType,\n} from \"react-native\";\nimport { memo, useCallback, useMemo } from \"react\";\nimport { StyleSheet } from \"react-native\";\n\nimport type { AppTheme } from \"@impulse-ui-native/theme\";\nimport { useEventCallback } from \"@impulse-ui-native/core\";\nimport { Pressable, View } from \"@impulse-ui-native/primitives\";\nimport { useThemedStyles } from \"@impulse-ui-native/theme\";\n\nimport type {\n ColorPickerSwatchProps,\n ColorPickerSwatchThemeProps,\n} from \"../types\";\nimport { useColorPickerContext } from \"../hooks/use-color-picker-context.hook\";\nimport { parseHexColor, rgbaToHex } from \"../utils/color.utils\";\nimport { ColorGradient } from \"./gradient\";\n\nexport const ColorPickerSwatch = memo(function ColorPickerSwatch({\n color,\n children,\n disabled: disabledProp,\n style,\n onPress,\n ...props\n}: ColorPickerSwatchProps) {\n const {\n value,\n disabled: rootDisabled,\n size,\n setColor,\n } = useColorPickerContext();\n const parsed = parseHexColor(color);\n const disabled =\n rootDisabled || disabledProp === true || parsed === undefined;\n const selected = parsed !== undefined && rgbaToHex(parsed) === value;\n const styles = useThemedStyles(themedStyles
|
|
1
|
+
{"version":3,"sources":["../../src/components/swatch.tsx"],"sourcesContent":["import type {\n GestureResponderEvent,\n PressableStateCallbackType,\n} from \"react-native\";\nimport { memo, useCallback, useMemo } from \"react\";\nimport { StyleSheet } from \"react-native\";\n\nimport type { AppTheme } from \"@impulse-ui-native/theme\";\nimport { useEventCallback } from \"@impulse-ui-native/core\";\nimport { Pressable, View } from \"@impulse-ui-native/primitives\";\nimport { useThemedStyles } from \"@impulse-ui-native/theme\";\n\nimport type {\n ColorPickerSwatchProps,\n ColorPickerSwatchThemeProps,\n} from \"../types\";\nimport { useColorPickerContext } from \"../hooks/use-color-picker-context.hook\";\nimport { parseHexColor, rgbaToHex } from \"../utils/color.utils\";\nimport { ColorGradient } from \"./gradient\";\n\nexport const ColorPickerSwatch = memo(function ColorPickerSwatch({\n color,\n children,\n disabled: disabledProp,\n style,\n onPress,\n ...props\n}: ColorPickerSwatchProps) {\n const {\n value,\n disabled: rootDisabled,\n size,\n setColor,\n tone,\n } = useColorPickerContext();\n const parsed = parseHexColor(color);\n const disabled =\n rootDisabled || disabledProp === true || parsed === undefined;\n const selected = parsed !== undefined && rgbaToHex(parsed) === value;\n const styles = useThemedStyles(\n themedStyles,\n { size, disabled, selected, tone },\n [size, disabled, selected, tone],\n );\n const colors = useMemo(() => [color, color], [color]);\n const swatchStyle = useCallback(\n (state: PressableStateCallbackType) => [\n styles.target,\n typeof style === \"function\" ? style(state) : style,\n ],\n [styles.target, style],\n );\n const handlePress = useEventCallback((event: GestureResponderEvent) => {\n if (disabled) {\n return;\n }\n\n setColor(color);\n onPress?.(event);\n });\n\n return (\n <Pressable\n {...props}\n disabled={disabled}\n style={swatchStyle}\n onPress={handlePress}\n >\n <View style={styles.ring}>\n <View style={styles.color}>\n <ColorGradient colors={colors} checkerboard />\n <View style={styles.content}>{children}</View>\n </View>\n </View>\n </Pressable>\n );\n});\n\nfunction themedStyles(\n theme: AppTheme,\n { size, selected, tone, disabled }: ColorPickerSwatchThemeProps,\n) {\n const tokens = theme.components.colorPicker;\n const sizeTokens = tokens.sizes[size];\n\n return StyleSheet.create({\n target: {\n minWidth: sizeTokens.swatchTargetSize,\n minHeight: sizeTokens.swatchTargetSize,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n ring: {\n padding: tokens.swatchRingPadding,\n borderRadius: tokens.swatchBorderRadius,\n borderWidth: tokens.swatchRingBorderWidth,\n borderColor: selected\n ? disabled\n ? tokens.disabledBorderColor\n : tokens.colors[tone].selectedBorderColor\n : \"transparent\",\n },\n color: {\n width: sizeTokens.swatchSize,\n height: sizeTokens.swatchSize,\n borderRadius: tokens.swatchBorderRadius,\n borderWidth: tokens.borderWidth,\n borderColor: tokens.borderColor,\n overflow: \"hidden\",\n },\n content: {\n ...StyleSheet.flatten(StyleSheet.absoluteFill),\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n });\n}\n"],"mappings":"AAqEQ,SACE,KADF;AAjER,SAAS,MAAM,aAAa,eAAe;AAC3C,SAAS,kBAAkB;AAG3B,SAAS,wBAAwB;AACjC,SAAS,WAAW,YAAY;AAChC,SAAS,uBAAuB;AAMhC,SAAS,6BAA6B;AACtC,SAAS,eAAe,iBAAiB;AACzC,SAAS,qBAAqB;AAEvB,MAAM,oBAAoB,KAAK,SAASA,mBAAkB;AAAA,EAC/D;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA2B;AACzB,QAAM;AAAA,IACJ;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,sBAAsB;AAC1B,QAAM,SAAS,cAAc,KAAK;AAClC,QAAM,WACJ,gBAAgB,iBAAiB,QAAQ,WAAW;AACtD,QAAM,WAAW,WAAW,UAAa,UAAU,MAAM,MAAM;AAC/D,QAAM,SAAS;AAAA,IACb;AAAA,IACA,EAAE,MAAM,UAAU,UAAU,KAAK;AAAA,IACjC,CAAC,MAAM,UAAU,UAAU,IAAI;AAAA,EACjC;AACA,QAAM,SAAS,QAAQ,MAAM,CAAC,OAAO,KAAK,GAAG,CAAC,KAAK,CAAC;AACpD,QAAM,cAAc;AAAA,IAClB,CAAC,UAAsC;AAAA,MACrC,OAAO;AAAA,MACP,OAAO,UAAU,aAAa,MAAM,KAAK,IAAI;AAAA,IAC/C;AAAA,IACA,CAAC,OAAO,QAAQ,KAAK;AAAA,EACvB;AACA,QAAM,cAAc,iBAAiB,CAAC,UAAiC;AACrE,QAAI,UAAU;AACZ;AAAA,IACF;AAEA,aAAS,KAAK;AACd,cAAU,KAAK;AAAA,EACjB,CAAC;AAED,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,MACP,SAAS;AAAA,MAET,8BAAC,QAAK,OAAO,OAAO,MAClB,+BAAC,QAAK,OAAO,OAAO,OAClB;AAAA,4BAAC,iBAAc,QAAgB,cAAY,MAAC;AAAA,QAC5C,oBAAC,QAAK,OAAO,OAAO,SAAU,UAAS;AAAA,SACzC,GACF;AAAA;AAAA,EACF;AAEJ,CAAC;AAED,SAAS,aACP,OACA,EAAE,MAAM,UAAU,MAAM,SAAS,GACjC;AACA,QAAM,SAAS,MAAM,WAAW;AAChC,QAAM,aAAa,OAAO,MAAM,IAAI;AAEpC,SAAO,WAAW,OAAO;AAAA,IACvB,QAAQ;AAAA,MACN,UAAU,WAAW;AAAA,MACrB,WAAW,WAAW;AAAA,MACtB,YAAY;AAAA,MACZ,gBAAgB;AAAA,IAClB;AAAA,IACA,MAAM;AAAA,MACJ,SAAS,OAAO;AAAA,MAChB,cAAc,OAAO;AAAA,MACrB,aAAa,OAAO;AAAA,MACpB,aAAa,WACT,WACE,OAAO,sBACP,OAAO,OAAO,IAAI,EAAE,sBACtB;AAAA,IACN;AAAA,IACA,OAAO;AAAA,MACL,OAAO,WAAW;AAAA,MAClB,QAAQ,WAAW;AAAA,MACnB,cAAc,OAAO;AAAA,MACrB,aAAa,OAAO;AAAA,MACpB,aAAa,OAAO;AAAA,MACpB,UAAU;AAAA,IACZ;AAAA,IACA,SAAS;AAAA,MACP,GAAG,WAAW,QAAQ,WAAW,YAAY;AAAA,MAC7C,YAAY;AAAA,MACZ,gBAAgB;AAAA,IAClB;AAAA,EACF,CAAC;AACH;","names":["ColorPickerSwatch"]}
|
|
@@ -7,6 +7,6 @@ import '@impulse-ui-native/theme';
|
|
|
7
7
|
import '../types/color.types.mjs';
|
|
8
8
|
import 'react-native-reanimated';
|
|
9
9
|
|
|
10
|
-
declare function useColorPicker({ value, defaultValue, onChange, disabled, size, commitMode, }: ColorPickerRootProps): ColorPickerContextData;
|
|
10
|
+
declare function useColorPicker({ value, defaultValue, onChange, disabled, size, commitMode, tone, }: ColorPickerRootProps): ColorPickerContextData;
|
|
11
11
|
|
|
12
12
|
export { useColorPicker };
|
|
@@ -20,7 +20,8 @@ function useColorPicker({
|
|
|
20
20
|
onChange,
|
|
21
21
|
disabled = false,
|
|
22
22
|
size = "medium",
|
|
23
|
-
commitMode = "immediate"
|
|
23
|
+
commitMode = "immediate",
|
|
24
|
+
tone = "primary"
|
|
24
25
|
}) {
|
|
25
26
|
const theme = useTheme();
|
|
26
27
|
const [draft, setDraft] = useState();
|
|
@@ -184,6 +185,7 @@ function useColorPicker({
|
|
|
184
185
|
disabled,
|
|
185
186
|
size,
|
|
186
187
|
commitMode,
|
|
188
|
+
tone,
|
|
187
189
|
setColor,
|
|
188
190
|
setHue,
|
|
189
191
|
setAlpha,
|
|
@@ -202,6 +204,7 @@ function useColorPicker({
|
|
|
202
204
|
disabled,
|
|
203
205
|
size,
|
|
204
206
|
commitMode,
|
|
207
|
+
tone,
|
|
205
208
|
setColor,
|
|
206
209
|
setHue,
|
|
207
210
|
setAlpha,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/use-color-picker.hook.ts"],"sourcesContent":["import { useLayoutEffect, useMemo, useRef, useState } from \"react\";\n\nimport {\n useControllableState,\n useEventCallback,\n} from \"@impulse-ui-native/core\";\nimport { useTheme } from \"@impulse-ui-native/theme\";\n\nimport type {\n ColorChannel,\n ColorPickerContextData,\n ColorPickerDraft,\n ColorPickerRootProps,\n HsvaColor,\n} from \"../types\";\nimport { FallbackColor } from \"../constants/color.constants\";\nimport {\n clampColorValue,\n hsvaToHex,\n hsvaToRgba,\n parseHexColor,\n rgbaToHex,\n rgbaToHsva,\n} from \"../utils/color.utils\";\nimport { useColorPickerMotion } from \"./use-color-picker-motion.hook\";\n\nexport function useColorPicker({\n value,\n defaultValue,\n onChange,\n disabled = false,\n size = \"medium\",\n commitMode = \"immediate\",\n}: ColorPickerRootProps): ColorPickerContextData {\n const theme = useTheme();\n const [draft, setDraft] = useState<ColorPickerDraft>();\n const [resetKey, setResetKey] = useState(0);\n const [interactionSnapshot, setInteractionSnapshot] = useState<HsvaColor>();\n const interactionActive = useRef(false);\n const [committed, setCommitted] = useControllableState<string>({\n prop: value,\n defaultProp: defaultValue ?? theme.colors.primary.value,\n onChange,\n });\n const base = useMemo(\n () =>\n rgbaToHex(\n parseHexColor(committed) ??\n parseHexColor(theme.colors.primary.value) ??\n FallbackColor,\n ),\n [committed, theme.colors.primary.value],\n );\n const hsva = useMemo(\n () =>\n interactionSnapshot ??\n (draft?.base === base && draft.commitMode === commitMode\n ? draft.hsva\n : rgbaToHsva(parseHexColor(base) ?? FallbackColor)),\n [base, draft, commitMode, interactionSnapshot],\n );\n const rgba = useMemo(() => hsvaToRgba(hsva), [hsva]);\n const currentValue = rgbaToHex(rgba);\n const hsvaRef = useRef(hsva);\n const visualMotion = useColorPickerMotion(hsva, resetKey);\n\n const update = useEventCallback((next: HsvaColor, fromGesture = false) => {\n const current = hsvaRef.current;\n\n if (\n disabled ||\n (next.h === current.h &&\n next.s === current.s &&\n next.v === current.v &&\n next.a === current.a)\n ) {\n return;\n }\n\n if (fromGesture && !interactionActive.current) {\n interactionActive.current = true;\n setInteractionSnapshot(current);\n }\n\n if (!fromGesture && interactionActive.current) {\n interactionActive.current = false;\n setInteractionSnapshot(undefined);\n visualMotion.finish();\n }\n\n hsvaRef.current = next;\n\n const nextValue = hsvaToHex(next);\n if (!fromGesture) {\n setDraft({\n commitMode,\n base: commitMode === \"immediate\" ? nextValue : base,\n hsva: next,\n });\n }\n\n if (commitMode === \"immediate\" && nextValue !== hsvaToHex(current)) {\n if (value !== undefined) {\n onChange?.(nextValue);\n } else {\n setCommitted(nextValue);\n }\n }\n });\n\n const finishGesture = useEventCallback(() => {\n const next = hsvaRef.current;\n interactionActive.current = false;\n setInteractionSnapshot(undefined);\n setDraft({\n commitMode,\n base: commitMode === \"immediate\" ? hsvaToHex(next) : base,\n hsva: next,\n });\n\n visualMotion.finish();\n });\n const setGestureHue = useEventCallback((h: number) =>\n update({ ...hsvaRef.current, h: clampColorValue(h, 0, 360) }, true),\n );\n const setGestureAlpha = useEventCallback((a: number) =>\n update({ ...hsvaRef.current, a: clampColorValue(a, 0, 1) }, true),\n );\n const setGestureSpectrum = useEventCallback((s: number, v: number) =>\n update(\n {\n ...hsvaRef.current,\n s: clampColorValue(s, 0, 1),\n v: clampColorValue(v, 0, 1),\n },\n true,\n ),\n );\n const gesture = useMemo(\n () => ({\n setHue: setGestureHue,\n setAlpha: setGestureAlpha,\n setSpectrum: setGestureSpectrum,\n }),\n [setGestureAlpha, setGestureHue, setGestureSpectrum],\n );\n const motion = useMemo(\n () => ({ ...visualMotion, finish: finishGesture }),\n [finishGesture, visualMotion],\n );\n\n const setColor = useEventCallback((next: string): boolean => {\n const parsed = parseHexColor(next);\n\n if (disabled || !parsed) {\n return false;\n }\n\n const nextHsva = rgbaToHsva(parsed);\n update({\n ...nextHsva,\n h: nextHsva.s === 0 ? hsvaRef.current.h : nextHsva.h,\n });\n\n return true;\n });\n const setHue = useEventCallback((hue: number) =>\n update({ ...hsvaRef.current, h: clampColorValue(hue, 0, 360) }),\n );\n const setAlpha = useEventCallback((alpha: number) =>\n update({ ...hsvaRef.current, a: clampColorValue(alpha, 0, 1) }),\n );\n const setSpectrum = useEventCallback(\n (saturation: number, brightness: number) =>\n update({\n ...hsvaRef.current,\n s: clampColorValue(saturation, 0, 1),\n v: clampColorValue(brightness, 0, 1),\n }),\n );\n const setChannel = useEventCallback(\n (channel: ColorChannel, channelValue: number) => {\n const next = rgbaToHsva({\n ...hsvaToRgba(hsvaRef.current),\n [channel]: Math.round(clampColorValue(channelValue, 0, 255)),\n });\n update({ ...next, h: next.s === 0 ? hsvaRef.current.h : next.h });\n },\n );\n const apply = useEventCallback(() => {\n if (disabled) {\n return;\n }\n\n const nextHsva = hsvaRef.current;\n const nextValue = hsvaToHex(nextHsva);\n interactionActive.current = false;\n setInteractionSnapshot(undefined);\n\n if (nextValue !== base) {\n setCommitted(nextValue);\n }\n\n setDraft({ base: nextValue, hsva: nextHsva, commitMode });\n setResetKey((key) => key + 1);\n });\n const cancel = useEventCallback(() => {\n if (disabled) {\n return;\n }\n\n interactionActive.current = false;\n setInteractionSnapshot(undefined);\n setDraft(undefined);\n setResetKey((key) => key + 1);\n });\n\n const context = useMemo(\n () => ({\n gesture,\n motion,\n resetKey,\n value: currentValue,\n rgba,\n hsva,\n disabled,\n size,\n commitMode,\n setColor,\n setHue,\n setAlpha,\n setSpectrum,\n setChannel,\n apply,\n cancel,\n }),\n [\n gesture,\n motion,\n resetKey,\n currentValue,\n rgba,\n hsva,\n disabled,\n size,\n commitMode,\n setColor,\n setHue,\n setAlpha,\n setSpectrum,\n setChannel,\n apply,\n cancel,\n ],\n );\n\n useLayoutEffect(() => {\n if (!interactionActive.current) {\n hsvaRef.current = hsva;\n }\n }, [hsva]);\n\n // Discard obsolete transient edits rather than restoring them if the caller\n // later returns to a previously selected color or commit mode.\n if (\n draft !== undefined &&\n (draft.base !== base || draft.commitMode !== commitMode)\n ) {\n setDraft(undefined);\n }\n\n return context;\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/use-color-picker.hook.ts"],"sourcesContent":["import { useLayoutEffect, useMemo, useRef, useState } from \"react\";\n\nimport {\n useControllableState,\n useEventCallback,\n} from \"@impulse-ui-native/core\";\nimport { useTheme } from \"@impulse-ui-native/theme\";\n\nimport type {\n ColorChannel,\n ColorPickerContextData,\n ColorPickerDraft,\n ColorPickerRootProps,\n HsvaColor,\n} from \"../types\";\nimport { FallbackColor } from \"../constants/color.constants\";\nimport {\n clampColorValue,\n hsvaToHex,\n hsvaToRgba,\n parseHexColor,\n rgbaToHex,\n rgbaToHsva,\n} from \"../utils/color.utils\";\nimport { useColorPickerMotion } from \"./use-color-picker-motion.hook\";\n\nexport function useColorPicker({\n value,\n defaultValue,\n onChange,\n disabled = false,\n size = \"medium\",\n commitMode = \"immediate\",\n tone = \"primary\",\n}: ColorPickerRootProps): ColorPickerContextData {\n const theme = useTheme();\n const [draft, setDraft] = useState<ColorPickerDraft>();\n const [resetKey, setResetKey] = useState(0);\n const [interactionSnapshot, setInteractionSnapshot] = useState<HsvaColor>();\n const interactionActive = useRef(false);\n const [committed, setCommitted] = useControllableState<string>({\n prop: value,\n defaultProp: defaultValue ?? theme.colors.primary.value,\n onChange,\n });\n const base = useMemo(\n () =>\n rgbaToHex(\n parseHexColor(committed) ??\n parseHexColor(theme.colors.primary.value) ??\n FallbackColor,\n ),\n [committed, theme.colors.primary.value],\n );\n const hsva = useMemo(\n () =>\n interactionSnapshot ??\n (draft?.base === base && draft.commitMode === commitMode\n ? draft.hsva\n : rgbaToHsva(parseHexColor(base) ?? FallbackColor)),\n [base, draft, commitMode, interactionSnapshot],\n );\n const rgba = useMemo(() => hsvaToRgba(hsva), [hsva]);\n const currentValue = rgbaToHex(rgba);\n const hsvaRef = useRef(hsva);\n const visualMotion = useColorPickerMotion(hsva, resetKey);\n\n const update = useEventCallback((next: HsvaColor, fromGesture = false) => {\n const current = hsvaRef.current;\n\n if (\n disabled ||\n (next.h === current.h &&\n next.s === current.s &&\n next.v === current.v &&\n next.a === current.a)\n ) {\n return;\n }\n\n if (fromGesture && !interactionActive.current) {\n interactionActive.current = true;\n setInteractionSnapshot(current);\n }\n\n if (!fromGesture && interactionActive.current) {\n interactionActive.current = false;\n setInteractionSnapshot(undefined);\n visualMotion.finish();\n }\n\n hsvaRef.current = next;\n\n const nextValue = hsvaToHex(next);\n if (!fromGesture) {\n setDraft({\n commitMode,\n base: commitMode === \"immediate\" ? nextValue : base,\n hsva: next,\n });\n }\n\n if (commitMode === \"immediate\" && nextValue !== hsvaToHex(current)) {\n if (value !== undefined) {\n onChange?.(nextValue);\n } else {\n setCommitted(nextValue);\n }\n }\n });\n\n const finishGesture = useEventCallback(() => {\n const next = hsvaRef.current;\n interactionActive.current = false;\n setInteractionSnapshot(undefined);\n setDraft({\n commitMode,\n base: commitMode === \"immediate\" ? hsvaToHex(next) : base,\n hsva: next,\n });\n\n visualMotion.finish();\n });\n const setGestureHue = useEventCallback((h: number) =>\n update({ ...hsvaRef.current, h: clampColorValue(h, 0, 360) }, true),\n );\n const setGestureAlpha = useEventCallback((a: number) =>\n update({ ...hsvaRef.current, a: clampColorValue(a, 0, 1) }, true),\n );\n const setGestureSpectrum = useEventCallback((s: number, v: number) =>\n update(\n {\n ...hsvaRef.current,\n s: clampColorValue(s, 0, 1),\n v: clampColorValue(v, 0, 1),\n },\n true,\n ),\n );\n const gesture = useMemo(\n () => ({\n setHue: setGestureHue,\n setAlpha: setGestureAlpha,\n setSpectrum: setGestureSpectrum,\n }),\n [setGestureAlpha, setGestureHue, setGestureSpectrum],\n );\n const motion = useMemo(\n () => ({ ...visualMotion, finish: finishGesture }),\n [finishGesture, visualMotion],\n );\n\n const setColor = useEventCallback((next: string): boolean => {\n const parsed = parseHexColor(next);\n\n if (disabled || !parsed) {\n return false;\n }\n\n const nextHsva = rgbaToHsva(parsed);\n update({\n ...nextHsva,\n h: nextHsva.s === 0 ? hsvaRef.current.h : nextHsva.h,\n });\n\n return true;\n });\n const setHue = useEventCallback((hue: number) =>\n update({ ...hsvaRef.current, h: clampColorValue(hue, 0, 360) }),\n );\n const setAlpha = useEventCallback((alpha: number) =>\n update({ ...hsvaRef.current, a: clampColorValue(alpha, 0, 1) }),\n );\n const setSpectrum = useEventCallback(\n (saturation: number, brightness: number) =>\n update({\n ...hsvaRef.current,\n s: clampColorValue(saturation, 0, 1),\n v: clampColorValue(brightness, 0, 1),\n }),\n );\n const setChannel = useEventCallback(\n (channel: ColorChannel, channelValue: number) => {\n const next = rgbaToHsva({\n ...hsvaToRgba(hsvaRef.current),\n [channel]: Math.round(clampColorValue(channelValue, 0, 255)),\n });\n update({ ...next, h: next.s === 0 ? hsvaRef.current.h : next.h });\n },\n );\n const apply = useEventCallback(() => {\n if (disabled) {\n return;\n }\n\n const nextHsva = hsvaRef.current;\n const nextValue = hsvaToHex(nextHsva);\n interactionActive.current = false;\n setInteractionSnapshot(undefined);\n\n if (nextValue !== base) {\n setCommitted(nextValue);\n }\n\n setDraft({ base: nextValue, hsva: nextHsva, commitMode });\n setResetKey((key) => key + 1);\n });\n const cancel = useEventCallback(() => {\n if (disabled) {\n return;\n }\n\n interactionActive.current = false;\n setInteractionSnapshot(undefined);\n setDraft(undefined);\n setResetKey((key) => key + 1);\n });\n\n const context = useMemo(\n () => ({\n gesture,\n motion,\n resetKey,\n value: currentValue,\n rgba,\n hsva,\n disabled,\n size,\n commitMode,\n tone,\n setColor,\n setHue,\n setAlpha,\n setSpectrum,\n setChannel,\n apply,\n cancel,\n }),\n [\n gesture,\n motion,\n resetKey,\n currentValue,\n rgba,\n hsva,\n disabled,\n size,\n commitMode,\n tone,\n setColor,\n setHue,\n setAlpha,\n setSpectrum,\n setChannel,\n apply,\n cancel,\n ],\n );\n\n useLayoutEffect(() => {\n if (!interactionActive.current) {\n hsvaRef.current = hsva;\n }\n }, [hsva]);\n\n // Discard obsolete transient edits rather than restoring them if the caller\n // later returns to a previously selected color or commit mode.\n if (\n draft !== undefined &&\n (draft.base !== base || draft.commitMode !== commitMode)\n ) {\n setDraft(undefined);\n }\n\n return context;\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.d.mts
CHANGED
|
@@ -9,12 +9,12 @@ import '@impulse-ui-native/input';
|
|
|
9
9
|
declare const ColorPicker: react.NamedExoticComponent<ColorPickerProps> & {
|
|
10
10
|
readonly type: ({ showAlpha, showPresets, presets, presetsLabel, commitMode, ...props }: ColorPickerProps) => react.JSX.Element;
|
|
11
11
|
} & {
|
|
12
|
-
Root: react.MemoExoticComponent<({ children, style, value, defaultValue, onChange, disabled, size, commitMode, ...props }: ColorPickerRootProps) => react.JSX.Element>;
|
|
12
|
+
Root: react.MemoExoticComponent<({ children, style, value, defaultValue, onChange, disabled, size, commitMode, tone, ...props }: ColorPickerRootProps) => react.JSX.Element>;
|
|
13
13
|
Spectrum: react.MemoExoticComponent<() => react.JSX.Element>;
|
|
14
14
|
HueSlider: react.MemoExoticComponent<() => react.JSX.Element>;
|
|
15
15
|
AlphaSlider: react.MemoExoticComponent<() => react.JSX.Element>;
|
|
16
16
|
Preview: react.MemoExoticComponent<({ style, children, ...props }: _impulse_ui_native_primitives.ViewProps) => react.JSX.Element>;
|
|
17
|
-
HexInput: react.MemoExoticComponent<({ disabled: disabledProp, onBlur, onSubmitEditing, error, ...props }: ColorPickerHexInputProps) => react.JSX.Element>;
|
|
17
|
+
HexInput: react.MemoExoticComponent<({ disabled: disabledProp, onBlur, onSubmitEditing, error, tone, ...props }: ColorPickerHexInputProps) => react.JSX.Element>;
|
|
18
18
|
ChannelInput: react.MemoExoticComponent<({ channel, label, variant, tone, }: ColorPickerChannelInputProps) => react.JSX.Element>;
|
|
19
19
|
AlphaInput: react.MemoExoticComponent<({ label, variant, tone, }: ColorPickerAlphaInputProps) => react.JSX.Element>;
|
|
20
20
|
Swatch: react.MemoExoticComponent<({ color, children, disabled: disabledProp, style, onPress, ...props }: ColorPickerSwatchProps) => react.JSX.Element>;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { SharedValue, DerivedValue } from 'react-native-reanimated';
|
|
2
|
-
import { ColorPickerPreset, ComponentSize } from '@impulse-ui-native/theme';
|
|
2
|
+
import { ColorPickerPreset, ComponentTone, ComponentSize } from '@impulse-ui-native/theme';
|
|
3
3
|
import { HsvaColor, RgbaColor, ColorPickerCommitMode, ColorChannel } from './color.types.mjs';
|
|
4
4
|
|
|
5
5
|
interface ColorPickerPresetEntryProps {
|
|
6
6
|
preset: ColorPickerPreset;
|
|
7
7
|
}
|
|
8
8
|
interface ColorPickerContextData {
|
|
9
|
+
tone: ComponentTone;
|
|
9
10
|
gesture: ColorPickerGestureHandlers;
|
|
10
11
|
motion: ColorPickerMotion;
|
|
11
12
|
resetKey: number;
|
|
@@ -47,6 +48,7 @@ interface ColorPickerSizeThemeProps {
|
|
|
47
48
|
disabled?: boolean;
|
|
48
49
|
}
|
|
49
50
|
interface ColorPickerSwatchThemeProps extends ColorPickerSizeThemeProps {
|
|
51
|
+
tone: ComponentTone;
|
|
50
52
|
selected: boolean;
|
|
51
53
|
}
|
|
52
54
|
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { PropsWithChildren, ReactNode } from 'react';
|
|
2
2
|
import { InputProps } from '@impulse-ui-native/input';
|
|
3
3
|
import { ButtonProps, ViewProps, PressableCoreProps } from '@impulse-ui-native/primitives';
|
|
4
|
-
import { ComponentSize, ColorPickerPreset } from '@impulse-ui-native/theme';
|
|
4
|
+
import { ComponentTone, ComponentSize, ColorPickerPreset } from '@impulse-ui-native/theme';
|
|
5
5
|
import { ColorChannel, ColorPickerCommitMode } from './color.types.mjs';
|
|
6
6
|
|
|
7
7
|
interface ColorPickerRootProps extends ViewProps {
|
|
8
|
+
tone?: ComponentTone;
|
|
8
9
|
/** Hex: RGB, RGBA, RRGGBB, or RRGGBBAA, with an optional #. */
|
|
9
10
|
value?: string;
|
|
10
11
|
defaultValue?: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@impulse-ui-native/color-picker",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "15.0.0",
|
|
4
4
|
"description": "Modular spectrum color picker with custom hex/RGB entry and theme presets for React Native.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react-native",
|
|
@@ -28,12 +28,12 @@
|
|
|
28
28
|
],
|
|
29
29
|
"sideEffects": false,
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@impulse-ui-native/core": "
|
|
32
|
-
"@impulse-ui-native/icon": "
|
|
33
|
-
"@impulse-ui-native/primitives": "
|
|
34
|
-
"@impulse-ui-native/theme": "
|
|
35
|
-
"@impulse-ui-native/input": "
|
|
36
|
-
"@impulse-ui-native/slider": "
|
|
31
|
+
"@impulse-ui-native/core": "15.0.0",
|
|
32
|
+
"@impulse-ui-native/icon": "15.0.0",
|
|
33
|
+
"@impulse-ui-native/primitives": "15.0.0",
|
|
34
|
+
"@impulse-ui-native/theme": "15.0.0",
|
|
35
|
+
"@impulse-ui-native/input": "15.0.0",
|
|
36
|
+
"@impulse-ui-native/slider": "15.0.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@impulse-ui-native/eslint-config": "1.0.0",
|