@pollinations/ui 0.0.2 → 0.1.0-alpha.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 +10 -6
- package/dist/{Button-CWUBCiIc.d.cts → Button-BvLF_Km2.d.cts} +3 -3
- package/dist/{Button-Bn8pGg6N.d.ts → Button-DQAZzvyQ.d.ts} +3 -3
- package/dist/auth/index.cjs +77 -62
- package/dist/auth/index.cjs.map +1 -1
- package/dist/auth/index.js +77 -62
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/sdk.cjs +7 -6
- package/dist/auth/sdk.cjs.map +1 -1
- package/dist/auth/sdk.d.cts +1 -1
- package/dist/auth/sdk.d.ts +1 -1
- package/dist/auth/sdk.js +7 -6
- package/dist/auth/sdk.js.map +1 -1
- package/dist/compositions/app-user.cjs +497 -0
- package/dist/compositions/app-user.cjs.map +1 -0
- package/dist/compositions/app-user.d.cts +18 -0
- package/dist/compositions/app-user.d.ts +18 -0
- package/dist/compositions/app-user.js +469 -0
- package/dist/compositions/app-user.js.map +1 -0
- package/dist/index.cjs +932 -270
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +101 -6
- package/dist/index.d.ts +101 -6
- package/dist/index.js +891 -247
- package/dist/index.js.map +1 -1
- package/dist/modality/index.cjs +21 -18
- package/dist/modality/index.cjs.map +1 -1
- package/dist/modality/index.d.cts +6 -5
- package/dist/modality/index.d.ts +6 -5
- package/dist/modality/index.js +21 -18
- package/dist/modality/index.js.map +1 -1
- package/dist/models/index.cjs +508 -0
- package/dist/models/index.cjs.map +1 -0
- package/dist/models/index.d.cts +22 -0
- package/dist/models/index.d.ts +22 -0
- package/dist/models/index.js +486 -0
- package/dist/models/index.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/wallet/index.cjs +13 -4
- package/dist/wallet/index.cjs.map +1 -1
- package/dist/wallet/index.js +13 -4
- package/dist/wallet/index.js.map +1 -1
- package/dist/wallet/sdk.cjs +2 -2
- package/dist/wallet/sdk.cjs.map +1 -1
- package/dist/wallet/sdk.js +2 -2
- package/dist/wallet/sdk.js.map +1 -1
- package/package.json +17 -5
- package/dist/wallet.css +0 -73
package/dist/styles.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! tailwindcss v4.3.0 | 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-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction: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-duration:initial;--tw-ease:initial;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--polli-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--polli-color-red-400:oklch(70.4% .191 22.216);--polli-color-amber-100:oklch(96.2% .059 95.617);--polli-color-amber-200:oklch(92.4% .12 95.746);--polli-color-amber-800:oklch(47.3% .137 46.201);--polli-color-amber-900:oklch(41.4% .112 45.904);--polli-color-green-100:oklch(96.2% .044 156.743);--polli-color-green-200:oklch(92.5% .084 155.995);--polli-color-green-700:oklch(52.7% .154 150.069);--polli-color-green-800:oklch(44.8% .119 151.328);--polli-color-green-900:oklch(39.3% .095 152.535);--polli-color-green-950:oklch(26.6% .065 152.934);--polli-color-teal-100:oklch(95.3% .051 180.801);--polli-color-teal-200:oklch(91% .096 180.426);--polli-color-teal-800:oklch(43.7% .078 188.216);--polli-color-teal-900:oklch(38.6% .063 188.416);--polli-color-blue-100:oklch(93.2% .032 255.585);--polli-color-blue-200:oklch(88.2% .059 254.128);--polli-color-blue-800:oklch(42.4% .199 265.638);--polli-color-blue-900:oklch(37.9% .146 265.522);--polli-color-violet-100:oklch(94.3% .029 294.588);--polli-color-violet-200:oklch(89.4% .057 293.283);--polli-color-violet-800:oklch(43.2% .232 292.759);--polli-color-violet-900:oklch(38% .189 293.745);--polli-color-pink-100:oklch(94.8% .028 342.258);--polli-color-pink-200:oklch(89.9% .061 343.231);--polli-color-pink-800:oklch(45.9% .187 3.815);--polli-color-pink-900:oklch(40.8% .153 2.432);--polli-color-gray-100:oklch(96.7% .003 264.542);--polli-color-gray-200:oklch(92.8% .006 264.531);--polli-color-gray-300:oklch(87.2% .01 258.338);--polli-color-gray-400:oklch(70.7% .022 261.325);--polli-color-gray-700:oklch(37.3% .034 259.733);--polli-color-gray-900:oklch(21% .034 264.665);--polli-color-gray-950:oklch(13% .028 261.692);--polli-color-white:#fff;--polli-spacing:.25rem;--polli-container-md:28rem;--polli-container-xl:36rem;--polli-container-2xl:42rem;--polli-text-xs:.75rem;--polli-text-xs--line-height:calc(1 / .75);--polli-text-sm:.875rem;--polli-text-sm--line-height:calc(1.25 / .875);--polli-text-base:16px;--polli-text-base--line-height:calc(1.5 / 1);--polli-text-xl:1.25rem;--polli-text-xl--line-height:calc(1.75 / 1.25);--polli-text-2xl:1.5rem;--polli-text-2xl--line-height:calc(2 / 1.5);--polli-font-weight-medium:500;--polli-font-weight-semibold:600;--polli-font-weight-bold:700;--polli-tracking-tight:-.025em;--polli-tracking-wide:.025em;--polli-leading-tight:1.25;--polli-leading-normal:1.5;--polli-radius-md:.375rem;--polli-radius-lg:.5rem;--polli-radius-xl:.75rem;--polli-radius-2xl:1rem;--polli-ease-out:cubic-bezier(0, 0, .2, 1);--polli-default-transition-duration:.15s;--polli-default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--polli-font-heading:"LCT Mogi", ui-sans-serif, sans-serif;--polli-font-subheading:"Fraunces", ui-serif, serif;--polli-font-body:"Uncut Sans", ui-sans-serif, sans-serif;--polli-font-pixel:"Pixelify Sans", ui-monospace, monospace;--polli-text-micro:10px;--polli-color-surface-white:var(--polli-color-surface-white)}}@layer base,components;@layer utilities{.polli\:pointer-events-none{pointer-events:none}.polli\:invisible{visibility:hidden}.polli\:visible{visibility:visible}.polli\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.polli\:absolute{position:absolute}.polli\:fixed{position:fixed}.polli\:relative{position:relative}.polli\:inset-0{inset:calc(var(--polli-spacing) * 0)}.polli\:-top-8{top:calc(var(--polli-spacing) * -8)}.polli\:left-1\/2{left:50%}.polli\:z-50{z-index:50}.polli\:z-\[100\]{z-index:100}.polli\:z-\[110\]{z-index:110}.polli\:my-auto{margin-block:auto}.polli\:mt-1{margin-top:calc(var(--polli-spacing) * 1)}.polli\:mt-1\.5{margin-top:calc(var(--polli-spacing) * 1.5)}.polli\:mt-2{margin-top:calc(var(--polli-spacing) * 2)}.polli\:mb-1{margin-bottom:calc(var(--polli-spacing) * 1)}.polli\:mb-2{margin-bottom:calc(var(--polli-spacing) * 2)}.polli\:mb-3{margin-bottom:calc(var(--polli-spacing) * 3)}.polli\:ml-1{margin-left:calc(var(--polli-spacing) * 1)}.polli\:box-border{box-sizing:border-box}.polli\:block{display:block}.polli\:contents{display:contents}.polli\:flex{display:flex}.polli\:grid{display:grid}.polli\:inline-block{display:inline-block}.polli\:inline-flex{display:inline-flex}.polli\:aspect-square{aspect-ratio:1}.polli\:h-2{height:calc(var(--polli-spacing) * 2)}.polli\:h-3{height:calc(var(--polli-spacing) * 3)}.polli\:h-3\.5{height:calc(var(--polli-spacing) * 3.5)}.polli\:h-4{height:calc(var(--polli-spacing) * 4)}.polli\:h-5{height:calc(var(--polli-spacing) * 5)}.polli\:h-6{height:calc(var(--polli-spacing) * 6)}.polli\:h-7{height:calc(var(--polli-spacing) * 7)}.polli\:h-8{height:calc(var(--polli-spacing) * 8)}.polli\:h-9{height:calc(var(--polli-spacing) * 9)}.polli\:h-12{height:calc(var(--polli-spacing) * 12)}.polli\:h-dvh{height:100dvh}.polli\:max-h-64{max-height:calc(var(--polli-spacing) * 64)}.polli\:min-h-8{min-height:calc(var(--polli-spacing) * 8)}.polli\:w-2{width:calc(var(--polli-spacing) * 2)}.polli\:w-3{width:calc(var(--polli-spacing) * 3)}.polli\:w-3\.5{width:calc(var(--polli-spacing) * 3.5)}.polli\:w-4{width:calc(var(--polli-spacing) * 4)}.polli\:w-5{width:calc(var(--polli-spacing) * 5)}.polli\:w-6{width:calc(var(--polli-spacing) * 6)}.polli\:w-8{width:calc(var(--polli-spacing) * 8)}.polli\:w-9{width:calc(var(--polli-spacing) * 9)}.polli\:w-12{width:calc(var(--polli-spacing) * 12)}.polli\:w-\[304px\]{width:304px}.polli\:w-full{width:100%}.polli\:w-max{width:max-content}.polli\:max-w-2xl{max-width:var(--polli-container-2xl)}.polli\:max-w-full{max-width:100%}.polli\:max-w-md{max-width:var(--polli-container-md)}.polli\:max-w-xl{max-width:var(--polli-container-xl)}.polli\:min-w-0{min-width:calc(var(--polli-spacing) * 0)}.polli\:min-w-\[140px\]{min-width:140px}.polli\:min-w-\[150px\]{min-width:150px}.polli\:min-w-\[320px\]{min-width:320px}.polli\:flex-1{flex:1}.polli\:flex-shrink-0,.polli\:shrink-0{flex-shrink:0}.polli\:border-collapse{border-collapse:collapse}.polli\:-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.polli\:translate-x-1{--tw-translate-x:calc(var(--polli-spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.polli\:translate-x-6{--tw-translate-x:calc(var(--polli-spacing) * 6);translate:var(--tw-translate-x) var(--tw-translate-y)}.polli\:rotate-180{rotate:180deg}.polli\:cursor-help{cursor:help}.polli\:cursor-not-allowed{cursor:not-allowed}.polli\:cursor-pointer{cursor:pointer}.polli\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.polli\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.polli\:flex-nowrap{flex-wrap:nowrap}.polli\:flex-wrap{flex-wrap:wrap}.polli\:items-center{align-items:center}.polli\:items-start{align-items:flex-start}.polli\:justify-between{justify-content:space-between}.polli\:justify-center{justify-content:center}.polli\:justify-end{justify-content:flex-end}.polli\:justify-start{justify-content:flex-start}.polli\:gap-1{gap:calc(var(--polli-spacing) * 1)}.polli\:gap-1\.5{gap:calc(var(--polli-spacing) * 1.5)}.polli\:gap-2{gap:calc(var(--polli-spacing) * 2)}.polli\:gap-3{gap:calc(var(--polli-spacing) * 3)}:where(.polli\:divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.polli\:divide-theme-border\/65>:not(:last-child)){border-color:var(--polli-color-border)}@supports (color:color-mix(in lab, red, red)){:where(.polli\:divide-theme-border\/65>:not(:last-child)){border-color:color-mix(in oklab, var(--polli-color-border) 65%, transparent)}}.polli\:self-center{align-self:center}.polli\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.polli\:overflow-hidden{overflow:hidden}.polli\:overflow-x-auto{overflow-x:auto}.polli\:overflow-x-hidden{overflow-x:hidden}.polli\:overflow-y-auto{overflow-y:auto}.polli\:overflow-y-hidden{overflow-y:hidden}.polli\:rounded{border-radius:.25rem}.polli\:rounded-2xl{border-radius:var(--polli-radius-2xl)}.polli\:rounded-full{border-radius:3.40282e38px}.polli\:rounded-lg{border-radius:var(--polli-radius-lg)}.polli\:rounded-md{border-radius:var(--polli-radius-md)}.polli\:rounded-xl{border-radius:var(--polli-radius-xl)}.polli\:rounded-t-lg{border-top-left-radius:var(--polli-radius-lg);border-top-right-radius:var(--polli-radius-lg)}.polli\:border{border-style:var(--tw-border-style);border-width:1px}.polli\:border-2{border-style:var(--tw-border-style);border-width:2px}.polli\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.polli\:border-gray-300{border-color:var(--polli-color-gray-300)}.polli\:border-gray-400\/70{border-color:var(--polli-color-gray-400)}@supports (color:color-mix(in lab, red, red)){.polli\:border-gray-400\/70{border-color:color-mix(in oklab, var(--polli-color-gray-400) 70%, transparent)}}.polli\:border-intent-danger-border{border-color:var(--polli-color-danger-border)}.polli\:border-intent-success-border{border-color:var(--polli-color-success-border)}.polli\:border-intent-warning-border{border-color:var(--polli-color-warning-border)}.polli\:border-red-400{border-color:var(--polli-color-red-400)}.polli\:border-theme-border{border-color:var(--polli-color-border)}.polli\:bg-\[oklch\(0\.88_0\.12_25\)\]{background-color:oklch(88% .12 25)}.polli\:bg-\[oklch\(0\.88_0\.12_158\)\]{background-color:oklch(88% .12 158)}.polli\:bg-\[oklch\(0\.93_0\.06_300\)\]{background-color:oklch(93% .06 300)}.polli\:bg-\[oklch\(0\.935_0\.06_158\)\]{background-color:oklch(93.5% .06 158)}.polli\:bg-amber-200{background-color:var(--polli-color-amber-200)}.polli\:bg-blue-200{background-color:var(--polli-color-blue-200)}.polli\:bg-current{background-color:currentColor}.polli\:bg-gray-100\/80{background-color:var(--polli-color-gray-100)}@supports (color:color-mix(in lab, red, red)){.polli\:bg-gray-100\/80{background-color:color-mix(in oklab, var(--polli-color-gray-100) 80%, transparent)}}.polli\:bg-gray-200{background-color:var(--polli-color-gray-200)}.polli\:bg-gray-950\/50{background-color:var(--polli-color-gray-950)}@supports (color:color-mix(in lab, red, red)){.polli\:bg-gray-950\/50{background-color:color-mix(in oklab, var(--polli-color-gray-950) 50%, transparent)}}.polli\:bg-green-200{background-color:var(--polli-color-green-200)}.polli\:bg-intent-danger-bg-light,.polli\:bg-intent-danger-bg-light\/65{background-color:var(--polli-color-danger-bg-light)}@supports (color:color-mix(in lab, red, red)){.polli\:bg-intent-danger-bg-light\/65{background-color:color-mix(in oklab, var(--polli-color-danger-bg-light) 65%, transparent)}}.polli\:bg-intent-success-bg-light,.polli\:bg-intent-success-bg-light\/55{background-color:var(--polli-color-success-bg-light)}@supports (color:color-mix(in lab, red, red)){.polli\:bg-intent-success-bg-light\/55{background-color:color-mix(in oklab, var(--polli-color-success-bg-light) 55%, transparent)}}.polli\:bg-intent-warning-bg-light,.polli\:bg-intent-warning-bg-light\/65{background-color:var(--polli-color-warning-bg-light)}@supports (color:color-mix(in lab, red, red)){.polli\:bg-intent-warning-bg-light\/65{background-color:color-mix(in oklab, var(--polli-color-warning-bg-light) 65%, transparent)}}.polli\:bg-pink-200{background-color:var(--polli-color-pink-200)}.polli\:bg-surface-white{background-color:var(--polli-color-surface-white)}.polli\:bg-teal-200{background-color:var(--polli-color-teal-200)}.polli\:bg-theme-bg-active{background-color:var(--polli-color-bg-active)}.polli\:bg-theme-bg-pale{background-color:var(--polli-color-bg-pale)}.polli\:bg-theme-bg-subtle{background-color:var(--polli-color-bg-subtle)}.polli\:bg-transparent{background-color:#0000}.polli\:bg-violet-200{background-color:var(--polli-color-violet-200)}.polli\:bg-white{background-color:var(--polli-color-white)}.polli\:p-0{padding:calc(var(--polli-spacing) * 0)}.polli\:p-3{padding:calc(var(--polli-spacing) * 3)}.polli\:p-4{padding:calc(var(--polli-spacing) * 4)}.polli\:p-6{padding:calc(var(--polli-spacing) * 6)}.polli\:px-2{padding-inline:calc(var(--polli-spacing) * 2)}.polli\:px-2\.5{padding-inline:calc(var(--polli-spacing) * 2.5)}.polli\:px-3{padding-inline:calc(var(--polli-spacing) * 3)}.polli\:px-4{padding-inline:calc(var(--polli-spacing) * 4)}.polli\:px-6{padding-inline:calc(var(--polli-spacing) * 6)}.polli\:px-8{padding-inline:calc(var(--polli-spacing) * 8)}.polli\:py-0\.5{padding-block:calc(var(--polli-spacing) * .5)}.polli\:py-1{padding-block:calc(var(--polli-spacing) * 1)}.polli\:py-1\.5{padding-block:calc(var(--polli-spacing) * 1.5)}.polli\:py-2{padding-block:calc(var(--polli-spacing) * 2)}.polli\:py-3{padding-block:calc(var(--polli-spacing) * 3)}.polli\:pt-0\.5{padding-top:calc(var(--polli-spacing) * .5)}.polli\:pt-1\.5{padding-top:calc(var(--polli-spacing) * 1.5)}.polli\:pt-2{padding-top:calc(var(--polli-spacing) * 2)}.polli\:pt-3{padding-top:calc(var(--polli-spacing) * 3)}.polli\:pt-6{padding-top:calc(var(--polli-spacing) * 6)}.polli\:pb-1{padding-bottom:calc(var(--polli-spacing) * 1)}.polli\:pb-2{padding-bottom:calc(var(--polli-spacing) * 2)}.polli\:pb-3{padding-bottom:calc(var(--polli-spacing) * 3)}.polli\:pb-8{padding-bottom:calc(var(--polli-spacing) * 8)}.polli\:text-center{text-align:center}.polli\:text-left{text-align:left}.polli\:text-right{text-align:right}.polli\:align-middle{vertical-align:middle}.polli\:font-body{font-family:Uncut Sans,ui-sans-serif,sans-serif}.polli\:font-mono{font-family:var(--polli-font-mono)}.polli\:font-subheading{font-family:Fraunces,ui-serif,serif}.polli\:text-2xl{font-size:var(--polli-text-2xl);line-height:var(--tw-leading,var(--polli-text-2xl--line-height))}.polli\:text-base{font-size:16px;line-height:var(--tw-leading,var(--polli-text-base--line-height))}.polli\:text-sm{font-size:var(--polli-text-sm);line-height:var(--tw-leading,var(--polli-text-sm--line-height))}.polli\:text-xl{font-size:var(--polli-text-xl);line-height:var(--tw-leading,var(--polli-text-xl--line-height))}.polli\:text-xs{font-size:var(--polli-text-xs);line-height:var(--tw-leading,var(--polli-text-xs--line-height))}.polli\:text-micro{font-size:10px}.polli\:leading-none{--tw-leading:1;line-height:1}.polli\:leading-normal{--tw-leading:var(--polli-leading-normal);line-height:var(--polli-leading-normal)}.polli\:leading-tight{--tw-leading:var(--polli-leading-tight);line-height:var(--polli-leading-tight)}.polli\:font-bold{--tw-font-weight:var(--polli-font-weight-bold);font-weight:var(--polli-font-weight-bold)}.polli\:font-medium{--tw-font-weight:var(--polli-font-weight-medium);font-weight:var(--polli-font-weight-medium)}.polli\:font-semibold{--tw-font-weight:var(--polli-font-weight-semibold);font-weight:var(--polli-font-weight-semibold)}.polli\:tracking-tight{--tw-tracking:var(--polli-tracking-tight);letter-spacing:var(--polli-tracking-tight)}.polli\:tracking-wide{--tw-tracking:var(--polli-tracking-wide);letter-spacing:var(--polli-tracking-wide)}.polli\:break-words{overflow-wrap:break-word}.polli\:whitespace-nowrap{white-space:nowrap}.polli\:whitespace-pre-line{white-space:pre-line}.polli\:text-\[oklch\(0\.42_0\.18_300\)\]{color:oklch(42% .18 300)}.polli\:text-\[oklch\(0\.46_0\.13_158\)\]{color:oklch(46% .13 158)}.polli\:text-amber-800{color:var(--polli-color-amber-800)}.polli\:text-amber-900{color:var(--polli-color-amber-900)}.polli\:text-blue-800{color:var(--polli-color-blue-800)}.polli\:text-blue-900{color:var(--polli-color-blue-900)}.polli\:text-gray-300{color:var(--polli-color-gray-300)}.polli\:text-gray-400{color:var(--polli-color-gray-400)}.polli\:text-gray-700{color:var(--polli-color-gray-700)}.polli\:text-gray-900{color:var(--polli-color-gray-900)}.polli\:text-green-700{color:var(--polli-color-green-700)}.polli\:text-green-800{color:var(--polli-color-green-800)}.polli\:text-green-900{color:var(--polli-color-green-900)}.polli\:text-inherit{color:inherit}.polli\:text-intent-danger-text{color:var(--polli-color-danger-text)}.polli\:text-intent-success-text{color:var(--polli-color-success-text)}.polli\:text-intent-warning-text{color:var(--polli-color-warning-text)}.polli\:text-pink-800{color:var(--polli-color-pink-800)}.polli\:text-pink-900{color:var(--polli-color-pink-900)}.polli\:text-teal-800{color:var(--polli-color-teal-800)}.polli\:text-teal-900{color:var(--polli-color-teal-900)}.polli\:text-theme-text-base{color:var(--polli-color-text-base)}.polli\:text-theme-text-muted{color:var(--polli-color-text-muted)}.polli\:text-theme-text-soft,.polli\:text-theme-text-soft\/60{color:var(--polli-color-text-soft)}@supports (color:color-mix(in lab, red, red)){.polli\:text-theme-text-soft\/60{color:color-mix(in oklab, var(--polli-color-text-soft) 60%, transparent)}}.polli\:text-theme-text-strong{color:var(--polli-color-text-strong)}.polli\:text-violet-800{color:var(--polli-color-violet-800)}.polli\:text-violet-900{color:var(--polli-color-violet-900)}.polli\:uppercase{text-transform:uppercase}.polli\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.polli\:placeholder-green-950::placeholder{color:var(--polli-color-green-950)}.polli\:opacity-0{opacity:0}.polli\:opacity-30{opacity:.3}.polli\:opacity-50{opacity:.5}.polli\:opacity-60{opacity:.6}.polli\:opacity-100{opacity:1}.polli\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px 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)}.polli\: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)}.polli\:ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.polli\:ring-theme-border{--tw-ring-color:var(--polli-color-border)}.polli\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--polli-default-transition-timing-function));transition-duration:var(--tw-duration,var(--polli-default-transition-duration))}.polli\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--polli-default-transition-timing-function));transition-duration:var(--tw-duration,var(--polli-default-transition-duration))}.polli\: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(--polli-default-transition-timing-function));transition-duration:var(--tw-duration,var(--polli-default-transition-duration))}.polli\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--polli-default-transition-timing-function));transition-duration:var(--tw-duration,var(--polli-default-transition-duration))}.polli\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--polli-default-transition-timing-function));transition-duration:var(--tw-duration,var(--polli-default-transition-duration))}.polli\:duration-150{--tw-duration:.15s;transition-duration:.15s}.polli\:duration-200{--tw-duration:.2s;transition-duration:.2s}.polli\:ease-out{--tw-ease:var(--polli-ease-out);transition-timing-function:var(--polli-ease-out)}.polli\:select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.polli\:group-hover\:opacity-100:is(:where(.polli\:group):hover *){opacity:1}.polli\:hover\:bg-\[oklch\(0\.88_0\.075_25\)\]:hover{background-color:oklch(88% .075 25)}.polli\:hover\:bg-amber-100:hover{background-color:var(--polli-color-amber-100)}.polli\:hover\:bg-blue-100:hover{background-color:var(--polli-color-blue-100)}.polli\:hover\:bg-green-100:hover{background-color:var(--polli-color-green-100)}.polli\:hover\:bg-pink-100:hover{background-color:var(--polli-color-pink-100)}.polli\:hover\:bg-teal-100:hover{background-color:var(--polli-color-teal-100)}.polli\:hover\:bg-theme-bg-active:hover{background-color:var(--polli-color-bg-active)}.polli\:hover\:bg-theme-bg-hover:hover{background-color:var(--polli-color-bg-hover)}.polli\:hover\:bg-theme-bg-pale:hover{background-color:var(--polli-color-bg-pale)}.polli\:hover\:bg-theme-bg-subtle:hover{background-color:var(--polli-color-bg-subtle)}.polli\:hover\:bg-transparent:hover{background-color:#0000}.polli\:hover\:bg-violet-100:hover{background-color:var(--polli-color-violet-100)}.polli\:hover\:text-amber-900:hover{color:var(--polli-color-amber-900)}.polli\:hover\:text-blue-900:hover{color:var(--polli-color-blue-900)}.polli\:hover\:text-green-900:hover{color:var(--polli-color-green-900)}.polli\:hover\:text-pink-900:hover{color:var(--polli-color-pink-900)}.polli\:hover\:text-teal-900:hover{color:var(--polli-color-teal-900)}.polli\:hover\:text-theme-text-strong:hover{color:var(--polli-color-text-strong)}.polli\:hover\:text-violet-900:hover{color:var(--polli-color-violet-900)}.polli\:hover\:brightness-105:hover{--tw-brightness:brightness(105%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.polli\:hover\:filter:hover{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}}.polli\:focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.polli\:disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.polli\:disabled\:opacity-50:disabled{opacity:.5}.polli\:disabled\:opacity-60:disabled{opacity:.6}}@font-face{font-family:LCT Mogi;src:url(./fonts/lct-mogi-a.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Fraunces;src:url(./fonts/fraunces-soft-bold.woff2)format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Uncut Sans;src:url(./fonts/uncut-sans-variable.woff2)format("woff2-variations");font-weight:300 700;font-style:normal;font-display:swap}:root{--polli-font-heading:"LCT Mogi", ui-sans-serif, sans-serif;--polli-font-subheading:"Fraunces", ui-serif, serif;--polli-font-body:"Uncut Sans", ui-sans-serif, sans-serif;--polli-font-pixel:"Pixelify Sans", ui-monospace, monospace;--polli-text-micro:10px;--polli-text-base:16px;--polli-color-surface-white:oklch(100% 0 0/.8)}[data-theme=amber]{--polli-color-text-base:oklch(41.4% .112 45.904);--polli-color-text-strong:oklch(27.9% .077 45.635);--polli-color-text-soft:oklch(55.5% .163 48.998);--polli-color-text-muted:oklch(62% .045 45.904);--polli-color-border:oklch(87.9% .169 91.605);--polli-color-bg-subtle:oklch(98.7% .022 95.277/.7);--polli-color-bg-active:oklch(92.4% .12 95.746);--polli-color-bg-hover:oklch(87.9% .169 91.605);--polli-color-bg-pale:oklch(96.2% .059 95.617);--polli-color-scrollbar-thumb:oklch(82.8% .189 84.429/.7)}[data-theme=blue]{--polli-color-text-base:oklch(37.9% .146 265.522);--polli-color-text-strong:oklch(28.2% .091 267.935);--polli-color-text-soft:oklch(48.8% .243 264.376);--polli-color-text-muted:oklch(62% .058 265.522);--polli-color-border:oklch(80.9% .105 251.813);--polli-color-bg-subtle:oklch(97% .014 254.604/.7);--polli-color-bg-active:oklch(88.2% .059 254.128);--polli-color-bg-hover:oklch(80.9% .105 251.813);--polli-color-bg-pale:oklch(93.2% .032 255.585);--polli-color-scrollbar-thumb:oklch(70.7% .165 254.624/.7)}[data-theme=pink]{--polli-color-text-base:oklch(40.8% .153 2.432);--polli-color-text-strong:oklch(28.4% .109 3.907);--polli-color-text-soft:oklch(52.5% .223 3.958);--polli-color-text-muted:oklch(62% .061 2.432);--polli-color-border:oklch(82.3% .12 346.018);--polli-color-bg-subtle:oklch(97.1% .014 343.198/.7);--polli-color-bg-active:oklch(89.9% .061 343.231);--polli-color-bg-hover:oklch(82.3% .12 346.018);--polli-color-bg-pale:oklch(94.8% .028 342.258);--polli-color-scrollbar-thumb:oklch(71.8% .202 349.761/.7)}[data-theme=teal]{--polli-color-text-base:oklch(38.6% .063 188.416);--polli-color-text-strong:oklch(27.7% .046 192.524);--polli-color-text-soft:oklch(51.1% .096 186.391);--polli-color-text-muted:oklch(62% .025 188.416);--polli-color-border:oklch(85.5% .138 181.071);--polli-color-bg-subtle:oklch(98.4% .014 180.72/.7);--polli-color-bg-active:oklch(91% .096 180.426);--polli-color-bg-hover:oklch(85.5% .138 181.071);--polli-color-bg-pale:oklch(95.3% .051 180.801);--polli-color-scrollbar-thumb:oklch(70.4% .14 182.503/.7)}[data-theme=violet]{--polli-color-text-base:oklch(38% .189 293.745);--polli-color-text-strong:oklch(28.3% .141 291.089);--polli-color-text-soft:oklch(49.1% .27 292.581);--polli-color-text-muted:oklch(62% .076 293.745);--polli-color-border:oklch(81.1% .111 293.571);--polli-color-bg-subtle:oklch(96.9% .016 293.756/.7);--polli-color-bg-active:oklch(89.4% .057 293.283);--polli-color-bg-hover:oklch(81.1% .111 293.571);--polli-color-bg-pale:oklch(94.3% .029 294.588);--polli-color-scrollbar-thumb:oklch(70.2% .183 293.541/.7)}:root,[data-theme=green]{--polli-color-text-base:oklch(39.3% .095 152.535);--polli-color-text-strong:oklch(26.6% .065 152.934);--polli-color-text-soft:oklch(52.7% .154 150.069);--polli-color-text-muted:oklch(62% .038 152.535);--polli-color-border:oklch(87.1% .15 154.449);--polli-color-bg-subtle:oklch(98.2% .018 155.826/.7);--polli-color-bg-active:oklch(92.5% .084 155.995);--polli-color-bg-hover:oklch(87.1% .15 154.449);--polli-color-bg-pale:oklch(96.2% .044 156.743);--polli-color-scrollbar-thumb:oklch(79.2% .209 151.711/.7)}:root{--polli-color-danger-bg-light:oklch(93.5% .045 25);--polli-color-danger-text:oklch(48% .18 25);--polli-color-danger-border:oklch(78% .115 25);--polli-color-success-bg-light:oklch(94% .055 150);--polli-color-success-text:oklch(38% .12 150);--polli-color-success-border:oklch(78% .13 150);--polli-color-warning-bg-light:oklch(94% .06 75);--polli-color-warning-text:oklch(45% .13 65);--polli-color-warning-border:oklch(82% .14 75)}.polli-scrollbar-subtle{scrollbar-width:thin;scrollbar-color:transparent transparent}.polli-scrollbar-subtle::-webkit-scrollbar{width:12px;height:12px}.polli-scrollbar-subtle::-webkit-scrollbar-track{background:0 0}.polli-scrollbar-subtle::-webkit-scrollbar-thumb{background-color:#0000;background-clip:content-box;border:3px solid #0000;border-radius:9999px;transition:background-color .16s}.polli-scrollbar-subtle[data-scrollbar-active=true]{scrollbar-color:var(--polli-color-scrollbar-thumb) transparent}.polli-scrollbar-subtle[data-scrollbar-active=true]::-webkit-scrollbar-thumb{background-color:var(--polli-color-scrollbar-thumb)}.polli-input-number-clean::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.polli-input-number-clean::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.polli-input-number-clean{-moz-appearance:textfield}.polli-slider{--polli-slider-thumb-shadow-fallback:var(--polli-color-text-strong)}@supports (color:color-mix(in lab, red, red)){.polli-slider{--polli-slider-thumb-shadow-fallback:color-mix(in oklab, var(--polli-color-text-strong) 35%, transparent)}}.polli-slider{--polli-slider-progress-value:var(--polli-slider-progress,0%);--polli-slider-fill-value:var(--polli-slider-fill,var(--polli-color-bg-active));--polli-slider-track-value:var(--polli-slider-track,var(--polli-color-bg-pale));--polli-slider-thumb-border-value:var(--polli-slider-thumb-border,var(--polli-color-text-strong));--polli-slider-thumb-shadow-value:var(--polli-slider-thumb-shadow,var(--polli-slider-thumb-shadow-fallback));cursor:grab;appearance:none;background:linear-gradient(to right, var(--polli-slider-fill-value) 0%, var(--polli-slider-fill-value) var(--polli-slider-progress-value), var(--polli-slider-track-value) var(--polli-slider-progress-value), var(--polli-slider-track-value) 100%);border-radius:9999px;outline:none;width:100%;height:.5rem;transition:opacity .15s,filter .15s}.polli-slider:active{cursor:grabbing}.polli-slider:disabled{cursor:not-allowed;opacity:.6}.polli-slider:focus-visible{box-shadow:0 0 0 2px var(--polli-slider-fill-value), 0 0 0 4px var(--polli-color-surface-white)}.polli-slider::-webkit-slider-runnable-track{background:0 0;border-radius:9999px;height:.5rem}.polli-slider::-moz-range-track{background:0 0;border-radius:9999px;height:.5rem}.polli-slider::-webkit-slider-thumb{appearance:none;border:3px solid var(--polli-slider-thumb-border-value);width:22px;height:22px;box-shadow:0 2px 6px var(--polli-slider-thumb-shadow-value);background:#fff;border-radius:9999px;margin-top:-7px;transition:transform .15s}.polli-slider::-moz-range-thumb{border:3px solid var(--polli-slider-thumb-border-value);width:22px;height:22px;box-shadow:0 2px 6px var(--polli-slider-thumb-shadow-value);background:#fff;border-radius:9999px;transition:transform .15s}.polli-slider:hover::-webkit-slider-thumb{transform:scale(1.1)}.polli-slider:active::-webkit-slider-thumb{transform:scale(1.05)}@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-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{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-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}
|
|
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-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction: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-duration:initial;--tw-ease:initial;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--polli-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--polli-color-gray-100:oklch(96.7% .003 264.542);--polli-color-gray-200:oklch(92.8% .006 264.531);--polli-color-gray-300:oklch(87.2% .01 258.338);--polli-color-gray-400:oklch(70.7% .022 261.325);--polli-color-gray-700:oklch(37.3% .034 259.733);--polli-color-gray-800:oklch(27.8% .033 256.848);--polli-color-gray-900:oklch(21% .034 264.665);--polli-color-gray-950:oklch(13% .028 261.692);--polli-color-white:#fff;--polli-spacing:.25rem;--polli-container-md:28rem;--polli-container-xl:36rem;--polli-container-2xl:42rem;--polli-text-xs:.75rem;--polli-text-xs--line-height:calc(1 / .75);--polli-text-sm:.875rem;--polli-text-sm--line-height:calc(1.25 / .875);--polli-text-base:16px;--polli-text-base--line-height:calc(1.5 / 1);--polli-text-xl:1.25rem;--polli-text-xl--line-height:calc(1.75 / 1.25);--polli-text-2xl:1.5rem;--polli-text-2xl--line-height:calc(2 / 1.5);--polli-text-4xl:2.25rem;--polli-text-4xl--line-height:calc(2.5 / 2.25);--polli-font-weight-medium:500;--polli-font-weight-semibold:600;--polli-font-weight-bold:700;--polli-tracking-tight:-.025em;--polli-tracking-wide:.025em;--polli-leading-tight:1.25;--polli-leading-normal:1.5;--polli-leading-relaxed:1.625;--polli-radius-sm:.25rem;--polli-radius-md:.375rem;--polli-radius-lg:.5rem;--polli-radius-xl:.75rem;--polli-radius-2xl:1rem;--polli-ease-out:cubic-bezier(0, 0, .2, 1);--polli-default-transition-duration:.15s;--polli-default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--polli-font-heading:"LCT Mogi", ui-sans-serif, sans-serif;--polli-font-subheading:"Fraunces", ui-serif, serif;--polli-font-body:"Uncut Sans", ui-sans-serif, sans-serif;--polli-font-pixel:"Pixelify Sans", ui-monospace, monospace;--polli-text-micro:10px;--polli-color-surface-white:var(--polli-color-surface-white);--polli-color-paid-pale:var(--polli-color-paid-pale);--polli-color-paid-soft:var(--polli-color-paid-soft);--polli-color-paid-deep:var(--polli-color-paid-deep);--polli-color-tier-pale:var(--polli-color-tier-pale);--polli-color-tier-soft:var(--polli-color-tier-soft);--polli-color-tier-deep:var(--polli-color-tier-deep)}}@layer base,components;@layer utilities{.polli\:pointer-events-none{pointer-events:none}.polli\:invisible{visibility:hidden}.polli\:visible{visibility:visible}.polli\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.polli\:absolute{position:absolute}.polli\:fixed{position:fixed}.polli\:relative{position:relative}.polli\:inset-0{inset:calc(var(--polli-spacing) * 0)}.polli\:-top-2{top:calc(var(--polli-spacing) * -2)}.polli\:-top-8{top:calc(var(--polli-spacing) * -8)}.polli\:top-4{top:calc(var(--polli-spacing) * 4)}.polli\:-right-2{right:calc(var(--polli-spacing) * -2)}.polli\:right-4{right:calc(var(--polli-spacing) * 4)}.polli\:left-1\/2{left:50%}.polli\:z-50{z-index:50}.polli\:z-\[100\]{z-index:100}.polli\:z-\[110\]{z-index:110}.polli\:m-0{margin:calc(var(--polli-spacing) * 0)}.polli\:my-4{margin-block:calc(var(--polli-spacing) * 4)}.polli\:my-6{margin-block:calc(var(--polli-spacing) * 6)}.polli\:my-auto{margin-block:auto}.polli\:mt-0{margin-top:calc(var(--polli-spacing) * 0)}.polli\:mt-1{margin-top:calc(var(--polli-spacing) * 1)}.polli\:mt-1\.5{margin-top:calc(var(--polli-spacing) * 1.5)}.polli\:mt-2{margin-top:calc(var(--polli-spacing) * 2)}.polli\:mt-6{margin-top:calc(var(--polli-spacing) * 6)}.polli\:mt-8{margin-top:calc(var(--polli-spacing) * 8)}.polli\:mb-1{margin-bottom:calc(var(--polli-spacing) * 1)}.polli\:mb-2{margin-bottom:calc(var(--polli-spacing) * 2)}.polli\:mb-3{margin-bottom:calc(var(--polli-spacing) * 3)}.polli\:mb-5{margin-bottom:calc(var(--polli-spacing) * 5)}.polli\:ml-1{margin-left:calc(var(--polli-spacing) * 1)}.polli\:box-border{box-sizing:border-box}.polli\:block{display:block}.polli\:contents{display:contents}.polli\:flex{display:flex}.polli\:grid{display:grid}.polli\:inline-block{display:inline-block}.polli\:inline-flex{display:inline-flex}.polli\:aspect-square{aspect-ratio:1}.polli\:h-2{height:calc(var(--polli-spacing) * 2)}.polli\:h-2\.5{height:calc(var(--polli-spacing) * 2.5)}.polli\:h-3{height:calc(var(--polli-spacing) * 3)}.polli\:h-3\.5{height:calc(var(--polli-spacing) * 3.5)}.polli\:h-4{height:calc(var(--polli-spacing) * 4)}.polli\:h-5{height:calc(var(--polli-spacing) * 5)}.polli\:h-6{height:calc(var(--polli-spacing) * 6)}.polli\:h-7{height:calc(var(--polli-spacing) * 7)}.polli\:h-8{height:calc(var(--polli-spacing) * 8)}.polli\:h-9{height:calc(var(--polli-spacing) * 9)}.polli\:h-12{height:calc(var(--polli-spacing) * 12)}.polli\:h-16{height:calc(var(--polli-spacing) * 16)}.polli\:h-dvh{height:100dvh}.polli\:h-full{height:100%}.polli\:max-h-64{max-height:calc(var(--polli-spacing) * 64)}.polli\:min-h-8{min-height:calc(var(--polli-spacing) * 8)}.polli\:min-h-20{min-height:calc(var(--polli-spacing) * 20)}.polli\:w-2{width:calc(var(--polli-spacing) * 2)}.polli\:w-2\.5{width:calc(var(--polli-spacing) * 2.5)}.polli\:w-3{width:calc(var(--polli-spacing) * 3)}.polli\:w-3\.5{width:calc(var(--polli-spacing) * 3.5)}.polli\:w-4{width:calc(var(--polli-spacing) * 4)}.polli\:w-5{width:calc(var(--polli-spacing) * 5)}.polli\:w-6{width:calc(var(--polli-spacing) * 6)}.polli\:w-8{width:calc(var(--polli-spacing) * 8)}.polli\:w-9{width:calc(var(--polli-spacing) * 9)}.polli\:w-12{width:calc(var(--polli-spacing) * 12)}.polli\:w-16{width:calc(var(--polli-spacing) * 16)}.polli\:w-64{width:calc(var(--polli-spacing) * 64)}.polli\:w-\[304px\]{width:304px}.polli\:w-\[min\(24rem\,calc\(100vw-2rem\)\)\]{width:min(24rem,100vw - 2rem)}.polli\:w-full{width:100%}.polli\:w-max{width:max-content}.polli\:max-w-2xl{max-width:var(--polli-container-2xl)}.polli\:max-w-16{max-width:calc(var(--polli-spacing) * 16)}.polli\:max-w-32{max-width:calc(var(--polli-spacing) * 32)}.polli\:max-w-full{max-width:100%}.polli\:max-w-md{max-width:var(--polli-container-md)}.polli\:max-w-xl{max-width:var(--polli-container-xl)}.polli\:min-w-0{min-width:calc(var(--polli-spacing) * 0)}.polli\:min-w-64{min-width:calc(var(--polli-spacing) * 64)}.polli\:min-w-\[140px\]{min-width:140px}.polli\:min-w-\[150px\]{min-width:150px}.polli\:min-w-\[320px\]{min-width:320px}.polli\:flex-1{flex:1}.polli\:flex-shrink-0,.polli\:shrink-0{flex-shrink:0}.polli\:border-collapse{border-collapse:collapse}.polli\:-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.polli\:translate-x-1{--tw-translate-x:calc(var(--polli-spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.polli\:translate-x-6{--tw-translate-x:calc(var(--polli-spacing) * 6);translate:var(--tw-translate-x) var(--tw-translate-y)}.polli\:rotate-180{rotate:180deg}.polli\:cursor-help{cursor:help}.polli\:cursor-not-allowed{cursor:not-allowed}.polli\:cursor-pointer{cursor:pointer}.polli\:resize-y{resize:vertical}.polli\:scroll-mt-10{scroll-margin-top:calc(var(--polli-spacing) * 10)}.polli\:list-decimal{list-style-type:decimal}.polli\:list-disc{list-style-type:disc}.polli\:list-none{list-style-type:none}.polli\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.polli\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.polli\:flex-col{flex-direction:column}.polli\:flex-nowrap{flex-wrap:nowrap}.polli\:flex-wrap{flex-wrap:wrap}.polli\:items-center{align-items:center}.polli\:items-start{align-items:flex-start}.polli\:justify-between{justify-content:space-between}.polli\:justify-center{justify-content:center}.polli\:justify-end{justify-content:flex-end}.polli\:justify-start{justify-content:flex-start}.polli\:gap-1{gap:calc(var(--polli-spacing) * 1)}.polli\:gap-1\.5{gap:calc(var(--polli-spacing) * 1.5)}.polli\:gap-2{gap:calc(var(--polli-spacing) * 2)}.polli\:gap-3{gap:calc(var(--polli-spacing) * 3)}.polli\:gap-4{gap:calc(var(--polli-spacing) * 4)}.polli\:gap-5{gap:calc(var(--polli-spacing) * 5)}:where(.polli\:divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.polli\:divide-theme-border\/65>:not(:last-child)){border-color:var(--polli-color-border)}@supports (color:color-mix(in lab, red, red)){:where(.polli\:divide-theme-border\/65>:not(:last-child)){border-color:color-mix(in oklab, var(--polli-color-border) 65%, transparent)}}.polli\:self-center{align-self:center}.polli\:self-start{align-self:flex-start}.polli\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.polli\:overflow-hidden{overflow:hidden}.polli\:overflow-x-auto{overflow-x:auto}.polli\:overflow-x-hidden{overflow-x:hidden}.polli\:overflow-y-auto{overflow-y:auto}.polli\:overflow-y-hidden{overflow-y:hidden}.polli\:rounded{border-radius:.25rem}.polli\:rounded-2xl{border-radius:var(--polli-radius-2xl)}.polli\:rounded-full{border-radius:3.40282e38px}.polli\:rounded-lg{border-radius:var(--polli-radius-lg)}.polli\:rounded-md{border-radius:var(--polli-radius-md)}.polli\:rounded-sm{border-radius:var(--polli-radius-sm)}.polli\:rounded-xl{border-radius:var(--polli-radius-xl)}.polli\:rounded-t-lg{border-top-left-radius:var(--polli-radius-lg);border-top-right-radius:var(--polli-radius-lg)}.polli\:border{border-style:var(--tw-border-style);border-width:1px}.polli\:border-2{border-style:var(--tw-border-style);border-width:2px}.polli\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.polli\:border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.polli\:border-dashed{--tw-border-style:dashed;border-style:dashed}.polli\:border-gray-400\/70{border-color:var(--polli-color-gray-400)}@supports (color:color-mix(in lab, red, red)){.polli\:border-gray-400\/70{border-color:color-mix(in oklab, var(--polli-color-gray-400) 70%, transparent)}}.polli\:border-intent-danger-border{border-color:var(--polli-color-danger-border)}.polli\:border-intent-success-border{border-color:var(--polli-color-success-border)}.polli\:border-intent-warning-border{border-color:var(--polli-color-warning-border)}.polli\:border-theme-border{border-color:var(--polli-color-border)}.polli\:border-transparent{border-color:#0000}.polli\:bg-current{background-color:currentColor}.polli\:bg-gray-100\/80{background-color:var(--polli-color-gray-100)}@supports (color:color-mix(in lab, red, red)){.polli\:bg-gray-100\/80{background-color:color-mix(in oklab, var(--polli-color-gray-100) 80%, transparent)}}.polli\:bg-gray-200{background-color:var(--polli-color-gray-200)}.polli\:bg-gray-950\/50{background-color:var(--polli-color-gray-950)}@supports (color:color-mix(in lab, red, red)){.polli\:bg-gray-950\/50{background-color:color-mix(in oklab, var(--polli-color-gray-950) 50%, transparent)}}.polli\:bg-intent-alpha-bg-light{background-color:var(--polli-color-alpha-bg-light)}.polli\:bg-intent-danger-bg-light,.polli\:bg-intent-danger-bg-light\/65{background-color:var(--polli-color-danger-bg-light)}@supports (color:color-mix(in lab, red, red)){.polli\:bg-intent-danger-bg-light\/65{background-color:color-mix(in oklab, var(--polli-color-danger-bg-light) 65%, transparent)}}.polli\:bg-intent-news-bg-light{background-color:var(--polli-color-news-bg-light)}.polli\:bg-intent-success-bg-light,.polli\:bg-intent-success-bg-light\/55{background-color:var(--polli-color-success-bg-light)}@supports (color:color-mix(in lab, red, red)){.polli\:bg-intent-success-bg-light\/55{background-color:color-mix(in oklab, var(--polli-color-success-bg-light) 55%, transparent)}}.polli\:bg-intent-warning-bg-light,.polli\:bg-intent-warning-bg-light\/65{background-color:var(--polli-color-warning-bg-light)}@supports (color:color-mix(in lab, red, red)){.polli\:bg-intent-warning-bg-light\/65{background-color:color-mix(in oklab, var(--polli-color-warning-bg-light) 65%, transparent)}}.polli\:bg-surface-white{background-color:var(--polli-color-surface-white)}.polli\:bg-theme-bg-active{background-color:var(--polli-color-bg-active)}.polli\:bg-theme-bg-hover{background-color:var(--polli-color-bg-hover)}.polli\:bg-theme-bg-pale{background-color:var(--polli-color-bg-pale)}.polli\:bg-theme-bg-subtle{background-color:var(--polli-color-bg-subtle)}.polli\:bg-transparent{background-color:#0000}.polli\:bg-white,.polli\:bg-white\/80{background-color:var(--polli-color-white)}@supports (color:color-mix(in lab, red, red)){.polli\:bg-white\/80{background-color:color-mix(in oklab, var(--polli-color-white) 80%, transparent)}}.polli\:p-0{padding:calc(var(--polli-spacing) * 0)}.polli\:p-1{padding:calc(var(--polli-spacing) * 1)}.polli\:p-2{padding:calc(var(--polli-spacing) * 2)}.polli\:p-3{padding:calc(var(--polli-spacing) * 3)}.polli\:p-4{padding:calc(var(--polli-spacing) * 4)}.polli\:p-5{padding:calc(var(--polli-spacing) * 5)}.polli\:p-6{padding:calc(var(--polli-spacing) * 6)}.polli\:px-0{padding-inline:calc(var(--polli-spacing) * 0)}.polli\:px-1{padding-inline:calc(var(--polli-spacing) * 1)}.polli\:px-2{padding-inline:calc(var(--polli-spacing) * 2)}.polli\:px-2\.5{padding-inline:calc(var(--polli-spacing) * 2.5)}.polli\:px-3{padding-inline:calc(var(--polli-spacing) * 3)}.polli\:px-4{padding-inline:calc(var(--polli-spacing) * 4)}.polli\:px-6{padding-inline:calc(var(--polli-spacing) * 6)}.polli\:px-8{padding-inline:calc(var(--polli-spacing) * 8)}.polli\:py-0{padding-block:calc(var(--polli-spacing) * 0)}.polli\:py-0\.5{padding-block:calc(var(--polli-spacing) * .5)}.polli\:py-1{padding-block:calc(var(--polli-spacing) * 1)}.polli\:py-1\.5{padding-block:calc(var(--polli-spacing) * 1.5)}.polli\:py-2{padding-block:calc(var(--polli-spacing) * 2)}.polli\:py-3{padding-block:calc(var(--polli-spacing) * 3)}.polli\:py-6{padding-block:calc(var(--polli-spacing) * 6)}.polli\:pt-0\.5{padding-top:calc(var(--polli-spacing) * .5)}.polli\:pt-1\.5{padding-top:calc(var(--polli-spacing) * 1.5)}.polli\:pt-2{padding-top:calc(var(--polli-spacing) * 2)}.polli\:pt-3{padding-top:calc(var(--polli-spacing) * 3)}.polli\:pt-6{padding-top:calc(var(--polli-spacing) * 6)}.polli\:pr-2{padding-right:calc(var(--polli-spacing) * 2)}.polli\:pr-3{padding-right:calc(var(--polli-spacing) * 3)}.polli\:pr-10{padding-right:calc(var(--polli-spacing) * 10)}.polli\:pb-1{padding-bottom:calc(var(--polli-spacing) * 1)}.polli\:pb-2{padding-bottom:calc(var(--polli-spacing) * 2)}.polli\:pb-3{padding-bottom:calc(var(--polli-spacing) * 3)}.polli\:pb-8{padding-bottom:calc(var(--polli-spacing) * 8)}.polli\:pl-1{padding-left:calc(var(--polli-spacing) * 1)}.polli\:pl-4{padding-left:calc(var(--polli-spacing) * 4)}.polli\:pl-5{padding-left:calc(var(--polli-spacing) * 5)}.polli\:pl-6{padding-left:calc(var(--polli-spacing) * 6)}.polli\:text-center{text-align:center}.polli\:text-left{text-align:left}.polli\:text-right{text-align:right}.polli\:align-middle{vertical-align:middle}.polli\:font-body{font-family:Uncut Sans,ui-sans-serif,sans-serif}.polli\:font-heading{font-family:LCT Mogi,ui-sans-serif,sans-serif}.polli\:font-mono{font-family:var(--polli-font-mono)}.polli\:font-pixel{font-family:Pixelify Sans,ui-monospace,monospace}.polli\:font-subheading{font-family:Fraunces,ui-serif,serif}.polli\:text-2xl{font-size:var(--polli-text-2xl);line-height:var(--tw-leading,var(--polli-text-2xl--line-height))}.polli\:text-4xl{font-size:var(--polli-text-4xl);line-height:var(--tw-leading,var(--polli-text-4xl--line-height))}.polli\:text-base{font-size:16px;line-height:var(--tw-leading,var(--polli-text-base--line-height))}.polli\:text-sm{font-size:var(--polli-text-sm);line-height:var(--tw-leading,var(--polli-text-sm--line-height))}.polli\:text-xl{font-size:var(--polli-text-xl);line-height:var(--tw-leading,var(--polli-text-xl--line-height))}.polli\:text-xs{font-size:var(--polli-text-xs);line-height:var(--tw-leading,var(--polli-text-xs--line-height))}.polli\:text-micro{font-size:10px}.polli\:leading-none{--tw-leading:1;line-height:1}.polli\:leading-normal{--tw-leading:var(--polli-leading-normal);line-height:var(--polli-leading-normal)}.polli\:leading-relaxed{--tw-leading:var(--polli-leading-relaxed);line-height:var(--polli-leading-relaxed)}.polli\:leading-tight{--tw-leading:var(--polli-leading-tight);line-height:var(--polli-leading-tight)}.polli\:font-bold{--tw-font-weight:var(--polli-font-weight-bold);font-weight:var(--polli-font-weight-bold)}.polli\:font-medium{--tw-font-weight:var(--polli-font-weight-medium);font-weight:var(--polli-font-weight-medium)}.polli\:font-semibold{--tw-font-weight:var(--polli-font-weight-semibold);font-weight:var(--polli-font-weight-semibold)}.polli\:tracking-tight{--tw-tracking:var(--polli-tracking-tight);letter-spacing:var(--polli-tracking-tight)}.polli\:tracking-wide{--tw-tracking:var(--polli-tracking-wide);letter-spacing:var(--polli-tracking-wide)}.polli\:break-words{overflow-wrap:break-word}.polli\:whitespace-nowrap{white-space:nowrap}.polli\:whitespace-pre-line{white-space:pre-line}.polli\:text-gray-300{color:var(--polli-color-gray-300)}.polli\:text-gray-400{color:var(--polli-color-gray-400)}.polli\:text-gray-700{color:var(--polli-color-gray-700)}.polli\:text-gray-800{color:var(--polli-color-gray-800)}.polli\:text-gray-900{color:var(--polli-color-gray-900)}.polli\:text-gray-950{color:var(--polli-color-gray-950)}.polli\:text-inherit{color:inherit}.polli\:text-intent-alpha-text{color:var(--polli-color-alpha-text)}.polli\:text-intent-danger-text{color:var(--polli-color-danger-text)}.polli\:text-intent-news-text{color:var(--polli-color-news-text)}.polli\:text-intent-success-text{color:var(--polli-color-success-text)}.polli\:text-intent-warning-text{color:var(--polli-color-warning-text)}.polli\:text-theme-text-base{color:var(--polli-color-text-base)}.polli\:text-theme-text-muted{color:var(--polli-color-text-muted)}.polli\:text-theme-text-soft,.polli\:text-theme-text-soft\/60{color:var(--polli-color-text-soft)}@supports (color:color-mix(in lab, red, red)){.polli\:text-theme-text-soft\/60{color:color-mix(in oklab, var(--polli-color-text-soft) 60%, transparent)}}.polli\:text-theme-text-strong{color:var(--polli-color-text-strong)}.polli\:uppercase{text-transform:uppercase}.polli\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.polli\:no-underline{text-decoration-line:none}.polli\:underline{text-decoration-line:underline}.polli\:decoration-theme-border{-webkit-text-decoration-color:var(--polli-color-border);-webkit-text-decoration-color:var(--polli-color-border);text-decoration-color:var(--polli-color-border)}.polli\:decoration-2{text-decoration-thickness:2px}.polli\:underline-offset-2{text-underline-offset:2px}.polli\:underline-offset-3{text-underline-offset:3px}.polli\:opacity-0{opacity:0}.polli\:opacity-30{opacity:.3}.polli\:opacity-50{opacity:.5}.polli\:opacity-60{opacity:.6}.polli\:opacity-65{opacity:.65}.polli\:opacity-100{opacity:1}.polli\:shadow-\[inset_0_0_0_1px_rgba\(0\,0\,0\,0\.08\)\]{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.polli\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px 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)}.polli\: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)}.polli\:ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.polli\:ring-theme-border{--tw-ring-color:var(--polli-color-border)}.polli\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--polli-default-transition-timing-function));transition-duration:var(--tw-duration,var(--polli-default-transition-duration))}.polli\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--polli-default-transition-timing-function));transition-duration:var(--tw-duration,var(--polli-default-transition-duration))}.polli\: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(--polli-default-transition-timing-function));transition-duration:var(--tw-duration,var(--polli-default-transition-duration))}.polli\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--polli-default-transition-timing-function));transition-duration:var(--tw-duration,var(--polli-default-transition-duration))}.polli\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--polli-default-transition-timing-function));transition-duration:var(--tw-duration,var(--polli-default-transition-duration))}.polli\:duration-150{--tw-duration:.15s;transition-duration:.15s}.polli\:duration-200{--tw-duration:.2s;transition-duration:.2s}.polli\:ease-out{--tw-ease:var(--polli-ease-out);transition-timing-function:var(--polli-ease-out)}.polli\:outline-none{--tw-outline-style:none;outline-style:none}.polli\:select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.polli\:group-hover\:-translate-y-0\.5:is(:where(.polli\:group):hover *){--tw-translate-y:calc(var(--polli-spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.polli\:group-hover\:bg-white\/95:is(:where(.polli\:group):hover *){background-color:var(--polli-color-white)}@supports (color:color-mix(in lab, red, red)){.polli\:group-hover\:bg-white\/95:is(:where(.polli\:group):hover *){background-color:color-mix(in oklab, var(--polli-color-white) 95%, transparent)}}.polli\:group-hover\:opacity-100:is(:where(.polli\:group):hover *){opacity:1}}.polli\:group-focus-visible\:ring-2:is(:where(.polli\:group):focus-visible *){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.polli\:group-focus-visible\:ring-theme-border:is(:where(.polli\:group):focus-visible *){--tw-ring-color:var(--polli-color-border)}.polli\:marker\:text-theme-text-muted ::marker{color:var(--polli-color-text-muted)}.polli\:marker\:text-theme-text-muted::marker{color:var(--polli-color-text-muted)}.polli\:marker\:text-theme-text-muted ::-webkit-details-marker{color:var(--polli-color-text-muted)}.polli\:marker\:text-theme-text-muted::-webkit-details-marker{color:var(--polli-color-text-muted)}.polli\:last\:mb-0:last-child{margin-bottom:calc(var(--polli-spacing) * 0)}@media (hover:hover){.polli\:hover\:bg-intent-danger-bg-hover:hover{background-color:var(--polli-color-danger-bg-hover)}.polli\:hover\:bg-theme-bg-active:hover{background-color:var(--polli-color-bg-active)}.polli\:hover\:bg-theme-bg-hover:hover{background-color:var(--polli-color-bg-hover)}.polli\:hover\:bg-theme-bg-pale:hover{background-color:var(--polli-color-bg-pale)}.polli\:hover\:bg-theme-bg-subtle:hover{background-color:var(--polli-color-bg-subtle)}.polli\:hover\:bg-transparent:hover{background-color:#0000}.polli\:hover\:bg-white\/60:hover{background-color:var(--polli-color-white)}@supports (color:color-mix(in lab, red, red)){.polli\:hover\:bg-white\/60:hover{background-color:color-mix(in oklab, var(--polli-color-white) 60%, transparent)}}.polli\:hover\:text-gray-950:hover{color:var(--polli-color-gray-950)}.polli\:hover\:text-theme-text-soft:hover{color:var(--polli-color-text-soft)}.polli\:hover\:text-theme-text-strong:hover{color:var(--polli-color-text-strong)}.polli\:hover\:decoration-theme-text-soft:hover{-webkit-text-decoration-color:var(--polli-color-text-soft);-webkit-text-decoration-color:var(--polli-color-text-soft);text-decoration-color:var(--polli-color-text-soft)}.polli\:hover\:brightness-105:hover{--tw-brightness:brightness(105%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.polli\:hover\:filter:hover{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}}.polli\:focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.polli\:focus-visible\:bg-theme-bg-hover:focus-visible{background-color:var(--polli-color-bg-hover)}.polli\:focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.polli\:disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.polli\:disabled\:opacity-50:disabled{opacity:.5}.polli\:disabled\:opacity-60:disabled{opacity:.6}}@font-face{font-family:LCT Mogi;src:url(./fonts/lct-mogi-a.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Fraunces;src:url(./fonts/fraunces-soft-bold.woff2)format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Uncut Sans;src:url(./fonts/uncut-sans-variable.woff2)format("woff2-variations");font-weight:300 700;font-style:normal;font-display:swap}:root{--polli-font-heading:"LCT Mogi", ui-sans-serif, sans-serif;--polli-font-subheading:"Fraunces", ui-serif, serif;--polli-font-body:"Uncut Sans", ui-sans-serif, sans-serif;--polli-font-pixel:"Pixelify Sans", ui-monospace, monospace;--polli-text-micro:10px;--polli-text-base:16px;--polli-color-surface-white:oklch(100% 0 0/.8)}[data-theme=amber]{--polli-color-text-base:oklch(41.4% .112 45.904);--polli-color-text-strong:oklch(27.9% .077 45.635);--polli-color-text-soft:oklch(55.5% .163 48.998);--polli-color-text-muted:oklch(62% .045 45.904);--polli-color-border:oklch(87.9% .169 91.605);--polli-color-bg-subtle:oklch(98.7% .022 95.277/.7);--polli-color-bg-active:oklch(92.4% .12 95.746);--polli-color-bg-hover:oklch(87.9% .169 91.605);--polli-color-bg-pale:oklch(96.2% .059 95.617);--polli-color-scrollbar-thumb:oklch(82.8% .189 84.429/.7)}[data-theme=blue]{--polli-color-text-base:oklch(37.9% .146 265.522);--polli-color-text-strong:oklch(28.2% .091 267.935);--polli-color-text-soft:oklch(48.8% .243 264.376);--polli-color-text-muted:oklch(62% .058 265.522);--polli-color-border:oklch(80.9% .105 251.813);--polli-color-bg-subtle:oklch(97% .014 254.604/.7);--polli-color-bg-active:oklch(88.2% .059 254.128);--polli-color-bg-hover:oklch(80.9% .105 251.813);--polli-color-bg-pale:oklch(93.2% .032 255.585);--polli-color-scrollbar-thumb:oklch(70.7% .165 254.624/.7)}[data-theme=pink]{--polli-color-text-base:oklch(40.8% .153 2.432);--polli-color-text-strong:oklch(28.4% .109 3.907);--polli-color-text-soft:oklch(52.5% .223 3.958);--polli-color-text-muted:oklch(62% .061 2.432);--polli-color-border:oklch(82.3% .12 346.018);--polli-color-bg-subtle:oklch(97.1% .014 343.198/.7);--polli-color-bg-active:oklch(89.9% .061 343.231);--polli-color-bg-hover:oklch(82.3% .12 346.018);--polli-color-bg-pale:oklch(94.8% .028 342.258);--polli-color-scrollbar-thumb:oklch(71.8% .202 349.761/.7)}[data-theme=teal]{--polli-color-text-base:oklch(38.6% .063 188.416);--polli-color-text-strong:oklch(27.7% .046 192.524);--polli-color-text-soft:oklch(51.1% .096 186.391);--polli-color-text-muted:oklch(62% .025 188.416);--polli-color-border:oklch(85.5% .138 181.071);--polli-color-bg-subtle:oklch(98.4% .014 180.72/.7);--polli-color-bg-active:oklch(91% .096 180.426);--polli-color-bg-hover:oklch(85.5% .138 181.071);--polli-color-bg-pale:oklch(95.3% .051 180.801);--polli-color-scrollbar-thumb:oklch(70.4% .14 182.503/.7)}[data-theme=violet]{--polli-color-text-base:oklch(38% .189 293.745);--polli-color-text-strong:oklch(28.3% .141 291.089);--polli-color-text-soft:oklch(49.1% .27 292.581);--polli-color-text-muted:oklch(62% .076 293.745);--polli-color-border:oklch(81.1% .111 293.571);--polli-color-bg-subtle:oklch(96.9% .016 293.756/.7);--polli-color-bg-active:oklch(89.4% .057 293.283);--polli-color-bg-hover:oklch(81.1% .111 293.571);--polli-color-bg-pale:oklch(94.3% .029 294.588);--polli-color-scrollbar-thumb:oklch(70.2% .183 293.541/.7)}:root,[data-theme=green]{--polli-color-text-base:oklch(39.3% .095 152.535);--polli-color-text-strong:oklch(26.6% .065 152.934);--polli-color-text-soft:oklch(52.7% .154 150.069);--polli-color-text-muted:oklch(62% .038 152.535);--polli-color-border:oklch(87.1% .15 154.449);--polli-color-bg-subtle:oklch(98.2% .018 155.826/.7);--polli-color-bg-active:oklch(92.5% .084 155.995);--polli-color-bg-hover:oklch(87.1% .15 154.449);--polli-color-bg-pale:oklch(96.2% .044 156.743);--polli-color-scrollbar-thumb:oklch(79.2% .209 151.711/.7)}:root{--polli-color-danger-bg-light:oklch(93.5% .045 25);--polli-color-danger-bg-hover:oklch(88% .075 25);--polli-color-danger-text:oklch(48% .18 25);--polli-color-danger-border:oklch(78% .115 25);--polli-color-success-bg-light:oklch(94% .055 150);--polli-color-success-text:oklch(38% .12 150);--polli-color-success-border:oklch(78% .13 150);--polli-color-warning-bg-light:oklch(94% .06 75);--polli-color-warning-text:oklch(45% .13 65);--polli-color-warning-border:oklch(82% .14 75);--polli-color-news-bg-light:oklch(93.5% .06 158);--polli-color-news-text:oklch(46% .13 158);--polli-color-alpha-bg-light:oklch(93% .06 300);--polli-color-alpha-text:oklch(42% .18 300);--polli-color-paid-pale:oklch(93% .09 95.746);--polli-color-paid-soft:oklch(85% .16 95.746);--polli-color-paid-deep:#78350f;--polli-color-tier-pale:oklch(93% .06 55);--polli-color-tier-soft:oklch(83% .13 55);--polli-color-tier-deep:#7c3f1e}.polli-wallet-chip-paid{background-color:var(--polli-color-paid-pale);color:var(--polli-color-paid-deep)}.polli-wallet-chip-tier{background-color:var(--polli-color-tier-pale);color:var(--polli-color-tier-deep)}.polli-wallet-panel-paid{background-color:var(--polli-color-paid-pale)}@supports (color:color-mix(in lab, red, red)){.polli-wallet-panel-paid{background-color:color-mix(in oklab, var(--polli-color-paid-pale) 60%, transparent)}}.polli-wallet-panel-paid{color:var(--polli-color-paid-deep)}.polli-wallet-panel-tier{background-color:var(--polli-color-tier-pale)}@supports (color:color-mix(in lab, red, red)){.polli-wallet-panel-tier{background-color:color-mix(in oklab, var(--polli-color-tier-pale) 60%, transparent)}}.polli-wallet-panel-tier{color:var(--polli-color-tier-deep)}.polli-wallet-dot-paid{background-color:var(--polli-color-paid-soft)}.polli-wallet-dot-tier{background-color:var(--polli-color-tier-soft)}.polli-wallet-text-paid{color:var(--polli-color-paid-deep)}.polli-wallet-text-tier{color:var(--polli-color-tier-deep)}.polli-wallet-balance-value{font-size:2.25rem}@media (min-width:640px){.polli-wallet-balance-value{font-size:3rem}}.polli-scrollbar-subtle{scrollbar-width:thin;scrollbar-color:transparent transparent}.polli-scrollbar-subtle::-webkit-scrollbar{width:12px;height:12px}.polli-scrollbar-subtle::-webkit-scrollbar-track{background:0 0}.polli-scrollbar-subtle::-webkit-scrollbar-thumb{background-color:#0000;background-clip:content-box;border:3px solid #0000;border-radius:9999px;transition:background-color .16s}.polli-scrollbar-subtle[data-scrollbar-active=true]{scrollbar-color:var(--polli-color-scrollbar-thumb) transparent}.polli-scrollbar-subtle[data-scrollbar-active=true]::-webkit-scrollbar-thumb{background-color:var(--polli-color-scrollbar-thumb)}.polli-input-number-clean::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.polli-input-number-clean::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.polli-input-number-clean{-moz-appearance:textfield}.polli-input,.polli-textarea{border-color:var(--polli-color-border);box-shadow:none;outline:none}.polli-input:focus,.polli-input:focus-visible,.polli-textarea:focus,.polli-textarea:focus-visible{border-color:var(--polli-color-border);box-shadow:0 0 0 1px var(--polli-color-border);outline:none}.polli-input[data-error=true],.polli-textarea[data-error=true]{border-color:var(--polli-color-danger-border)}.polli-input[data-error=true]:focus,.polli-input[data-error=true]:focus-visible,.polli-textarea[data-error=true]:focus,.polli-textarea[data-error=true]:focus-visible{border-color:var(--polli-color-danger-border);box-shadow:0 0 0 1px var(--polli-color-danger-border)}.polli-textarea,.polli-textarea:focus{--polli-textarea-resizer-color:var(--polli-color-border);scrollbar-color:var(--polli-color-border) transparent}.polli-textarea::-webkit-resizer{background:linear-gradient(135deg, transparent 0 52%, var(--polli-textarea-resizer-color) 52% 58%, transparent 58% 100%), linear-gradient(135deg, transparent 0 66%, var(--polli-textarea-resizer-color) 66% 72%, transparent 72% 100%), linear-gradient(135deg, transparent 0 80%, var(--polli-textarea-resizer-color) 80% 86%, transparent 86% 100%)}.polli-control{outline:none}.polli-control:focus-visible{box-shadow:0 0 0 2px var(--polli-color-border);outline:none}.polli-control[data-intent=danger]:focus-visible{box-shadow:0 0 0 2px var(--polli-color-danger-border)}.polli-slider{--polli-slider-thumb-shadow-fallback:var(--polli-color-text-strong)}@supports (color:color-mix(in lab, red, red)){.polli-slider{--polli-slider-thumb-shadow-fallback:color-mix(in oklab, var(--polli-color-text-strong) 35%, transparent)}}.polli-slider{--polli-slider-progress-value:var(--polli-slider-progress,0%);--polli-slider-fill-value:var(--polli-slider-fill,var(--polli-color-bg-active));--polli-slider-track-value:var(--polli-slider-track,var(--polli-color-bg-pale));--polli-slider-thumb-border-value:var(--polli-slider-thumb-border,var(--polli-color-text-strong));--polli-slider-thumb-shadow-value:var(--polli-slider-thumb-shadow,var(--polli-slider-thumb-shadow-fallback));cursor:grab;appearance:none;background:linear-gradient(to right, var(--polli-slider-fill-value) 0%, var(--polli-slider-fill-value) var(--polli-slider-progress-value), var(--polli-slider-track-value) var(--polli-slider-progress-value), var(--polli-slider-track-value) 100%);border-radius:9999px;outline:none;width:100%;height:.5rem;transition:opacity .15s,filter .15s}.polli-slider:active{cursor:grabbing}.polli-slider:disabled{cursor:not-allowed;opacity:.6}.polli-slider:focus-visible{box-shadow:0 0 0 2px var(--polli-slider-fill-value), 0 0 0 4px var(--polli-color-surface-white)}.polli-slider::-webkit-slider-runnable-track{background:0 0;border-radius:9999px;height:.5rem}.polli-slider::-moz-range-track{background:0 0;border-radius:9999px;height:.5rem}.polli-slider::-webkit-slider-thumb{appearance:none;border:3px solid var(--polli-slider-thumb-border-value);width:22px;height:22px;box-shadow:0 2px 6px var(--polli-slider-thumb-shadow-value);background:#fff;border-radius:9999px;margin-top:-7px;transition:transform .15s}.polli-slider::-moz-range-thumb{border:3px solid var(--polli-slider-thumb-border-value);width:22px;height:22px;box-shadow:0 2px 6px var(--polli-slider-thumb-shadow-value);background:#fff;border-radius:9999px;transition:transform .15s}.polli-slider:hover::-webkit-slider-thumb{transform:scale(1.1)}.polli-slider:active::-webkit-slider-thumb{transform:scale(1.05)}@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-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{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-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}
|
package/dist/wallet/index.cjs
CHANGED
|
@@ -46,8 +46,8 @@ var chipSizes = {
|
|
|
46
46
|
lg: "polli:px-3 polli:py-1 polli:text-sm"
|
|
47
47
|
};
|
|
48
48
|
var intentClasses = {
|
|
49
|
-
news: "polli:bg-
|
|
50
|
-
alpha: "polli:bg-
|
|
49
|
+
news: "polli:bg-intent-news-bg-light polli:text-intent-news-text",
|
|
50
|
+
alpha: "polli:bg-intent-alpha-bg-light polli:text-intent-alpha-text",
|
|
51
51
|
neutral: "polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900",
|
|
52
52
|
success: "polli:border polli:border-intent-success-border polli:bg-intent-success-bg-light polli:text-intent-success-text",
|
|
53
53
|
warning: "polli:border polli:border-intent-warning-border polli:bg-intent-warning-bg-light polli:text-intent-warning-text",
|
|
@@ -163,7 +163,16 @@ var WalletBalanceCard = ({
|
|
|
163
163
|
children: [
|
|
164
164
|
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { className: "polli:flex polli:items-center polli:gap-2", children: [
|
|
165
165
|
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(WalletDot, { kind }),
|
|
166
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
166
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
167
|
+
"span",
|
|
168
|
+
{
|
|
169
|
+
className: cn(
|
|
170
|
+
"polli:text-sm polli:font-bold polli:uppercase polli:tracking-wide",
|
|
171
|
+
walletTextClasses[kind]
|
|
172
|
+
),
|
|
173
|
+
children: label
|
|
174
|
+
}
|
|
175
|
+
),
|
|
167
176
|
info
|
|
168
177
|
] }),
|
|
169
178
|
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
@@ -176,7 +185,7 @@ var WalletBalanceCard = ({
|
|
|
176
185
|
children: value
|
|
177
186
|
}
|
|
178
187
|
),
|
|
179
|
-
footer && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "polli:mt-1.5 polli:text-sm polli:font-bold polli:tabular-nums polli:text-
|
|
188
|
+
footer && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "polli:mt-1.5 polli:text-sm polli:font-bold polli:tabular-nums polli:text-intent-success-text", children: footer })
|
|
180
189
|
]
|
|
181
190
|
}
|
|
182
191
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/modules/wallet/index.ts","../../src/lib/cn.ts","../../src/primitives/Chip.tsx","../../src/modules/wallet/chips.tsx","../../src/modules/wallet/colors.ts","../../src/modules/wallet/format-pollen.ts","../../src/modules/wallet/wallet-display.tsx"],"sourcesContent":["export { PaidChip, TierChip, type WalletChipProps } from \"./chips.tsx\";\nexport {\n PAID_BALANCE_CHART_COLOR,\n TIER_BALANCE_CHART_COLOR,\n} from \"./colors.ts\";\nexport { formatPollen } from \"./format-pollen.ts\";\nexport {\n WalletBalanceCard,\n type WalletBalanceCardProps,\n WalletDot,\n type WalletDotProps,\n} from \"./wallet-display.tsx\";\n","import { clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({ prefix: \"polli\" });\n\n/** Internal class merge for polli:-prefixed package primitive classes. */\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(...inputs));\n}\n","import type { ComponentPropsWithoutRef, FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\n\n/** Semantic chip labels for status and metadata badges. */\ntype ChipIntent =\n | \"news\"\n | \"alpha\"\n | \"neutral\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nconst chipSizes = {\n sm: \"polli:px-2 polli:py-0.5 polli:text-xs\",\n md: \"polli:px-2.5 polli:py-0.5 polli:text-sm\",\n lg: \"polli:px-3 polli:py-1 polli:text-sm\",\n} as const;\n\nconst intentClasses: Record<ChipIntent, string> = {\n news: \"polli:bg-[oklch(0.935_0.06_158)] polli:text-[oklch(0.46_0.13_158)]\",\n alpha: \"polli:bg-[oklch(0.93_0.06_300)] polli:text-[oklch(0.42_0.18_300)]\",\n neutral:\n \"polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900\",\n success:\n \"polli:border polli:border-intent-success-border polli:bg-intent-success-bg-light polli:text-intent-success-text\",\n warning:\n \"polli:border polli:border-intent-warning-border polli:bg-intent-warning-bg-light polli:text-intent-warning-text\",\n danger: \"polli:border polli:border-intent-danger-border polli:bg-intent-danger-bg-light polli:text-intent-danger-text\",\n};\n\nexport type ChipProps = ComponentPropsWithoutRef<\"span\"> & {\n /** Override the cascade theme for this chip's subtree. */\n theme?: ThemeName;\n /** Semantic intent. Wins over `theme` when set. */\n intent?: ChipIntent;\n size?: keyof typeof chipSizes;\n};\n\n// Static, rectangular colored container. Round shapes are reserved for buttons.\n// Reads `bg-theme-bg-active` / `text-theme-text-strong` from the cascade unless\n// `intent` is set (semantic, theme-independent).\nexport const Chip: FC<ChipProps> = ({\n theme,\n intent,\n size = \"md\",\n className,\n children,\n ...rest\n}) => {\n const intentClass = intent\n ? intentClasses[intent]\n : \"polli:bg-theme-bg-active polli:text-theme-text-strong\";\n return (\n <span\n {...rest}\n data-theme={theme}\n className={cn(\n \"polli:inline-flex polli:shrink-0 polli:items-center polli:gap-1 polli:rounded-lg polli:font-medium polli:leading-normal\",\n chipSizes[size],\n intentClass,\n className,\n )}\n >\n {children}\n </span>\n );\n};\n","import type { FC } from \"react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip, type ChipProps } from \"../../primitives/Chip.tsx\";\n\nexport type WalletChipProps = Omit<ChipProps, \"intent\">;\n\nexport const PaidChip: FC<WalletChipProps> = ({\n className,\n children,\n ...props\n}) => (\n <Chip {...props} className={cn(\"polli-wallet-chip-paid\", className)}>\n {children}\n </Chip>\n);\n\nexport const TierChip: FC<WalletChipProps> = ({\n className,\n children,\n ...props\n}) => (\n <Chip {...props} className={cn(\"polli-wallet-chip-tier\", className)}>\n {children}\n </Chip>\n);\n","export const PAID_BALANCE_CHART_COLOR = \"var(--polli-color-paid-pale)\";\nexport const TIER_BALANCE_CHART_COLOR = \"var(--polli-color-tier-pale)\";\n","// 5-digit budget for pollen display. Integer takes its space, decimals fill\n// the remainder (capped at 4), floor toward -infinity, trailing zeros stripped.\n// Integers needing >=6 digits switch to compact (K/M/B, 3 sig figs).\n// Decimal point and minus sign do not count toward the budget.\n\nconst BUDGET = 5;\nconst MAX_DECIMALS = 4;\nconst COMPACT_THRESHOLD = 100_000;\n\nfunction floorTo(value: number, decimals: number): number {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\nfunction formatCompact(value: number): string {\n const abs = Math.abs(value);\n const sign = value < 0 ? \"-\" : \"\";\n const [unit, scale] =\n abs >= 1e9\n ? ([\"B\", 1e9] as const)\n : abs >= 1e6\n ? ([\"M\", 1e6] as const)\n : ([\"K\", 1e3] as const);\n const ratio = abs / scale;\n const intDigits = Math.max(1, Math.floor(Math.log10(ratio)) + 1);\n const decimals = Math.max(0, 3 - intDigits);\n const floored = floorTo(ratio, decimals);\n return `${sign}${Number(floored.toFixed(decimals)).toString()}${unit}`;\n}\n\nexport function formatPollen(value: number): string {\n if (!Number.isFinite(value) || value === 0) return \"0\";\n\n const abs = Math.abs(value);\n\n if (abs >= COMPACT_THRESHOLD) return formatCompact(value);\n\n const intDigits = abs >= 1 ? Math.floor(Math.log10(abs)) + 1 : 1;\n const decimals = Math.min(MAX_DECIMALS, Math.max(0, BUDGET - intDigits));\n const floored = floorTo(value, decimals);\n if (floored === 0) return \"0\";\n return Number(floored.toFixed(decimals)).toString();\n}\n","import type { FC, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn.ts\";\n\ntype WalletBalanceKind = \"paid\" | \"tier\";\n\nconst walletPanelClasses: Record<WalletBalanceKind, string> = {\n paid: \"polli-wallet-panel-paid\",\n tier: \"polli-wallet-panel-tier\",\n};\n\nconst walletTextClasses: Record<WalletBalanceKind, string> = {\n paid: \"polli-wallet-text-paid\",\n tier: \"polli-wallet-text-tier\",\n};\n\nexport type WalletDotProps = {\n kind: WalletBalanceKind;\n className?: string;\n};\n\nexport const WalletDot: FC<WalletDotProps> = ({ kind, className }) => (\n <span\n className={cn(\n \"polli:h-2 polli:w-2 polli:rounded-full\",\n kind === \"paid\" ? \"polli-wallet-dot-paid\" : \"polli-wallet-dot-tier\",\n className,\n )}\n aria-hidden=\"true\"\n />\n);\n\nexport type WalletBalanceCardProps = {\n kind: WalletBalanceKind;\n label: ReactNode;\n value: ReactNode;\n info?: ReactNode;\n footer?: ReactNode;\n className?: string;\n};\n\nexport const WalletBalanceCard: FC<WalletBalanceCardProps> = ({\n kind,\n label,\n value,\n info,\n footer,\n className,\n}) => (\n <div\n className={cn(\n \"polli:rounded-xl polli:p-4\",\n walletPanelClasses[kind],\n className,\n )}\n >\n <span className=\"polli:flex polli:items-center polli:gap-2\">\n <WalletDot kind={kind} />\n <span className=\"polli:text-sm polli:font-bold polli:uppercase polli:tracking-wide polli:text-amber-900\">\n {label}\n </span>\n {info}\n </span>\n <div\n className={cn(\n \"polli-wallet-balance-value polli:mt-1 polli:font-bold polli:leading-none polli:tracking-tight polli:tabular-nums\",\n walletTextClasses[kind],\n )}\n >\n {value}\n </div>\n {footer && (\n <div className=\"polli:mt-1.5 polli:text-sm polli:font-bold polli:tabular-nums polli:text-green-700\">\n {footer}\n </div>\n )}\n </div>\n);\n"],"mappings":"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","names":["import_jsx_runtime","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../../src/modules/wallet/index.ts","../../src/lib/cn.ts","../../src/primitives/Chip.tsx","../../src/modules/wallet/chips.tsx","../../src/modules/wallet/colors.ts","../../src/modules/wallet/format-pollen.ts","../../src/modules/wallet/wallet-display.tsx"],"sourcesContent":["export { PaidChip, TierChip, type WalletChipProps } from \"./chips.tsx\";\nexport {\n PAID_BALANCE_CHART_COLOR,\n TIER_BALANCE_CHART_COLOR,\n} from \"./colors.ts\";\nexport { formatPollen } from \"./format-pollen.ts\";\nexport {\n WalletBalanceCard,\n type WalletBalanceCardProps,\n WalletDot,\n type WalletDotProps,\n} from \"./wallet-display.tsx\";\n","import { clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({ prefix: \"polli\" });\n\n/** Internal class merge for polli:-prefixed package primitive classes. */\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(...inputs));\n}\n","import type { ComponentPropsWithoutRef, FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\n\n/** Semantic chip labels for status and metadata badges. */\ntype ChipIntent =\n | \"news\"\n | \"alpha\"\n | \"neutral\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nconst chipSizes = {\n sm: \"polli:px-2 polli:py-0.5 polli:text-xs\",\n md: \"polli:px-2.5 polli:py-0.5 polli:text-sm\",\n lg: \"polli:px-3 polli:py-1 polli:text-sm\",\n} as const;\n\nconst intentClasses: Record<ChipIntent, string> = {\n news: \"polli:bg-intent-news-bg-light polli:text-intent-news-text\",\n alpha: \"polli:bg-intent-alpha-bg-light polli:text-intent-alpha-text\",\n neutral:\n \"polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900\",\n success:\n \"polli:border polli:border-intent-success-border polli:bg-intent-success-bg-light polli:text-intent-success-text\",\n warning:\n \"polli:border polli:border-intent-warning-border polli:bg-intent-warning-bg-light polli:text-intent-warning-text\",\n danger: \"polli:border polli:border-intent-danger-border polli:bg-intent-danger-bg-light polli:text-intent-danger-text\",\n};\n\nexport type ChipProps = ComponentPropsWithoutRef<\"span\"> & {\n /** Override the cascade theme for this chip's subtree. */\n theme?: ThemeName;\n /** Semantic intent. Wins over `theme` when set. */\n intent?: ChipIntent;\n size?: keyof typeof chipSizes;\n};\n\n// Static, rectangular colored container. Round shapes are reserved for buttons.\n// Reads `bg-theme-bg-active` / `text-theme-text-strong` from the cascade unless\n// `intent` is set (semantic, theme-independent).\nexport const Chip: FC<ChipProps> = ({\n theme,\n intent,\n size = \"md\",\n className,\n children,\n ...rest\n}) => {\n const intentClass = intent\n ? intentClasses[intent]\n : \"polli:bg-theme-bg-active polli:text-theme-text-strong\";\n return (\n <span\n {...rest}\n data-theme={theme}\n className={cn(\n \"polli:inline-flex polli:shrink-0 polli:items-center polli:gap-1 polli:rounded-lg polli:font-medium polli:leading-normal\",\n chipSizes[size],\n intentClass,\n className,\n )}\n >\n {children}\n </span>\n );\n};\n","import type { FC } from \"react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip, type ChipProps } from \"../../primitives/Chip.tsx\";\n\nexport type WalletChipProps = Omit<ChipProps, \"intent\">;\n\nexport const PaidChip: FC<WalletChipProps> = ({\n className,\n children,\n ...props\n}) => (\n <Chip {...props} className={cn(\"polli-wallet-chip-paid\", className)}>\n {children}\n </Chip>\n);\n\nexport const TierChip: FC<WalletChipProps> = ({\n className,\n children,\n ...props\n}) => (\n <Chip {...props} className={cn(\"polli-wallet-chip-tier\", className)}>\n {children}\n </Chip>\n);\n","export const PAID_BALANCE_CHART_COLOR = \"var(--polli-color-paid-pale)\";\nexport const TIER_BALANCE_CHART_COLOR = \"var(--polli-color-tier-pale)\";\n","// 5-digit budget for pollen display. Integer takes its space, decimals fill\n// the remainder (capped at 4), floor toward -infinity, trailing zeros stripped.\n// Integers needing >=6 digits switch to compact (K/M/B, 3 sig figs).\n// Decimal point and minus sign do not count toward the budget.\n\nconst BUDGET = 5;\nconst MAX_DECIMALS = 4;\nconst COMPACT_THRESHOLD = 100_000;\n\nfunction floorTo(value: number, decimals: number): number {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\nfunction formatCompact(value: number): string {\n const abs = Math.abs(value);\n const sign = value < 0 ? \"-\" : \"\";\n const [unit, scale] =\n abs >= 1e9\n ? ([\"B\", 1e9] as const)\n : abs >= 1e6\n ? ([\"M\", 1e6] as const)\n : ([\"K\", 1e3] as const);\n const ratio = abs / scale;\n const intDigits = Math.max(1, Math.floor(Math.log10(ratio)) + 1);\n const decimals = Math.max(0, 3 - intDigits);\n const floored = floorTo(ratio, decimals);\n return `${sign}${Number(floored.toFixed(decimals)).toString()}${unit}`;\n}\n\nexport function formatPollen(value: number): string {\n if (!Number.isFinite(value) || value === 0) return \"0\";\n\n const abs = Math.abs(value);\n\n if (abs >= COMPACT_THRESHOLD) return formatCompact(value);\n\n const intDigits = abs >= 1 ? Math.floor(Math.log10(abs)) + 1 : 1;\n const decimals = Math.min(MAX_DECIMALS, Math.max(0, BUDGET - intDigits));\n const floored = floorTo(value, decimals);\n if (floored === 0) return \"0\";\n return Number(floored.toFixed(decimals)).toString();\n}\n","import type { FC, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn.ts\";\n\ntype WalletBalanceKind = \"paid\" | \"tier\";\n\nconst walletPanelClasses: Record<WalletBalanceKind, string> = {\n paid: \"polli-wallet-panel-paid\",\n tier: \"polli-wallet-panel-tier\",\n};\n\nconst walletTextClasses: Record<WalletBalanceKind, string> = {\n paid: \"polli-wallet-text-paid\",\n tier: \"polli-wallet-text-tier\",\n};\n\nexport type WalletDotProps = {\n kind: WalletBalanceKind;\n className?: string;\n};\n\nexport const WalletDot: FC<WalletDotProps> = ({ kind, className }) => (\n <span\n className={cn(\n \"polli:h-2 polli:w-2 polli:rounded-full\",\n kind === \"paid\" ? \"polli-wallet-dot-paid\" : \"polli-wallet-dot-tier\",\n className,\n )}\n aria-hidden=\"true\"\n />\n);\n\nexport type WalletBalanceCardProps = {\n kind: WalletBalanceKind;\n label: ReactNode;\n value: ReactNode;\n info?: ReactNode;\n footer?: ReactNode;\n className?: string;\n};\n\nexport const WalletBalanceCard: FC<WalletBalanceCardProps> = ({\n kind,\n label,\n value,\n info,\n footer,\n className,\n}) => (\n <div\n className={cn(\n \"polli:rounded-xl polli:p-4\",\n walletPanelClasses[kind],\n className,\n )}\n >\n <span className=\"polli:flex polli:items-center polli:gap-2\">\n <WalletDot kind={kind} />\n <span\n className={cn(\n \"polli:text-sm polli:font-bold polli:uppercase polli:tracking-wide\",\n walletTextClasses[kind],\n )}\n >\n {label}\n </span>\n {info}\n </span>\n <div\n className={cn(\n \"polli-wallet-balance-value polli:mt-1 polli:font-bold polli:leading-none polli:tracking-tight polli:tabular-nums\",\n walletTextClasses[kind],\n )}\n >\n {value}\n </div>\n {footer && (\n <div className=\"polli:mt-1.5 polli:text-sm polli:font-bold polli:tabular-nums polli:text-intent-success-text\">\n {footer}\n </div>\n )}\n </div>\n);\n"],"mappings":"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","names":["import_jsx_runtime","import_jsx_runtime"]}
|
package/dist/wallet/index.js
CHANGED
|
@@ -14,8 +14,8 @@ var chipSizes = {
|
|
|
14
14
|
lg: "polli:px-3 polli:py-1 polli:text-sm"
|
|
15
15
|
};
|
|
16
16
|
var intentClasses = {
|
|
17
|
-
news: "polli:bg-
|
|
18
|
-
alpha: "polli:bg-
|
|
17
|
+
news: "polli:bg-intent-news-bg-light polli:text-intent-news-text",
|
|
18
|
+
alpha: "polli:bg-intent-alpha-bg-light polli:text-intent-alpha-text",
|
|
19
19
|
neutral: "polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900",
|
|
20
20
|
success: "polli:border polli:border-intent-success-border polli:bg-intent-success-bg-light polli:text-intent-success-text",
|
|
21
21
|
warning: "polli:border polli:border-intent-warning-border polli:bg-intent-warning-bg-light polli:text-intent-warning-text",
|
|
@@ -131,7 +131,16 @@ var WalletBalanceCard = ({
|
|
|
131
131
|
children: [
|
|
132
132
|
/* @__PURE__ */ jsxs("span", { className: "polli:flex polli:items-center polli:gap-2", children: [
|
|
133
133
|
/* @__PURE__ */ jsx3(WalletDot, { kind }),
|
|
134
|
-
/* @__PURE__ */ jsx3(
|
|
134
|
+
/* @__PURE__ */ jsx3(
|
|
135
|
+
"span",
|
|
136
|
+
{
|
|
137
|
+
className: cn(
|
|
138
|
+
"polli:text-sm polli:font-bold polli:uppercase polli:tracking-wide",
|
|
139
|
+
walletTextClasses[kind]
|
|
140
|
+
),
|
|
141
|
+
children: label
|
|
142
|
+
}
|
|
143
|
+
),
|
|
135
144
|
info
|
|
136
145
|
] }),
|
|
137
146
|
/* @__PURE__ */ jsx3(
|
|
@@ -144,7 +153,7 @@ var WalletBalanceCard = ({
|
|
|
144
153
|
children: value
|
|
145
154
|
}
|
|
146
155
|
),
|
|
147
|
-
footer && /* @__PURE__ */ jsx3("div", { className: "polli:mt-1.5 polli:text-sm polli:font-bold polli:tabular-nums polli:text-
|
|
156
|
+
footer && /* @__PURE__ */ jsx3("div", { className: "polli:mt-1.5 polli:text-sm polli:font-bold polli:tabular-nums polli:text-intent-success-text", children: footer })
|
|
148
157
|
]
|
|
149
158
|
}
|
|
150
159
|
);
|
package/dist/wallet/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/cn.ts","../../src/primitives/Chip.tsx","../../src/modules/wallet/chips.tsx","../../src/modules/wallet/colors.ts","../../src/modules/wallet/format-pollen.ts","../../src/modules/wallet/wallet-display.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({ prefix: \"polli\" });\n\n/** Internal class merge for polli:-prefixed package primitive classes. */\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(...inputs));\n}\n","import type { ComponentPropsWithoutRef, FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\n\n/** Semantic chip labels for status and metadata badges. */\ntype ChipIntent =\n | \"news\"\n | \"alpha\"\n | \"neutral\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nconst chipSizes = {\n sm: \"polli:px-2 polli:py-0.5 polli:text-xs\",\n md: \"polli:px-2.5 polli:py-0.5 polli:text-sm\",\n lg: \"polli:px-3 polli:py-1 polli:text-sm\",\n} as const;\n\nconst intentClasses: Record<ChipIntent, string> = {\n news: \"polli:bg-[oklch(0.935_0.06_158)] polli:text-[oklch(0.46_0.13_158)]\",\n alpha: \"polli:bg-[oklch(0.93_0.06_300)] polli:text-[oklch(0.42_0.18_300)]\",\n neutral:\n \"polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900\",\n success:\n \"polli:border polli:border-intent-success-border polli:bg-intent-success-bg-light polli:text-intent-success-text\",\n warning:\n \"polli:border polli:border-intent-warning-border polli:bg-intent-warning-bg-light polli:text-intent-warning-text\",\n danger: \"polli:border polli:border-intent-danger-border polli:bg-intent-danger-bg-light polli:text-intent-danger-text\",\n};\n\nexport type ChipProps = ComponentPropsWithoutRef<\"span\"> & {\n /** Override the cascade theme for this chip's subtree. */\n theme?: ThemeName;\n /** Semantic intent. Wins over `theme` when set. */\n intent?: ChipIntent;\n size?: keyof typeof chipSizes;\n};\n\n// Static, rectangular colored container. Round shapes are reserved for buttons.\n// Reads `bg-theme-bg-active` / `text-theme-text-strong` from the cascade unless\n// `intent` is set (semantic, theme-independent).\nexport const Chip: FC<ChipProps> = ({\n theme,\n intent,\n size = \"md\",\n className,\n children,\n ...rest\n}) => {\n const intentClass = intent\n ? intentClasses[intent]\n : \"polli:bg-theme-bg-active polli:text-theme-text-strong\";\n return (\n <span\n {...rest}\n data-theme={theme}\n className={cn(\n \"polli:inline-flex polli:shrink-0 polli:items-center polli:gap-1 polli:rounded-lg polli:font-medium polli:leading-normal\",\n chipSizes[size],\n intentClass,\n className,\n )}\n >\n {children}\n </span>\n );\n};\n","import type { FC } from \"react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip, type ChipProps } from \"../../primitives/Chip.tsx\";\n\nexport type WalletChipProps = Omit<ChipProps, \"intent\">;\n\nexport const PaidChip: FC<WalletChipProps> = ({\n className,\n children,\n ...props\n}) => (\n <Chip {...props} className={cn(\"polli-wallet-chip-paid\", className)}>\n {children}\n </Chip>\n);\n\nexport const TierChip: FC<WalletChipProps> = ({\n className,\n children,\n ...props\n}) => (\n <Chip {...props} className={cn(\"polli-wallet-chip-tier\", className)}>\n {children}\n </Chip>\n);\n","export const PAID_BALANCE_CHART_COLOR = \"var(--polli-color-paid-pale)\";\nexport const TIER_BALANCE_CHART_COLOR = \"var(--polli-color-tier-pale)\";\n","// 5-digit budget for pollen display. Integer takes its space, decimals fill\n// the remainder (capped at 4), floor toward -infinity, trailing zeros stripped.\n// Integers needing >=6 digits switch to compact (K/M/B, 3 sig figs).\n// Decimal point and minus sign do not count toward the budget.\n\nconst BUDGET = 5;\nconst MAX_DECIMALS = 4;\nconst COMPACT_THRESHOLD = 100_000;\n\nfunction floorTo(value: number, decimals: number): number {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\nfunction formatCompact(value: number): string {\n const abs = Math.abs(value);\n const sign = value < 0 ? \"-\" : \"\";\n const [unit, scale] =\n abs >= 1e9\n ? ([\"B\", 1e9] as const)\n : abs >= 1e6\n ? ([\"M\", 1e6] as const)\n : ([\"K\", 1e3] as const);\n const ratio = abs / scale;\n const intDigits = Math.max(1, Math.floor(Math.log10(ratio)) + 1);\n const decimals = Math.max(0, 3 - intDigits);\n const floored = floorTo(ratio, decimals);\n return `${sign}${Number(floored.toFixed(decimals)).toString()}${unit}`;\n}\n\nexport function formatPollen(value: number): string {\n if (!Number.isFinite(value) || value === 0) return \"0\";\n\n const abs = Math.abs(value);\n\n if (abs >= COMPACT_THRESHOLD) return formatCompact(value);\n\n const intDigits = abs >= 1 ? Math.floor(Math.log10(abs)) + 1 : 1;\n const decimals = Math.min(MAX_DECIMALS, Math.max(0, BUDGET - intDigits));\n const floored = floorTo(value, decimals);\n if (floored === 0) return \"0\";\n return Number(floored.toFixed(decimals)).toString();\n}\n","import type { FC, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn.ts\";\n\ntype WalletBalanceKind = \"paid\" | \"tier\";\n\nconst walletPanelClasses: Record<WalletBalanceKind, string> = {\n paid: \"polli-wallet-panel-paid\",\n tier: \"polli-wallet-panel-tier\",\n};\n\nconst walletTextClasses: Record<WalletBalanceKind, string> = {\n paid: \"polli-wallet-text-paid\",\n tier: \"polli-wallet-text-tier\",\n};\n\nexport type WalletDotProps = {\n kind: WalletBalanceKind;\n className?: string;\n};\n\nexport const WalletDot: FC<WalletDotProps> = ({ kind, className }) => (\n <span\n className={cn(\n \"polli:h-2 polli:w-2 polli:rounded-full\",\n kind === \"paid\" ? \"polli-wallet-dot-paid\" : \"polli-wallet-dot-tier\",\n className,\n )}\n aria-hidden=\"true\"\n />\n);\n\nexport type WalletBalanceCardProps = {\n kind: WalletBalanceKind;\n label: ReactNode;\n value: ReactNode;\n info?: ReactNode;\n footer?: ReactNode;\n className?: string;\n};\n\nexport const WalletBalanceCard: FC<WalletBalanceCardProps> = ({\n kind,\n label,\n value,\n info,\n footer,\n className,\n}) => (\n <div\n className={cn(\n \"polli:rounded-xl polli:p-4\",\n walletPanelClasses[kind],\n className,\n )}\n >\n <span className=\"polli:flex polli:items-center polli:gap-2\">\n <WalletDot kind={kind} />\n <span className=\"polli:text-sm polli:font-bold polli:uppercase polli:tracking-wide polli:text-amber-900\">\n {label}\n </span>\n {info}\n </span>\n <div\n className={cn(\n \"polli-wallet-balance-value polli:mt-1 polli:font-bold polli:leading-none polli:tracking-tight polli:tabular-nums\",\n walletTextClasses[kind],\n )}\n >\n {value}\n </div>\n {footer && (\n <div className=\"polli:mt-1.5 polli:text-sm polli:font-bold polli:tabular-nums polli:text-green-700\">\n {footer}\n </div>\n )}\n </div>\n);\n"],"mappings":"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","names":["jsx","jsx"]}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/cn.ts","../../src/primitives/Chip.tsx","../../src/modules/wallet/chips.tsx","../../src/modules/wallet/colors.ts","../../src/modules/wallet/format-pollen.ts","../../src/modules/wallet/wallet-display.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({ prefix: \"polli\" });\n\n/** Internal class merge for polli:-prefixed package primitive classes. */\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(...inputs));\n}\n","import type { ComponentPropsWithoutRef, FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\n\n/** Semantic chip labels for status and metadata badges. */\ntype ChipIntent =\n | \"news\"\n | \"alpha\"\n | \"neutral\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nconst chipSizes = {\n sm: \"polli:px-2 polli:py-0.5 polli:text-xs\",\n md: \"polli:px-2.5 polli:py-0.5 polli:text-sm\",\n lg: \"polli:px-3 polli:py-1 polli:text-sm\",\n} as const;\n\nconst intentClasses: Record<ChipIntent, string> = {\n news: \"polli:bg-intent-news-bg-light polli:text-intent-news-text\",\n alpha: \"polli:bg-intent-alpha-bg-light polli:text-intent-alpha-text\",\n neutral:\n \"polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900\",\n success:\n \"polli:border polli:border-intent-success-border polli:bg-intent-success-bg-light polli:text-intent-success-text\",\n warning:\n \"polli:border polli:border-intent-warning-border polli:bg-intent-warning-bg-light polli:text-intent-warning-text\",\n danger: \"polli:border polli:border-intent-danger-border polli:bg-intent-danger-bg-light polli:text-intent-danger-text\",\n};\n\nexport type ChipProps = ComponentPropsWithoutRef<\"span\"> & {\n /** Override the cascade theme for this chip's subtree. */\n theme?: ThemeName;\n /** Semantic intent. Wins over `theme` when set. */\n intent?: ChipIntent;\n size?: keyof typeof chipSizes;\n};\n\n// Static, rectangular colored container. Round shapes are reserved for buttons.\n// Reads `bg-theme-bg-active` / `text-theme-text-strong` from the cascade unless\n// `intent` is set (semantic, theme-independent).\nexport const Chip: FC<ChipProps> = ({\n theme,\n intent,\n size = \"md\",\n className,\n children,\n ...rest\n}) => {\n const intentClass = intent\n ? intentClasses[intent]\n : \"polli:bg-theme-bg-active polli:text-theme-text-strong\";\n return (\n <span\n {...rest}\n data-theme={theme}\n className={cn(\n \"polli:inline-flex polli:shrink-0 polli:items-center polli:gap-1 polli:rounded-lg polli:font-medium polli:leading-normal\",\n chipSizes[size],\n intentClass,\n className,\n )}\n >\n {children}\n </span>\n );\n};\n","import type { FC } from \"react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip, type ChipProps } from \"../../primitives/Chip.tsx\";\n\nexport type WalletChipProps = Omit<ChipProps, \"intent\">;\n\nexport const PaidChip: FC<WalletChipProps> = ({\n className,\n children,\n ...props\n}) => (\n <Chip {...props} className={cn(\"polli-wallet-chip-paid\", className)}>\n {children}\n </Chip>\n);\n\nexport const TierChip: FC<WalletChipProps> = ({\n className,\n children,\n ...props\n}) => (\n <Chip {...props} className={cn(\"polli-wallet-chip-tier\", className)}>\n {children}\n </Chip>\n);\n","export const PAID_BALANCE_CHART_COLOR = \"var(--polli-color-paid-pale)\";\nexport const TIER_BALANCE_CHART_COLOR = \"var(--polli-color-tier-pale)\";\n","// 5-digit budget for pollen display. Integer takes its space, decimals fill\n// the remainder (capped at 4), floor toward -infinity, trailing zeros stripped.\n// Integers needing >=6 digits switch to compact (K/M/B, 3 sig figs).\n// Decimal point and minus sign do not count toward the budget.\n\nconst BUDGET = 5;\nconst MAX_DECIMALS = 4;\nconst COMPACT_THRESHOLD = 100_000;\n\nfunction floorTo(value: number, decimals: number): number {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\nfunction formatCompact(value: number): string {\n const abs = Math.abs(value);\n const sign = value < 0 ? \"-\" : \"\";\n const [unit, scale] =\n abs >= 1e9\n ? ([\"B\", 1e9] as const)\n : abs >= 1e6\n ? ([\"M\", 1e6] as const)\n : ([\"K\", 1e3] as const);\n const ratio = abs / scale;\n const intDigits = Math.max(1, Math.floor(Math.log10(ratio)) + 1);\n const decimals = Math.max(0, 3 - intDigits);\n const floored = floorTo(ratio, decimals);\n return `${sign}${Number(floored.toFixed(decimals)).toString()}${unit}`;\n}\n\nexport function formatPollen(value: number): string {\n if (!Number.isFinite(value) || value === 0) return \"0\";\n\n const abs = Math.abs(value);\n\n if (abs >= COMPACT_THRESHOLD) return formatCompact(value);\n\n const intDigits = abs >= 1 ? Math.floor(Math.log10(abs)) + 1 : 1;\n const decimals = Math.min(MAX_DECIMALS, Math.max(0, BUDGET - intDigits));\n const floored = floorTo(value, decimals);\n if (floored === 0) return \"0\";\n return Number(floored.toFixed(decimals)).toString();\n}\n","import type { FC, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn.ts\";\n\ntype WalletBalanceKind = \"paid\" | \"tier\";\n\nconst walletPanelClasses: Record<WalletBalanceKind, string> = {\n paid: \"polli-wallet-panel-paid\",\n tier: \"polli-wallet-panel-tier\",\n};\n\nconst walletTextClasses: Record<WalletBalanceKind, string> = {\n paid: \"polli-wallet-text-paid\",\n tier: \"polli-wallet-text-tier\",\n};\n\nexport type WalletDotProps = {\n kind: WalletBalanceKind;\n className?: string;\n};\n\nexport const WalletDot: FC<WalletDotProps> = ({ kind, className }) => (\n <span\n className={cn(\n \"polli:h-2 polli:w-2 polli:rounded-full\",\n kind === \"paid\" ? \"polli-wallet-dot-paid\" : \"polli-wallet-dot-tier\",\n className,\n )}\n aria-hidden=\"true\"\n />\n);\n\nexport type WalletBalanceCardProps = {\n kind: WalletBalanceKind;\n label: ReactNode;\n value: ReactNode;\n info?: ReactNode;\n footer?: ReactNode;\n className?: string;\n};\n\nexport const WalletBalanceCard: FC<WalletBalanceCardProps> = ({\n kind,\n label,\n value,\n info,\n footer,\n className,\n}) => (\n <div\n className={cn(\n \"polli:rounded-xl polli:p-4\",\n walletPanelClasses[kind],\n className,\n )}\n >\n <span className=\"polli:flex polli:items-center polli:gap-2\">\n <WalletDot kind={kind} />\n <span\n className={cn(\n \"polli:text-sm polli:font-bold polli:uppercase polli:tracking-wide\",\n walletTextClasses[kind],\n )}\n >\n {label}\n </span>\n {info}\n </span>\n <div\n className={cn(\n \"polli-wallet-balance-value polli:mt-1 polli:font-bold polli:leading-none polli:tracking-tight polli:tabular-nums\",\n walletTextClasses[kind],\n )}\n >\n {value}\n </div>\n {footer && (\n <div className=\"polli:mt-1.5 polli:text-sm polli:font-bold polli:tabular-nums polli:text-intent-success-text\">\n {footer}\n </div>\n )}\n </div>\n);\n"],"mappings":"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","names":["jsx","jsx"]}
|
package/dist/wallet/sdk.cjs
CHANGED
|
@@ -47,8 +47,8 @@ var chipSizes = {
|
|
|
47
47
|
lg: "polli:px-3 polli:py-1 polli:text-sm"
|
|
48
48
|
};
|
|
49
49
|
var intentClasses = {
|
|
50
|
-
news: "polli:bg-
|
|
51
|
-
alpha: "polli:bg-
|
|
50
|
+
news: "polli:bg-intent-news-bg-light polli:text-intent-news-text",
|
|
51
|
+
alpha: "polli:bg-intent-alpha-bg-light polli:text-intent-alpha-text",
|
|
52
52
|
neutral: "polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900",
|
|
53
53
|
success: "polli:border polli:border-intent-success-border polli:bg-intent-success-bg-light polli:text-intent-success-text",
|
|
54
54
|
warning: "polli:border polli:border-intent-warning-border polli:bg-intent-warning-bg-light polli:text-intent-warning-text",
|
package/dist/wallet/sdk.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/modules/wallet/sdk.ts","../../src/modules/wallet/Balance.tsx","../../src/lib/cn.ts","../../src/primitives/Chip.tsx","../../src/modules/wallet/format-pollen.ts","../../src/modules/wallet/KeyBudget.tsx","../../src/modules/wallet/KeyExpiry.tsx","../../src/modules/wallet/KeyModels.tsx","../../src/modules/wallet/KeyPrefix.tsx"],"sourcesContent":["export { Balance, type BalanceProps } from \"./Balance.tsx\";\nexport { KeyBudget, type KeyBudgetProps } from \"./KeyBudget.tsx\";\nexport { KeyExpiry, type KeyExpiryProps } from \"./KeyExpiry.tsx\";\nexport { KeyModels, type KeyModelsProps } from \"./KeyModels.tsx\";\nexport { KeyPrefix, type KeyPrefixProps } from \"./KeyPrefix.tsx\";\n","import { useAccountBalance, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\nimport { formatPollen } from \"./format-pollen.ts\";\n\nexport type BalanceProps = { className?: string };\n\n/** Renders the logged-in user's pollen balance. `null` until loaded. */\nexport function Balance({ className }: BalanceProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: balance } = useAccountBalance({ enabled: isLoggedIn });\n if (!isLoggedIn || balance == null) return null;\n return (\n <Chip\n data-polli=\"balance\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {formatPollen(balance.balance)} pollen\n </Chip>\n );\n}\n","import { clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({ prefix: \"polli\" });\n\n/** Internal class merge for polli:-prefixed package primitive classes. */\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(...inputs));\n}\n","import type { ComponentPropsWithoutRef, FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\n\n/** Semantic chip labels for status and metadata badges. */\ntype ChipIntent =\n | \"news\"\n | \"alpha\"\n | \"neutral\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nconst chipSizes = {\n sm: \"polli:px-2 polli:py-0.5 polli:text-xs\",\n md: \"polli:px-2.5 polli:py-0.5 polli:text-sm\",\n lg: \"polli:px-3 polli:py-1 polli:text-sm\",\n} as const;\n\nconst intentClasses: Record<ChipIntent, string> = {\n news: \"polli:bg-[oklch(0.935_0.06_158)] polli:text-[oklch(0.46_0.13_158)]\",\n alpha: \"polli:bg-[oklch(0.93_0.06_300)] polli:text-[oklch(0.42_0.18_300)]\",\n neutral:\n \"polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900\",\n success:\n \"polli:border polli:border-intent-success-border polli:bg-intent-success-bg-light polli:text-intent-success-text\",\n warning:\n \"polli:border polli:border-intent-warning-border polli:bg-intent-warning-bg-light polli:text-intent-warning-text\",\n danger: \"polli:border polli:border-intent-danger-border polli:bg-intent-danger-bg-light polli:text-intent-danger-text\",\n};\n\nexport type ChipProps = ComponentPropsWithoutRef<\"span\"> & {\n /** Override the cascade theme for this chip's subtree. */\n theme?: ThemeName;\n /** Semantic intent. Wins over `theme` when set. */\n intent?: ChipIntent;\n size?: keyof typeof chipSizes;\n};\n\n// Static, rectangular colored container. Round shapes are reserved for buttons.\n// Reads `bg-theme-bg-active` / `text-theme-text-strong` from the cascade unless\n// `intent` is set (semantic, theme-independent).\nexport const Chip: FC<ChipProps> = ({\n theme,\n intent,\n size = \"md\",\n className,\n children,\n ...rest\n}) => {\n const intentClass = intent\n ? intentClasses[intent]\n : \"polli:bg-theme-bg-active polli:text-theme-text-strong\";\n return (\n <span\n {...rest}\n data-theme={theme}\n className={cn(\n \"polli:inline-flex polli:shrink-0 polli:items-center polli:gap-1 polli:rounded-lg polli:font-medium polli:leading-normal\",\n chipSizes[size],\n intentClass,\n className,\n )}\n >\n {children}\n </span>\n );\n};\n","// 5-digit budget for pollen display. Integer takes its space, decimals fill\n// the remainder (capped at 4), floor toward -infinity, trailing zeros stripped.\n// Integers needing >=6 digits switch to compact (K/M/B, 3 sig figs).\n// Decimal point and minus sign do not count toward the budget.\n\nconst BUDGET = 5;\nconst MAX_DECIMALS = 4;\nconst COMPACT_THRESHOLD = 100_000;\n\nfunction floorTo(value: number, decimals: number): number {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\nfunction formatCompact(value: number): string {\n const abs = Math.abs(value);\n const sign = value < 0 ? \"-\" : \"\";\n const [unit, scale] =\n abs >= 1e9\n ? ([\"B\", 1e9] as const)\n : abs >= 1e6\n ? ([\"M\", 1e6] as const)\n : ([\"K\", 1e3] as const);\n const ratio = abs / scale;\n const intDigits = Math.max(1, Math.floor(Math.log10(ratio)) + 1);\n const decimals = Math.max(0, 3 - intDigits);\n const floored = floorTo(ratio, decimals);\n return `${sign}${Number(floored.toFixed(decimals)).toString()}${unit}`;\n}\n\nexport function formatPollen(value: number): string {\n if (!Number.isFinite(value) || value === 0) return \"0\";\n\n const abs = Math.abs(value);\n\n if (abs >= COMPACT_THRESHOLD) return formatCompact(value);\n\n const intDigits = abs >= 1 ? Math.floor(Math.log10(abs)) + 1 : 1;\n const decimals = Math.min(MAX_DECIMALS, Math.max(0, BUDGET - intDigits));\n const floored = floorTo(value, decimals);\n if (floored === 0) return \"0\";\n return Number(floored.toFixed(decimals)).toString();\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\nimport { formatPollen } from \"./format-pollen.ts\";\n\nexport type KeyBudgetProps = { className?: string };\n\n/** Renders the current delegated key's remaining budget. `null` until loaded. */\nexport function KeyBudget({ className }: KeyBudgetProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n const budget = key?.pollenBudget;\n if (!isLoggedIn || budget == null) return null;\n return (\n <Chip\n data-polli=\"key-budget\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {formatPollen(budget)} pollen\n </Chip>\n );\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyExpiryProps = { className?: string };\n\n/** Renders the current delegated key's expiry date (YYYY-MM-DD) or `null`. */\nexport function KeyExpiry({ className }: KeyExpiryProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n if (!isLoggedIn || !key?.expiresAt) return null;\n return (\n <Chip\n data-polli=\"key-expiry\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {key.expiresAt.slice(0, 10)}\n </Chip>\n );\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyModelsProps = { className?: string };\n\n/** Renders \"All models\" or \"N models\" for the current key. `null` until loaded. */\nexport function KeyModels({ className }: KeyModelsProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n if (!isLoggedIn || !key) return null;\n const models = key.permissions?.models ?? null;\n const text =\n models === null\n ? \"All models\"\n : `${models.length} model${models.length === 1 ? \"\" : \"s\"}`;\n return (\n <Chip data-polli=\"key-models\" className={className}>\n {text}\n </Chip>\n );\n}\n","import { useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyPrefixProps = { className?: string };\n\n/** Renders the first 7 chars of the API key followed by bullets. `null` when logged out. */\nexport function KeyPrefix({ className }: KeyPrefixProps = {}) {\n const { apiKey } = useAuthState();\n if (!apiKey) return null;\n return (\n <Chip\n data-polli=\"key-prefix\"\n className={cn(\"polli:font-mono polli:select-none\", className)}\n >\n {apiKey.slice(0, 7)}\n {\"••••••••\"}\n </Chip>\n );\n}\n"],"mappings":"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","names":["import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../../src/modules/wallet/sdk.ts","../../src/modules/wallet/Balance.tsx","../../src/lib/cn.ts","../../src/primitives/Chip.tsx","../../src/modules/wallet/format-pollen.ts","../../src/modules/wallet/KeyBudget.tsx","../../src/modules/wallet/KeyExpiry.tsx","../../src/modules/wallet/KeyModels.tsx","../../src/modules/wallet/KeyPrefix.tsx"],"sourcesContent":["export { Balance, type BalanceProps } from \"./Balance.tsx\";\nexport { KeyBudget, type KeyBudgetProps } from \"./KeyBudget.tsx\";\nexport { KeyExpiry, type KeyExpiryProps } from \"./KeyExpiry.tsx\";\nexport { KeyModels, type KeyModelsProps } from \"./KeyModels.tsx\";\nexport { KeyPrefix, type KeyPrefixProps } from \"./KeyPrefix.tsx\";\n","import { useAccountBalance, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\nimport { formatPollen } from \"./format-pollen.ts\";\n\nexport type BalanceProps = { className?: string };\n\n/** Renders the logged-in user's pollen balance. `null` until loaded. */\nexport function Balance({ className }: BalanceProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: balance } = useAccountBalance({ enabled: isLoggedIn });\n if (!isLoggedIn || balance == null) return null;\n return (\n <Chip\n data-polli=\"balance\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {formatPollen(balance.balance)} pollen\n </Chip>\n );\n}\n","import { clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({ prefix: \"polli\" });\n\n/** Internal class merge for polli:-prefixed package primitive classes. */\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(...inputs));\n}\n","import type { ComponentPropsWithoutRef, FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\n\n/** Semantic chip labels for status and metadata badges. */\ntype ChipIntent =\n | \"news\"\n | \"alpha\"\n | \"neutral\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nconst chipSizes = {\n sm: \"polli:px-2 polli:py-0.5 polli:text-xs\",\n md: \"polli:px-2.5 polli:py-0.5 polli:text-sm\",\n lg: \"polli:px-3 polli:py-1 polli:text-sm\",\n} as const;\n\nconst intentClasses: Record<ChipIntent, string> = {\n news: \"polli:bg-intent-news-bg-light polli:text-intent-news-text\",\n alpha: \"polli:bg-intent-alpha-bg-light polli:text-intent-alpha-text\",\n neutral:\n \"polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900\",\n success:\n \"polli:border polli:border-intent-success-border polli:bg-intent-success-bg-light polli:text-intent-success-text\",\n warning:\n \"polli:border polli:border-intent-warning-border polli:bg-intent-warning-bg-light polli:text-intent-warning-text\",\n danger: \"polli:border polli:border-intent-danger-border polli:bg-intent-danger-bg-light polli:text-intent-danger-text\",\n};\n\nexport type ChipProps = ComponentPropsWithoutRef<\"span\"> & {\n /** Override the cascade theme for this chip's subtree. */\n theme?: ThemeName;\n /** Semantic intent. Wins over `theme` when set. */\n intent?: ChipIntent;\n size?: keyof typeof chipSizes;\n};\n\n// Static, rectangular colored container. Round shapes are reserved for buttons.\n// Reads `bg-theme-bg-active` / `text-theme-text-strong` from the cascade unless\n// `intent` is set (semantic, theme-independent).\nexport const Chip: FC<ChipProps> = ({\n theme,\n intent,\n size = \"md\",\n className,\n children,\n ...rest\n}) => {\n const intentClass = intent\n ? intentClasses[intent]\n : \"polli:bg-theme-bg-active polli:text-theme-text-strong\";\n return (\n <span\n {...rest}\n data-theme={theme}\n className={cn(\n \"polli:inline-flex polli:shrink-0 polli:items-center polli:gap-1 polli:rounded-lg polli:font-medium polli:leading-normal\",\n chipSizes[size],\n intentClass,\n className,\n )}\n >\n {children}\n </span>\n );\n};\n","// 5-digit budget for pollen display. Integer takes its space, decimals fill\n// the remainder (capped at 4), floor toward -infinity, trailing zeros stripped.\n// Integers needing >=6 digits switch to compact (K/M/B, 3 sig figs).\n// Decimal point and minus sign do not count toward the budget.\n\nconst BUDGET = 5;\nconst MAX_DECIMALS = 4;\nconst COMPACT_THRESHOLD = 100_000;\n\nfunction floorTo(value: number, decimals: number): number {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\nfunction formatCompact(value: number): string {\n const abs = Math.abs(value);\n const sign = value < 0 ? \"-\" : \"\";\n const [unit, scale] =\n abs >= 1e9\n ? ([\"B\", 1e9] as const)\n : abs >= 1e6\n ? ([\"M\", 1e6] as const)\n : ([\"K\", 1e3] as const);\n const ratio = abs / scale;\n const intDigits = Math.max(1, Math.floor(Math.log10(ratio)) + 1);\n const decimals = Math.max(0, 3 - intDigits);\n const floored = floorTo(ratio, decimals);\n return `${sign}${Number(floored.toFixed(decimals)).toString()}${unit}`;\n}\n\nexport function formatPollen(value: number): string {\n if (!Number.isFinite(value) || value === 0) return \"0\";\n\n const abs = Math.abs(value);\n\n if (abs >= COMPACT_THRESHOLD) return formatCompact(value);\n\n const intDigits = abs >= 1 ? Math.floor(Math.log10(abs)) + 1 : 1;\n const decimals = Math.min(MAX_DECIMALS, Math.max(0, BUDGET - intDigits));\n const floored = floorTo(value, decimals);\n if (floored === 0) return \"0\";\n return Number(floored.toFixed(decimals)).toString();\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\nimport { formatPollen } from \"./format-pollen.ts\";\n\nexport type KeyBudgetProps = { className?: string };\n\n/** Renders the current delegated key's remaining budget. `null` until loaded. */\nexport function KeyBudget({ className }: KeyBudgetProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n const budget = key?.pollenBudget;\n if (!isLoggedIn || budget == null) return null;\n return (\n <Chip\n data-polli=\"key-budget\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {formatPollen(budget)} pollen\n </Chip>\n );\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyExpiryProps = { className?: string };\n\n/** Renders the current delegated key's expiry date (YYYY-MM-DD) or `null`. */\nexport function KeyExpiry({ className }: KeyExpiryProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n if (!isLoggedIn || !key?.expiresAt) return null;\n return (\n <Chip\n data-polli=\"key-expiry\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {key.expiresAt.slice(0, 10)}\n </Chip>\n );\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyModelsProps = { className?: string };\n\n/** Renders \"All models\" or \"N models\" for the current key. `null` until loaded. */\nexport function KeyModels({ className }: KeyModelsProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n if (!isLoggedIn || !key) return null;\n const models = key.permissions?.models ?? null;\n const text =\n models === null\n ? \"All models\"\n : `${models.length} model${models.length === 1 ? \"\" : \"s\"}`;\n return (\n <Chip data-polli=\"key-models\" className={className}>\n {text}\n </Chip>\n );\n}\n","import { useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyPrefixProps = { className?: string };\n\n/** Renders the first 7 chars of the API key followed by bullets. `null` when logged out. */\nexport function KeyPrefix({ className }: KeyPrefixProps = {}) {\n const { apiKey } = useAuthState();\n if (!apiKey) return null;\n return (\n <Chip\n data-polli=\"key-prefix\"\n className={cn(\"polli:font-mono polli:select-none\", className)}\n >\n {apiKey.slice(0, 7)}\n {\"••••••••\"}\n </Chip>\n );\n}\n"],"mappings":"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","names":["import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime"]}
|
package/dist/wallet/sdk.js
CHANGED
|
@@ -17,8 +17,8 @@ var chipSizes = {
|
|
|
17
17
|
lg: "polli:px-3 polli:py-1 polli:text-sm"
|
|
18
18
|
};
|
|
19
19
|
var intentClasses = {
|
|
20
|
-
news: "polli:bg-
|
|
21
|
-
alpha: "polli:bg-
|
|
20
|
+
news: "polli:bg-intent-news-bg-light polli:text-intent-news-text",
|
|
21
|
+
alpha: "polli:bg-intent-alpha-bg-light polli:text-intent-alpha-text",
|
|
22
22
|
neutral: "polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900",
|
|
23
23
|
success: "polli:border polli:border-intent-success-border polli:bg-intent-success-bg-light polli:text-intent-success-text",
|
|
24
24
|
warning: "polli:border polli:border-intent-warning-border polli:bg-intent-warning-bg-light polli:text-intent-warning-text",
|
package/dist/wallet/sdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/modules/wallet/Balance.tsx","../../src/lib/cn.ts","../../src/primitives/Chip.tsx","../../src/modules/wallet/format-pollen.ts","../../src/modules/wallet/KeyBudget.tsx","../../src/modules/wallet/KeyExpiry.tsx","../../src/modules/wallet/KeyModels.tsx","../../src/modules/wallet/KeyPrefix.tsx"],"sourcesContent":["import { useAccountBalance, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\nimport { formatPollen } from \"./format-pollen.ts\";\n\nexport type BalanceProps = { className?: string };\n\n/** Renders the logged-in user's pollen balance. `null` until loaded. */\nexport function Balance({ className }: BalanceProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: balance } = useAccountBalance({ enabled: isLoggedIn });\n if (!isLoggedIn || balance == null) return null;\n return (\n <Chip\n data-polli=\"balance\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {formatPollen(balance.balance)} pollen\n </Chip>\n );\n}\n","import { clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({ prefix: \"polli\" });\n\n/** Internal class merge for polli:-prefixed package primitive classes. */\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(...inputs));\n}\n","import type { ComponentPropsWithoutRef, FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\n\n/** Semantic chip labels for status and metadata badges. */\ntype ChipIntent =\n | \"news\"\n | \"alpha\"\n | \"neutral\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nconst chipSizes = {\n sm: \"polli:px-2 polli:py-0.5 polli:text-xs\",\n md: \"polli:px-2.5 polli:py-0.5 polli:text-sm\",\n lg: \"polli:px-3 polli:py-1 polli:text-sm\",\n} as const;\n\nconst intentClasses: Record<ChipIntent, string> = {\n news: \"polli:bg-[oklch(0.935_0.06_158)] polli:text-[oklch(0.46_0.13_158)]\",\n alpha: \"polli:bg-[oklch(0.93_0.06_300)] polli:text-[oklch(0.42_0.18_300)]\",\n neutral:\n \"polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900\",\n success:\n \"polli:border polli:border-intent-success-border polli:bg-intent-success-bg-light polli:text-intent-success-text\",\n warning:\n \"polli:border polli:border-intent-warning-border polli:bg-intent-warning-bg-light polli:text-intent-warning-text\",\n danger: \"polli:border polli:border-intent-danger-border polli:bg-intent-danger-bg-light polli:text-intent-danger-text\",\n};\n\nexport type ChipProps = ComponentPropsWithoutRef<\"span\"> & {\n /** Override the cascade theme for this chip's subtree. */\n theme?: ThemeName;\n /** Semantic intent. Wins over `theme` when set. */\n intent?: ChipIntent;\n size?: keyof typeof chipSizes;\n};\n\n// Static, rectangular colored container. Round shapes are reserved for buttons.\n// Reads `bg-theme-bg-active` / `text-theme-text-strong` from the cascade unless\n// `intent` is set (semantic, theme-independent).\nexport const Chip: FC<ChipProps> = ({\n theme,\n intent,\n size = \"md\",\n className,\n children,\n ...rest\n}) => {\n const intentClass = intent\n ? intentClasses[intent]\n : \"polli:bg-theme-bg-active polli:text-theme-text-strong\";\n return (\n <span\n {...rest}\n data-theme={theme}\n className={cn(\n \"polli:inline-flex polli:shrink-0 polli:items-center polli:gap-1 polli:rounded-lg polli:font-medium polli:leading-normal\",\n chipSizes[size],\n intentClass,\n className,\n )}\n >\n {children}\n </span>\n );\n};\n","// 5-digit budget for pollen display. Integer takes its space, decimals fill\n// the remainder (capped at 4), floor toward -infinity, trailing zeros stripped.\n// Integers needing >=6 digits switch to compact (K/M/B, 3 sig figs).\n// Decimal point and minus sign do not count toward the budget.\n\nconst BUDGET = 5;\nconst MAX_DECIMALS = 4;\nconst COMPACT_THRESHOLD = 100_000;\n\nfunction floorTo(value: number, decimals: number): number {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\nfunction formatCompact(value: number): string {\n const abs = Math.abs(value);\n const sign = value < 0 ? \"-\" : \"\";\n const [unit, scale] =\n abs >= 1e9\n ? ([\"B\", 1e9] as const)\n : abs >= 1e6\n ? ([\"M\", 1e6] as const)\n : ([\"K\", 1e3] as const);\n const ratio = abs / scale;\n const intDigits = Math.max(1, Math.floor(Math.log10(ratio)) + 1);\n const decimals = Math.max(0, 3 - intDigits);\n const floored = floorTo(ratio, decimals);\n return `${sign}${Number(floored.toFixed(decimals)).toString()}${unit}`;\n}\n\nexport function formatPollen(value: number): string {\n if (!Number.isFinite(value) || value === 0) return \"0\";\n\n const abs = Math.abs(value);\n\n if (abs >= COMPACT_THRESHOLD) return formatCompact(value);\n\n const intDigits = abs >= 1 ? Math.floor(Math.log10(abs)) + 1 : 1;\n const decimals = Math.min(MAX_DECIMALS, Math.max(0, BUDGET - intDigits));\n const floored = floorTo(value, decimals);\n if (floored === 0) return \"0\";\n return Number(floored.toFixed(decimals)).toString();\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\nimport { formatPollen } from \"./format-pollen.ts\";\n\nexport type KeyBudgetProps = { className?: string };\n\n/** Renders the current delegated key's remaining budget. `null` until loaded. */\nexport function KeyBudget({ className }: KeyBudgetProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n const budget = key?.pollenBudget;\n if (!isLoggedIn || budget == null) return null;\n return (\n <Chip\n data-polli=\"key-budget\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {formatPollen(budget)} pollen\n </Chip>\n );\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyExpiryProps = { className?: string };\n\n/** Renders the current delegated key's expiry date (YYYY-MM-DD) or `null`. */\nexport function KeyExpiry({ className }: KeyExpiryProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n if (!isLoggedIn || !key?.expiresAt) return null;\n return (\n <Chip\n data-polli=\"key-expiry\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {key.expiresAt.slice(0, 10)}\n </Chip>\n );\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyModelsProps = { className?: string };\n\n/** Renders \"All models\" or \"N models\" for the current key. `null` until loaded. */\nexport function KeyModels({ className }: KeyModelsProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n if (!isLoggedIn || !key) return null;\n const models = key.permissions?.models ?? null;\n const text =\n models === null\n ? \"All models\"\n : `${models.length} model${models.length === 1 ? \"\" : \"s\"}`;\n return (\n <Chip data-polli=\"key-models\" className={className}>\n {text}\n </Chip>\n );\n}\n","import { useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyPrefixProps = { className?: string };\n\n/** Renders the first 7 chars of the API key followed by bullets. `null` when logged out. */\nexport function KeyPrefix({ className }: KeyPrefixProps = {}) {\n const { apiKey } = useAuthState();\n if (!apiKey) return null;\n return (\n <Chip\n data-polli=\"key-prefix\"\n className={cn(\"polli:font-mono polli:select-none\", className)}\n >\n {apiKey.slice(0, 7)}\n {\"••••••••\"}\n </Chip>\n );\n}\n"],"mappings":"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","names":["useAuthState","jsxs","useAuthState","useAccountKey","useAuthState","jsx","useAuthState","useAccountKey","useAccountKey","useAuthState","jsx","useAuthState","useAccountKey","useAuthState","jsxs","useAuthState"]}
|
|
1
|
+
{"version":3,"sources":["../../src/modules/wallet/Balance.tsx","../../src/lib/cn.ts","../../src/primitives/Chip.tsx","../../src/modules/wallet/format-pollen.ts","../../src/modules/wallet/KeyBudget.tsx","../../src/modules/wallet/KeyExpiry.tsx","../../src/modules/wallet/KeyModels.tsx","../../src/modules/wallet/KeyPrefix.tsx"],"sourcesContent":["import { useAccountBalance, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\nimport { formatPollen } from \"./format-pollen.ts\";\n\nexport type BalanceProps = { className?: string };\n\n/** Renders the logged-in user's pollen balance. `null` until loaded. */\nexport function Balance({ className }: BalanceProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: balance } = useAccountBalance({ enabled: isLoggedIn });\n if (!isLoggedIn || balance == null) return null;\n return (\n <Chip\n data-polli=\"balance\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {formatPollen(balance.balance)} pollen\n </Chip>\n );\n}\n","import { clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({ prefix: \"polli\" });\n\n/** Internal class merge for polli:-prefixed package primitive classes. */\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(...inputs));\n}\n","import type { ComponentPropsWithoutRef, FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\n\n/** Semantic chip labels for status and metadata badges. */\ntype ChipIntent =\n | \"news\"\n | \"alpha\"\n | \"neutral\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nconst chipSizes = {\n sm: \"polli:px-2 polli:py-0.5 polli:text-xs\",\n md: \"polli:px-2.5 polli:py-0.5 polli:text-sm\",\n lg: \"polli:px-3 polli:py-1 polli:text-sm\",\n} as const;\n\nconst intentClasses: Record<ChipIntent, string> = {\n news: \"polli:bg-intent-news-bg-light polli:text-intent-news-text\",\n alpha: \"polli:bg-intent-alpha-bg-light polli:text-intent-alpha-text\",\n neutral:\n \"polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900\",\n success:\n \"polli:border polli:border-intent-success-border polli:bg-intent-success-bg-light polli:text-intent-success-text\",\n warning:\n \"polli:border polli:border-intent-warning-border polli:bg-intent-warning-bg-light polli:text-intent-warning-text\",\n danger: \"polli:border polli:border-intent-danger-border polli:bg-intent-danger-bg-light polli:text-intent-danger-text\",\n};\n\nexport type ChipProps = ComponentPropsWithoutRef<\"span\"> & {\n /** Override the cascade theme for this chip's subtree. */\n theme?: ThemeName;\n /** Semantic intent. Wins over `theme` when set. */\n intent?: ChipIntent;\n size?: keyof typeof chipSizes;\n};\n\n// Static, rectangular colored container. Round shapes are reserved for buttons.\n// Reads `bg-theme-bg-active` / `text-theme-text-strong` from the cascade unless\n// `intent` is set (semantic, theme-independent).\nexport const Chip: FC<ChipProps> = ({\n theme,\n intent,\n size = \"md\",\n className,\n children,\n ...rest\n}) => {\n const intentClass = intent\n ? intentClasses[intent]\n : \"polli:bg-theme-bg-active polli:text-theme-text-strong\";\n return (\n <span\n {...rest}\n data-theme={theme}\n className={cn(\n \"polli:inline-flex polli:shrink-0 polli:items-center polli:gap-1 polli:rounded-lg polli:font-medium polli:leading-normal\",\n chipSizes[size],\n intentClass,\n className,\n )}\n >\n {children}\n </span>\n );\n};\n","// 5-digit budget for pollen display. Integer takes its space, decimals fill\n// the remainder (capped at 4), floor toward -infinity, trailing zeros stripped.\n// Integers needing >=6 digits switch to compact (K/M/B, 3 sig figs).\n// Decimal point and minus sign do not count toward the budget.\n\nconst BUDGET = 5;\nconst MAX_DECIMALS = 4;\nconst COMPACT_THRESHOLD = 100_000;\n\nfunction floorTo(value: number, decimals: number): number {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\nfunction formatCompact(value: number): string {\n const abs = Math.abs(value);\n const sign = value < 0 ? \"-\" : \"\";\n const [unit, scale] =\n abs >= 1e9\n ? ([\"B\", 1e9] as const)\n : abs >= 1e6\n ? ([\"M\", 1e6] as const)\n : ([\"K\", 1e3] as const);\n const ratio = abs / scale;\n const intDigits = Math.max(1, Math.floor(Math.log10(ratio)) + 1);\n const decimals = Math.max(0, 3 - intDigits);\n const floored = floorTo(ratio, decimals);\n return `${sign}${Number(floored.toFixed(decimals)).toString()}${unit}`;\n}\n\nexport function formatPollen(value: number): string {\n if (!Number.isFinite(value) || value === 0) return \"0\";\n\n const abs = Math.abs(value);\n\n if (abs >= COMPACT_THRESHOLD) return formatCompact(value);\n\n const intDigits = abs >= 1 ? Math.floor(Math.log10(abs)) + 1 : 1;\n const decimals = Math.min(MAX_DECIMALS, Math.max(0, BUDGET - intDigits));\n const floored = floorTo(value, decimals);\n if (floored === 0) return \"0\";\n return Number(floored.toFixed(decimals)).toString();\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\nimport { formatPollen } from \"./format-pollen.ts\";\n\nexport type KeyBudgetProps = { className?: string };\n\n/** Renders the current delegated key's remaining budget. `null` until loaded. */\nexport function KeyBudget({ className }: KeyBudgetProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n const budget = key?.pollenBudget;\n if (!isLoggedIn || budget == null) return null;\n return (\n <Chip\n data-polli=\"key-budget\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {formatPollen(budget)} pollen\n </Chip>\n );\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyExpiryProps = { className?: string };\n\n/** Renders the current delegated key's expiry date (YYYY-MM-DD) or `null`. */\nexport function KeyExpiry({ className }: KeyExpiryProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n if (!isLoggedIn || !key?.expiresAt) return null;\n return (\n <Chip\n data-polli=\"key-expiry\"\n className={cn(\"polli:tabular-nums\", className)}\n >\n {key.expiresAt.slice(0, 10)}\n </Chip>\n );\n}\n","import { useAccountKey, useAuthState } from \"@pollinations/sdk/react\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyModelsProps = { className?: string };\n\n/** Renders \"All models\" or \"N models\" for the current key. `null` until loaded. */\nexport function KeyModels({ className }: KeyModelsProps = {}) {\n const { isLoggedIn } = useAuthState();\n const { data: key } = useAccountKey({ enabled: isLoggedIn });\n if (!isLoggedIn || !key) return null;\n const models = key.permissions?.models ?? null;\n const text =\n models === null\n ? \"All models\"\n : `${models.length} model${models.length === 1 ? \"\" : \"s\"}`;\n return (\n <Chip data-polli=\"key-models\" className={className}>\n {text}\n </Chip>\n );\n}\n","import { useAuthState } from \"@pollinations/sdk/react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip } from \"../../primitives/Chip.tsx\";\n\nexport type KeyPrefixProps = { className?: string };\n\n/** Renders the first 7 chars of the API key followed by bullets. `null` when logged out. */\nexport function KeyPrefix({ className }: KeyPrefixProps = {}) {\n const { apiKey } = useAuthState();\n if (!apiKey) return null;\n return (\n <Chip\n data-polli=\"key-prefix\"\n className={cn(\"polli:font-mono polli:select-none\", className)}\n >\n {apiKey.slice(0, 7)}\n {\"••••••••\"}\n </Chip>\n );\n}\n"],"mappings":";AAAA,SAAS,mBAAmB,oBAAoB;;;ACAhD,SAAS,YAAY;AACrB,SAAS,2BAA2B;AAEpC,IAAM,UAAU,oBAAoB,EAAE,QAAQ,QAAQ,CAAC;AAGhD,SAAS,MAAM,QAA+C;AACjE,SAAO,QAAQ,KAAK,GAAG,MAAM,CAAC;AAClC;;;AC8CQ;AAzCR,IAAM,YAAY;AAAA,EACd,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACR;AAEA,IAAM,gBAA4C;AAAA,EAC9C,MAAM;AAAA,EACN,OAAO;AAAA,EACP,SACI;AAAA,EACJ,SACI;AAAA,EACJ,SACI;AAAA,EACJ,QAAQ;AACZ;AAaO,IAAM,OAAsB,CAAC;AAAA,EAChC;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA,GAAG;AACP,MAAM;AACF,QAAM,cAAc,SACd,cAAc,MAAM,IACpB;AACN,SACI;AAAA,IAAC;AAAA;AAAA,MACI,GAAG;AAAA,MACJ,cAAY;AAAA,MACZ,WAAW;AAAA,QACP;AAAA,QACA,UAAU,IAAI;AAAA,QACd;AAAA,QACA;AAAA,MACJ;AAAA,MAEC;AAAA;AAAA,EACL;AAER;;;AC9DA,IAAM,SAAS;AACf,IAAM,eAAe;AACrB,IAAM,oBAAoB;AAE1B,SAAS,QAAQ,OAAe,UAA0B;AACtD,QAAM,SAAS,MAAM;AACrB,SAAO,KAAK,MAAM,QAAQ,MAAM,IAAI;AACxC;AAEA,SAAS,cAAc,OAAuB;AAC1C,QAAM,MAAM,KAAK,IAAI,KAAK;AAC1B,QAAM,OAAO,QAAQ,IAAI,MAAM;AAC/B,QAAM,CAAC,MAAM,KAAK,IACd,OAAO,MACA,CAAC,KAAK,GAAG,IACV,OAAO,MACJ,CAAC,KAAK,GAAG,IACT,CAAC,KAAK,GAAG;AACtB,QAAM,QAAQ,MAAM;AACpB,QAAM,YAAY,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,MAAM,KAAK,CAAC,IAAI,CAAC;AAC/D,QAAM,WAAW,KAAK,IAAI,GAAG,IAAI,SAAS;AAC1C,QAAM,UAAU,QAAQ,OAAO,QAAQ;AACvC,SAAO,GAAG,IAAI,GAAG,OAAO,QAAQ,QAAQ,QAAQ,CAAC,EAAE,SAAS,CAAC,GAAG,IAAI;AACxE;AAEO,SAAS,aAAa,OAAuB;AAChD,MAAI,CAAC,OAAO,SAAS,KAAK,KAAK,UAAU,EAAG,QAAO;AAEnD,QAAM,MAAM,KAAK,IAAI,KAAK;AAE1B,MAAI,OAAO,kBAAmB,QAAO,cAAc,KAAK;AAExD,QAAM,YAAY,OAAO,IAAI,KAAK,MAAM,KAAK,MAAM,GAAG,CAAC,IAAI,IAAI;AAC/D,QAAM,WAAW,KAAK,IAAI,cAAc,KAAK,IAAI,GAAG,SAAS,SAAS,CAAC;AACvE,QAAM,UAAU,QAAQ,OAAO,QAAQ;AACvC,MAAI,YAAY,EAAG,QAAO;AAC1B,SAAO,OAAO,QAAQ,QAAQ,QAAQ,CAAC,EAAE,SAAS;AACtD;;;AH7BQ;AALD,SAAS,QAAQ,EAAE,UAAU,IAAkB,CAAC,GAAG;AACtD,QAAM,EAAE,WAAW,IAAI,aAAa;AACpC,QAAM,EAAE,MAAM,QAAQ,IAAI,kBAAkB,EAAE,SAAS,WAAW,CAAC;AACnE,MAAI,CAAC,cAAc,WAAW,KAAM,QAAO;AAC3C,SACI;AAAA,IAAC;AAAA;AAAA,MACG,cAAW;AAAA,MACX,WAAW,GAAG,sBAAsB,SAAS;AAAA,MAE5C;AAAA,qBAAa,QAAQ,OAAO;AAAA,QAAE;AAAA;AAAA;AAAA,EACnC;AAER;;;AIpBA,SAAS,eAAe,gBAAAA,qBAAoB;AAcpC,iBAAAC,aAAA;AAND,SAAS,UAAU,EAAE,UAAU,IAAoB,CAAC,GAAG;AAC1D,QAAM,EAAE,WAAW,IAAIC,cAAa;AACpC,QAAM,EAAE,MAAM,IAAI,IAAI,cAAc,EAAE,SAAS,WAAW,CAAC;AAC3D,QAAM,SAAS,KAAK;AACpB,MAAI,CAAC,cAAc,UAAU,KAAM,QAAO;AAC1C,SACI,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACG,cAAW;AAAA,MACX,WAAW,GAAG,sBAAsB,SAAS;AAAA,MAE5C;AAAA,qBAAa,MAAM;AAAA,QAAE;AAAA;AAAA;AAAA,EAC1B;AAER;;;ACrBA,SAAS,iBAAAE,gBAAe,gBAAAC,qBAAoB;AAYpC,gBAAAC,YAAA;AALD,SAAS,UAAU,EAAE,UAAU,IAAoB,CAAC,GAAG;AAC1D,QAAM,EAAE,WAAW,IAAIC,cAAa;AACpC,QAAM,EAAE,MAAM,IAAI,IAAIC,eAAc,EAAE,SAAS,WAAW,CAAC;AAC3D,MAAI,CAAC,cAAc,CAAC,KAAK,UAAW,QAAO;AAC3C,SACI,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACG,cAAW;AAAA,MACX,WAAW,GAAG,sBAAsB,SAAS;AAAA,MAE5C,cAAI,UAAU,MAAM,GAAG,EAAE;AAAA;AAAA,EAC9B;AAER;;;ACnBA,SAAS,iBAAAG,gBAAe,gBAAAC,qBAAoB;AAgBpC,gBAAAC,YAAA;AAVD,SAAS,UAAU,EAAE,UAAU,IAAoB,CAAC,GAAG;AAC1D,QAAM,EAAE,WAAW,IAAIC,cAAa;AACpC,QAAM,EAAE,MAAM,IAAI,IAAIC,eAAc,EAAE,SAAS,WAAW,CAAC;AAC3D,MAAI,CAAC,cAAc,CAAC,IAAK,QAAO;AAChC,QAAM,SAAS,IAAI,aAAa,UAAU;AAC1C,QAAM,OACF,WAAW,OACL,eACA,GAAG,OAAO,MAAM,SAAS,OAAO,WAAW,IAAI,KAAK,GAAG;AACjE,SACI,gBAAAF,KAAC,QAAK,cAAW,cAAa,WACzB,gBACL;AAER;;;ACpBA,SAAS,gBAAAG,qBAAoB;AAWrB,iBAAAC,aAAA;AAJD,SAAS,UAAU,EAAE,UAAU,IAAoB,CAAC,GAAG;AAC1D,QAAM,EAAE,OAAO,IAAIC,cAAa;AAChC,MAAI,CAAC,OAAQ,QAAO;AACpB,SACI,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACG,cAAW;AAAA,MACX,WAAW,GAAG,qCAAqC,SAAS;AAAA,MAE3D;AAAA,eAAO,MAAM,GAAG,CAAC;AAAA,QACjB;AAAA;AAAA;AAAA,EACL;AAER;","names":["useAuthState","jsxs","useAuthState","useAccountKey","useAuthState","jsx","useAuthState","useAccountKey","useAccountKey","useAuthState","jsx","useAuthState","useAccountKey","useAuthState","jsxs","useAuthState"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pollinations/ui",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.1.0-alpha.0",
|
|
4
4
|
"description": "Design primitives and UI modules for Pollinations apps.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -23,11 +23,21 @@
|
|
|
23
23
|
"import": "./dist/auth/sdk.js",
|
|
24
24
|
"require": "./dist/auth/sdk.cjs"
|
|
25
25
|
},
|
|
26
|
+
"./compositions/app-user": {
|
|
27
|
+
"types": "./dist/compositions/app-user.d.ts",
|
|
28
|
+
"import": "./dist/compositions/app-user.js",
|
|
29
|
+
"require": "./dist/compositions/app-user.cjs"
|
|
30
|
+
},
|
|
26
31
|
"./modality": {
|
|
27
32
|
"types": "./dist/modality/index.d.ts",
|
|
28
33
|
"import": "./dist/modality/index.js",
|
|
29
34
|
"require": "./dist/modality/index.cjs"
|
|
30
35
|
},
|
|
36
|
+
"./models": {
|
|
37
|
+
"types": "./dist/models/index.d.ts",
|
|
38
|
+
"import": "./dist/models/index.js",
|
|
39
|
+
"require": "./dist/models/index.cjs"
|
|
40
|
+
},
|
|
31
41
|
"./wallet": {
|
|
32
42
|
"types": "./dist/wallet/index.d.ts",
|
|
33
43
|
"import": "./dist/wallet/index.js",
|
|
@@ -40,7 +50,6 @@
|
|
|
40
50
|
},
|
|
41
51
|
"./styles.css": "./dist/styles.css",
|
|
42
52
|
"./app.css": "./dist/app.css",
|
|
43
|
-
"./wallet.css": "./dist/wallet.css",
|
|
44
53
|
"./assets/*": "./dist/assets/*",
|
|
45
54
|
"./fonts/*": "./dist/fonts/*",
|
|
46
55
|
"./package.json": "./package.json"
|
|
@@ -57,11 +66,11 @@
|
|
|
57
66
|
"build:assets": "mkdir -p dist/assets && cp src/assets/* dist/assets/",
|
|
58
67
|
"build:licenses": "mkdir -p dist/licenses && cp src/licenses/*.txt dist/licenses/",
|
|
59
68
|
"build:js": "tsup",
|
|
60
|
-
"build:css": "tailwindcss -i src/styles/index.css -o dist/styles.css --minify && sed 's|@pollinations/ui/styles.css|./styles.css|' src/styles/app.css > dist/app.css
|
|
69
|
+
"build:css": "tailwindcss -i src/styles/index.css -o dist/styles.css --minify && sed 's|@pollinations/ui/styles.css|./styles.css|' src/styles/app.css > dist/app.css",
|
|
61
70
|
"prepublishOnly": "npm run build",
|
|
71
|
+
"typecheck": "tsc --noEmit",
|
|
62
72
|
"test": "vitest run",
|
|
63
|
-
"test:watch": "vitest"
|
|
64
|
-
"typecheck": "tsc --noEmit"
|
|
73
|
+
"test:watch": "vitest"
|
|
65
74
|
},
|
|
66
75
|
"publishConfig": {
|
|
67
76
|
"access": "public"
|
|
@@ -83,6 +92,9 @@
|
|
|
83
92
|
"dependencies": {
|
|
84
93
|
"@ark-ui/react": "^5.29.1",
|
|
85
94
|
"clsx": "^2.1.1",
|
|
95
|
+
"react-markdown": "^10.1.0",
|
|
96
|
+
"rehype-slug": "^6.0.0",
|
|
97
|
+
"remark-gfm": "^4.0.1",
|
|
86
98
|
"tailwind-merge": "^3.4.0"
|
|
87
99
|
},
|
|
88
100
|
"devDependencies": {
|