@peerbots/core 0.2.1 → 0.2.3
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/.github/workflows/build.yml +30 -0
- package/.github/workflows/publish.yml +2 -2
- package/.github/workflows/storybook.yml +23 -26
- package/.nvmrc +1 -0
- package/.storybook/preview.ts +1 -1
- package/CHANGELOG.md +12 -0
- package/README.md +32 -1
- package/dist/index.js +7 -5
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +7 -5
- package/dist/index.mjs.map +1 -0
- package/dist/styles/theme.css +1 -0
- package/package.json +17 -2
- package/postcss.config.js +5 -0
- package/src/index.ts +1 -1
- package/src/styles/index.css +40 -0
- package/src/styles/theme.css +0 -40
- package/tsup.config.ts +25 -0
- package/dist/index.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["#style-inject:#style-inject","../src/styles/index.css","../src/ui/Button.tsx","../src/ui/utils.ts","../src/ui/Input.tsx","../src/ui/Select.tsx","../src/ui/Icon.tsx","../src/ui/IconRegistry.tsx","../src/ui/Typography.tsx","../src/ui/Slider.tsx","../src/ui/SliderWithNumberField.tsx","../src/ui/NumberField.tsx","../src/ui/Tooltip.tsx","../src/ui/Dialog.tsx","../src/ui/Popover.tsx","../src/ui/Dropdown.tsx","../src/ui/Collapsible.tsx","../src/ui/Switch.tsx","../src/ui/Label.tsx","../src/ui/BasePanel.tsx","../src/ui/TabRadio.tsx","../src/ui/Field.tsx","../src/ui/Anchor.tsx","../src/ui/TextArea.tsx","../src/ui/Checkbox.tsx","../src/ui/SettingsPanel.tsx","../src/ui/Separator.tsx","../src/ui/Skeleton.tsx","../src/ui/AuthFormUI.tsx","../src/ui/Alert.tsx","../src/ui/TabSelection.tsx","../src/helpers/SEO.tsx","../src/charts/DistributionBarChart.tsx","../src/charts/DistributionHistogram.tsx"],"sourcesContent":["\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\"/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */@layer properties;@layer theme,base,components,utilities;@layer theme{:root,:host{--pb-font-sans: \\\"Avenir\\\", \\\"Nunito\\\", sans-serif;--pb-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace;--pb-color-red-500: oklch(63.7% .237 25.331);--pb-color-red-600: oklch(57.7% .245 27.325);--pb-color-red-700: oklch(50.5% .213 27.518);--pb-color-green-500: oklch(72.3% .219 149.579);--pb-color-teal-700: oklch(51.1% .096 186.391);--pb-color-teal-900: oklch(38.6% .063 188.416);--pb-color-blue-500: oklch(62.3% .214 259.815);--pb-color-slate-400: oklch(70.4% .04 256.788);--pb-color-slate-500: oklch(55.4% .046 257.417);--pb-color-slate-600: oklch(44.6% .043 257.281);--pb-color-slate-950: oklch(12.9% .042 264.695);--pb-color-gray-50: oklch(98.5% .002 247.839);--pb-color-gray-100: oklch(96.7% .003 264.542);--pb-color-gray-200: oklch(92.8% .006 264.531);--pb-color-gray-300: oklch(87.2% .01 258.338);--pb-color-gray-400: oklch(70.7% .022 261.325);--pb-color-gray-500: oklch(55.1% .027 264.364);--pb-color-gray-600: oklch(44.6% .03 256.802);--pb-color-gray-700: oklch(37.3% .034 259.733);--pb-color-gray-800: oklch(27.8% .033 256.848);--pb-color-gray-900: oklch(21% .034 264.665);--pb-color-black: #000;--pb-color-white: #fff;--pb-spacing: .25rem;--pb-container-xs: 20rem;--pb-container-sm: 24rem;--pb-container-lg: 32rem;--pb-container-2xl: 42rem;--pb-text-xs: .75rem;--pb-text-xs--line-height: calc(1 / .75);--pb-text-sm: .875rem;--pb-text-sm--line-height: calc(1.25 / .875);--pb-text-base: 1rem;--pb-text-base--line-height: 1.5 ;--pb-text-lg: 1.125rem;--pb-text-lg--line-height: calc(1.75 / 1.125);--pb-text-xl: 1.25rem;--pb-text-xl--line-height: calc(1.75 / 1.25);--pb-text-2xl: 1.5rem;--pb-text-2xl--line-height: calc(2 / 1.5);--pb-text-3xl: 1.875rem;--pb-text-3xl--line-height: 1.2 ;--pb-text-4xl: 2.25rem;--pb-text-4xl--line-height: calc(2.5 / 2.25);--pb-font-weight-normal: 400;--pb-font-weight-medium: 500;--pb-font-weight-bold: 700;--pb-tracking-wider: .05em;--pb-radius-sm: .25rem;--pb-radius-md: .375rem;--pb-radius-lg: .5rem;--pb-ease-in-out: cubic-bezier(.4, 0, .2, 1);--pb-animate-spin: spin 1s linear infinite;--pb-animate-pulse: pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--pb-default-transition-duration: .15s;--pb-default-transition-timing-function: cubic-bezier(.4, 0, .2, 1);--pb-default-font-family: var(--pb-font-sans);--pb-default-mono-font-family: var(--pb-font-mono);--pb-color-primary: #46d9d9;--pb-color-dark-primary: var(--color-teal-700);--pb-color-secondary: #e86e8a;--pb-color-accent: #d9e021;--pb-color-accent-hc: #c4cc24;--pb-color-accent-two: #4273ff;--pb-color-accent-two-hc: #516eb5;--pb-color-accent-three: #3f8588;--pb-color-danger: #e86e8a;--pb-color-light-bg: #d8e7eb;--pb-sidebar-bg: #f9ffff}}@layer base{*,:after,:before,::backdrop,::file-selector-button{box-sizing:border-box;margin:0;padding:0;border:0 solid}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:var(--pb-default-font-family, ui-sans-serif, system-ui, sans-serif, \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\", \\\"Noto Color Emoji\\\");font-feature-settings:var(--pb-default-font-feature-settings, normal);font-variation-settings:var(--pb-default-font-variation-settings, normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--pb-default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace);font-feature-settings:var(--pb-default-mono-font-feature-settings, normal);font-variation-settings:var(--pb-default-mono-font-variation-settings, normal);font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea,::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px){::placeholder{color:currentcolor;@supports (color: color-mix(in lab,red,red)){color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]),::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.pb\\\\:pointer-events-none{pointer-events:none}.pb\\\\:absolute{position:absolute}.pb\\\\:fixed{position:fixed}.pb\\\\:relative{position:relative}.pb\\\\:inset-0{inset:calc(var(--pb-spacing) * 0)}.pb\\\\:inset-y-0{inset-block:calc(var(--pb-spacing) * 0)}.pb\\\\:top-\\\\[50\\\\%\\\\]{top:50%}.pb\\\\:right-0{right:calc(var(--pb-spacing) * 0)}.pb\\\\:left-0{left:calc(var(--pb-spacing) * 0)}.pb\\\\:left-\\\\[50\\\\%\\\\]{left:50%}.pb\\\\:z-0{z-index:0}.pb\\\\:z-10{z-index:10}.pb\\\\:z-20{z-index:20}.pb\\\\:z-50{z-index:50}.pb\\\\:m-1{margin:calc(var(--pb-spacing) * 1)}.pb\\\\:m-2{margin:calc(var(--pb-spacing) * 2)}.pb\\\\:-mx-1{margin-inline:calc(var(--pb-spacing) * -1)}.pb\\\\:mx-1{margin-inline:calc(var(--pb-spacing) * 1)}.pb\\\\:my-1{margin-block:calc(var(--pb-spacing) * 1)}.pb\\\\:my-2{margin-block:calc(var(--pb-spacing) * 2)}.pb\\\\:my-4{margin-block:calc(var(--pb-spacing) * 4)}.pb\\\\:mt-4{margin-top:calc(var(--pb-spacing) * 4)}.pb\\\\:mt-6{margin-top:calc(var(--pb-spacing) * 6)}.pb\\\\:-mr-1{margin-right:calc(var(--pb-spacing) * -1)}.pb\\\\:mr-2{margin-right:calc(var(--pb-spacing) * 2)}.pb\\\\:mb-0{margin-bottom:calc(var(--pb-spacing) * 0)}.pb\\\\:mb-1{margin-bottom:calc(var(--pb-spacing) * 1)}.pb\\\\:mb-2{margin-bottom:calc(var(--pb-spacing) * 2)}.pb\\\\:mb-4{margin-bottom:calc(var(--pb-spacing) * 4)}.pb\\\\:mb-6{margin-bottom:calc(var(--pb-spacing) * 6)}.pb\\\\:-ml-1{margin-left:calc(var(--pb-spacing) * -1)}.pb\\\\:ml-2{margin-left:calc(var(--pb-spacing) * 2)}.pb\\\\:ml-7{margin-left:calc(var(--pb-spacing) * 7)}.pb\\\\:block{display:block}.pb\\\\:flex{display:flex}.pb\\\\:grid{display:grid}.pb\\\\:hidden{display:none}.pb\\\\:inline-block{display:inline-block}.pb\\\\:inline-flex{display:inline-flex}.pb\\\\:h-1\\\\.5{height:calc(var(--pb-spacing) * 1.5)}.pb\\\\:h-3{height:calc(var(--pb-spacing) * 3)}.pb\\\\:h-4{height:calc(var(--pb-spacing) * 4)}.pb\\\\:h-4\\\\.5{height:calc(var(--pb-spacing) * 4.5)}.pb\\\\:h-5{height:calc(var(--pb-spacing) * 5)}.pb\\\\:h-6{height:calc(var(--pb-spacing) * 6)}.pb\\\\:h-8{height:calc(var(--pb-spacing) * 8)}.pb\\\\:h-9{height:calc(var(--pb-spacing) * 9)}.pb\\\\:h-12{height:calc(var(--pb-spacing) * 12)}.pb\\\\:h-20{height:calc(var(--pb-spacing) * 20)}.pb\\\\:h-32{height:calc(var(--pb-spacing) * 32)}.pb\\\\:h-\\\\[1px\\\\]{height:1px}.pb\\\\:h-auto{height:auto}.pb\\\\:h-full{height:100%}.pb\\\\:h-px{height:1px}.pb\\\\:max-h-20{max-height:calc(var(--pb-spacing) * 20)}.pb\\\\:max-h-60{max-height:calc(var(--pb-spacing) * 60)}.pb\\\\:min-h-\\\\[36px\\\\]{min-height:36px}.pb\\\\:w-3{width:calc(var(--pb-spacing) * 3)}.pb\\\\:w-4{width:calc(var(--pb-spacing) * 4)}.pb\\\\:w-4\\\\.5{width:calc(var(--pb-spacing) * 4.5)}.pb\\\\:w-5{width:calc(var(--pb-spacing) * 5)}.pb\\\\:w-6{width:calc(var(--pb-spacing) * 6)}.pb\\\\:w-8{width:calc(var(--pb-spacing) * 8)}.pb\\\\:w-11{width:calc(var(--pb-spacing) * 11)}.pb\\\\:w-12{width:calc(var(--pb-spacing) * 12)}.pb\\\\:w-20{width:calc(var(--pb-spacing) * 20)}.pb\\\\:w-40{width:calc(var(--pb-spacing) * 40)}.pb\\\\:w-48{width:calc(var(--pb-spacing) * 48)}.pb\\\\:w-64{width:calc(var(--pb-spacing) * 64)}.pb\\\\:w-72{width:calc(var(--pb-spacing) * 72)}.pb\\\\:w-80{width:calc(var(--pb-spacing) * 80)}.pb\\\\:w-\\\\[1px\\\\]{width:1px}.pb\\\\:w-\\\\[200px\\\\]{width:200px}.pb\\\\:w-\\\\[250px\\\\]{width:250px}.pb\\\\:w-\\\\[400px\\\\]{width:400px}.pb\\\\:w-\\\\[450px\\\\]{width:450px}.pb\\\\:w-\\\\[600px\\\\]{width:600px}.pb\\\\:w-\\\\[var\\\\(--anchor-width\\\\)\\\\]{width:var(--anchor-width)}.pb\\\\:w-auto{width:auto}.pb\\\\:w-full{width:100%}.pb\\\\:max-w-2xl{max-width:var(--pb-container-2xl)}.pb\\\\:max-w-\\\\[90vw\\\\]{max-width:90vw}.pb\\\\:max-w-\\\\[200px\\\\]{max-width:200px}.pb\\\\:max-w-lg{max-width:var(--pb-container-lg)}.pb\\\\:max-w-sm{max-width:var(--pb-container-sm)}.pb\\\\:max-w-xs{max-width:var(--pb-container-xs)}.pb\\\\:min-w-0{min-width:calc(var(--pb-spacing) * 0)}.pb\\\\:min-w-\\\\[8rem\\\\]{min-width:8rem}.pb\\\\:min-w-\\\\[120px\\\\]{min-width:120px}.pb\\\\:min-w-\\\\[400px\\\\]{min-width:400px}.pb\\\\:flex-1{flex:1}.pb\\\\:flex-shrink-0,.pb\\\\:shrink-0{flex-shrink:0}.pb\\\\:flex-grow{flex-grow:1}.pb\\\\:translate-x-\\\\[-50\\\\%\\\\]{--tw-translate-x: -50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.pb\\\\:translate-y-\\\\[-50\\\\%\\\\]{--tw-translate-y: -50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.pb\\\\:transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.pb\\\\:animate-pulse{animation:var(--pb-animate-pulse)}.pb\\\\:animate-spin{animation:var(--pb-animate-spin)}.pb\\\\:cursor-default{cursor:default}.pb\\\\:cursor-ew-resize{cursor:ew-resize}.pb\\\\:cursor-grab{cursor:grab}.pb\\\\:cursor-help{cursor:help}.pb\\\\:cursor-not-allowed{cursor:not-allowed}.pb\\\\:cursor-pointer{cursor:pointer}.pb\\\\:touch-none{touch-action:none}.pb\\\\:appearance-none{appearance:none}.pb\\\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.pb\\\\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.pb\\\\:flex-col{flex-direction:column}.pb\\\\:flex-row{flex-direction:row}.pb\\\\:flex-wrap{flex-wrap:wrap}.pb\\\\:items-center{align-items:center}.pb\\\\:items-end{align-items:flex-end}.pb\\\\:justify-between{justify-content:space-between}.pb\\\\:justify-center{justify-content:center}.pb\\\\:justify-end{justify-content:flex-end}.pb\\\\:gap-1{gap:calc(var(--pb-spacing) * 1)}.pb\\\\:gap-1\\\\.5{gap:calc(var(--pb-spacing) * 1.5)}.pb\\\\:gap-2{gap:calc(var(--pb-spacing) * 2)}.pb\\\\:gap-4{gap:calc(var(--pb-spacing) * 4)}.pb\\\\:gap-6{gap:calc(var(--pb-spacing) * 6)}.pb\\\\:gap-8{gap:calc(var(--pb-spacing) * 8)}.pb\\\\:gap-10{gap:calc(var(--pb-spacing) * 10)}.pb\\\\:gap-12{gap:calc(var(--pb-spacing) * 12)}.pb\\\\:gap-16{gap:calc(var(--pb-spacing) * 16)}.pb\\\\:space-y-1{:where(&>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--pb-spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--pb-spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}}.pb\\\\:space-y-2{:where(&>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--pb-spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--pb-spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}}.pb\\\\:space-y-3{:where(&>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--pb-spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--pb-spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}}.pb\\\\:space-y-4{:where(&>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--pb-spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--pb-spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}}.pb\\\\:space-y-6{:where(&>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--pb-spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--pb-spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}}.pb\\\\:space-y-8{:where(&>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--pb-spacing) * 8) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--pb-spacing) * 8) * calc(1 - var(--tw-space-y-reverse)))}}.pb\\\\:space-x-1{:where(&>:not(:last-child)){--tw-space-x-reverse: 0;margin-inline-start:calc(calc(var(--pb-spacing) * 1) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--pb-spacing) * 1) * calc(1 - var(--tw-space-x-reverse)))}}.pb\\\\:space-x-2{:where(&>:not(:last-child)){--tw-space-x-reverse: 0;margin-inline-start:calc(calc(var(--pb-spacing) * 2) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--pb-spacing) * 2) * calc(1 - var(--tw-space-x-reverse)))}}.pb\\\\:space-x-4{:where(&>:not(:last-child)){--tw-space-x-reverse: 0;margin-inline-start:calc(calc(var(--pb-spacing) * 4) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--pb-spacing) * 4) * calc(1 - var(--tw-space-x-reverse)))}}.pb\\\\:overflow-auto{overflow:auto}.pb\\\\:overflow-hidden{overflow:hidden}.pb\\\\:overflow-x-auto{overflow-x:auto}.pb\\\\:rounded{border-radius:.25rem}.pb\\\\:rounded-full{border-radius:calc(infinity * 1px)}.pb\\\\:rounded-lg{border-radius:var(--pb-radius-lg)}.pb\\\\:rounded-md{border-radius:var(--pb-radius-md)}.pb\\\\:rounded-sm{border-radius:var(--pb-radius-sm)}.pb\\\\:rounded-l-md{border-top-left-radius:var(--pb-radius-md);border-bottom-left-radius:var(--pb-radius-md)}.pb\\\\:rounded-r-md{border-top-right-radius:var(--pb-radius-md);border-bottom-right-radius:var(--pb-radius-md)}.pb\\\\:border{border-style:var(--tw-border-style);border-width:1px}.pb\\\\:border-0{border-style:var(--tw-border-style);border-width:0px}.pb\\\\:border-2{border-style:var(--tw-border-style);border-width:2px}.pb\\\\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.pb\\\\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.pb\\\\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.pb\\\\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.pb\\\\:border-dotted{--tw-border-style: dotted;border-style:dotted}.pb\\\\:border-solid{--tw-border-style: solid;border-style:solid}.pb\\\\:border-gray-100{border-color:var(--pb-color-gray-100)}.pb\\\\:border-gray-200{border-color:var(--pb-color-gray-200)}.pb\\\\:border-gray-300{border-color:var(--pb-color-gray-300)}.pb\\\\:border-gray-400{border-color:var(--pb-color-gray-400)}.pb\\\\:border-primary{border-color:var(--pb-color-primary)}.pb\\\\:border-red-700{border-color:var(--pb-color-red-700)}.pb\\\\:border-transparent{border-color:transparent}.pb\\\\:bg-black\\\\/40{background-color:var(--pb-color-black);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-black) 40%,transparent)}}.pb\\\\:bg-danger{background-color:var(--pb-color-danger)}.pb\\\\:bg-gray-50{background-color:var(--pb-color-gray-50)}.pb\\\\:bg-gray-50\\\\/50{background-color:var(--pb-color-gray-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-gray-50) 50%,transparent)}}.pb\\\\:bg-gray-100{background-color:var(--pb-color-gray-100)}.pb\\\\:bg-gray-200{background-color:var(--pb-color-gray-200)}.pb\\\\:bg-gray-200\\\\/50{background-color:var(--pb-color-gray-200);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-gray-200) 50%,transparent)}}.pb\\\\:bg-primary{background-color:var(--pb-color-primary)}.pb\\\\:bg-primary\\\\/5{background-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-primary) 5%,transparent)}}.pb\\\\:bg-primary\\\\/10{background-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-primary) 10%,transparent)}}.pb\\\\:bg-primary\\\\/30{background-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-primary) 30%,transparent)}}.pb\\\\:bg-transparent{background-color:transparent}.pb\\\\:bg-white{background-color:var(--pb-color-white)}.pb\\\\:fill-white{fill:var(--pb-color-white)}.pb\\\\:stroke-gray-200{stroke:var(--pb-color-gray-200)}.pb\\\\:p-0{padding:calc(var(--pb-spacing) * 0)}.pb\\\\:p-1{padding:calc(var(--pb-spacing) * 1)}.pb\\\\:p-2{padding:calc(var(--pb-spacing) * 2)}.pb\\\\:p-3{padding:calc(var(--pb-spacing) * 3)}.pb\\\\:p-4{padding:calc(var(--pb-spacing) * 4)}.pb\\\\:p-6{padding:calc(var(--pb-spacing) * 6)}.pb\\\\:p-8{padding:calc(var(--pb-spacing) * 8)}.pb\\\\:p-12{padding:calc(var(--pb-spacing) * 12)}.pb\\\\:px-1{padding-inline:calc(var(--pb-spacing) * 1)}.pb\\\\:px-1\\\\.5{padding-inline:calc(var(--pb-spacing) * 1.5)}.pb\\\\:px-2{padding-inline:calc(var(--pb-spacing) * 2)}.pb\\\\:px-3{padding-inline:calc(var(--pb-spacing) * 3)}.pb\\\\:px-4{padding-inline:calc(var(--pb-spacing) * 4)}.pb\\\\:px-6{padding-inline:calc(var(--pb-spacing) * 6)}.pb\\\\:py-1{padding-block:calc(var(--pb-spacing) * 1)}.pb\\\\:py-1\\\\.5{padding-block:calc(var(--pb-spacing) * 1.5)}.pb\\\\:py-2{padding-block:calc(var(--pb-spacing) * 2)}.pb\\\\:py-3{padding-block:calc(var(--pb-spacing) * 3)}.pb\\\\:py-4{padding-block:calc(var(--pb-spacing) * 4)}.pb\\\\:pt-4{padding-top:calc(var(--pb-spacing) * 4)}.pb\\\\:pr-3{padding-right:calc(var(--pb-spacing) * 3)}.pb\\\\:pr-4{padding-right:calc(var(--pb-spacing) * 4)}.pb\\\\:pr-9{padding-right:calc(var(--pb-spacing) * 9)}.pb\\\\:pr-10{padding-right:calc(var(--pb-spacing) * 10)}.pb\\\\:pb-1{padding-bottom:calc(var(--pb-spacing) * 1)}.pb\\\\:pb-2{padding-bottom:calc(var(--pb-spacing) * 2)}.pb\\\\:pl-3{padding-left:calc(var(--pb-spacing) * 3)}.pb\\\\:pl-10{padding-left:calc(var(--pb-spacing) * 10)}.pb\\\\:text-center{text-align:center}.pb\\\\:text-left{text-align:left}.pb\\\\:align-middle{vertical-align:middle}.pb\\\\:text-2xl{font-size:var(--pb-text-2xl);line-height:var(--tw-leading, var(--pb-text-2xl--line-height))}.pb\\\\:text-3xl{font-size:var(--pb-text-3xl);line-height:var(--tw-leading, var(--pb-text-3xl--line-height))}.pb\\\\:text-4xl{font-size:var(--pb-text-4xl);line-height:var(--tw-leading, var(--pb-text-4xl--line-height))}.pb\\\\:text-base{font-size:var(--pb-text-base);line-height:var(--tw-leading, var(--pb-text-base--line-height))}.pb\\\\:text-lg{font-size:var(--pb-text-lg);line-height:var(--tw-leading, var(--pb-text-lg--line-height))}.pb\\\\:text-sm{font-size:var(--pb-text-sm);line-height:var(--tw-leading, var(--pb-text-sm--line-height))}.pb\\\\:text-xl{font-size:var(--pb-text-xl);line-height:var(--tw-leading, var(--pb-text-xl--line-height))}.pb\\\\:text-xs{font-size:var(--pb-text-xs);line-height:var(--tw-leading, var(--pb-text-xs--line-height))}.pb\\\\:text-\\\\[10px\\\\]{font-size:10px}.pb\\\\:leading-6{--tw-leading: calc(var(--pb-spacing) * 6);line-height:calc(var(--pb-spacing) * 6)}.pb\\\\:leading-none{--tw-leading: 1;line-height:1}.pb\\\\:font-bold{--tw-font-weight: var(--pb-font-weight-bold);font-weight:var(--pb-font-weight-bold)}.pb\\\\:font-medium{--tw-font-weight: var(--pb-font-weight-medium);font-weight:var(--pb-font-weight-medium)}.pb\\\\:font-normal{--tw-font-weight: var(--pb-font-weight-normal);font-weight:var(--pb-font-weight-normal)}.pb\\\\:tracking-wider{--tw-tracking: var(--pb-tracking-wider);letter-spacing:var(--pb-tracking-wider)}.pb\\\\:whitespace-normal{white-space:normal}.pb\\\\:whitespace-nowrap{white-space:nowrap}.pb\\\\:text-black{color:var(--pb-color-black)}.pb\\\\:text-blue-500{color:var(--pb-color-blue-500)}.pb\\\\:text-dark-primary{color:var(--pb-color-dark-primary)}.pb\\\\:text-gray-400{color:var(--pb-color-gray-400)}.pb\\\\:text-gray-500{color:var(--pb-color-gray-500)}.pb\\\\:text-gray-600{color:var(--pb-color-gray-600)}.pb\\\\:text-gray-700{color:var(--pb-color-gray-700)}.pb\\\\:text-gray-800{color:var(--pb-color-gray-800)}.pb\\\\:text-gray-900{color:var(--pb-color-gray-900)}.pb\\\\:text-green-500{color:var(--pb-color-green-500)}.pb\\\\:text-primary{color:var(--pb-color-primary)}.pb\\\\:text-red-500{color:var(--pb-color-red-500)}.pb\\\\:text-red-600{color:var(--pb-color-red-600)}.pb\\\\:text-red-700{color:var(--pb-color-red-700)}.pb\\\\:text-slate-400{color:var(--pb-color-slate-400)}.pb\\\\:text-slate-500{color:var(--pb-color-slate-500)}.pb\\\\:text-slate-600{color:var(--pb-color-slate-600)}.pb\\\\:text-slate-950{color:var(--pb-color-slate-950)}.pb\\\\:text-teal-700{color:var(--pb-color-teal-700)}.pb\\\\:uppercase{text-transform:uppercase}.pb\\\\:italic{font-style:italic}.pb\\\\:underline{text-decoration-line:underline}.pb\\\\:decoration-dotted{text-decoration-style:dotted}.pb\\\\:underline-offset-4{text-underline-offset:4px}.pb\\\\:opacity-0{opacity:0%}.pb\\\\:opacity-10{opacity:10%}.pb\\\\:opacity-25{opacity:25%}.pb\\\\:opacity-50{opacity:50%}.pb\\\\:opacity-75{opacity:75%}.pb\\\\:shadow{--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pb\\\\:shadow-inner{--tw-shadow: inset 0 2px 4px 0 var(--tw-shadow-color, rgb(0 0 0 / .05));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pb\\\\:shadow-lg{--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pb\\\\:shadow-md{--tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pb\\\\:shadow-sm{--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pb\\\\:shadow-xl{--tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.pb\\\\:ring-0{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(0px + 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)}.pb\\\\: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)}.pb\\\\:ring-black{--tw-ring-color: var(--pb-color-black)}.pb\\\\:ring-gray-300{--tw-ring-color: var(--pb-color-gray-300)}.pb\\\\: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(--pb-default-transition-timing-function));transition-duration:var(--tw-duration, var(--pb-default-transition-duration))}.pb\\\\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease, var(--pb-default-transition-timing-function));transition-duration:var(--tw-duration, var(--pb-default-transition-duration))}.pb\\\\: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(--pb-default-transition-timing-function));transition-duration:var(--tw-duration, var(--pb-default-transition-duration))}.pb\\\\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease, var(--pb-default-transition-timing-function));transition-duration:var(--tw-duration, var(--pb-default-transition-duration))}.pb\\\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease, var(--pb-default-transition-timing-function));transition-duration:var(--tw-duration, var(--pb-default-transition-duration))}.pb\\\\:delay-150{transition-delay:.15s}.pb\\\\:duration-200{--tw-duration: .2s;transition-duration:.2s}.pb\\\\:duration-300{--tw-duration: .3s;transition-duration:.3s}.pb\\\\:ease-in-out{--tw-ease: var(--pb-ease-in-out);transition-timing-function:var(--pb-ease-in-out)}.pb\\\\:outline-none{--tw-outline-style: none;outline-style:none}.pb\\\\:select-none{-webkit-user-select:none;user-select:none}.pb\\\\:ring-inset{--tw-ring-inset: inset}.pb\\\\:group-focus-within\\\\:text-gray-800{&:is(:where(.pb\\\\:group):focus-within *){color:var(--pb-color-gray-800)}}.pb\\\\:placeholder\\\\:text-gray-400{&::placeholder{color:var(--pb-color-gray-400)}}.pb\\\\:focus-within\\\\:ring-2{&:focus-within{--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)}}.pb\\\\:focus-within\\\\:ring-primary{&:focus-within{--tw-ring-color: var(--pb-color-primary)}}.pb\\\\:hover\\\\:scale-110{&:hover{@media(hover:hover){--tw-scale-x: 110%;--tw-scale-y: 110%;--tw-scale-z: 110%;scale:var(--tw-scale-x) var(--tw-scale-y)}}}.pb\\\\:hover\\\\:border-primary{&:hover{@media(hover:hover){border-color:var(--pb-color-primary)}}}.pb\\\\:hover\\\\:bg-danger\\\\/10{&:hover{@media(hover:hover){background-color:var(--pb-color-danger);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-danger) 10%,transparent)}}}}.pb\\\\:hover\\\\:bg-dark-primary{&:hover{@media(hover:hover){background-color:var(--pb-color-dark-primary)}}}.pb\\\\:hover\\\\:bg-gray-100{&:hover{@media(hover:hover){background-color:var(--pb-color-gray-100)}}}.pb\\\\:hover\\\\:bg-gray-100\\\\/50{&:hover{@media(hover:hover){background-color:var(--pb-color-gray-100);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-gray-100) 50%,transparent)}}}}.pb\\\\:hover\\\\:bg-gray-200{&:hover{@media(hover:hover){background-color:var(--pb-color-gray-200)}}}.pb\\\\:hover\\\\:bg-primary\\\\/5{&:hover{@media(hover:hover){background-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-primary) 5%,transparent)}}}}.pb\\\\:hover\\\\:bg-transparent{&:hover{@media(hover:hover){background-color:transparent}}}.pb\\\\:hover\\\\:text-gray-700{&:hover{@media(hover:hover){color:var(--pb-color-gray-700)}}}.pb\\\\:hover\\\\:text-gray-900{&:hover{@media(hover:hover){color:var(--pb-color-gray-900)}}}.pb\\\\:hover\\\\:text-teal-900{&:hover{@media(hover:hover){color:var(--pb-color-teal-900)}}}.pb\\\\:hover\\\\:opacity-10{&:hover{@media(hover:hover){opacity:10%}}}.pb\\\\:hover\\\\:opacity-80{&:hover{@media(hover:hover){opacity:80%}}}.pb\\\\:focus\\\\:ring-0{&:focus{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(0px + 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)}}.pb\\\\:focus\\\\:ring-2{&:focus{--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)}}.pb\\\\:focus\\\\:ring-primary{&:focus{--tw-ring-color: var(--pb-color-primary)}}.pb\\\\:focus\\\\:ring-offset-2{&:focus{--tw-ring-offset-width: 2px;--tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}}.pb\\\\:focus\\\\:outline-none{&:focus{--tw-outline-style: none;outline-style:none}}.pb\\\\:focus\\\\:ring-inset{&:focus{--tw-ring-inset: inset}}.pb\\\\:focus-visible\\\\:ring-2{&: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)}}.pb\\\\:focus-visible\\\\:ring-primary{&:focus-visible{--tw-ring-color: var(--pb-color-primary)}}.pb\\\\:focus-visible\\\\:ring-offset-2{&:focus-visible{--tw-ring-offset-width: 2px;--tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}}.pb\\\\:focus-visible\\\\:outline-none{&:focus-visible{--tw-outline-style: none;outline-style:none}}.pb\\\\:disabled\\\\:cursor-not-allowed{&:disabled{cursor:not-allowed}}.pb\\\\:disabled\\\\:border-gray-400{&:disabled{border-color:var(--pb-color-gray-400)}}.pb\\\\:disabled\\\\:bg-gray-400{&:disabled{background-color:var(--pb-color-gray-400)}}.pb\\\\:disabled\\\\:text-gray-400{&:disabled{color:var(--pb-color-gray-400)}}.pb\\\\:disabled\\\\:opacity-50{&:disabled{opacity:50%}}.pb\\\\:disabled\\\\:hover\\\\:bg-gray-300{&:disabled{&:hover{@media(hover:hover){background-color:var(--pb-color-gray-300)}}}}.pb\\\\:disabled\\\\:hover\\\\:bg-transparent{&:disabled{&:hover{@media(hover:hover){background-color:transparent}}}}.pb\\\\:disabled\\\\:hover\\\\:text-gray-600{&:disabled{&:hover{@media(hover:hover){color:var(--pb-color-gray-600)}}}}.pb\\\\:data-\\\\[checked\\\\]\\\\:translate-x-5{&[data-checked]{--tw-translate-x: calc(var(--pb-spacing) * 5);translate:var(--tw-translate-x) var(--tw-translate-y)}}.pb\\\\:data-\\\\[checked\\\\]\\\\:bg-primary{&[data-checked]{background-color:var(--pb-color-primary)}}.pb\\\\:data-\\\\[highlighted\\\\]\\\\:bg-gray-100{&[data-highlighted]{background-color:var(--pb-color-gray-100)}}.pb\\\\:data-\\\\[highlighted\\\\]\\\\:text-gray-900{&[data-highlighted]{color:var(--pb-color-gray-900)}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:bg-danger\\\\/20{&[data-pressed]{background-color:var(--pb-color-danger);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-danger) 20%,transparent)}}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:bg-primary\\\\/20{&[data-pressed]{background-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-primary) 20%,transparent)}}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:bg-white{&[data-pressed]{background-color:var(--pb-color-white)}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:text-gray-900{&[data-pressed]{color:var(--pb-color-gray-900)}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:shadow-sm{&[data-pressed]{--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:ring-1{&[data-pressed]{--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)}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:ring-danger{&[data-pressed]{--tw-ring-color: var(--pb-color-danger)}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:ring-gray-200{&[data-pressed]{--tw-ring-color: var(--pb-color-gray-200)}}.pb\\\\:data-\\\\[pressed\\\\]\\\\:ring-primary{&[data-pressed]{--tw-ring-color: var(--pb-color-primary)}}.pb\\\\:data-\\\\[state\\\\=checked\\\\]\\\\:border-primary{&[data-state=checked]{border-color:var(--pb-color-primary)}}.pb\\\\:data-\\\\[state\\\\=checked\\\\]\\\\:bg-primary{&[data-state=checked]{background-color:var(--pb-color-primary)}}.pb\\\\:data-\\\\[state\\\\=checked\\\\]\\\\:text-white{&[data-state=checked]{color:var(--pb-color-white)}}.pb\\\\:data-\\\\[unchecked\\\\]\\\\:translate-x-0{&[data-unchecked]{--tw-translate-x: calc(var(--pb-spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}}.pb\\\\:data-\\\\[unchecked\\\\]\\\\:bg-gray-200{&[data-unchecked]{background-color:var(--pb-color-gray-200)}}.pb\\\\:sm\\\\:m-4{@media(width>=40rem){margin:calc(var(--pb-spacing) * 4)}}.pb\\\\:sm\\\\:flex-nowrap{@media(width>=40rem){flex-wrap:nowrap}}.pb\\\\:sm\\\\:text-sm{@media(width>=40rem){font-size:var(--pb-text-sm);line-height:var(--tw-leading, var(--pb-text-sm--line-height))}}.pb\\\\:sm\\\\:leading-6{@media(width>=40rem){--tw-leading: calc(var(--pb-spacing) * 6);line-height:calc(var(--pb-spacing) * 6)}}.pb\\\\:md\\\\:m-10{@media(width>=48rem){margin:calc(var(--pb-spacing) * 10)}}.pb\\\\:md\\\\:grid-cols-3{@media(width>=48rem){grid-template-columns:repeat(3,minmax(0,1fr))}}.pb\\\\:lg\\\\:grid-cols-4{@media(width>=64rem){grid-template-columns:repeat(4,minmax(0,1fr))}}.pb\\\\:lg\\\\:grid-cols-5{@media(width>=64rem){grid-template-columns:repeat(5,minmax(0,1fr))}}}.range-vertical{writing-mode:vertical-lr}.pb-tooltip,.pb-tooltip-slow{visibility:hidden;position:absolute;opacity:0%}.pb-has-tooltip:hover+.pb-tooltip{visibility:visible;z-index:50;opacity:100%;transition-property:opacity;transition-timing-function:var(--tw-ease, var(--pb-default-transition-timing-function));transition-duration:var(--tw-duration, var(--pb-default-transition-duration));transition-delay:.3s;--tw-ease: var(--pb-ease-in-out);transition-timing-function:var(--pb-ease-in-out)}.pb-has-tooltip:hover+.pb-tooltip-slow{visibility:visible;z-index:50;opacity:100%;transition-property:opacity;transition-timing-function:var(--tw-ease, var(--pb-default-transition-timing-function));transition-duration:var(--tw-duration, var(--pb-default-transition-duration));transition-delay:1s;--tw-ease: var(--pb-ease-in-out);transition-timing-function:var(--pb-ease-in-out)}@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-rotate-x{syntax: \\\"*\\\"; inherits: false;}@property --tw-rotate-y{syntax: \\\"*\\\"; inherits: false;}@property --tw-rotate-z{syntax: \\\"*\\\"; inherits: false;}@property --tw-skew-x{syntax: \\\"*\\\"; inherits: false;}@property --tw-skew-y{syntax: \\\"*\\\"; inherits: false;}@property --tw-space-y-reverse{syntax: \\\"*\\\"; inherits: false; initial-value: 0;}@property --tw-space-x-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-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: 0px;}@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-scale-x{syntax: \\\"*\\\"; inherits: false; initial-value: 1;}@property --tw-scale-y{syntax: \\\"*\\\"; inherits: false; initial-value: 1;}@property --tw-scale-z{syntax: \\\"*\\\"; inherits: false; initial-value: 1;}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@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-rotate-x: initial;--tw-rotate-y: initial;--tw-rotate-z: initial;--tw-skew-x: initial;--tw-skew-y: initial;--tw-space-y-reverse: 0;--tw-space-x-reverse: 0;--tw-border-style: solid;--tw-leading: initial;--tw-font-weight: initial;--tw-tracking: 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-scale-x: 1;--tw-scale-y: 1;--tw-scale-z: 1}}}\\n\")","import { Button as BaseButton } from \"@base-ui/react\";\nimport React from \"react\";\nimport { cn } from \"./utils\";\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: \"primary\" | \"secondary\" | \"danger\" | \"ghost\" | \"ghostly-danger\";\n size?: \"sm\" | \"md\" | \"lg\";\n isLoading?: boolean;\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n render?: BaseButton.Props[\"render\"];\n nativeButton?: boolean;\n isIconOnly?: boolean;\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant = \"primary\",\n size = \"md\",\n isLoading = false,\n leftIcon,\n rightIcon,\n children,\n disabled,\n render,\n nativeButton,\n isIconOnly,\n ...props\n },\n ref,\n ) => {\n const isActuallyIconOnly =\n isIconOnly || (!children && (!!leftIcon || !!rightIcon));\n\n const variants = {\n primary:\n \"pb:bg-primary pb:hover:bg-dark-primary pb:text-gray-900 pb:shadow-sm pb:border pb:border-transparent pb:font-bold pb:disabled:bg-gray-400 pb:disabled:hover:bg-gray-300\",\n secondary:\n \"pb:bg-gray-100 pb:hover:bg-gray-200 pb:text-gray-800 pb:border pb:border-gray-200 pb:border pb:font-normal pb:disabled:bg-gray-400 pb:disabled:hover:bg-gray-300\",\n danger:\n \"pb:bg-danger pb:hover:opacity-80 pb:text-gray-900 pb:shadow-sm pb:border pb:border-transparent pb:font-bold pb:disabled:bg-gray-400 pb:disabled:hover:bg-gray-300\",\n ghost:\n \"pb:bg-transparent pb:hover:bg-gray-100 pb:text-gray-700 pb:hover:text-gray-900 pb:font-medium\",\n \"ghostly-danger\":\n \"pb:bg-transparent pb:hover:bg-danger/10 pb:text-red-700 pb:border pb:border-red-700 pb:font-medium pb:disabled:border-gray-400 pb:disabled:text-gray-400\",\n };\n\n const sizes = {\n sm: isActuallyIconOnly ? \"pb:p-1 pb:text-xs\" : \"pb:px-2 pb:py-1 pb:text-xs\",\n md: isActuallyIconOnly ? \"pb:p-2 pb:text-sm\" : \"pb:px-4 pb:py-2 pb:text-sm\",\n lg: isActuallyIconOnly ? \"pb:p-3 pb:text-base\" : \"pb:px-6 pb:py-3 pb:text-base\",\n };\n\n return (\n <BaseButton\n ref={ref}\n render={render}\n nativeButton={nativeButton}\n className={cn(\n \"pb:inline-flex pb:items-center pb:justify-center pb:rounded-md pb:transition-colors pb:focus:outline-none pb:focus:ring-2 pb:focus:ring-primary pb:focus:ring-offset-2 pb:disabled:cursor-not-allowed pb:cursor-pointer\",\n variants[variant],\n sizes[size],\n className,\n )}\n disabled={disabled || isLoading}\n {...props}\n >\n {isLoading && (\n <svg\n className={cn(\n \"pb:animate-spin pb:h-4 pb:w-4\",\n !isActuallyIconOnly && \"pb:mr-2 pb:-ml-1\",\n )}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"pb:opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n ></circle>\n <path\n className=\"pb:opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n ></path>\n </svg>\n )}\n {!isLoading && leftIcon && (\n <span\n className={cn(\n \"pb:inline-flex pb:items-center pb:justify-center\",\n !isActuallyIconOnly && \"pb:mr-2 pb:-ml-1\",\n )}\n >\n {leftIcon}\n </span>\n )}\n {children}\n {!isLoading && rightIcon && (\n <span\n className={cn(\n \"pb:inline-flex pb:items-center pb:justify-center\",\n !isActuallyIconOnly && \"pb:ml-2 pb:-mr-1\",\n )}\n >\n {rightIcon}\n </span>\n )}\n </BaseButton>\n );\n },\n);\n\nButton.displayName = \"Button\";\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { Input as BaseInput } from \"@base-ui/react\";\nimport React from \"react\";\nimport { cn } from \"./utils\";\n\nexport interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, leftIcon, rightIcon, id, ...props }, ref) => {\n const inputClasses = cn(\n \"pb:block pb:w-full pb:rounded-md pb:border-0 pb:px-1.5 pb:py-1.5 pb:text-gray-900 pb:shadow-sm pb:ring-1 pb:ring-inset pb:ring-gray-300 pb:placeholder:text-gray-400 pb:focus:ring-2 pb:focus:ring-inset pb:focus:ring-primary pb:sm:text-sm pb:sm:leading-6 pb:bg-primary/10 pb:appearance-none\",\n leftIcon && \"pb:pl-10\",\n rightIcon && \"pb:pr-10\",\n className,\n );\n\n if (!leftIcon && !rightIcon) {\n return (\n <BaseInput ref={ref} id={id} className={inputClasses} {...props} />\n );\n }\n\n return (\n <div className=\"pb:relative\">\n {leftIcon && (\n <div className=\"pb:pointer-events-none pb:absolute pb:inset-y-0 pb:left-0 pb:flex pb:items-center pb:pl-3\">\n <span className=\"pb:text-gray-500 pb:sm:text-sm\">{leftIcon}</span>\n </div>\n )}\n <BaseInput ref={ref} id={id} className={inputClasses} {...props} />\n {rightIcon && (\n <div className=\"pb:pointer-events-none pb:absolute pb:inset-y-0 pb:right-0 pb:flex pb:items-center pb:pr-3\">\n <span className=\"pb:text-gray-500 pb:sm:text-sm\">{rightIcon}</span>\n </div>\n )}\n </div>\n );\n },\n);\n\nInput.displayName = \"Input\";\n","import React from \"react\";\nimport { Select as BaseSelect } from \"@base-ui/react\";\nimport { cn } from \"./utils\";\nimport { Icon } from \"./Icon\";\n\nexport interface SelectOption {\n label: string;\n value: string | number;\n}\n\nexport interface SelectProps {\n options: (string | SelectOption)[];\n value?: string | number;\n defaultValue?: string | number;\n onChange?: (value: string | number | null, event: Event) => void;\n disabled?: boolean;\n placeholder?: string;\n className?: string;\n id?: string;\n onFocus?: React.FocusEventHandler<HTMLButtonElement>;\n}\n\nexport const Select = React.forwardRef<HTMLButtonElement, SelectProps>(\n (\n {\n className,\n options,\n id: propsId,\n value,\n defaultValue,\n onChange,\n disabled,\n placeholder = \"Select...\",\n onFocus,\n ...props\n },\n ref,\n ) => {\n const generatedId = React.useId();\n const selectId = propsId || generatedId;\n\n return (\n <div className=\"pb:w-full\">\n <BaseSelect.Root\n value={value === undefined ? null : String(value)}\n defaultValue={\n defaultValue === undefined ? undefined : String(defaultValue)\n }\n onValueChange={(\n val: string | null,\n details?: { event: Event } | null,\n ) => {\n if (onChange) {\n // Base UI Select passes eventDetails as the second argument, which has an 'event' property.\n const event = details?.event || (details as unknown as Event);\n onChange(val, event);\n }\n }}\n disabled={disabled}\n >\n <BaseSelect.Trigger\n ref={ref}\n id={selectId}\n className={cn(\n \"pb:flex pb:w-full pb:items-center pb:justify-between pb:rounded-md pb:border-0 pb:py-1.5 pb:pl-3 pb:pr-3 pb:text-gray-900 pb:ring-1 pb:ring-inset pb:ring-gray-300 pb:focus:ring-2 pb:focus:ring-primary pb:sm:text-sm pb:sm:leading-6 pb:bg-primary/10 pb:min-h-[36px]\",\n disabled && \"pb:opacity-50 pb:cursor-not-allowed\",\n className,\n )}\n onFocus={onFocus}\n {...props}\n >\n <BaseSelect.Value placeholder={placeholder} />\n <BaseSelect.Icon>\n <Icon size=\"sm\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"m19.5 8.25-7.5 7.5-7.5-7.5\"\n />\n </Icon>\n </BaseSelect.Icon>\n </BaseSelect.Trigger>\n <BaseSelect.Portal>\n <BaseSelect.Positioner\n sideOffset={4}\n className=\"pb:z-50 pb:w-[var(--anchor-width)]\"\n >\n <BaseSelect.Popup className=\"pb:max-h-60 pb:overflow-auto pb:rounded-md pb:bg-white pb:py-1 pb:text-base pb:shadow-lg pb:ring-1 pb:ring-black pb:ring-opacity-5 focus:pb:outline-none pb:sm:text-sm\">\n {options.map((option, index) => {\n const label =\n typeof option === \"object\" ? option.label : option;\n const value =\n typeof option === \"object\" ? option.value : option;\n return (\n <BaseSelect.Item\n key={`${value}-${index}`}\n value={value}\n className=\"pb:relative pb:cursor-default pb:select-none pb:py-2 pb:pl-3 pb:pr-9 pb:text-gray-900 pb:hover:bg-gray-100 data-[highlighted]:pb:bg-gray-100 data-[selected]:pb:font-semibold\"\n >\n <BaseSelect.ItemText>{label}</BaseSelect.ItemText>\n <BaseSelect.ItemIndicator className=\"pb:absolute pb:inset-y-0 pb:right-0 pb:flex pb:items-center pb:pr-4 pb:text-primary\">\n <Icon size=\"sm\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M4.5 12.75l6 6 9-13.5\"\n />\n </Icon>\n </BaseSelect.ItemIndicator>\n </BaseSelect.Item>\n );\n })}\n </BaseSelect.Popup>\n </BaseSelect.Positioner>\n </BaseSelect.Portal>\n </BaseSelect.Root>\n </div>\n );\n },\n);\n\nSelect.displayName = \"Select\";\n","import React from \"react\";\nimport { cn } from \"./utils\";\nimport { IconName, icons } from \"./IconRegistry\";\n\nexport type { IconName };\n\nexport interface IconProps extends React.SVGProps<SVGSVGElement> {\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n name?: IconName;\n}\n\nexport const Icon = React.forwardRef<SVGSVGElement, IconProps>(\n ({ className, size = \"md\", name, children, ...props }, ref) => {\n const sizes = {\n sm: \"pb:w-3 pb:h-3\",\n md: \"pb:w-4 pb:h-4\",\n lg: \"pb:w-6 pb:h-6\",\n xl: \"pb:w-8 pb:h-8\",\n };\n\n const iconContent = name ? icons[name] : children;\n\n return (\n <svg\n ref={ref}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cn(sizes[size], \"pb:inline-block\", className)}\n {...props}\n >\n {iconContent}\n </svg>\n );\n },\n);\n\nIcon.displayName = \"Icon\";\n","import React from \"react\";\n\n/**\n * Raw path data for icons, useful for non-React contexts (like PixiJS Graphics.svg)\n */\nexport const iconPaths = {\n check: \"M20 6 9 17l-5-5\",\n x: \"M18 6 6 18M6 6l12 12\",\n edit: \"M16.862 4.487l1.687-1.688a1.875 1.875 0 112.652 2.652L6.832 19.82a4.5 4.5 0 01-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 011.13-1.897L16.863 4.487zm0 0L19.5 7.125\",\n close: \"M6 18L18 6M6 6l12 12\",\n plus: \"M12 4.5v15m7.5-7.5h-15\",\n arrowDown: \"M19.5 13.5L12 21m0 0l-7.5-7.5M12 21V3\", // Points DOWN\n arrowUp: \"M4.5 10.5L12 3m0 0l7.5 7.5M12 3v18\", // Points UP\n clipboard:\n \"M15.75 17.25v3.375c0 .621-.504 1.125-1.125 1.125h-9.75a1.125 1.125 0 0 1-1.125-1.125V7.875c0-.621.504-1.125 1.125-1.125H6.75a9.06 9.06 0 0 1 1.5.124m7.5 10.376h3.375c.621 0 1.125-.504 1.125-1.125V11.25c0-4.46-3.243-8.161-7.5-8.876a9.06 9.06 0 0 0-1.5-.124H9.375c-.621 0-1.125.504-1.125 1.125v3.5m7.5 10.375H9.375a1.125 1.125 0 0 1-1.125-1.125v-9.25m12 6.625v-1.875a3.375 3.375 0 0 0-3.375-3.375h-1.5a1.125 1.125 0 0 1-1.125-1.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H9.75\",\n cloudArrowUp:\n \"M12 16.5V9.75m0 0 3 3m-3-3-3 3M6.75 19.5a4.5 4.5 0 0 1-1.41-8.775 5.25 5.25 0 0 1 10.233-2.33 3 3 0 0 1 3.758 3.848A3.752 3.752 0 0 1 18 19.5H6.75Z\",\n arrowDownToLine: \"M9 12l3 3m0 0 3-3m-3 3V2.25\",\n folder:\n \"M9 8.25H7.5a2.25 2.25 0 0 0-2.25 2.25v9a2.25 2.25 0 0 0 2.25 2.25h9a2.25 2.25 0 0 0 2.25-2.25v-9a2.25 2.25 0 0 0-2.25-2.25H15m0-3-3-3m0 0-3 3m3-3V15\",\n arrowUpFromLine:\n \"M9 8.25H7.5a2.25 2.25 0 0 0-2.25 2.25v9a2.25 2.25 0 0 0 2.25 2.25h9a2.25 2.25 0 0 0 2.25-2.25v-9a2.25 2.25 0 0 0-2.25-2.25H15m0-3-3-3m0 0-3 3m3-3V15\",\n squares:\n \"M2.25 7.125C2.25 6.504 2.754 6 3.375 6h6c.621 0 1.125.504 1.125 1.125v3.75c0 .621-.504 1.125-1.125 1.125h-6a1.125 1.125 0 0 1-1.125-1.125v-3.75ZM14.25 8.625c0-.621.504-1.125 1.125-1.125h5.25c.621 0 1.125.504 1.125 1.125v8.25c0 .621-.504 1.125-1.125 1.125h-5.25a1.125 1.125 0 0 1-1.125-1.125v-8.25ZM3.75 16.125c0-.621.504-1.125 1.125-1.125h5.25c.621 0 1.125.504 1.125 1.125v2.25c0 .621-.504 1.125-1.125 1.125h-5.25a1.125 1.125 0 0 1-1.125-1.125v-2.25Z\",\n tableCells:\n \"M3.375 19.5h17.25m-17.25 0a1.125 1.125 0 0 1-1.125-1.125M3.375 19.5h7.5c.621 0 1.125-.504 1.125-1.125m-9.75 0V5.625m0 12.75v-1.5c0-.621.504-1.125 1.125-1.125m18.375 2.625V5.625m0 12.75c0 .621-.504 1.125-1.125 1.125m1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125m0 3.75h-7.5A1.125 1.125 0 0 1 12 18.375m9.75-12.75c0-.621-.504-1.125-1.125-1.125H3.375c-.621 0-1.125.504-1.125 1.125m19.5 0v1.5c0 .621-.504 1.125-1.125 1.125M2.25 5.625v1.5c0 .621.504 1.125 1.125 1.125m0 0h17.25m-17.25 0h7.5c.621 0 1.125.504 1.125 1.125M3.375 8.25c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125m17.25-3.75h-7.5c-.621 0-1.125.504-1.125 1.125m8.625-1.125c.621 0 1.125.504 1.125 1.125v1.5c0 .621-.504 1.125-1.125 1.125m-17.25 0h7.5m-7.5 0c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125M12 10.875v-1.5m0 1.5c0 .621-.504 1.125-1.125 1.125M12 10.875c0 .621.504 1.125 1.125 1.125m-2.25 0c.621 0 1.125.504 1.125 1.125M13.125 12h7.5m-7.5 0c-.621 0-1.125.504-1.125 1.125M20.625 12c.621 0 1.125.504 1.125 1.125v1.5c0 .621-.504 1.125-1.125 1.125m-17.25 0h7.5M12 14.625v-1.5m0 1.5c0 .621-.504 1.125-1.125 1.125M12 14.625c0 .621.504 1.125 1.125 1.125m-2.25 0c.621 0 1.125.504 1.125 1.125m0 1.5v-1.5m0 0c0-.621.504-1.125 1.125-1.125m0 0h7.5\",\n arrowsRightLeft:\n \"M7.5 21 3 16.5m0 0L7.5 12M3 16.5h13.5m0-13.5L21 7.5m0 0L16.5 12M21 7.5H7.5\",\n document:\n \"M9 12h3.75M9 15h3.75M9 18h3.75m3 .75H18a2.25 2.25 0 002.25-2.25V6.108c0-1.135-.845-2.098-1.976-2.192a48.424 48.424 0 00-1.123-.08m-5.801 0c-.065.21-.1.433-.1.664 0 .414.336.75.75.75h4.5a.75.75 0 00.75-.75 2.25 2.25 0 00-.1-.664m-5.8 0A2.251 2.251 0 0113.5 2.25H15c1.012 0 1.867.668 2.15 1.586m-5.8 0c-.376.023-.75.05-1.124.08C9.095 4.01 8.25 4.973 8.25 6.108V8.25m0 0H4.875c-.621 0-1.125.504-1.125 1.125v11.25c0 .621.504 1.125 1.125 1.125h9.75c.621 0 1.125-.504 1.125-1.125V9.375c0-.621-.504-1.125-1.125-1.125H8.25zM6.75 12h.008v.008H6.75V12zm0 3h.008v.008H6.75V15zm0 3h.008v.008H6.75V18z\",\n externalLink:\n \"M13.5 6H5.25A2.25 2.25 0 0 0 3 8.25v10.5A2.25 2.25 0 0 0 5.25 21h10.5A2.25 2.25 0 0 0 18 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25\",\n lock: \"M16.5 10.5V6.75a4.5 4.5 0 1 0-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 0 0 2.25-2.25v-6.75a2.25 2.25 0 0 0-2.25-2.25H6.75a2.25 2.25 0 0 0-2.25 2.25v6.75a2.25 2.25 0 0 0 2.25 2.25Z\",\n shoppingCart:\n \"M2.25 3h1.386c.51 0 .955.343 1.087.835l.383 1.437M7.5 14.25a3 3 0 00-3 3h15.75m-12.75-3h11.218c1.121-2.3 2.1-4.684 2.924-7.138a60.114 60.114 0 00-16.536-1.84M7.5 14.25L5.106 5.272M6 20.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm12.75 0a.75.75 0 11-1.5 0 .75.75 0 011.5 0z\",\n minus: \"M5 12h14\",\n pencilSquare:\n \"M21.731 2.269a2.625 2.625 0 0 0-3.712 0l-1.157 1.157 3.712 3.712 1.157-1.157a2.625 2.625 0 0 0 0-3.712ZM19.513 8.199l-3.712-3.712-8.4 8.4a5.25 5.25 0 0 0-1.32 2.214l-.8 2.685a.75.75 0 0 0 .933.933l2.685-.8a5.25 5.25 0 0 0 2.214-1.32l8.4-8.4Z\",\n pencilSquareContinued:\n \"M5.25 5.25a3 3 0 0 0-3 3v10.5a3 3 0 0 0 3 3h10.5a3 3 0 0 0 3-3V13.5a.75.75 0 0 0-1.5 0v5.25a1.5 1.5 0 0 1-1.5 1.5H5.25a1.5 1.5 0 0 1-1.5-1.5V8.25a1.5 1.5 0 0 1 1.5-1.5h5.25a.75.75 0 0 0 0-1.5H5.25Z\",\n chevronUpSmall: \"M4.5 15.75l7.5-7.5 7.5 7.5\", // Points UP\n chevronDownSmall: \"M19.5 8.25l-7.5 7.5-7.5-7.5\", // Points DOWN\n chevronUpTable: \"M8.25 6.75 12 3m0 0 3.75 3.75M12 3v18\", // Points UP\n chevronDownTable: \"M15.75 17.25 12 21m0 0-3.75-3.75M12 21V3\", // Points DOWN\n speakerWave:\n \"M19.114 5.636a9 9 0 010 12.728M16.463 8.288a5.25 5.25 0 010 7.424M6.75 8.25l4.72-4.72a.75.75 0 011.28.53v15.88a.75.75 0 01-1.28.53l-4.72-4.72H4.51c-.88 0-1.704-.507-1.938-1.354A9.01 9.01 0 012.25 12c0-.83.112-1.633.322-2.396C2.806 8.756 3.63 8.25 4.51 8.25H6.75z\",\n zap: \"m3.75 13.5 10.5-11.25L12 10.5h8.25L9.75 21.75 12 13.5H3.75Z\",\n code: \"M17.25 6.75L22.5 12l-5.25 5.25m-10.5 0L1.5 12l5.25-5.25m7.5-3l-4.5 16.5\",\n questionMarkCircle:\n \"M9.879 7.519c1.171-1.025 3.071-1.025 4.242 0 1.172 1.025 1.172 2.687 0 3.712-.203.179-.43.326-.67.442-.745.361-1.45.999-1.45 1.827v.75M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9 5.25h.008v.008H12v-.008z\",\n search:\n \"m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z\",\n exclamationCircle:\n \"M12 9v3.75m9-.75a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9 3.75h.008v.008H12v-.008Z\",\n exclamationTriangle:\n \"M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126ZM12 15.75h.007v.008H12v-.008Z\",\n checkCircle:\n \"M9 12.75 11.25 15 15 9.75M21 12c0 1.268-.63 2.39-1.593 3.068a3.745 3.745 0 0 1-1.043 3.296 3.745 3.745 0 0 1-3.296 1.043A3.745 3.745 0 0 1 12 21c-1.268 0-2.39-.63-3.068-1.593a3.746 3.746 0 0 1-3.296-1.043 3.745 3.745 0 0 1-1.043-3.296A3.745 3.745 0 0 1 3 12c0-1.268.63-2.39 1.593-3.068a3.745 3.745 0 0 1 1.043-3.296 3.746 3.746 0 0 1 3.296-1.043A3.746 3.746 0 0 1 12 3c1.268 0 2.39.63 3.068 1.593a3.746 3.746 0 0 1 3.296 1.043 3.746 3.746 0 0 1 1.043 3.296A3.745 3.745 0 0 1 21 12Z\",\n megaphone:\n \"M10.34 15.84c-.688-.06-1.386-.09-2.09-.09H7.5a4.5 4.5 0 1 1 0-9h.75c.704 0 1.402-.03 2.09-.09m0 9.18c.253.962.584 1.892.985 2.783.247.55.06 1.21-.463 1.511l-.657.38c-.551.318-1.26.117-1.527-.461a20.845 20.845 0 0 1-1.44-4.282m3.102.069a18.03 18.03 0 0 1-.59-4.59c0-1.586.205-3.124.59-4.59m0 9.18a23.848 23.848 0 0 1 8.835 2.535M10.34 6.66a23.847 23.847 0 0 0 8.835-2.535m0 0A23.74 23.74 0 0 0 18.795 3m.38 1.125a23.91 23.91 0 0 1 1.014 5.395m-1.014 8.855c-.118.38-.245.754-.38 1.125m.38-1.125a23.91 23.91 0 0 0 1.014-5.395m0-3.46c.495.413.811 1.035.811 1.73 0 .695-.316 1.317-.811 1.73m0-3.46a24.347 24.347 0 0 1 0 3.46\",\n xCircle:\n \"m9.75 9.75 4.5 4.5m0-4.5-4.5 4.5M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\",\n arrowsPointingIn:\n \"M9 9V4.5M9 9H4.5M9 9 3.75 3.75M9 15v4.5M9 15H4.5M9 15l-5.25 5.25M15 9h4.5M15 9V4.5M15 9l5.25-5.25M15 15h4.5M15 15v4.5m0-4.5 5.25 5.25\",\n arrowsPointingOut:\n \"M3.75 3.75v4.5m0-4.5h4.5m-4.5 0L9 9M3.75 20.25v-4.5m0 4.5h4.5m-4.5 0L9 15M20.25 3.75h-4.5m4.5 0v4.5m0-4.5L15 9m5.25 11.25h-4.5m4.5 0v-4.5m0 4.5L15 15\",\n arrowPath:\n \"M19.5 12c0-1.232-.046-2.453-.138-3.662a4.006 4.006 0 0 0-3.7-3.7 48.678 48.678 0 0 0-7.324 0 4.006 4.006 0 0 0-3.7 3.7c-.017.22-.032.441-.046.662M19.5 12l3-3m-3 3-3-3m-12 3c0 1.232.046 2.453.138 3.662a4.006 4.006 0 0 0 3.7 3.7 48.656 48.656 0 0 0 7.324 0 4.006 4.006 0 0 0 3.7-3.7c.017-.22.032-.441.046-.662M4.5 12l3 3m-3-3-3 3\",\n arrowUturnLeft: \"M9 15 3 9m0 0 6-6M3 9h12a6 6 0 0 1 0 12h-3\",\n magnifyingGlassPlus:\n \"m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607ZM10.5 7.5v6m3-3h-6\",\n arrowsUpDown:\n \"M3 7.5 7.5 3m0 0L12 7.5M7.5 3v13.5m13.5 0L16.5 21m0 0L12 16.5m4.5 4.5V7.5\",\n envelope:\n \"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\",\n lockClosed:\n \"M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z\",\n userCircle:\n \"M17.982 18.725A7.488 7.488 0 0012 15.75a7.488 7.488 0 00-5.982 2.975m11.963 0a9 9 0 10-11.963 0m11.963 0A8.966 8.966 0 0112 21a8.966 8.966 0 01-5.982-2.275M15 9.75a3 3 0 11-6 0 3 3 0 016 0z\",\n arrowRightOnRectangle:\n \"M15.75 9V5.25A2.25 2.25 0 0 0 13.5 3h-6a2.25 2.25 0 0 0-2.25 2.25v13.5A2.25 2.25 0 0 0 7.5 21h6a2.25 2.25 0 0 0 2.25-2.25V15m3 0 3-3m0 0-3-3m3 3H9\",\n chevronRight: \"m8.25 4.5 7.5 7.5-7.5 7.5\",\n arrowDownTray:\n \"M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5M16.5 12 12 16.5m0 0L7.5 12m4.5 4.5V3\",\n arrowUpTray:\n \"M3 7.5V5.25A2.25 2.25 0 0 1 5.25 3h13.5A2.25 2.25 0 0 1 21 5.25V7.5m-4.5 4.5L12 7.5m0 0L7.5 12m4.5-4.5v13.5\",\n import:\n \"M9 8.25H7.5a2.25 2.25 0 0 0-2.25 2.25v9a2.25 2.25 0 0 0 2.25 2.25h9a2.25 2.25 0 0 0 2.25-2.25v-9a2.25 2.25 0 0 0-2.25-2.25H15M9 12l3 3m0 0 3-3m-3 3V2.25\",\n export:\n \"M9 8.25H7.5a2.25 2.25 0 0 0-2.25 2.25v9a2.25 2.25 0 0 0 2.25 2.25h9a2.25 2.25 0 0 0 2.25-2.25v-9a2.25 2.25 0 0 0-2.25-2.25H15m0-3-3-3m0 0-3 3m3-3V15\",\n home: \"m2.25 12 8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25\",\n play: \"M5 3l14 9-14 9V3z\",\n};\n\n/**\n * Icons that are complex React nodes\n */\nexport const complexIcons = {\n eye: (\n <>\n <path d=\"M2.036 12.322a1.012 1.012 0 0 1 0-.639C3.423 7.51 7.36 4.5 12 4.5c4.638 0 8.573 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.638 0-8.573-3.007-9.963-7.178Z\" />\n <path d=\"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z\" />\n </>\n ),\n google: (\n <g transform=\"matrix(1, 0, 0, 1, 27.009001, -39.238998)\">\n <path\n fill=\"#4285F4\"\n stroke=\"none\"\n d=\"M -3.264 51.509 C -3.264 50.719 -3.334 49.969 -3.454 49.239 L -14.754 49.239 L -14.754 53.749 L -8.284 53.749 C -8.574 55.229 -9.424 56.479 -10.684 57.329 L -10.684 60.329 L -6.824 60.329 C -4.564 58.239 -3.264 55.159 -3.264 51.509 Z\"\n />\n <path\n fill=\"#34A853\"\n stroke=\"none\"\n d=\"M -14.754 63.239 C -11.514 63.239 -8.804 62.159 -6.824 60.329 L -10.684 57.329 C -11.764 58.049 -13.134 58.489 -14.754 58.489 C -17.884 58.489 -20.534 56.379 -21.484 53.529 L -25.464 53.529 L -25.464 56.619 C -23.494 60.539 -19.444 63.239 -14.754 63.239 Z\"\n />\n <path\n fill=\"#FBBC05\"\n stroke=\"none\"\n d=\"M -21.484 53.529 C -21.734 52.809 -21.864 52.039 -21.864 51.239 C -21.864 50.439 -21.724 49.669 -21.484 48.949 L -21.484 45.859 L -25.464 45.859 C -26.284 47.479 -26.754 49.299 -26.754 51.239 C -26.754 53.179 -26.284 54.999 -25.464 56.619 L -21.484 53.529 Z\"\n />\n <path\n fill=\"#EA4335\"\n stroke=\"none\"\n d=\"M -14.754 43.989 C -12.984 43.989 -11.404 44.599 -10.154 45.789 L -6.734 42.369 C -8.804 40.429 -11.514 39.239 -14.754 39.239 C -19.444 39.239 -23.494 41.939 -25.464 45.859 L -21.484 48.949 C -20.534 46.099 -17.884 43.989 -14.754 43.989 Z\"\n />\n </g>\n ),\n} as const;\n\nexport type IconName = keyof typeof iconPaths | keyof typeof complexIcons;\n\nexport const icons: Record<IconName, React.ReactNode> = {\n check: <path d={iconPaths.check} />,\n x: <path d={iconPaths.x} />,\n edit: <path d={iconPaths.edit} />,\n close: <path d={iconPaths.close} />,\n plus: <path d={iconPaths.plus} />,\n arrowDown: <path d={iconPaths.arrowDown} />,\n arrowUp: <path d={iconPaths.arrowUp} />,\n clipboard: <path d={iconPaths.clipboard} />,\n cloudArrowUp: <path d={iconPaths.cloudArrowUp} />,\n arrowDownToLine: <path d={iconPaths.arrowDownToLine} />,\n folder: <path d={iconPaths.folder} />,\n arrowUpFromLine: <path d={iconPaths.arrowUpFromLine} />,\n arrowRightOnRectangle: <path d={iconPaths.arrowRightOnRectangle} />,\n squares: <path d={iconPaths.squares} />,\n tableCells: <path d={iconPaths.tableCells} />,\n arrowsRightLeft: <path d={iconPaths.arrowsRightLeft} />,\n document: <path d={iconPaths.document} />,\n externalLink: <path d={iconPaths.externalLink} />,\n lock: <path d={iconPaths.lock} />,\n shoppingCart: <path d={iconPaths.shoppingCart} />,\n minus: <path d={iconPaths.minus} />,\n pencilSquare: <path d={iconPaths.pencilSquare} />,\n pencilSquareContinued: <path d={iconPaths.pencilSquareContinued} />,\n chevronDownSmall: <path d={iconPaths.chevronDownSmall} />,\n chevronUpSmall: <path d={iconPaths.chevronUpSmall} />,\n chevronDownTable: <path d={iconPaths.chevronDownTable} />,\n chevronUpTable: <path d={iconPaths.chevronUpTable} />,\n speakerWave: <path d={iconPaths.speakerWave} />,\n zap: <path d={iconPaths.zap} />,\n code: <path d={iconPaths.code} />,\n questionMarkCircle: <path d={iconPaths.questionMarkCircle} />,\n search: <path d={iconPaths.search} />,\n exclamationCircle: <path d={iconPaths.exclamationCircle} />,\n exclamationTriangle: <path d={iconPaths.exclamationTriangle} />,\n checkCircle: <path d={iconPaths.checkCircle} />,\n megaphone: <path d={iconPaths.megaphone} />,\n xCircle: <path d={iconPaths.xCircle} />,\n arrowsPointingIn: <path d={iconPaths.arrowsPointingIn} />,\n arrowsPointingOut: <path d={iconPaths.arrowsPointingOut} />,\n arrowPath: <path d={iconPaths.arrowPath} />,\n arrowUturnLeft: <path d={iconPaths.arrowUturnLeft} />,\n magnifyingGlassPlus: <path d={iconPaths.magnifyingGlassPlus} />,\n arrowsUpDown: <path d={iconPaths.arrowsUpDown} />,\n envelope: <path d={iconPaths.envelope} />,\n lockClosed: <path d={iconPaths.lockClosed} />,\n userCircle: <path d={iconPaths.userCircle} />,\n chevronRight: <path d={iconPaths.chevronRight} />,\n arrowDownTray: <path d={iconPaths.arrowDownTray} />,\n arrowUpTray: <path d={iconPaths.arrowUpTray} />,\n import: <path d={iconPaths.import} />,\n export: <path d={iconPaths.export} />,\n home: <path d={iconPaths.home} />,\n play: <path d={iconPaths.play} />,\n eye: complexIcons.eye,\n google: complexIcons.google,\n};\n","import React from \"react\";\nimport { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nfunction cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nconst headingSizes = {\n 1: \"pb:text-4xl pb:font-bold\",\n 2: \"pb:text-3xl pb:font-bold\",\n 3: \"pb:text-2xl pb:font-bold\",\n 4: \"pb:text-xl pb:font-bold\",\n 5: \"pb:text-lg pb:font-bold\",\n 6: \"pb:text-base pb:font-bold\",\n};\n\nconst textVariants = {\n default: \"pb:text-base pb:text-slate-950\",\n muted: \"pb:text-sm pb:text-slate-600\",\n error: \"pb:text-sm pb:text-red-600 pb:font-medium\",\n small: \"pb:text-xs pb:text-slate-600\",\n};\n\ninterface HeadingProps extends React.HTMLAttributes<HTMLHeadingElement> {\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n children?: React.ReactNode;\n}\n\nexport const Heading = ({\n level = 1,\n className,\n children,\n ...props\n}: HeadingProps) => {\n return React.createElement(\n `h${level}`,\n { className: cn(headingSizes[level], className), ...props },\n children,\n );\n};\n\ninterface TextProps extends React.HTMLAttributes<HTMLElement> {\n variant?: \"default\" | \"muted\" | \"error\" | \"small\";\n as?: React.ElementType;\n children?: React.ReactNode;\n}\n\nexport const Text = ({\n variant = \"default\",\n as: Component = \"p\",\n className,\n children,\n ...props\n}: TextProps) => {\n return React.createElement(\n Component,\n { className: cn(textVariants[variant], className), ...props },\n children,\n );\n};\n\nexport const TypographyList = ({ args }: { args: Record<string, unknown> }) => {\n return (\n <div\n className=\"pb:space-y-4\"\n {...(args as React.HTMLAttributes<HTMLDivElement>)}\n >\n <Heading level={1}>Heading 1</Heading>\n <Heading level={2}>Heading 2</Heading>\n <Heading level={3}>Heading 3</Heading>\n <Text>Body text</Text>\n <Text variant=\"muted\">Caption text</Text>\n <Text variant=\"small\">Small text</Text>\n <Text variant=\"small\" as=\"span\">\n Small span text\n </Text>\n </div>\n );\n};\n","import React from \"react\";\nimport { Slider as BaseSlider } from \"@base-ui/react\";\nimport { cn } from \"./utils\";\n\nexport interface SliderProps {\n min?: number;\n max?: number;\n step?: number;\n value?: number;\n defaultValue?: number;\n disabled?: boolean;\n onChange?: (value: number | number[], event: Event) => void;\n className?: string;\n name?: string;\n icon?: React.ReactNode;\n}\n\nexport const Slider = React.forwardRef<HTMLDivElement, SliderProps>(\n (\n {\n className,\n min = 0,\n max = 100,\n step = 1,\n value,\n defaultValue,\n disabled,\n onChange,\n name,\n icon,\n ...props\n },\n ref,\n ) => {\n const handleChange = (val: number | number[], event: Event) => {\n if (onChange) {\n onChange(val, event);\n }\n };\n\n return (\n <div className={cn(\"pb:w-full pb:flex pb:items-center pb:gap-4\", className)}>\n {icon && <div className=\"pb:text-gray-500 pb:shrink-0\">{icon}</div>}\n\n <div className=\"pb:flex-grow pb:flex pb:items-center pb:h-8 pb:min-w-[120px]\">\n <BaseSlider.Root\n ref={ref}\n min={min}\n max={max}\n step={step}\n value={\n value !== undefined\n ? Array.isArray(value)\n ? value\n : [value]\n : undefined\n }\n defaultValue={\n defaultValue !== undefined\n ? Array.isArray(defaultValue)\n ? defaultValue\n : [defaultValue]\n : undefined\n }\n disabled={disabled}\n orientation=\"horizontal\"\n {...props}\n onValueChange={(val, details) => {\n const event =\n (details as { event?: Event })?.event ||\n (window.event as unknown as Event);\n handleChange(val as number | number[], event);\n }}\n className={cn(\n \"pb:relative pb:flex pb:items-center pb:w-full pb:h-full pb:group pb:touch-none pb:select-none\",\n disabled && \"pb:opacity-50 pb:cursor-not-allowed\",\n className,\n )}\n >\n <BaseSlider.Control className=\"pb:flex pb:items-center pb:w-full pb:h-full pb:relative pb:cursor-pointer\">\n <BaseSlider.Track className=\"pb:relative pb:bg-gray-200 pb:rounded-full pb:w-full pb:h-1.5 pb:overflow-hidden pb:transition-colors group-pb:hover:bg-gray-300\">\n <BaseSlider.Indicator className=\"pb:absolute pb:bg-primary pb:rounded-full pb:h-full\" />\n </BaseSlider.Track>\n <BaseSlider.Thumb className=\"pb:z-10 pb:block pb:w-4.5 pb:h-4.5 pb:bg-white pb:shadow-md pb:rounded-full pb:border-2 pb:border-primary focus:pb:outline-none focus:pb:ring-4 focus:pb:ring-primary/20 pb:cursor-grab active:pb:cursor-grabbing pb:hover:scale-110 active:pb:scale-95 pb:transition-transform\" />\n </BaseSlider.Control>\n </BaseSlider.Root>\n </div>\n {/* Hidden input to support form submission if needed */}\n {name && <input type=\"hidden\" name={name} value={value} />}\n </div>\n );\n },\n);\n\nSlider.displayName = \"Slider\";\n","import React from \"react\";\nimport { Slider } from \"./Slider\";\nimport { NumberField } from \"./NumberField\";\nimport { cn } from \"./utils\";\n\nexport interface SliderWithNumberFieldProps {\n min?: number;\n max?: number;\n step?: number;\n value?: number;\n defaultValue?: number;\n disabled?: boolean;\n onChange?: (value: number, event: Event) => void;\n className?: string;\n inputWidth?: string;\n}\n\nexport const SliderWithNumberField = React.forwardRef<\n HTMLDivElement,\n SliderWithNumberFieldProps\n>(\n (\n {\n className,\n min = 0,\n max = 100,\n step = 1,\n value,\n defaultValue,\n disabled,\n onChange,\n inputWidth = \"w-20\",\n ...props\n },\n ref,\n ) => {\n const handleChange = (val: number | number[], event: Event) => {\n if (onChange) {\n const newValue = Array.isArray(val) ? val[0] : val;\n onChange(newValue, event);\n }\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"pb:flex pb:flex-row pb:items-center pb:gap-4 pb:w-full pb:min-w-0 pb:sm:flex-nowrap pb:flex-wrap\",\n className,\n )}\n {...props}\n >\n <div className=\"pb:flex-grow pb:min-w-[120px]\">\n <Slider\n min={min}\n max={max}\n step={step}\n value={value}\n defaultValue={defaultValue}\n disabled={disabled}\n onChange={handleChange}\n className=\"pb:w-full\"\n />\n </div>\n <div className={cn(inputWidth, \"pb:shrink-0\")}>\n <NumberField\n value={value}\n defaultValue={defaultValue}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n onChange={(val, event) => {\n if (val !== null) {\n handleChange(val, event);\n }\n }}\n showButtons={false}\n />\n </div>\n </div>\n );\n },\n);\n\nSliderWithNumberField.displayName = \"SliderWithNumberField\";\n\nexport default SliderWithNumberField;\n","import React from \"react\";\nimport { NumberField as BaseNumberField } from \"@base-ui/react\";\nimport { cn } from \"./utils\";\nimport { Icon } from \"./Icon\";\n\nexport interface NumberFieldProps {\n value?: number | null;\n defaultValue?: number;\n min?: number;\n max?: number;\n step?: number;\n onChange?: (value: number | null, event: Event) => void;\n disabled?: boolean;\n readOnly?: boolean;\n className?: string;\n id?: string;\n placeholder?: string;\n showButtons?: boolean;\n}\n\nexport const NumberField = React.forwardRef<HTMLDivElement, NumberFieldProps>(\n (\n {\n className,\n value,\n defaultValue,\n min,\n max,\n step,\n onChange,\n disabled,\n readOnly,\n id: propsId,\n placeholder,\n showButtons = false,\n ...props\n },\n ref,\n ) => {\n const generatedId = React.useId();\n const numberId = propsId || generatedId;\n\n return (\n <div className=\"pb:w-full\">\n <BaseNumberField.Root\n ref={ref}\n value={value}\n defaultValue={defaultValue}\n min={min}\n max={max}\n step={step}\n onValueChange={(val, details) => {\n if (onChange) {\n const event = details?.event || (details as unknown as Event);\n onChange(val, event);\n }\n }}\n disabled={disabled}\n readOnly={readOnly}\n className={cn(\"pb:flex pb:flex-col pb:gap-1\", className)}\n {...props}\n >\n <div\n className={cn(\n \"pb:group pb:relative pb:flex pb:items-center pb:rounded-md pb:border-0 pb:bg-primary/10 pb:ring-1 pb:ring-inset pb:ring-gray-300 pb:focus-within:ring-2 pb:focus-within:ring-primary pb:shadow-sm\",\n disabled && \"pb:opacity-50 pb:cursor-not-allowed\",\n )}\n >\n {showButtons && (\n <BaseNumberField.Decrement\n aria-label=\"Decrement\"\n className=\"pb:relative pb:z-20 pb:flex pb:items-center pb:justify-center pb:w-8 pb:h-9 pb:text-gray-500 pb:hover:text-gray-700 pb:hover:bg-gray-100/50 pb:rounded-l-md pb:border-r pb:border-gray-300 disabled:pb:opacity-30 pb:cursor-pointer\"\n >\n <Icon size=\"sm\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19.5 12h-15\"\n />\n </Icon>\n </BaseNumberField.Decrement>\n )}\n\n <BaseNumberField.Input\n id={numberId}\n placeholder={placeholder}\n className={cn(\n \"pb:block pb:w-full pb:bg-transparent pb:border-0 pb:px-3 pb:py-1.5 pb:text-gray-900 pb:placeholder:text-gray-400 pb:focus:ring-0 pb:sm:text-sm pb:sm:leading-6 pb:text-center pb:appearance-none pb:relative pb:z-0\",\n !showButtons && \"pb:rounded-md\",\n )}\n />\n\n {showButtons && (\n <BaseNumberField.Increment\n aria-label=\"Increment\"\n className=\"pb:relative pb:z-20 pb:flex pb:items-center pb:justify-center pb:w-8 pb:h-9 pb:text-gray-500 pb:hover:text-gray-700 pb:hover:bg-gray-100/50 pb:rounded-r-md pb:border-l pb:border-gray-300 disabled:pb:opacity-30 pb:cursor-pointer\"\n >\n <Icon size=\"sm\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 4.5v15m7.5-7.5h-15\"\n />\n </Icon>\n </BaseNumberField.Increment>\n )}\n\n <BaseNumberField.ScrubArea className=\"pb:absolute pb:inset-0 pb:z-10 pb:cursor-ew-resize pb:opacity-0 pb:hover:opacity-10 pb:transition-opacity pb:bg-primary/5 pb:rounded-md pb:pointer-events-none group-pb:hover:pointer-events-auto\" />\n </div>\n </BaseNumberField.Root>\n </div>\n );\n },\n);\n\nNumberField.displayName = \"NumberField\";\n","import React from \"react\";\nimport { Tooltip as BaseTooltip } from \"@base-ui/react\";\nimport { cn } from \"./utils\";\nimport { Icon } from \"./Icon\";\n\nexport interface TooltipProps {\n content: React.ReactNode;\n children: React.ReactNode;\n className?: string;\n delay?: \"normal\" | \"slow\";\n}\n\nexport function Tooltip({\n content,\n children,\n className,\n delay = \"normal\",\n}: TooltipProps) {\n return (\n <BaseTooltip.Provider delay={delay === \"slow\" ? 1000 : 0}>\n <BaseTooltip.Root>\n {React.isValidElement(children) ? (\n <BaseTooltip.Trigger render={children} />\n ) : (\n <BaseTooltip.Trigger>{children}</BaseTooltip.Trigger>\n )}\n <BaseTooltip.Portal>\n <BaseTooltip.Positioner sideOffset={8}>\n <BaseTooltip.Popup\n className={cn(\n \"pb:z-50 pb:rounded pb:shadow-lg pb:bg-white pb:p-2 pb:text-xs pb:text-center pb:whitespace-normal pb:max-w-xs pb:text-gray-900 pb:border pb:border-gray-200\",\n className,\n )}\n >\n {content}\n <BaseTooltip.Arrow className=\"pb:fill-white pb:stroke-gray-200\" />\n </BaseTooltip.Popup>\n </BaseTooltip.Positioner>\n </BaseTooltip.Portal>\n </BaseTooltip.Root>\n </BaseTooltip.Provider>\n );\n}\nexport interface HelperTooltipProps {\n content: React.ReactNode;\n className?: string;\n}\n\nexport function HelperTooltip({ content, className }: HelperTooltipProps) {\n return (\n <Tooltip content={content} className={className}>\n <Icon size=\"md\" className=\"pb:text-gray-500 pb:hover:text-gray-700 pb:cursor-help\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M9.879 7.519c1.171-1.025 3.071-1.025 4.242 0 1.172 1.025 1.172 2.687 0 3.712-.203.179-.43.326-.67.442-.745.361-1.45.999-1.45 1.827v.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9 5.25h.008v.008H12v-.008Z\"\n />\n </Icon>\n </Tooltip>\n );\n}\n","import React from \"react\";\nimport { Dialog as BaseDialog } from \"@base-ui/react\";\nimport { cn } from \"./utils\";\n\nexport interface DialogProps {\n open?: boolean;\n onOpenChange?: (open: boolean, event?: Event) => void;\n trigger?: React.ReactNode;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function Dialog({\n open,\n onOpenChange,\n trigger,\n children,\n className,\n}: DialogProps) {\n return (\n <BaseDialog.Root\n open={open}\n onOpenChange={(open, eventDetails) => {\n onOpenChange?.(open, eventDetails?.event as Event | undefined);\n }}\n >\n {trigger &&\n (React.isValidElement(trigger) ? (\n <BaseDialog.Trigger render={trigger as React.ReactElement} />\n ) : (\n <BaseDialog.Trigger>{trigger}</BaseDialog.Trigger>\n ))}\n <BaseDialog.Portal>\n <BaseDialog.Backdrop className=\"pb:fixed pb:inset-0 pb:z-50 pb:bg-black/40 pb:transition-all pb:duration-200 data-[state=open]:pb:animate-in data-[state=closed]:pb:animate-out pb:data-[state=closed]:fade-out-0 pb:data-[state=open]:fade-in-0\" />\n <BaseDialog.Popup\n className={cn(\n \"pb:fixed pb:left-[50%] pb:top-[50%] pb:z-50 pb:grid pb:w-auto pb:max-w-[90vw] pb:translate-x-[-50%] pb:translate-y-[-50%] pb:gap-4 pb:border pb:bg-white pb:p-6 pb:shadow-lg pb:duration-200 data-[state=open]:pb:animate-in data-[state=closed]:pb:animate-out data-[state=closed]:pb:fade-out-0 data-[state=open]:pb:fade-in-0 data-[state=closed]:pb:zoom-out-95 data-[state=open]:pb:zoom-in-95 data-[state=closed]:pb:slide-out-to-left-1/2 data-[state=closed]:pb:slide-out-to-top-[48%] data-[state=open]:pb:slide-in-from-left-1/2 data-[state=open]:pb:slide-in-from-top-[48%] sm:rounded-lg\",\n className,\n )}\n >\n {children}\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n}\n\nexport const DialogTitle = (\n props: React.ComponentProps<typeof BaseDialog.Title>,\n) => <BaseDialog.Title {...props} />;\nexport const DialogDescription = (\n props: React.ComponentProps<typeof BaseDialog.Description>,\n) => <BaseDialog.Description {...props} />;\nexport const DialogClose = (\n props: React.ComponentProps<typeof BaseDialog.Close>,\n) => <BaseDialog.Close {...props} />;\n","import React from \"react\";\nimport { Popover as BasePopover } from \"@base-ui/react\";\nimport { cn } from \"./utils\";\n\nexport interface PopoverProps {\n trigger: React.ReactNode;\n children: React.ReactNode;\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n align?: \"start\" | \"center\" | \"end\";\n className?: string;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function Popover({\n trigger,\n children,\n side = \"bottom\",\n align = \"center\",\n className,\n open,\n onOpenChange,\n}: PopoverProps) {\n return (\n <BasePopover.Root open={open} onOpenChange={onOpenChange}>\n <BasePopover.Trigger>{trigger}</BasePopover.Trigger>\n <BasePopover.Portal>\n <BasePopover.Positioner side={side} align={align} sideOffset={5}>\n <BasePopover.Popup\n className={cn(\n \"pb:z-50 pb:w-72 pb:rounded-md pb:border pb:bg-white pb:p-4 pb:shadow-md pb:outline-none pb:data-[state=open]:animate-in pb:data-[state=closed]:animate-out pb:data-[state=closed]:fade-out-0 pb:data-[state=open]:fade-in-0 pb:data-[state=closed]:zoom-out-95 pb:data-[state=open]:zoom-in-95\",\n className,\n )}\n >\n {children}\n <BasePopover.Arrow className=\"pb:fill-white pb:stroke-gray-200\" />\n </BasePopover.Popup>\n </BasePopover.Positioner>\n </BasePopover.Portal>\n </BasePopover.Root>\n );\n}\n","import React from \"react\";\nimport { Menu as BaseMenu } from \"@base-ui/react\";\nimport { cn } from \"./utils\";\n\nexport interface DropdownProps {\n trigger: React.ReactNode;\n children: React.ReactNode;\n align?: \"start\" | \"center\" | \"end\";\n className?: string;\n}\n\nexport function Dropdown({\n trigger,\n children,\n align = \"end\",\n className,\n}: DropdownProps) {\n return (\n <BaseMenu.Root>\n {React.isValidElement(trigger) ? (\n <BaseMenu.Trigger render={trigger} />\n ) : (\n <BaseMenu.Trigger>{trigger}</BaseMenu.Trigger>\n )}\n <BaseMenu.Portal>\n <BaseMenu.Positioner align={align} sideOffset={5}>\n <BaseMenu.Popup\n className={cn(\n \"pb:z-50 pb:min-w-[8rem] pb:overflow-hidden pb:rounded-md pb:border pb:bg-white pb:p-1 pb:shadow-md pb:data-[state=open]:animate-in pb:data-[state=closed]:animate-out pb:data-[state=closed]:fade-out-0 pb:data-[state=open]:fade-in-0 pb:data-[state=closed]:zoom-out-95 pb:data-[state=open]:zoom-in-95\",\n className,\n )}\n >\n {children}\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n </BaseMenu.Root>\n );\n}\n\nexport const DropdownItem = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof BaseMenu.Item>\n>(({ className, ...props }, ref) => (\n <BaseMenu.Item\n ref={ref}\n className={cn(\n \"pb:relative pb:flex pb:cursor-default pb:select-none pb:items-center pb:rounded-sm pb:px-2 pb:py-1.5 pb:text-sm pb:outline-none pb:transition-colors pb:data-[highlighted]:bg-gray-100 pb:data-[highlighted]:text-gray-900\",\n className,\n )}\n {...props}\n />\n));\nDropdownItem.displayName = \"DropdownItem\";\n\nexport const DropdownSeparator = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof BaseMenu.Separator>\n>(({ className, ...props }, ref) => (\n <BaseMenu.Separator\n ref={ref}\n className={cn(\"pb:-mx-1 pb:my-1 pb:h-px pb:bg-gray-100\", className)}\n {...props}\n />\n));\nDropdownSeparator.displayName = \"DropdownSeparator\";\n","import React, { useState } from \"react\";\nimport { cn } from \"./utils\";\nimport { Button, ButtonProps } from \"./Button\";\nimport { Icon } from \"./Icon\";\n\nexport interface CollapsibleProps {\n title: React.ReactNode;\n children: React.ReactNode;\n /** The variant of the trigger button */\n variant?: ButtonProps[\"variant\"];\n /** The size of the trigger button */\n size?: ButtonProps[\"size\"];\n defaultOpen?: boolean;\n className?: string;\n}\n\nexport function Collapsible({\n title,\n children,\n variant = \"secondary\",\n size = \"md\",\n defaultOpen = false,\n className,\n}: CollapsibleProps) {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n\n return (\n <div className={cn(\"w-full\", className)}>\n <Button\n variant={variant}\n size={size}\n className=\"pb:w-full pb:justify-between pb:font-medium\"\n onClick={() => setIsOpen(!isOpen)}\n aria-expanded={isOpen}\n rightIcon={\n <Icon className=\"pb:h-5 pb:w-5 pb:text-gray-600\" strokeWidth=\"2.5\">\n {isOpen ? (\n <path d=\"M4.5 15.75l7.5-7.5 7.5 7.5\" />\n ) : (\n <path d=\"M19.5 8.25l-7.5 7.5-7.5-7.5\" />\n )}\n </Icon>\n }\n >\n <span>{title}</span>\n </Button>\n {isOpen && (\n <div className=\"pb:px-4 pb:pt-4 pb:pb-2 pb:text-sm pb:text-gray-500\">{children}</div>\n )}\n </div>\n );\n}\n","import React from \"react\";\nimport { Switch as BaseSwitch } from \"@base-ui/react\";\nimport { cn } from \"./utils\";\n\nexport interface SwitchProps extends React.AriaAttributes {\n checked?: boolean;\n defaultChecked?: boolean;\n onChange?: (checked: boolean, event: Event) => void;\n disabled?: boolean;\n className?: string;\n id?: string;\n name?: string;\n}\n\nexport const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(\n (\n {\n checked,\n defaultChecked,\n onChange,\n disabled,\n className,\n id: externalId,\n ...props\n },\n ref,\n ) => {\n const autoId = React.useId();\n const id = externalId ?? autoId;\n return (\n <div className={cn(\"pb:flex pb:items-center pb:gap-2\", className)}>\n <BaseSwitch.Root\n ref={ref}\n id={id}\n checked={checked}\n defaultChecked={defaultChecked}\n onCheckedChange={(checked, eventDetails) => {\n onChange?.(checked, eventDetails?.event as Event);\n }}\n disabled={disabled}\n className={cn(\n \"pb:relative pb:inline-flex pb:h-6 pb:w-11 pb:flex-shrink-0 pb:cursor-pointer pb:rounded-full pb:border-2 pb:border-transparent pb:transition-colors pb:duration-200 pb:ease-in-out pb:focus:outline-none pb:focus:ring-2 pb:focus:ring-primary pb:focus:ring-offset-2\",\n \"pb:data-[checked]:bg-primary pb:data-[unchecked]:bg-gray-200\",\n disabled && \"pb:opacity-50 pb:cursor-not-allowed\",\n )}\n {...props}\n >\n <BaseSwitch.Thumb\n className={cn(\n \"pb:pointer-events-none pb:inline-block pb:h-5 pb:w-5 pb:transform pb:rounded-full pb:bg-white pb:shadow pb:ring-0 pb:transition pb:duration-200 pb:ease-in-out\",\n \"pb:data-[checked]:translate-x-5 pb:data-[unchecked]:translate-x-0\",\n )}\n />\n </BaseSwitch.Root>\n </div>\n );\n },\n);\n\nSwitch.displayName = \"Switch\";\n","import React from \"react\";\nimport { cn } from \"./utils\";\nimport { HelperTooltip } from \"./Tooltip\";\n\nexport interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n children: React.ReactNode;\n tooltip?: string;\n className?: string;\n}\n\nexport function Label({ children, tooltip, className, ...props }: LabelProps) {\n return (\n <label\n className={cn(\n \"pb:relative pb:block pb:text-sm pb:font-bold pb:leading-6 pb:text-gray-600 pb:mb-1 pb:group-focus-within:text-gray-800\",\n className,\n )}\n {...props}\n >\n <div className=\"pb:flex pb:items-center pb:gap-1\">\n {children}\n {tooltip && <HelperTooltip content={tooltip} />}\n </div>\n </label>\n );\n}\n","import { ReactNode } from \"react\";\nimport { Heading, Button, Icon } from \"./\";\n\nexport interface BasePanelProps {\n title: string;\n children: ReactNode;\n onClose?: () => void;\n className?: string;\n headerClassName?: string;\n headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;\n setPanel: (panel: string) => void;\n}\n\nexport function BasePanel({\n title,\n children,\n onClose,\n className = \"\",\n headerClassName = \"\",\n headingLevel = 2,\n setPanel = (panel: string) => { }\n}: BasePanelProps) {\n\n const handleClose = () => {\n if (onClose) {\n onClose();\n } else {\n setPanel(\"None\");\n }\n };\n\n return (\n <div className={`pb:space-y-1 pb:p-1 ${className}`}>\n <div\n className={`pb:flex pb:items-center pb:justify-between pb:px-1 pb:mb-1 pb:border pb:border-solid pb:border-gray-400 pb:pb-1 ${headerClassName}`}\n >\n <Heading level={headingLevel} className=\"pb:text-lg\">\n {title}\n </Heading>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleClose}\n className=\"pb:p-1 pb:rounded pb:hover:bg-gray-100 pb:h-auto\"\n aria-label={`Close ${title} Panel`}\n >\n <Icon size=\"md\" className=\"pb:h-5 pb:w-5\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M6 18 18 6M6 6l12 12\"\n />\n </Icon>\n </Button>\n </div>\n {children}\n </div>\n );\n}\n","import { ReactNode } from \"react\";\nimport { cn } from \"./utils\";\nimport { Toggle, ToggleGroup } from \"@base-ui/react\";\n\nexport interface TabRadioOption<T extends string> {\n value: T;\n label: ReactNode;\n disabled?: boolean;\n}\n\nexport interface TabRadioProps<T extends string> {\n options: readonly TabRadioOption<T>[];\n value: T | undefined | null;\n onChange: (value: T | undefined) => void;\n className?: string;\n variant?: \"default\" | \"primary\" | \"danger\";\n \"aria-label\"?: string;\n}\n\nconst variantStyles = {\n default:\n \"pb:data-[pressed]:bg-white pb:data-[pressed]:text-gray-900 pb:data-[pressed]:shadow-sm pb:data-[pressed]:ring-1 pb:data-[pressed]:ring-gray-200\",\n primary:\n \"pb:data-[pressed]:bg-primary/20 pb:data-[pressed]:shadow-sm pb:data-[pressed]:ring-1 pb:data-[pressed]:ring-primary\",\n danger:\n \"pb:data-[pressed]:bg-danger/20 pb:data-[pressed]:shadow-sm pb:data-[pressed]:ring-1 pb:data-[pressed]:ring-danger\",\n};\n\nexport function TabRadio<T extends string>({\n options,\n value,\n onChange,\n className,\n variant = \"default\",\n \"aria-label\": ariaLabel,\n}: TabRadioProps<T>) {\n return (\n <ToggleGroup\n value={value ? [value] : []}\n onValueChange={(val) => {\n onChange(val[0] as T | undefined);\n }}\n aria-label={ariaLabel}\n className={cn(\n \"pb:inline-flex pb:p-1 pb:space-x-1 pb:bg-gray-100 pb:rounded-lg pb:border pb:border-gray-200\",\n className,\n )}\n >\n {options.map((option) => {\n return (\n <Toggle\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n className={cn(\n \"pb:relative pb:cursor-pointer pb:px-3 pb:py-1.5 pb:text-sm pb:font-medium pb:rounded-md pb:transition-all pb:flex pb:items-center pb:justify-center pb:outline-none\",\n \"pb:text-gray-600 pb:hover:text-gray-900 pb:hover:bg-gray-200\",\n \"pb:disabled:opacity-50 pb:disabled:cursor-not-allowed pb:disabled:hover:bg-transparent pb:disabled:hover:text-gray-600\",\n variantStyles[variant],\n )}\n >\n {option.label}\n </Toggle>\n );\n })}\n </ToggleGroup>\n );\n}\n","import { Field as BaseField } from \"@base-ui/react\";\nimport React from \"react\";\nimport { cn } from \"./utils\";\nimport { Label } from \"./Label\";\n\nexport interface FieldProps extends BaseField.Root.Props {\n label?: string;\n description?: string;\n error?: string;\n tooltip?: string;\n children: React.ReactNode;\n icon?: React.ReactNode;\n labelPlacement?: \"top\" | \"left\" | \"right\";\n labelWeight?: \"bold\" | \"normal\";\n}\n\n/**\n * A wrapper component that provides a label, description, and error message for form controls.\n * Uses Base UI's Field primitives for accessibility.\n */\nexport const Field = React.forwardRef<HTMLDivElement, FieldProps>(\n (\n {\n label,\n description,\n error,\n tooltip,\n children,\n className,\n icon,\n labelPlacement = \"top\",\n labelWeight = \"bold\",\n ...props\n },\n ref,\n ) => {\n const isHorizontal =\n labelPlacement === \"left\" || labelPlacement === \"right\";\n const labelOnRight = labelPlacement === \"right\";\n\n return (\n <BaseField.Root\n ref={ref}\n className={cn(\n \"pb:flex pb:w-full\",\n isHorizontal ? \"pb:flex-col pb:gap-1\" : \"pb:flex-col pb:gap-1.5\",\n className as string,\n )}\n {...props}\n >\n <div\n className={cn(\n \"pb:flex\",\n isHorizontal ? \"pb:flex-row pb:items-center pb:gap-2\" : \"pb:flex-col pb:gap-1.5\",\n )}\n >\n {labelOnRight && <div className=\"pb:relative\">{children}</div>}\n\n {label && (\n <BaseField.Label\n render={(props) => (\n <Label\n tooltip={tooltip}\n className={cn(\n \"pb:mb-0\",\n labelWeight === \"normal\" && \"pb:font-normal\",\n )}\n {...props}\n >\n <span className=\"pb:flex pb:items-center pb:gap-1\">\n {icon && <span className=\"pb:flex-shrink-0\">{icon}</span>}\n {label}\n </span>\n </Label>\n )}\n />\n )}\n\n {!labelOnRight && <div className=\"pb:relative\">{children}</div>}\n </div>\n\n {description && (\n <BaseField.Description\n className={cn(\n \"pb:text-xs pb:text-gray-500\",\n labelOnRight && \"pb:ml-7\", // Aligns description with label text when child is on left\n )}\n >\n {description}\n </BaseField.Description>\n )}\n\n {error && (\n <BaseField.Error\n className={cn(\n \"pb:text-xs pb:text-red-600 pb:font-medium\",\n labelOnRight && \"pb:ml-7\",\n )}\n >\n {error}\n </BaseField.Error>\n )}\n </BaseField.Root>\n );\n },\n);\n\nField.displayName = \"Field\";\n","import * as React from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { cn } from \"./utils\";\n\nexport type AnchorProps = React.AnchorHTMLAttributes<HTMLAnchorElement>;\n\nconst Anchor = React.forwardRef<HTMLAnchorElement, AnchorProps>(\n ({ className, href, target, ...props }, ref) => {\n const isInternal = href && !href.startsWith(\"http\") && !target;\n const commonClass = cn(\n \"pb:font-medium pb:text-teal-700 pb:underline pb:underline-offset-4 pb:hover:text-teal-900 pb:cursor-pointer\",\n className,\n );\n\n if (isInternal) {\n return <Link to={href} ref={ref} className={commonClass} {...props} />;\n } else {\n return (\n <a\n href={href}\n target={target}\n ref={ref}\n className={commonClass}\n {...props}\n />\n );\n }\n },\n);\nAnchor.displayName = \"Anchor\";\n\nexport { Anchor };\n","import { Input as BaseInput } from \"@base-ui/react\";\nimport React, { ComponentPropsWithoutRef } from \"react\";\nimport { cn } from \"./utils\";\n\nexport type TextAreaProps = React.TextareaHTMLAttributes<HTMLTextAreaElement>;\n\nexport const TextArea = React.forwardRef<HTMLTextAreaElement, TextAreaProps>(\n ({ className, id, ...props }, ref) => {\n return (\n <BaseInput\n render={<textarea />}\n ref={ref as React.Ref<HTMLTextAreaElement>}\n id={id}\n className={cn(\n \"pb:block pb:w-full pb:rounded-md pb:border-0 pb:px-1.5 pb:py-1.5 pb:text-gray-900 pb:ring-1 pb:ring-inset pb:ring-gray-300 pb:placeholder:text-gray-400 pb:focus:ring-2 pb:focus:ring-inset pb:focus:ring-primary pb:sm:text-sm pb:sm:leading-6 pb:bg-primary/10 pb:appearance-none\",\n className,\n )}\n {...(props as ComponentPropsWithoutRef<typeof BaseInput>)}\n />\n );\n },\n);\n\nTextArea.displayName = \"TextArea\";\n","import { Checkbox as BaseCheckbox } from \"@base-ui/react\";\nimport React, { ComponentPropsWithoutRef } from \"react\";\nimport { cn } from \"./utils\";\nimport { Icon } from \"./Icon\";\n\nexport type CheckboxProps = React.InputHTMLAttributes<HTMLInputElement>;\n\nexport const Checkbox = React.forwardRef<HTMLButtonElement, CheckboxProps>(\n ({ className, id, checked, onChange, ...props }, ref) => {\n return (\n <BaseCheckbox.Root\n ref={ref}\n id={id}\n checked={checked}\n onCheckedChange={(val) => {\n if (onChange) {\n // Mocking a change event since Base UI uses onCheckedChange\n onChange({\n target: { checked: val === true },\n } as React.ChangeEvent<HTMLInputElement>);\n }\n }}\n className={cn(\n \"pb:flex pb:h-5 pb:w-5 pb:shrink-0 pb:items-center pb:justify-center pb:rounded pb:border pb:border-gray-300 pb:bg-white pb:shadow-sm pb:transition-all pb:focus-visible:outline-none pb:focus-visible:ring-2 pb:focus-visible:ring-primary pb:focus-visible:ring-offset-2 pb:disabled:cursor-not-allowed pb:disabled:opacity-50\",\n \"pb:hover:border-primary pb:hover:bg-primary/5\",\n \"pb:data-[state=checked]:bg-primary pb:data-[state=checked]:border-primary pb:data-[state=checked]:text-white\",\n className,\n )}\n {...(props as ComponentPropsWithoutRef<typeof BaseCheckbox.Root>)}\n >\n <BaseCheckbox.Indicator>\n <Icon size=\"sm\" strokeWidth={3} className=\"pb:text-dark-primary\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"m4.5 12.75 6 6 9-13.5\"\n />\n </Icon>\n </BaseCheckbox.Indicator>\n </BaseCheckbox.Root>\n );\n },\n);\n\nCheckbox.displayName = \"Checkbox\";\n","import { ReactNode } from \"react\";\nimport { Heading } from \"./Typography\";\nimport { cn } from \"./utils\";\nimport { Collapsible } from \"./Collapsible\";\n\nexport interface SettingsPanelProps {\n /** The title of the section */\n title?: ReactNode;\n /** The content of the panel */\n children: ReactNode;\n /** Custom class for the panel wrapper */\n className?: string;\n /** Custom class for the content area */\n contentClassName?: string;\n /** Whether the panel is collapsible */\n collapsible?: boolean;\n /** Default state of the collapsible panel */\n defaultOpen?: boolean;\n /** The heading level for the title */\n headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;\n}\n\n/**\n * A standardized panel for settings sections.\n * Provides a consistent look with white background, shadow, and rounded corners.\n */\nexport function SettingsPanel({\n title,\n children,\n className,\n contentClassName,\n collapsible,\n defaultOpen = true,\n headingLevel = 3,\n}: SettingsPanelProps) {\n const content = (\n <div className={cn(\"pb:flex pb:flex-col\", contentClassName)}>{children}</div>\n );\n\n return (\n <div\n className={cn(\n \"pb:m-2 pb:p-4 pb:bg-white pb:shadow-xl pb:rounded-lg pb:flex pb:flex-1 pb:flex-col\",\n className,\n )}\n >\n {collapsible ? (\n <Collapsible\n title={\n typeof title === \"string\" ? (\n <Heading level={headingLevel} className=\"pb:text-gray-600\">\n {title}\n </Heading>\n ) : (\n title\n )\n }\n variant=\"ghost\"\n defaultOpen={defaultOpen}\n >\n {content}\n </Collapsible>\n ) : (\n <>\n {title && (\n <div className=\"pb:flex pb:items-center pb:justify-between pb:mb-2 empty:hidden\">\n {typeof title === \"string\" ? (\n <Heading level={headingLevel} className=\"pb:text-gray-600\">\n {title}\n </Heading>\n ) : (\n title\n )}\n </div>\n )}\n {content}\n </>\n )}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { Separator as BaseSeparator } from \"@base-ui/react/separator\";\nimport { cn } from \"./utils\";\n\nexport interface SeparatorProps extends React.ComponentPropsWithoutRef<\n typeof BaseSeparator\n> {\n orientation?: \"horizontal\" | \"vertical\";\n className?: string;\n}\n\nexport const Separator = React.forwardRef<\n React.ElementRef<typeof BaseSeparator>,\n SeparatorProps\n>(({ className, orientation = \"horizontal\", ...props }, ref) => (\n <BaseSeparator\n ref={ref}\n orientation={orientation}\n className={cn(\n \"pb:shrink-0 pb:bg-gray-200\",\n orientation === \"horizontal\" ? \"pb:h-[1px] pb:w-full\" : \"pb:h-full pb:w-[1px]\",\n className,\n )}\n {...props}\n />\n));\n\nSeparator.displayName = BaseSeparator.displayName;\n","import { HTMLAttributes } from \"react\";\nimport { cn } from \"./utils\";\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\n className?: string;\n}\n\nexport function Skeleton({ className, ...props }: SkeletonProps) {\n return (\n <div\n className={cn(\"pb:animate-pulse pb:rounded-md pb:bg-gray-200/50\", className)}\n {...props}\n />\n );\n}\n","import { useFormStatus } from \"react-dom\";\nimport { Button, Input, Heading, Text, Icon, Field } from \".\";\n\nfunction SubmitButton({ label }: { label: string }) {\n const { pending } = useFormStatus();\n return (\n <Button\n type=\"submit\"\n variant=\"primary\"\n isLoading={pending}\n disabled={pending}\n >\n {label}\n </Button>\n );\n}\n\nexport type AuthFormMode = \"signing up\" | \"signing in\" | \"resetting password\";\n\nexport interface AuthFormUIProps {\n mode: AuthFormMode;\n onModeChange: (mode: AuthFormMode) => void;\n formAction: (payload: FormData) => void;\n actionState: { error: string; message: string };\n onGoogleSignIn?: () => void;\n title?: React.ReactNode;\n description?: React.ReactNode;\n}\n\nexport function AuthFormUI({\n mode,\n onModeChange,\n formAction,\n actionState,\n onGoogleSignIn,\n title,\n description,\n}: AuthFormUIProps) {\n const defaultTitle =\n mode === \"signing up\"\n ? \"Sign up\"\n : mode === \"signing in\"\n ? \"Sign In\"\n : \"Reset Password\";\n\n return (\n <div className=\"pb:text-left pb:overflow-hidden\">\n <Heading level={2} className=\"pb:text-center pb:mb-2\">\n {title || defaultTitle}\n </Heading>\n\n <form className=\"pb:md:m-10 pb:sm:m-4 pb:space-y-4\" action={formAction}>\n {description && (\n <Text className=\"pb:text-center pb:mb-6\" variant=\"muted\">\n {description}\n </Text>\n )}\n\n {mode === \"resetting password\" && (\n <Text className=\"pb:text-center pb:font-bold pb:text-dark-primary\">\n {actionState.message}\n </Text>\n )}\n <Text className=\"pb:text-center\" variant=\"error\">\n {actionState.error}\n </Text>\n\n <div className=\"pb:space-y-4\">\n <Field\n id=\"email\"\n label=\"Email\"\n error={\n actionState.error && actionState.error.includes(\"email\")\n ? actionState.error\n : \"\"\n }\n >\n <Input\n name=\"email\"\n type=\"email\"\n required\n placeholder=\"Email\"\n leftIcon={<Icon name=\"envelope\" />}\n />\n </Field>\n\n {mode !== \"resetting password\" && (\n <Field\n id=\"password\"\n label=\"Password\"\n error={\n actionState.error && actionState.error.includes(\"password\")\n ? actionState.error\n : \"\"\n }\n >\n <Input\n name=\"password\"\n type=\"password\"\n required\n placeholder=\"Password\"\n leftIcon={<Icon name=\"lockClosed\" />}\n />\n </Field>\n )}\n </div>\n\n <div className=\"pb:text-center pb:mt-6 pb:space-y-4\">\n {mode === \"signing up\" && <SubmitButton label=\"Sign Up\" />}\n {mode === \"signing in\" && <SubmitButton label=\"Sign In\" />}\n {mode === \"resetting password\" && (\n <SubmitButton label=\"Reset Password\" />\n )}\n\n <div className=\"pb:text-center pb:text-sm pb:text-gray-500\">\n {mode === \"signing up\" && (\n <Text>\n Already have an account?{\" \"}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onModeChange(\"signing in\")}\n className=\"pb:underline pb:p-0 pb:h-auto pb:hover:bg-transparent\"\n >\n Sign in\n </Button>\n </Text>\n )}\n {mode === \"signing in\" && (\n <div className=\"pb:flex pb:flex-col pb:gap-2\">\n <Text>\n Forgot your password?{\" \"}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onModeChange(\"resetting password\")}\n className=\"pb:underline pb:p-0 pb:h-auto pb:hover:bg-transparent\"\n >\n Reset password.\n </Button>\n </Text>\n <div className=\"pb:relative\">\n <div className=\"pb:absolute pb:inset-0 pb:flex pb:items-center\">\n <div className=\"pb:w-full pb:border-t pb:border-gray-300\"></div>\n </div>\n <div className=\"pb:relative pb:flex pb:justify-center pb:text-sm\">\n <span className=\"pb:px-2 pb:bg-white pb:text-gray-500\">or</span>\n </div>\n </div>\n <Text>\n Don't have an account?{\" \"}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onModeChange(\"signing up\")}\n className=\"pb:underline pb:p-0 pb:h-auto pb:hover:bg-transparent\"\n >\n Sign up\n </Button>\n </Text>\n </div>\n )}\n {mode === \"resetting password\" && (\n <div className=\"pb:flex pb:flex-col pb:gap-2\">\n <Text>\n Don't have an account?{\" \"}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onModeChange(\"signing up\")}\n className=\"pb:underline pb:p-0 pb:h-auto pb:hover:bg-transparent\"\n >\n Sign up\n </Button>\n </Text>\n <div className=\"pb:relative\">\n <div className=\"pb:absolute pb:inset-0 pb:flex pb:items-center\">\n <div className=\"pb:w-full pb:border-t pb:border-gray-300\"></div>\n </div>\n <div className=\"pb:relative pb:flex pb:justify-center pb:text-sm\">\n <span className=\"pb:px-2 pb:bg-white pb:text-gray-500\">or</span>\n </div>\n </div>\n <Text>\n Remembered your password?\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onModeChange(\"signing in\")}\n className=\"pb:underline pb:p-0 pb:h-auto pb:hover:bg-transparent\"\n >\n Sign In\n </Button>\n </Text>\n </div>\n )}\n </div>\n </div>\n\n {mode !== \"resetting password\" && onGoogleSignIn && (\n <div className=\"pb:text-center pb:mt-4\">\n <Button\n variant=\"secondary\"\n onClick={onGoogleSignIn}\n type=\"button\"\n className=\"pb:w-full pb:flex pb:items-center pb:justify-center pb:gap-2\"\n >\n <Icon name=\"google\" stroke=\"none\" />\n {mode === \"signing up\" && <span>Sign up with Google</span>}\n {mode === \"signing in\" && <span>Sign in with Google</span>}\n </Button>\n </div>\n )}\n </form>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport { Button, Icon } from \".\";\n\nexport type AlertLevel = \"Error\" | \"Warning\" | \"Success\" | \"Info\";\n\nexport interface AlertAction {\n name: string;\n callback: () => void;\n}\n\nexport interface AlertUIProps {\n level: AlertLevel;\n message: React.ReactNode;\n action?: AlertAction;\n}\n\nexport function Alert({ level, message, action }: AlertUIProps) {\n const [showAlert, setShowAlert] = useState(true);\n\n return (\n <div\n className={\n \"pb:flex pb:w-full pb:p-4 pb:m-1 pb:text-sm pb:rounded-lg pb:bg-white pb:border pb:border-solid pb:transition-opacity pb:ease-in-out pb:delay-150 pb:duration-300 \" +\n (showAlert ? \" \" : \" pb:hidden\")\n }\n >\n <span>\n {level === \"Error\" && (\n <Icon\n name=\"exclamationCircle\"\n size=\"lg\"\n className=\"pb:m-2\"\n stroke=\"red\"\n />\n )}\n {level === \"Warning\" && (\n <Icon\n name=\"exclamationTriangle\"\n size=\"lg\"\n className=\"pb:m-2\"\n stroke=\"yellow\"\n />\n )}\n {level === \"Success\" && (\n <Icon name=\"checkCircle\" size=\"lg\" className=\"pb:m-2\" stroke=\"green\" />\n )}\n {level === \"Info\" && (\n <Icon name=\"megaphone\" size=\"lg\" className=\"pb:m-2\" />\n )}\n </span>\n <span className=\"pb:flex pb:flex-1 pb:ml-2\">{message}</span>\n {action && (\n <Button\n onClick={() => {\n action.callback();\n setShowAlert(false);\n }}\n >\n {action.name}\n </Button>\n )}\n <span\n className=\"pb:cursor-pointer\"\n onClick={() => {\n setShowAlert(false);\n }}\n >\n <Icon name=\"xCircle\" size=\"lg\" className=\"pb:m-1\" />\n </span>\n </div>\n );\n}\n","import { Button, Icon } from \".\";\nimport React from \"react\";\n\nexport interface TabItem {\n id: string;\n label: string;\n onClose?: () => void;\n onEdit?: () => void;\n}\n\nexport interface TabSelectionProps {\n tabs: TabItem[];\n activeTabId: string | null;\n onTabClick: (id: string) => void;\n onAddClick?: () => void;\n className?: string;\n}\n\nexport function TabSelection({\n tabs,\n activeTabId,\n onTabClick,\n onAddClick,\n className = \"\",\n}: TabSelectionProps) {\n return (\n <div\n className={`pb:overflow-x-auto pb:max-h-20 pb:text-sm pb:whitespace-nowrap ${className}`}\n >\n {tabs.map((tab) => {\n const isActive = tab.id === activeTabId;\n return (\n <div\n key={tab.id}\n className={\n \"pb:inline-block pb:align-middle pb:m-1 pb:px-2 pb:py-2 pb:cursor-pointer pb:rounded-sm \" +\n (isActive\n ? \"pb:font-bold pb:bg-primary/30\"\n : \"pb:font-gray-300 pb:bg-gray-200\")\n }\n onClick={() => onTabClick(tab.id)}\n >\n <span className=\"pb:inline-block pb:align-middle\">{tab.label}</span>\n\n {isActive && (tab.onEdit || tab.onClose) && (\n <span className=\"pb:inline-flex pb:items-center pb:ml-2 pb:align-middle\">\n {tab.onEdit && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label=\"Edit Tab\"\n onClick={(e) => {\n e.stopPropagation();\n tab.onEdit!();\n }}\n leftIcon={<Icon name=\"edit\" size=\"sm\" />}\n />\n )}\n {tab.onEdit && tab.onClose && (\n <span className=\"pb:opacity-10 pb:align-middle pb:mx-1\">{\" | \"}</span>\n )}\n {tab.onClose && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label=\"Close Tab\"\n onClick={(e) => {\n e.stopPropagation();\n tab.onClose!();\n }}\n leftIcon={<Icon name=\"close\" size=\"sm\" />}\n />\n )}\n </span>\n )}\n </div>\n );\n })}\n {onAddClick && (\n <Button\n variant=\"primary\"\n size=\"sm\"\n aria-label=\"Create New Tab\"\n onClick={onAddClick}\n leftIcon={<Icon name=\"plus\" size=\"sm\" />}\n className=\"pb:m-1 pb:align-middle pb:inline-flex\"\n />\n )}\n </div>\n );\n}\n","interface SEOProps {\n title: string;\n description?: string;\n image?: string;\n url?: string;\n type?: string;\n}\n\nexport function SEO({\n title,\n description = \"Peerbots platform: social robots for everyone, powered by experts.\",\n image = \"/peerbots-logo.png\", // Default image if one exists, customizable\n url,\n type = \"website\",\n}: SEOProps) {\n const siteTitle = \"Peerbots App\";\n const fullTitle = title === \"Home\" ? siteTitle : `${title} | ${siteTitle}`;\n const currentUrl =\n url || (typeof window !== \"undefined\" ? window.location.href : \"\");\n\n return (\n <>\n <title>{fullTitle}</title>\n <meta name=\"description\" content={description} />\n\n {/* Open Graph */}\n <meta property=\"og:title\" content={fullTitle} />\n <meta property=\"og:description\" content={description} />\n <meta property=\"og:image\" content={image} />\n <meta property=\"og:url\" content={currentUrl} />\n <meta property=\"og:type\" content={type} />\n <meta property=\"og:site_name\" content={siteTitle} />\n\n {/* Twitter Card */}\n <meta name=\"twitter:card\" content=\"summary_large_image\" />\n <meta name=\"twitter:title\" content={fullTitle} />\n <meta name=\"twitter:description\" content={description} />\n <meta name=\"twitter:image\" content={image} />\n </>\n );\n}\n","import {\n VictoryChart,\n VictoryBar,\n VictoryAxis,\n VictoryTooltip,\n VictoryVoronoiContainer,\n VictoryLine,\n VictoryLabel,\n} from \"victory\";\n\nexport interface DistributionBarData {\n label: string;\n count: number;\n items?: string[];\n fill?: string;\n stroke?: string;\n}\n\nexport interface DistributionBarChartProps {\n data: DistributionBarData[];\n alt: string;\n chartWidth?: number;\n chartHeight?: number;\n average?: number;\n referenceLineValue?: number;\n referenceLineLabel?: string;\n label?: string;\n}\n\nexport function DistributionBarChart({\n data,\n alt,\n chartWidth = 600,\n chartHeight = 400,\n average,\n referenceLineValue,\n referenceLineLabel = \"Reference\",\n label,\n}: DistributionBarChartProps) {\n const maxCount = Math.max(...data.map((d) => d.count), 5);\n const labels = data.map((d) => d.label);\n\n if (data.length === 0) return null;\n\n return (\n <div className=\"pb:mb-6\" role=\"img\" aria-label={alt}>\n {label && (\n <label className=\"pb:text-xs pb:uppercase pb:font-bold pb:text-gray-400 pb:block pb:mb-2 pb:px-1\">\n {label}\n </label>\n )}\n <VictoryChart\n width={chartWidth}\n height={chartHeight}\n padding={{ left: 100, right: 50, top: 40, bottom: 60 }}\n containerComponent={<VictoryVoronoiContainer />}\n >\n <VictoryAxis\n horizontal\n tickValues={labels}\n style={{\n axis: { stroke: \"#cbd5e1\" },\n tickLabels: { fontSize: 18, padding: 5, fill: \"#334155\" },\n }}\n />\n <VictoryAxis\n dependentAxis\n domain={[0, maxCount]}\n tickFormat={(x: number | string) =>\n typeof x === \"number\" ? Math.round(x) : x\n }\n style={{\n axis: { stroke: \"#cbd5e1\" },\n tickLabels: { fontSize: 18, padding: 5, fill: \"#334155\" },\n grid: { stroke: \"#f1f5f9\" },\n }}\n />\n <VictoryBar\n horizontal\n domain={{ x: [0.5, labels.length + 0.5], y: [0, maxCount] }}\n data={data}\n x={\"label\"}\n y={\"count\"}\n labels={({ datum }: { datum?: DistributionBarData }) => {\n if (!datum || datum.count === 0) return \"\";\n if (!datum.items || datum.items.length === 0)\n return `${datum.count}`;\n const displayItems = datum.items.slice(0, 5);\n let labelText = displayItems.join(\"\\n\");\n if (datum.items.length > 5)\n labelText += `\\n...and ${datum.items.length - 5} more`;\n return labelText;\n }}\n labelComponent={\n <VictoryTooltip\n style={{ fontSize: 18 }}\n flyoutStyle={{ fill: \"white\", stroke: \"#cbd5e1\" }}\n pointerLength={5}\n cornerRadius={2}\n constrainToVisibleArea\n />\n }\n style={{\n data: {\n fill: ({ datum }: { datum?: DistributionBarData }) =>\n datum?.fill\n ? datum.fill === \"White\"\n ? \"#f3f4f6\"\n : datum.fill\n : \"#46d9d9\",\n width: 14,\n stroke: ({ datum }: { datum?: DistributionBarData }) =>\n datum?.stroke\n ? datum.stroke\n : datum?.fill === \"White\"\n ? \"#d1d5db\"\n : \"none\",\n strokeWidth: ({ datum }: { datum?: DistributionBarData }) =>\n datum?.stroke || datum?.fill === \"White\" ? 0.5 : 0,\n cursor: \"pointer\",\n },\n }}\n cornerRadius={2}\n />\n {average !== undefined && (\n <VictoryLine\n y={() => average}\n style={{\n data: {\n stroke: \"#9ca3af\",\n strokeWidth: 2,\n strokeDasharray: \"4, 4\",\n },\n }}\n labels={[\"Average\"]}\n labelComponent={\n <VictoryLabel\n y={45}\n style={{ fill: \"#475569\", fontSize: 18, fontWeight: \"bold\" }}\n backgroundStyle={{ fill: \"white\" }}\n backgroundPadding={12}\n />\n }\n />\n )}\n {referenceLineValue !== undefined && (\n <VictoryLine\n y={() => referenceLineValue}\n labels={[referenceLineLabel]}\n labelComponent={\n <VictoryLabel\n y={45}\n style={{ fill: \"#ef4444\", fontSize: 18, fontWeight: \"bold\" }}\n backgroundStyle={{ fill: \"white\" }}\n backgroundPadding={12}\n />\n }\n style={{\n data: {\n stroke: \"#ef4444\",\n strokeWidth: 2,\n strokeDasharray: \"4, 4\",\n },\n }}\n />\n )}\n </VictoryChart>\n </div>\n );\n}\n","import {\n VictoryChart,\n VictoryAxis,\n VictoryLabel,\n VictoryLine,\n VictoryHistogram,\n VictoryTooltip,\n VictoryVoronoiContainer,\n} from \"victory\";\n\nexport interface DistributionHistogramData {\n x: number;\n text: string;\n}\n\nexport interface DistributionHistogramProps {\n data: DistributionHistogramData[];\n alt: string;\n label: string;\n average?: number;\n referenceLineValue?: number;\n referenceLineLabel?: string;\n chartWidth?: number;\n chartHeight?: number;\n}\n\nexport function DistributionHistogram({\n data,\n alt,\n label,\n average,\n referenceLineValue,\n referenceLineLabel = \"Reference\",\n chartWidth = 600,\n chartHeight = 400,\n}: DistributionHistogramProps) {\n if (data.length === 0) return null;\n\n const binSize = 10;\n const maxLength = Math.max(\n ...data.map((r) => r.x),\n referenceLineValue ?? 0,\n binSize,\n );\n const maxX = Math.ceil(maxLength / binSize) * binSize + binSize;\n\n const boundaries = [];\n for (let i = 0; i <= maxX; i += binSize) {\n boundaries.push(i);\n }\n\n const padding = { left: 60, right: 30, top: 20, bottom: 70 };\n\n return (\n <div className=\"pb:mb-6\" role=\"img\" aria-label={alt}>\n <label className=\"pb:text-xs pb:uppercase pb:font-bold pb:text-gray-400 pb:block pb:mb-2 pb:px-1\">\n {label}\n </label>\n <VictoryChart\n width={chartWidth}\n height={chartHeight}\n padding={padding}\n containerComponent={<VictoryVoronoiContainer />}\n >\n <VictoryAxis\n label=\"Length\"\n tickValues={boundaries}\n tickFormat={(x: number | string) =>\n typeof x === \"number\" ? Math.round(x) : x\n }\n style={{\n axis: { stroke: \"#cbd5e1\" },\n axisLabel: {\n fontSize: 18,\n padding: 45,\n fill: \"#334155\",\n fontWeight: \"bold\",\n },\n tickLabels: {\n fontSize: 18,\n padding: 5,\n fill: \"#334155\",\n angle: 45,\n textAnchor: \"start\",\n },\n }}\n />\n <VictoryAxis\n dependentAxis\n label=\"Count\"\n tickFormat={(x: number | string) =>\n typeof x === \"number\" ? Math.round(x) : x\n }\n style={{\n axis: { stroke: \"#cbd5e1\" },\n axisLabel: {\n fontSize: 18,\n padding: 40,\n fill: \"#334155\",\n fontWeight: \"bold\",\n },\n tickLabels: {\n fontSize: 18,\n padding: 5,\n fill: \"#334155\",\n },\n grid: { stroke: \"#f1f5f9\" },\n }}\n />\n <VictoryHistogram\n data={data}\n bins={boundaries}\n x=\"x\"\n labels={({\n datum,\n }: {\n datum?: {\n y: number;\n binnedData?: { text: string }[];\n };\n }) => {\n if (!datum || datum.y === 0 || !datum.binnedData) return \"\";\n const items = datum.binnedData.map((d: { text: string }) => d.text);\n const displayItems = items.slice(0, 5);\n let labelText = displayItems.join(\"\\n\");\n if (items.length > 5)\n labelText += `\\n...and ${items.length - 5} more`;\n return labelText;\n }}\n labelComponent={\n <VictoryTooltip\n style={{ fontSize: 18 }}\n flyoutStyle={{ fill: \"white\", stroke: \"#cbd5e1\" }}\n pointerLength={5}\n cornerRadius={2}\n constrainToVisibleArea\n />\n }\n style={{\n data: {\n fill: \"#46d9d9\",\n stroke: \"#fff\",\n strokeWidth: 1,\n cursor: \"pointer\",\n },\n }}\n />\n {average !== undefined && (\n <VictoryLine\n x={() => average}\n style={{\n data: {\n stroke: \"#9ca3af\",\n strokeWidth: 2,\n strokeDasharray: \"4, 4\",\n },\n }}\n labels={[\"Average\"]}\n labelComponent={\n <VictoryLabel\n y={45}\n style={{ fill: \"#475569\", fontSize: 18, fontWeight: \"bold\" }}\n backgroundStyle={{ fill: \"white\" }}\n backgroundPadding={12}\n />\n }\n />\n )}\n {referenceLineValue !== undefined && (\n <VictoryLine\n x={() => referenceLineValue}\n labels={[referenceLineLabel]}\n labelComponent={\n <VictoryLabel\n y={45}\n style={{ fill: \"#ef4444\", fontSize: 18, fontWeight: \"bold\" }}\n backgroundStyle={{ fill: \"white\" }}\n backgroundPadding={12}\n />\n }\n style={{\n data: {\n stroke: \"#ef4444\",\n strokeWidth: 2,\n strokeDasharray: \"4, 4\",\n },\n }}\n />\n )}\n </VictoryChart>\n </div>\n );\n}\n"],"mappings":"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","names":["styleInject","css","insertAt","head","style","styleInject","BaseButton","React","clsx","twMerge","cn","inputs","jsx","jsxs","Button","React","className","variant","size","isLoading","leftIcon","rightIcon","children","disabled","render","nativeButton","isIconOnly","props","ref","isActuallyIconOnly","variants","sizes","BaseButton","cn","BaseInput","React","jsx","jsxs","Input","React","className","leftIcon","rightIcon","id","props","ref","inputClasses","cn","BaseInput","React","BaseSelect","React","Fragment","jsx","jsxs","iconPaths","complexIcons","icons","jsx","Icon","React","className","size","name","children","props","ref","sizes","iconContent","icons","cn","jsx","jsxs","Select","React","className","options","propsId","value","defaultValue","onChange","disabled","placeholder","onFocus","props","ref","generatedId","selectId","BaseSelect","val","details","event","cn","Icon","option","index","label","React","clsx","twMerge","jsx","jsxs","cn","inputs","headingSizes","textVariants","Heading","level","className","children","props","Text","variant","Component","TypographyList","args","React","BaseSlider","jsx","jsxs","Slider","React","className","min","max","step","value","defaultValue","disabled","onChange","name","icon","props","ref","handleChange","val","event","cn","BaseSlider","details","React","React","BaseNumberField","jsx","jsxs","NumberField","React","className","value","defaultValue","min","max","step","onChange","disabled","readOnly","propsId","placeholder","showButtons","props","ref","generatedId","numberId","BaseNumberField","val","details","event","cn","Icon","jsx","jsxs","SliderWithNumberField","React","className","min","max","step","value","defaultValue","disabled","onChange","inputWidth","props","ref","handleChange","val","event","newValue","cn","Slider","NumberField","React","BaseTooltip","jsx","jsxs","Tooltip","content","children","className","delay","BaseTooltip","React","cn","HelperTooltip","Icon","React","BaseDialog","jsx","jsxs","Dialog","open","onOpenChange","trigger","children","className","BaseDialog","eventDetails","React","cn","DialogTitle","props","DialogDescription","DialogClose","BasePopover","jsx","jsxs","Popover","trigger","children","side","align","className","open","onOpenChange","BasePopover","cn","React","BaseMenu","jsx","jsxs","Dropdown","trigger","children","align","className","BaseMenu","React","cn","DropdownItem","props","ref","DropdownSeparator","useState","jsx","jsxs","Collapsible","title","children","variant","size","defaultOpen","className","isOpen","setIsOpen","useState","cn","Button","Icon","React","BaseSwitch","jsx","Switch","React","checked","defaultChecked","onChange","disabled","className","externalId","props","ref","autoId","id","cn","BaseSwitch","eventDetails","jsx","jsxs","Label","children","tooltip","className","props","cn","HelperTooltip","jsx","jsxs","BasePanel","title","children","onClose","className","headerClassName","headingLevel","setPanel","panel","handleClose","Heading","Button","Icon","Toggle","ToggleGroup","jsx","variantStyles","TabRadio","options","value","onChange","className","variant","ariaLabel","val","cn","option","BaseField","React","jsx","jsxs","Field","React","label","description","error","tooltip","children","className","icon","labelPlacement","labelWeight","props","ref","isHorizontal","labelOnRight","BaseField","cn","Label","React","Link","jsx","Anchor","className","href","target","props","ref","isInternal","commonClass","cn","Link","BaseInput","React","jsx","TextArea","React","className","id","props","ref","BaseInput","cn","BaseCheckbox","React","jsx","Checkbox","React","className","id","checked","onChange","props","ref","BaseCheckbox","val","cn","Icon","Fragment","jsx","jsxs","SettingsPanel","title","children","className","contentClassName","collapsible","defaultOpen","headingLevel","content","cn","Collapsible","Heading","React","BaseSeparator","jsx","Separator","className","orientation","props","ref","BaseSeparator","cn","jsx","Skeleton","className","props","cn","useFormStatus","jsx","jsxs","SubmitButton","label","pending","useFormStatus","Button","AuthFormUI","mode","onModeChange","formAction","actionState","onGoogleSignIn","title","description","Heading","Text","Field","Input","Icon","useState","jsx","jsxs","Alert","level","message","action","showAlert","setShowAlert","useState","Icon","Button","jsx","jsxs","TabSelection","tabs","activeTabId","onTabClick","onAddClick","className","tab","isActive","Button","e","Icon","Fragment","jsx","jsxs","SEO","title","description","image","url","type","siteTitle","fullTitle","currentUrl","VictoryChart","VictoryBar","VictoryAxis","VictoryTooltip","VictoryVoronoiContainer","VictoryLine","VictoryLabel","jsx","jsxs","DistributionBarChart","data","alt","chartWidth","chartHeight","average","referenceLineValue","referenceLineLabel","label","maxCount","d","labels","x","datum","labelText","VictoryChart","VictoryAxis","VictoryLabel","VictoryLine","VictoryHistogram","VictoryTooltip","VictoryVoronoiContainer","jsx","jsxs","DistributionHistogram","data","alt","label","average","referenceLineValue","referenceLineLabel","chartWidth","chartHeight","binSize","maxLength","r","maxX","boundaries","i","x","datum","items","d","labelText"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.2.
|
|
6
|
+
"version": "0.2.3",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"style": "./dist/index.css",
|
|
9
9
|
"types": "dist/index.d.ts",
|
|
@@ -14,7 +14,19 @@
|
|
|
14
14
|
"import": "./dist/index.mjs",
|
|
15
15
|
"require": "./dist/index.js"
|
|
16
16
|
},
|
|
17
|
+
"./theme": {
|
|
18
|
+
"style": "./dist/styles/theme.css",
|
|
19
|
+
"default": "./dist/styles/theme.css"
|
|
20
|
+
},
|
|
21
|
+
"./styles": {
|
|
22
|
+
"style": "./dist/index.css",
|
|
23
|
+
"default": "./dist/index.css"
|
|
24
|
+
},
|
|
17
25
|
"./theme.css": {
|
|
26
|
+
"style": "./dist/styles/theme.css",
|
|
27
|
+
"default": "./dist/styles/theme.css"
|
|
28
|
+
},
|
|
29
|
+
"./dist/index.css": {
|
|
18
30
|
"style": "./dist/index.css",
|
|
19
31
|
"default": "./dist/index.css"
|
|
20
32
|
}
|
|
@@ -26,7 +38,7 @@
|
|
|
26
38
|
"url": "git+https://github.com/peerbots/peerbots-core.git"
|
|
27
39
|
},
|
|
28
40
|
"scripts": {
|
|
29
|
-
"build": "tsup
|
|
41
|
+
"build": "tsup",
|
|
30
42
|
"changeset": "changeset",
|
|
31
43
|
"release": "changeset publish",
|
|
32
44
|
"storybook": "storybook dev -p 6006",
|
|
@@ -52,12 +64,15 @@
|
|
|
52
64
|
"@storybook/addon-onboarding": "^10.3.3",
|
|
53
65
|
"@storybook/addon-vitest": "^10.3.3",
|
|
54
66
|
"@storybook/react-vite": "^10.3.3",
|
|
67
|
+
"@tailwindcss/postcss": "^4.2.2",
|
|
55
68
|
"@tailwindcss/vite": "^4.2.2",
|
|
56
69
|
"@types/react": "^19.2.14",
|
|
57
70
|
"@types/react-dom": "^19.2.3",
|
|
58
71
|
"@vitest/browser-playwright": "^4.1.2",
|
|
59
72
|
"@vitest/coverage-v8": "^4.1.2",
|
|
73
|
+
"autoprefixer": "^10.4.27",
|
|
60
74
|
"playwright": "^1.58.2",
|
|
75
|
+
"postcss": "^8.5.8",
|
|
61
76
|
"react": "^19.2.4",
|
|
62
77
|
"react-dom": "^19.2.4",
|
|
63
78
|
"storybook": "^10.3.3",
|
package/src/index.ts
CHANGED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
@import "tailwindcss" prefix(pb);
|
|
2
|
+
@import "./theme.css";
|
|
3
|
+
|
|
4
|
+
@utility input-base {
|
|
5
|
+
@apply pb:bg-primary/10 pb:border pb:border-b-2 pb:border-gray-300 pb:focus:border-gray-600 pb:py-2 pb:px-2;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
@utility btn-primary {
|
|
9
|
+
@apply pb:bg-primary pb:hover:bg-dark-primary pb:text-gray-900 pb:font-bold pb:py-1 pb:px-2 pb:my-1 pb:mx-2 pb:rounded-md pb:disabled:bg-gray-400 pb:disabled:hover:bg-gray-300 pb:disabled:cursor-not-allowed pb:cursor-pointer;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
@utility btn-secondary {
|
|
13
|
+
@apply pb:bg-gray-100 pb:hover:bg-gray-200 pb:text-gray-800 pb:font-normal pb:py-1 pb:px-2 pb:my-1 pb:mx-2 pb:rounded-md pb:disabled:bg-gray-400 pb:disabled:hover:bg-gray-300 pb:disabled:cursor-not-allowed pb:cursor-pointer;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@utility btn-danger {
|
|
17
|
+
@apply pb:bg-danger pb:hover:opacity-80 pb:text-gray-900 pb:font-bold pb:py-1 pb:px-2 pb:my-1 pb:mx-2 pb:rounded-md pb:disabled:bg-gray-400 pb:disabled:hover:bg-gray-300 pb:disabled:cursor-not-allowed pb:cursor-pointer;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@utility range-primary {
|
|
21
|
+
@apply pb:accent-primary pb:bg-gray-100 pb:rounded-md pb:cursor-pointer;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.range-vertical {
|
|
25
|
+
writing-mode: vertical-lr;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.pb-tooltip,
|
|
29
|
+
.pb-tooltip-slow {
|
|
30
|
+
@apply pb:absolute pb:invisible pb:opacity-0;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/* Using siblings so that hovering over the invisible tooltip doesn't trigger the tooltip */
|
|
34
|
+
.pb-has-tooltip:hover+.pb-tooltip {
|
|
35
|
+
@apply pb:visible pb:opacity-100 pb:z-50 pb:transition-opacity pb:delay-300 pb:ease-in-out;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.pb-has-tooltip:hover+.pb-tooltip-slow {
|
|
39
|
+
@apply pb:visible pb:opacity-100 pb:z-50 pb:transition-opacity pb:delay-1000 pb:ease-in-out;
|
|
40
|
+
}
|
package/src/styles/theme.css
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
@import "tailwindcss" prefix(pb);
|
|
2
|
-
|
|
3
1
|
@theme {
|
|
4
2
|
--color-primary: #46d9d9;
|
|
5
3
|
/* --color-old-dark-primary: #5fc7cc; */
|
|
@@ -19,42 +17,4 @@
|
|
|
19
17
|
var(--tw-gradient-stops));
|
|
20
18
|
|
|
21
19
|
--font-sans: "Avenir", "Nunito", sans-serif;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
@utility input-base {
|
|
25
|
-
@apply pb:bg-primary/10 pb:border pb:border-b-2 pb:border-gray-300 pb:focus:border-gray-600 pb:py-2 pb:px-2;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
@utility btn-primary {
|
|
29
|
-
@apply pb:bg-primary pb:hover:bg-dark-primary pb:text-gray-900 pb:font-bold pb:py-1 pb:px-2 pb:my-1 pb:mx-2 pb:rounded-md pb:disabled:bg-gray-400 pb:disabled:hover:bg-gray-300 pb:disabled:cursor-not-allowed pb:cursor-pointer;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
@utility btn-secondary {
|
|
33
|
-
@apply pb:bg-gray-100 pb:hover:bg-gray-200 pb:text-gray-800 pb:font-normal pb:py-1 pb:px-2 pb:my-1 pb:mx-2 pb:rounded-md pb:disabled:bg-gray-400 pb:disabled:hover:bg-gray-300 pb:disabled:cursor-not-allowed pb:cursor-pointer;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
@utility btn-danger {
|
|
37
|
-
@apply pb:bg-danger pb:hover:opacity-80 pb:text-gray-900 pb:font-bold pb:py-1 pb:px-2 pb:my-1 pb:mx-2 pb:rounded-md pb:disabled:bg-gray-400 pb:disabled:hover:bg-gray-300 pb:disabled:cursor-not-allowed pb:cursor-pointer;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
@utility range-primary {
|
|
41
|
-
@apply pb:accent-primary pb:bg-gray-100 pb:rounded-md pb:cursor-pointer;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
.range-vertical {
|
|
45
|
-
writing-mode: vertical-lr;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
.pb-tooltip,
|
|
49
|
-
.pb-tooltip-slow {
|
|
50
|
-
@apply pb:absolute pb:invisible pb:opacity-0;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/* Using siblings so that hovering over the invisible tooltip doesn't trigger the tooltip */
|
|
54
|
-
.pb-has-tooltip:hover+.pb-tooltip {
|
|
55
|
-
@apply pb:visible pb:opacity-100 pb:z-50 pb:transition-opacity pb:delay-300 pb:ease-in-out;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
.pb-has-tooltip:hover+.pb-tooltip-slow {
|
|
59
|
-
@apply pb:visible pb:opacity-100 pb:z-50 pb:transition-opacity pb:delay-1000 pb:ease-in-out;
|
|
60
20
|
}
|
package/tsup.config.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { defineConfig } from "tsup";
|
|
2
|
+
|
|
3
|
+
export default defineConfig([
|
|
4
|
+
{
|
|
5
|
+
entry: {
|
|
6
|
+
index: "src/index.ts",
|
|
7
|
+
},
|
|
8
|
+
format: ["cjs", "esm"],
|
|
9
|
+
dts: true,
|
|
10
|
+
minify: true,
|
|
11
|
+
clean: true,
|
|
12
|
+
injectStyle: true,
|
|
13
|
+
sourcemap: true,
|
|
14
|
+
splitting: false,
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
entry: {
|
|
18
|
+
"styles/theme": "src/styles/theme.css",
|
|
19
|
+
},
|
|
20
|
+
format: ["esm"],
|
|
21
|
+
minify: true,
|
|
22
|
+
clean: false,
|
|
23
|
+
injectStyle: false, // Ensures a standalone CSS file is generated
|
|
24
|
+
},
|
|
25
|
+
]);
|