@nim.zone/ui 0.6.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 +681 -0
- package/dist/components/admin-shell.d.ts +121 -0
- package/dist/components/app-shell.d.ts +23 -0
- package/dist/components/auth-screen.d.ts +33 -0
- package/dist/components/avatar.d.ts +10 -0
- package/dist/components/badge.d.ts +14 -0
- package/dist/components/banner.d.ts +11 -0
- package/dist/components/breadcrumb.d.ts +12 -0
- package/dist/components/button.d.ts +21 -0
- package/dist/components/card.d.ts +15 -0
- package/dist/components/chat-composer.d.ts +52 -0
- package/dist/components/chat.d.ts +77 -0
- package/dist/components/checkout.d.ts +79 -0
- package/dist/components/choice.d.ts +15 -0
- package/dist/components/combobox.d.ts +31 -0
- package/dist/components/date-field.d.ts +58 -0
- package/dist/components/dialog.d.ts +20 -0
- package/dist/components/empty-state.d.ts +9 -0
- package/dist/components/feedback.d.ts +18 -0
- package/dist/components/field.d.ts +47 -0
- package/dist/components/icon-button.d.ts +12 -0
- package/dist/components/icon.d.ts +72 -0
- package/dist/components/layout.d.ts +13 -0
- package/dist/components/list.d.ts +16 -0
- package/dist/components/menu.d.ts +56 -0
- package/dist/components/onboarding.d.ts +50 -0
- package/dist/components/otp-input.d.ts +29 -0
- package/dist/components/pagination.d.ts +12 -0
- package/dist/components/password-field.d.ts +33 -0
- package/dist/components/phone-field.d.ts +44 -0
- package/dist/components/plan-card.d.ts +45 -0
- package/dist/components/plan-picker.d.ts +52 -0
- package/dist/components/profile-header.d.ts +47 -0
- package/dist/components/profile-screen.d.ts +44 -0
- package/dist/components/resource-meter.d.ts +22 -0
- package/dist/components/section-header.d.ts +8 -0
- package/dist/components/segmented.d.ts +18 -0
- package/dist/components/sheet.d.ts +18 -0
- package/dist/components/sign-in-flow.d.ts +60 -0
- package/dist/components/slider.d.ts +10 -0
- package/dist/components/stat.d.ts +10 -0
- package/dist/components/stepper.d.ts +17 -0
- package/dist/components/tab-bar.d.ts +40 -0
- package/dist/components/table.d.ts +33 -0
- package/dist/components/tabs.d.ts +23 -0
- package/dist/components/task-progress.d.ts +38 -0
- package/dist/components/theme.d.ts +49 -0
- package/dist/components/toast.d.ts +17 -0
- package/dist/components/tooltip.d.ts +18 -0
- package/dist/components/typography.d.ts +18 -0
- package/dist/components/wizard.d.ts +70 -0
- package/dist/index.d.ts +104 -0
- package/dist/lib/calendars.d.ts +81 -0
- package/dist/lib/cn.d.ts +7 -0
- package/dist/lib/countries.d.ts +33 -0
- package/dist/lib/use-anchor.d.ts +22 -0
- package/dist/nim.css +1 -0
- package/dist/nim.js +3266 -0
- package/package.json +83 -0
- package/src/components/admin-shell.tsx +338 -0
- package/src/components/app-shell.tsx +36 -0
- package/src/components/auth-screen.tsx +71 -0
- package/src/components/avatar.tsx +32 -0
- package/src/components/badge.tsx +44 -0
- package/src/components/banner.tsx +47 -0
- package/src/components/breadcrumb.tsx +45 -0
- package/src/components/button.tsx +64 -0
- package/src/components/card.tsx +46 -0
- package/src/components/chat-composer.tsx +331 -0
- package/src/components/chat.tsx +352 -0
- package/src/components/checkout.tsx +173 -0
- package/src/components/choice.tsx +46 -0
- package/src/components/combobox.tsx +157 -0
- package/src/components/date-field.tsx +394 -0
- package/src/components/dialog.tsx +77 -0
- package/src/components/empty-state.tsx +23 -0
- package/src/components/feedback.tsx +61 -0
- package/src/components/field.tsx +177 -0
- package/src/components/icon-button.tsx +35 -0
- package/src/components/icon.tsx +167 -0
- package/src/components/layout.tsx +38 -0
- package/src/components/list.tsx +78 -0
- package/src/components/menu.tsx +172 -0
- package/src/components/onboarding.tsx +157 -0
- package/src/components/otp-input.tsx +144 -0
- package/src/components/pagination.tsx +86 -0
- package/src/components/password-field.tsx +112 -0
- package/src/components/phone-field.tsx +242 -0
- package/src/components/plan-card.tsx +124 -0
- package/src/components/plan-picker.tsx +144 -0
- package/src/components/profile-header.tsx +134 -0
- package/src/components/profile-screen.tsx +104 -0
- package/src/components/resource-meter.tsx +60 -0
- package/src/components/section-header.tsx +31 -0
- package/src/components/segmented.tsx +53 -0
- package/src/components/sheet.tsx +74 -0
- package/src/components/sign-in-flow.tsx +322 -0
- package/src/components/slider.tsx +50 -0
- package/src/components/stat.tsx +30 -0
- package/src/components/stepper.tsx +77 -0
- package/src/components/tab-bar.tsx +82 -0
- package/src/components/table.tsx +81 -0
- package/src/components/tabs.tsx +72 -0
- package/src/components/task-progress.tsx +111 -0
- package/src/components/theme.tsx +112 -0
- package/src/components/toast.tsx +87 -0
- package/src/components/tooltip.tsx +30 -0
- package/src/components/typography.tsx +65 -0
- package/src/components/wizard.tsx +192 -0
- package/src/index.ts +216 -0
- package/src/lib/calendars.ts +227 -0
- package/src/lib/cn.ts +8 -0
- package/src/lib/countries.ts +110 -0
- package/src/lib/use-anchor.ts +92 -0
- package/src/theme/colorways/coral.css +62 -0
- package/src/theme/colorways/oxblood.css +23 -0
- package/src/theme/colorways/paper.css +68 -0
- package/src/theme/colorways/teal.css +56 -0
- package/src/theme/colorways/vermilion.css +21 -0
- package/src/theme/components.css +4606 -0
- package/src/theme/contract.css +204 -0
- package/src/theme/fonts.css +67 -0
- package/src/theme/index.css +33 -0
- package/src/theme/persian.css +47 -0
- package/src/theme/reset.css +118 -0
- package/src/theme/styles/ledger.css +106 -0
- package/src/theme/styles/vlora.css +91 -0
- package/src/vite-env.d.ts +1 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { ElementType, HTMLAttributes, ReactNode } from 'react'
|
|
2
|
+
import { cn } from '@/lib/cn'
|
|
3
|
+
|
|
4
|
+
interface TextProps extends HTMLAttributes<HTMLElement> {
|
|
5
|
+
as?: ElementType
|
|
6
|
+
children: ReactNode
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/** The largest role: page-opening statements only, one per screen. */
|
|
10
|
+
export function Display({ as: Component = 'h1', children, className, ...props }: TextProps) {
|
|
11
|
+
return (
|
|
12
|
+
<Component className={cn('nim-display', className)} {...props}>
|
|
13
|
+
{children}
|
|
14
|
+
</Component>
|
|
15
|
+
)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function Title({
|
|
19
|
+
as: Component = 'h2',
|
|
20
|
+
children,
|
|
21
|
+
className,
|
|
22
|
+
size = 'lg',
|
|
23
|
+
...props
|
|
24
|
+
}: TextProps & { size?: 'lg' | 'md' }) {
|
|
25
|
+
return (
|
|
26
|
+
<Component className={cn('nim-title', size === 'md' && 'nim-title--md', className)} {...props}>
|
|
27
|
+
{children}
|
|
28
|
+
</Component>
|
|
29
|
+
)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function Body({
|
|
33
|
+
as: Component = 'p',
|
|
34
|
+
children,
|
|
35
|
+
className,
|
|
36
|
+
size = 'md',
|
|
37
|
+
...props
|
|
38
|
+
}: TextProps & { size?: 'md' | 'sm' }) {
|
|
39
|
+
return (
|
|
40
|
+
<Component className={cn('nim-body', size === 'sm' && 'nim-body--sm', className)} {...props}>
|
|
41
|
+
{children}
|
|
42
|
+
</Component>
|
|
43
|
+
)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** Mono/uppercase in Ledger, sentence case in Vlora — the theme decides. */
|
|
47
|
+
export function Label({ as: Component = 'span', children, className, ...props }: TextProps) {
|
|
48
|
+
return (
|
|
49
|
+
<Component className={cn('nim-label', className)} {...props}>
|
|
50
|
+
{children}
|
|
51
|
+
</Component>
|
|
52
|
+
)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function Caption({ as: Component = 'p', children, className, ...props }: TextProps) {
|
|
56
|
+
return (
|
|
57
|
+
<Component className={cn('nim-caption', className)} {...props}>
|
|
58
|
+
{children}
|
|
59
|
+
</Component>
|
|
60
|
+
)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export function Rule({ className, ...props }: HTMLAttributes<HTMLHRElement>) {
|
|
64
|
+
return <hr className={cn('nim-rule', className)} {...props} />
|
|
65
|
+
}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { useCallback, useState } from 'react'
|
|
2
|
+
import type { ReactNode } from 'react'
|
|
3
|
+
import { Button } from '@/components/button'
|
|
4
|
+
import { IconButton } from '@/components/icon-button'
|
|
5
|
+
import { cn } from '@/lib/cn'
|
|
6
|
+
|
|
7
|
+
export interface WizardStep {
|
|
8
|
+
/** The step itself. A function receives nothing — the caller already holds
|
|
9
|
+
the answers, because they are the app's, not the wizard's. */
|
|
10
|
+
content: ReactNode
|
|
11
|
+
/** Blocks the CTA until the step is answered. */
|
|
12
|
+
canContinue?: boolean
|
|
13
|
+
/** Overrides the CTA label on this step alone. */
|
|
14
|
+
continueLabel?: string
|
|
15
|
+
id: string
|
|
16
|
+
/** The one thing being asked. Kept short: a wizard step is a question. */
|
|
17
|
+
question?: ReactNode
|
|
18
|
+
subtitle?: ReactNode
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface WizardProps {
|
|
22
|
+
className?: string
|
|
23
|
+
continueLabel: string
|
|
24
|
+
/** Label on the last step. */
|
|
25
|
+
finishLabel: string
|
|
26
|
+
labels?: { back: string; close: string; step: (index: number, total: number) => string }
|
|
27
|
+
onClose?: () => void
|
|
28
|
+
/** Fired from the last step's CTA. */
|
|
29
|
+
onDone: () => void
|
|
30
|
+
/** Every step change, including backwards — for analytics and autosave. */
|
|
31
|
+
onStep?: (index: number) => void
|
|
32
|
+
steps: WizardStep[]
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const DEFAULT_LABELS = {
|
|
36
|
+
back: 'Back',
|
|
37
|
+
close: 'Close',
|
|
38
|
+
step: (index: number, total: number) => `Step ${index + 1} of ${total}`,
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* A short, one-question-per-screen flow: mood → cause → note, or any other
|
|
43
|
+
* sequence a viewer walks once and abandons easily.
|
|
44
|
+
*
|
|
45
|
+
* The step index is the wizard's; the answers are not. A wizard that owned the
|
|
46
|
+
* answers would have to know their shape, and every product's are different —
|
|
47
|
+
* so each step is given its content and reports back through `canContinue`,
|
|
48
|
+
* which is the only thing the shell needs to know.
|
|
49
|
+
*
|
|
50
|
+
* Progress is dots rather than a bar: a bar implies a percentage of work done,
|
|
51
|
+
* and three questions are three questions. The close control is always present
|
|
52
|
+
* — a flow the viewer cannot leave is a trap, and leaving is the most common
|
|
53
|
+
* thing anyone does with one of these.
|
|
54
|
+
*/
|
|
55
|
+
export function Wizard({
|
|
56
|
+
className,
|
|
57
|
+
continueLabel,
|
|
58
|
+
finishLabel,
|
|
59
|
+
labels,
|
|
60
|
+
onClose,
|
|
61
|
+
onDone,
|
|
62
|
+
onStep,
|
|
63
|
+
steps,
|
|
64
|
+
}: WizardProps) {
|
|
65
|
+
const text = { ...DEFAULT_LABELS, ...labels }
|
|
66
|
+
const [index, setIndex] = useState(0)
|
|
67
|
+
const step = steps[Math.min(index, steps.length - 1)]
|
|
68
|
+
const last = index === steps.length - 1
|
|
69
|
+
|
|
70
|
+
const goTo = useCallback(
|
|
71
|
+
(next: number) => {
|
|
72
|
+
setIndex(next)
|
|
73
|
+
onStep?.(next)
|
|
74
|
+
},
|
|
75
|
+
[onStep],
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
return (
|
|
79
|
+
<section className={cn('nim-wizard', className)}>
|
|
80
|
+
<header className="nim-wizard__bar">
|
|
81
|
+
<span className="nim-wizard__slot">
|
|
82
|
+
{index > 0 ? (
|
|
83
|
+
<IconButton label={text.back} name="chevron-back" onClick={() => goTo(index - 1)} size="sm" />
|
|
84
|
+
) : null}
|
|
85
|
+
</span>
|
|
86
|
+
|
|
87
|
+
<ol aria-label={text.step(index, steps.length)} className="nim-wizard__dots">
|
|
88
|
+
{steps.map((item, dot) => (
|
|
89
|
+
<li
|
|
90
|
+
className="nim-wizard__dot"
|
|
91
|
+
data-done={dot < index ? 'true' : undefined}
|
|
92
|
+
data-on={dot === index ? 'true' : undefined}
|
|
93
|
+
key={item.id}
|
|
94
|
+
/>
|
|
95
|
+
))}
|
|
96
|
+
</ol>
|
|
97
|
+
|
|
98
|
+
<span className="nim-wizard__slot">
|
|
99
|
+
{onClose ? <IconButton label={text.close} name="close" onClick={onClose} size="sm" /> : null}
|
|
100
|
+
</span>
|
|
101
|
+
</header>
|
|
102
|
+
|
|
103
|
+
{step.question ? (
|
|
104
|
+
<div className="nim-wizard__ask">
|
|
105
|
+
<h1 className="nim-wizard__question">{step.question}</h1>
|
|
106
|
+
{step.subtitle ? <p className="nim-wizard__subtitle">{step.subtitle}</p> : null}
|
|
107
|
+
</div>
|
|
108
|
+
) : null}
|
|
109
|
+
|
|
110
|
+
<div className="nim-wizard__content">{step.content}</div>
|
|
111
|
+
|
|
112
|
+
<footer className="nim-wizard__foot">
|
|
113
|
+
<Button
|
|
114
|
+
disabled={step.canContinue === false}
|
|
115
|
+
fullWidth
|
|
116
|
+
onClick={() => (last ? onDone() : goTo(index + 1))}
|
|
117
|
+
size="lg"
|
|
118
|
+
variant="accent"
|
|
119
|
+
>
|
|
120
|
+
{step.continueLabel ?? (last ? finishLabel : continueLabel)}
|
|
121
|
+
</Button>
|
|
122
|
+
</footer>
|
|
123
|
+
</section>
|
|
124
|
+
)
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export interface ChoiceGridOption {
|
|
128
|
+
disabled?: boolean
|
|
129
|
+
icon?: ReactNode
|
|
130
|
+
id: string
|
|
131
|
+
label: ReactNode
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export interface ChoiceGridProps {
|
|
135
|
+
className?: string
|
|
136
|
+
/** Cap a multi-select. Options past the cap disable rather than disappear,
|
|
137
|
+
so the grid does not reflow under the viewer's finger. */
|
|
138
|
+
max?: number
|
|
139
|
+
multiple?: boolean
|
|
140
|
+
onChange: (selected: string[]) => void
|
|
141
|
+
options: ChoiceGridOption[]
|
|
142
|
+
selected: string[]
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* The grid of icon tiles a wizard step is usually made of.
|
|
147
|
+
*
|
|
148
|
+
* Single-select renders radios and multi-select renders checkboxes — stated in
|
|
149
|
+
* ARIA rather than implied by how many are lit, because "pick one" and "pick
|
|
150
|
+
* any" are different promises and only one of them is visible in a grid.
|
|
151
|
+
*/
|
|
152
|
+
export function ChoiceGrid({
|
|
153
|
+
className,
|
|
154
|
+
max,
|
|
155
|
+
multiple = false,
|
|
156
|
+
onChange,
|
|
157
|
+
options,
|
|
158
|
+
selected,
|
|
159
|
+
}: ChoiceGridProps) {
|
|
160
|
+
const full = multiple && max !== undefined && selected.length >= max
|
|
161
|
+
|
|
162
|
+
const toggle = (id: string) => {
|
|
163
|
+
if (!multiple) {
|
|
164
|
+
onChange([id])
|
|
165
|
+
return
|
|
166
|
+
}
|
|
167
|
+
onChange(selected.includes(id) ? selected.filter((item) => item !== id) : [...selected, id])
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
return (
|
|
171
|
+
<div className={cn('nim-choice-grid', className)} role={multiple ? 'group' : 'radiogroup'}>
|
|
172
|
+
{options.map((option) => {
|
|
173
|
+
const on = selected.includes(option.id)
|
|
174
|
+
return (
|
|
175
|
+
<button
|
|
176
|
+
aria-checked={on}
|
|
177
|
+
className="nim-choice-grid__tile"
|
|
178
|
+
data-on={on ? 'true' : undefined}
|
|
179
|
+
disabled={option.disabled || (full && !on)}
|
|
180
|
+
key={option.id}
|
|
181
|
+
onClick={() => toggle(option.id)}
|
|
182
|
+
role={multiple ? 'checkbox' : 'radio'}
|
|
183
|
+
type="button"
|
|
184
|
+
>
|
|
185
|
+
{option.icon ? <span className="nim-choice-grid__icon">{option.icon}</span> : null}
|
|
186
|
+
<span className="nim-choice-grid__label">{option.label}</span>
|
|
187
|
+
</button>
|
|
188
|
+
)
|
|
189
|
+
})}
|
|
190
|
+
</div>
|
|
191
|
+
)
|
|
192
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* nim — public surface.
|
|
3
|
+
*
|
|
4
|
+
* Importing the kit brings its stylesheet with it, so a consumer can never end
|
|
5
|
+
* up with nim markup and no nim styles. Apps that need to control CSS order
|
|
6
|
+
* themselves can import `nim/styles.css` explicitly instead.
|
|
7
|
+
*
|
|
8
|
+
* Wrap the tree in <NimProvider> to pick a style, colourway, scheme, and
|
|
9
|
+
* direction.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import '@/theme/index.css'
|
|
13
|
+
|
|
14
|
+
export { ActivityFeed, AdminShell, DetailHeader, FilterChips } from '@/components/admin-shell'
|
|
15
|
+
export type {
|
|
16
|
+
ActivityEvent,
|
|
17
|
+
ActivityFeedProps,
|
|
18
|
+
AdminNavGroup,
|
|
19
|
+
AdminNavItem,
|
|
20
|
+
AdminShellProps,
|
|
21
|
+
DetailHeaderProps,
|
|
22
|
+
FilterChip,
|
|
23
|
+
FilterChipsProps,
|
|
24
|
+
} from '@/components/admin-shell'
|
|
25
|
+
|
|
26
|
+
export { AppShell } from '@/components/app-shell'
|
|
27
|
+
export type { AppShellProps } from '@/components/app-shell'
|
|
28
|
+
|
|
29
|
+
export { AuthScreen } from '@/components/auth-screen'
|
|
30
|
+
export type { AuthScreenProps } from '@/components/auth-screen'
|
|
31
|
+
|
|
32
|
+
export { Avatar } from '@/components/avatar'
|
|
33
|
+
export type { AvatarProps, AvatarSize } from '@/components/avatar'
|
|
34
|
+
|
|
35
|
+
export { AvatarRing, ProfileHeader } from '@/components/profile-header'
|
|
36
|
+
export type { AvatarRingProps, ProfileHeaderProps } from '@/components/profile-header'
|
|
37
|
+
|
|
38
|
+
export { Badge } from '@/components/badge'
|
|
39
|
+
export type { BadgeProps, BadgeSize, BadgeTone, BadgeVariant } from '@/components/badge'
|
|
40
|
+
|
|
41
|
+
export { Banner } from '@/components/banner'
|
|
42
|
+
export type { BannerProps, BannerTone } from '@/components/banner'
|
|
43
|
+
|
|
44
|
+
export { Breadcrumb } from '@/components/breadcrumb'
|
|
45
|
+
export type { BreadcrumbProps, Crumb } from '@/components/breadcrumb'
|
|
46
|
+
|
|
47
|
+
export { Button } from '@/components/button'
|
|
48
|
+
export type { ButtonProps, ButtonSize, ButtonVariant } from '@/components/button'
|
|
49
|
+
|
|
50
|
+
export { Card } from '@/components/card'
|
|
51
|
+
export type { CardPadding, CardProps, CardVariant } from '@/components/card'
|
|
52
|
+
|
|
53
|
+
export { ActionBar, OptionCard, OrderSummary } from '@/components/checkout'
|
|
54
|
+
export type {
|
|
55
|
+
ActionBarProps,
|
|
56
|
+
OptionCardProps,
|
|
57
|
+
OrderSummaryProps,
|
|
58
|
+
SummaryLine,
|
|
59
|
+
} from '@/components/checkout'
|
|
60
|
+
|
|
61
|
+
export { Chat } from '@/components/chat'
|
|
62
|
+
export type { ChatAttachment, ChatMediaKind, ChatMessage, ChatProps } from '@/components/chat'
|
|
63
|
+
|
|
64
|
+
export { ChatComposer } from '@/components/chat-composer'
|
|
65
|
+
export type { ChatComposerProps, ChatDraft } from '@/components/chat-composer'
|
|
66
|
+
|
|
67
|
+
export { Checkbox, Switch } from '@/components/choice'
|
|
68
|
+
export type { CheckboxProps, SwitchProps } from '@/components/choice'
|
|
69
|
+
|
|
70
|
+
export { Combobox } from '@/components/combobox'
|
|
71
|
+
export type { ComboboxOption, ComboboxProps } from '@/components/combobox'
|
|
72
|
+
|
|
73
|
+
export { Calendar, DateField, DatePicker } from '@/components/date-field'
|
|
74
|
+
export type {
|
|
75
|
+
CalendarProps,
|
|
76
|
+
CalendarSystem,
|
|
77
|
+
DateFieldProps,
|
|
78
|
+
DatePickerProps,
|
|
79
|
+
IsoDate,
|
|
80
|
+
} from '@/components/date-field'
|
|
81
|
+
|
|
82
|
+
export {
|
|
83
|
+
addDays,
|
|
84
|
+
addMonths,
|
|
85
|
+
formatNumeric,
|
|
86
|
+
monthLength,
|
|
87
|
+
parseNumeric,
|
|
88
|
+
partsOf,
|
|
89
|
+
fromParts,
|
|
90
|
+
startOfMonth,
|
|
91
|
+
todayIso,
|
|
92
|
+
} from '@/lib/calendars'
|
|
93
|
+
export type { CalendarParts } from '@/lib/calendars'
|
|
94
|
+
|
|
95
|
+
export { Dialog } from '@/components/dialog'
|
|
96
|
+
export type { DialogProps } from '@/components/dialog'
|
|
97
|
+
|
|
98
|
+
export { EmptyState } from '@/components/empty-state'
|
|
99
|
+
export type { EmptyStateProps } from '@/components/empty-state'
|
|
100
|
+
|
|
101
|
+
export { Progress, Skeleton, Spinner } from '@/components/feedback'
|
|
102
|
+
export type { ProgressProps, SkeletonProps, SpinnerProps } from '@/components/feedback'
|
|
103
|
+
|
|
104
|
+
export { ResourceMeter } from '@/components/resource-meter'
|
|
105
|
+
export type { ResourceMeterProps, ResourceMeterTone } from '@/components/resource-meter'
|
|
106
|
+
|
|
107
|
+
export { Input, Select, Textarea } from '@/components/field'
|
|
108
|
+
export type { InputProps, SelectOption, SelectProps, TextareaProps } from '@/components/field'
|
|
109
|
+
|
|
110
|
+
export { Icon, iconNames } from '@/components/icon'
|
|
111
|
+
export type { IconName, IconProps, IconSize, IconTone } from '@/components/icon'
|
|
112
|
+
|
|
113
|
+
export { IconButton } from '@/components/icon-button'
|
|
114
|
+
export type { IconButtonProps, IconButtonSize, IconButtonVariant } from '@/components/icon-button'
|
|
115
|
+
|
|
116
|
+
export { AppFrame, Inline, Stack } from '@/components/layout'
|
|
117
|
+
|
|
118
|
+
export { List, ListRow } from '@/components/list'
|
|
119
|
+
export type { ListProps, ListRowProps } from '@/components/list'
|
|
120
|
+
|
|
121
|
+
export { Menu, Popover } from '@/components/menu'
|
|
122
|
+
export type { MenuAction, MenuHeading, MenuItem, MenuProps, MenuSeparator, PopoverProps } from '@/components/menu'
|
|
123
|
+
|
|
124
|
+
export { Onboarding } from '@/components/onboarding'
|
|
125
|
+
export type { OnboardingProps, OnboardingSlide } from '@/components/onboarding'
|
|
126
|
+
|
|
127
|
+
export { OtpInput } from '@/components/otp-input'
|
|
128
|
+
export type { OtpInputProps } from '@/components/otp-input'
|
|
129
|
+
|
|
130
|
+
export { Pagination } from '@/components/pagination'
|
|
131
|
+
export type { PaginationProps } from '@/components/pagination'
|
|
132
|
+
|
|
133
|
+
export { PasswordField, scorePassword } from '@/components/password-field'
|
|
134
|
+
export type { PasswordFieldProps, PasswordStrength } from '@/components/password-field'
|
|
135
|
+
|
|
136
|
+
export { PhoneField, toE164 } from '@/components/phone-field'
|
|
137
|
+
export type { PhoneFieldProps } from '@/components/phone-field'
|
|
138
|
+
|
|
139
|
+
export { PlanCard } from '@/components/plan-card'
|
|
140
|
+
export type { PlanCardProps, PlanFeature } from '@/components/plan-card'
|
|
141
|
+
|
|
142
|
+
export { PlanPicker } from '@/components/plan-picker'
|
|
143
|
+
export type { BillingCycle, PlanOffer, PlanPickerProps } from '@/components/plan-picker'
|
|
144
|
+
|
|
145
|
+
export { ProfileScreen } from '@/components/profile-screen'
|
|
146
|
+
export type { ProfileRow, ProfileScreenProps, ProfileSection } from '@/components/profile-screen'
|
|
147
|
+
|
|
148
|
+
export { SectionHeader } from '@/components/section-header'
|
|
149
|
+
export type { SectionHeaderProps } from '@/components/section-header'
|
|
150
|
+
|
|
151
|
+
export { Segmented } from '@/components/segmented'
|
|
152
|
+
export type { SegmentedOption, SegmentedProps } from '@/components/segmented'
|
|
153
|
+
|
|
154
|
+
export { SignInFlow } from '@/components/sign-in-flow'
|
|
155
|
+
export type { SignInCopy, SignInFlowProps, SignInMethod } from '@/components/sign-in-flow'
|
|
156
|
+
|
|
157
|
+
export { Sheet } from '@/components/sheet'
|
|
158
|
+
export type { SheetProps } from '@/components/sheet'
|
|
159
|
+
|
|
160
|
+
export { Slider } from '@/components/slider'
|
|
161
|
+
export type { SliderProps } from '@/components/slider'
|
|
162
|
+
|
|
163
|
+
export { Stat } from '@/components/stat'
|
|
164
|
+
export type { StatProps } from '@/components/stat'
|
|
165
|
+
|
|
166
|
+
export { Stepper } from '@/components/stepper'
|
|
167
|
+
export type { StepperProps } from '@/components/stepper'
|
|
168
|
+
|
|
169
|
+
export { TaskProgress } from '@/components/task-progress'
|
|
170
|
+
export type { TaskProgressProps, TaskStep, TaskStepStatus } from '@/components/task-progress'
|
|
171
|
+
|
|
172
|
+
export { Table } from '@/components/table'
|
|
173
|
+
export type { SortDirection, TableColumn, TableProps } from '@/components/table'
|
|
174
|
+
|
|
175
|
+
export { TabBar } from '@/components/tab-bar'
|
|
176
|
+
export type { TabBarItem, TabBarProps } from '@/components/tab-bar'
|
|
177
|
+
|
|
178
|
+
export { Tabs } from '@/components/tabs'
|
|
179
|
+
export type { TabOption, TabsProps } from '@/components/tabs'
|
|
180
|
+
|
|
181
|
+
export { NimProvider, useNim, useSchemeToggle } from '@/components/theme'
|
|
182
|
+
export type {
|
|
183
|
+
NimColorway,
|
|
184
|
+
NimDirection,
|
|
185
|
+
NimProviderProps,
|
|
186
|
+
NimScheme,
|
|
187
|
+
NimStyle,
|
|
188
|
+
} from '@/components/theme'
|
|
189
|
+
|
|
190
|
+
export { ToastProvider, useToast } from '@/components/toast'
|
|
191
|
+
export type { ToastOptions, ToastTone } from '@/components/toast'
|
|
192
|
+
|
|
193
|
+
export { Tooltip } from '@/components/tooltip'
|
|
194
|
+
export type { TooltipProps } from '@/components/tooltip'
|
|
195
|
+
|
|
196
|
+
export { ChoiceGrid, Wizard } from '@/components/wizard'
|
|
197
|
+
export type {
|
|
198
|
+
ChoiceGridOption,
|
|
199
|
+
ChoiceGridProps,
|
|
200
|
+
WizardProps,
|
|
201
|
+
WizardStep,
|
|
202
|
+
} from '@/components/wizard'
|
|
203
|
+
|
|
204
|
+
export { Body, Caption, Display, Label, Rule, Title } from '@/components/typography'
|
|
205
|
+
|
|
206
|
+
export {
|
|
207
|
+
COUNTRIES,
|
|
208
|
+
countryByDial,
|
|
209
|
+
countryByIso2,
|
|
210
|
+
countryNamer,
|
|
211
|
+
toAsciiDigits,
|
|
212
|
+
} from '@/lib/countries'
|
|
213
|
+
export type { Country } from '@/lib/countries'
|
|
214
|
+
|
|
215
|
+
export { cn } from '@/lib/cn'
|
|
216
|
+
export type { ClassValue } from '@/lib/cn'
|