@kanso-labs/react-native-kanso-ui 0.8.0 → 0.10.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.
Files changed (253) hide show
  1. package/README.md +4 -3
  2. package/dist/autocomplete/index.js +15 -1
  3. package/dist/autocomplete/index.js.map +1 -1
  4. package/dist/badge/index.js +9 -70
  5. package/dist/badge/index.js.map +1 -1
  6. package/dist/button/group.d.ts +5 -0
  7. package/dist/button/group.js +115 -0
  8. package/dist/button/group.js.map +1 -0
  9. package/dist/button/index.d.ts +4 -1
  10. package/dist/button/index.js +45 -23
  11. package/dist/button/index.js.map +1 -1
  12. package/dist/button/palettes.d.ts +2 -0
  13. package/dist/button/slots.js +2 -1
  14. package/dist/button/slots.js.map +1 -1
  15. package/dist/calendar/index.js +351 -182
  16. package/dist/calendar/index.js.map +1 -1
  17. package/dist/calendar/styles.js +33 -2
  18. package/dist/calendar/styles.js.map +1 -1
  19. package/dist/carousel/arrangement.d.ts +5 -0
  20. package/dist/carousel/arrangement.js +123 -0
  21. package/dist/carousel/arrangement.js.map +1 -0
  22. package/dist/chequer/index.js +95 -0
  23. package/dist/chequer/index.js.map +1 -0
  24. package/dist/collection/index.d.ts +157 -0
  25. package/dist/collection/index.js +1331 -0
  26. package/dist/collection/index.js.map +1 -0
  27. package/dist/color-thumb/index.js +56 -0
  28. package/dist/color-thumb/index.js.map +1 -0
  29. package/dist/components/badge/index.d.ts +48 -0
  30. package/dist/components/badge/index.js +122 -0
  31. package/dist/components/badge/index.js.map +1 -0
  32. package/dist/{badge → components/badge}/styles.js +10 -6
  33. package/dist/components/badge/styles.js.map +1 -0
  34. package/dist/components/breadcrumbs/index.d.ts +66 -0
  35. package/dist/components/breadcrumbs/index.js +285 -0
  36. package/dist/components/breadcrumbs/index.js.map +1 -0
  37. package/dist/components/button/index.d.ts +4 -2
  38. package/dist/components/button/index.js +227 -188
  39. package/dist/components/button/index.js.map +1 -1
  40. package/dist/components/button-group/index.d.ts +87 -0
  41. package/dist/components/button-group/index.js +275 -0
  42. package/dist/components/button-group/index.js.map +1 -0
  43. package/dist/components/calendar/index.d.ts +11 -3
  44. package/dist/components/calendar/index.js +60 -45
  45. package/dist/components/calendar/index.js.map +1 -1
  46. package/dist/components/carousel/index.d.ts +72 -0
  47. package/dist/components/carousel/index.js +496 -0
  48. package/dist/components/carousel/index.js.map +1 -0
  49. package/dist/components/checkbox/index.d.ts +7 -1
  50. package/dist/components/checkbox/index.js +183 -138
  51. package/dist/components/checkbox/index.js.map +1 -1
  52. package/dist/components/checkbox-group/index.d.ts +92 -0
  53. package/dist/components/checkbox-group/index.js +306 -0
  54. package/dist/components/checkbox-group/index.js.map +1 -0
  55. package/dist/components/code/index.d.ts +25 -0
  56. package/dist/components/code/index.js +87 -0
  57. package/dist/components/code/index.js.map +1 -0
  58. package/dist/components/color-area/index.d.ts +85 -0
  59. package/dist/components/color-area/index.js +630 -0
  60. package/dist/components/color-area/index.js.map +1 -0
  61. package/dist/components/color-field/index.d.ts +144 -0
  62. package/dist/components/color-field/index.js +516 -0
  63. package/dist/components/color-field/index.js.map +1 -0
  64. package/dist/components/color-picker/index.d.ts +74 -0
  65. package/dist/components/color-picker/index.js +317 -0
  66. package/dist/components/color-picker/index.js.map +1 -0
  67. package/dist/components/color-slider/index.d.ts +82 -0
  68. package/dist/components/color-slider/index.js +456 -0
  69. package/dist/components/color-slider/index.js.map +1 -0
  70. package/dist/components/color-swatch/index.d.ts +46 -0
  71. package/dist/components/color-swatch/index.js +127 -0
  72. package/dist/components/color-swatch/index.js.map +1 -0
  73. package/dist/components/color-swatch-picker/index.d.ts +81 -0
  74. package/dist/components/color-swatch-picker/index.js +287 -0
  75. package/dist/components/color-swatch-picker/index.js.map +1 -0
  76. package/dist/components/color-wheel/index.d.ts +71 -0
  77. package/dist/components/color-wheel/index.js +407 -0
  78. package/dist/components/color-wheel/index.js.map +1 -0
  79. package/dist/components/combo-box/index.d.ts +193 -0
  80. package/dist/components/combo-box/index.js +616 -0
  81. package/dist/components/combo-box/index.js.map +1 -0
  82. package/dist/components/container/index.d.ts +47 -0
  83. package/dist/components/container/index.js +85 -0
  84. package/dist/components/container/index.js.map +1 -0
  85. package/dist/components/date-field/index.d.ts +120 -0
  86. package/dist/components/date-field/index.js +111 -0
  87. package/dist/components/date-field/index.js.map +1 -0
  88. package/dist/components/date-picker/index.d.ts +130 -0
  89. package/dist/components/date-picker/index.js +310 -0
  90. package/dist/components/date-picker/index.js.map +1 -0
  91. package/dist/components/date-range-picker/index.d.ts +139 -0
  92. package/dist/components/date-range-picker/index.js +421 -0
  93. package/dist/components/date-range-picker/index.js.map +1 -0
  94. package/dist/components/disclosure/index.d.ts +94 -0
  95. package/dist/components/disclosure/index.js +365 -0
  96. package/dist/components/disclosure/index.js.map +1 -0
  97. package/dist/components/disclosure-group/index.d.ts +61 -0
  98. package/dist/components/disclosure-group/index.js +100 -0
  99. package/dist/components/disclosure-group/index.js.map +1 -0
  100. package/dist/components/drop-zone/index.d.ts +113 -0
  101. package/dist/components/drop-zone/index.js +304 -0
  102. package/dist/components/drop-zone/index.js.map +1 -0
  103. package/dist/components/fab/index.d.ts +80 -0
  104. package/dist/components/fab/index.js +246 -0
  105. package/dist/components/fab/index.js.map +1 -0
  106. package/dist/components/fab-menu/index.d.ts +120 -0
  107. package/dist/components/fab-menu/index.js +640 -0
  108. package/dist/components/fab-menu/index.js.map +1 -0
  109. package/dist/components/feed/index.d.ts +57 -0
  110. package/dist/components/feed/index.js +167 -0
  111. package/dist/components/feed/index.js.map +1 -0
  112. package/dist/components/form/index.d.ts +3 -2
  113. package/dist/components/form/index.js.map +1 -1
  114. package/dist/components/icon-button/index.d.ts +4 -2
  115. package/dist/components/icon-button/index.js +204 -171
  116. package/dist/components/icon-button/index.js.map +1 -1
  117. package/dist/components/keycap/index.d.ts +27 -0
  118. package/dist/components/keycap/index.js +136 -0
  119. package/dist/components/keycap/index.js.map +1 -0
  120. package/dist/components/list/index.d.ts +15 -158
  121. package/dist/components/list/index.js +21 -1047
  122. package/dist/components/list/index.js.map +1 -1
  123. package/dist/components/list-box/index.d.ts +73 -0
  124. package/dist/components/list-box/index.js +82 -0
  125. package/dist/components/list-box/index.js.map +1 -0
  126. package/dist/components/loading-indicator/index.d.ts +32 -0
  127. package/dist/components/loading-indicator/index.js +174 -0
  128. package/dist/components/loading-indicator/index.js.map +1 -0
  129. package/dist/components/menu/index.js +1 -1
  130. package/dist/components/navigation-tree/index.d.ts +117 -0
  131. package/dist/components/navigation-tree/index.js +135 -0
  132. package/dist/components/navigation-tree/index.js.map +1 -0
  133. package/dist/components/number-field/index.js +132 -143
  134. package/dist/components/number-field/index.js.map +1 -1
  135. package/dist/components/range-calendar/index.d.ts +69 -0
  136. package/dist/components/range-calendar/index.js +144 -0
  137. package/dist/components/range-calendar/index.js.map +1 -0
  138. package/dist/components/search-view/index.d.ts +78 -0
  139. package/dist/components/search-view/index.js +570 -0
  140. package/dist/components/search-view/index.js.map +1 -0
  141. package/dist/components/select/index.d.ts +152 -0
  142. package/dist/components/select/index.js +419 -0
  143. package/dist/components/select/index.js.map +1 -0
  144. package/dist/components/separator/index.d.ts +3 -2
  145. package/dist/components/separator/index.js +29 -26
  146. package/dist/components/separator/index.js.map +1 -1
  147. package/dist/components/slider/index.d.ts +111 -0
  148. package/dist/components/slider/index.js +673 -0
  149. package/dist/components/slider/index.js.map +1 -0
  150. package/dist/components/split-button/index.d.ts +77 -0
  151. package/dist/components/split-button/index.js +354 -0
  152. package/dist/components/split-button/index.js.map +1 -0
  153. package/dist/components/supporting-pane/index.d.ts +44 -0
  154. package/dist/components/supporting-pane/index.js +109 -0
  155. package/dist/components/supporting-pane/index.js.map +1 -0
  156. package/dist/components/tabs/index.d.ts +196 -0
  157. package/dist/components/tabs/index.js +1137 -0
  158. package/dist/components/tabs/index.js.map +1 -0
  159. package/dist/components/text/index.d.ts +1 -1
  160. package/dist/components/text/index.js +49 -21
  161. package/dist/components/text/index.js.map +1 -1
  162. package/dist/components/text-area/index.d.ts +145 -0
  163. package/dist/components/text-area/index.js +231 -0
  164. package/dist/components/text-area/index.js.map +1 -0
  165. package/dist/components/time-field/index.d.ts +43 -0
  166. package/dist/components/time-field/index.js +107 -0
  167. package/dist/components/time-field/index.js.map +1 -0
  168. package/dist/components/time-picker/index.d.ts +65 -0
  169. package/dist/components/time-picker/index.js +1168 -0
  170. package/dist/components/time-picker/index.js.map +1 -0
  171. package/dist/components/toolbar/index.d.ts +53 -0
  172. package/dist/components/toolbar/index.js +185 -0
  173. package/dist/components/toolbar/index.js.map +1 -0
  174. package/dist/components/tooltip/index.d.ts +101 -0
  175. package/dist/components/tooltip/index.js +223 -0
  176. package/dist/components/tooltip/index.js.map +1 -0
  177. package/dist/components/tree/index.d.ts +112 -0
  178. package/dist/components/tree/index.js +157 -0
  179. package/dist/components/tree/index.js.map +1 -0
  180. package/dist/control/group.js +23 -0
  181. package/dist/control/group.js.map +1 -0
  182. package/dist/disclosure/chevron.js +75 -0
  183. package/dist/disclosure/chevron.js.map +1 -0
  184. package/dist/disclosure/index.js +7 -0
  185. package/dist/disclosure/index.js.map +1 -0
  186. package/dist/drop/index.d.ts +54 -0
  187. package/dist/drop/index.js +161 -0
  188. package/dist/drop/index.js.map +1 -0
  189. package/dist/fab/index.d.ts +19 -0
  190. package/dist/fab/index.js +147 -0
  191. package/dist/fab/index.js.map +1 -0
  192. package/dist/field/chevron.js +74 -0
  193. package/dist/field/chevron.js.map +1 -0
  194. package/dist/field/index.d.ts +2 -1
  195. package/dist/field/index.js +350 -153
  196. package/dist/field/index.js.map +1 -1
  197. package/dist/field/styles.js +27 -0
  198. package/dist/field/styles.js.map +1 -1
  199. package/dist/files/index.d.ts +18 -0
  200. package/dist/files/index.js +107 -0
  201. package/dist/files/index.js.map +1 -0
  202. package/dist/form/index.d.ts +6 -4
  203. package/dist/form/index.js +64 -85
  204. package/dist/form/index.js.map +1 -1
  205. package/dist/glyphs/index.js +92 -1
  206. package/dist/glyphs/index.js.map +1 -1
  207. package/dist/i18n/index.js +20 -1
  208. package/dist/i18n/index.js.map +1 -1
  209. package/dist/i18n/messages.js +1394 -34
  210. package/dist/i18n/messages.js.map +1 -1
  211. package/dist/index.d.ts +51 -6
  212. package/dist/index.js +47 -4
  213. package/dist/indicator/paths.js +23 -1
  214. package/dist/indicator/paths.js.map +1 -1
  215. package/dist/modal/index.js +96 -68
  216. package/dist/modal/index.js.map +1 -1
  217. package/dist/navigation/index.js +8 -5
  218. package/dist/navigation/index.js.map +1 -1
  219. package/dist/number/keyboard.js +16 -0
  220. package/dist/number/keyboard.js.map +1 -0
  221. package/dist/overlay/anchored.js +68 -38
  222. package/dist/overlay/anchored.js.map +1 -1
  223. package/dist/overlay/keyboard.js +57 -0
  224. package/dist/overlay/keyboard.js.map +1 -0
  225. package/dist/overlay/panel.js +173 -19
  226. package/dist/overlay/panel.js.map +1 -1
  227. package/dist/overlay/placement.js +16 -2
  228. package/dist/overlay/placement.js.map +1 -1
  229. package/dist/picker/index.js +322 -0
  230. package/dist/picker/index.js.map +1 -0
  231. package/dist/press/index.d.ts +2 -0
  232. package/dist/press/index.js +102 -100
  233. package/dist/press/index.js.map +1 -1
  234. package/dist/row/index.js +77 -69
  235. package/dist/row/index.js.map +1 -1
  236. package/dist/row/styles.js +13 -2
  237. package/dist/row/styles.js.map +1 -1
  238. package/dist/segments/field.js +277 -0
  239. package/dist/segments/field.js.map +1 -0
  240. package/dist/segments/index.js +574 -0
  241. package/dist/segments/index.js.map +1 -0
  242. package/dist/segments/styles.js +24 -0
  243. package/dist/segments/styles.js.map +1 -0
  244. package/dist/separator/index.js +7 -0
  245. package/dist/separator/index.js.map +1 -0
  246. package/dist/slider/index.js +145 -0
  247. package/dist/slider/index.js.map +1 -0
  248. package/dist/swatch/index.js +56 -0
  249. package/dist/swatch/index.js.map +1 -0
  250. package/dist/typography/size.js +14 -0
  251. package/dist/typography/size.js.map +1 -0
  252. package/package.json +11 -2
  253. package/dist/badge/styles.js.map +0 -1
@@ -0,0 +1,456 @@
1
+ import { useTheme } from "../../theme/scope.js";
2
+ import { composeStyles, themedStyles } from "../../theme/styles.js";
3
+ import { useTypeRole } from "../../typography/roles.js";
4
+ import { useLocaleOf } from "../../i18n/provider.js";
5
+ import { HIDDEN } from "../../glyphs/hidden.js";
6
+ import { ColorThumb } from "../../color-thumb/index.js";
7
+ import { ADJUSTABLE, adjustOf, lengthTo, seatPlaceOf, seats, useTrackGesture } from "../../slider/index.js";
8
+ import { usePickedColor } from "../../swatch/index.js";
9
+ import { Chequer } from "../../chequer/index.js";
10
+ import { c } from "react/compiler-runtime";
11
+ import { I18nManager, StyleSheet, Text, View } from "react-native";
12
+ import { useId, useState } from "react";
13
+ import { jsx, jsxs } from "react/jsx-runtime";
14
+ import Svg, { Defs, LinearGradient, Rect, Stop } from "react-native-svg";
15
+ import { GestureDetector, GestureHandlerRootView } from "react-native-gesture-handler";
16
+ import { useColorSliderState } from "react-stately/useColorSliderState";
17
+ //#region src/components/color-slider/index.tsx
18
+ const STRIP = 16;
19
+ const TARGET = 44;
20
+ const MARGIN = 14;
21
+ /** A vertical slider's height when the call site gives it none. */
22
+ const VERTICAL_HEIGHT = 240;
23
+ const HUES = [
24
+ 0,
25
+ 60,
26
+ 120,
27
+ 180,
28
+ 240,
29
+ 300,
30
+ 360
31
+ ];
32
+ const styles = StyleSheet.create({
33
+ area: { flexGrow: 1 },
34
+ output: { marginStart: "auto" },
35
+ root: { width: "100%" },
36
+ rootVertical: {
37
+ alignItems: "flex-start",
38
+ height: VERTICAL_HEIGHT
39
+ },
40
+ row: {
41
+ alignItems: "baseline",
42
+ flexDirection: "row"
43
+ },
44
+ strip: {
45
+ end: 0,
46
+ height: STRIP,
47
+ overflow: "hidden",
48
+ position: "absolute",
49
+ start: 0,
50
+ top: MARGIN
51
+ },
52
+ stripVertical: {
53
+ bottom: 0,
54
+ overflow: "hidden",
55
+ position: "absolute",
56
+ start: MARGIN,
57
+ top: 0,
58
+ width: STRIP
59
+ },
60
+ track: { height: TARGET },
61
+ trackVertical: {
62
+ flexGrow: 1,
63
+ minHeight: 0,
64
+ width: TARGET
65
+ }
66
+ });
67
+ const stylesOf = themedStyles(({ colors, radii, spacing, stateLayerOpacity }) => StyleSheet.create({
68
+ disabled: { opacity: stateLayerOpacity.disabledContent },
69
+ label: { color: colors.onSurfaceVariant },
70
+ output: { color: colors.onSurfaceVariant },
71
+ root: { gap: spacing.xs },
72
+ row: { gap: spacing.sm },
73
+ strip: { borderRadius: radii.sm }
74
+ }));
75
+ /**
76
+ * A slider over one channel of a colour: hue, saturation, lightness, alpha
77
+ * and the rest. Its state is React Stately's, as web's is: pass `value` with
78
+ * `onChange` to control it, or `defaultValue`, as a CSS colour string or a
79
+ * `Color` from `parseColor`, which this package re-exports. One of the two is
80
+ * required.
81
+ *
82
+ * ```tsx
83
+ * <ColorSlider channel="hue" defaultValue="hsl(200, 100%, 50%)" label="Label" />
84
+ * ```
85
+ *
86
+ * **`channel` has to name a channel the value's own space has.** A hex or
87
+ * `rgb()` value is read as RGB, which has no hue, so `channel="hue"` against
88
+ * one throws rather than converting. Pass `colorSpace="hsl"` to convert it,
89
+ * or give the value in the space you mean to slide.
90
+ *
91
+ * A press on the track moves the handle there, and a drag carries it. A
92
+ * screen reader hears an adjustable control named by the label, with the
93
+ * channel's value and the colour's name. `style`, `ref` and `testID` land on
94
+ * the slider as a whole, which is the view a layout positions. With a
95
+ * `testID`, the drag and the press are registered with Gesture Handler as
96
+ * `<testID>-pan` and `<testID>-tap`, which its `getByGestureTestId` finds in
97
+ * a test.
98
+ *
99
+ * Inside a `ColorPicker` it takes the picker's colour where it is given no
100
+ * `value`, and reports a change to the picker before its own `onChange`.
101
+ */
102
+ function ColorSlider(t0) {
103
+ const $ = c(89);
104
+ const { "aria-label": ariaLabel, channel, colorSpace, defaultValue, isDisabled: t1, label, onChange, onChangeEnd, orientation: t2, ref, showValue: t3, style, testID, value } = t0;
105
+ const isDisabled = t1 === void 0 ? false : t1;
106
+ const orientation = t2 === void 0 ? "horizontal" : t2;
107
+ const showValue = t3 === void 0 ? true : t3;
108
+ const own = stylesOf(useTheme());
109
+ const locale = useLocaleOf(void 0);
110
+ const picked = usePickedColor(value, onChange);
111
+ let t4;
112
+ if ($[0] !== channel || $[1] !== colorSpace || $[2] !== defaultValue || $[3] !== isDisabled || $[4] !== locale || $[5] !== onChangeEnd || $[6] !== orientation || $[7] !== picked.onChange || $[8] !== picked.value) {
113
+ t4 = {
114
+ channel,
115
+ colorSpace,
116
+ defaultValue,
117
+ isDisabled,
118
+ locale,
119
+ onChange: picked.onChange,
120
+ onChangeEnd,
121
+ orientation,
122
+ value: picked.value
123
+ };
124
+ $[0] = channel;
125
+ $[1] = colorSpace;
126
+ $[2] = defaultValue;
127
+ $[3] = isDisabled;
128
+ $[4] = locale;
129
+ $[5] = onChangeEnd;
130
+ $[6] = orientation;
131
+ $[7] = picked.onChange;
132
+ $[8] = picked.value;
133
+ $[9] = t4;
134
+ } else t4 = $[9];
135
+ const state = useColorSliderState(t4);
136
+ const labelRole = useTypeRole("labelLarge");
137
+ const outputRole = useTypeRole("bodySmall");
138
+ const [length, setLength] = useState(0);
139
+ const vertical = orientation === "vertical";
140
+ let t5;
141
+ if ($[10] !== isDisabled || $[11] !== length || $[12] !== state || $[13] !== testID || $[14] !== vertical) {
142
+ t5 = {
143
+ isDisabled,
144
+ length,
145
+ state,
146
+ testID,
147
+ vertical
148
+ };
149
+ $[10] = isDisabled;
150
+ $[11] = length;
151
+ $[12] = state;
152
+ $[13] = testID;
153
+ $[14] = vertical;
154
+ $[15] = t5;
155
+ } else t5 = $[15];
156
+ const gesture = useTrackGesture(t5);
157
+ let t6;
158
+ if ($[16] !== state) {
159
+ t6 = state.getDisplayColor();
160
+ $[16] = state;
161
+ $[17] = t6;
162
+ } else t6 = $[17];
163
+ const display = t6;
164
+ const T0 = View;
165
+ const t7 = composeStyles(styles.root, vertical ? styles.rootVertical : void 0, own.root, style);
166
+ const t8 = label === void 0 && !showValue ? null : /* @__PURE__ */ jsxs(View, {
167
+ "aria-hidden": true,
168
+ style: composeStyles(styles.row, own.row),
169
+ children: [label === void 0 ? null : /* @__PURE__ */ jsx(Text, {
170
+ style: composeStyles(labelRole, own.label),
171
+ children: label
172
+ }), showValue ? /* @__PURE__ */ jsx(Text, {
173
+ style: composeStyles(outputRole, own.output, styles.output),
174
+ children: state.getThumbValueLabel(0)
175
+ }) : null]
176
+ });
177
+ const T1 = GestureHandlerRootView;
178
+ const t9 = vertical ? styles.trackVertical : styles.track;
179
+ const T2 = GestureDetector;
180
+ const T3 = View;
181
+ let t10;
182
+ if ($[18] !== vertical) {
183
+ t10 = lengthTo(setLength, vertical);
184
+ $[18] = vertical;
185
+ $[19] = t10;
186
+ } else t10 = $[19];
187
+ const t11 = composeStyles(styles.area, isDisabled ? own.disabled : void 0);
188
+ const T4 = View;
189
+ const t12 = composeStyles(vertical ? styles.stripVertical : styles.strip, own.strip);
190
+ let t13;
191
+ if ($[20] !== channel) {
192
+ t13 = channel === "alpha" ? /* @__PURE__ */ jsx(Chequer, {}) : null;
193
+ $[20] = channel;
194
+ $[21] = t13;
195
+ } else t13 = $[21];
196
+ let t14;
197
+ if ($[22] !== channel || $[23] !== state) {
198
+ t14 = stopsOf(state, channel);
199
+ $[22] = channel;
200
+ $[23] = state;
201
+ $[24] = t14;
202
+ } else t14 = $[24];
203
+ let t15;
204
+ if ($[25] !== t14 || $[26] !== vertical) {
205
+ t15 = /* @__PURE__ */ jsx(Gradient, {
206
+ stops: t14,
207
+ vertical
208
+ });
209
+ $[25] = t14;
210
+ $[26] = vertical;
211
+ $[27] = t15;
212
+ } else t15 = $[27];
213
+ let t16;
214
+ if ($[28] !== T4 || $[29] !== t12 || $[30] !== t13 || $[31] !== t15) {
215
+ t16 = /* @__PURE__ */ jsxs(T4, {
216
+ style: t12,
217
+ children: [t13, t15]
218
+ });
219
+ $[28] = T4;
220
+ $[29] = t12;
221
+ $[30] = t13;
222
+ $[31] = t15;
223
+ $[32] = t16;
224
+ } else t16 = $[32];
225
+ let t17;
226
+ if ($[33] !== ariaLabel || $[34] !== channel || $[35] !== label || $[36] !== locale || $[37] !== state.value) {
227
+ t17 = label ?? ariaLabel ?? state.value.getChannelName(channel, locale);
228
+ $[33] = ariaLabel;
229
+ $[34] = channel;
230
+ $[35] = label;
231
+ $[36] = locale;
232
+ $[37] = state.value;
233
+ $[38] = t17;
234
+ } else t17 = $[38];
235
+ let t18;
236
+ if ($[39] !== state) {
237
+ t18 = state.getThumbMaxValue(0);
238
+ $[39] = state;
239
+ $[40] = t18;
240
+ } else t18 = $[40];
241
+ let t19;
242
+ if ($[41] !== state) {
243
+ t19 = state.getThumbMinValue(0);
244
+ $[41] = state;
245
+ $[42] = t19;
246
+ } else t19 = $[42];
247
+ let t20;
248
+ if ($[43] !== state) {
249
+ t20 = state.getThumbValue(0);
250
+ $[43] = state;
251
+ $[44] = t20;
252
+ } else t20 = $[44];
253
+ let t21;
254
+ if ($[45] !== channel || $[46] !== locale || $[47] !== state) {
255
+ t21 = valueTextOf(state, channel, locale);
256
+ $[45] = channel;
257
+ $[46] = locale;
258
+ $[47] = state;
259
+ $[48] = t21;
260
+ } else t21 = $[48];
261
+ let t22;
262
+ if ($[49] !== state) {
263
+ t22 = adjustOf(state, 0);
264
+ $[49] = state;
265
+ $[50] = t22;
266
+ } else t22 = $[50];
267
+ const t23 = vertical ? seats.seatVertical : seats.seat;
268
+ let t24;
269
+ if ($[51] !== state || $[52] !== t23 || $[53] !== vertical) {
270
+ t24 = composeStyles(t23, seatPlaceOf(state.getThumbPercent(0), vertical));
271
+ $[51] = state;
272
+ $[52] = t23;
273
+ $[53] = vertical;
274
+ $[54] = t24;
275
+ } else t24 = $[54];
276
+ let t25;
277
+ if ($[55] !== display || $[56] !== state.isDragging) {
278
+ t25 = /* @__PURE__ */ jsx(ColorThumb, {
279
+ color: display,
280
+ dragging: state.isDragging
281
+ });
282
+ $[55] = display;
283
+ $[56] = state.isDragging;
284
+ $[57] = t25;
285
+ } else t25 = $[57];
286
+ let t26;
287
+ if ($[58] !== isDisabled || $[59] !== t17 || $[60] !== t18 || $[61] !== t19 || $[62] !== t20 || $[63] !== t21 || $[64] !== t22 || $[65] !== t24 || $[66] !== t25) {
288
+ t26 = /* @__PURE__ */ jsx(View, {
289
+ accessibilityActions: ADJUSTABLE,
290
+ accessible: true,
291
+ "aria-disabled": isDisabled,
292
+ "aria-label": t17,
293
+ "aria-valuemax": t18,
294
+ "aria-valuemin": t19,
295
+ "aria-valuenow": t20,
296
+ "aria-valuetext": t21,
297
+ onAccessibilityAction: t22,
298
+ role: "slider",
299
+ style: t24,
300
+ children: t25
301
+ });
302
+ $[58] = isDisabled;
303
+ $[59] = t17;
304
+ $[60] = t18;
305
+ $[61] = t19;
306
+ $[62] = t20;
307
+ $[63] = t21;
308
+ $[64] = t22;
309
+ $[65] = t24;
310
+ $[66] = t25;
311
+ $[67] = t26;
312
+ } else t26 = $[67];
313
+ let t27;
314
+ if ($[68] !== T3 || $[69] !== t10 || $[70] !== t11 || $[71] !== t16 || $[72] !== t26) {
315
+ t27 = /* @__PURE__ */ jsxs(T3, {
316
+ onLayout: t10,
317
+ style: t11,
318
+ children: [t16, t26]
319
+ });
320
+ $[68] = T3;
321
+ $[69] = t10;
322
+ $[70] = t11;
323
+ $[71] = t16;
324
+ $[72] = t26;
325
+ $[73] = t27;
326
+ } else t27 = $[73];
327
+ let t28;
328
+ if ($[74] !== T2 || $[75] !== gesture || $[76] !== t27) {
329
+ t28 = /* @__PURE__ */ jsx(T2, {
330
+ gesture,
331
+ children: t27
332
+ });
333
+ $[74] = T2;
334
+ $[75] = gesture;
335
+ $[76] = t27;
336
+ $[77] = t28;
337
+ } else t28 = $[77];
338
+ let t29;
339
+ if ($[78] !== T1 || $[79] !== t28 || $[80] !== t9) {
340
+ t29 = /* @__PURE__ */ jsx(T1, {
341
+ style: t9,
342
+ children: t28
343
+ });
344
+ $[78] = T1;
345
+ $[79] = t28;
346
+ $[80] = t9;
347
+ $[81] = t29;
348
+ } else t29 = $[81];
349
+ let t30;
350
+ if ($[82] !== T0 || $[83] !== ref || $[84] !== t29 || $[85] !== t7 || $[86] !== t8 || $[87] !== testID) {
351
+ t30 = /* @__PURE__ */ jsxs(T0, {
352
+ ref,
353
+ style: t7,
354
+ testID,
355
+ children: [t8, t29]
356
+ });
357
+ $[82] = T0;
358
+ $[83] = ref;
359
+ $[84] = t29;
360
+ $[85] = t7;
361
+ $[86] = t8;
362
+ $[87] = testID;
363
+ $[88] = t30;
364
+ } else t30 = $[88];
365
+ return t30;
366
+ }
367
+ function Gradient(t0) {
368
+ const $ = c(15);
369
+ const { stops, vertical } = t0;
370
+ const id = `channel${useId()}`;
371
+ const reversed = !vertical && I18nManager.isRTL;
372
+ const t1 = reversed ? 1 : 0;
373
+ const t2 = vertical || reversed ? 0 : 1;
374
+ const t3 = vertical ? 1 : 0;
375
+ let t4;
376
+ if ($[0] !== stops) {
377
+ let t5;
378
+ if ($[2] !== stops.length) {
379
+ t5 = (stop, index) => /* @__PURE__ */ jsx(Stop, {
380
+ offset: index / (stops.length - 1),
381
+ stopColor: stop.toFormat("rgb").withChannelValue("alpha", 1).toString("css"),
382
+ stopOpacity: stop.getChannelValue("alpha")
383
+ }, index);
384
+ $[2] = stops.length;
385
+ $[3] = t5;
386
+ } else t5 = $[3];
387
+ t4 = stops.map(t5);
388
+ $[0] = stops;
389
+ $[1] = t4;
390
+ } else t4 = $[1];
391
+ let t5;
392
+ if ($[4] !== id || $[5] !== t1 || $[6] !== t2 || $[7] !== t3 || $[8] !== t4) {
393
+ t5 = /* @__PURE__ */ jsx(Defs, { children: /* @__PURE__ */ jsx(LinearGradient, {
394
+ id,
395
+ x1: t1,
396
+ x2: t2,
397
+ y1: t3,
398
+ y2: 0,
399
+ children: t4
400
+ }) });
401
+ $[4] = id;
402
+ $[5] = t1;
403
+ $[6] = t2;
404
+ $[7] = t3;
405
+ $[8] = t4;
406
+ $[9] = t5;
407
+ } else t5 = $[9];
408
+ const t6 = `url(#${id})`;
409
+ let t7;
410
+ if ($[10] !== t6) {
411
+ t7 = /* @__PURE__ */ jsx(Rect, {
412
+ fill: t6,
413
+ height: "100%",
414
+ width: "100%"
415
+ });
416
+ $[10] = t6;
417
+ $[11] = t7;
418
+ } else t7 = $[11];
419
+ let t8;
420
+ if ($[12] !== t5 || $[13] !== t7) {
421
+ t8 = /* @__PURE__ */ jsxs(Svg, {
422
+ ...HIDDEN,
423
+ height: "100%",
424
+ style: StyleSheet.absoluteFill,
425
+ width: "100%",
426
+ children: [t5, t7]
427
+ });
428
+ $[12] = t5;
429
+ $[13] = t7;
430
+ $[14] = t8;
431
+ } else t8 = $[14];
432
+ return t8;
433
+ }
434
+ function stopsOf(state, channel) {
435
+ const display = state.getDisplayColor();
436
+ const min = state.getThumbMinValue(0);
437
+ const max = state.getThumbMaxValue(0);
438
+ if (channel === "hue") return HUES.map((hue) => display.withChannelValue("hue", hue));
439
+ if (channel === "lightness") return [
440
+ min,
441
+ (max - min) / 2,
442
+ max
443
+ ].map((each) => display.withChannelValue(channel, each));
444
+ return [min, max].map((each) => display.withChannelValue(channel, each));
445
+ }
446
+ function valueTextOf(state, channel, locale) {
447
+ const words = state.getThumbValueLabel(0);
448
+ const display = state.getDisplayColor();
449
+ if (channel === "hue") return `${words}, ${display.getHueName(locale)}`;
450
+ if (channel === "alpha") return words;
451
+ return `${words}, ${display.getColorName(locale)}`;
452
+ }
453
+ //#endregion
454
+ export { ColorSlider };
455
+
456
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["ComponentRef","Ref","StyleProp","TextStyle","ViewStyle","Color","ColorChannel","ColorSpace","ColorSliderState","useId","useState","I18nManager","Text","NativeText","StyleSheet","View","GestureDetector","GestureHandlerRootView","Svg","Defs","LinearGradient","Rect","Stop","useColorSliderState","Chequer","ColorThumb","HIDDEN","useLocaleOf","ADJUSTABLE","adjustOf","lengthTo","seatPlaceOf","seats","useTrackGesture","usePickedColor","useTheme","composeStyles","themedStyles","useTypeRole","ColorSliderProps","channel","colorSpace","defaultValue","isDisabled","label","onChange","value","onChangeEnd","orientation","ref","showValue","style","testID","STRIP","TARGET","MARGIN","VERTICAL_HEIGHT","HUES","styles","create","area","flexGrow","output","marginStart","root","width","rootVertical","alignItems","height","row","flexDirection","strip","end","overflow","position","start","top","stripVertical","bottom","track","trackVertical","minHeight","stylesOf","colors","radii","spacing","stateLayerOpacity","disabled","opacity","disabledContent","color","onSurfaceVariant","gap","xs","sm","borderRadius","ColorSlider","t0","$","_c","ariaLabel","t1","t2","t3","undefined","own","locale","picked","t4","state","labelRole","outputRole","length","setLength","vertical","t5","gesture","t6","getDisplayColor","display","T0","t7","t8","getThumbValueLabel","T1","t9","T2","T3","t10","t11","T4","t12","t13","t14","stopsOf","t15","t16","t17","getChannelName","t18","getThumbMaxValue","t19","getThumbMinValue","t20","getThumbValue","t21","valueTextOf","t22","t23","seatVertical","seat","t24","getThumbPercent","t25","isDragging","t26","t27","t28","t29","t30","Gradient","stops","id","reversed","isRTL","stop","index","toFormat","withChannelValue","toString","getChannelValue","map","absoluteFill","min","max","hue","each","words","getHueName","getColorName","_c","NativeText"],"sources":["../../../src/components/color-slider/index.tsx"],"sourcesContent":["import type { ComponentRef, Ref } from 'react'\nimport type { StyleProp, TextStyle, ViewStyle } from 'react-native'\nimport type { Color, ColorChannel, ColorSpace } from 'react-stately'\nimport type { ColorSliderState } from 'react-stately/useColorSliderState'\n\nimport { useId, useState } from 'react'\nimport { I18nManager, Text as NativeText, StyleSheet, View } from 'react-native'\nimport {\n GestureDetector,\n GestureHandlerRootView,\n} from 'react-native-gesture-handler'\nimport Svg, { Defs, LinearGradient, Rect, Stop } from 'react-native-svg'\nimport { useColorSliderState } from 'react-stately/useColorSliderState'\n\nimport { Chequer } from '../../chequer'\nimport { ColorThumb } from '../../color-thumb'\nimport { HIDDEN } from '../../glyphs/hidden'\nimport { useLocaleOf } from '../../i18n/provider'\nimport {\n ADJUSTABLE,\n adjustOf,\n lengthTo,\n seatPlaceOf,\n seats,\n useTrackGesture,\n} from '../../slider'\nimport { usePickedColor } from '../../swatch'\nimport { useTheme } from '../../theme/scope'\nimport { composeStyles, themedStyles } from '../../theme/styles'\nimport { useTypeRole } from '../../typography/roles'\n\n// kanso-ui's ColorSlider: the sliders page's track, carrying one channel of\n// a colour instead of an active and an inactive part. The page's 16dp strip\n// with its 8dp corner, centred in the 44dp a handle takes, and the same\n// label-large label above it, with the value at the far end of its line in\n// body-small in on surface variant, so it reads as a readout rather than a\n// second label. The gradient along the strip is React Aria's, stop for stop:\n// the channel's range through the colour, with the hue running through its\n// six primaries and lightness through the colour at its middle, so what runs\n// along the strip is the channel rather than anything chosen here.\n//\n// Three things depart from the page, each because a colour slider shows a\n// value the page's slider does not have, and each as web departs.\n//\n// **The handle is a circle carrying the colour, not the page's 4dp bar.** It\n// has to show the value it sits on, and 4dp of a colour is not a colour\n// anyone can read. It is the ringed handle in src/color-thumb, centred in the\n// page's 44dp.\n//\n// **There is no value indicator.** The page's label floats a number over the\n// handle; here the readout beside the label already says it, and the handle\n// itself shows the colour.\n//\n// **There is no stop at the inactive end**, since a channel has no inactive\n// part for it to mark.\n//\n// The alpha channel is the one drawn over a chequer, for the reason\n// src/chequer gives: a track fading to transparent over a light surface and\n// one fading to white are the same pixels without it. React Stately's display\n// colour is opaque on every other channel, so no other track shows one.\n//\n// Disabled, the strip and the handle fade and the label and the readout keep\n// their colour, since a disabled control still has to be readable.\n//\n// **The state is React Stately's `useColorSliderState`**, the one web's React\n// Aria keeps, and presses and drags work as they do on `Slider`, through the\n// same gesture in src/slider. The handle is an adjustable control to a screen\n// reader, named by the label, else `aria-label`, else the channel's name in\n// the provider's locale, as React Aria names it. Its value is the readout's\n// words with the hue's name after them on a hue track and the colour's name\n// on any other but alpha, \"200°, cyan blue\", as React Aria announces it.\n//\n// Vertical, the strip stands up 16dp across and the channel rises from the\n// bottom, 240dp tall until `style` says otherwise. Under a right-to-left\n// layout a horizontal channel runs from the right, as presses are read.\n\ntype ColorSliderProps = {\n /**\n * The slider's name for a screen reader, when no `label` is drawn. Left\n * out with the label too, the slider is named by its channel.\n */\n readonly 'aria-label'?: string\n /** Which channel of the colour the slider moves. */\n readonly channel: ColorChannel\n /**\n * The space the channel is read in, when the value is given in another: a\n * hex or `rgb()` value has no hue until it is read as `hsl` or `hsb`.\n */\n readonly colorSpace?: ColorSpace\n /**\n * The colour the slider starts at, when it keeps its own: a CSS colour\n * string, or a `Color` from `parseColor`.\n */\n readonly defaultValue?: Color | string\n /**\n * Draws the slider disabled, and takes no presses, drags or screen reader\n * actions.\n * @default false\n */\n readonly isDisabled?: boolean\n /** What the slider is for, drawn above the track. */\n readonly label?: string\n /** Called with the colour as the channel moves. */\n readonly onChange?: (value: Color) => void\n /** Called with the colour once a drag, a press or an action has ended. */\n readonly onChangeEnd?: (value: Color) => void\n /**\n * Along which axis the handle moves. A vertical slider is 240dp tall until\n * `style` says otherwise.\n * @default 'horizontal'\n */\n readonly orientation?: 'horizontal' | 'vertical'\n readonly ref?: Ref<ComponentRef<typeof View>>\n /**\n * Whether the channel's value is shown at the end of the label's line.\n * @default true\n */\n readonly showValue?: boolean\n readonly style?: StyleProp<ViewStyle>\n readonly testID?: string\n /** The colour, for a call site holding it itself with `onChange`. */\n readonly value?: Color | string\n}\n\n// The page's strip, and the room above and below it that makes up the 44dp\n// a press lands in.\nconst STRIP = 16\nconst TARGET = 44\nconst MARGIN = (TARGET - STRIP) / 2\n\n/** A vertical slider's height when the call site gives it none. */\nconst VERTICAL_HEIGHT = 240\n\n// The hues React Aria runs a hue track through.\nconst HUES = [0, 60, 120, 180, 240, 300, 360]\n\nconst styles = StyleSheet.create({\n // What a press is read along: the whole of the 44dp.\n area: {\n flexGrow: 1,\n },\n // The readout, at the far end of the label's line.\n output: {\n marginStart: 'auto',\n },\n // A slider fills the width it is given, as web's does.\n root: {\n width: '100%',\n },\n rootVertical: {\n alignItems: 'flex-start',\n height: VERTICAL_HEIGHT,\n },\n row: {\n alignItems: 'baseline',\n flexDirection: 'row',\n },\n // The strip, across the middle of the 44dp. It clips the gradient and the\n // chequer to its corners.\n strip: {\n end: 0,\n height: STRIP,\n overflow: 'hidden',\n position: 'absolute',\n start: 0,\n top: MARGIN,\n },\n stripVertical: {\n bottom: 0,\n overflow: 'hidden',\n position: 'absolute',\n start: MARGIN,\n top: 0,\n width: STRIP,\n },\n track: {\n height: TARGET,\n },\n trackVertical: {\n flexGrow: 1,\n minHeight: 0,\n width: TARGET,\n },\n})\n\nconst stylesOf = themedStyles(({ colors, radii, spacing, stateLayerOpacity }) =>\n StyleSheet.create({\n disabled: {\n opacity: stateLayerOpacity.disabledContent,\n },\n label: {\n color: colors.onSurfaceVariant,\n },\n output: {\n color: colors.onSurfaceVariant,\n },\n root: {\n gap: spacing.xs,\n },\n row: {\n gap: spacing.sm,\n },\n strip: {\n borderRadius: radii.sm,\n },\n }),\n)\n\n/**\n * A slider over one channel of a colour: hue, saturation, lightness, alpha\n * and the rest. Its state is React Stately's, as web's is: pass `value` with\n * `onChange` to control it, or `defaultValue`, as a CSS colour string or a\n * `Color` from `parseColor`, which this package re-exports. One of the two is\n * required.\n *\n * ```tsx\n * <ColorSlider channel=\"hue\" defaultValue=\"hsl(200, 100%, 50%)\" label=\"Label\" />\n * ```\n *\n * **`channel` has to name a channel the value's own space has.** A hex or\n * `rgb()` value is read as RGB, which has no hue, so `channel=\"hue\"` against\n * one throws rather than converting. Pass `colorSpace=\"hsl\"` to convert it,\n * or give the value in the space you mean to slide.\n *\n * A press on the track moves the handle there, and a drag carries it. A\n * screen reader hears an adjustable control named by the label, with the\n * channel's value and the colour's name. `style`, `ref` and `testID` land on\n * the slider as a whole, which is the view a layout positions. With a\n * `testID`, the drag and the press are registered with Gesture Handler as\n * `<testID>-pan` and `<testID>-tap`, which its `getByGestureTestId` finds in\n * a test.\n *\n * Inside a `ColorPicker` it takes the picker's colour where it is given no\n * `value`, and reports a change to the picker before its own `onChange`.\n */\nfunction ColorSlider({\n 'aria-label': ariaLabel,\n channel,\n colorSpace,\n defaultValue,\n isDisabled = false,\n label,\n onChange,\n onChangeEnd,\n orientation = 'horizontal',\n ref,\n showValue = true,\n style,\n testID,\n value,\n}: ColorSliderProps) {\n const own = stylesOf(useTheme())\n const locale = useLocaleOf(undefined)\n const picked = usePickedColor(value, onChange)\n const state = useColorSliderState({\n channel,\n colorSpace,\n defaultValue,\n isDisabled,\n locale,\n onChange: picked.onChange,\n onChangeEnd,\n orientation,\n value: picked.value,\n })\n const labelRole = useTypeRole('labelLarge')\n const outputRole = useTypeRole('bodySmall')\n const [length, setLength] = useState(0)\n const vertical = orientation === 'vertical'\n const gesture = useTrackGesture({\n isDisabled,\n length,\n state,\n testID,\n vertical,\n })\n const display = state.getDisplayColor()\n\n return (\n <View\n ref={ref}\n style={composeStyles<ViewStyle>(\n styles.root,\n vertical ? styles.rootVertical : undefined,\n own.root,\n style,\n )}\n testID={testID}\n >\n {label === undefined && !showValue ? null : (\n <View aria-hidden style={composeStyles<ViewStyle>(styles.row, own.row)}>\n {label === undefined ? null : (\n <NativeText style={composeStyles<TextStyle>(labelRole, own.label)}>\n {label}\n </NativeText>\n )}\n {showValue ? (\n <NativeText\n style={composeStyles<TextStyle>(\n outputRole,\n own.output,\n styles.output,\n )}\n >\n {state.getThumbValueLabel(0)}\n </NativeText>\n ) : null}\n </View>\n )}\n <GestureHandlerRootView\n style={vertical ? styles.trackVertical : styles.track}\n >\n <GestureDetector gesture={gesture}>\n <View\n onLayout={lengthTo(setLength, vertical)}\n style={composeStyles<ViewStyle>(\n styles.area,\n isDisabled ? own.disabled : undefined,\n )}\n >\n <View\n style={composeStyles<ViewStyle>(\n vertical ? styles.stripVertical : styles.strip,\n own.strip,\n )}\n >\n {channel === 'alpha' ? <Chequer /> : null}\n <Gradient stops={stopsOf(state, channel)} vertical={vertical} />\n </View>\n <View\n accessibilityActions={ADJUSTABLE}\n accessible\n aria-disabled={isDisabled}\n aria-label={\n label ??\n ariaLabel ??\n state.value.getChannelName(channel, locale)\n }\n aria-valuemax={state.getThumbMaxValue(0)}\n aria-valuemin={state.getThumbMinValue(0)}\n aria-valuenow={state.getThumbValue(0)}\n aria-valuetext={valueTextOf(state, channel, locale)}\n onAccessibilityAction={adjustOf(state, 0)}\n role=\"slider\"\n style={composeStyles<ViewStyle>(\n vertical ? seats.seatVertical : seats.seat,\n seatPlaceOf(state.getThumbPercent(0), vertical),\n )}\n >\n <ColorThumb color={display} dragging={state.isDragging} />\n </View>\n </View>\n </GestureDetector>\n </GestureHandlerRootView>\n </View>\n )\n}\n\n// The channel along the strip: the stops, evenly spaced, from the strip's\n// start, or from its bottom standing up. Each is drawn opaque at its own\n// opacity, since a gradient's stops take the two apart.\nfunction Gradient({\n stops,\n vertical,\n}: {\n readonly stops: readonly Color[]\n readonly vertical: boolean\n}) {\n // A gradient is found by its id, which has to be unique in the page under\n // React Native Web, as the chequer's pattern is.\n const id = `channel${useId()}`\n const reversed = !vertical && I18nManager.isRTL\n\n return (\n <Svg {...HIDDEN} height=\"100%\" style={StyleSheet.absoluteFill} width=\"100%\">\n <Defs>\n <LinearGradient\n id={id}\n x1={reversed ? 1 : 0}\n x2={vertical || reversed ? 0 : 1}\n y1={vertical ? 1 : 0}\n y2={0}\n >\n {stops.map((stop, index) => (\n <Stop\n // oxlint-disable-next-line react/no-array-index-key -- a stop's place is its identity\n key={index}\n offset={index / (stops.length - 1)}\n stopColor={stop\n .toFormat('rgb')\n .withChannelValue('alpha', 1)\n .toString('css')}\n stopOpacity={stop.getChannelValue('alpha')}\n />\n ))}\n </LinearGradient>\n </Defs>\n <Rect fill={`url(#${id})`} height=\"100%\" width=\"100%\" />\n </Svg>\n )\n}\n\n// React Aria's stops for a channel, from its useColorSlider: the hue through\n// its six primaries, lightness from its least through the colour at its\n// middle to its most, which is what keeps the hue showing at all, and every\n// other channel from its least to its most.\nfunction stopsOf(state: ColorSliderState, channel: ColorChannel): Color[] {\n const display = state.getDisplayColor()\n const min = state.getThumbMinValue(0)\n const max = state.getThumbMaxValue(0)\n\n if (channel === 'hue') {\n return HUES.map((hue) => display.withChannelValue('hue', hue))\n }\n if (channel === 'lightness') {\n return [min, (max - min) / 2, max].map((each) =>\n display.withChannelValue(channel, each),\n )\n }\n return [min, max].map((each) => display.withChannelValue(channel, each))\n}\n\n// What a screen reader hears the handle say, as React Aria writes it: the\n// readout's words, then the hue's name on a hue track and the colour's on any\n// other but alpha, whose readout is already all there is to say.\nfunction valueTextOf(\n state: ColorSliderState,\n channel: ColorChannel,\n locale: string,\n) {\n const words = state.getThumbValueLabel(0)\n const display = state.getDisplayColor()\n\n if (channel === 'hue') {\n return `${words}, ${display.getHueName(locale)}`\n }\n if (channel === 'alpha') {\n return words\n }\n return `${words}, ${display.getColorName(locale)}`\n}\n\nexport { ColorSlider }\nexport type { ColorSliderProps }\n"],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { StyleProp, View, ViewProps, ViewStyle } from "react-native";
2
+ import { ComponentRef, Ref } from "react";
3
+ import { Color } from "react-stately";
4
+ //#region src/components/color-swatch/index.d.ts
5
+ type ColorSwatchProps = Omit<ViewProps, 'children' | 'style'> & {
6
+ /**
7
+ * The colour to show: a CSS colour string, or a `Color` from `parseColor`,
8
+ * which this package re-exports. Left out, the swatch draws the colour of
9
+ * the `ColorSwatchPicker.Item` it is drawn in.
10
+ * @default the item's colour, else '#fff0'
11
+ */
12
+ readonly color?: Color | string;
13
+ /**
14
+ * What the swatch is called, in place of the name the colour gives itself.
15
+ * A call site's `aria-label` follows either, after a comma.
16
+ */
17
+ readonly colorName?: string;
18
+ readonly ref?: Ref<ComponentRef<typeof View>>;
19
+ readonly style?: StyleProp<ViewStyle>;
20
+ };
21
+ /**
22
+ * A colour shown as a value: a square of it, with a chequer behind so
23
+ * transparency reads as transparency. The colour is a CSS string, or a
24
+ * `Color` from `parseColor`, which this package re-exports.
25
+ *
26
+ * ```tsx
27
+ * import { ColorSwatch, parseColor } from '@kanso-labs/react-native-kanso-ui'
28
+ *
29
+ * <ColorSwatch color={parseColor('hsla(200, 100%, 50%, 0.4)')} />
30
+ * ```
31
+ *
32
+ * It names itself from the colour, "light vibrant cyan blue, 60%
33
+ * transparent", in the `I18nProvider`'s locale, or the device's outside one,
34
+ * so it needs no label. Pass `colorName` to say something else instead.
35
+ *
36
+ * `style`, `ref` and `testID` land on the square, and a `style` there applies
37
+ * over the swatch's own, so a call site sets another size with `width` and
38
+ * `height`. The colour fills whatever square it is given.
39
+ *
40
+ * Inside a `ColorPicker` it shows the picker's colour where it is given no
41
+ * `color` and sits in no `ColorSwatchPicker` item.
42
+ */
43
+ declare function ColorSwatch({ 'aria-label': label, color, colorName, style, ...props }: ColorSwatchProps): import("react").JSX.Element;
44
+ //#endregion
45
+ export { ColorSwatch, type ColorSwatchProps };
46
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,127 @@
1
+ import { useTheme } from "../../theme/scope.js";
2
+ import { composeStyles, themedStyles } from "../../theme/styles.js";
3
+ import { useLocaleOf, useMessages } from "../../i18n/provider.js";
4
+ import { PickedColorContext, SwatchColorContext, colorNameOf, colorOf } from "../../swatch/index.js";
5
+ import { Chequer } from "../../chequer/index.js";
6
+ import { c } from "react/compiler-runtime";
7
+ import { StyleSheet, View } from "react-native";
8
+ import { use } from "react";
9
+ import { jsx, jsxs } from "react/jsx-runtime";
10
+ //#region src/components/color-swatch/index.tsx
11
+ const SIZE = 40;
12
+ const stylesOf = themedStyles(({ colors, radii }) => StyleSheet.create({
13
+ ground: {
14
+ borderRadius: radii.xs,
15
+ height: SIZE,
16
+ overflow: "hidden",
17
+ width: SIZE
18
+ },
19
+ hairline: {
20
+ ...StyleSheet.absoluteFill,
21
+ borderColor: colors.outlineVariant,
22
+ borderRadius: radii.xs,
23
+ borderWidth: 1
24
+ }
25
+ }));
26
+ /**
27
+ * A colour shown as a value: a square of it, with a chequer behind so
28
+ * transparency reads as transparency. The colour is a CSS string, or a
29
+ * `Color` from `parseColor`, which this package re-exports.
30
+ *
31
+ * ```tsx
32
+ * import { ColorSwatch, parseColor } from '@kanso-labs/react-native-kanso-ui'
33
+ *
34
+ * <ColorSwatch color={parseColor('hsla(200, 100%, 50%, 0.4)')} />
35
+ * ```
36
+ *
37
+ * It names itself from the colour, "light vibrant cyan blue, 60%
38
+ * transparent", in the `I18nProvider`'s locale, or the device's outside one,
39
+ * so it needs no label. Pass `colorName` to say something else instead.
40
+ *
41
+ * `style`, `ref` and `testID` land on the square, and a `style` there applies
42
+ * over the swatch's own, so a call site sets another size with `width` and
43
+ * `height`. The colour fills whatever square it is given.
44
+ *
45
+ * Inside a `ColorPicker` it shows the picker's colour where it is given no
46
+ * `color` and sits in no `ColorSwatchPicker` item.
47
+ */
48
+ function ColorSwatch(t0) {
49
+ const $ = c(19);
50
+ let color;
51
+ let colorName;
52
+ let label;
53
+ let props;
54
+ let style;
55
+ if ($[0] !== t0) {
56
+ ({"aria-label": label, color, colorName, style, ...props} = t0);
57
+ $[0] = t0;
58
+ $[1] = color;
59
+ $[2] = colorName;
60
+ $[3] = label;
61
+ $[4] = props;
62
+ $[5] = style;
63
+ } else {
64
+ color = $[1];
65
+ colorName = $[2];
66
+ label = $[3];
67
+ props = $[4];
68
+ style = $[5];
69
+ }
70
+ const styles = stylesOf(useTheme());
71
+ const locale = useLocaleOf(void 0);
72
+ const messages = useMessages();
73
+ const itemColor = use(SwatchColorContext);
74
+ const pickedColor = use(PickedColorContext)?.value;
75
+ const value = colorOf(color ?? itemColor ?? pickedColor ?? "#fff0");
76
+ const alpha = value.getChannelValue("alpha");
77
+ const name = colorName ?? colorNameOf(value, locale, messages.transparent);
78
+ const T0 = View;
79
+ const t1 = true;
80
+ const t2 = "img";
81
+ const t3 = [name, label].filter(Boolean).join(", ");
82
+ const t4 = composeStyles(styles.ground, style);
83
+ const t5 = alpha < 1 ? /* @__PURE__ */ jsx(Chequer, {}) : null;
84
+ const T1 = View;
85
+ const t6 = composeStyles(StyleSheet.absoluteFill, { backgroundColor: value.toString("css") });
86
+ let t7;
87
+ if ($[6] !== T1 || $[7] !== t6) {
88
+ t7 = /* @__PURE__ */ jsx(T1, { style: t6 });
89
+ $[6] = T1;
90
+ $[7] = t6;
91
+ $[8] = t7;
92
+ } else t7 = $[8];
93
+ let t8;
94
+ if ($[9] !== styles.hairline) {
95
+ t8 = /* @__PURE__ */ jsx(View, { style: styles.hairline });
96
+ $[9] = styles.hairline;
97
+ $[10] = t8;
98
+ } else t8 = $[10];
99
+ let t9;
100
+ if ($[11] !== T0 || $[12] !== props || $[13] !== t3 || $[14] !== t4 || $[15] !== t5 || $[16] !== t7 || $[17] !== t8) {
101
+ t9 = /* @__PURE__ */ jsxs(T0, {
102
+ accessible: t1,
103
+ role: t2,
104
+ ...props,
105
+ "aria-label": t3,
106
+ style: t4,
107
+ children: [
108
+ t5,
109
+ t7,
110
+ t8
111
+ ]
112
+ });
113
+ $[11] = T0;
114
+ $[12] = props;
115
+ $[13] = t3;
116
+ $[14] = t4;
117
+ $[15] = t5;
118
+ $[16] = t7;
119
+ $[17] = t8;
120
+ $[18] = t9;
121
+ } else t9 = $[18];
122
+ return t9;
123
+ }
124
+ //#endregion
125
+ export { ColorSwatch };
126
+
127
+ //# sourceMappingURL=index.js.map