@expokit/cli 0.0.0-stage → 0.3.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/LICENSE +21 -0
- package/README.md +46 -2
- package/bin/expo-kit.js +1266 -0
- package/bin/lib.mjs +343 -0
- package/bin/mcp.mjs +345 -0
- package/package.json +49 -4
- package/registry/_docs/accordion.json +115 -0
- package/registry/_docs/action-sheet.json +138 -0
- package/registry/_docs/alert.json +155 -0
- package/registry/_docs/avatar.json +227 -0
- package/registry/_docs/badge.json +148 -0
- package/registry/_docs/bottom-nav.json +143 -0
- package/registry/_docs/bottom-sheet.json +186 -0
- package/registry/_docs/bullet.json +27 -0
- package/registry/_docs/button-3d.json +138 -0
- package/registry/_docs/button.json +131 -0
- package/registry/_docs/calendar.json +198 -0
- package/registry/_docs/card-stack.json +124 -0
- package/registry/_docs/card.json +131 -0
- package/registry/_docs/carousel.json +122 -0
- package/registry/_docs/chat.json +184 -0
- package/registry/_docs/checkbox.json +109 -0
- package/registry/_docs/checkout.json +105 -0
- package/registry/_docs/chip-group.json +132 -0
- package/registry/_docs/color-swatch.json +82 -0
- package/registry/_docs/confetti.json +102 -0
- package/registry/_docs/coupon.json +192 -0
- package/registry/_docs/cube-pager.json +100 -0
- package/registry/_docs/dashboard.json +123 -0
- package/registry/_docs/date-picker.json +269 -0
- package/registry/_docs/dialog.json +186 -0
- package/registry/_docs/drawer.json +199 -0
- package/registry/_docs/fab.json +144 -0
- package/registry/_docs/flip-card.json +127 -0
- package/registry/_docs/floating-input.json +211 -0
- package/registry/_docs/gift-card.json +124 -0
- package/registry/_docs/glass-button.json +142 -0
- package/registry/_docs/glass-nav-bar.json +102 -0
- package/registry/_docs/glass-search-bar.json +114 -0
- package/registry/_docs/glass-segmented.json +94 -0
- package/registry/_docs/glass-sheet.json +136 -0
- package/registry/_docs/glass-tab-bar.json +100 -0
- package/registry/_docs/glass.json +94 -0
- package/registry/_docs/inbox.json +75 -0
- package/registry/_docs/isometric-bar.json +75 -0
- package/registry/_docs/kit.json +14 -0
- package/registry/_docs/kpi-card.json +14 -0
- package/registry/_docs/like-button.json +92 -0
- package/registry/_docs/liquidglass-tab.json +30 -0
- package/registry/_docs/list-item.json +216 -0
- package/registry/_docs/loyalty-card.json +124 -0
- package/registry/_docs/morph-button.json +128 -0
- package/registry/_docs/number-ticker.json +112 -0
- package/registry/_docs/offers.json +81 -0
- package/registry/_docs/onboarding.json +69 -0
- package/registry/_docs/otp-input.json +158 -0
- package/registry/_docs/pagination-dots.json +108 -0
- package/registry/_docs/parallax-layers.json +104 -0
- package/registry/_docs/parallax-scroll.json +210 -0
- package/registry/_docs/password-input.json +112 -0
- package/registry/_docs/payment-card.json +169 -0
- package/registry/_docs/pixel-bar.json +69 -0
- package/registry/_docs/polar-area.json +81 -0
- package/registry/_docs/profile.json +87 -0
- package/registry/_docs/progress-steps.json +116 -0
- package/registry/_docs/progress.json +152 -0
- package/registry/_docs/radio-group.json +112 -0
- package/registry/_docs/rating.json +114 -0
- package/registry/_docs/ring-carousel.json +122 -0
- package/registry/_docs/scratch-card.json +110 -0
- package/registry/_docs/search-bar.json +160 -0
- package/registry/_docs/search-results.json +123 -0
- package/registry/_docs/segmented-control.json +123 -0
- package/registry/_docs/select.json +277 -0
- package/registry/_docs/settings.json +75 -0
- package/registry/_docs/shimmer-button.json +98 -0
- package/registry/_docs/sign-in.json +201 -0
- package/registry/_docs/skeleton.json +162 -0
- package/registry/_docs/slide-to-confirm.json +108 -0
- package/registry/_docs/slider.json +177 -0
- package/registry/_docs/spin-wheel.json +138 -0
- package/registry/_docs/spinner.json +121 -0
- package/registry/_docs/stateful-button.json +184 -0
- package/registry/_docs/stepper.json +184 -0
- package/registry/_docs/swipe-deck.json +118 -0
- package/registry/_docs/swipeable-row.json +95 -0
- package/registry/_docs/switch.json +124 -0
- package/registry/_docs/tabs.json +129 -0
- package/registry/_docs/tag-input.json +148 -0
- package/registry/_docs/text-animation.json +141 -0
- package/registry/_docs/textarea.json +191 -0
- package/registry/_docs/ticket-card.json +194 -0
- package/registry/_docs/ticket-shape.json +14 -0
- package/registry/_docs/tilt-card.json +157 -0
- package/registry/_docs/time-picker.json +269 -0
- package/registry/_docs/timeline-chart.json +33 -0
- package/registry/_docs/timeline.json +172 -0
- package/registry/_docs/toast.json +185 -0
- package/registry/_docs/treemap.json +33 -0
- package/registry/_docs/waterfall.json +39 -0
- package/registry/_docs/wheel-list.json +122 -0
- package/registry/accordion/files/src/components/ui/accordion.tsx +233 -0
- package/registry/accordion/files/src/lib/kit.tsx +219 -0
- package/registry/accordion.json +17 -0
- package/registry/action-sheet/files/src/components/ui/action-sheet.tsx +580 -0
- package/registry/action-sheet/files/src/lib/kit.tsx +219 -0
- package/registry/action-sheet.json +18 -0
- package/registry/alert/files/src/components/ui/alert.tsx +654 -0
- package/registry/alert/files/src/components/ui/button.tsx +274 -0
- package/registry/alert/files/src/lib/kit.tsx +219 -0
- package/registry/alert.json +20 -0
- package/registry/avatar/files/src/components/ui/avatar.tsx +790 -0
- package/registry/avatar/files/src/lib/kit.tsx +219 -0
- package/registry/avatar.json +18 -0
- package/registry/badge/files/src/components/ui/badge.tsx +626 -0
- package/registry/badge/files/src/lib/kit.tsx +219 -0
- package/registry/badge.json +17 -0
- package/registry/bottom-nav/files/src/components/ui/bottom-nav.tsx +1050 -0
- package/registry/bottom-nav/files/src/lib/kit.tsx +219 -0
- package/registry/bottom-nav.json +18 -0
- package/registry/bottom-sheet/files/src/components/ui/bottom-sheet.tsx +585 -0
- package/registry/bottom-sheet/files/src/lib/kit.tsx +219 -0
- package/registry/bottom-sheet.json +17 -0
- package/registry/bullet.json +14 -0
- package/registry/button/files/src/components/ui/button.tsx +274 -0
- package/registry/button/files/src/lib/kit.tsx +219 -0
- package/registry/button-3d/files/src/components/ui/button-3d.tsx +212 -0
- package/registry/button-3d/files/src/lib/kit.tsx +219 -0
- package/registry/button-3d.json +18 -0
- package/registry/button.json +18 -0
- package/registry/calendar/files/src/components/ui/calendar.tsx +822 -0
- package/registry/calendar/files/src/lib/kit.tsx +219 -0
- package/registry/calendar.json +17 -0
- package/registry/card/files/src/components/ui/card.tsx +300 -0
- package/registry/card/files/src/lib/kit.tsx +219 -0
- package/registry/card-stack.json +15 -0
- package/registry/card.json +17 -0
- package/registry/carousel.json +15 -0
- package/registry/chat.json +18 -0
- package/registry/checkbox/files/src/components/ui/checkbox.tsx +150 -0
- package/registry/checkbox/files/src/lib/kit.tsx +219 -0
- package/registry/checkbox.json +17 -0
- package/registry/checkout.json +26 -0
- package/registry/chip-group/files/src/components/ui/chip-group.tsx +269 -0
- package/registry/chip-group/files/src/lib/kit.tsx +219 -0
- package/registry/chip-group.json +17 -0
- package/registry/color-swatch.json +17 -0
- package/registry/confetti/files/src/components/ui/confetti.tsx +222 -0
- package/registry/confetti/files/src/lib/kit.tsx +219 -0
- package/registry/confetti.json +15 -0
- package/registry/coupon/files/src/components/ui/coupon.tsx +698 -0
- package/registry/coupon/files/src/components/ui/flip-card.tsx +205 -0
- package/registry/coupon/files/src/components/ui/tilt-card.tsx +635 -0
- package/registry/coupon/files/src/lib/kit.tsx +219 -0
- package/registry/coupon/files/src/lib/ticket-shape.tsx +543 -0
- package/registry/coupon.json +23 -0
- package/registry/cube-pager.json +15 -0
- package/registry/dashboard.json +32 -0
- package/registry/date-picker/files/src/components/ui/calendar.tsx +822 -0
- package/registry/date-picker/files/src/components/ui/date-picker.tsx +796 -0
- package/registry/date-picker/files/src/lib/kit.tsx +219 -0
- package/registry/date-picker.json +19 -0
- package/registry/dialog/files/src/components/ui/dialog.tsx +759 -0
- package/registry/dialog/files/src/lib/kit.tsx +219 -0
- package/registry/dialog.json +18 -0
- package/registry/drawer/files/src/components/ui/drawer.tsx +1135 -0
- package/registry/drawer/files/src/lib/kit.tsx +219 -0
- package/registry/drawer.json +18 -0
- package/registry/fab.json +18 -0
- package/registry/flip-card/files/src/components/ui/flip-card.tsx +205 -0
- package/registry/flip-card/files/src/lib/kit.tsx +219 -0
- package/registry/flip-card.json +15 -0
- package/registry/floating-input/files/src/components/ui/floating-input.tsx +528 -0
- package/registry/floating-input/files/src/lib/kit.tsx +219 -0
- package/registry/floating-input.json +17 -0
- package/registry/gift-card.json +21 -0
- package/registry/glass-button.json +22 -0
- package/registry/glass-nav-bar.json +21 -0
- package/registry/glass-search-bar.json +21 -0
- package/registry/glass-segmented.json +22 -0
- package/registry/glass-sheet.json +22 -0
- package/registry/glass-tab-bar.json +22 -0
- package/registry/glass.json +19 -0
- package/registry/inbox.json +30 -0
- package/registry/isometric-bar.json +14 -0
- package/registry/kit/files/src/lib/kit.tsx +219 -0
- package/registry/kit.json +11 -0
- package/registry/kpi-card/files/src/components/charts/kpi-card.tsx +45 -0
- package/registry/kpi-card.json +14 -0
- package/registry/like-button.json +18 -0
- package/registry/liquidglass-tab/files/src/app/(tabs)/_layout.tsx +97 -0
- package/registry/liquidglass-tab/files/src/app/(tabs)/alerts.tsx +5 -0
- package/registry/liquidglass-tab/files/src/app/(tabs)/explore.tsx +5 -0
- package/registry/liquidglass-tab/files/src/app/(tabs)/index.tsx +5 -0
- package/registry/liquidglass-tab/files/src/app/(tabs)/profile.tsx +5 -0
- package/registry/liquidglass-tab/files/src/app/_layout.tsx +33 -0
- package/registry/liquidglass-tab/files/src/components/GlassTabBar.tsx +259 -0
- package/registry/liquidglass-tab/files/src/components/TabScreen.tsx +122 -0
- package/registry/liquidglass-tab/files/src/lib/tab-bar.ts +61 -0
- package/registry/liquidglass-tab/files/src/lib/tab-icons.ts +130 -0
- package/registry/liquidglass-tab/files/src/lib/tabs.ts +108 -0
- package/registry/liquidglass-tab.json +23 -0
- package/registry/list-item/files/src/components/ui/list-item.tsx +508 -0
- package/registry/list-item/files/src/lib/kit.tsx +219 -0
- package/registry/list-item.json +17 -0
- package/registry/loyalty-card.json +23 -0
- package/registry/morph-button.json +18 -0
- package/registry/number-ticker.json +15 -0
- package/registry/offers.json +24 -0
- package/registry/onboarding.json +17 -0
- package/registry/otp-input/files/src/components/ui/otp-input.tsx +380 -0
- package/registry/otp-input/files/src/lib/kit.tsx +219 -0
- package/registry/otp-input.json +17 -0
- package/registry/pagination-dots/files/src/components/ui/pagination-dots.tsx +262 -0
- package/registry/pagination-dots/files/src/lib/kit.tsx +219 -0
- package/registry/pagination-dots.json +15 -0
- package/registry/parallax-layers.json +15 -0
- package/registry/parallax-scroll.json +17 -0
- package/registry/password-input/files/src/components/ui/floating-input.tsx +528 -0
- package/registry/password-input/files/src/components/ui/password-input.tsx +271 -0
- package/registry/password-input/files/src/lib/kit.tsx +219 -0
- package/registry/password-input.json +19 -0
- package/registry/payment-card/files/src/components/ui/flip-card.tsx +205 -0
- package/registry/payment-card/files/src/components/ui/payment-card.tsx +385 -0
- package/registry/payment-card/files/src/components/ui/tilt-card.tsx +635 -0
- package/registry/payment-card/files/src/lib/kit.tsx +219 -0
- package/registry/payment-card.json +21 -0
- package/registry/pixel-bar.json +14 -0
- package/registry/polar-area.json +14 -0
- package/registry/profile.json +17 -0
- package/registry/progress/files/src/components/ui/progress.tsx +883 -0
- package/registry/progress/files/src/lib/kit.tsx +219 -0
- package/registry/progress-steps/files/src/components/ui/progress-steps.tsx +559 -0
- package/registry/progress-steps/files/src/lib/kit.tsx +219 -0
- package/registry/progress-steps.json +18 -0
- package/registry/progress.json +17 -0
- package/registry/radio-group/files/src/components/ui/radio-group.tsx +327 -0
- package/registry/radio-group/files/src/lib/kit.tsx +219 -0
- package/registry/radio-group.json +18 -0
- package/registry/rating.json +18 -0
- package/registry/ring-carousel.json +15 -0
- package/registry/scratch-card.json +18 -0
- package/registry/search-bar/files/src/components/ui/search-bar.tsx +530 -0
- package/registry/search-bar/files/src/lib/kit.tsx +219 -0
- package/registry/search-bar.json +17 -0
- package/registry/search-results.json +30 -0
- package/registry/segmented-control/files/src/components/ui/segmented-control.tsx +341 -0
- package/registry/segmented-control/files/src/lib/kit.tsx +219 -0
- package/registry/segmented-control.json +18 -0
- package/registry/select/files/src/components/ui/select.tsx +1398 -0
- package/registry/select/files/src/lib/kit.tsx +219 -0
- package/registry/select.json +17 -0
- package/registry/settings.json +26 -0
- package/registry/shimmer-button.json +17 -0
- package/registry/sign-in.json +26 -0
- package/registry/skeleton/files/src/components/ui/skeleton.tsx +799 -0
- package/registry/skeleton/files/src/lib/kit.tsx +219 -0
- package/registry/skeleton.json +17 -0
- package/registry/slide-to-confirm.json +18 -0
- package/registry/slider/files/src/components/ui/slider.tsx +716 -0
- package/registry/slider/files/src/lib/kit.tsx +219 -0
- package/registry/slider.json +17 -0
- package/registry/spin-wheel.json +18 -0
- package/registry/spinner/files/src/components/ui/spinner.tsx +748 -0
- package/registry/spinner/files/src/lib/kit.tsx +219 -0
- package/registry/spinner.json +17 -0
- package/registry/stateful-button/files/src/components/ui/stateful-button.tsx +532 -0
- package/registry/stateful-button/files/src/lib/kit.tsx +219 -0
- package/registry/stateful-button.json +18 -0
- package/registry/stepper/files/src/components/ui/stepper.tsx +646 -0
- package/registry/stepper/files/src/lib/kit.tsx +219 -0
- package/registry/stepper.json +17 -0
- package/registry/swipe-deck.json +15 -0
- package/registry/swipeable-row.json +15 -0
- package/registry/switch/files/src/components/ui/switch.tsx +344 -0
- package/registry/switch/files/src/lib/kit.tsx +219 -0
- package/registry/switch.json +18 -0
- package/registry/tabs/files/src/components/ui/tabs.tsx +539 -0
- package/registry/tabs/files/src/lib/kit.tsx +219 -0
- package/registry/tabs.json +17 -0
- package/registry/tag-input/files/src/components/ui/tag-input.tsx +720 -0
- package/registry/tag-input/files/src/lib/kit.tsx +219 -0
- package/registry/tag-input.json +17 -0
- package/registry/text-animation/files/src/components/ui/text-animation.tsx +650 -0
- package/registry/text-animation/files/src/lib/kit.tsx +219 -0
- package/registry/text-animation.json +15 -0
- package/registry/textarea/files/src/components/ui/textarea.tsx +553 -0
- package/registry/textarea/files/src/lib/kit.tsx +219 -0
- package/registry/textarea.json +17 -0
- package/registry/ticket-card.json +24 -0
- package/registry/ticket-shape/files/src/lib/kit.tsx +219 -0
- package/registry/ticket-shape/files/src/lib/ticket-shape.tsx +543 -0
- package/registry/ticket-shape.json +17 -0
- package/registry/tilt-card/files/src/components/ui/tilt-card.tsx +635 -0
- package/registry/tilt-card/files/src/lib/kit.tsx +219 -0
- package/registry/tilt-card.json +17 -0
- package/registry/time-picker/files/src/components/ui/time-picker.tsx +1159 -0
- package/registry/time-picker/files/src/lib/kit.tsx +219 -0
- package/registry/time-picker.json +17 -0
- package/registry/timeline/files/src/components/ui/avatar.tsx +790 -0
- package/registry/timeline/files/src/components/ui/timeline.tsx +1059 -0
- package/registry/timeline/files/src/lib/kit.tsx +219 -0
- package/registry/timeline-chart.json +14 -0
- package/registry/timeline.json +20 -0
- package/registry/toast/files/src/components/ui/button.tsx +274 -0
- package/registry/toast/files/src/components/ui/toast.tsx +1284 -0
- package/registry/toast/files/src/lib/kit.tsx +219 -0
- package/registry/toast.json +20 -0
- package/registry/treemap.json +14 -0
- package/registry/waterfall.json +14 -0
- package/registry/wheel-list.json +17 -0
- package/schema/components.schema.json +13 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "chat",
|
|
3
|
+
"category": "Blocks",
|
|
4
|
+
"aliases": [
|
|
5
|
+
"ai-chat",
|
|
6
|
+
"chatbot",
|
|
7
|
+
"assistant",
|
|
8
|
+
"messages",
|
|
9
|
+
"chatgpt"
|
|
10
|
+
],
|
|
11
|
+
"exportName": "ChatScreen",
|
|
12
|
+
"files": [
|
|
13
|
+
"src/components/blocks/chat.tsx"
|
|
14
|
+
],
|
|
15
|
+
"summary": "AI assistant chat with streamed, fading-in replies, Thinking state and a Stop button.",
|
|
16
|
+
"props": [
|
|
17
|
+
[
|
|
18
|
+
"messages",
|
|
19
|
+
"{ id, role: 'user' | 'assistant', text, streaming?, feedback? }[]",
|
|
20
|
+
"[]",
|
|
21
|
+
"The conversation. Controlled when onSend is set; otherwise the starting messages for the built-in simulation."
|
|
22
|
+
],
|
|
23
|
+
[
|
|
24
|
+
"onSend",
|
|
25
|
+
"(text: string) => void",
|
|
26
|
+
"—",
|
|
27
|
+
"The user sent a prompt (trimmed). Append it and the reply to messages yourself. Without it, replies are simulated from a canned list so the screen works as-is."
|
|
28
|
+
],
|
|
29
|
+
[
|
|
30
|
+
"streaming",
|
|
31
|
+
"boolean",
|
|
32
|
+
"false",
|
|
33
|
+
"A reply is in flight: “Thinking…” until the last message is an assistant one with text, a caret while it grows, and Send becomes Stop."
|
|
34
|
+
],
|
|
35
|
+
[
|
|
36
|
+
"onStop",
|
|
37
|
+
"() => void",
|
|
38
|
+
"—",
|
|
39
|
+
"Stop pressed while streaming."
|
|
40
|
+
],
|
|
41
|
+
[
|
|
42
|
+
"suggestions",
|
|
43
|
+
"string[]",
|
|
44
|
+
"4 prompts",
|
|
45
|
+
"Chips above the input until the user sends something; tapping one sends it. [] hides them."
|
|
46
|
+
],
|
|
47
|
+
[
|
|
48
|
+
"assistantName",
|
|
49
|
+
"string",
|
|
50
|
+
"'Assistant'",
|
|
51
|
+
"Used in the header, the placeholder and screen reader labels."
|
|
52
|
+
],
|
|
53
|
+
[
|
|
54
|
+
"title / subtitle",
|
|
55
|
+
"string",
|
|
56
|
+
"assistantName / 'Ask me anything'",
|
|
57
|
+
"Header text. The subtitle shows “Thinking…” / “Typing…” while streaming."
|
|
58
|
+
],
|
|
59
|
+
[
|
|
60
|
+
"header",
|
|
61
|
+
"ReactNode | null",
|
|
62
|
+
"built-in",
|
|
63
|
+
"Replace the header; null hides it."
|
|
64
|
+
],
|
|
65
|
+
[
|
|
66
|
+
"avatar",
|
|
67
|
+
"ReactNode",
|
|
68
|
+
"sparkle mark",
|
|
69
|
+
"Replace the assistant mark beside replies, in the header and the empty state."
|
|
70
|
+
],
|
|
71
|
+
[
|
|
72
|
+
"emptyTitle / emptySubtitle",
|
|
73
|
+
"string",
|
|
74
|
+
"'How can I help today?'",
|
|
75
|
+
"Empty state copy."
|
|
76
|
+
],
|
|
77
|
+
[
|
|
78
|
+
"placeholder",
|
|
79
|
+
"string",
|
|
80
|
+
"`Message ${assistantName}`",
|
|
81
|
+
"Prompt placeholder and accessibility label."
|
|
82
|
+
],
|
|
83
|
+
[
|
|
84
|
+
"variant",
|
|
85
|
+
"'plain' | 'bubbles'",
|
|
86
|
+
"'plain'",
|
|
87
|
+
"plain: assistant text sits on the page. bubbles: assistant replies in muted bubbles too (support bots)."
|
|
88
|
+
],
|
|
89
|
+
[
|
|
90
|
+
"thinkingIndicator",
|
|
91
|
+
"'shimmer' | 'dots'",
|
|
92
|
+
"'shimmer'",
|
|
93
|
+
"What shows before the first token."
|
|
94
|
+
],
|
|
95
|
+
[
|
|
96
|
+
"onAttach",
|
|
97
|
+
"() => void",
|
|
98
|
+
"—",
|
|
99
|
+
"Shows a + button left of the input."
|
|
100
|
+
],
|
|
101
|
+
[
|
|
102
|
+
"onCopy",
|
|
103
|
+
"(message) => void",
|
|
104
|
+
"—",
|
|
105
|
+
"Copy pressed or a message long-pressed — write message.text to the clipboard here. The icon turns into a check."
|
|
106
|
+
],
|
|
107
|
+
[
|
|
108
|
+
"onRegenerate",
|
|
109
|
+
"(message) => void",
|
|
110
|
+
"—",
|
|
111
|
+
"Regenerate pressed on the latest reply."
|
|
112
|
+
],
|
|
113
|
+
[
|
|
114
|
+
"onFeedback",
|
|
115
|
+
"(message, 'up' | 'down' | null) => void",
|
|
116
|
+
"—",
|
|
117
|
+
"Thumbs toggled; null when cleared. Initial state comes from message.feedback."
|
|
118
|
+
],
|
|
119
|
+
[
|
|
120
|
+
"onNewChat",
|
|
121
|
+
"() => void",
|
|
122
|
+
"—",
|
|
123
|
+
"Shows a new-chat button in the header (the simulation also clears itself)."
|
|
124
|
+
],
|
|
125
|
+
[
|
|
126
|
+
"bottomInset",
|
|
127
|
+
"number",
|
|
128
|
+
"0",
|
|
129
|
+
"Extra padding under the input, e.g. useSafeAreaInsets().bottom. Ignored while the keyboard is open."
|
|
130
|
+
],
|
|
131
|
+
[
|
|
132
|
+
"keyboardVerticalOffset",
|
|
133
|
+
"number",
|
|
134
|
+
"0",
|
|
135
|
+
"Height above the screen (navigator header) so the input clears the keyboard exactly."
|
|
136
|
+
],
|
|
137
|
+
[
|
|
138
|
+
"haptics",
|
|
139
|
+
"boolean",
|
|
140
|
+
"true",
|
|
141
|
+
"Light haptics on send, stop, copy and feedback."
|
|
142
|
+
],
|
|
143
|
+
[
|
|
144
|
+
"accent",
|
|
145
|
+
"string",
|
|
146
|
+
"theme accent",
|
|
147
|
+
"User bubbles, send button, focus ring and the assistant mark."
|
|
148
|
+
],
|
|
149
|
+
[
|
|
150
|
+
"style",
|
|
151
|
+
"StyleProp<ViewStyle>",
|
|
152
|
+
"—",
|
|
153
|
+
"Root style."
|
|
154
|
+
]
|
|
155
|
+
],
|
|
156
|
+
"behavior": [
|
|
157
|
+
[
|
|
158
|
+
"Touch",
|
|
159
|
+
"Tap a suggestion chip to send it. Long-press a message to copy it; the row under each reply has copy, thumbs up / down and regenerate (latest reply). A round button jumps back to the latest message after scrolling up."
|
|
160
|
+
],
|
|
161
|
+
[
|
|
162
|
+
"Motion",
|
|
163
|
+
"Messages rise and fade in on a spring, new words fade in as they stream with a soft blinking caret, “Thinking…” shimmers (or dots bounce), and the send arrow spins into a stop square. Opacity and transforms run on the native driver."
|
|
164
|
+
],
|
|
165
|
+
[
|
|
166
|
+
"Reduced motion",
|
|
167
|
+
"No per-word fade, shimmer, bouncing dots or caret blink; simulated replies arrive in larger chunks and messages appear without the rise."
|
|
168
|
+
],
|
|
169
|
+
[
|
|
170
|
+
"Screen readers",
|
|
171
|
+
"Messages read as “You: …” and “<assistant>: …” with markdown stripped, and long-press copy is exposed as an action. “<assistant> is thinking” is announced, then the full reply when streaming ends. Buttons have roles, labels and disabled / selected state."
|
|
172
|
+
],
|
|
173
|
+
[
|
|
174
|
+
"Keyboard",
|
|
175
|
+
"The prompt stays above the keyboard on iOS and Android (KeyboardAvoidingView; pass keyboardVerticalOffset under a navigator header) and bottomInset is dropped while it is open. On web, Enter sends and Shift+Enter adds a line."
|
|
176
|
+
],
|
|
177
|
+
[
|
|
178
|
+
"Haptics",
|
|
179
|
+
"A light tap on send, stop and copy, and a selection tick on chips, thumbs and regenerate (native only, haptics={false} to turn off)."
|
|
180
|
+
]
|
|
181
|
+
],
|
|
182
|
+
"usage": null,
|
|
183
|
+
"examples": []
|
|
184
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "checkbox",
|
|
3
|
+
"category": "Selection",
|
|
4
|
+
"aliases": [],
|
|
5
|
+
"exportName": "Checkbox",
|
|
6
|
+
"files": [
|
|
7
|
+
"src/components/ui/checkbox.tsx"
|
|
8
|
+
],
|
|
9
|
+
"summary": "A checkbox whose tick draws itself in as the box squishes and a ring bursts out.",
|
|
10
|
+
"props": [
|
|
11
|
+
[
|
|
12
|
+
"checked / onChange",
|
|
13
|
+
"boolean",
|
|
14
|
+
"—",
|
|
15
|
+
"Controlled state (or use defaultChecked)."
|
|
16
|
+
],
|
|
17
|
+
[
|
|
18
|
+
"defaultChecked",
|
|
19
|
+
"boolean",
|
|
20
|
+
"false",
|
|
21
|
+
"Initial state when uncontrolled."
|
|
22
|
+
],
|
|
23
|
+
[
|
|
24
|
+
"label",
|
|
25
|
+
"string",
|
|
26
|
+
"—",
|
|
27
|
+
"Text next to the box."
|
|
28
|
+
],
|
|
29
|
+
[
|
|
30
|
+
"description",
|
|
31
|
+
"string",
|
|
32
|
+
"—",
|
|
33
|
+
"Secondary line."
|
|
34
|
+
],
|
|
35
|
+
[
|
|
36
|
+
"strike",
|
|
37
|
+
"boolean",
|
|
38
|
+
"false",
|
|
39
|
+
"Strike the label through when checked."
|
|
40
|
+
],
|
|
41
|
+
[
|
|
42
|
+
"shape",
|
|
43
|
+
"\"square\" | \"circle\"",
|
|
44
|
+
"\"square\"",
|
|
45
|
+
"Rounded square (corner = size / 3.4) or full circle."
|
|
46
|
+
],
|
|
47
|
+
[
|
|
48
|
+
"size",
|
|
49
|
+
"number",
|
|
50
|
+
"24",
|
|
51
|
+
"Box width and height in points; the tick is 80% of it."
|
|
52
|
+
],
|
|
53
|
+
[
|
|
54
|
+
"accent",
|
|
55
|
+
"string",
|
|
56
|
+
"theme accent",
|
|
57
|
+
"Checked colour."
|
|
58
|
+
],
|
|
59
|
+
[
|
|
60
|
+
"disabled",
|
|
61
|
+
"boolean",
|
|
62
|
+
"false",
|
|
63
|
+
"Dims to 50% and blocks presses."
|
|
64
|
+
],
|
|
65
|
+
[
|
|
66
|
+
"style",
|
|
67
|
+
"StyleProp<ViewStyle>",
|
|
68
|
+
"—",
|
|
69
|
+
"Style for the pressable row holding the box and label."
|
|
70
|
+
]
|
|
71
|
+
],
|
|
72
|
+
"behavior": [
|
|
73
|
+
[
|
|
74
|
+
"Touch",
|
|
75
|
+
"The whole row toggles. The box squishes on press-in and bounces back on release."
|
|
76
|
+
],
|
|
77
|
+
[
|
|
78
|
+
"Motion",
|
|
79
|
+
"The fill and tick spring in together, and a ring bursts outward each time it becomes checked."
|
|
80
|
+
],
|
|
81
|
+
[
|
|
82
|
+
"Screen readers",
|
|
83
|
+
"A checkbox with checked and disabled state."
|
|
84
|
+
]
|
|
85
|
+
],
|
|
86
|
+
"usage": "import { Checkbox } from '@/components/ui/checkbox';\n\n<Checkbox\n label=\"Email me about new releases\"\n description=\"About once a month, never spam.\"\n defaultChecked\n/>",
|
|
87
|
+
"examples": [
|
|
88
|
+
{
|
|
89
|
+
"name": "Default",
|
|
90
|
+
"title": "Default",
|
|
91
|
+
"code": "import { Checkbox } from '@/components/ui/checkbox';\n\nexport default function Default() {\n return <Checkbox label=\"Accept terms and conditions\" defaultChecked />;\n}\n"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"name": "WithDescription",
|
|
95
|
+
"title": "With Description",
|
|
96
|
+
"code": "import { Checkbox } from '@/components/ui/checkbox';\n\nexport default function WithDescription() {\n return (\n <Checkbox\n label=\"Marketing emails\"\n description=\"Product news and offers, about once a month.\"\n />\n );\n}\n"
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"name": "TodoList",
|
|
100
|
+
"title": "Todo List",
|
|
101
|
+
"code": "import { View } from 'react-native';\nimport { Checkbox } from '@/components/ui/checkbox';\n\nexport default function TodoList() {\n return (\n <View style={{ gap: 16 }}>\n <Checkbox shape=\"circle\" strike label=\"Design the onboarding flow\" defaultChecked />\n <Checkbox shape=\"circle\" strike label=\"Ship floating inputs\" />\n <Checkbox shape=\"circle\" strike label=\"Write the docs\" />\n </View>\n );\n}\n"
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"name": "Colors",
|
|
105
|
+
"title": "Colors",
|
|
106
|
+
"code": "import { View } from 'react-native';\nimport { Checkbox } from '@/components/ui/checkbox';\n\nexport default function Colors() {\n return (\n <View style={{ flexDirection: 'row', gap: 18 }}>\n {['#6366f1', '#10b981', '#f59e0b', '#ef4444', '#ec4899'].map((c) => (\n <Checkbox key={c} accent={c} defaultChecked size={28} />\n ))}\n </View>\n );\n}\n"
|
|
107
|
+
}
|
|
108
|
+
]
|
|
109
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "checkout",
|
|
3
|
+
"category": "Blocks",
|
|
4
|
+
"aliases": [],
|
|
5
|
+
"exportName": "Checkout",
|
|
6
|
+
"files": [
|
|
7
|
+
"src/components/blocks/checkout.tsx"
|
|
8
|
+
],
|
|
9
|
+
"summary": null,
|
|
10
|
+
"props": [
|
|
11
|
+
[
|
|
12
|
+
"items",
|
|
13
|
+
"{ id, name, variant?, price, quantity, image? }[]",
|
|
14
|
+
"3 sample products",
|
|
15
|
+
"Initial bag. Quantities and removals are kept in state."
|
|
16
|
+
],
|
|
17
|
+
[
|
|
18
|
+
"onItemsChange",
|
|
19
|
+
"(items) => void",
|
|
20
|
+
"—",
|
|
21
|
+
"Quantity changed or an item was removed."
|
|
22
|
+
],
|
|
23
|
+
[
|
|
24
|
+
"shippingOptions",
|
|
25
|
+
"{ value, label, description?, price, icon? }[]",
|
|
26
|
+
"Standard / Express",
|
|
27
|
+
"Delivery cards. price 0 shows 'Free'; icon is 'standard' | 'express' | 'pickup'."
|
|
28
|
+
],
|
|
29
|
+
[
|
|
30
|
+
"defaultShipping",
|
|
31
|
+
"string",
|
|
32
|
+
"first option",
|
|
33
|
+
"Initially selected delivery option."
|
|
34
|
+
],
|
|
35
|
+
[
|
|
36
|
+
"paymentMethod",
|
|
37
|
+
"{ brand, last4, expiry? }",
|
|
38
|
+
"Visa •••• 4242",
|
|
39
|
+
"Card shown in the Payment row."
|
|
40
|
+
],
|
|
41
|
+
[
|
|
42
|
+
"onChangePayment",
|
|
43
|
+
"() => void",
|
|
44
|
+
"—",
|
|
45
|
+
"Shows a Change link on the payment row."
|
|
46
|
+
],
|
|
47
|
+
[
|
|
48
|
+
"onApplyPromo",
|
|
49
|
+
"(code) => number | null | Promise<…>",
|
|
50
|
+
"—",
|
|
51
|
+
"Return the discount fraction (0.1 = 10%) or null. Omit to hide the promo row."
|
|
52
|
+
],
|
|
53
|
+
[
|
|
54
|
+
"taxRate",
|
|
55
|
+
"number",
|
|
56
|
+
"0.08",
|
|
57
|
+
"Tax on the discounted subtotal."
|
|
58
|
+
],
|
|
59
|
+
[
|
|
60
|
+
"onPay",
|
|
61
|
+
"(summary) => void | Promise",
|
|
62
|
+
"—",
|
|
63
|
+
"Slider completed. Resolve to show the order-placed screen; reject to slide back."
|
|
64
|
+
],
|
|
65
|
+
[
|
|
66
|
+
"orderNumber",
|
|
67
|
+
"string",
|
|
68
|
+
"'EK-48213'",
|
|
69
|
+
"Shown on the success screen."
|
|
70
|
+
],
|
|
71
|
+
[
|
|
72
|
+
"onBack / onDone",
|
|
73
|
+
"() => void",
|
|
74
|
+
"—",
|
|
75
|
+
"Header back button / success and empty-bag buttons."
|
|
76
|
+
],
|
|
77
|
+
[
|
|
78
|
+
"currency",
|
|
79
|
+
"string",
|
|
80
|
+
"'₹'",
|
|
81
|
+
"Symbol placed before amounts by the default formatter (Indian digit grouping, decimals only when non-zero)."
|
|
82
|
+
],
|
|
83
|
+
[
|
|
84
|
+
"formatPrice",
|
|
85
|
+
"(amount) => string",
|
|
86
|
+
"'₹1,23,456'",
|
|
87
|
+
"Money formatter. Overrides currency — use for Intl, other grouping or suffix symbols like '12,50 €'."
|
|
88
|
+
],
|
|
89
|
+
[
|
|
90
|
+
"accent",
|
|
91
|
+
"string",
|
|
92
|
+
"theme accent",
|
|
93
|
+
"Selection, steppers and the pay slider."
|
|
94
|
+
],
|
|
95
|
+
[
|
|
96
|
+
"style",
|
|
97
|
+
"StyleProp<ViewStyle>",
|
|
98
|
+
"—",
|
|
99
|
+
"Root style."
|
|
100
|
+
]
|
|
101
|
+
],
|
|
102
|
+
"behavior": [],
|
|
103
|
+
"usage": null,
|
|
104
|
+
"examples": []
|
|
105
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "chip-group",
|
|
3
|
+
"category": "Selection",
|
|
4
|
+
"aliases": [],
|
|
5
|
+
"exportName": "ChipGroup",
|
|
6
|
+
"files": [
|
|
7
|
+
"src/components/ui/chip-group.tsx"
|
|
8
|
+
],
|
|
9
|
+
"summary": "Filter chips that widen to make room as a check mark draws itself in.",
|
|
10
|
+
"props": [
|
|
11
|
+
[
|
|
12
|
+
"options",
|
|
13
|
+
"(string | { value, label?, icon?, count?, disabled? })[]",
|
|
14
|
+
"—",
|
|
15
|
+
"Plain strings or objects with label, icon, count and per-chip disabled."
|
|
16
|
+
],
|
|
17
|
+
[
|
|
18
|
+
"multiple",
|
|
19
|
+
"boolean",
|
|
20
|
+
"false",
|
|
21
|
+
"Allow several selected chips."
|
|
22
|
+
],
|
|
23
|
+
[
|
|
24
|
+
"value / onValueChange",
|
|
25
|
+
"string[]",
|
|
26
|
+
"—",
|
|
27
|
+
"Controlled selection (or use defaultValue). Single mode reports [] or [value]."
|
|
28
|
+
],
|
|
29
|
+
[
|
|
30
|
+
"defaultValue",
|
|
31
|
+
"string[]",
|
|
32
|
+
"[]",
|
|
33
|
+
"Initial selection when uncontrolled."
|
|
34
|
+
],
|
|
35
|
+
[
|
|
36
|
+
"deselectable",
|
|
37
|
+
"boolean",
|
|
38
|
+
"true",
|
|
39
|
+
"Single mode: tapping the selected chip clears it."
|
|
40
|
+
],
|
|
41
|
+
[
|
|
42
|
+
"variant",
|
|
43
|
+
"\"solid\" | \"outline\" | \"soft\"",
|
|
44
|
+
"\"solid\"",
|
|
45
|
+
"Selected look: filled accent, accent border with a faint tint, or soft accent tint."
|
|
46
|
+
],
|
|
47
|
+
[
|
|
48
|
+
"size",
|
|
49
|
+
"\"sm\" | \"md\" | \"lg\"",
|
|
50
|
+
"\"md\"",
|
|
51
|
+
"30 / 36 / 42pt tall."
|
|
52
|
+
],
|
|
53
|
+
[
|
|
54
|
+
"scrollable",
|
|
55
|
+
"boolean",
|
|
56
|
+
"false",
|
|
57
|
+
"One horizontally scrolling row instead of wrapping."
|
|
58
|
+
],
|
|
59
|
+
[
|
|
60
|
+
"contentInset",
|
|
61
|
+
"number",
|
|
62
|
+
"0",
|
|
63
|
+
"Scroll-row edge padding that bleeds into your screen gutter."
|
|
64
|
+
],
|
|
65
|
+
[
|
|
66
|
+
"showCheck",
|
|
67
|
+
"boolean",
|
|
68
|
+
"true",
|
|
69
|
+
"Morph a check in front of the label when selected."
|
|
70
|
+
],
|
|
71
|
+
[
|
|
72
|
+
"accent",
|
|
73
|
+
"string",
|
|
74
|
+
"theme accent",
|
|
75
|
+
"Selected colour."
|
|
76
|
+
],
|
|
77
|
+
[
|
|
78
|
+
"disabled",
|
|
79
|
+
"boolean",
|
|
80
|
+
"false",
|
|
81
|
+
"Dims every chip and blocks presses (or set disabled per option)."
|
|
82
|
+
],
|
|
83
|
+
[
|
|
84
|
+
"style",
|
|
85
|
+
"StyleProp<ViewStyle>",
|
|
86
|
+
"—",
|
|
87
|
+
"Style for the wrapping row (the ScrollView when scrollable)."
|
|
88
|
+
]
|
|
89
|
+
],
|
|
90
|
+
"behavior": [
|
|
91
|
+
[
|
|
92
|
+
"Touch",
|
|
93
|
+
"Tap to select. In single mode, tapping the selected chip clears it unless deselectable is false. Short chips pad their hit area to 44pt."
|
|
94
|
+
],
|
|
95
|
+
[
|
|
96
|
+
"Motion",
|
|
97
|
+
"Selection springs the check, width and colours together, and chips squish while pressed."
|
|
98
|
+
],
|
|
99
|
+
[
|
|
100
|
+
"Screen readers",
|
|
101
|
+
"Chips are radios in single mode and checkboxes in multiple mode, with checked and disabled state."
|
|
102
|
+
]
|
|
103
|
+
],
|
|
104
|
+
"usage": "import { ChipGroup } from '@/components/ui/chip-group';\n\n<ChipGroup\n multiple\n defaultValue={['Vegan']}\n options={['Vegan', 'Vegetarian', 'Gluten-free', 'Halal']}\n/>",
|
|
105
|
+
"examples": [
|
|
106
|
+
{
|
|
107
|
+
"name": "Solid",
|
|
108
|
+
"title": "Solid",
|
|
109
|
+
"code": "import { ChipGroup } from '@/components/ui/chip-group';\n\nexport default function Solid() {\n return (\n <ChipGroup\n multiple\n defaultValue={['Vegan', 'Gluten-free']}\n options={['Vegan', 'Vegetarian', 'Gluten-free', 'Dairy-free', 'Nut-free', 'Halal']}\n />\n );\n}\n"
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"name": "Outline",
|
|
113
|
+
"title": "Outline",
|
|
114
|
+
"code": "import { ChipGroup } from '@/components/ui/chip-group';\n\nexport default function Outline() {\n return (\n <ChipGroup\n variant=\"outline\"\n defaultValue={['Remote']}\n options={['Remote', 'Hybrid', 'On-site']}\n />\n );\n}\n"
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"name": "Soft",
|
|
118
|
+
"title": "Soft",
|
|
119
|
+
"code": "import { ChipGroup } from '@/components/ui/chip-group';\n\nexport default function Soft() {\n return (\n <ChipGroup\n variant=\"soft\"\n multiple\n defaultValue={['open']}\n options={[\n { value: 'open', label: 'Open', count: 24 },\n { value: 'review', label: 'In review', count: 7 },\n { value: 'merged', label: 'Merged', count: 112 },\n { value: 'closed', label: 'Closed', count: 3 },\n ]}\n />\n );\n}\n"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"name": "Scrollable",
|
|
123
|
+
"title": "Scrollable",
|
|
124
|
+
"code": "import React, { useState } from 'react';\nimport { Text, View } from 'react-native';\nimport { ChipGroup } from '@/components/ui/chip-group';\n\nexport default function Scrollable() {\n const [picked, setPicked] = useState<string[]>(['all']);\n return (\n <ChipGroup\n scrollable\n deselectable={false}\n value={picked}\n onValueChange={setPicked}\n options={[\n { value: 'all', label: 'All' },\n { value: 'coffee', label: 'Coffee', icon: <Text>☕️</Text> },\n { value: 'bakery', label: 'Bakery', icon: <Text>🥐</Text> },\n { value: 'brunch', label: 'Brunch', icon: <Text>🍳</Text> },\n { value: 'pizza', label: 'Pizza', icon: <Text>🍕</Text> },\n { value: 'sushi', label: 'Sushi', icon: <Text>🍣</Text> },\n ]}\n />\n );\n}\n"
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"name": "Sizes",
|
|
128
|
+
"title": "Sizes",
|
|
129
|
+
"code": "import { Text, View } from 'react-native';\nimport { ChipGroup } from '@/components/ui/chip-group';\n\nexport default function Sizes() {\n return (\n <View style={{ gap: 12 }}>\n <ChipGroup size=\"sm\" multiple defaultValue={['S']} options={['XS', 'S', 'M', 'L']} />\n <ChipGroup size=\"md\" multiple defaultValue={['M']} options={['XS', 'S', 'M', 'L']} />\n <ChipGroup size=\"lg\" multiple defaultValue={['L']} options={['XS', 'S', 'M', 'L']} />\n </View>\n );\n}\n"
|
|
130
|
+
}
|
|
131
|
+
]
|
|
132
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "color-swatch",
|
|
3
|
+
"category": "Selection",
|
|
4
|
+
"aliases": [],
|
|
5
|
+
"exportName": "ColorSwatch",
|
|
6
|
+
"files": [
|
|
7
|
+
"src/components/ui/color-swatch.tsx"
|
|
8
|
+
],
|
|
9
|
+
"summary": "A colour picker where the chosen swatch settles in as a ring springs out around it.",
|
|
10
|
+
"props": [
|
|
11
|
+
[
|
|
12
|
+
"colors",
|
|
13
|
+
"(string | { color, label? })[]",
|
|
14
|
+
"10-colour palette",
|
|
15
|
+
"Your swatches (hex)."
|
|
16
|
+
],
|
|
17
|
+
[
|
|
18
|
+
"value / onValueChange",
|
|
19
|
+
"string",
|
|
20
|
+
"—",
|
|
21
|
+
"Controlled selection (or use defaultValue)."
|
|
22
|
+
],
|
|
23
|
+
[
|
|
24
|
+
"defaultValue",
|
|
25
|
+
"string",
|
|
26
|
+
"—",
|
|
27
|
+
"Initial selection when uncontrolled."
|
|
28
|
+
],
|
|
29
|
+
[
|
|
30
|
+
"variant",
|
|
31
|
+
"\"circle\" | \"square\" | \"pill\"",
|
|
32
|
+
"\"circle\"",
|
|
33
|
+
"Swatch shape."
|
|
34
|
+
],
|
|
35
|
+
[
|
|
36
|
+
"size",
|
|
37
|
+
"\"sm\" | \"md\" | \"lg\"",
|
|
38
|
+
"\"md\"",
|
|
39
|
+
"28 / 36 / 44pt swatches."
|
|
40
|
+
],
|
|
41
|
+
[
|
|
42
|
+
"scrollable",
|
|
43
|
+
"boolean",
|
|
44
|
+
"false",
|
|
45
|
+
"One horizontally scrolling row instead of a wrapping grid."
|
|
46
|
+
],
|
|
47
|
+
[
|
|
48
|
+
"showLabels",
|
|
49
|
+
"boolean",
|
|
50
|
+
"false",
|
|
51
|
+
"Colour names under each swatch."
|
|
52
|
+
],
|
|
53
|
+
[
|
|
54
|
+
"disabled",
|
|
55
|
+
"boolean",
|
|
56
|
+
"false",
|
|
57
|
+
"Dims and blocks presses."
|
|
58
|
+
],
|
|
59
|
+
[
|
|
60
|
+
"style",
|
|
61
|
+
"StyleProp<ViewStyle>",
|
|
62
|
+
"—",
|
|
63
|
+
"Style for the wrapping grid (the ScrollView when scrollable)."
|
|
64
|
+
]
|
|
65
|
+
],
|
|
66
|
+
"behavior": [
|
|
67
|
+
[
|
|
68
|
+
"Touch",
|
|
69
|
+
"Tap a swatch to choose it. Each swatch's hit area is padded out to 44pt."
|
|
70
|
+
],
|
|
71
|
+
[
|
|
72
|
+
"Motion",
|
|
73
|
+
"The chosen swatch settles inward while a ring and check spring out. The check uses whichever ink reads best on that colour."
|
|
74
|
+
],
|
|
75
|
+
[
|
|
76
|
+
"Screen readers",
|
|
77
|
+
"A radiogroup labelled \"Colour\" by default; each swatch is a radio named by its label or hex value."
|
|
78
|
+
]
|
|
79
|
+
],
|
|
80
|
+
"usage": null,
|
|
81
|
+
"examples": []
|
|
82
|
+
}
|