neba 1.2.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -8
- package/dist/components/alert/Alert.d.ts +7 -1
- package/dist/components/alert/Alert.js +1 -1
- package/dist/components/animate-appear/AnimateAppear.d.ts +55 -0
- package/dist/components/animate-appear/AnimateAppear.js +1 -0
- package/dist/components/animate-appear/index.d.ts +2 -0
- package/dist/components/animate-appear/index.js +1 -0
- package/dist/components/animate-blink/AnimateBlink.d.ts +31 -0
- package/dist/components/animate-blink/AnimateBlink.js +1 -0
- package/dist/components/animate-blink/index.d.ts +2 -0
- package/dist/components/animate-blink/index.js +1 -0
- package/dist/components/animate-fade/AnimateFade.d.ts +31 -0
- package/dist/components/animate-fade/AnimateFade.js +1 -0
- package/dist/components/animate-fade/index.d.ts +2 -0
- package/dist/components/animate-fade/index.js +1 -0
- package/dist/components/animate-grow/AnimateGrow.d.ts +41 -0
- package/dist/components/animate-grow/AnimateGrow.js +1 -0
- package/dist/components/animate-grow/index.d.ts +2 -0
- package/dist/components/animate-grow/index.js +1 -0
- package/dist/components/animate-headline/AnimateHeadline.d.ts +55 -0
- package/dist/components/animate-headline/AnimateHeadline.js +1 -0
- package/dist/components/animate-headline/index.d.ts +2 -0
- package/dist/components/animate-headline/index.js +1 -0
- package/dist/components/animate-lighting/AnimateLighting.d.ts +62 -0
- package/dist/components/animate-lighting/AnimateLighting.js +1 -0
- package/dist/components/animate-lighting/index.d.ts +2 -0
- package/dist/components/animate-lighting/index.js +1 -0
- package/dist/components/animate-marquee/AnimateMarquee.d.ts +65 -0
- package/dist/components/animate-marquee/AnimateMarquee.js +1 -0
- package/dist/components/animate-marquee/index.d.ts +2 -0
- package/dist/components/animate-marquee/index.js +1 -0
- package/dist/components/animate-rotate/AnimateRotate.d.ts +48 -0
- package/dist/components/animate-rotate/AnimateRotate.js +1 -0
- package/dist/components/animate-rotate/index.d.ts +2 -0
- package/dist/components/animate-rotate/index.js +1 -0
- package/dist/components/animate-slide/AnimateSlide.d.ts +46 -0
- package/dist/components/animate-slide/AnimateSlide.js +1 -0
- package/dist/components/animate-slide/index.d.ts +2 -0
- package/dist/components/animate-slide/index.js +1 -0
- package/dist/components/animate-typing/AnimateTyping.d.ts +58 -0
- package/dist/components/animate-typing/AnimateTyping.js +1 -0
- package/dist/components/animate-typing/index.d.ts +2 -0
- package/dist/components/animate-typing/index.js +1 -0
- package/dist/components/animate-zoom/AnimateZoom.d.ts +37 -0
- package/dist/components/animate-zoom/AnimateZoom.js +1 -0
- package/dist/components/animate-zoom/index.d.ts +2 -0
- package/dist/components/animate-zoom/index.js +1 -0
- package/dist/components/aspect-ratio/AspectRatio.d.ts +63 -0
- package/dist/components/aspect-ratio/AspectRatio.js +1 -0
- package/dist/components/aspect-ratio/index.d.ts +2 -0
- package/dist/components/aspect-ratio/index.js +1 -0
- package/dist/components/avatar/Avatar.d.ts +7 -1
- package/dist/components/avatar/Avatar.js +1 -1
- package/dist/components/blockquote/Blockquote.d.ts +7 -1
- package/dist/components/blockquote/Blockquote.js +1 -1
- package/dist/components/box/Box.d.ts +7 -1
- package/dist/components/box/Box.js +1 -1
- package/dist/components/chip/Chip.d.ts +7 -1
- package/dist/components/chip/Chip.js +1 -1
- package/dist/components/color-picker/ColorPicker.d.ts +102 -0
- package/dist/components/color-picker/ColorPicker.js +1 -0
- package/dist/components/color-picker/index.d.ts +2 -0
- package/dist/components/color-picker/index.js +1 -0
- package/dist/components/data-table/DataTable.d.ts +323 -0
- package/dist/components/data-table/DataTable.js +1 -0
- package/dist/components/data-table/index.d.ts +2 -0
- package/dist/components/data-table/index.js +1 -0
- package/dist/components/drawer/Drawer.d.ts +145 -0
- package/dist/components/drawer/Drawer.js +1 -0
- package/dist/components/drawer/index.d.ts +2 -0
- package/dist/components/drawer/index.js +1 -0
- package/dist/components/empty/Empty.d.ts +69 -0
- package/dist/components/empty/Empty.js +1 -0
- package/dist/components/empty/index.d.ts +2 -0
- package/dist/components/empty/index.js +1 -0
- package/dist/components/icon/Icon.d.ts +8 -1
- package/dist/components/icon/Icon.js +1 -1
- package/dist/components/mockup/Mockup.d.ts +151 -0
- package/dist/components/mockup/Mockup.js +1 -0
- package/dist/components/mockup/index.d.ts +2 -0
- package/dist/components/mockup/index.js +1 -0
- package/dist/components/popover/Popover.d.ts +109 -0
- package/dist/components/popover/Popover.js +1 -0
- package/dist/components/popover/index.d.ts +2 -0
- package/dist/components/popover/index.js +1 -0
- package/dist/components/skeleton/Skeleton.d.ts +76 -0
- package/dist/components/skeleton/Skeleton.js +1 -0
- package/dist/components/skeleton/index.d.ts +2 -0
- package/dist/components/skeleton/index.js +1 -0
- package/dist/components/typography/Typography.d.ts +7 -1
- package/dist/components/typography/Typography.js +1 -1
- package/dist/index.d.ts +19 -0
- package/dist/index.js +1 -1
- package/dist/internal/animate.d.ts +175 -0
- package/dist/internal/animate.js +1 -0
- package/dist/internal/color.d.ts +108 -0
- package/dist/internal/color.js +1 -0
- package/dist/internal/data-table.d.ts +170 -0
- package/dist/internal/data-table.js +1 -0
- package/dist/internal/i18n.d.ts +76 -0
- package/dist/internal/i18n.js +1 -1
- package/dist/internal/mockup.d.ts +193 -0
- package/dist/internal/mockup.js +1 -0
- package/dist/styles.css +1 -1
- package/dist/tailwind.css +405 -11
- package/dist/types.d.ts +112 -0
- package/package.json +12 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as e}from"react/jsx-runtime";import*as t from"react";import{
|
|
1
|
+
import{jsx as e}from"react/jsx-runtime";import*as t from"react";import{transitionProps as i}from"../../internal/animate";import{iconSizeClasses as n}from"../../internal/styles";const r={xs:"text-[0.875rem]",sm:"text-[1rem]",md:"text-[1.25rem]",lg:"text-[1.5rem]",xl:"text-[1.75rem]"};export const Icon=t.forwardRef(function({icon:t,size:l="md",color:a="inherit",label:s,transition:o,className:m,style:c,...f},x){const d=i(o),g=["inline-flex shrink-0 items-center justify-center align-middle",n[l],"[&>svg]:block [&>svg]:size-full [&>img]:block [&>img]:size-full",`leading-none ${r[l]}`,"inherit"===a?"":"text-(--n-accent)",d.className,m??""].filter(Boolean).join(" ");return e("span",{ref:x,className:g,style:"inherit"===a?{...d.style,...c}:{"--n-accent":`var(--neba-${a}-accent)`,...d.style,...c},role:s?"img":void 0,"aria-label":s,"aria-hidden":!s||void 0,...f,children:t})});
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { useRender } from '@base-ui/react/use-render';
|
|
3
|
+
import type { NebaMockupBezel, NebaMockupDevice, NebaMockupFinish, NebaMockupHardware, NebaMockupNotch, NebaMockupOrientation, NebaMockupOs, NebaMockupResolution } from '../../internal/mockup';
|
|
4
|
+
import type { NebaColor, NebaElevation, NebaSize, NebaTransition } from '../../types';
|
|
5
|
+
export type { NebaMockupBezel, NebaMockupDevice, NebaMockupFinish, NebaMockupHardware, NebaMockupNotch, NebaMockupOrientation, NebaMockupOs, NebaMockupResolution } from '../../internal/mockup';
|
|
6
|
+
export interface MockupProps extends Omit<React.ComponentPropsWithoutRef<'div'>, 'color'> {
|
|
7
|
+
/**
|
|
8
|
+
* Which machine this is a picture of. The one prop with no default: a mockup
|
|
9
|
+
* that has not said what it is a mockup of has not said anything.
|
|
10
|
+
*/
|
|
11
|
+
device: NebaMockupDevice;
|
|
12
|
+
/**
|
|
13
|
+
* The system whose chrome is drawn on the screen. A desktop runs `macos`,
|
|
14
|
+
* `windows` or `linux`; a tablet runs `ipados` or `android`; a phone runs `ios`
|
|
15
|
+
* or `android`. Anything else falls back to the device's own default —
|
|
16
|
+
* `macos`, `ipados` and `ios` respectively.
|
|
17
|
+
*/
|
|
18
|
+
os?: NebaMockupOs;
|
|
19
|
+
/**
|
|
20
|
+
* What holds a desktop screen up: a stand under it, or a keyboard in front of
|
|
21
|
+
* it. Ignored on a tablet and a phone, which hold themselves up.
|
|
22
|
+
* @default 'monitor'
|
|
23
|
+
*/
|
|
24
|
+
hardware?: NebaMockupHardware;
|
|
25
|
+
/**
|
|
26
|
+
* How big the device is, on a five-step ladder of real resolutions per device
|
|
27
|
+
* — from a 320-wide phone to a 430-wide one, from a 1024-wide desktop to a
|
|
28
|
+
* 1920-wide one.
|
|
29
|
+
*
|
|
30
|
+
* As on Box, `size` here does not set a height or a type scale. What it sets
|
|
31
|
+
* is the resolution of the screen, which is the only thing about a device
|
|
32
|
+
* there is to scale. `resolution` overrides it outright.
|
|
33
|
+
* @default 'md'
|
|
34
|
+
*/
|
|
35
|
+
size?: NebaSize;
|
|
36
|
+
/**
|
|
37
|
+
* The screen's logical resolution in CSS pixels, when none of the five steps
|
|
38
|
+
* is the machine you mean. This is the viewport the content is laid out
|
|
39
|
+
* against, not the panel's physical pixel count.
|
|
40
|
+
*/
|
|
41
|
+
resolution?: NebaMockupResolution;
|
|
42
|
+
/**
|
|
43
|
+
* Which way a handheld is held. Landscape turns the screen, the bezel and the
|
|
44
|
+
* cut-out together. Ignored on a desktop, whose stand does not turn with it.
|
|
45
|
+
* @default 'portrait'
|
|
46
|
+
*/
|
|
47
|
+
orientation?: NebaMockupOrientation;
|
|
48
|
+
/**
|
|
49
|
+
* How much hardware there is around the screen. `none` is not a thinner
|
|
50
|
+
* bezel — it is no hardware at all, leaving the screen on its own with its
|
|
51
|
+
* corners cut, which is what a mockup that only wants the viewport asks for.
|
|
52
|
+
* `thick` is an older device: narrow sides, a forehead and a chin.
|
|
53
|
+
* @default 'standard'
|
|
54
|
+
*/
|
|
55
|
+
bezel?: NebaMockupBezel;
|
|
56
|
+
/**
|
|
57
|
+
* What the hardware is made of. Fixed colours rather than theme tokens — a
|
|
58
|
+
* graphite phone stays graphite on a page switched to dark.
|
|
59
|
+
* @default 'graphite'
|
|
60
|
+
*/
|
|
61
|
+
finish?: NebaMockupFinish;
|
|
62
|
+
/**
|
|
63
|
+
* The camera cut-out. Hardware rather than chrome, so it is drawn whether or
|
|
64
|
+
* not `systemUi` is on. Defaults to what the device would have: a dynamic
|
|
65
|
+
* island on an iOS phone, a punch hole on an Android one, nothing anywhere
|
|
66
|
+
* else.
|
|
67
|
+
*/
|
|
68
|
+
notch?: NebaMockupNotch;
|
|
69
|
+
/**
|
|
70
|
+
* Draws the system's own bars — a status bar and a home indicator, a menu bar
|
|
71
|
+
* and a dock, a taskbar. Each one takes its own space rather than covering the
|
|
72
|
+
* content, so turning it off gives the screen back to `children` rather than
|
|
73
|
+
* uncovering anything.
|
|
74
|
+
* @default true
|
|
75
|
+
*/
|
|
76
|
+
systemUi?: boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Whether content taller than the screen scrolls. Off, it is clipped, which is
|
|
79
|
+
* what a still picture of a device wants.
|
|
80
|
+
* @default false
|
|
81
|
+
*/
|
|
82
|
+
scroll?: boolean;
|
|
83
|
+
/**
|
|
84
|
+
* What is behind the content: any CSS `background` value — a colour, a
|
|
85
|
+
* gradient, a `url()`.
|
|
86
|
+
* @default the page's own surface colour
|
|
87
|
+
*/
|
|
88
|
+
wallpaper?: string;
|
|
89
|
+
/**
|
|
90
|
+
* The clock in the status bar or the taskbar, and the only text the chrome
|
|
91
|
+
* draws. A string rather than a `Date`, because a mockup's clock is a prop of
|
|
92
|
+
* the picture and reading the real one would differ between the server that
|
|
93
|
+
* renders the page and the browser that hydrates it.
|
|
94
|
+
* @default '9:41'
|
|
95
|
+
*/
|
|
96
|
+
time?: string;
|
|
97
|
+
/**
|
|
98
|
+
* The rendered width of the whole device on the page — a number in pixels or
|
|
99
|
+
* any CSS length. The device is laid out at its own resolution and then scaled
|
|
100
|
+
* to whatever this comes to, so the content inside is genuinely a screen's
|
|
101
|
+
* worth rather than a page's worth shrunk.
|
|
102
|
+
* @default '100%'
|
|
103
|
+
*/
|
|
104
|
+
width?: number | string;
|
|
105
|
+
/**
|
|
106
|
+
* The rendered height. Given on its own it decides the size and the width
|
|
107
|
+
* follows the device's proportion, which is what a mockup in a row of fixed
|
|
108
|
+
* height wants.
|
|
109
|
+
*/
|
|
110
|
+
height?: number | string;
|
|
111
|
+
/** Reaches the accent in the chrome — a dock's first icon, a taskbar's. */
|
|
112
|
+
color?: NebaColor;
|
|
113
|
+
/**
|
|
114
|
+
* How far off the page the device sits. Drawn as a silhouette rather than a
|
|
115
|
+
* box, so the shadow follows a lid on a neck on a foot, and it does not shrink
|
|
116
|
+
* with the device.
|
|
117
|
+
* @default 0
|
|
118
|
+
*/
|
|
119
|
+
elevation?: NebaElevation;
|
|
120
|
+
/**
|
|
121
|
+
* An entrance animation, run once on mount: `transition="fade"`, or an object
|
|
122
|
+
* for the details.
|
|
123
|
+
*/
|
|
124
|
+
transition?: NebaTransition;
|
|
125
|
+
/** Renders something other than a `<div>`: `render={<figure />}`. */
|
|
126
|
+
render?: useRender.RenderProp;
|
|
127
|
+
/** What is on the screen. */
|
|
128
|
+
children?: React.ReactNode;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* A device with a screen you can put anything on: a phone, a tablet, a monitor
|
|
132
|
+
* or a laptop, with the system's own bars drawn on it.
|
|
133
|
+
*
|
|
134
|
+
* The screen is a viewport at the device's own resolution — a `md` phone is 390
|
|
135
|
+
* by 844 CSS pixels — and the whole device is then scaled once to whatever room
|
|
136
|
+
* it has been given. So the content inside is laid out against a screen rather
|
|
137
|
+
* than against the page: a 390-pixel column wraps where it would wrap on a
|
|
138
|
+
* phone, and the mockup can be 200 pixels wide on the page without the content
|
|
139
|
+
* knowing.
|
|
140
|
+
*
|
|
141
|
+
* That scale is a `transform`, and it is the one place in the library where one
|
|
142
|
+
* is used. The rule it is an exception to is about controls, where a scale
|
|
143
|
+
* resamples a label under the pointer that is pressing it. Nothing here is
|
|
144
|
+
* pressed and the scale never changes on an interaction: it is set once from the
|
|
145
|
+
* space available, which is the only way to draw a 1440-pixel desktop in a
|
|
146
|
+
* paragraph's width at all.
|
|
147
|
+
*
|
|
148
|
+
* The screen is also a container (`neba-screen`), so content inside can answer
|
|
149
|
+
* to the device's width with a container query rather than to the window's.
|
|
150
|
+
*/
|
|
151
|
+
export declare const Mockup: React.ForwardRefExoticComponent<MockupProps & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as e,jsxs as t,Fragment as i}from"react/jsx-runtime";import*as r from"react";import{useRender as n}from"@base-ui/react/use-render";import{transitionProps as a}from"../../internal/animate";import{MockupCutout as o,defaultNotch as s,elevationFilters as d,finishSlots as h,mockupChrome as l,mockupMetrics as c,resolveOs as u,shellClasses as f}from"../../internal/mockup";import{surfaceSlots as m}from"../../internal/styles";const p="undefined"==typeof document?r.useEffect:r.useLayoutEffect;export const Mockup=r.forwardRef(function({device:g,os:b,hardware:v="monitor",size:w="md",resolution:y,orientation:x="portrait",bezel:k="standard",finish:R="graphite",notch:N,systemUi:z=!0,scroll:$=!1,wallpaper:M,time:j="9:41",width:W,height:B,color:H="primary",elevation:C=0,transition:E,render:L,className:O,style:P,children:S,...F},I){const T=u(g,b),U=N??s(g,T),q="desktop"!==g&&"landscape"===x,A=c({device:g,size:w,resolution:y,orientation:x,bezel:k,hardware:v}),{screen:D,frame:G,body:J,stand:K,base:Q}=A,V=r.useRef(null),[X,Y]=r.useState(null);p(()=>{const e=V.current;if(!e)return;const t=()=>{const t=e.getBoundingClientRect();if(t.width<=0||t.height<=0)return;const i=Math.min(t.width/G.width,t.height/G.height);Y(e=>null!==e&&Math.abs(e-i)<1e-4?e:i)};if(t(),"undefined"==typeof ResizeObserver)return;const i=new ResizeObserver(t);return i.observe(e),()=>i.disconnect()},[G.width,G.height]);const Z=r.useCallback(e=>{V.current=e,"function"==typeof I?I(e):I&&(I.current=e)},[I]),_=z?l({os:T,notch:U,landscape:q,time:j}):{},ee=a(E),te="none"===k,ie=t("div",{className:"neba-mockup-screen relative flex flex-col overflow-hidden",style:{width:D.width,height:D.height,borderRadius:A.screenRadius,background:M??"var(--neba-surface)",boxShadow:te?void 0:"inset 0 0 0 1px var(--n-shell-shade)"},children:[_.top?.node,t("div",{className:"flex min-h-0 flex-1",children:[_.start?.node,e("div",{className:"min-w-0 flex-1 "+($?"overflow-auto":"overflow-hidden"),style:{containerType:"size",containerName:"neba-screen"},children:S})]}),_.bottom?.node,e(o,{notch:U,screen:D,landscape:q})]}),re=["neba-mockup relative block",ee.className,O??""].filter(Boolean).join(" ");return n({render:L,ref:Z,props:{className:re,style:{...m(H,C),...h[R],...ee.style,width:W??(void 0===B?"100%":"auto"),height:B??"auto",aspectRatio:`${G.width} / ${G.height}`,filter:d[C],...P},children:t("div",{className:"absolute top-1/2 left-1/2 flex flex-col items-center",style:{width:G.width,height:G.height,transform:`translate(-50%, -50%) scale(${X??1})`,visibility:null===X?"hidden":void 0},children:[e("div",{className:te?"":f,style:{width:J.width,height:J.height,borderRadius:A.frameRadius,paddingBlock:`${A.bezel.top}px ${A.bezel.bottom}px`,paddingInline:A.bezel.x},children:ie}),K?t(i,{children:[e("div",{"aria-hidden":"true",style:{width:K.neckWidth,height:K.neckHeight,background:"var(--n-shell-shade)",clipPath:"polygon(16% 0, 84% 0, 100% 100%, 0 100%)"}}),e("div",{"aria-hidden":"true",className:f,style:{width:K.footWidth,height:K.footHeight,borderRadius:K.footHeight/2}})]}):null,Q?e("div",{"aria-hidden":"true",className:`relative ${f}`,style:{width:Q.width,height:Q.height,borderRadius:`0 0 ${Math.round(.55*Q.height)}px ${Math.round(.55*Q.height)}px`,clipPath:"polygon(0 0, 100% 0, 98.5% 100%, 1.5% 100%)"},children:e("div",{className:"absolute top-0 left-1/2",style:{width:Q.lipWidth,height:Math.round(.34*Q.height),marginLeft:-Q.lipWidth/2,borderRadius:`0 0 ${Math.round(.2*Q.height)}px ${Math.round(.2*Q.height)}px`,background:"var(--n-shell-shade)"}})}):null]}),...F}})});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{Mockup}from"./Mockup";
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Popover as BaseUIPopover } from '@base-ui/react/popover';
|
|
3
|
+
import type { NebaAlign, NebaSide, NebaStyleProps } from '../../types';
|
|
4
|
+
/**
|
|
5
|
+
* A popover takes `size`, `color` and `density` and stops there.
|
|
6
|
+
*
|
|
7
|
+
* There is no `variant` — the three weights answer "how much does this surface
|
|
8
|
+
* assert itself against the page", and a popup that had to be asked for has
|
|
9
|
+
* already been asserted. There is no `elevation` either: a popover floats over
|
|
10
|
+
* the page by definition, so it carries a shadow at level 3 and a prop that
|
|
11
|
+
* could sit it flat would be a prop that could stop it being a popover.
|
|
12
|
+
*/
|
|
13
|
+
export interface PopoverProps extends Pick<NebaStyleProps, 'size' | 'color' | 'density'> {
|
|
14
|
+
/**
|
|
15
|
+
* The element the popup hangs off and that opens it. Exactly one element,
|
|
16
|
+
* which must accept a ref and spread props — every Neba component does.
|
|
17
|
+
*
|
|
18
|
+
* Optional: a controlled popover anchored from elsewhere needs none, though it
|
|
19
|
+
* then has nothing to position against and will sit against the viewport.
|
|
20
|
+
*/
|
|
21
|
+
trigger?: React.ReactElement;
|
|
22
|
+
/** The heading, rendered as the element that names the popup. */
|
|
23
|
+
title?: React.ReactNode;
|
|
24
|
+
/** A line under the title, and the popup's accessible description. */
|
|
25
|
+
description?: React.ReactNode;
|
|
26
|
+
/** The body. */
|
|
27
|
+
children?: React.ReactNode;
|
|
28
|
+
/**
|
|
29
|
+
* Which edge of the trigger it appears on. Flips to the opposite side when
|
|
30
|
+
* there is no room, which is Base UI's doing and is the right behaviour.
|
|
31
|
+
* @default 'bottom'
|
|
32
|
+
*/
|
|
33
|
+
side?: NebaSide;
|
|
34
|
+
/** Where it sits along that edge. @default 'center' */
|
|
35
|
+
align?: NebaAlign;
|
|
36
|
+
/** Distance from the trigger, in pixels. @default 6 */
|
|
37
|
+
sideOffset?: number;
|
|
38
|
+
/** Shift along that edge, in pixels. @default 0 */
|
|
39
|
+
alignOffset?: number;
|
|
40
|
+
/**
|
|
41
|
+
* Draws the little wedge pointing at the trigger.
|
|
42
|
+
*
|
|
43
|
+
* Off by default, unlike on [Tooltip](../feedback/tooltip). A tooltip is a
|
|
44
|
+
* filled plate and its wedge is the same solid colour; this surface is
|
|
45
|
+
* translucent over a blurred backdrop, and a wedge sticking out past the
|
|
46
|
+
* popup's own box cannot carry that backdrop with it. Turn it on where the
|
|
47
|
+
* trigger is far enough away that the popup needs to say what it belongs to.
|
|
48
|
+
* @default false
|
|
49
|
+
*/
|
|
50
|
+
arrow?: boolean;
|
|
51
|
+
/** Whether the popover is open. Use with `onOpenChange` for a controlled one. */
|
|
52
|
+
open?: boolean;
|
|
53
|
+
/** Whether it starts open, for an uncontrolled one. */
|
|
54
|
+
defaultOpen?: boolean;
|
|
55
|
+
onOpenChange?: (open: boolean) => void;
|
|
56
|
+
/**
|
|
57
|
+
* Whether the page behind is taken away. `false` — the default — leaves the
|
|
58
|
+
* page scrollable and clickable, which is what separates a popover from a
|
|
59
|
+
* [Dialog](../feedback/dialog): it is a detail beside the page, not instead of
|
|
60
|
+
* it. `'trap-focus'` holds focus inside without locking the scroll.
|
|
61
|
+
* @default false
|
|
62
|
+
*/
|
|
63
|
+
modal?: boolean | 'trap-focus';
|
|
64
|
+
/**
|
|
65
|
+
* Whether pressing Escape or clicking outside closes the popup. Turn it off
|
|
66
|
+
* only for a popup with its own way out, because there will be no other.
|
|
67
|
+
* @default true
|
|
68
|
+
*/
|
|
69
|
+
dismissible?: boolean;
|
|
70
|
+
/** Shows the × in the corner. @default false */
|
|
71
|
+
showClose?: boolean;
|
|
72
|
+
/** Accessible name of the × button. */
|
|
73
|
+
closeLabel?: string;
|
|
74
|
+
/**
|
|
75
|
+
* A hard cap on the popup's width, overriding the one `size` implies. Numbers
|
|
76
|
+
* are pixels. For the popover whose content decides its width — a form, a
|
|
77
|
+
* single line of help — rather than for tuning the scale, which is `size`.
|
|
78
|
+
*/
|
|
79
|
+
width?: number | string;
|
|
80
|
+
className?: string;
|
|
81
|
+
style?: React.CSSProperties;
|
|
82
|
+
}
|
|
83
|
+
export type PopoverCloseProps = React.ComponentPropsWithoutRef<typeof BaseUIPopover.Close>;
|
|
84
|
+
/**
|
|
85
|
+
* Closes the popover it is inside.
|
|
86
|
+
*
|
|
87
|
+
* Exported for the reason `DialogClose` is: an uncontrolled popover has no
|
|
88
|
+
* `setOpen` for its Cancel button to call, and making every popover controlled
|
|
89
|
+
* is a piece of state per popover that exists only to answer a button.
|
|
90
|
+
*
|
|
91
|
+
* `render` is Base UI's own escape hatch, so a real Neba button dismisses:
|
|
92
|
+
* `<PopoverClose render={<Button variant="text">Cancel</Button>} />`.
|
|
93
|
+
*/
|
|
94
|
+
export declare const PopoverClose: React.ForwardRefExoticComponent<Omit<import("@base-ui/react").PopoverCloseProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
95
|
+
/**
|
|
96
|
+
* A sheet that opens beside the thing that opened it.
|
|
97
|
+
*
|
|
98
|
+
* The difference from a [Tooltip](../feedback/tooltip) is that this one can be
|
|
99
|
+
* reached: it stays up until it is dismissed, it can be entered with the
|
|
100
|
+
* pointer or the keyboard, and what is inside it can be clicked and typed into.
|
|
101
|
+
* The difference from a [Dialog](../feedback/dialog) is that it does not take
|
|
102
|
+
* the page — it is anchored to a control, and the page behind goes on working.
|
|
103
|
+
*
|
|
104
|
+
* Base UI owns everything hard about it: the anchoring and the flip at the
|
|
105
|
+
* window edge, the click-outside and Escape, returning focus to the trigger, and
|
|
106
|
+
* the `aria-labelledby` / `aria-describedby` wiring. What is left here is the
|
|
107
|
+
* surface, the width ladder and the header.
|
|
108
|
+
*/
|
|
109
|
+
export declare function Popover({ size, color, density, trigger, title, description, children, side, align, sideOffset, alignOffset, arrow, open, defaultOpen, onOpenChange, modal, dismissible, showClose, closeLabel, width, className, style }: PopoverProps): React.JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as e,jsxs as a}from"react/jsx-runtime";import{Popover as o}from"@base-ui/react/popover";import{boxPaddingXClasses as t,boxPaddingYClasses as n}from"../box/Box";import{CloseIcon as s}from"../../internal/icons";import{hasContent as i,metaTextClasses as l,radiusClasses as r,sheetBodyClasses as d,sheetHeaderGapClasses as c,sheetSectionGapClasses as m,sheetTitleClasses as p,surfaceClasses as f,surfaceSlots as u}from"../../internal/styles";const h={xs:"max-w-56",sm:"max-w-64",md:"max-w-80",lg:"max-w-96",xl:"max-w-lg"},x=[f,"relative flex flex-col","border text-(--neba-fg) bg-(--n-panel-press)","[border-color:var(--n-line)]","[box-shadow:var(--neba-shadow-3),var(--neba-plate-glass)]","[outline:none]","[transition:opacity_var(--neba-duration)_var(--neba-ease)]","data-[starting-style]:opacity-0 data-[ending-style]:opacity-0"].join(" "),b={xs:8,sm:9,md:10,lg:11,xl:12};export const PopoverClose=o.Close;export function Popover({size:f="md",color:g="primary",density:v="default",trigger:w,title:y,description:N,children:_,side:k="bottom",align:j="center",sideOffset:O=6,alignOffset:C=0,arrow:P=!1,open:z,defaultOpen:$,onOpenChange:B,modal:L=!1,dismissible:M=!0,showClose:T=!1,closeLabel:W="Close",width:A,className:D,style:E}){const R=t[v][f],q=n[v][f],F=b[f],G=i(y)||i(N);return a(o.Root,{open:z,defaultOpen:$,modal:L,onOpenChange:(e,a)=>{M||e||"escape-key"!==a.reason&&"outside-press"!==a.reason&&"focus-out"!==a.reason?B?.(e):a.cancel()},children:[w?e(o.Trigger,{render:w}):null,e(o.Portal,{children:e(o.Positioner,{className:"neba-portal z-50 [outline:none]",side:k,align:j,sideOffset:O,alignOffset:C,children:a(o.Popup,{className:[x,r[f],d[f],m[f],R,q,void 0===A?h[f]:"",D??""].filter(Boolean).join(" "),style:{...u(g,3),...void 0===A?null:{maxWidth:"number"==typeof A?`${A}px`:A},...E},children:[P?e(o.Arrow,{className:["data-[side=top]:bottom-[-1px]","data-[side=bottom]:top-[-1px] data-[side=bottom]:rotate-180","data-[side=left]:right-[-1px] data-[side=left]:-rotate-90","data-[side=right]:left-[-1px] data-[side=right]:rotate-90"].join(" "),children:a("svg",{width:F,height:F/2,viewBox:"0 0 10 5","aria-hidden":"true",className:"block",children:[e("path",{d:"M0 0h10L5 5z",fill:"var(--n-panel-press)"}),e("path",{d:"M0 0 5 5 10 0",fill:"none",stroke:"var(--n-line)",strokeWidth:"1",vectorEffect:"non-scaling-stroke"})]})}):null,G||T?a("div",{className:"flex shrink-0 items-start gap-3",children:[a("div",{className:`flex min-w-0 flex-1 flex-col ${c[f]}`,children:[i(y)?e(o.Title,{className:`m-0 font-semibold ${p[f]}`,children:y}):null,i(N)?e(o.Description,{className:`m-0 text-(--neba-muted-fg) ${l[f]}`,children:N}):null]}),T?e(o.Close,{"aria-label":W,className:["flex size-[1.6em] shrink-0 cursor-pointer items-center justify-center","rounded-full text-(--neba-muted-fg)","[&_svg]:size-[1.1em] [&_svg]:shrink-0","[transition:background-color_var(--neba-duration)_var(--neba-ease),color_var(--neba-duration)_var(--neba-ease)]","hover:bg-(--n-soft) hover:text-(--neba-fg)","focus-visible:[outline:2px_solid_var(--n-ring)] focus-visible:outline-offset-2"].join(" "),children:e(s,{})}):null]}):null,i(_)?e("div",{className:"min-w-0",children:_}):null]})})})]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{Popover,PopoverClose}from"./Popover";
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { useRender } from '@base-ui/react/use-render';
|
|
3
|
+
import type { NebaColor, NebaSize } from '../../types';
|
|
4
|
+
/**
|
|
5
|
+
* What the placeholder is standing in for.
|
|
6
|
+
*
|
|
7
|
+
* - `line` — a run of text. Sized off the type scale, so a `md` line is exactly
|
|
8
|
+
* as tall as the `md` type it will be replaced by.
|
|
9
|
+
* - `rect` — a block: an image, a chart, a card, a map.
|
|
10
|
+
* - `circle` — an avatar, or anything else round.
|
|
11
|
+
*/
|
|
12
|
+
export type NebaSkeletonShape = 'line' | 'rect' | 'circle';
|
|
13
|
+
export interface SkeletonProps extends Omit<React.ComponentPropsWithoutRef<'div'>, 'color'> {
|
|
14
|
+
/** @default 'line' */
|
|
15
|
+
shape?: NebaSkeletonShape;
|
|
16
|
+
/**
|
|
17
|
+
* How many lines to draw, for `shape="line"`. The last one is drawn short, the
|
|
18
|
+
* way the last line of a paragraph is, so a block of them reads as prose
|
|
19
|
+
* rather than as a barcode. Ignored by the other two shapes.
|
|
20
|
+
* @default 1
|
|
21
|
+
*/
|
|
22
|
+
lines?: number;
|
|
23
|
+
/**
|
|
24
|
+
* The scale of the thing being stood in for: the type scale for a `line`, the
|
|
25
|
+
* diameter for a `circle`, the default block height for a `rect`.
|
|
26
|
+
* @default 'md'
|
|
27
|
+
*/
|
|
28
|
+
size?: NebaSize;
|
|
29
|
+
/**
|
|
30
|
+
* Colour family. `secondary` by default, and it is worth leaving there: a
|
|
31
|
+
* placeholder that carries a semantic colour is saying something about content
|
|
32
|
+
* that has not arrived yet.
|
|
33
|
+
* @default 'secondary'
|
|
34
|
+
*/
|
|
35
|
+
color?: NebaColor;
|
|
36
|
+
/** An explicit width. Numbers are pixels. */
|
|
37
|
+
width?: number | string;
|
|
38
|
+
/** An explicit height. Numbers are pixels. */
|
|
39
|
+
height?: number | string;
|
|
40
|
+
/**
|
|
41
|
+
* The travelling highlight. Turn it off for a page holding dozens of them, or
|
|
42
|
+
* where the wait is expected to be long enough that motion becomes noise.
|
|
43
|
+
*
|
|
44
|
+
* A reduced-motion preference already replaces the sweep with a colour pulse
|
|
45
|
+
* without being asked, so this is not the accessibility switch.
|
|
46
|
+
* @default true
|
|
47
|
+
*/
|
|
48
|
+
animated?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* What a screen reader is told, if anything.
|
|
51
|
+
*
|
|
52
|
+
* Unset — the default — the placeholder is `aria-hidden`, because a dozen
|
|
53
|
+
* boxes each announcing themselves is worse than silence. Give the *one*
|
|
54
|
+
* skeleton that stands for the whole region a label and it becomes a live
|
|
55
|
+
* `status` instead.
|
|
56
|
+
*/
|
|
57
|
+
label?: string;
|
|
58
|
+
/**
|
|
59
|
+
* Renders something other than a `<div>`. Base UI's own escape hatch.
|
|
60
|
+
*/
|
|
61
|
+
render?: useRender.RenderProp;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* The shape of something that has not loaded yet.
|
|
65
|
+
*
|
|
66
|
+
* It reserves the space the real thing will take, which is the whole job: a card
|
|
67
|
+
* that grows by 200px when its image arrives has moved everything below it while
|
|
68
|
+
* somebody was reading. A spinner cannot do that, which is why this is not a
|
|
69
|
+
* [ProgressCircular](../feedback/progress-circular) in a box.
|
|
70
|
+
*
|
|
71
|
+
* The three shapes are the three things a layout is made of — a run of text, a
|
|
72
|
+
* block and a circle — and each is sized off the ladder the real component uses,
|
|
73
|
+
* so a `md` line is as tall as `md` type and a `md` circle is exactly an
|
|
74
|
+
* [Avatar](../display/avatar) at `md`.
|
|
75
|
+
*/
|
|
76
|
+
export declare const Skeleton: React.ForwardRefExoticComponent<SkeletonProps & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as e}from"react/jsx-runtime";import*as r from"react";import{useRender as l}from"@base-ui/react/use-render";import{controlHeightClasses as n,controlSquareClasses as d,surfaceSlots as o}from"../../internal/styles";const a={xs:"h-[0.6875rem]",sm:"h-[0.75rem]",md:"h-[0.8125rem]",lg:"h-[0.9375rem]",xl:"h-[1.0625rem]"},s={xs:"gap-[0.3125rem]",sm:"gap-[0.375rem]",md:"gap-[0.5625rem]",lg:"gap-[0.5625rem]",xl:"gap-[0.6875rem]"},m={xs:"rounded-[0.3125rem]",sm:"rounded-[0.3125rem]",md:"rounded-[0.375rem]",lg:"rounded-[0.4375rem]",xl:"rounded-[0.5rem]"},i={xs:"h-12",sm:"h-16",md:"h-20",lg:"h-28",xl:"h-36"},t={xs:"rounded-(--neba-radius-xs)",sm:"rounded-(--neba-radius-sm)",md:"rounded-(--neba-radius-md)",lg:"rounded-(--neba-radius-lg)",xl:"rounded-(--neba-radius-xl)"},u="relative overflow-hidden bg-(--n-soft-hover)";function f(e){if(void 0!==e)return"number"==typeof e?`${e}px`:e}export const Skeleton=r.forwardRef(function({shape:r="line",lines:h=1,size:c="md",color:x="secondary",width:g,height:p,animated:b=!0,label:w,render:y,className:$,style:v,...j},k){const N=b?"neba-skeleton":"",B="circle"===r?`rounded-full ${n[c]} ${d[c]} shrink-0`:"rect"===r?`w-full ${t[c]} ${void 0===p?i[c]:""}`:`w-full ${m[c]} ${a[c]}`,z=w?{role:"status","aria-busy":!0,"aria-label":w}:{"aria-hidden":!0},A="line"===r&&h>1;return l({render:y,ref:k,props:{className:(A?["flex w-full flex-col",s[c],$??""]:[u,N,B,$??""]).filter(Boolean).join(" "),style:{...o(x,0),width:f(g),height:f(p),...v},...z,...A?{children:Array.from({length:h},(r,l)=>e("div",{className:[u,N,m[c],a[c],l===h-1?"w-3/5":"w-full"].filter(Boolean).join(" ")},l))}:null,...j}})});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{Skeleton}from"./Skeleton";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { useRender } from '@base-ui/react/use-render';
|
|
3
|
-
import type { NebaColor } from '../../types';
|
|
3
|
+
import type { NebaColor, NebaTransition } from '../../types';
|
|
4
4
|
/**
|
|
5
5
|
* What a piece of text *is*, which decides both its type scale and the element
|
|
6
6
|
* it renders as.
|
|
@@ -19,6 +19,12 @@ export interface TypographyProps extends Omit<React.ComponentPropsWithoutRef<'p'
|
|
|
19
19
|
* @default 'body'
|
|
20
20
|
*/
|
|
21
21
|
level?: TypographyLevel;
|
|
22
|
+
/**
|
|
23
|
+
* An entrance animation, run once on mount: `transition="fade"`, or an object
|
|
24
|
+
* for the details. For a trigger, a replay or anything under your own
|
|
25
|
+
* control, wrap it in an `Animate*` component instead.
|
|
26
|
+
*/
|
|
27
|
+
transition?: NebaTransition;
|
|
22
28
|
/**
|
|
23
29
|
* Semantic colour role. Unlike every other component this has **no default**:
|
|
24
30
|
* text inherits the page's own colour unless a role is asked for, because the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as e from"react";import{useRender as t}from"@base-ui/react/use-render";const
|
|
1
|
+
import*as e from"react";import{useRender as t}from"@base-ui/react/use-render";import{transitionProps as r}from"../../internal/animate";const m={h1:"text-[1.875rem]/[2.25rem] tracking-[-0.02em]",h2:"text-[1.5rem]/[1.875rem] tracking-[-0.015em]",h3:"text-[1.25rem]/[1.625rem] tracking-[-0.01em]",h4:"text-[1.0625rem]/[1.5rem]",h5:"text-[0.9375rem]/[1.375rem]",h6:"text-[0.8125rem]/[1.25rem]",lead:"text-[1.0625rem]/[1.75rem]",body:"text-[0.8125rem]/[1.375rem]",caption:"text-[0.75rem]/[1.125rem]",overline:"text-[0.6875rem]/[1rem] tracking-[0.08em] uppercase"},n={h1:"semibold",h2:"semibold",h3:"semibold",h4:"semibold",h5:"semibold",h6:"semibold",lead:"regular",body:"regular",caption:"regular",overline:"medium"},a={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",lead:"p",body:"p",caption:"span",overline:"span"},l=new Set(["caption","overline"]),o={h1:"mb-4",h2:"mb-3.5",h3:"mb-3",h4:"mb-2.5",h5:"mb-2",h6:"mb-2",lead:"mb-4",body:"mb-3",caption:"mb-2",overline:"mb-2"},i={regular:"font-normal",medium:"font-medium",semibold:"font-semibold",bold:"font-bold"},c={start:"text-start",center:"text-center",end:"text-end",justify:"text-justify"},h={1:"truncate",2:"line-clamp-2",3:"line-clamp-3",4:"line-clamp-4",5:"line-clamp-5",6:"line-clamp-6"};export const Typography=e.forwardRef(function({level:s="body",color:d,weight:b,align:p,lines:x,gutter:u=!1,transition:f,render:g,className:y,style:v,children:k,...j},w){const N=r(f),B=[m[s],i[b??n[s]],p?c[p]:"",x?h[x]??"line-clamp-6":"",u?o[s]:"",d?"text-(--n-accent)":l.has(s)?"text-(--neba-muted-fg)":"text-(--neba-fg)",N.className,y??""].filter(Boolean).join(" ");return t({render:g??e.createElement(a[s]),ref:w,props:{className:B,style:d?{"--n-accent":`var(--neba-${d}-accent)`,...N.style,...v}:{...N.style,...v},children:k,...j}})});
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
export * from './types';
|
|
2
2
|
export * from './components/accordion';
|
|
3
3
|
export * from './components/alert';
|
|
4
|
+
export * from './components/animate-appear';
|
|
5
|
+
export * from './components/animate-blink';
|
|
6
|
+
export * from './components/animate-fade';
|
|
7
|
+
export * from './components/animate-grow';
|
|
8
|
+
export * from './components/animate-headline';
|
|
9
|
+
export * from './components/animate-lighting';
|
|
10
|
+
export * from './components/animate-marquee';
|
|
11
|
+
export * from './components/animate-rotate';
|
|
12
|
+
export * from './components/animate-slide';
|
|
13
|
+
export * from './components/animate-typing';
|
|
14
|
+
export * from './components/animate-zoom';
|
|
15
|
+
export * from './components/aspect-ratio';
|
|
4
16
|
export * from './components/avatar';
|
|
5
17
|
export * from './components/badge';
|
|
6
18
|
export * from './components/blockquote';
|
|
@@ -13,13 +25,17 @@ export * from './components/carousel';
|
|
|
13
25
|
export * from './components/chat-bubble';
|
|
14
26
|
export * from './components/checkbox';
|
|
15
27
|
export * from './components/chip';
|
|
28
|
+
export * from './components/color-picker';
|
|
16
29
|
export * from './components/combobox';
|
|
17
30
|
export * from './components/container';
|
|
31
|
+
export * from './components/data-table';
|
|
18
32
|
export * from './components/date-picker';
|
|
19
33
|
export * from './components/date-range-picker';
|
|
20
34
|
export * from './components/date-time-picker';
|
|
21
35
|
export * from './components/dialog';
|
|
22
36
|
export * from './components/divider';
|
|
37
|
+
export * from './components/drawer';
|
|
38
|
+
export * from './components/empty';
|
|
23
39
|
export * from './components/file-picker';
|
|
24
40
|
export * from './components/grid';
|
|
25
41
|
export * from './components/grid-container';
|
|
@@ -28,12 +44,14 @@ export * from './components/icon';
|
|
|
28
44
|
export * from './components/icon-button';
|
|
29
45
|
export * from './components/list';
|
|
30
46
|
export * from './components/menu';
|
|
47
|
+
export * from './components/mockup';
|
|
31
48
|
export * from './components/number-field';
|
|
32
49
|
export * from './components/otp-field';
|
|
33
50
|
export * from './components/overlay';
|
|
34
51
|
export * from './components/pagination';
|
|
35
52
|
export * from './components/panes';
|
|
36
53
|
export * from './components/pill';
|
|
54
|
+
export * from './components/popover';
|
|
37
55
|
export * from './components/progress-box';
|
|
38
56
|
export * from './components/progress-circular';
|
|
39
57
|
export * from './components/progress-linear';
|
|
@@ -41,6 +59,7 @@ export * from './components/radio-group';
|
|
|
41
59
|
export * from './components/segmented-button';
|
|
42
60
|
export * from './components/select';
|
|
43
61
|
export * from './components/shortcut';
|
|
62
|
+
export * from './components/skeleton';
|
|
44
63
|
export * from './components/slider';
|
|
45
64
|
export * from './components/spoiler';
|
|
46
65
|
export * from './components/statistic';
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export*from"./types";export*from"./components/accordion";export*from"./components/alert";export*from"./components/avatar";export*from"./components/badge";export*from"./components/blockquote";export*from"./components/box";export*from"./components/breadcrumb";export*from"./components/button";export*from"./components/button-group";export*from"./components/card";export*from"./components/carousel";export*from"./components/chat-bubble";export*from"./components/checkbox";export*from"./components/chip";export*from"./components/combobox";export*from"./components/container";export*from"./components/date-picker";export*from"./components/date-range-picker";export*from"./components/date-time-picker";export*from"./components/dialog";export*from"./components/divider";export*from"./components/file-picker";export*from"./components/grid";export*from"./components/grid-container";export*from"./components/highlight";export*from"./components/icon";export*from"./components/icon-button";export*from"./components/list";export*from"./components/menu";export*from"./components/number-field";export*from"./components/otp-field";export*from"./components/overlay";export*from"./components/pagination";export*from"./components/panes";export*from"./components/pill";export*from"./components/progress-box";export*from"./components/progress-circular";export*from"./components/progress-linear";export*from"./components/radio-group";export*from"./components/segmented-button";export*from"./components/select";export*from"./components/shortcut";export*from"./components/slider";export*from"./components/spoiler";export*from"./components/statistic";export*from"./components/switch";export*from"./components/table";export*from"./components/tabs";export*from"./components/text-field";export*from"./components/text-link";export*from"./components/time-picker";export*from"./components/timeline";export*from"./components/toast";export*from"./components/toolbar";export*from"./components/tooltip";export*from"./components/tree-view";export*from"./components/typography";
|
|
1
|
+
export*from"./types";export*from"./components/accordion";export*from"./components/alert";export*from"./components/animate-appear";export*from"./components/animate-blink";export*from"./components/animate-fade";export*from"./components/animate-grow";export*from"./components/animate-headline";export*from"./components/animate-lighting";export*from"./components/animate-marquee";export*from"./components/animate-rotate";export*from"./components/animate-slide";export*from"./components/animate-typing";export*from"./components/animate-zoom";export*from"./components/aspect-ratio";export*from"./components/avatar";export*from"./components/badge";export*from"./components/blockquote";export*from"./components/box";export*from"./components/breadcrumb";export*from"./components/button";export*from"./components/button-group";export*from"./components/card";export*from"./components/carousel";export*from"./components/chat-bubble";export*from"./components/checkbox";export*from"./components/chip";export*from"./components/color-picker";export*from"./components/combobox";export*from"./components/container";export*from"./components/data-table";export*from"./components/date-picker";export*from"./components/date-range-picker";export*from"./components/date-time-picker";export*from"./components/dialog";export*from"./components/divider";export*from"./components/drawer";export*from"./components/empty";export*from"./components/file-picker";export*from"./components/grid";export*from"./components/grid-container";export*from"./components/highlight";export*from"./components/icon";export*from"./components/icon-button";export*from"./components/list";export*from"./components/menu";export*from"./components/mockup";export*from"./components/number-field";export*from"./components/otp-field";export*from"./components/overlay";export*from"./components/pagination";export*from"./components/panes";export*from"./components/pill";export*from"./components/popover";export*from"./components/progress-box";export*from"./components/progress-circular";export*from"./components/progress-linear";export*from"./components/radio-group";export*from"./components/segmented-button";export*from"./components/select";export*from"./components/shortcut";export*from"./components/skeleton";export*from"./components/slider";export*from"./components/spoiler";export*from"./components/statistic";export*from"./components/switch";export*from"./components/table";export*from"./components/tabs";export*from"./components/text-field";export*from"./components/text-link";export*from"./components/time-picker";export*from"./components/timeline";export*from"./components/toast";export*from"./components/toolbar";export*from"./components/tooltip";export*from"./components/tree-view";export*from"./components/typography";
|