@hanzo/ui 5.0.2 → 5.1.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/dist/accordion.js +1 -0
- package/dist/accordion.mjs +1 -0
- package/dist/alert-dialog.js +1 -0
- package/dist/alert-dialog.mjs +1 -0
- package/dist/alert.js +1 -0
- package/dist/alert.mjs +1 -0
- package/dist/avatar.js +1 -0
- package/dist/avatar.mjs +1 -0
- package/dist/badge.js +1 -0
- package/dist/badge.mjs +1 -0
- package/dist/breadcrumb.js +1 -0
- package/dist/breadcrumb.mjs +1 -0
- package/dist/calendar.js +1 -0
- package/dist/calendar.mjs +1 -0
- package/dist/carousel.js +1 -0
- package/dist/carousel.mjs +1 -0
- package/dist/checkbox.js +1 -0
- package/dist/checkbox.mjs +1 -0
- package/dist/chunk-3H5S2OQ3.mjs +1 -0
- package/dist/chunk-5GRJ7UQX.js +1 -0
- package/dist/chunk-63HNMH7C.js +1 -0
- package/dist/chunk-72TOQ4DM.mjs +1 -0
- package/dist/chunk-7AEFTV5R.mjs +1 -0
- package/dist/chunk-7M4AVV2R.js +1 -0
- package/dist/chunk-DKPVJSBC.js +1 -0
- package/dist/chunk-EI7MMDWY.js +1 -0
- package/dist/chunk-GANGDIZG.mjs +1 -0
- package/dist/chunk-GRGT2Z4K.js +1 -0
- package/dist/chunk-JCUUC6NY.mjs +1 -0
- package/dist/chunk-JUQMWLIN.js +1 -0
- package/dist/chunk-PRVEIITE.js +1 -0
- package/dist/chunk-SH52AKNZ.js +1 -0
- package/dist/chunk-TU67EJEW.mjs +1 -0
- package/dist/chunk-WN5KN73U.mjs +1 -0
- package/dist/chunk-YSXGDEY5.mjs +1 -0
- package/dist/chunk-Z76OOVUE.mjs +1 -0
- package/dist/collapsible.js +1 -0
- package/dist/collapsible.mjs +1 -0
- package/dist/command.js +1 -0
- package/dist/command.mjs +1 -0
- package/dist/context-menu.js +1 -0
- package/dist/context-menu.mjs +1 -0
- package/dist/dialog.js +1 -0
- package/dist/dialog.mjs +1 -0
- package/dist/drawer.js +1 -0
- package/dist/drawer.mjs +1 -0
- package/dist/dropdown-menu.js +1 -0
- package/dist/dropdown-menu.mjs +1 -0
- package/dist/form.js +1 -0
- package/dist/form.mjs +1 -0
- package/dist/hover-card.js +1 -0
- package/dist/hover-card.mjs +1 -0
- package/dist/index.js +1 -9079
- package/dist/index.mjs +1 -8700
- package/dist/input-otp.js +1 -0
- package/dist/input-otp.mjs +1 -0
- package/dist/lib/utils.js +1 -0
- package/dist/lib/utils.mjs +1 -0
- package/dist/navigation-menu.js +1 -0
- package/dist/navigation-menu.mjs +1 -0
- package/dist/popover.js +1 -0
- package/dist/popover.mjs +1 -0
- package/dist/progress.js +1 -0
- package/dist/progress.mjs +1 -0
- package/dist/radio-group.js +1 -0
- package/dist/radio-group.mjs +1 -0
- package/dist/resizable.js +1 -0
- package/dist/resizable.mjs +1 -0
- package/dist/scroll-area.js +1 -0
- package/dist/scroll-area.mjs +1 -0
- package/dist/select.js +1 -0
- package/dist/select.mjs +1 -0
- package/dist/separator.js +1 -0
- package/dist/separator.mjs +1 -0
- package/dist/sheet.js +1 -0
- package/dist/sheet.mjs +1 -0
- package/dist/skeleton.js +1 -0
- package/dist/skeleton.mjs +1 -0
- package/dist/slider.js +1 -0
- package/dist/slider.mjs +1 -0
- package/dist/sonner.js +1 -0
- package/dist/sonner.mjs +1 -0
- package/dist/src/utils.js +1 -0
- package/dist/src/utils.mjs +1 -0
- package/dist/switch.js +1 -0
- package/dist/switch.mjs +1 -0
- package/dist/table.js +1 -0
- package/dist/table.mjs +1 -0
- package/dist/tabs.js +1 -0
- package/dist/tabs.mjs +1 -0
- package/dist/tailwind/index.js +1 -0
- package/dist/tailwind/index.mjs +1 -0
- package/dist/textarea.js +1 -0
- package/dist/textarea.mjs +1 -0
- package/dist/toggle-group.js +1 -0
- package/dist/toggle-group.mjs +1 -0
- package/dist/toggle.js +1 -0
- package/dist/toggle.mjs +1 -0
- package/dist/tooltip.js +1 -0
- package/dist/tooltip.mjs +1 -0
- package/dist/types/index.js +1 -0
- package/dist/types/index.mjs +1 -0
- package/package.json +110 -81
- package/assets/ai-icons.tsx +0 -207
- package/assets/crypto.tsx +0 -33
- package/assets/file-type-icon.tsx +0 -66
- package/assets/file.tsx +0 -45
- package/assets/general.tsx +0 -2318
- package/assets/hanzo-logo.svg +0 -9
- package/assets/hanzo-logo.tsx +0 -17
- package/assets/index.ts +0 -122
- package/assets/index.tsx +0 -4
- package/assets/llm-provider.tsx +0 -1094
- package/blocks/auth/index.ts +0 -6
- package/blocks/auth/login-2fa.tsx +0 -165
- package/blocks/auth/login-basic.tsx +0 -94
- package/blocks/auth/login-social.tsx +0 -148
- package/blocks/auth/magic-link.tsx +0 -129
- package/blocks/auth/password-reset.tsx +0 -97
- package/blocks/auth/signup.tsx +0 -157
- package/blocks/components/accordian-block.tsx +0 -48
- package/blocks/components/block-component-props.ts +0 -11
- package/blocks/components/bullet-cards-block.tsx +0 -46
- package/blocks/components/card-block/index.tsx +0 -171
- package/blocks/components/card-block/link-out-button.tsx +0 -20
- package/blocks/components/card-block/util.ts +0 -28
- package/blocks/components/carte-blanche-block/index.tsx +0 -127
- package/blocks/components/carte-blanche-block/variant-content-left.tsx +0 -49
- package/blocks/components/content.tsx +0 -70
- package/blocks/components/cta-block.tsx +0 -115
- package/blocks/components/enh-heading-block.tsx +0 -204
- package/blocks/components/grid-block/grid-block-mutator.ts +0 -12
- package/blocks/components/grid-block/index.tsx +0 -83
- package/blocks/components/grid-block/mutator-registry.ts +0 -10
- package/blocks/components/grid-block/table-borders.mutator.ts +0 -47
- package/blocks/components/group-block.tsx +0 -83
- package/blocks/components/heading-block.tsx +0 -88
- package/blocks/components/image-block.tsx +0 -111
- package/blocks/components/index.ts +0 -30
- package/blocks/components/screenful-block/content.tsx +0 -123
- package/blocks/components/screenful-block/index.tsx +0 -107
- package/blocks/components/screenful-block/poster-background.tsx +0 -34
- package/blocks/components/screenful-block/video-background.tsx +0 -45
- package/blocks/components/space-block.tsx +0 -66
- package/blocks/components/video-block.tsx +0 -138
- package/blocks/data-display/activity-feed.tsx +0 -242
- package/blocks/data-display/data-table.tsx +0 -235
- package/blocks/data-display/stats-grid.tsx +0 -194
- package/blocks/def/accordian-block.ts +0 -14
- package/blocks/def/block.ts +0 -7
- package/blocks/def/bullet-cards-block.ts +0 -22
- package/blocks/def/card-block.ts +0 -22
- package/blocks/def/carte-blanche-block.ts +0 -21
- package/blocks/def/cta-block.ts +0 -19
- package/blocks/def/element-block.ts +0 -11
- package/blocks/def/enh-heading-block.ts +0 -44
- package/blocks/def/grid-block.ts +0 -16
- package/blocks/def/group-block.ts +0 -11
- package/blocks/def/heading-block.ts +0 -15
- package/blocks/def/image-block.ts +0 -31
- package/blocks/def/index.ts +0 -35
- package/blocks/def/screenful-block.ts +0 -54
- package/blocks/def/space-block.ts +0 -64
- package/blocks/def/video-block.ts +0 -9
- package/blocks/ecommerce/checkout.tsx +0 -242
- package/blocks/ecommerce/index.ts +0 -7
- package/blocks/ecommerce/product-detail.tsx +0 -257
- package/blocks/ecommerce/product-grid.tsx +0 -148
- package/blocks/ecommerce/shopping-cart.tsx +0 -181
- package/blocks/index.ts +0 -2
- package/blocks/marketing/cta-section.tsx +0 -207
- package/blocks/marketing/faq.tsx +0 -159
- package/blocks/marketing/features-grid.tsx +0 -156
- package/blocks/marketing/hero-section.tsx +0 -192
- package/blocks/marketing/index.ts +0 -6
- package/blocks/marketing/pricing-table.tsx +0 -121
- package/blocks/marketing/testimonials.tsx +0 -196
- package/components/index.ts +0 -9
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/tailwind.js +0 -2025
- package/dist/tailwind.js.map +0 -1
- package/dist/tailwind.mjs +0 -2013
- package/dist/tailwind.mjs.map +0 -1
- package/dist/types.js +0 -59
- package/dist/types.js.map +0 -1
- package/dist/types.mjs +0 -53
- package/dist/types.mjs.map +0 -1
- package/dist/utils.js +0 -30
- package/dist/utils.js.map +0 -1
- package/dist/utils.mjs +0 -26
- package/dist/utils.mjs.map +0 -1
- package/frameworks/core/index.ts +0 -6
- package/frameworks/core/utils/index.ts +0 -64
- package/frameworks/react/components/button.tsx +0 -26
- package/frameworks/react/components/index.ts +0 -5
- package/frameworks/react/hooks/index.ts +0 -5
- package/frameworks/react/index.ts +0 -9
- package/frameworks/react/package.json +0 -8
- package/frameworks/react/utils/index.ts +0 -2
- package/frameworks/react-native/index.ts +0 -9
- package/frameworks/react-native/package.json +0 -8
- package/frameworks/registry.json +0 -371
- package/frameworks/setup.sh +0 -69
- package/frameworks/svelte/index.ts +0 -9
- package/frameworks/svelte/package.json +0 -8
- package/frameworks/tracker.json +0 -1854
- package/frameworks/vue/index.ts +0 -9
- package/frameworks/vue/package.json +0 -8
- package/helpers/file.ts +0 -33
- package/helpers/memoization.ts +0 -40
- package/primitives/accordion.tsx +0 -74
- package/primitives/action-button.tsx +0 -42
- package/primitives/alert-dialog.tsx +0 -185
- package/primitives/alert.tsx +0 -74
- package/primitives/apply-typography.tsx +0 -55
- package/primitives/aspect-ratio.tsx +0 -5
- package/primitives/avatar.tsx +0 -57
- package/primitives/background-beams.tsx +0 -142
- package/primitives/badge.tsx +0 -45
- package/primitives/breadcrumb.tsx +0 -130
- package/primitives/breakpoint-indicator.tsx +0 -19
- package/primitives/button.tsx +0 -72
- package/primitives/calendar.tsx +0 -72
- package/primitives/card.tsx +0 -97
- package/primitives/carousel.tsx +0 -238
- package/primitives/chat/chat-input-area.tsx +0 -88
- package/primitives/chat/chat-input.tsx +0 -71
- package/primitives/chat/files-preview.tsx +0 -331
- package/primitives/chat/index.ts +0 -6
- package/primitives/chat/json-form.tsx +0 -8
- package/primitives/chat/message-list.tsx +0 -308
- package/primitives/chat/message.tsx +0 -569
- package/primitives/chat/sqlite-preview.tsx +0 -215
- package/primitives/checkbox.tsx +0 -32
- package/primitives/collapsible.tsx +0 -9
- package/primitives/combobox.tsx +0 -239
- package/primitives/command.tsx +0 -151
- package/primitives/context-menu.tsx +0 -206
- package/primitives/copy-to-clipboard-icon.tsx +0 -60
- package/primitives/dialog-video-controller.tsx +0 -38
- package/primitives/dialog.tsx +0 -128
- package/primitives/dot-pattern.tsx +0 -57
- package/primitives/dots-loader.tsx +0 -13
- package/primitives/drawer.tsx +0 -113
- package/primitives/dropdown-menu.tsx +0 -199
- package/primitives/error-message.tsx +0 -19
- package/primitives/file-uploader.tsx +0 -203
- package/primitives/form.tsx +0 -185
- package/primitives/hover-card.tsx +0 -28
- package/primitives/icons/github.tsx +0 -14
- package/primitives/icons/index.ts +0 -18
- package/primitives/icons/youtube-logo.tsx +0 -59
- package/primitives/index-client.ts +0 -4
- package/primitives/index-common.ts +0 -304
- package/primitives/index-next.ts +0 -4
- package/primitives/input-otp.tsx +0 -65
- package/primitives/input.tsx +0 -128
- package/primitives/label.tsx +0 -21
- package/primitives/list-adaptor.ts +0 -12
- package/primitives/list-box.tsx +0 -74
- package/primitives/loading-spinner.tsx +0 -33
- package/primitives/markdown-preview.tsx +0 -612
- package/primitives/mermaid.tsx +0 -196
- package/primitives/navigation-menu.tsx +0 -147
- package/primitives/next/image.tsx +0 -91
- package/primitives/next/index.ts +0 -7
- package/primitives/next/inline-icon.tsx +0 -36
- package/primitives/next/link-element.tsx +0 -109
- package/primitives/next/mdx-link.tsx +0 -22
- package/primitives/next/media-stack.tsx +0 -52
- package/primitives/next/nav-items.tsx +0 -45
- package/primitives/next/youtube-embed.tsx +0 -83
- package/primitives/pagination.tsx +0 -117
- package/primitives/popover.tsx +0 -34
- package/primitives/pretty-json-print.tsx +0 -28
- package/primitives/progress.tsx +0 -27
- package/primitives/prompt-textarea.tsx +0 -72
- package/primitives/qr-code.tsx +0 -112
- package/primitives/radio-group.tsx +0 -42
- package/primitives/resizable.tsx +0 -47
- package/primitives/scroll-area.tsx +0 -57
- package/primitives/search-input.tsx +0 -66
- package/primitives/select.tsx +0 -122
- package/primitives/separator.tsx +0 -26
- package/primitives/sheet.tsx +0 -139
- package/primitives/skeleton.tsx +0 -18
- package/primitives/slider.tsx +0 -63
- package/primitives/sonner.tsx +0 -35
- package/primitives/step-indicator.tsx +0 -69
- package/primitives/stepper.tsx +0 -272
- package/primitives/switch.tsx +0 -27
- package/primitives/table.tsx +0 -105
- package/primitives/tabs.tsx +0 -50
- package/primitives/text-area.tsx +0 -26
- package/primitives/text-link.tsx +0 -27
- package/primitives/textarea.tsx +0 -64
- package/primitives/textfield.tsx +0 -78
- package/primitives/toast.tsx +0 -30
- package/primitives/toggle-group.tsx +0 -63
- package/primitives/toggle.tsx +0 -44
- package/primitives/tooltip.tsx +0 -47
- package/primitives/video-player.tsx +0 -23
- package/src/button.ts +0 -1
- package/src/hooks/index.ts +0 -7
- package/src/hooks/use-click-away.ts +0 -31
- package/src/hooks/use-combined-refs.ts +0 -22
- package/src/hooks/use-copy-clipboard.ts +0 -30
- package/src/hooks/use-debounce.ts +0 -17
- package/src/hooks/use-fill-ids.ts +0 -25
- package/src/hooks/use-map.ts +0 -26
- package/src/hooks/use-measure.ts +0 -42
- package/src/hooks/use-reverse-video-playback.ts +0 -43
- package/src/hooks/use-scroll-restoration.ts +0 -50
- package/src/index-lean.ts +0 -87
- package/src/index.ts +0 -54
- package/src/mcp/README.md +0 -141
- package/src/mcp/enhanced-server.ts +0 -1208
- package/src/mcp/index.ts +0 -518
- package/src/mcp/package.json +0 -10
- package/src/registry/api.ts +0 -164
- package/src/registry/index.ts +0 -60
- package/src/registry/package.json +0 -10
- package/src/utils.ts +0 -19
- package/tailwind/colors.tailwind.js +0 -53
- package/tailwind/fontFamily.tailwind.ts +0 -7
- package/tailwind/fontSize.tailwind.ts +0 -13
- package/tailwind/index.ts +0 -7
- package/tailwind/safelist.tailwind.js +0 -26
- package/tailwind/screens.tailwind.js +0 -8
- package/tailwind/spacing.tailwind.js +0 -65
- package/tailwind/tailwind.config.hanzo-preset.d.ts +0 -5
- package/tailwind/tailwind.config.hanzo-preset.js +0 -915
- package/tailwind/tw-font-desc.ts +0 -15
- package/tailwind/typo-plugin/get-plugin-styles.js +0 -679
- package/tailwind/typo-plugin/index.d.ts +0 -9
- package/tailwind/typo-plugin/index.js +0 -141
- package/tailwind/typo-plugin/utils.js +0 -60
- package/tailwind/typography-test.mdx +0 -35
- package/tailwind/z-index.tailwind.js +0 -71
- package/types/animation-def.ts +0 -3
- package/types/breakpoints.ts +0 -11
- package/types/bullet-item.ts +0 -10
- package/types/button-def.ts +0 -39
- package/types/dimensions.ts +0 -8
- package/types/grid-def.ts +0 -56
- package/types/image-def.ts +0 -32
- package/types/index.ts +0 -30
- package/types/link-def.ts +0 -56
- package/types/media-stack-def.ts +0 -31
- package/types/t-shirt-size.ts +0 -5
- package/types/tshirt-dimensions.ts +0 -20
- package/types/video-def.ts +0 -25
- package/util/blob.ts +0 -33
- package/util/copy-to-clipboard.ts +0 -17
- package/util/create-shadow-root.ts +0 -22
- package/util/date.ts +0 -84
- package/util/debounce.ts +0 -11
- package/util/file.ts +0 -15
- package/util/format-and-abbreviate-as-currency.ts +0 -125
- package/util/format-text.ts +0 -34
- package/util/format-to-max-char.ts +0 -68
- package/util/index-client.ts +0 -3
- package/util/index.ts +0 -112
- package/util/number-abbreviate.ts +0 -49
- package/util/specifier.ts +0 -43
- package/util/spread-to-transform.ts +0 -25
- package/util/step-animation.ts +0 -90
- package/util/timing.ts +0 -3
- package/util/toasts.tsx +0 -17
- package/util/two-way-map.ts +0 -19
package/frameworks/vue/index.ts
DELETED
package/helpers/file.ts
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
export const getFileExt = (fileName: string): string => {
|
|
2
|
-
if (!fileName) return '';
|
|
3
|
-
const parts = fileName.split('.');
|
|
4
|
-
return parts.length > 1 ? parts[parts.length - 1].toLowerCase() : '';
|
|
5
|
-
};
|
|
6
|
-
|
|
7
|
-
export const formatFileSize = (bytes: number): string => {
|
|
8
|
-
if (bytes === 0) return '0 Bytes';
|
|
9
|
-
const k = 1024;
|
|
10
|
-
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
|
|
11
|
-
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
12
|
-
return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i];
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
export const isImageFile = (fileName: string): boolean => {
|
|
16
|
-
const ext = getFileExt(fileName);
|
|
17
|
-
return ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'svg', 'webp'].includes(ext);
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
export const isPdfFile = (fileName: string): boolean => {
|
|
21
|
-
const ext = getFileExt(fileName);
|
|
22
|
-
return ext === 'pdf';
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
export const isVideoFile = (fileName: string): boolean => {
|
|
26
|
-
const ext = getFileExt(fileName);
|
|
27
|
-
return ['mp4', 'avi', 'mov', 'wmv', 'flv', 'mkv', 'webm'].includes(ext);
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
export const isAudioFile = (fileName: string): boolean => {
|
|
31
|
-
const ext = getFileExt(fileName);
|
|
32
|
-
return ['mp3', 'wav', 'ogg', 'aac', 'flac', 'wma'].includes(ext);
|
|
33
|
-
};
|
package/helpers/memoization.ts
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
|
|
3
|
-
// Memoization helpers for markdown components
|
|
4
|
-
export const memoCompareNodes = (
|
|
5
|
-
prevProps: { children?: React.ReactNode },
|
|
6
|
-
nextProps: { children?: React.ReactNode }
|
|
7
|
-
): boolean => {
|
|
8
|
-
return prevProps.children === nextProps.children;
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
export const memoizeMarkdownComponents = <T extends Record<string, React.ComponentType<any>>>(
|
|
12
|
-
components: T
|
|
13
|
-
): T => {
|
|
14
|
-
const memoized: any = {};
|
|
15
|
-
|
|
16
|
-
for (const key in components) {
|
|
17
|
-
if (components.hasOwnProperty(key)) {
|
|
18
|
-
memoized[key] = React.memo(components[key]);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
return memoized as T;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
// Helper to check if props are equal for memoization
|
|
26
|
-
export const arePropsEqual = <T extends Record<string, any>>(
|
|
27
|
-
prevProps: T,
|
|
28
|
-
nextProps: T,
|
|
29
|
-
keys?: string[]
|
|
30
|
-
): boolean => {
|
|
31
|
-
const keysToCheck = keys || Object.keys(prevProps);
|
|
32
|
-
|
|
33
|
-
for (const key of keysToCheck) {
|
|
34
|
-
if (prevProps[key] !== nextProps[key]) {
|
|
35
|
-
return false;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
return true;
|
|
40
|
-
};
|
package/primitives/accordion.tsx
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import * as AccordionPrimitive from '@radix-ui/react-accordion';
|
|
2
|
-
import { ChevronDown } from 'lucide-react';
|
|
3
|
-
import React from 'react';
|
|
4
|
-
|
|
5
|
-
import { cn } from '../src/utils';
|
|
6
|
-
|
|
7
|
-
const Accordion = AccordionPrimitive.Root;
|
|
8
|
-
|
|
9
|
-
type AccordionItemProps = React.ComponentPropsWithoutRef<
|
|
10
|
-
typeof AccordionPrimitive.Item
|
|
11
|
-
> & {
|
|
12
|
-
ref?: React.RefObject<React.ComponentRef<typeof AccordionPrimitive.Item>>;
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
const AccordionItem = ({ className, ref, ...props }: AccordionItemProps) => (
|
|
16
|
-
<AccordionPrimitive.Item className={cn('', className)} ref={ref} {...props} />
|
|
17
|
-
);
|
|
18
|
-
AccordionItem.displayName = 'AccordionItem';
|
|
19
|
-
|
|
20
|
-
type AccordionTriggerProps = React.ComponentPropsWithoutRef<
|
|
21
|
-
typeof AccordionPrimitive.Trigger
|
|
22
|
-
> & {
|
|
23
|
-
hideArrow?: boolean;
|
|
24
|
-
ref?: React.RefObject<React.ComponentRef<typeof AccordionPrimitive.Trigger>>;
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
const AccordionTrigger = ({
|
|
28
|
-
className,
|
|
29
|
-
children,
|
|
30
|
-
hideArrow = false,
|
|
31
|
-
ref,
|
|
32
|
-
...props
|
|
33
|
-
}: AccordionTriggerProps) => (
|
|
34
|
-
<AccordionPrimitive.Header className="flex">
|
|
35
|
-
<AccordionPrimitive.Trigger
|
|
36
|
-
className={cn(
|
|
37
|
-
'flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180',
|
|
38
|
-
className,
|
|
39
|
-
)}
|
|
40
|
-
ref={ref}
|
|
41
|
-
{...props}
|
|
42
|
-
>
|
|
43
|
-
{children}
|
|
44
|
-
{hideArrow ? null : (
|
|
45
|
-
<ChevronDown className="h-4 w-4 shrink-0 transition-transform duration-200" />
|
|
46
|
-
)}
|
|
47
|
-
</AccordionPrimitive.Trigger>
|
|
48
|
-
</AccordionPrimitive.Header>
|
|
49
|
-
);
|
|
50
|
-
AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;
|
|
51
|
-
|
|
52
|
-
type AccordionContentProps = React.ComponentPropsWithoutRef<
|
|
53
|
-
typeof AccordionPrimitive.Content
|
|
54
|
-
> & {
|
|
55
|
-
ref?: React.RefObject<React.ComponentRef<typeof AccordionPrimitive.Content>>;
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
const AccordionContent = ({
|
|
59
|
-
className,
|
|
60
|
-
children,
|
|
61
|
-
ref,
|
|
62
|
-
...props
|
|
63
|
-
}: AccordionContentProps) => (
|
|
64
|
-
<AccordionPrimitive.Content
|
|
65
|
-
className="data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down w-full overflow-hidden text-sm transition-all"
|
|
66
|
-
ref={ref}
|
|
67
|
-
{...props}
|
|
68
|
-
>
|
|
69
|
-
<div className={cn('pt-0 pb-4', className)}>{children}</div>
|
|
70
|
-
</AccordionPrimitive.Content>
|
|
71
|
-
);
|
|
72
|
-
AccordionContent.displayName = AccordionPrimitive.Content.displayName;
|
|
73
|
-
|
|
74
|
-
export { Accordion, AccordionItem, AccordionTrigger, AccordionContent };
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
'use client'
|
|
2
|
-
import React from 'react'
|
|
3
|
-
|
|
4
|
-
import { cn, type VariantProps } from '../util'
|
|
5
|
-
|
|
6
|
-
import type { ButtonDef, ButtonModalDef } from '../types'
|
|
7
|
-
import type { buttonVariants } from './button'
|
|
8
|
-
import DVC from './dialog-video-controller'
|
|
9
|
-
|
|
10
|
-
const ActionButton: React.FC<
|
|
11
|
-
VariantProps<typeof buttonVariants> &
|
|
12
|
-
{
|
|
13
|
-
def: ButtonDef
|
|
14
|
-
className?: string
|
|
15
|
-
}
|
|
16
|
-
> = ({
|
|
17
|
-
def,
|
|
18
|
-
className='',
|
|
19
|
-
...rest
|
|
20
|
-
}) => {
|
|
21
|
-
if (def.action.type === 'modal') {
|
|
22
|
-
const m = def.action.def as ButtonModalDef
|
|
23
|
-
const Modal = m.Comp
|
|
24
|
-
return (
|
|
25
|
-
<DVC>
|
|
26
|
-
<Modal
|
|
27
|
-
title={m.title}
|
|
28
|
-
byline={m.byline}
|
|
29
|
-
buttonText={def.text}
|
|
30
|
-
buttonProps={{...def.props, ...rest, className: cn((def.props?.className ?? ''), className)}}
|
|
31
|
-
action={m.action}
|
|
32
|
-
actionEnclosure={m.actionEnclosure}
|
|
33
|
-
{...m.props}
|
|
34
|
-
/>
|
|
35
|
-
</DVC>
|
|
36
|
-
)
|
|
37
|
-
}
|
|
38
|
-
// no other types supported yet
|
|
39
|
-
return <></>
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export default ActionButton
|
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
|
|
4
|
-
import { cn } from '../src/utils';
|
|
5
|
-
import { buttonVariants } from './button';
|
|
6
|
-
|
|
7
|
-
const AlertDialog = AlertDialogPrimitive.Root;
|
|
8
|
-
|
|
9
|
-
const AlertDialogTrigger = AlertDialogPrimitive.Trigger;
|
|
10
|
-
|
|
11
|
-
const AlertDialogPortal = AlertDialogPrimitive.Portal;
|
|
12
|
-
|
|
13
|
-
type AlertDialogOverlayProps = React.ComponentPropsWithoutRef<
|
|
14
|
-
typeof AlertDialogPrimitive.Overlay
|
|
15
|
-
> & {
|
|
16
|
-
ref?: React.RefObject<
|
|
17
|
-
React.ComponentRef<typeof AlertDialogPrimitive.Overlay>
|
|
18
|
-
>;
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
const AlertDialogOverlay = ({
|
|
22
|
-
className,
|
|
23
|
-
children,
|
|
24
|
-
ref,
|
|
25
|
-
...props
|
|
26
|
-
}: AlertDialogOverlayProps) => (
|
|
27
|
-
<AlertDialogPrimitive.Overlay
|
|
28
|
-
className={cn(
|
|
29
|
-
'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 backdrop-blur-sm',
|
|
30
|
-
'bg-bg-dark/90',
|
|
31
|
-
className,
|
|
32
|
-
)}
|
|
33
|
-
{...props}
|
|
34
|
-
ref={ref}
|
|
35
|
-
/>
|
|
36
|
-
);
|
|
37
|
-
AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
|
|
38
|
-
|
|
39
|
-
type AlertDialogContentProps = React.ComponentPropsWithoutRef<
|
|
40
|
-
typeof AlertDialogPrimitive.Content
|
|
41
|
-
> & {
|
|
42
|
-
ref?: React.RefObject<
|
|
43
|
-
React.ComponentRef<typeof AlertDialogPrimitive.Content>
|
|
44
|
-
>;
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
const AlertDialogContent = ({
|
|
48
|
-
className,
|
|
49
|
-
ref,
|
|
50
|
-
...props
|
|
51
|
-
}: AlertDialogContentProps) => (
|
|
52
|
-
<AlertDialogPortal>
|
|
53
|
-
<AlertDialogOverlay />
|
|
54
|
-
<AlertDialogPrimitive.Content
|
|
55
|
-
className={cn(
|
|
56
|
-
'bg-bg-default data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 border-divider fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg',
|
|
57
|
-
className,
|
|
58
|
-
)}
|
|
59
|
-
ref={ref}
|
|
60
|
-
{...props}
|
|
61
|
-
/>
|
|
62
|
-
</AlertDialogPortal>
|
|
63
|
-
);
|
|
64
|
-
AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;
|
|
65
|
-
|
|
66
|
-
const AlertDialogHeader = ({
|
|
67
|
-
className,
|
|
68
|
-
...props
|
|
69
|
-
}: React.HTMLAttributes<HTMLDivElement>) => (
|
|
70
|
-
<div
|
|
71
|
-
className={cn(
|
|
72
|
-
'flex flex-col space-y-2 text-center sm:text-left',
|
|
73
|
-
className,
|
|
74
|
-
)}
|
|
75
|
-
{...props}
|
|
76
|
-
/>
|
|
77
|
-
);
|
|
78
|
-
AlertDialogHeader.displayName = 'AlertDialogHeader';
|
|
79
|
-
|
|
80
|
-
const AlertDialogFooter = ({
|
|
81
|
-
className,
|
|
82
|
-
...props
|
|
83
|
-
}: React.HTMLAttributes<HTMLDivElement>) => (
|
|
84
|
-
<div className={cn('flex', className)} {...props} />
|
|
85
|
-
);
|
|
86
|
-
AlertDialogFooter.displayName = 'AlertDialogFooter';
|
|
87
|
-
|
|
88
|
-
type AlertDialogTitleProps = React.ComponentPropsWithoutRef<
|
|
89
|
-
typeof AlertDialogPrimitive.Title
|
|
90
|
-
> & {
|
|
91
|
-
ref?: React.RefObject<React.ComponentRef<typeof AlertDialogPrimitive.Title>>;
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
const AlertDialogTitle = ({
|
|
95
|
-
className,
|
|
96
|
-
ref,
|
|
97
|
-
...props
|
|
98
|
-
}: AlertDialogTitleProps) => (
|
|
99
|
-
<AlertDialogPrimitive.Title
|
|
100
|
-
className={cn('text-lg font-semibold', className)}
|
|
101
|
-
ref={ref}
|
|
102
|
-
{...props}
|
|
103
|
-
/>
|
|
104
|
-
);
|
|
105
|
-
AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
|
|
106
|
-
|
|
107
|
-
type AlertDialogDescriptionProps = React.ComponentPropsWithoutRef<
|
|
108
|
-
typeof AlertDialogPrimitive.Description
|
|
109
|
-
> & {
|
|
110
|
-
ref?: React.RefObject<
|
|
111
|
-
React.ComponentRef<typeof AlertDialogPrimitive.Description>
|
|
112
|
-
>;
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
const AlertDialogDescription = ({
|
|
116
|
-
className,
|
|
117
|
-
ref,
|
|
118
|
-
...props
|
|
119
|
-
}: AlertDialogDescriptionProps) => (
|
|
120
|
-
<AlertDialogPrimitive.Description
|
|
121
|
-
className={cn('text-text-secondary text-sm', className)}
|
|
122
|
-
ref={ref}
|
|
123
|
-
{...props}
|
|
124
|
-
/>
|
|
125
|
-
);
|
|
126
|
-
AlertDialogDescription.displayName =
|
|
127
|
-
AlertDialogPrimitive.Description.displayName;
|
|
128
|
-
|
|
129
|
-
type AlertDialogActionProps = React.ComponentPropsWithoutRef<
|
|
130
|
-
typeof AlertDialogPrimitive.Action
|
|
131
|
-
> & {
|
|
132
|
-
ref?: React.RefObject<React.ComponentRef<typeof AlertDialogPrimitive.Action>>;
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
const AlertDialogAction = ({
|
|
136
|
-
className,
|
|
137
|
-
ref,
|
|
138
|
-
...props
|
|
139
|
-
}: AlertDialogActionProps) => (
|
|
140
|
-
<AlertDialogPrimitive.Action
|
|
141
|
-
className={cn(
|
|
142
|
-
buttonVariants({ variant: 'default', size: 'sm' }),
|
|
143
|
-
className,
|
|
144
|
-
)}
|
|
145
|
-
ref={ref}
|
|
146
|
-
{...props}
|
|
147
|
-
/>
|
|
148
|
-
);
|
|
149
|
-
AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
|
|
150
|
-
|
|
151
|
-
type AlertDialogCancelProps = React.ComponentPropsWithoutRef<
|
|
152
|
-
typeof AlertDialogPrimitive.Cancel
|
|
153
|
-
> & {
|
|
154
|
-
ref?: React.RefObject<React.ComponentRef<typeof AlertDialogPrimitive.Cancel>>;
|
|
155
|
-
};
|
|
156
|
-
|
|
157
|
-
const AlertDialogCancel = ({
|
|
158
|
-
className,
|
|
159
|
-
ref,
|
|
160
|
-
...props
|
|
161
|
-
}: AlertDialogCancelProps) => (
|
|
162
|
-
<AlertDialogPrimitive.Cancel
|
|
163
|
-
className={cn(
|
|
164
|
-
buttonVariants({ variant: 'outline', size: 'sm' }),
|
|
165
|
-
className,
|
|
166
|
-
)}
|
|
167
|
-
ref={ref}
|
|
168
|
-
{...props}
|
|
169
|
-
/>
|
|
170
|
-
);
|
|
171
|
-
AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;
|
|
172
|
-
|
|
173
|
-
export {
|
|
174
|
-
AlertDialog,
|
|
175
|
-
AlertDialogPortal,
|
|
176
|
-
AlertDialogOverlay,
|
|
177
|
-
AlertDialogTrigger,
|
|
178
|
-
AlertDialogContent,
|
|
179
|
-
AlertDialogHeader,
|
|
180
|
-
AlertDialogFooter,
|
|
181
|
-
AlertDialogTitle,
|
|
182
|
-
AlertDialogDescription,
|
|
183
|
-
AlertDialogAction,
|
|
184
|
-
AlertDialogCancel,
|
|
185
|
-
};
|
package/primitives/alert.tsx
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { cva, type VariantProps } from 'class-variance-authority';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
|
|
4
|
-
import { cn } from '../src/utils';
|
|
5
|
-
|
|
6
|
-
const alertVariants = cva(
|
|
7
|
-
'[&>svg]:text-text-default relative w-full rounded-lg border p-4 [&>svg]:absolute [&>svg]:top-4 [&>svg]:left-4 [&>svg+div]:translate-y-[-3px] [&>svg~*]:pl-7',
|
|
8
|
-
{
|
|
9
|
-
variants: {
|
|
10
|
-
variant: {
|
|
11
|
-
default: 'bg-bg-tertiary text-text-default',
|
|
12
|
-
info: 'text-text-secondary [&>svg]:text-text-secondary bg-gray-250 border-gray-100 border-gray-200',
|
|
13
|
-
destructive:
|
|
14
|
-
'border-[#4d0408] bg-[#2d0607] text-[#ff9ea1] [&>svg]:text-[#ff9ea1]',
|
|
15
|
-
warning:
|
|
16
|
-
'border-yellow-800 bg-yellow-900 text-yellow-400 [&>svg]:text-yellow-400',
|
|
17
|
-
success:
|
|
18
|
-
'border-green-800 bg-green-900 text-green-400 [&>svg]:text-green-400',
|
|
19
|
-
download:
|
|
20
|
-
'border-gray-800 bg-gray-900 text-cyan-400 [&>svg]:text-cyan-400',
|
|
21
|
-
},
|
|
22
|
-
},
|
|
23
|
-
defaultVariants: {
|
|
24
|
-
variant: 'default',
|
|
25
|
-
},
|
|
26
|
-
},
|
|
27
|
-
);
|
|
28
|
-
|
|
29
|
-
type AlertProps = React.HTMLAttributes<HTMLDivElement> &
|
|
30
|
-
VariantProps<typeof alertVariants> & {
|
|
31
|
-
ref?: React.RefObject<HTMLDivElement>;
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
const Alert = ({ className, variant, ref, ...props }: AlertProps) => (
|
|
35
|
-
<div
|
|
36
|
-
className={cn(alertVariants({ variant }), className)}
|
|
37
|
-
ref={ref}
|
|
38
|
-
role="alert"
|
|
39
|
-
{...props}
|
|
40
|
-
/>
|
|
41
|
-
);
|
|
42
|
-
Alert.displayName = 'Alert';
|
|
43
|
-
|
|
44
|
-
type AlertTitleProps = React.HTMLAttributes<HTMLHeadingElement> & {
|
|
45
|
-
ref?: React.RefObject<HTMLParagraphElement>;
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
const AlertTitle = ({ className, ref, ...props }: AlertTitleProps) => (
|
|
49
|
-
<h5
|
|
50
|
-
className={cn('mb-1 leading-none font-medium tracking-tight', className)}
|
|
51
|
-
ref={ref}
|
|
52
|
-
{...props}
|
|
53
|
-
/>
|
|
54
|
-
);
|
|
55
|
-
AlertTitle.displayName = 'AlertTitle';
|
|
56
|
-
|
|
57
|
-
type AlertDescriptionProps = React.HTMLAttributes<HTMLParagraphElement> & {
|
|
58
|
-
ref?: React.RefObject<HTMLParagraphElement>;
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
const AlertDescription = ({
|
|
62
|
-
className,
|
|
63
|
-
ref,
|
|
64
|
-
...props
|
|
65
|
-
}: AlertDescriptionProps) => (
|
|
66
|
-
<div
|
|
67
|
-
className={cn('text-sm [&_p]:leading-relaxed', className)}
|
|
68
|
-
ref={ref}
|
|
69
|
-
{...props}
|
|
70
|
-
/>
|
|
71
|
-
);
|
|
72
|
-
AlertDescription.displayName = 'AlertDescription';
|
|
73
|
-
|
|
74
|
-
export { Alert, AlertTitle, AlertDescription };
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import React, { PropsWithChildren } from 'react'
|
|
2
|
-
|
|
3
|
-
import { cn } from '../util'
|
|
4
|
-
|
|
5
|
-
type TypographySize = 'responsive' | 'sm' | 'base' | 'lg' | 'xl' // if t-shirt size, do *not* be responsive
|
|
6
|
-
|
|
7
|
-
const ApplyTypography: React.FC<
|
|
8
|
-
React.ComponentProps<'div'> & {
|
|
9
|
-
asTag?: 'div' | 'section' | 'nav' | 'main' | 'article',
|
|
10
|
-
size?: TypographySize
|
|
11
|
-
}
|
|
12
|
-
> = ({
|
|
13
|
-
children,
|
|
14
|
-
className='',
|
|
15
|
-
asTag='div',
|
|
16
|
-
size='responsive',
|
|
17
|
-
...rest
|
|
18
|
-
}) => {
|
|
19
|
-
|
|
20
|
-
// responsive version by default
|
|
21
|
-
let typoClasses =
|
|
22
|
-
'typography gap-3 ' +
|
|
23
|
-
'xs:typography-sm ' +
|
|
24
|
-
'sm:typography sm:gap-4 ' +
|
|
25
|
-
'lg:typography-lg lg:gap-5 ' +
|
|
26
|
-
'xl:typography-xl xl:gap-6 ' +
|
|
27
|
-
'typography-headings:font-heading ' // only effects h1-h3 (in plugin)
|
|
28
|
-
|
|
29
|
-
switch (size) {
|
|
30
|
-
case 'sm': {
|
|
31
|
-
typoClasses = 'typography typography-sm gap-3 typography-headings:font-heading typography-p:text-sm '
|
|
32
|
-
} break
|
|
33
|
-
case 'base': {
|
|
34
|
-
typoClasses = 'typography gap-4 typography-headings:font-heading '
|
|
35
|
-
} break
|
|
36
|
-
case 'lg': {
|
|
37
|
-
typoClasses = 'typography typography-lg gap-5 typography-headings:font-heading typography-p:text-lg '
|
|
38
|
-
} break
|
|
39
|
-
case 'xl': {
|
|
40
|
-
typoClasses = 'typography typography-xl gap-6 typography-headings:font-heading typography-p:text-lg '
|
|
41
|
-
} break
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
const Tag = asTag
|
|
45
|
-
return (
|
|
46
|
-
<Tag {...rest} className={cn(typoClasses, className)}>
|
|
47
|
-
{children}
|
|
48
|
-
</Tag>
|
|
49
|
-
)
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export {
|
|
53
|
-
type TypographySize,
|
|
54
|
-
ApplyTypography as default
|
|
55
|
-
}
|
package/primitives/avatar.tsx
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import * as AvatarPrimitive from '@radix-ui/react-avatar';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
|
|
4
|
-
import { cn } from '../src/utils';
|
|
5
|
-
|
|
6
|
-
type AvatarProps = React.ComponentPropsWithoutRef<
|
|
7
|
-
typeof AvatarPrimitive.Root
|
|
8
|
-
> & {
|
|
9
|
-
ref?: React.RefObject<React.ComponentRef<typeof AvatarPrimitive.Root>>;
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
const Avatar = ({ className, ref, ...props }: AvatarProps) => (
|
|
13
|
-
<AvatarPrimitive.Root
|
|
14
|
-
className={cn(
|
|
15
|
-
'relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full',
|
|
16
|
-
className,
|
|
17
|
-
)}
|
|
18
|
-
ref={ref}
|
|
19
|
-
{...props}
|
|
20
|
-
/>
|
|
21
|
-
);
|
|
22
|
-
Avatar.displayName = AvatarPrimitive.Root.displayName;
|
|
23
|
-
|
|
24
|
-
type AvatarImageProps = React.ComponentPropsWithoutRef<
|
|
25
|
-
typeof AvatarPrimitive.Image
|
|
26
|
-
> & {
|
|
27
|
-
ref?: React.RefObject<React.ComponentRef<typeof AvatarPrimitive.Image>>;
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
const AvatarImage = ({ className, ref, ...props }: AvatarImageProps) => (
|
|
31
|
-
<AvatarPrimitive.Image
|
|
32
|
-
className={cn('aspect-square h-full w-full', className)}
|
|
33
|
-
ref={ref}
|
|
34
|
-
{...props}
|
|
35
|
-
/>
|
|
36
|
-
);
|
|
37
|
-
AvatarImage.displayName = AvatarPrimitive.Image.displayName;
|
|
38
|
-
|
|
39
|
-
type AvatarFallbackProps = React.ComponentPropsWithoutRef<
|
|
40
|
-
typeof AvatarPrimitive.Fallback
|
|
41
|
-
> & {
|
|
42
|
-
ref?: React.RefObject<React.ComponentRef<typeof AvatarPrimitive.Fallback>>;
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
const AvatarFallback = ({ className, ref, ...props }: AvatarFallbackProps) => (
|
|
46
|
-
<AvatarPrimitive.Fallback
|
|
47
|
-
className={cn(
|
|
48
|
-
'bg-muted flex h-full w-full items-center justify-center rounded-full',
|
|
49
|
-
className,
|
|
50
|
-
)}
|
|
51
|
-
ref={ref}
|
|
52
|
-
{...props}
|
|
53
|
-
/>
|
|
54
|
-
);
|
|
55
|
-
AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
|
|
56
|
-
|
|
57
|
-
export { Avatar, AvatarImage, AvatarFallback };
|