@zerodev/react-ui 0.0.3 → 0.0.4
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/_types/components/ArrowCardPair/index.d.ts +2 -2
- package/dist/_types/components/ArrowCardPair/index.d.ts.map +1 -1
- package/dist/_types/components/Badge/index.d.ts +1 -1
- package/dist/_types/components/Badge/index.d.ts.map +1 -1
- package/dist/_types/components/BottomSheet/index.d.ts +17 -0
- package/dist/_types/components/BottomSheet/index.d.ts.map +1 -0
- package/dist/_types/components/Button/index.d.ts +1 -1
- package/dist/_types/components/Button/index.d.ts.map +1 -1
- package/dist/_types/components/Callout/index.d.ts +1 -1
- package/dist/_types/components/Callout/index.d.ts.map +1 -1
- package/dist/_types/components/DataRow/index.d.ts +2 -2
- package/dist/_types/components/DataRow/index.d.ts.map +1 -1
- package/dist/_types/components/Icon/index.d.ts +1 -1
- package/dist/_types/components/Icon/index.d.ts.map +1 -1
- package/dist/_types/components/IconButton/index.d.ts +1 -1
- package/dist/_types/components/IconButton/index.d.ts.map +1 -1
- package/dist/_types/components/Input/index.d.ts +1 -1
- package/dist/_types/components/Input/index.d.ts.map +1 -1
- package/dist/_types/components/ListItem/index.d.ts +32 -15
- package/dist/_types/components/ListItem/index.d.ts.map +1 -1
- package/dist/_types/components/Pill/index.d.ts +25 -0
- package/dist/_types/components/Pill/index.d.ts.map +1 -0
- package/dist/_types/components/PoweredBy/index.d.ts +6 -0
- package/dist/_types/components/PoweredBy/index.d.ts.map +1 -0
- package/dist/_types/components/Screen/EllipticalRadial.d.ts +23 -0
- package/dist/_types/components/Screen/EllipticalRadial.d.ts.map +1 -0
- package/dist/_types/components/Screen/MultiRadialBackground.d.ts +4 -0
- package/dist/_types/components/Screen/MultiRadialBackground.d.ts.map +1 -0
- package/dist/_types/components/Screen/index.d.ts +15 -0
- package/dist/_types/components/Screen/index.d.ts.map +1 -0
- package/dist/_types/components/Select/index.d.ts +28 -0
- package/dist/_types/components/Select/index.d.ts.map +1 -0
- package/dist/_types/components/Switch/index.d.ts +1 -1
- package/dist/_types/components/Switch/index.d.ts.map +1 -1
- package/dist/_types/components/Text/index.d.ts +1 -1
- package/dist/_types/components/Text/index.d.ts.map +1 -1
- package/dist/_types/components/TokenListItem/index.d.ts +33 -0
- package/dist/_types/components/TokenListItem/index.d.ts.map +1 -0
- package/dist/_types/components/TopNav/index.d.ts +20 -0
- package/dist/_types/components/TopNav/index.d.ts.map +1 -0
- package/dist/_types/components/WrappedPressable/index.d.ts +1 -1
- package/dist/_types/components/WrappedPressable/index.d.ts.map +1 -1
- package/dist/_types/components/Wrapper/index.d.ts +3 -2
- package/dist/_types/components/Wrapper/index.d.ts.map +1 -1
- package/dist/_types/components/ZeroDevLogo/index.d.ts +1 -1
- package/dist/_types/components/ZeroDevLogo/index.d.ts.map +1 -1
- package/dist/_types/index.d.ts +8 -1
- package/dist/_types/index.d.ts.map +1 -1
- package/dist/index.cjs +51 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +6035 -1344
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +2 -2
- package/package.json +7 -5
- package/src/components/ArrowCardPair/index.tsx +25 -5
- package/src/components/BottomSheet/index.tsx +57 -0
- package/src/components/DataRow/index.tsx +2 -2
- package/src/components/ListItem/index.tsx +74 -79
- package/src/components/Pill/index.tsx +167 -0
- package/src/components/PoweredBy/index.tsx +29 -0
- package/src/components/Screen/EllipticalRadial.tsx +65 -0
- package/src/components/Screen/MultiRadialBackground.tsx +323 -0
- package/src/components/Screen/index.tsx +121 -0
- package/src/components/Select/index.tsx +153 -0
- package/src/components/TokenListItem/index.tsx +192 -0
- package/src/components/TopNav/index.tsx +67 -0
- package/src/components/Wrapper/index.tsx +4 -1
- package/src/index.ts +33 -0
- package/tailwind.config.ts +39 -0
package/dist/styles.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! tailwindcss v4.
|
|
2
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}}@layer theme{:root,:host{--zd-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--zd-color-gray-700:oklch(37.3% .034 259.733);--zd-color-gray-900:oklch(21% .034 264.665);--zd-color-white:#fff;--zd-spacing:.25rem;--zd-text-sm--line-height:calc(1.25 / .875);--zd-text-base--line-height:calc(1.5 / 1);--zd-text-lg--line-height:calc(1.75 / 1.125);--zd-text-2xl--line-height:calc(2 / 1.5);--zd-font-weight-medium:500;--zd-font-weight-semibold:600;--zd-font-weight-bold:700;--zd-radius-lg:.5rem;--zd-radius-xl:.75rem;--zd-radius-2xl:1rem;--zd-radius-3xl:1.5rem;--zd-animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--zd-default-transition-duration:.15s;--zd-default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--zd-default-font-family:sans-serif;--zd-default-mono-font-family:var(--zd-font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--zd-default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--zd-default-font-feature-settings,normal);font-variation-settings:var(--zd-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--zd-default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--zd-default-mono-font-feature-settings,normal);font-variation-settings:var(--zd-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.zd\:pointer-events-none{pointer-events:none}.zd\:absolute{position:absolute}.zd\:relative{position:relative}.zd\:inset-0{inset:calc(var(--zd-spacing) * 0)}.zd\:mb-2{margin-bottom:calc(var(--zd-spacing) * 2)}.zd\:flex{display:flex}.zd\:grid{display:grid}.zd\:h-2\.5{height:calc(var(--zd-spacing) * 2.5)}.zd\:h-3{height:calc(var(--zd-spacing) * 3)}.zd\:h-3\.5{height:calc(var(--zd-spacing) * 3.5)}.zd\:h-4{height:calc(var(--zd-spacing) * 4)}.zd\:h-5{height:calc(var(--zd-spacing) * 5)}.zd\:h-6{height:calc(var(--zd-spacing) * 6)}.zd\:h-7{height:calc(var(--zd-spacing) * 7)}.zd\:h-10{height:calc(var(--zd-spacing) * 10)}.zd\:h-11{height:calc(var(--zd-spacing) * 11)}.zd\:h-12{height:calc(var(--zd-spacing) * 12)}.zd\:h-13{height:calc(var(--zd-spacing) * 13)}.zd\:h-16{height:calc(var(--zd-spacing) * 16)}.zd\:h-17{height:calc(var(--zd-spacing) * 17)}.zd\:h-32{height:calc(var(--zd-spacing) * 32)}.zd\:h-full{height:100%}.zd\:min-h-11{min-height:calc(var(--zd-spacing) * 11)}.zd\:min-h-\[300px\]{min-height:300px}.zd\:w-2\.5{width:calc(var(--zd-spacing) * 2.5)}.zd\:w-3{width:calc(var(--zd-spacing) * 3)}.zd\:w-3\.5{width:calc(var(--zd-spacing) * 3.5)}.zd\:w-4{width:calc(var(--zd-spacing) * 4)}.zd\:w-5{width:calc(var(--zd-spacing) * 5)}.zd\:w-6{width:calc(var(--zd-spacing) * 6)}.zd\:w-11{width:calc(var(--zd-spacing) * 11)}.zd\:w-13{width:calc(var(--zd-spacing) * 13)}.zd\:w-14{width:calc(var(--zd-spacing) * 14)}.zd\:w-24{width:calc(var(--zd-spacing) * 24)}.zd\:w-72{width:calc(var(--zd-spacing) * 72)}.zd\:w-80{width:calc(var(--zd-spacing) * 80)}.zd\:w-auto{width:auto}.zd\:w-full{width:100%}.zd\:min-w-0{min-width:calc(var(--zd-spacing) * 0)}.zd\:min-w-\[400px\]{min-width:400px}.zd\:flex-1{flex:1}.zd\:shrink-0{flex-shrink:0}.zd\:animate-pulse{animation:var(--zd-animate-pulse)}.zd\:cursor-not-allowed{cursor:not-allowed}.zd\:cursor-pointer{cursor:pointer}.zd\:resize-none{resize:none}.zd\:flex-col{flex-direction:column}.zd\:flex-row{flex-direction:row}.zd\:flex-wrap{flex-wrap:wrap}.zd\:place-items-center{place-items:center}.zd\:items-center{align-items:center}.zd\:justify-between{justify-content:space-between}.zd\:justify-center{justify-content:center}.zd\:gap-1{gap:calc(var(--zd-spacing) * 1)}.zd\:gap-1\.5{gap:calc(var(--zd-spacing) * 1.5)}.zd\:gap-2{gap:calc(var(--zd-spacing) * 2)}.zd\:gap-3{gap:calc(var(--zd-spacing) * 3)}.zd\:gap-4{gap:calc(var(--zd-spacing) * 4)}.zd\:gap-\[5px\]{gap:5px}.zd\:self-end{align-self:flex-end}.zd\:self-start{align-self:flex-start}.zd\:overflow-hidden{overflow:hidden}.zd\:rounded-2xl{border-radius:var(--zd-radius-2xl)}.zd\:rounded-3xl{border-radius:var(--zd-radius-3xl)}.zd\:rounded-\[14px\]{border-radius:14px}.zd\:rounded-full{border-radius:3.40282e38px}.zd\:rounded-lg{border-radius:var(--zd-radius-lg)}.zd\:rounded-xl{border-radius:var(--zd-radius-xl)}.zd\:border-0{border-style:var(--tw-border-style);border-width:0}.zd\:border-\[0\.3px\]{border-style:var(--tw-border-style);border-width:.3px}.zd\:border-offWhite{border-color:#f7f5f0}.zd\:border-white\/0{border-color:var(--zd-color-white)}@supports (color:color-mix(in lab, red, red)){.zd\:border-white\/0{border-color:color-mix(in oklab, var(--zd-color-white) 0%, transparent)}}.zd\:bg-greyScale\/30{background-color:oklab(16.9052% .00636494 .00836386/.3)}.zd\:bg-offWhite\/50{background-color:oklab(97.0302% .000165075 .00696582/.5)}.zd\:bg-orange\/10{background-color:oklab(70.9342% .114827 .116983/.1)}.zd\:bg-solarOrange{background-color:#e76000}.zd\:bg-solarOrange\/15{background-color:oklab(65.138% .131584 .131685/.15)}.zd\:bg-transparent{background-color:#0000}.zd\:bg-white,.zd\:bg-white\/20{background-color:var(--zd-color-white)}@supports (color:color-mix(in lab, red, red)){.zd\:bg-white\/20{background-color:color-mix(in oklab, var(--zd-color-white) 20%, transparent)}}.zd\:bg-white\/40{background-color:var(--zd-color-white)}@supports (color:color-mix(in lab, red, red)){.zd\:bg-white\/40{background-color:color-mix(in oklab, var(--zd-color-white) 40%, transparent)}}.zd\:bg-white\/70{background-color:var(--zd-color-white)}@supports (color:color-mix(in lab, red, red)){.zd\:bg-white\/70{background-color:color-mix(in oklab, var(--zd-color-white) 70%, transparent)}}.zd\:p-1{padding:calc(var(--zd-spacing) * 1)}.zd\:p-2{padding:calc(var(--zd-spacing) * 2)}.zd\:p-4{padding:calc(var(--zd-spacing) * 4)}.zd\:p-6{padding:calc(var(--zd-spacing) * 6)}.zd\:px-0{padding-inline:calc(var(--zd-spacing) * 0)}.zd\:px-2{padding-inline:calc(var(--zd-spacing) * 2)}.zd\:px-4{padding-inline:calc(var(--zd-spacing) * 4)}.zd\:px-5{padding-inline:calc(var(--zd-spacing) * 5)}.zd\:px-6{padding-inline:calc(var(--zd-spacing) * 6)}.zd\:py-1{padding-block:calc(var(--zd-spacing) * 1)}.zd\:py-2{padding-block:calc(var(--zd-spacing) * 2)}.zd\:py-3{padding-block:calc(var(--zd-spacing) * 3)}.zd\:py-3\.5{padding-block:calc(var(--zd-spacing) * 3.5)}.zd\:py-5{padding-block:calc(var(--zd-spacing) * 5)}.zd\:pr-1{padding-right:calc(var(--zd-spacing) * 1)}.zd\:pr-2{padding-right:calc(var(--zd-spacing) * 2)}.zd\:pl-2{padding-left:calc(var(--zd-spacing) * 2)}.zd\:pl-4{padding-left:calc(var(--zd-spacing) * 4)}.zd\:text-left{text-align:left}.zd\:font-roboto{font-family:Roboto,sans-serif}.zd\:font-sans{font-family:sans-serif}.zd\:text-2xl{font-size:calc(20px * var(--zd-density));line-height:var(--tw-leading,var(--zd-text-2xl--line-height))}.zd\:text-base{font-size:calc(14px * var(--zd-density));line-height:var(--tw-leading,var(--zd-text-base--line-height))}.zd\:text-body1{font-size:calc(16px * var(--zd-density));line-height:var(--tw-leading,130%)}.zd\:text-body2{font-size:calc(14px * var(--zd-density));line-height:var(--tw-leading,130%)}.zd\:text-body3{font-size:calc(12px * var(--zd-density));line-height:var(--tw-leading,130%)}.zd\:text-body4{font-size:calc(10px * var(--zd-density));line-height:var(--tw-leading,130%)}.zd\:text-h1{font-size:calc(42px * var(--zd-density));line-height:var(--tw-leading,110%)}.zd\:text-h2{font-size:calc(28px * var(--zd-density));line-height:var(--tw-leading,110%)}.zd\:text-h3{font-size:calc(18px * var(--zd-density));line-height:var(--tw-leading,130%)}.zd\:text-lg{font-size:calc(16px * var(--zd-density));line-height:var(--tw-leading,var(--zd-text-lg--line-height))}.zd\:text-sm{font-size:calc(12px * var(--zd-density));line-height:var(--tw-leading,var(--zd-text-sm--line-height))}.zd\:font-bold{--tw-font-weight:var(--zd-font-weight-bold);font-weight:var(--zd-font-weight-bold)}.zd\:font-medium{--tw-font-weight:var(--zd-font-weight-medium);font-weight:var(--zd-font-weight-medium)}.zd\:font-semibold{--tw-font-weight:var(--zd-font-weight-semibold);font-weight:var(--zd-font-weight-semibold)}.zd\:break-all{word-break:break-all}.zd\:whitespace-nowrap{white-space:nowrap}.zd\:text-gray-700{color:var(--zd-color-gray-700)}.zd\:text-gray-900{color:var(--zd-color-gray-900)}.zd\:text-greyScale{color:#130e0b}.zd\:text-greyScale\/50{color:oklab(16.9052% .00636494 .00836386/.5)}.zd\:text-greyScale\/90{color:oklab(16.9052% .00636494 .00836386/.9)}.zd\:text-orange{color:#f27b3e}.zd\:text-solarOrange{color:#e76000}.zd\:text-white{color:var(--zd-color-white)}.zd\:caret-gray-900{caret-color:var(--zd-color-gray-900)}.zd\:opacity-50{opacity:.5}.zd\:shadow-\[inset_0_-4px_4px_0_rgba\(255\,255\,255\,0\.1\)\,inset_0_3px_4px_0_rgba\(0\,0\,0\,0\.02\)\],.zd\:shadow-\[inset_0_-4px_4px_0_rgba\(255\,255\,255\,0\.10\)\,inset_0_3px_4px_0_rgba\(0\,0\,0\,0\.02\)\]{--tw-shadow:inset 0 -4px 4px 0 var(--tw-shadow-color,#ffffff1a), inset 0 3px 4px 0 var(--tw-shadow-color,#00000005);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.zd\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.zd\:backdrop-blur-\[15px\]{--tw-backdrop-blur:blur(15px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.zd\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--zd-default-transition-timing-function));transition-duration:var(--tw-duration,var(--zd-default-transition-duration))}.zd\:outline-none{--tw-outline-style:none;outline-style:none}.zd\:placeholder\:text-gray-900\/50::placeholder{color:var(--zd-color-gray-900)}@supports (color:color-mix(in lab, red, red)){.zd\:placeholder\:text-gray-900\/50::placeholder{color:color-mix(in oklab, var(--zd-color-gray-900) 50%, transparent)}}@media (hover:hover){.zd\:hover\:bg-white\/5:hover{background-color:var(--zd-color-white)}@supports (color:color-mix(in lab, red, red)){.zd\:hover\:bg-white\/5:hover{background-color:color-mix(in oklab, var(--zd-color-white) 5%, transparent)}}.zd\:hover\:bg-white\/20:hover{background-color:var(--zd-color-white)}@supports (color:color-mix(in lab, red, red)){.zd\:hover\:bg-white\/20:hover{background-color:color-mix(in oklab, var(--zd-color-white) 20%, transparent)}}}.zd\:active\:bg-white\/10:active{background-color:var(--zd-color-white)}@supports (color:color-mix(in lab, red, red)){.zd\:active\:bg-white\/10:active{background-color:color-mix(in oklab, var(--zd-color-white) 10%, transparent)}}.zd\:active\:bg-white\/30:active{background-color:var(--zd-color-white)}@supports (color:color-mix(in lab, red, red)){.zd\:active\:bg-white\/30:active{background-color:color-mix(in oklab, var(--zd-color-white) 30%, transparent)}}}:root{--zd-density:1;--zd-spacing:calc(.25rem * var(--zd-density))}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}
|
|
1
|
+
/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */
|
|
2
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}}@layer theme{:root,:host{--zd-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--zd-color-gray-700:oklch(37.3% .034 259.733);--zd-color-gray-900:oklch(21% .034 264.665);--zd-color-white:#fff;--zd-spacing:.25rem;--zd-text-sm--line-height:calc(1.25 / .875);--zd-text-base--line-height:calc(1.5 / 1);--zd-text-lg--line-height:calc(1.75 / 1.125);--zd-text-2xl--line-height:calc(2 / 1.5);--zd-font-weight-medium:500;--zd-font-weight-semibold:600;--zd-font-weight-bold:700;--zd-radius-md:.375rem;--zd-radius-lg:.5rem;--zd-radius-xl:.75rem;--zd-radius-2xl:1rem;--zd-radius-3xl:1.5rem;--zd-radius-4xl:2rem;--zd-default-transition-duration:.15s;--zd-default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--zd-default-font-family:sans-serif;--zd-default-mono-font-family:var(--zd-font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--zd-default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--zd-default-font-feature-settings,normal);font-variation-settings:var(--zd-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--zd-default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--zd-default-mono-font-feature-settings,normal);font-variation-settings:var(--zd-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.zd\:pointer-events-none{pointer-events:none}.zd\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.zd\:absolute{position:absolute}.zd\:relative{position:relative}.zd\:inset-0{inset:0}.zd\:top-0{top:0}.zd\:top-1\/2{top:50%}.zd\:top-4{top:calc(var(--zd-spacing) * 4)}.zd\:right-0{right:0}.zd\:bottom-0{bottom:0}.zd\:left-0{left:0}.zd\:left-1\/2{left:50%}.zd\:z-0{z-index:0}.zd\:z-10{z-index:10}.zd\:z-20{z-index:20}.zd\:z-50{z-index:50}.zd\:m-1\.5{margin:calc(var(--zd-spacing) * 1.5)}.zd\:mx-2{margin-inline:calc(var(--zd-spacing) * 2)}.zd\:my-1{margin-block:var(--zd-spacing)}.zd\:-mr-4{margin-right:calc(var(--zd-spacing) * -4)}.zd\:mb-2{margin-bottom:calc(var(--zd-spacing) * 2)}.zd\:flex{display:flex}.zd\:grid{display:grid}.zd\:inline-flex{display:inline-flex}.zd\:size-4{width:calc(var(--zd-spacing) * 4);height:calc(var(--zd-spacing) * 4)}.zd\:size-8\.5{width:calc(var(--zd-spacing) * 8.5);height:calc(var(--zd-spacing) * 8.5)}.zd\:size-11{width:calc(var(--zd-spacing) * 11);height:calc(var(--zd-spacing) * 11)}.zd\:size-full{width:100%;height:100%}.zd\:h-2\.5{height:calc(var(--zd-spacing) * 2.5)}.zd\:h-3{height:calc(var(--zd-spacing) * 3)}.zd\:h-3\.5{height:calc(var(--zd-spacing) * 3.5)}.zd\:h-4{height:calc(var(--zd-spacing) * 4)}.zd\:h-4\.5{height:calc(var(--zd-spacing) * 4.5)}.zd\:h-5{height:calc(var(--zd-spacing) * 5)}.zd\:h-6{height:calc(var(--zd-spacing) * 6)}.zd\:h-7{height:calc(var(--zd-spacing) * 7)}.zd\:h-9{height:calc(var(--zd-spacing) * 9)}.zd\:h-10{height:calc(var(--zd-spacing) * 10)}.zd\:h-11{height:calc(var(--zd-spacing) * 11)}.zd\:h-12{height:calc(var(--zd-spacing) * 12)}.zd\:h-13{height:calc(var(--zd-spacing) * 13)}.zd\:h-16{height:calc(var(--zd-spacing) * 16)}.zd\:h-17{height:calc(var(--zd-spacing) * 17)}.zd\:h-32{height:calc(var(--zd-spacing) * 32)}.zd\:h-202\.5{height:calc(var(--zd-spacing) * 202.5)}.zd\:h-full{height:100%}.zd\:h-px{height:1px}.zd\:max-h-80{max-height:calc(var(--zd-spacing) * 80)}.zd\:max-h-full{max-height:100%}.zd\:min-h-0{min-height:0}.zd\:min-h-11{min-height:calc(var(--zd-spacing) * 11)}.zd\:min-h-\[300px\]{min-height:300px}.zd\:w-2\.5{width:calc(var(--zd-spacing) * 2.5)}.zd\:w-3{width:calc(var(--zd-spacing) * 3)}.zd\:w-3\.5{width:calc(var(--zd-spacing) * 3.5)}.zd\:w-4{width:calc(var(--zd-spacing) * 4)}.zd\:w-5{width:calc(var(--zd-spacing) * 5)}.zd\:w-6{width:calc(var(--zd-spacing) * 6)}.zd\:w-9{width:calc(var(--zd-spacing) * 9)}.zd\:w-10{width:calc(var(--zd-spacing) * 10)}.zd\:w-11{width:calc(var(--zd-spacing) * 11)}.zd\:w-12{width:calc(var(--zd-spacing) * 12)}.zd\:w-13{width:calc(var(--zd-spacing) * 13)}.zd\:w-14{width:calc(var(--zd-spacing) * 14)}.zd\:w-24{width:calc(var(--zd-spacing) * 24)}.zd\:w-72{width:calc(var(--zd-spacing) * 72)}.zd\:w-80{width:calc(var(--zd-spacing) * 80)}.zd\:w-100{width:calc(var(--zd-spacing) * 100)}.zd\:w-auto{width:auto}.zd\:w-full{width:100%}.zd\:max-w-full{max-width:100%}.zd\:min-w-0{min-width:0}.zd\:min-w-\[400px\]{min-width:400px}.zd\:flex-1{flex:1}.zd\:shrink-0{flex-shrink:0}.zd\:-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.zd\:-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.zd\:animate-skel-pulse{animation:1.1s ease-in-out infinite skel-pulse}.zd\:cursor-not-allowed{cursor:not-allowed}.zd\:cursor-pointer{cursor:pointer}.zd\:resize-none{resize:none}.zd\:flex-col{flex-direction:column}.zd\:flex-row{flex-direction:row}.zd\:flex-wrap{flex-wrap:wrap}.zd\:place-items-center{place-items:center}.zd\:items-center{align-items:center}.zd\:items-end{align-items:flex-end}.zd\:items-start{align-items:flex-start}.zd\:justify-between{justify-content:space-between}.zd\:justify-center{justify-content:center}.zd\:gap-1{gap:var(--zd-spacing)}.zd\:gap-1\.5{gap:calc(var(--zd-spacing) * 1.5)}.zd\:gap-2{gap:calc(var(--zd-spacing) * 2)}.zd\:gap-3{gap:calc(var(--zd-spacing) * 3)}.zd\:gap-4{gap:calc(var(--zd-spacing) * 4)}.zd\:gap-\[5px\]{gap:5px}.zd\:self-end{align-self:flex-end}.zd\:self-start{align-self:flex-start}.zd\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.zd\:overflow-hidden{overflow:hidden}.zd\:overflow-x-hidden{overflow-x:hidden}.zd\:overflow-y-auto{overflow-y:auto}.zd\:rounded-2xl{border-radius:var(--zd-radius-2xl)}.zd\:rounded-3xl{border-radius:var(--zd-radius-3xl)}.zd\:rounded-4xl{border-radius:var(--zd-radius-4xl)}.zd\:rounded-\[14px\]{border-radius:14px}.zd\:rounded-\[32px\]{border-radius:32px}.zd\:rounded-\[38px\]{border-radius:38px}.zd\:rounded-full{border-radius:3.40282e38px}.zd\:rounded-lg{border-radius:var(--zd-radius-lg)}.zd\:rounded-md{border-radius:var(--zd-radius-md)}.zd\:rounded-xl{border-radius:var(--zd-radius-xl)}.zd\:border-\[0\.3px\]{border-style:var(--tw-border-style);border-width:.3px}.zd\:border-offWhite{border-color:#f7f5f0}.zd\:border-white\/0{border-color:var(--zd-color-white)}@supports (color:color-mix(in lab, red, red)){.zd\:border-white\/0{border-color:color-mix(in oklab, var(--zd-color-white) 0%, transparent)}}.zd\:bg-greyScale\/10{background-color:oklab(16.9052% .00636494 .00836386/.1)}.zd\:bg-greyScale\/15{background-color:oklab(16.9052% .00636494 .00836386/.15)}.zd\:bg-greyScale\/20{background-color:oklab(16.9052% .00636494 .00836386/.2)}.zd\:bg-greyScale\/30{background-color:oklab(16.9052% .00636494 .00836386/.3)}.zd\:bg-offWhite\/50{background-color:oklab(97.0302% .000165075 .00696582/.5)}.zd\:bg-orange\/10{background-color:oklab(70.9342% .114827 .116983/.1)}.zd\:bg-solarOrange{background-color:#e76000}.zd\:bg-transparent{background-color:#0000}.zd\:bg-white,.zd\:bg-white\/20{background-color:var(--zd-color-white)}@supports (color:color-mix(in lab, red, red)){.zd\:bg-white\/20{background-color:color-mix(in oklab, var(--zd-color-white) 20%, transparent)}}.zd\:bg-white\/40{background-color:var(--zd-color-white)}@supports (color:color-mix(in lab, red, red)){.zd\:bg-white\/40{background-color:color-mix(in oklab, var(--zd-color-white) 40%, transparent)}}.zd\:bg-white\/70{background-color:var(--zd-color-white)}@supports (color:color-mix(in lab, red, red)){.zd\:bg-white\/70{background-color:color-mix(in oklab, var(--zd-color-white) 70%, transparent)}}.zd\:object-contain{object-fit:contain}.zd\:p-0{padding:0}.zd\:p-1{padding:var(--zd-spacing)}.zd\:p-2{padding:calc(var(--zd-spacing) * 2)}.zd\:p-4{padding:calc(var(--zd-spacing) * 4)}.zd\:p-6{padding:calc(var(--zd-spacing) * 6)}.zd\:px-0{padding-inline:0}.zd\:px-2{padding-inline:calc(var(--zd-spacing) * 2)}.zd\:px-3{padding-inline:calc(var(--zd-spacing) * 3)}.zd\:px-4{padding-inline:calc(var(--zd-spacing) * 4)}.zd\:px-5{padding-inline:calc(var(--zd-spacing) * 5)}.zd\:px-6{padding-inline:calc(var(--zd-spacing) * 6)}.zd\:py-1{padding-block:var(--zd-spacing)}.zd\:py-2{padding-block:calc(var(--zd-spacing) * 2)}.zd\:py-3{padding-block:calc(var(--zd-spacing) * 3)}.zd\:py-3\.5{padding-block:calc(var(--zd-spacing) * 3.5)}.zd\:py-5{padding-block:calc(var(--zd-spacing) * 5)}.zd\:pr-1{padding-right:var(--zd-spacing)}.zd\:pr-2{padding-right:calc(var(--zd-spacing) * 2)}.zd\:pr-4{padding-right:calc(var(--zd-spacing) * 4)}.zd\:pl-1{padding-left:var(--zd-spacing)}.zd\:pl-2{padding-left:calc(var(--zd-spacing) * 2)}.zd\:pl-4{padding-left:calc(var(--zd-spacing) * 4)}.zd\:text-left{text-align:left}.zd\:font-roboto{font-family:Roboto,sans-serif}.zd\:font-sans{font-family:sans-serif}.zd\:text-2xl{font-size:calc(20px * var(--zd-density));line-height:var(--tw-leading,var(--zd-text-2xl--line-height))}.zd\:text-base{font-size:calc(14px * var(--zd-density));line-height:var(--tw-leading,var(--zd-text-base--line-height))}.zd\:text-body1{font-size:calc(16px * var(--zd-density));line-height:var(--tw-leading,130%)}.zd\:text-body2{font-size:calc(14px * var(--zd-density));line-height:var(--tw-leading,130%)}.zd\:text-body3{font-size:calc(12px * var(--zd-density));line-height:var(--tw-leading,130%)}.zd\:text-body4{font-size:calc(10px * var(--zd-density));line-height:var(--tw-leading,130%)}.zd\:text-h1{font-size:calc(42px * var(--zd-density));line-height:var(--tw-leading,110%)}.zd\:text-h2{font-size:calc(28px * var(--zd-density));line-height:var(--tw-leading,110%)}.zd\:text-h3{font-size:calc(18px * var(--zd-density));line-height:var(--tw-leading,130%)}.zd\:text-lg{font-size:calc(16px * var(--zd-density));line-height:var(--tw-leading,var(--zd-text-lg--line-height))}.zd\:text-sm{font-size:calc(12px * var(--zd-density));line-height:var(--tw-leading,var(--zd-text-sm--line-height))}.zd\:font-bold{--tw-font-weight:var(--zd-font-weight-bold);font-weight:var(--zd-font-weight-bold)}.zd\:font-medium{--tw-font-weight:var(--zd-font-weight-medium);font-weight:var(--zd-font-weight-medium)}.zd\:font-semibold{--tw-font-weight:var(--zd-font-weight-semibold);font-weight:var(--zd-font-weight-semibold)}.zd\:break-all{word-break:break-all}.zd\:whitespace-nowrap{white-space:nowrap}.zd\:text-gray-700{color:var(--zd-color-gray-700)}.zd\:text-gray-900{color:var(--zd-color-gray-900)}.zd\:text-greyScale{color:#130e0b}.zd\:text-greyScale\/50{color:oklab(16.9052% .00636494 .00836386/.5)}.zd\:text-greyScale\/90{color:oklab(16.9052% .00636494 .00836386/.9)}.zd\:text-negative{color:#ff4221}.zd\:text-orange{color:#f27b3e}.zd\:text-positive{color:#228300}.zd\:text-solarOrange{color:#e76000}.zd\:text-white{color:var(--zd-color-white)}.zd\:caret-gray-900{caret-color:var(--zd-color-gray-900)}.zd\:opacity-50{opacity:.5}.zd\:shadow-\[inset_0_-4px_4px_0_rgba\(255\,255\,255\,0\.1\)\,inset_0_3px_4px_0_rgba\(0\,0\,0\,0\.02\)\],.zd\:shadow-\[inset_0_-4px_4px_0_rgba\(255\,255\,255\,0\.10\)\,inset_0_3px_4px_0_rgba\(0\,0\,0\,0\.02\)\]{--tw-shadow:inset 0 -4px 4px 0 var(--tw-shadow-color,#ffffff1a), inset 0 3px 4px 0 var(--tw-shadow-color,#00000005);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.zd\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.zd\:backdrop-blur-\[15px\]{--tw-backdrop-blur:blur(15px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.zd\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--zd-default-transition-timing-function));transition-duration:var(--tw-duration,var(--zd-default-transition-duration))}.zd\:outline-none{--tw-outline-style:none;outline-style:none}.zd\:placeholder\:text-gray-900\/50::placeholder{color:var(--zd-color-gray-900)}@supports (color:color-mix(in lab, red, red)){.zd\:placeholder\:text-gray-900\/50::placeholder{color:color-mix(in oklab, var(--zd-color-gray-900) 50%, transparent)}}@media (hover:hover){.zd\:hover\:bg-offWhite\/40:hover{background-color:oklab(97.0302% .000165075 .00696582/.4)}.zd\:hover\:bg-white\/5:hover{background-color:var(--zd-color-white)}@supports (color:color-mix(in lab, red, red)){.zd\:hover\:bg-white\/5:hover{background-color:color-mix(in oklab, var(--zd-color-white) 5%, transparent)}}.zd\:hover\:bg-white\/20:hover{background-color:var(--zd-color-white)}@supports (color:color-mix(in lab, red, red)){.zd\:hover\:bg-white\/20:hover{background-color:color-mix(in oklab, var(--zd-color-white) 20%, transparent)}}}.zd\:active\:bg-white\/10:active{background-color:var(--zd-color-white)}@supports (color:color-mix(in lab, red, red)){.zd\:active\:bg-white\/10:active{background-color:color-mix(in oklab, var(--zd-color-white) 10%, transparent)}}.zd\:active\:bg-white\/30:active{background-color:var(--zd-color-white)}@supports (color:color-mix(in lab, red, red)){.zd\:active\:bg-white\/30:active{background-color:color-mix(in oklab, var(--zd-color-white) 30%, transparent)}}.zd\:disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.zd\:disabled\:opacity-50:disabled{opacity:.5}.zd\:data-\[highlighted\]\:bg-offWhite\/40[data-highlighted]{background-color:oklab(97.0302% .000165075 .00696582/.4)}.zd\:data-\[state\=checked\]\:bg-offWhite\/60[data-state=checked]{background-color:oklab(97.0302% .000165075 .00696582/.6)}.zd\:data-\[state\=closed\]\:animate-backdrop-out[data-state=closed]{animation:.2s ease-out forwards backdrop-out}.zd\:data-\[state\=closed\]\:animate-sheet-out[data-state=closed]{animation:.25s cubic-bezier(.32,.72,0,1) forwards sheet-out}.zd\:data-\[state\=open\]\:pointer-events-auto[data-state=open]{pointer-events:auto}.zd\:data-\[state\=open\]\:animate-backdrop-in[data-state=open]{animation:.2s ease-out forwards backdrop-in}.zd\:data-\[state\=open\]\:animate-popper-in[data-state=open]{animation:.16s ease-out both popper-in}.zd\:data-\[state\=open\]\:animate-sheet-in[data-state=open]{animation:.3s cubic-bezier(.32,.72,0,1) forwards sheet-in}}:root{--zd-density:1;--zd-spacing:calc(.25rem * var(--zd-density))}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@keyframes sheet-in{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes sheet-out{0%{transform:translateY(0)}to{transform:translateY(100%)}}@keyframes backdrop-in{0%{opacity:0}to{opacity:1}}@keyframes backdrop-out{0%{opacity:1}to{opacity:0}}@keyframes skel-pulse{0%,to{opacity:.65}50%{opacity:1}}@keyframes popper-in{0%{opacity:0;transform:scale(.97)translateY(-3px)}to{opacity:1;transform:scale(1)translateY(0)}}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zerodev/react-ui",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"description": "React UI primitives for ZeroDev",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -42,9 +42,11 @@
|
|
|
42
42
|
"zerodev"
|
|
43
43
|
],
|
|
44
44
|
"peerDependencies": {
|
|
45
|
+
"radix-ui": "^1.4.0",
|
|
45
46
|
"react": "^18.0.0 || ^19.0.0"
|
|
46
47
|
},
|
|
47
48
|
"devDependencies": {
|
|
49
|
+
"radix-ui": "^1.4.0",
|
|
48
50
|
"@storybook/addon-a11y": "^10.3.3",
|
|
49
51
|
"@storybook/addon-docs": "^10.3.3",
|
|
50
52
|
"@storybook/react-vite": "^10.3.3",
|
|
@@ -54,13 +56,13 @@
|
|
|
54
56
|
"@types/react": "^19",
|
|
55
57
|
"@types/react-dom": "^19",
|
|
56
58
|
"@vitejs/plugin-react": "^4.7.0",
|
|
57
|
-
"postcss": "^8.5.
|
|
58
|
-
"react": "19.2.
|
|
59
|
-
"react-dom": "19.2.
|
|
59
|
+
"postcss": "^8.5.16",
|
|
60
|
+
"react": "19.2.3",
|
|
61
|
+
"react-dom": "19.2.3",
|
|
60
62
|
"storybook": "^10.3.3",
|
|
61
63
|
"tailwindcss": "^4.2.2",
|
|
62
64
|
"typescript": "5.9.3",
|
|
63
|
-
"vite": "^6.4.
|
|
65
|
+
"vite": "^6.4.3",
|
|
64
66
|
"vite-plugin-svgr": "5.0.0"
|
|
65
67
|
},
|
|
66
68
|
"dependencies": {
|
|
@@ -107,7 +107,7 @@ function Arrow({ className }: { className?: string }) {
|
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
export function ArrowView({ className }: { className?: string }) {
|
|
110
|
-
return <Arrow {...(className
|
|
110
|
+
return <Arrow {...(className !== undefined && { className })} />
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
export interface ArrowCardPairProps {
|
|
@@ -116,13 +116,33 @@ export interface ArrowCardPairProps {
|
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
export function ArrowCardPair({ topCard, bottomCard }: ArrowCardPairProps) {
|
|
119
|
+
// Pure CSS layout — no measurement, no ResizeObserver. Between the two
|
|
120
|
+
// ClippedCards we drop a zero-height "seam" anchor with equal margins on
|
|
121
|
+
// top and bottom that add up to GAP. The seam's y-coordinate is therefore
|
|
122
|
+
// exactly at the centre of the gap, and the arrow — absolutely positioned
|
|
123
|
+
// inside the seam with `top: 0` and `translate(-50%, -50%)` — centres on
|
|
124
|
+
// that y regardless of either card's height.
|
|
125
|
+
const seamMargin = GAP / 2
|
|
126
|
+
|
|
119
127
|
return (
|
|
120
|
-
<div className="zd:relative zd:flex zd:flex-col zd:
|
|
128
|
+
<div className="zd:relative zd:flex zd:flex-col zd:items-center zd:w-full">
|
|
121
129
|
<ClippedCard position="top">{topCard}</ClippedCard>
|
|
122
|
-
<
|
|
123
|
-
|
|
124
|
-
|
|
130
|
+
<div
|
|
131
|
+
className="zd:relative zd:w-full"
|
|
132
|
+
style={{
|
|
133
|
+
height: 0,
|
|
134
|
+
marginTop: seamMargin,
|
|
135
|
+
marginBottom: seamMargin,
|
|
136
|
+
}}
|
|
137
|
+
>
|
|
138
|
+
<div
|
|
139
|
+
className="zd:absolute zd:left-1/2 zd:top-0 zd:pointer-events-none"
|
|
140
|
+
style={{ transform: 'translate(-50%, -50%)' }}
|
|
141
|
+
>
|
|
142
|
+
<Arrow />
|
|
143
|
+
</div>
|
|
125
144
|
</div>
|
|
145
|
+
<ClippedCard position="bottom">{bottomCard}</ClippedCard>
|
|
126
146
|
</div>
|
|
127
147
|
)
|
|
128
148
|
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Dialog } from 'radix-ui'
|
|
2
|
+
import type { ComponentProps, ReactNode } from 'react'
|
|
3
|
+
|
|
4
|
+
import { cn } from '../../utils/common'
|
|
5
|
+
import { useScreenOverlayContainer } from '../Screen'
|
|
6
|
+
|
|
7
|
+
export const BottomSheet = Dialog.Root
|
|
8
|
+
export const BottomSheetClose = Dialog.Close
|
|
9
|
+
|
|
10
|
+
/** Accessible label for the sheet. `sr-only` by default — consumers who want
|
|
11
|
+
* a visible title render their own heading inside `<BottomSheetContent>` and keep
|
|
12
|
+
* `<BottomSheetTitle>` as the screen-reader label. */
|
|
13
|
+
export function BottomSheetTitle({
|
|
14
|
+
className,
|
|
15
|
+
...props
|
|
16
|
+
}: ComponentProps<typeof Dialog.Title>) {
|
|
17
|
+
return <Dialog.Title className={cn('zd:sr-only', className)} {...props} />
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** Bottom-anchored sheet chrome. Portals into the nearest `Screen`, renders
|
|
21
|
+
* the backdrop + panel, and drives open/close animations from Radix's
|
|
22
|
+
* `data-state` attribute. Wrap in `<BottomSheet open onOpenChange>` and
|
|
23
|
+
* compose children freely (title, body, `<BottomSheetClose>` action). */
|
|
24
|
+
export function BottomSheetContent({
|
|
25
|
+
children,
|
|
26
|
+
className,
|
|
27
|
+
}: {
|
|
28
|
+
children: ReactNode
|
|
29
|
+
className?: string
|
|
30
|
+
}) {
|
|
31
|
+
const container = useScreenOverlayContainer()
|
|
32
|
+
if (!container) return null
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
<Dialog.Portal container={container}>
|
|
36
|
+
<Dialog.Overlay
|
|
37
|
+
className={cn(
|
|
38
|
+
'zd:absolute zd:inset-0 zd:z-20 zd:bg-greyScale/20',
|
|
39
|
+
'zd:data-[state=open]:animate-backdrop-in',
|
|
40
|
+
'zd:data-[state=closed]:animate-backdrop-out',
|
|
41
|
+
)}
|
|
42
|
+
/>
|
|
43
|
+
<Dialog.Content
|
|
44
|
+
className={cn(
|
|
45
|
+
'zd:absolute zd:bottom-0 zd:left-0 zd:right-0 zd:z-20',
|
|
46
|
+
'zd:bg-white zd:rounded-[32px] zd:overflow-hidden',
|
|
47
|
+
'zd:outline-none',
|
|
48
|
+
'zd:data-[state=open]:animate-sheet-in',
|
|
49
|
+
'zd:data-[state=closed]:animate-sheet-out',
|
|
50
|
+
className,
|
|
51
|
+
)}
|
|
52
|
+
>
|
|
53
|
+
{children}
|
|
54
|
+
</Dialog.Content>
|
|
55
|
+
</Dialog.Portal>
|
|
56
|
+
)
|
|
57
|
+
}
|
|
@@ -132,9 +132,9 @@ export function DataRowSkeleton({ label, className }: DataRowSkeletonProps) {
|
|
|
132
132
|
{label ? (
|
|
133
133
|
<Text>{label}</Text>
|
|
134
134
|
) : (
|
|
135
|
-
<div className="zd:w-24 zd:h-3 zd:rounded-lg zd:bg-
|
|
135
|
+
<div className="zd:w-24 zd:h-3 zd:rounded-lg zd:bg-greyScale/15 zd:animate-skel-pulse" />
|
|
136
136
|
)}
|
|
137
|
-
<div className="zd:w-24 zd:h-3 zd:rounded-lg zd:bg-
|
|
137
|
+
<div className="zd:w-24 zd:h-3 zd:rounded-lg zd:bg-greyScale/15 zd:animate-skel-pulse" />
|
|
138
138
|
</div>
|
|
139
139
|
)
|
|
140
140
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Slot } from 'radix-ui'
|
|
2
|
+
import type { ButtonHTMLAttributes, ReactElement, ReactNode } from 'react'
|
|
2
3
|
|
|
3
4
|
import { cn } from '../../utils/common'
|
|
4
|
-
import { Badge, type BadgeProps } from '../Badge'
|
|
5
5
|
import { Icon, type IconName } from '../Icon'
|
|
6
6
|
import { Text } from '../Text'
|
|
7
7
|
import { Wrapper } from '../Wrapper'
|
|
@@ -20,117 +20,112 @@ export function ListItemSkeleton({ className }: ListItemSkeletonProps) {
|
|
|
20
20
|
>
|
|
21
21
|
<div className="zd:flex zd:flex-row zd:justify-between zd:items-center zd:p-2">
|
|
22
22
|
<div className="zd:flex zd:flex-row zd:items-center zd:gap-3">
|
|
23
|
-
<div className="zd:w-13 zd:h-13 zd:rounded-2xl zd:bg-
|
|
23
|
+
<div className="zd:w-13 zd:h-13 zd:rounded-2xl zd:bg-greyScale/15 zd:animate-skel-pulse" />
|
|
24
24
|
<div className="zd:gap-2">
|
|
25
|
-
<div className="zd:w-14 zd:h-3 zd:rounded-lg zd:bg-
|
|
26
|
-
<div className="zd:w-14 zd:h-3 zd:rounded-lg zd:bg-
|
|
25
|
+
<div className="zd:w-14 zd:h-3 zd:rounded-lg zd:bg-greyScale/15 zd:animate-skel-pulse zd:mb-2" />
|
|
26
|
+
<div className="zd:w-14 zd:h-3 zd:rounded-lg zd:bg-greyScale/15 zd:animate-skel-pulse" />
|
|
27
27
|
</div>
|
|
28
28
|
</div>
|
|
29
29
|
<div className="zd:gap-2">
|
|
30
|
-
<div className="zd:w-14 zd:h-3 zd:rounded-lg zd:bg-
|
|
31
|
-
<div className="zd:w-14 zd:h-3 zd:rounded-lg zd:bg-
|
|
30
|
+
<div className="zd:w-14 zd:h-3 zd:rounded-lg zd:bg-greyScale/15 zd:animate-skel-pulse zd:mb-2" />
|
|
31
|
+
<div className="zd:w-14 zd:h-3 zd:rounded-lg zd:bg-greyScale/15 zd:animate-skel-pulse" />
|
|
32
32
|
</div>
|
|
33
33
|
</div>
|
|
34
34
|
</div>
|
|
35
35
|
)
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
imageUri?: string
|
|
38
|
+
interface ListItemBaseProps
|
|
39
|
+
extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {
|
|
41
40
|
title: string
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
41
|
+
/** Secondary line under the title — plain text (auto-styled) or any node,
|
|
42
|
+
* e.g. a `<Badge />`. */
|
|
43
|
+
subtitle?: ReactNode
|
|
44
|
+
/** Leading tile content — any node (`ListItemIcon`, `<img>`, a brand mark).
|
|
45
|
+
* Size the node itself (e.g. `zd:w-6 zd:h-6`); the tile keeps its frame. */
|
|
46
|
+
icon?: ReactNode
|
|
47
|
+
/** Right side of the row — `<ListItemChevron />` or any custom node. */
|
|
48
|
+
trailing?: ReactNode
|
|
47
49
|
}
|
|
48
50
|
|
|
51
|
+
// `children` is only meaningful as the asChild target — the union makes the
|
|
52
|
+
// pairing a compile-time contract.
|
|
53
|
+
type ListItemAsChildProps =
|
|
54
|
+
| {
|
|
55
|
+
/** Render the row into the child element (e.g. an `<a>`) instead of a
|
|
56
|
+
* `<button>`. Pass a single childless element; the row layout is
|
|
57
|
+
* injected into it. */
|
|
58
|
+
asChild: true
|
|
59
|
+
children: ReactElement
|
|
60
|
+
}
|
|
61
|
+
| { asChild?: false; children?: never }
|
|
62
|
+
|
|
63
|
+
export type ListItemProps = ListItemBaseProps & ListItemAsChildProps
|
|
64
|
+
|
|
49
65
|
export function ListItem({
|
|
50
|
-
|
|
51
|
-
imageUri,
|
|
66
|
+
icon,
|
|
52
67
|
title,
|
|
53
68
|
subtitle,
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
alert,
|
|
69
|
+
trailing,
|
|
70
|
+
asChild,
|
|
71
|
+
children,
|
|
58
72
|
className,
|
|
59
73
|
...rest
|
|
60
74
|
}: ListItemProps) {
|
|
75
|
+
const Comp = asChild ? Slot.Root : 'button'
|
|
61
76
|
return (
|
|
62
|
-
<Wrapper
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
alert && 'zd:border-0',
|
|
66
|
-
className,
|
|
67
|
-
)}
|
|
68
|
-
>
|
|
69
|
-
<button
|
|
70
|
-
type="button"
|
|
77
|
+
<Wrapper className={cn('zd:w-full zd:h-17 zd:rounded-2xl', className)}>
|
|
78
|
+
<Comp
|
|
79
|
+
{...(!asChild && { type: 'button' as const })}
|
|
71
80
|
className={cn(
|
|
72
|
-
'zd:w-full zd:flex zd:flex-row zd:justify-between zd:items-center zd:p-2 zd:transition-colors zd:cursor-pointer',
|
|
73
|
-
alert
|
|
74
|
-
? 'zd:bg-solarOrange/15'
|
|
75
|
-
: 'zd:hover:bg-white/20 zd:active:bg-white/30',
|
|
81
|
+
'zd:w-full zd:flex zd:flex-row zd:justify-between zd:items-center zd:p-2 zd:transition-colors zd:cursor-pointer zd:hover:bg-white/20 zd:active:bg-white/30',
|
|
76
82
|
rest.disabled && 'zd:opacity-50 zd:cursor-not-allowed',
|
|
77
83
|
)}
|
|
78
84
|
{...rest}
|
|
79
85
|
>
|
|
86
|
+
{asChild && <Slot.Slottable>{children}</Slot.Slottable>}
|
|
80
87
|
<div className="zd:flex zd:flex-row zd:items-center zd:gap-3">
|
|
81
|
-
<div
|
|
82
|
-
|
|
83
|
-
'zd:w-13 zd:h-13 zd:rounded-2xl zd:flex zd:items-center zd:justify-center zd:shrink-0',
|
|
84
|
-
alert ? 'zd:bg-offWhite/50' : 'zd:bg-white',
|
|
85
|
-
)}
|
|
86
|
-
>
|
|
87
|
-
{imageUri ? (
|
|
88
|
-
<img src={imageUri} alt="" className="zd:w-6 zd:h-6" />
|
|
89
|
-
) : iconName ? (
|
|
90
|
-
<Icon
|
|
91
|
-
name={iconName}
|
|
92
|
-
className={cn(
|
|
93
|
-
'zd:w-6 zd:h-6',
|
|
94
|
-
details || alert
|
|
95
|
-
? 'zd:text-solarOrange'
|
|
96
|
-
: 'zd:text-greyScale',
|
|
97
|
-
)}
|
|
98
|
-
/>
|
|
99
|
-
) : null}
|
|
88
|
+
<div className="zd:w-13 zd:h-13 zd:rounded-2xl zd:bg-white zd:flex zd:items-center zd:justify-center zd:shrink-0">
|
|
89
|
+
{icon}
|
|
100
90
|
</div>
|
|
101
|
-
<div
|
|
102
|
-
className={cn(
|
|
103
|
-
'zd:flex zd:flex-col zd:justify-center zd:text-left',
|
|
104
|
-
badgeProps ? 'zd:gap-2' : 'zd:gap-1',
|
|
105
|
-
)}
|
|
106
|
-
>
|
|
91
|
+
<div className="zd:flex zd:flex-col zd:justify-center zd:text-left zd:gap-1">
|
|
107
92
|
<Text className="zd:text-body1">{title}</Text>
|
|
108
|
-
{subtitle
|
|
93
|
+
{typeof subtitle === 'string' ? (
|
|
109
94
|
<Text className="zd:text-body3 zd:text-greyScale/50">
|
|
110
95
|
{subtitle}
|
|
111
96
|
</Text>
|
|
97
|
+
) : (
|
|
98
|
+
subtitle
|
|
112
99
|
)}
|
|
113
|
-
{badgeProps && <Badge {...badgeProps} />}
|
|
114
100
|
</div>
|
|
115
101
|
</div>
|
|
116
|
-
{
|
|
117
|
-
|
|
118
|
-
<Text className="zd:text-body1">{details.text}</Text>
|
|
119
|
-
{details.subtext && (
|
|
120
|
-
<Text className="zd:text-body3 zd:text-greyScale/50 zd:self-end">
|
|
121
|
-
{details.subtext}
|
|
122
|
-
</Text>
|
|
123
|
-
)}
|
|
124
|
-
</div>
|
|
125
|
-
) : chevron ? (
|
|
126
|
-
<div className="zd:w-13 zd:h-13 zd:flex zd:items-center zd:justify-center">
|
|
127
|
-
<Icon
|
|
128
|
-
name="chevronRight"
|
|
129
|
-
className="zd:h-6 zd:w-6 zd:text-greyScale"
|
|
130
|
-
/>
|
|
131
|
-
</div>
|
|
132
|
-
) : null}
|
|
133
|
-
</button>
|
|
102
|
+
{trailing}
|
|
103
|
+
</Comp>
|
|
134
104
|
</Wrapper>
|
|
135
105
|
)
|
|
136
106
|
}
|
|
107
|
+
|
|
108
|
+
export interface ListItemIconProps {
|
|
109
|
+
name: IconName
|
|
110
|
+
className?: string
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** Standard leading icon for the tile — pre-sized and colored for the slot;
|
|
114
|
+
* override via `className` (e.g. `zd:text-solarOrange`). */
|
|
115
|
+
export function ListItemIcon({ name, className }: ListItemIconProps) {
|
|
116
|
+
return (
|
|
117
|
+
<Icon
|
|
118
|
+
name={name}
|
|
119
|
+
className={cn('zd:w-6 zd:h-6 zd:text-greyScale', className)}
|
|
120
|
+
/>
|
|
121
|
+
)
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/** Standard trailing chevron for navigation rows. */
|
|
125
|
+
export function ListItemChevron() {
|
|
126
|
+
return (
|
|
127
|
+
<div className="zd:w-13 zd:h-13 zd:flex zd:items-center zd:justify-center">
|
|
128
|
+
<Icon name="chevronRight" className="zd:h-6 zd:w-6 zd:text-greyScale" />
|
|
129
|
+
</div>
|
|
130
|
+
)
|
|
131
|
+
}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import type { HTMLAttributes, KeyboardEvent, ReactNode, Ref } from 'react'
|
|
2
|
+
import { cn } from '../../utils/common'
|
|
3
|
+
import { Text } from '../Text'
|
|
4
|
+
import { Wrapper } from '../Wrapper'
|
|
5
|
+
|
|
6
|
+
export interface PillProps
|
|
7
|
+
extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
|
|
8
|
+
/** Text label rendered next to the logo (e.g., "USDC", "Base"). */
|
|
9
|
+
label: string
|
|
10
|
+
/** URL of the logo image; when omitted, a neutral placeholder disc with the
|
|
11
|
+
* first letter of `label` is drawn. */
|
|
12
|
+
logoUri?: string
|
|
13
|
+
/** Click handler; when supplied and not `disabled`, the pill becomes a keyboard-accessible button. */
|
|
14
|
+
onClick?: () => void
|
|
15
|
+
/** When true, renders as a dimmed, non-interactive pill. */
|
|
16
|
+
disabled?: boolean
|
|
17
|
+
/** Render a pulsing skeleton placeholder instead of the content. */
|
|
18
|
+
loading?: boolean
|
|
19
|
+
/** Optional trailing affordance (e.g., `<SelectIcon />`). Rendered in a padded slot on the right. */
|
|
20
|
+
trailingIcon?: ReactNode
|
|
21
|
+
ref?: Ref<HTMLDivElement>
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function Pill({
|
|
25
|
+
label,
|
|
26
|
+
logoUri,
|
|
27
|
+
onClick,
|
|
28
|
+
disabled,
|
|
29
|
+
loading,
|
|
30
|
+
trailingIcon,
|
|
31
|
+
className,
|
|
32
|
+
ref,
|
|
33
|
+
...rest
|
|
34
|
+
}: PillProps) {
|
|
35
|
+
if (loading) return <PillSkeleton className={className} disabled={disabled} />
|
|
36
|
+
|
|
37
|
+
const logoInitial = label.charAt(0).toUpperCase()
|
|
38
|
+
|
|
39
|
+
const interactive = Boolean(onClick) && !disabled
|
|
40
|
+
|
|
41
|
+
const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {
|
|
42
|
+
if (!interactive) return
|
|
43
|
+
if (event.key === 'Enter' || event.key === ' ') {
|
|
44
|
+
event.preventDefault()
|
|
45
|
+
onClick?.()
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return (
|
|
50
|
+
<Wrapper
|
|
51
|
+
ref={ref}
|
|
52
|
+
variant="solid"
|
|
53
|
+
// Override Wrapper's variant-based bg color for the display variant —
|
|
54
|
+
// Figma spec is exactly rgba(255,255,255,0.05), which none of the
|
|
55
|
+
// Wrapper variants match. Inline style beats Wrapper's own style.
|
|
56
|
+
style={
|
|
57
|
+
disabled ? { backgroundColor: 'rgba(255, 255, 255, 0.05)' } : undefined
|
|
58
|
+
}
|
|
59
|
+
className={cn(
|
|
60
|
+
// Sizing/padding matches Figma: outer pl-1 pr-2 py-1, rounded-2xl.
|
|
61
|
+
// Height is content-driven — 44px logo + 4px vertical padding = 52px.
|
|
62
|
+
'zd:relative zd:flex zd:w-full zd:items-center zd:justify-between zd:overflow-hidden zd:rounded-2xl zd:pl-1 zd:pr-2 zd:py-1',
|
|
63
|
+
// Universal inner shadow from the Figma design token.
|
|
64
|
+
'zd:shadow-[inset_0_-4px_4px_0_rgba(255,255,255,0.1),inset_0_3px_4px_0_rgba(0,0,0,0.02)]',
|
|
65
|
+
!disabled && 'zd:cursor-pointer',
|
|
66
|
+
className,
|
|
67
|
+
)}
|
|
68
|
+
{...rest}
|
|
69
|
+
{...(interactive && {
|
|
70
|
+
role: 'button',
|
|
71
|
+
tabIndex: 0,
|
|
72
|
+
onClick,
|
|
73
|
+
onKeyDown: handleKeyDown,
|
|
74
|
+
})}
|
|
75
|
+
>
|
|
76
|
+
<div className="zd:flex zd:items-center zd:gap-1.5">
|
|
77
|
+
{/* 44×44 logo well with a 34×34 centered inner disc. Figma places the
|
|
78
|
+
image with translate-1/2 offsets so the smaller disc sits inside
|
|
79
|
+
the larger well — the 10px reveal reads as the pill's "logo pad". */}
|
|
80
|
+
<div
|
|
81
|
+
className="zd:relative zd:size-11 zd:shrink-0 zd:rounded-xl"
|
|
82
|
+
aria-hidden={!logoUri}
|
|
83
|
+
>
|
|
84
|
+
<div
|
|
85
|
+
className={cn(
|
|
86
|
+
'zd:absolute zd:top-1/2 zd:left-1/2 zd:-translate-x-1/2 zd:-translate-y-1/2',
|
|
87
|
+
'zd:flex zd:size-8.5 zd:items-center zd:justify-center',
|
|
88
|
+
// Only round + clip when we're showing the letter fallback disc.
|
|
89
|
+
// Real logo SVGs bring their own shape (round, diamond, etc.) —
|
|
90
|
+
// clipping them to a circle chops off tips like Polygon's.
|
|
91
|
+
// The neutral greyScale/10 fallback disc reads as a design-
|
|
92
|
+
// system placeholder rather than a token-specific color; real
|
|
93
|
+
// tokens/chains ship via `logoUri`.
|
|
94
|
+
!logoUri &&
|
|
95
|
+
'zd:overflow-hidden zd:rounded-full zd:bg-greyScale/10',
|
|
96
|
+
)}
|
|
97
|
+
>
|
|
98
|
+
{logoUri ? (
|
|
99
|
+
<img
|
|
100
|
+
alt=""
|
|
101
|
+
src={logoUri}
|
|
102
|
+
className="zd:size-full zd:object-contain"
|
|
103
|
+
data-testid="token-chain-pill-logo"
|
|
104
|
+
/>
|
|
105
|
+
) : logoInitial ? (
|
|
106
|
+
<span className="zd:text-body2 zd:font-medium zd:text-greyScale">
|
|
107
|
+
{logoInitial}
|
|
108
|
+
</span>
|
|
109
|
+
) : null}
|
|
110
|
+
</div>
|
|
111
|
+
</div>
|
|
112
|
+
<Text className="zd:whitespace-nowrap zd:text-body1">{label}</Text>
|
|
113
|
+
</div>
|
|
114
|
+
{trailingIcon && (
|
|
115
|
+
<div
|
|
116
|
+
className="zd:flex zd:shrink-0 zd:items-center zd:rounded-full zd:p-2"
|
|
117
|
+
data-testid="pill-trailing-icon"
|
|
118
|
+
>
|
|
119
|
+
{trailingIcon}
|
|
120
|
+
</div>
|
|
121
|
+
)}
|
|
122
|
+
</Wrapper>
|
|
123
|
+
)
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export function PillSkeleton({
|
|
127
|
+
className,
|
|
128
|
+
disabled,
|
|
129
|
+
}: {
|
|
130
|
+
className?: string | undefined
|
|
131
|
+
/** Match `Pill`'s dimmed display-variant background so the skeleton on a
|
|
132
|
+
* destination (disabled) pill doesn't look like an interactive pill. */
|
|
133
|
+
disabled?: boolean | undefined
|
|
134
|
+
}) {
|
|
135
|
+
return (
|
|
136
|
+
<Wrapper
|
|
137
|
+
variant="solid"
|
|
138
|
+
role="status"
|
|
139
|
+
aria-busy="true"
|
|
140
|
+
aria-label="Loading"
|
|
141
|
+
style={
|
|
142
|
+
disabled ? { backgroundColor: 'rgba(255, 255, 255, 0.05)' } : undefined
|
|
143
|
+
}
|
|
144
|
+
className={cn(
|
|
145
|
+
// Match Pill's outer chrome so the placeholder occupies the same
|
|
146
|
+
// footprint (52px tall = 44px logo well + 4px vertical padding).
|
|
147
|
+
'zd:relative zd:flex zd:w-full zd:items-center zd:overflow-hidden zd:rounded-2xl zd:pl-1 zd:pr-2 zd:py-1',
|
|
148
|
+
'zd:shadow-[inset_0_-4px_4px_0_rgba(255,255,255,0.1),inset_0_3px_4px_0_rgba(0,0,0,0.02)]',
|
|
149
|
+
className,
|
|
150
|
+
)}
|
|
151
|
+
>
|
|
152
|
+
{/* Visual only — the outer wrapper carries the a11y busy/label state,
|
|
153
|
+
* so hide the placeholder bars from assistive tech to avoid narrating
|
|
154
|
+
* empty pill contents. */}
|
|
155
|
+
<div
|
|
156
|
+
aria-hidden
|
|
157
|
+
className="zd:flex zd:items-center zd:gap-1.5 zd:animate-skel-pulse"
|
|
158
|
+
>
|
|
159
|
+
{/* Logo well mirrors Pill's 44×44 → inner 34×34 (size-8.5). */}
|
|
160
|
+
<div className="zd:relative zd:size-11 zd:shrink-0">
|
|
161
|
+
<div className="zd:absolute zd:top-1/2 zd:left-1/2 zd:size-8.5 zd:-translate-x-1/2 zd:-translate-y-1/2 zd:rounded-full zd:bg-greyScale/15" />
|
|
162
|
+
</div>
|
|
163
|
+
<div className="zd:h-3.5 zd:w-14 zd:rounded-md zd:bg-greyScale/15" />
|
|
164
|
+
</div>
|
|
165
|
+
</Wrapper>
|
|
166
|
+
)
|
|
167
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { CSSProperties } from 'react'
|
|
2
|
+
import { cn } from '../../utils/common'
|
|
3
|
+
import { Text } from '../Text'
|
|
4
|
+
import { ZeroDevLogo } from '../ZeroDevLogo'
|
|
5
|
+
|
|
6
|
+
export function PoweredBy({
|
|
7
|
+
className,
|
|
8
|
+
style,
|
|
9
|
+
}: {
|
|
10
|
+
className?: string
|
|
11
|
+
style?: CSSProperties
|
|
12
|
+
}) {
|
|
13
|
+
return (
|
|
14
|
+
<div
|
|
15
|
+
className={cn(
|
|
16
|
+
'zd:gap-1.5 zd:flex zd:flex-row zd:items-center',
|
|
17
|
+
className,
|
|
18
|
+
)}
|
|
19
|
+
>
|
|
20
|
+
<Text>Powered by</Text>
|
|
21
|
+
<ZeroDevLogo
|
|
22
|
+
variant="lockup"
|
|
23
|
+
tone="black"
|
|
24
|
+
className="zd:h-4.5 zd:w-auto"
|
|
25
|
+
style={style}
|
|
26
|
+
/>
|
|
27
|
+
</div>
|
|
28
|
+
)
|
|
29
|
+
}
|