@peerbots/core 0.2.6 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.changeset/config.json +1 -1
- package/.github/workflows/storybook.yml +9 -1
- package/CHANGELOG.md +94 -0
- package/dist/index.d.mts +643 -131
- package/dist/index.d.ts +643 -131
- package/dist/index.js +7 -6
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +7 -6
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -3
- package/src/charts/DistributionBarChart.tsx +10 -4
- package/src/charts/DistributionHistogram.tsx +13 -5
- package/src/charts/LineGraph.stories.tsx +60 -0
- package/src/charts/LineGraph.tsx +216 -0
- package/src/charts/index.ts +2 -0
- package/src/docs/DesignSystem.mdx +241 -25
- package/src/styles/theme.css +8 -0
- package/src/ui/feedback/Alert.stories.tsx +56 -0
- package/src/ui/feedback/Alert.tsx +168 -0
- package/src/ui/{Dialog.stories.tsx → feedback/Dialog.stories.tsx} +2 -2
- package/src/ui/{Dialog.tsx → feedback/Dialog.tsx} +2 -2
- package/src/ui/feedback/EmptyState.stories.tsx +57 -0
- package/src/ui/feedback/EmptyState.tsx +123 -0
- package/src/ui/feedback/Popover.stories.tsx +130 -0
- package/src/ui/feedback/Popover.tsx +135 -0
- package/src/ui/feedback/Skeleton.stories.tsx +88 -0
- package/src/ui/{Skeleton.tsx → feedback/Skeleton.tsx} +2 -2
- package/src/ui/feedback/Spinner.stories.tsx +77 -0
- package/src/ui/feedback/Spinner.tsx +62 -0
- package/src/ui/{Tooltip.stories.tsx → feedback/Tooltip.stories.tsx} +3 -3
- package/src/ui/{Tooltip.tsx → feedback/Tooltip.tsx} +2 -2
- package/src/ui/feedback/index.ts +7 -0
- package/src/ui/forms/Button.stories.tsx +181 -0
- package/src/ui/forms/Button.tsx +323 -0
- package/src/ui/{Checkbox.stories.tsx → forms/Checkbox.stories.tsx} +2 -2
- package/src/ui/{Checkbox.tsx → forms/Checkbox.tsx} +2 -2
- package/src/ui/forms/ChipGroup.stories.tsx +118 -0
- package/src/ui/forms/ChipGroup.tsx +239 -0
- package/src/ui/{Dropdown.tsx → forms/Dropdown.tsx} +1 -1
- package/src/ui/{Field.stories.tsx → forms/Field.stories.tsx} +3 -3
- package/src/ui/{Field.tsx → forms/Field.tsx} +1 -1
- package/src/ui/{Input.stories.tsx → forms/Input.stories.tsx} +6 -6
- package/src/ui/{Input.tsx → forms/Input.tsx} +1 -1
- package/src/ui/{Label.stories.tsx → forms/Label.stories.tsx} +2 -2
- package/src/ui/{Label.tsx → forms/Label.tsx} +2 -2
- package/src/ui/{NumberField.stories.tsx → forms/NumberField.stories.tsx} +2 -2
- package/src/ui/{NumberField.tsx → forms/NumberField.tsx} +8 -9
- package/src/ui/forms/PeerbotsColorSelector.stories.tsx +49 -0
- package/src/ui/forms/PeerbotsColorSelector.tsx +100 -0
- package/src/ui/{Select.stories.tsx → forms/Select.stories.tsx} +2 -2
- package/src/ui/{Select.tsx → forms/Select.tsx} +5 -3
- package/src/ui/{Slider.stories.tsx → forms/Slider.stories.tsx} +6 -4
- package/src/ui/{Slider.tsx → forms/Slider.tsx} +7 -3
- package/src/ui/forms/SliderWithNumberField.stories.tsx +136 -0
- package/src/ui/{SliderWithNumberField.tsx → forms/SliderWithNumberField.tsx} +19 -7
- package/src/ui/{Switch.stories.tsx → forms/Switch.stories.tsx} +2 -2
- package/src/ui/{Switch.tsx → forms/Switch.tsx} +1 -1
- package/src/ui/{TabRadio.stories.tsx → forms/TabRadio.stories.tsx} +3 -3
- package/src/ui/{TabRadio.tsx → forms/TabRadio.tsx} +1 -1
- package/src/ui/{TextArea.stories.tsx → forms/TextArea.stories.tsx} +5 -3
- package/src/ui/{TextArea.tsx → forms/TextArea.tsx} +1 -1
- package/src/ui/forms/index.ts +15 -0
- package/src/ui/foundations/Anchor.stories.tsx +39 -0
- package/src/ui/foundations/Anchor.tsx +96 -0
- package/src/ui/foundations/CodeBlock.stories.tsx +86 -0
- package/src/ui/foundations/CodeBlock.tsx +148 -0
- package/src/ui/foundations/Colors.stories.tsx +80 -0
- package/src/ui/{Icon.stories.tsx → foundations/Icon.stories.tsx} +1 -1
- package/src/ui/{Icon.tsx → foundations/Icon.tsx} +1 -1
- package/src/ui/{IconRegistry.tsx → foundations/IconRegistry.tsx} +261 -57
- package/src/ui/foundations/SocialLinks.stories.tsx +38 -0
- package/src/ui/foundations/SocialLinks.tsx +117 -0
- package/src/ui/foundations/Typography.stories.tsx +58 -0
- package/src/ui/foundations/Typography.tsx +163 -0
- package/src/ui/foundations/index.ts +6 -0
- package/src/ui/index.ts +7 -27
- package/src/ui/layout/Accordion.stories.tsx +86 -0
- package/src/ui/layout/Accordion.tsx +205 -0
- package/src/ui/layout/Card.stories.tsx +151 -0
- package/src/ui/layout/Card.tsx +124 -0
- package/src/ui/layout/Collapsible.stories.tsx +54 -0
- package/src/ui/layout/Collapsible.tsx +54 -0
- package/src/ui/{Separator.stories.tsx → layout/Separator.stories.tsx} +2 -2
- package/src/ui/{Separator.tsx → layout/Separator.tsx} +1 -1
- package/src/ui/{SettingsPanel.stories.tsx → layout/SettingsPanel.stories.tsx} +5 -5
- package/src/ui/{SettingsPanel.tsx → layout/SettingsPanel.tsx} +33 -29
- package/src/ui/layout/index.ts +5 -0
- package/src/ui/media/Avatar.stories.tsx +89 -0
- package/src/ui/media/Avatar.tsx +122 -0
- package/src/ui/media/Dropzone.stories.tsx +95 -0
- package/src/ui/media/Dropzone.tsx +328 -0
- package/src/ui/media/FileUpload.stories.tsx +62 -0
- package/src/ui/media/FileUpload.tsx +175 -0
- package/src/ui/media/index.ts +3 -0
- package/src/ui/{AuthFormUI.stories.tsx → patterns/AuthFormUI.stories.tsx} +1 -1
- package/src/ui/{AuthFormUI.tsx → patterns/AuthFormUI.tsx} +24 -23
- package/src/ui/patterns/CopyButton.stories.tsx +77 -0
- package/src/ui/patterns/CopyButton.tsx +93 -0
- package/src/ui/patterns/SearchInput.stories.tsx +51 -0
- package/src/ui/patterns/SearchInput.tsx +93 -0
- package/src/ui/patterns/Stepper.stories.tsx +129 -0
- package/src/ui/patterns/Stepper.tsx +295 -0
- package/src/ui/{TabSelection.stories.tsx → patterns/TabSelection.stories.tsx} +1 -1
- package/src/ui/{TabSelection.tsx → patterns/TabSelection.tsx} +2 -2
- package/src/ui/patterns/index.ts +6 -0
- package/src/ui/patterns/useClipboard.ts +75 -0
- package/src/ui/types.ts +48 -0
- package/src/ui/Alert.stories.tsx +0 -41
- package/src/ui/Alert.tsx +0 -72
- package/src/ui/Anchor.stories.tsx +0 -25
- package/src/ui/Anchor.tsx +0 -32
- package/src/ui/Button.stories.tsx +0 -108
- package/src/ui/Button.tsx +0 -121
- package/src/ui/Collapsible.stories.tsx +0 -91
- package/src/ui/Collapsible.tsx +0 -52
- package/src/ui/Colors.stories.tsx +0 -67
- package/src/ui/Popover.tsx +0 -42
- package/src/ui/Skeleton.stories.tsx +0 -43
- package/src/ui/SliderWithNumberField.stories.tsx +0 -101
- package/src/ui/Typography.stories.tsx +0 -87
- package/src/ui/Typography.tsx +0 -80
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","#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":["// src/index.ts\nimport \"./styles/index.css\"; // Ensure CSS is bundled\n\nexport * from \"./ui\";\nexport * from \"./helpers/SEO\";\nexport * from \"./charts\";\n","\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: #0f766e;--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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,QAAK,UAAU,iCAAkC,SAAAA,EAAS,EAC7D,KAEF,OAAC,GAAAO,MAAA,CAAU,IAAKH,EAAK,GAAIF,EAAI,UAAWG,EAAe,GAAGF,EAAO,EAChEF,MACC,OAAC,OAAI,UAAU,6FACb,mBAAC,QAAK,UAAU,iCAAkC,SAAAA,EAAU,EAC9D,GAEJ,CAEJ,CACF,EAEAJ,GAAM,YAAc,QC1CpB,IAAAW,GAAkB,oBAClBA,EAAqC,0BCDrC,IAAAC,GAAkB,oBCmGd,IAAAC,EAAA,6BA9FSC,EAAY,CACvB,MAAO,kBACP,EAAG,uBACH,KAAM,iKACN,MAAO,uBACP,KAAM,yBACN,UAAW,wCACX,QAAS,qCACT,UACE,wdACF,aACE,sJACF,gBAAiB,8BACjB,OACE,uJACF,gBACE,uJACF,QACE,qcACF,WACE,utCACF,gBACE,6EACF,SACE,+kBACF,aACE,uIACF,KAAM,kLACN,aACE,8QACF,MAAO,WACP,aACE,oPACF,sBACE,wMACF,eAAgB,6BAChB,iBAAkB,8BAClB,eAAgB,wCAChB,iBAAkB,2CAClB,YACE,yQACF,IAAK,8DACL,KAAM,0EACN,mBACE,uMACF,OACE,gFACF,kBACE,8EACF,oBACE,mLACF,YACE,oeACF,UACE,8mBACF,QACE,wEACF,iBACE,wIACF,kBACE,wJACF,UACE,0UACF,eAAgB,6CAChB,oBACE,kGACF,aACE,4EACF,SACE,uGACF,WACE,uGACF,WACE,gMACF,sBACE,qJACF,aAAc,4BACd,cACE,+GACF,YACE,8GACF,OACE,2JACF,OACE,uJACF,KAAM,6OACN,KAAM,mBACR,EAKaC,GAAe,CAC1B,OACE,oBACE,oBAAC,QAAK,EAAE,2LAA2L,KACnM,OAAC,QAAK,EAAE,sCAAsC,GAChD,EAEF,UACE,QAAC,KAAE,UAAU,4CACX,oBAAC,QACC,KAAK,UACL,OAAO,OACP,EAAE,4OACJ,KACA,OAAC,QACC,KAAK,UACL,OAAO,OACP,EAAE,kQACJ,KACA,OAAC,QACC,KAAK,UACL,OAAO,OACP,EAAE,oQACJ,KACA,OAAC,QACC,KAAK,UACL,OAAO,OACP,EAAE,iP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","names":["src_exports","__export","Alert","Anchor","AuthFormUI","BasePanel","Button","Checkbox","Collapsible","Dialog","DialogClose","DialogDescription","DialogTitle","DistributionBarChart","DistributionHistogram","Dropdown","DropdownItem","DropdownSeparator","Field","Heading","HelperTooltip","Icon","Input","Label","NumberField","Popover","SEO","Select","Separator","SettingsPanel","Skeleton","Slider","SliderWithNumberField","Switch","TabRadio","TabSelection","Text","TextArea","Tooltip","TypographyList","cn","iconPaths","__toCommonJS","styleInject","css","insertAt","head","style","styleInject","import_react","import_clsx","import_tailwind_merge","cn","inputs","import_jsx_runtime","Button","React","className","variant","size","isLoading","leftIcon","rightIcon","children","disabled","render","nativeButton","isIconOnly","props","ref","isActuallyIconOnly","variants","sizes","BaseButton","cn","import_react","import_jsx_runtime","Input","React","className","leftIcon","rightIcon","id","props","ref","inputClasses","cn","BaseInput","import_react","import_react","import_jsx_runtime","iconPaths","complexIcons","icons","import_jsx_runtime","Icon","React","className","size","name","children","props","ref","sizes","iconContent","icons","cn","import_jsx_runtime","Select","React","className","options","propsId","value","defaultValue","onChange","disabled","placeholder","onFocus","props","ref","generatedId","selectId","BaseSelect","val","details","event","cn","Icon","option","index","label","import_react","import_clsx","import_tailwind_merge","import_jsx_runtime","cn","inputs","headingSizes","textVariants","Heading","level","className","children","props","React","Text","variant","Component","TypographyList","args","import_react","import_jsx_runtime","Slider","React","className","min","max","step","value","defaultValue","disabled","onChange","name","icon","props","ref","handleChange","val","event","cn","BaseSlider","details","import_react","import_react","import_jsx_runtime","NumberField","React","className","value","defaultValue","min","max","step","onChange","disabled","readOnly","propsId","placeholder","showButtons","props","ref","generatedId","numberId","BaseNumberField","val","details","event","cn","Icon","import_jsx_runtime","SliderWithNumberField","React","className","min","max","step","value","defaultValue","disabled","onChange","inputWidth","props","ref","handleChange","val","event","newValue","cn","Slider","NumberField","import_react","import_jsx_runtime","Tooltip","content","children","className","delay","BaseTooltip","React","cn","HelperTooltip","Icon","import_react","import_jsx_runtime","Dialog","open","onOpenChange","trigger","children","className","BaseDialog","eventDetails","React","cn","DialogTitle","props","DialogDescription","DialogClose","import_react","import_jsx_runtime","Popover","trigger","children","side","align","className","open","onOpenChange","BasePopover","cn","import_react","import_jsx_runtime","Dropdown","trigger","children","align","className","BaseMenu","React","cn","DropdownItem","props","ref","DropdownSeparator","import_react","import_jsx_runtime","Collapsible","title","children","variant","size","defaultOpen","className","isOpen","setIsOpen","cn","Button","Icon","import_react","import_jsx_runtime","Switch","React","checked","defaultChecked","onChange","disabled","className","externalId","props","ref","autoId","id","cn","BaseSwitch","eventDetails","import_jsx_runtime","Label","children","tooltip","className","props","cn","HelperTooltip","import_jsx_runtime","BasePanel","title","children","onClose","className","headerClassName","headingLevel","setPanel","panel","handleClose","Heading","Button","Icon","import_react","import_jsx_runtime","variantStyles","TabRadio","options","value","onChange","className","variant","ariaLabel","val","cn","option","import_react","import_jsx_runtime","Field","React","label","description","error","tooltip","children","className","icon","labelPlacement","labelWeight","props","ref","isHorizontal","labelOnRight","BaseField","cn","Label","React","import_react_router_dom","import_jsx_runtime","Anchor","className","href","target","props","ref","isInternal","commonClass","cn","import_react","import_jsx_runtime","TextArea","React","className","id","props","ref","BaseInput","cn","import_react","import_jsx_runtime","Checkbox","React","className","id","checked","onChange","props","ref","BaseCheckbox","val","cn","Icon","import_jsx_runtime","SettingsPanel","title","children","className","contentClassName","collapsible","defaultOpen","headingLevel","content","cn","Collapsible","Heading","React","import_separator","import_jsx_runtime","Separator","className","orientation","props","ref","BaseSeparator","cn","import_jsx_runtime","Skeleton","className","props","cn","import_react_dom","import_jsx_runtime","SubmitButton","label","pending","Button","AuthFormUI","mode","onModeChange","formAction","actionState","onGoogleSignIn","title","description","Heading","Text","Field","Input","Icon","import_react","import_jsx_runtime","Alert","level","message","action","showAlert","setShowAlert","Icon","Button","import_jsx_runtime","TabSelection","tabs","activeTabId","onTabClick","onAddClick","className","tab","isActive","Button","e","Icon","import_jsx_runtime","SEO","title","description","image","url","type","siteTitle","fullTitle","currentUrl","import_victory","import_jsx_runtime","DistributionBarChart","data","alt","chartWidth","chartHeight","average","referenceLineValue","referenceLineLabel","label","maxCount","labels","x","datum","labelText","import_victory","import_jsx_runtime","DistributionHistogram","data","alt","label","average","referenceLineValue","referenceLineLabel","chartWidth","chartHeight","binSize","maxLength","r","maxX","boundaries","i","x","datum","items","d","labelText"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","#style-inject:#style-inject","../src/styles/index.css","../src/ui/utils.ts","../src/ui/foundations/Typography.tsx","../src/ui/foundations/Icon.tsx","../src/ui/foundations/IconRegistry.tsx","../src/ui/foundations/SocialLinks.tsx","../src/ui/foundations/CodeBlock.tsx","../src/ui/foundations/Anchor.tsx","../src/ui/forms/Button.tsx","../src/ui/forms/Input.tsx","../src/ui/forms/Select.tsx","../src/ui/forms/Slider.tsx","../src/ui/forms/SliderWithNumberField.tsx","../src/ui/forms/NumberField.tsx","../src/ui/forms/Dropdown.tsx","../src/ui/forms/Switch.tsx","../src/ui/feedback/Tooltip.tsx","../src/ui/forms/Label.tsx","../src/ui/forms/TabRadio.tsx","../src/ui/forms/Field.tsx","../src/ui/forms/TextArea.tsx","../src/ui/forms/Checkbox.tsx","../src/ui/forms/PeerbotsColorSelector.tsx","../src/ui/forms/ChipGroup.tsx","../src/ui/layout/Card.tsx","../src/ui/layout/Accordion.tsx","../src/ui/layout/Collapsible.tsx","../src/ui/layout/Separator.tsx","../src/ui/layout/SettingsPanel.tsx","../src/ui/media/Avatar.tsx","../src/ui/media/Dropzone.tsx","../src/ui/media/FileUpload.tsx","../src/ui/feedback/Dialog.tsx","../src/ui/feedback/Popover.tsx","../src/ui/feedback/Skeleton.tsx","../src/ui/feedback/Alert.tsx","../src/ui/feedback/EmptyState.tsx","../src/ui/feedback/Spinner.tsx","../src/ui/patterns/AuthFormUI.tsx","../src/ui/patterns/TabSelection.tsx","../src/ui/patterns/SearchInput.tsx","../src/ui/patterns/CopyButton.tsx","../src/ui/patterns/useClipboard.ts","../src/ui/patterns/Stepper.tsx","../src/helpers/SEO.tsx","../src/charts/DistributionBarChart.tsx","../src/charts/DistributionHistogram.tsx","../src/charts/LineGraph.tsx"],"sourcesContent":["// src/index.ts\nimport \"./styles/index.css\"; // Ensure CSS is bundled\n\nexport * from \"./ui\";\nexport * from \"./helpers/SEO\";\nexport * from \"./charts\";\n","\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-50: oklch(97.1% .013 17.38);--pb-color-red-100: oklch(93.6% .032 17.717);--pb-color-red-200: oklch(88.5% .062 18.334);--pb-color-red-300: oklch(80.8% .114 19.571);--pb-color-red-400: oklch(70.4% .191 22.216);--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-red-800: oklch(44.4% .177 26.899);--pb-color-red-900: oklch(39.6% .141 25.723);--pb-color-red-950: oklch(25.8% .092 26.042);--pb-color-amber-50: oklch(98.7% .022 95.277);--pb-color-amber-100: oklch(96.2% .059 95.617);--pb-color-amber-200: oklch(92.4% .12 95.746);--pb-color-amber-300: oklch(87.9% .169 91.605);--pb-color-amber-400: oklch(82.8% .189 84.429);--pb-color-amber-500: oklch(76.9% .188 70.08);--pb-color-amber-600: oklch(66.6% .179 58.318);--pb-color-amber-800: oklch(47.3% .137 46.201);--pb-color-amber-900: oklch(41.4% .112 45.904);--pb-color-amber-950: oklch(27.9% .077 45.635);--pb-color-yellow-500: oklch(79.5% .184 86.047);--pb-color-green-500: oklch(72.3% .219 149.579);--pb-color-emerald-50: oklch(97.9% .021 166.113);--pb-color-emerald-100: oklch(95% .052 163.051);--pb-color-emerald-200: oklch(90.5% .093 164.15);--pb-color-emerald-500: oklch(69.6% .17 162.48);--pb-color-emerald-600: oklch(59.6% .145 163.225);--pb-color-emerald-700: oklch(50.8% .118 165.612);--pb-color-emerald-800: oklch(43.2% .095 166.913);--pb-color-emerald-900: oklch(37.8% .077 168.94);--pb-color-emerald-950: oklch(26.2% .051 172.552);--pb-color-teal-50: oklch(98.4% .014 180.72);--pb-color-teal-100: oklch(95.3% .051 180.801);--pb-color-teal-200: oklch(91% .096 180.426);--pb-color-teal-500: oklch(70.4% .14 182.503);--pb-color-teal-700: oklch(51.1% .096 186.391);--pb-color-teal-800: oklch(43.7% .078 188.216);--pb-color-teal-900: oklch(38.6% .063 188.416);--pb-color-teal-950: oklch(27.7% .046 192.524);--pb-color-blue-100: oklch(93.2% .032 255.585);--pb-color-blue-200: oklch(88.2% .059 254.128);--pb-color-blue-500: oklch(62.3% .214 259.815);--pb-color-blue-900: oklch(37.9% .146 265.522);--pb-color-indigo-950: oklch(25.7% .09 281.288);--pb-color-purple-100: oklch(94.6% .033 307.174);--pb-color-purple-200: oklch(90.2% .063 306.703);--pb-color-purple-900: oklch(38.1% .176 304.987);--pb-color-rose-100: oklch(94.1% .03 12.58);--pb-color-rose-200: oklch(89.2% .058 10.001);--pb-color-rose-300: oklch(81% .117 11.638);--pb-color-rose-700: oklch(51.4% .222 16.935);--pb-color-rose-800: oklch(45.5% .188 13.697);--pb-color-rose-900: oklch(41% .159 10.272);--pb-color-rose-950: oklch(27.1% .105 12.094);--pb-color-slate-500: oklch(55.4% .046 257.417);--pb-color-slate-600: oklch(44.6% .043 257.281);--pb-color-slate-700: oklch(37.2% .044 257.287);--pb-color-slate-800: oklch(27.9% .041 260.031);--pb-color-slate-900: oklch(20.8% .042 265.755);--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-gray-950: oklch(13% .028 261.692);--pb-color-black: #000;--pb-color-white: #fff;--pb-spacing: .25rem;--pb-container-xs: 20rem;--pb-container-sm: 24rem;--pb-container-md: 28rem;--pb-container-lg: 32rem;--pb-container-xl: 36rem;--pb-container-2xl: 42rem;--pb-container-3xl: 48rem;--pb-container-4xl: 56rem;--pb-container-5xl: 64rem;--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-semibold: 600;--pb-font-weight-bold: 700;--pb-tracking-tight: -.025em;--pb-tracking-wider: .05em;--pb-leading-tight: 1.25;--pb-leading-snug: 1.375;--pb-leading-normal: 1.5;--pb-leading-relaxed: 1.625;--pb-radius-sm: .25rem;--pb-radius-md: .375rem;--pb-radius-lg: .5rem;--pb-radius-xl: .75rem;--pb-radius-2xl: 1rem;--pb-radius-3xl: 1.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-blur-xs: 4px;--pb-blur-xl: 24px;--pb-blur-2xl: 40px;--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: #0f766e;--pb-color-secondary: #e86e8a;--pb-color-accent: #d9e021;--pb-color-accent-two: #4273ff;--pb-color-danger: #e86e8a;--pb-color-light-bg: #d8e7eb;--pb-sidebar-bg: #f9ffff;--pb-color-peerbots-pink: #e96c8a;--pb-color-peerbots-teal: #5fc7cc;--pb-color-peerbots-darkteal: #0f766e;--pb-color-peerbots-darkblue: #2e3a59;--pb-color-peerbots-olive: #82871f;--pb-color-peerbots-dark: #1a1a1a;--pb-color-peerbots-light: #f8f9fa}}@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, -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, \\\"Helvetica Neue\\\", \\\"Noto Sans\\\", Arial, 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:where(:not(iframe)){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\\\\:invisible{visibility:hidden}.pb\\\\:visible{visibility:visible}.pb\\\\:sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border-width:0}.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-1\\\\/2{top:50%}.pb\\\\:top-3{top:calc(var(--pb-spacing) * 3)}.pb\\\\:top-6{top:calc(var(--pb-spacing) * 6)}.pb\\\\:top-8{top:calc(var(--pb-spacing) * 8)}.pb\\\\:top-\\\\[50\\\\%\\\\]{top:50%}.pb\\\\:right-0{right:calc(var(--pb-spacing) * 0)}.pb\\\\:right-3{right:calc(var(--pb-spacing) * 3)}.pb\\\\:right-6{right:calc(var(--pb-spacing) * 6)}.pb\\\\:-bottom-0{bottom:calc(var(--pb-spacing) * -0)}.pb\\\\:bottom-6{bottom:calc(var(--pb-spacing) * 6)}.pb\\\\:left-0{left:calc(var(--pb-spacing) * 0)}.pb\\\\:left-4{left:calc(var(--pb-spacing) * 4)}.pb\\\\:left-6{left:calc(var(--pb-spacing) * 6)}.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-0{margin:calc(var(--pb-spacing) * 0)}.pb\\\\:m-1{margin:calc(var(--pb-spacing) * 1)}.pb\\\\:-mx-1{margin-inline:calc(var(--pb-spacing) * -1)}.pb\\\\:mx-1{margin-inline:calc(var(--pb-spacing) * 1)}.pb\\\\:mx-2{margin-inline:calc(var(--pb-spacing) * 2)}.pb\\\\:mx-auto{margin-inline:auto}.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\\\\:my-6{margin-block:calc(var(--pb-spacing) * 6)}.pb\\\\:-mt-6{margin-top:calc(var(--pb-spacing) * -6)}.pb\\\\:mt-0\\\\.5{margin-top:calc(var(--pb-spacing) * .5)}.pb\\\\:mt-1{margin-top:calc(var(--pb-spacing) * 1)}.pb\\\\:mt-2{margin-top:calc(var(--pb-spacing) * 2)}.pb\\\\:mt-3{margin-top:calc(var(--pb-spacing) * 3)}.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-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-3{margin-bottom:calc(var(--pb-spacing) * 3)}.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\\\\:box-border{box-sizing:border-box}.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\\\\:table-cell{display:table-cell}.pb\\\\:table-row{display:table-row}.pb\\\\:h-0\\\\.5{height:calc(var(--pb-spacing) * .5)}.pb\\\\:h-1\\\\.5{height:calc(var(--pb-spacing) * 1.5)}.pb\\\\:h-3{height:calc(var(--pb-spacing) * 3)}.pb\\\\:h-3\\\\.5{height:calc(var(--pb-spacing) * 3.5)}.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-7{height:calc(var(--pb-spacing) * 7)}.pb\\\\:h-8{height:calc(var(--pb-spacing) * 8)}.pb\\\\:h-9{height:calc(var(--pb-spacing) * 9)}.pb\\\\:h-10{height:calc(var(--pb-spacing) * 10)}.pb\\\\:h-12{height:calc(var(--pb-spacing) * 12)}.pb\\\\:h-14{height:calc(var(--pb-spacing) * 14)}.pb\\\\:h-16{height:calc(var(--pb-spacing) * 16)}.pb\\\\:h-28{height:calc(var(--pb-spacing) * 28)}.pb\\\\:h-32{height:calc(var(--pb-spacing) * 32)}.pb\\\\:h-36{height:calc(var(--pb-spacing) * 36)}.pb\\\\:h-56{height:calc(var(--pb-spacing) * 56)}.pb\\\\:h-72{height:calc(var(--pb-spacing) * 72)}.pb\\\\:h-80{height:calc(var(--pb-spacing) * 80)}.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-0\\\\.5{width:calc(var(--pb-spacing) * .5)}.pb\\\\:w-1\\\\/2{width:50%}.pb\\\\:w-2\\\\.5{width:calc(var(--pb-spacing) * 2.5)}.pb\\\\:w-2\\\\/3{width:calc(2 / 3 * 100%)}.pb\\\\:w-3{width:calc(var(--pb-spacing) * 3)}.pb\\\\:w-3\\\\.5{width:calc(var(--pb-spacing) * 3.5)}.pb\\\\:w-3\\\\/4{width:75%}.pb\\\\:w-3\\\\/5{width:calc(3 / 5 * 100%)}.pb\\\\:w-4{width:calc(var(--pb-spacing) * 4)}.pb\\\\:w-4\\\\.5{width:calc(var(--pb-spacing) * 4.5)}.pb\\\\:w-4\\\\/5{width:80%}.pb\\\\:w-5{width:calc(var(--pb-spacing) * 5)}.pb\\\\:w-6{width:calc(var(--pb-spacing) * 6)}.pb\\\\:w-7{width:calc(var(--pb-spacing) * 7)}.pb\\\\:w-8{width:calc(var(--pb-spacing) * 8)}.pb\\\\:w-9{width:calc(var(--pb-spacing) * 9)}.pb\\\\:w-10{width:calc(var(--pb-spacing) * 10)}.pb\\\\:w-11{width:calc(var(--pb-spacing) * 11)}.pb\\\\:w-11\\\\/12{width:calc(11 / 12 * 100%)}.pb\\\\:w-12{width:calc(var(--pb-spacing) * 12)}.pb\\\\:w-14{width:calc(var(--pb-spacing) * 14)}.pb\\\\:w-16{width:calc(var(--pb-spacing) * 16)}.pb\\\\:w-20{width:calc(var(--pb-spacing) * 20)}.pb\\\\:w-24{width:calc(var(--pb-spacing) * 24)}.pb\\\\:w-28{width:calc(var(--pb-spacing) * 28)}.pb\\\\:w-32{width:calc(var(--pb-spacing) * 32)}.pb\\\\:w-40{width:calc(var(--pb-spacing) * 40)}.pb\\\\:w-48{width:calc(var(--pb-spacing) * 48)}.pb\\\\:w-56{width:calc(var(--pb-spacing) * 56)}.pb\\\\:w-64{width:calc(var(--pb-spacing) * 64)}.pb\\\\:w-80{width:calc(var(--pb-spacing) * 80)}.pb\\\\:w-96{width:calc(var(--pb-spacing) * 96)}.pb\\\\:w-\\\\[1px\\\\]{width:1px}.pb\\\\:w-\\\\[320px\\\\]{width:320px}.pb\\\\:w-\\\\[380px\\\\]{width:380px}.pb\\\\:w-\\\\[400px\\\\]{width:400px}.pb\\\\:w-\\\\[420px\\\\]{width:420px}.pb\\\\:w-\\\\[460px\\\\]{width:460px}.pb\\\\:w-\\\\[480px\\\\]{width:480px}.pb\\\\:w-\\\\[500px\\\\]{width:500px}.pb\\\\:w-\\\\[520px\\\\]{width:520px}.pb\\\\:w-\\\\[540px\\\\]{width:540px}.pb\\\\:w-\\\\[560px\\\\]{width:560px}.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-3xl{max-width:var(--pb-container-3xl)}.pb\\\\:max-w-4xl{max-width:var(--pb-container-4xl)}.pb\\\\:max-w-5xl{max-width:var(--pb-container-5xl)}.pb\\\\:max-w-\\\\[90vw\\\\]{max-width:90vw}.pb\\\\:max-w-\\\\[120px\\\\]{max-width:120px}.pb\\\\:max-w-\\\\[200px\\\\]{max-width:200px}.pb\\\\:max-w-lg{max-width:var(--pb-container-lg)}.pb\\\\:max-w-md{max-width:var(--pb-container-md)}.pb\\\\:max-w-sm{max-width:var(--pb-container-sm)}.pb\\\\:max-w-xl{max-width:var(--pb-container-xl)}.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-\\\\[240px\\\\]{min-width:240px}.pb\\\\:min-w-\\\\[400px\\\\]{min-width:400px}.pb\\\\:flex-1{flex:1}.pb\\\\:flex-none{flex:none}.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-1\\\\/2{--tw-translate-y: -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\\\\:scale-110{--tw-scale-x: 110%;--tw-scale-y: 110%;--tw-scale-z: 110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.pb\\\\:rotate-180{rotate:180deg}.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-crosshair{cursor:crosshair}.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\\\\:list-none{list-style-type:none}.pb\\\\:appearance-none{appearance:none}.pb\\\\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.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\\\\:grid-rows-\\\\[0fr\\\\]{grid-template-rows:0fr}.pb\\\\:grid-rows-\\\\[1fr\\\\]{grid-template-rows: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\\\\:items-start{align-items:flex-start}.pb\\\\:justify-between{justify-content:space-between}.pb\\\\:justify-center{justify-content:center}.pb\\\\:justify-end{justify-content:flex-end}.pb\\\\:gap-0{gap:calc(var(--pb-spacing) * 0)}.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-2\\\\.5{gap:calc(var(--pb-spacing) * 2.5)}.pb\\\\:gap-3{gap:calc(var(--pb-spacing) * 3)}.pb\\\\:gap-3\\\\.5{gap:calc(var(--pb-spacing) * 3.5)}.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-1\\\\.5{:where(&>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--pb-spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--pb-spacing) * 1.5) * 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-2\\\\.5{:where(&>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--pb-spacing) * 2.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--pb-spacing) * 2.5) * 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-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\\\\:self-center{align-self:center}.pb\\\\:self-start{align-self:flex-start}.pb\\\\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pb\\\\:overflow-auto{overflow:auto}.pb\\\\:overflow-hidden{overflow:hidden}.pb\\\\:overflow-x-auto{overflow-x:auto}.pb\\\\:rounded{border-radius:.25rem}.pb\\\\:rounded-2xl{border-radius:var(--pb-radius-2xl)}.pb\\\\:rounded-3xl{border-radius:var(--pb-radius-3xl)}.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-none{border-radius:0}.pb\\\\:rounded-sm{border-radius:var(--pb-radius-sm)}.pb\\\\:rounded-xl{border-radius:var(--pb-radius-xl)}.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-4{border-style:var(--tw-border-style);border-width:4px}.pb\\\\:border-\\\\[1\\\\.5px\\\\]{border-style:var(--tw-border-style);border-width:1.5px}.pb\\\\:border-\\\\[2\\\\.5px\\\\]{border-style:var(--tw-border-style);border-width:2.5px}.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-dashed{--tw-border-style: dashed;border-style:dashed}.pb\\\\:border-none{--tw-border-style: none;border-style:none}.pb\\\\:border-amber-200{border-color:var(--pb-color-amber-200)}.pb\\\\:border-amber-400{border-color:var(--pb-color-amber-400)}.pb\\\\:border-amber-600{border-color:var(--pb-color-amber-600)}.pb\\\\:border-black{border-color:var(--pb-color-black)}.pb\\\\:border-black\\\\/5{border-color:var(--pb-color-black);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-black) 5%,transparent)}}.pb\\\\:border-blue-200{border-color:var(--pb-color-blue-200)}.pb\\\\:border-emerald-200{border-color:var(--pb-color-emerald-200)}.pb\\\\:border-emerald-500{border-color:var(--pb-color-emerald-500)}.pb\\\\:border-emerald-600{border-color:var(--pb-color-emerald-600)}.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-200\\\\/80{border-color:var(--pb-color-gray-200);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-gray-200) 80%,transparent)}}.pb\\\\:border-gray-300{border-color:var(--pb-color-gray-300)}.pb\\\\:border-gray-400{border-color:var(--pb-color-gray-400)}.pb\\\\:border-gray-500{border-color:var(--pb-color-gray-500)}.pb\\\\:border-gray-700\\\\/50{border-color:var(--pb-color-gray-700);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-gray-700) 50%,transparent)}}.pb\\\\:border-gray-800{border-color:var(--pb-color-gray-800)}.pb\\\\:border-gray-800\\\\/80{border-color:var(--pb-color-gray-800);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-gray-800) 80%,transparent)}}.pb\\\\:border-peerbots-darkblue{border-color:var(--pb-color-peerbots-darkblue)}.pb\\\\:border-peerbots-darkblue\\\\/40{border-color:var(--pb-color-peerbots-darkblue);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-peerbots-darkblue) 40%,transparent)}}.pb\\\\:border-peerbots-darkteal{border-color:var(--pb-color-peerbots-darkteal)}.pb\\\\:border-peerbots-darkteal\\\\/30{border-color:var(--pb-color-peerbots-darkteal);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-peerbots-darkteal) 30%,transparent)}}.pb\\\\:border-peerbots-pink{border-color:var(--pb-color-peerbots-pink)}.pb\\\\:border-peerbots-pink\\\\/30{border-color:var(--pb-color-peerbots-pink);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-peerbots-pink) 30%,transparent)}}.pb\\\\:border-peerbots-pink\\\\/40{border-color:var(--pb-color-peerbots-pink);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-peerbots-pink) 40%,transparent)}}.pb\\\\:border-peerbots-teal{border-color:var(--pb-color-peerbots-teal)}.pb\\\\:border-peerbots-teal\\\\/30{border-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 30%,transparent)}}.pb\\\\:border-peerbots-teal\\\\/40{border-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 40%,transparent)}}.pb\\\\:border-primary{border-color:var(--pb-color-primary)}.pb\\\\:border-primary\\\\/40{border-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-primary) 40%,transparent)}}.pb\\\\:border-purple-200{border-color:var(--pb-color-purple-200)}.pb\\\\:border-red-200{border-color:var(--pb-color-red-200)}.pb\\\\:border-red-300{border-color:var(--pb-color-red-300)}.pb\\\\:border-red-400{border-color:var(--pb-color-red-400)}.pb\\\\:border-red-500{border-color:var(--pb-color-red-500)}.pb\\\\:border-red-600{border-color:var(--pb-color-red-600)}.pb\\\\:border-rose-200{border-color:var(--pb-color-rose-200)}.pb\\\\:border-rose-300{border-color:var(--pb-color-rose-300)}.pb\\\\:border-rose-700{border-color:var(--pb-color-rose-700)}.pb\\\\:border-slate-700{border-color:var(--pb-color-slate-700)}.pb\\\\:border-teal-200{border-color:var(--pb-color-teal-200)}.pb\\\\:border-teal-500{border-color:var(--pb-color-teal-500)}.pb\\\\:border-teal-700{border-color:var(--pb-color-teal-700)}.pb\\\\:border-transparent{border-color:transparent}.pb\\\\:border-white{border-color:var(--pb-color-white)}.pb\\\\:border-white\\\\/40{border-color:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-white) 40%,transparent)}}.pb\\\\:border-white\\\\/50{border-color:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-white) 50%,transparent)}}.pb\\\\:border-t-transparent{border-top-color:transparent}.pb\\\\:bg-\\\\[\\\\#1e222b\\\\]{background-color:#1e222b}.pb\\\\:bg-\\\\[\\\\#1e222b\\\\]\\\\/90{background-color:color-mix(in oklab,#1e222b 90%,transparent)}.pb\\\\:bg-\\\\[\\\\#161920\\\\]{background-color:#161920}.pb\\\\:bg-amber-50{background-color:var(--pb-color-amber-50)}.pb\\\\:bg-amber-50\\\\/40{background-color:var(--pb-color-amber-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-amber-50) 40%,transparent)}}.pb\\\\:bg-amber-100{background-color:var(--pb-color-amber-100)}.pb\\\\:bg-amber-300{background-color:var(--pb-color-amber-300)}.pb\\\\:bg-amber-500{background-color:var(--pb-color-amber-500)}.pb\\\\:bg-black\\\\/10{background-color:var(--pb-color-black);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-black) 10%,transparent)}}.pb\\\\:bg-black\\\\/15{background-color:var(--pb-color-black);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-black) 15%,transparent)}}.pb\\\\:bg-black\\\\/30{background-color:var(--pb-color-black);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-black) 30%,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-blue-100{background-color:var(--pb-color-blue-100)}.pb\\\\:bg-dark-primary{background-color:var(--pb-color-dark-primary)}.pb\\\\:bg-emerald-50{background-color:var(--pb-color-emerald-50)}.pb\\\\:bg-emerald-50\\\\/40{background-color:var(--pb-color-emerald-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-emerald-50) 40%,transparent)}}.pb\\\\:bg-emerald-50\\\\/60{background-color:var(--pb-color-emerald-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-emerald-50) 60%,transparent)}}.pb\\\\:bg-emerald-100{background-color:var(--pb-color-emerald-100)}.pb\\\\:bg-emerald-700{background-color:var(--pb-color-emerald-700)}.pb\\\\:bg-gray-50{background-color:var(--pb-color-gray-50)}.pb\\\\:bg-gray-50\\\\/40{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) 40%,transparent)}}.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-50\\\\/70{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) 70%,transparent)}}.pb\\\\:bg-gray-50\\\\/80{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) 80%,transparent)}}.pb\\\\:bg-gray-100{background-color:var(--pb-color-gray-100)}.pb\\\\:bg-gray-100\\\\/90{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) 90%,transparent)}}.pb\\\\:bg-gray-200{background-color:var(--pb-color-gray-200)}.pb\\\\:bg-gray-600{background-color:var(--pb-color-gray-600)}.pb\\\\:bg-gray-800{background-color:var(--pb-color-gray-800)}.pb\\\\:bg-gray-800\\\\/70{background-color:var(--pb-color-gray-800);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-gray-800) 70%,transparent)}}.pb\\\\:bg-gray-800\\\\/80{background-color:var(--pb-color-gray-800);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-gray-800) 80%,transparent)}}.pb\\\\:bg-gray-900{background-color:var(--pb-color-gray-900)}.pb\\\\:bg-green-500\\\\/80{background-color:var(--pb-color-green-500);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-green-500) 80%,transparent)}}.pb\\\\:bg-peerbots-darkblue{background-color:var(--pb-color-peerbots-darkblue)}.pb\\\\:bg-peerbots-darkblue\\\\/10{background-color:var(--pb-color-peerbots-darkblue);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-darkblue) 10%,transparent)}}.pb\\\\:bg-peerbots-darkblue\\\\/15{background-color:var(--pb-color-peerbots-darkblue);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-darkblue) 15%,transparent)}}.pb\\\\:bg-peerbots-darkblue\\\\/20{background-color:var(--pb-color-peerbots-darkblue);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-darkblue) 20%,transparent)}}.pb\\\\:bg-peerbots-darkteal{background-color:var(--pb-color-peerbots-darkteal)}.pb\\\\:bg-peerbots-pink{background-color:var(--pb-color-peerbots-pink)}.pb\\\\:bg-peerbots-pink\\\\/5{background-color:var(--pb-color-peerbots-pink);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-pink) 5%,transparent)}}.pb\\\\:bg-peerbots-pink\\\\/10{background-color:var(--pb-color-peerbots-pink);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-pink) 10%,transparent)}}.pb\\\\:bg-peerbots-pink\\\\/15{background-color:var(--pb-color-peerbots-pink);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-pink) 15%,transparent)}}.pb\\\\:bg-peerbots-pink\\\\/20{background-color:var(--pb-color-peerbots-pink);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-pink) 20%,transparent)}}.pb\\\\:bg-peerbots-teal{background-color:var(--pb-color-peerbots-teal)}.pb\\\\:bg-peerbots-teal\\\\/5{background-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 5%,transparent)}}.pb\\\\:bg-peerbots-teal\\\\/10{background-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 10%,transparent)}}.pb\\\\:bg-peerbots-teal\\\\/15{background-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 15%,transparent)}}.pb\\\\:bg-peerbots-teal\\\\/20{background-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 20%,transparent)}}.pb\\\\:bg-peerbots-teal\\\\/30{background-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 30%,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\\\\/20{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\\\\: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-purple-100{background-color:var(--pb-color-purple-100)}.pb\\\\:bg-red-50{background-color:var(--pb-color-red-50)}.pb\\\\:bg-red-50\\\\/40{background-color:var(--pb-color-red-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-red-50) 40%,transparent)}}.pb\\\\:bg-red-50\\\\/60{background-color:var(--pb-color-red-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-red-50) 60%,transparent)}}.pb\\\\:bg-red-100{background-color:var(--pb-color-red-100)}.pb\\\\:bg-red-500\\\\/80{background-color:var(--pb-color-red-500);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-red-500) 80%,transparent)}}.pb\\\\:bg-red-600{background-color:var(--pb-color-red-600)}.pb\\\\:bg-red-700{background-color:var(--pb-color-red-700)}.pb\\\\:bg-rose-100{background-color:var(--pb-color-rose-100)}.pb\\\\:bg-rose-700{background-color:var(--pb-color-rose-700)}.pb\\\\:bg-rose-800{background-color:var(--pb-color-rose-800)}.pb\\\\:bg-slate-900{background-color:var(--pb-color-slate-900)}.pb\\\\:bg-teal-50{background-color:var(--pb-color-teal-50)}.pb\\\\:bg-teal-50\\\\/40{background-color:var(--pb-color-teal-50);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-teal-50) 40%,transparent)}}.pb\\\\:bg-teal-100{background-color:var(--pb-color-teal-100)}.pb\\\\:bg-teal-700{background-color:var(--pb-color-teal-700)}.pb\\\\:bg-transparent{background-color:transparent}.pb\\\\:bg-white{background-color:var(--pb-color-white)}.pb\\\\:bg-white\\\\/50{background-color:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-white) 50%,transparent)}}.pb\\\\:bg-white\\\\/80{background-color:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-white) 80%,transparent)}}.pb\\\\:bg-white\\\\/90{background-color:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-white) 90%,transparent)}}.pb\\\\:bg-yellow-500\\\\/80{background-color:var(--pb-color-yellow-500);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-yellow-500) 80%,transparent)}}.pb\\\\:bg-gradient-to-br{--tw-gradient-position: to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.pb\\\\:bg-gradient-to-r{--tw-gradient-position: to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.pb\\\\:bg-gradient-to-tr{--tw-gradient-position: to top right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.pb\\\\:from-peerbots-teal{--tw-gradient-from: var(--pb-color-peerbots-teal);--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.pb\\\\:from-slate-900{--tw-gradient-from: var(--pb-color-slate-900);--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.pb\\\\:via-indigo-950{--tw-gradient-via: var(--pb-color-indigo-950);--tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-via-stops)}.pb\\\\:via-peerbots-pink{--tw-gradient-via: var(--pb-color-peerbots-pink);--tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-via-stops)}.pb\\\\:via-slate-800{--tw-gradient-via: var(--pb-color-slate-800);--tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-via-stops)}.pb\\\\:to-peerbots-darkblue{--tw-gradient-to: var(--pb-color-peerbots-darkblue);--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.pb\\\\:to-teal-950{--tw-gradient-to: var(--pb-color-teal-950);--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.pb\\\\:bg-clip-text{background-clip:text}.pb\\\\:fill-white{fill:var(--pb-color-white)}.pb\\\\:fill-white\\\\/90{fill:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){fill:color-mix(in oklab,var(--pb-color-white) 90%,transparent)}}.pb\\\\:stroke-gray-100{stroke:var(--pb-color-gray-100)}.pb\\\\:stroke-gray-200{stroke:var(--pb-color-gray-200)}.pb\\\\:stroke-white\\\\/50{stroke:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){stroke:color-mix(in oklab,var(--pb-color-white) 50%,transparent)}}.pb\\\\:object-contain{object-fit:contain}.pb\\\\:object-cover{object-fit:cover}.pb\\\\:p-0{padding:calc(var(--pb-spacing) * 0)}.pb\\\\:p-0\\\\.5{padding:calc(var(--pb-spacing) * .5)}.pb\\\\:p-1{padding:calc(var(--pb-spacing) * 1)}.pb\\\\:p-1\\\\.5{padding:calc(var(--pb-spacing) * 1.5)}.pb\\\\:p-2{padding:calc(var(--pb-spacing) * 2)}.pb\\\\:p-2\\\\.5{padding:calc(var(--pb-spacing) * 2.5)}.pb\\\\:p-3{padding:calc(var(--pb-spacing) * 3)}.pb\\\\:p-3\\\\.5{padding:calc(var(--pb-spacing) * 3.5)}.pb\\\\:p-4{padding:calc(var(--pb-spacing) * 4)}.pb\\\\:p-4\\\\.5{padding:calc(var(--pb-spacing) * 4.5)}.pb\\\\:p-5{padding:calc(var(--pb-spacing) * 5)}.pb\\\\:p-6{padding:calc(var(--pb-spacing) * 6)}.pb\\\\:p-8{padding:calc(var(--pb-spacing) * 8)}.pb\\\\:p-10{padding:calc(var(--pb-spacing) * 10)}.pb\\\\:p-12{padding:calc(var(--pb-spacing) * 12)}.pb\\\\:px-0\\\\.5{padding-inline:calc(var(--pb-spacing) * .5)}.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-2\\\\.5{padding-inline:calc(var(--pb-spacing) * 2.5)}.pb\\\\:px-3{padding-inline:calc(var(--pb-spacing) * 3)}.pb\\\\:px-3\\\\.5{padding-inline:calc(var(--pb-spacing) * 3.5)}.pb\\\\:px-4{padding-inline:calc(var(--pb-spacing) * 4)}.pb\\\\:px-4\\\\.5{padding-inline:calc(var(--pb-spacing) * 4.5)}.pb\\\\:px-5{padding-inline:calc(var(--pb-spacing) * 5)}.pb\\\\:px-6{padding-inline:calc(var(--pb-spacing) * 6)}.pb\\\\:px-8{padding-inline:calc(var(--pb-spacing) * 8)}.pb\\\\:py-0\\\\.5{padding-block:calc(var(--pb-spacing) * .5)}.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-2\\\\.5{padding-block:calc(var(--pb-spacing) * 2.5)}.pb\\\\:py-3{padding-block:calc(var(--pb-spacing) * 3)}.pb\\\\:py-3\\\\.5{padding-block:calc(var(--pb-spacing) * 3.5)}.pb\\\\:py-4{padding-block:calc(var(--pb-spacing) * 4)}.pb\\\\:pt-0\\\\.5{padding-top:calc(var(--pb-spacing) * .5)}.pb\\\\:pt-2{padding-top:calc(var(--pb-spacing) * 2)}.pb\\\\:pr-2\\\\.5{padding-right:calc(var(--pb-spacing) * 2.5)}.pb\\\\:pr-3{padding-right:calc(var(--pb-spacing) * 3)}.pb\\\\:pr-4{padding-right:calc(var(--pb-spacing) * 4)}.pb\\\\:pr-8{padding-right:calc(var(--pb-spacing) * 8)}.pb\\\\:pr-9{padding-right:calc(var(--pb-spacing) * 9)}.pb\\\\:pr-10{padding-right:calc(var(--pb-spacing) * 10)}.pb\\\\:pb-2{padding-bottom:calc(var(--pb-spacing) * 2)}.pb\\\\:pb-2\\\\.5{padding-bottom:calc(var(--pb-spacing) * 2.5)}.pb\\\\:pb-5{padding-bottom:calc(var(--pb-spacing) * 5)}.pb\\\\:pb-6{padding-bottom:calc(var(--pb-spacing) * 6)}.pb\\\\:pl-1\\\\.5{padding-left:calc(var(--pb-spacing) * 1.5)}.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\\\\:text-right{text-align:right}.pb\\\\:align-middle{vertical-align:middle}.pb\\\\:font-mono{font-family:var(--pb-font-mono)}.pb\\\\:font-sans{font-family:var(--pb-font-sans)}.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-\\\\[8px\\\\]{font-size:8px}.pb\\\\:text-\\\\[9px\\\\]{font-size:9px}.pb\\\\:text-\\\\[10px\\\\]{font-size:10px}.pb\\\\:text-\\\\[11px\\\\]{font-size:11px}.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\\\\:leading-normal{--tw-leading: var(--pb-leading-normal);line-height:var(--pb-leading-normal)}.pb\\\\:leading-relaxed{--tw-leading: var(--pb-leading-relaxed);line-height:var(--pb-leading-relaxed)}.pb\\\\:leading-snug{--tw-leading: var(--pb-leading-snug);line-height:var(--pb-leading-snug)}.pb\\\\:leading-tight{--tw-leading: var(--pb-leading-tight);line-height:var(--pb-leading-tight)}.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\\\\:font-semibold{--tw-font-weight: var(--pb-font-weight-semibold);font-weight:var(--pb-font-weight-semibold)}.pb\\\\:tracking-tight{--tw-tracking: var(--pb-tracking-tight);letter-spacing:var(--pb-tracking-tight)}.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-\\\\[\\\\#636814\\\\]{color:#636814}.pb\\\\:text-amber-600{color:var(--pb-color-amber-600)}.pb\\\\:text-amber-800{color:var(--pb-color-amber-800)}.pb\\\\:text-amber-900{color:var(--pb-color-amber-900)}.pb\\\\:text-amber-950{color:var(--pb-color-amber-950)}.pb\\\\:text-black{color:var(--pb-color-black)}.pb\\\\:text-blue-500{color:var(--pb-color-blue-500)}.pb\\\\:text-blue-900{color:var(--pb-color-blue-900)}.pb\\\\:text-current{color:currentcolor}.pb\\\\:text-dark-primary{color:var(--pb-color-dark-primary)}.pb\\\\:text-emerald-600{color:var(--pb-color-emerald-600)}.pb\\\\:text-emerald-700{color:var(--pb-color-emerald-700)}.pb\\\\:text-emerald-800{color:var(--pb-color-emerald-800)}.pb\\\\:text-emerald-900{color:var(--pb-color-emerald-900)}.pb\\\\:text-emerald-950{color:var(--pb-color-emerald-950)}.pb\\\\:text-gray-100{color:var(--pb-color-gray-100)}.pb\\\\:text-gray-200{color:var(--pb-color-gray-200)}.pb\\\\:text-gray-300{color:var(--pb-color-gray-300)}.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-gray-950{color:var(--pb-color-gray-950)}.pb\\\\:text-green-500{color:var(--pb-color-green-500)}.pb\\\\:text-peerbots-dark{color:var(--pb-color-peerbots-dark)}.pb\\\\:text-peerbots-darkblue{color:var(--pb-color-peerbots-darkblue)}.pb\\\\:text-peerbots-darkteal{color:var(--pb-color-peerbots-darkteal)}.pb\\\\:text-peerbots-pink{color:var(--pb-color-peerbots-pink)}.pb\\\\:text-peerbots-teal{color:var(--pb-color-peerbots-teal)}.pb\\\\:text-primary{color:var(--pb-color-primary)}.pb\\\\:text-purple-900{color:var(--pb-color-purple-900)}.pb\\\\:text-red-400{color:var(--pb-color-red-400)}.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-red-800{color:var(--pb-color-red-800)}.pb\\\\:text-red-900{color:var(--pb-color-red-900)}.pb\\\\:text-red-950{color:var(--pb-color-red-950)}.pb\\\\:text-rose-800{color:var(--pb-color-rose-800)}.pb\\\\:text-rose-900{color:var(--pb-color-rose-900)}.pb\\\\:text-rose-950{color:var(--pb-color-rose-950)}.pb\\\\:text-slate-500{color:var(--pb-color-slate-500)}.pb\\\\:text-slate-600{color:var(--pb-color-slate-600)}.pb\\\\:text-slate-700{color:var(--pb-color-slate-700)}.pb\\\\:text-slate-950{color:var(--pb-color-slate-950)}.pb\\\\:text-teal-200{color:var(--pb-color-teal-200)}.pb\\\\:text-teal-800{color:var(--pb-color-teal-800)}.pb\\\\:text-teal-900{color:var(--pb-color-teal-900)}.pb\\\\:text-teal-950{color:var(--pb-color-teal-950)}.pb\\\\:text-transparent{color:transparent}.pb\\\\:text-white{color:var(--pb-color-white)}.pb\\\\:text-white\\\\/60{color:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){color:color-mix(in oklab,var(--pb-color-white) 60%,transparent)}}.pb\\\\:text-white\\\\/80{color:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){color:color-mix(in oklab,var(--pb-color-white) 80%,transparent)}}.pb\\\\:uppercase{text-transform:uppercase}.pb\\\\:italic{font-style:italic}.pb\\\\:no-underline{text-decoration-line:none}.pb\\\\:underline{text-decoration-line:underline}.pb\\\\:decoration-current{text-decoration-color:currentcolor}.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-40{opacity:40%}.pb\\\\:opacity-50{opacity:50%}.pb\\\\:opacity-70{opacity:70%}.pb\\\\:opacity-75{opacity:75%}.pb\\\\:opacity-80{opacity:80%}.pb\\\\:opacity-90{opacity:90%}.pb\\\\:opacity-100{opacity:100%}.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-2xl{--tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / .25));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\\\\:shadow-xs{--tw-shadow: 0 1px 2px 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\\\\: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-4{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(4px + 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\\\\:shadow-peerbots-teal\\\\/10{--tw-shadow-color: var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){--tw-shadow-color: color-mix(in oklab, color-mix(in oklab, var(--pb-color-peerbots-teal) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.pb\\\\:ring-black{--tw-ring-color: var(--pb-color-black)}.pb\\\\:ring-gray-300{--tw-ring-color: var(--pb-color-gray-300)}.pb\\\\:ring-peerbots-darkblue\\\\/20{--tw-ring-color: var(--pb-color-peerbots-darkblue);@supports (color: color-mix(in lab,red,red)){--tw-ring-color: color-mix(in oklab, var(--pb-color-peerbots-darkblue) 20%, transparent)}}.pb\\\\:ring-peerbots-teal\\\\/30{--tw-ring-color: var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){--tw-ring-color: color-mix(in oklab, var(--pb-color-peerbots-teal) 30%, transparent)}}.pb\\\\:ring-primary\\\\/30{--tw-ring-color: var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){--tw-ring-color: color-mix(in oklab, var(--pb-color-primary) 30%, transparent)}}.pb\\\\:ring-rose-200{--tw-ring-color: var(--pb-color-rose-200)}.pb\\\\:backdrop-blur-2xl{--tw-backdrop-blur: blur(var(--pb-blur-2xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.pb\\\\:backdrop-blur-xl{--tw-backdrop-blur: blur(var(--pb-blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.pb\\\\:backdrop-blur-xs{--tw-backdrop-blur: blur(var(--pb-blur-xs));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.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\\\\:duration-150{--tw-duration: .15s;transition-duration:.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\\\\:group-hover\\\\:scale-102{&:is(:where(.pb\\\\:group):hover *){@media(hover:hover){--tw-scale-x: 102%;--tw-scale-y: 102%;--tw-scale-z: 102%;scale:var(--tw-scale-x) var(--tw-scale-y)}}}.pb\\\\:group-hover\\\\:opacity-100{&:is(:where(.pb\\\\:group):hover *){@media(hover:hover){opacity:100%}}}.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-peerbots-teal{&:focus-within{--tw-ring-color: var(--pb-color-peerbots-teal)}}.pb\\\\:focus-within\\\\:ring-primary{&:focus-within{--tw-ring-color: var(--pb-color-primary)}}.pb\\\\:hover\\\\:-translate-y-0\\\\.5{&:hover{@media(hover:hover){--tw-translate-y: calc(var(--pb-spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}}}.pb\\\\:hover\\\\:scale-105{&:hover{@media(hover:hover){--tw-scale-x: 105%;--tw-scale-y: 105%;--tw-scale-z: 105%;scale:var(--tw-scale-x) var(--tw-scale-y)}}}.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-gray-300{&:hover{@media(hover:hover){border-color:var(--pb-color-gray-300)}}}.pb\\\\:hover\\\\:border-gray-400{&:hover{@media(hover:hover){border-color:var(--pb-color-gray-400)}}}.pb\\\\:hover\\\\:border-gray-500{&:hover{@media(hover:hover){border-color:var(--pb-color-gray-500)}}}.pb\\\\:hover\\\\:border-peerbots-darkteal{&:hover{@media(hover:hover){border-color:var(--pb-color-peerbots-darkteal)}}}.pb\\\\:hover\\\\:border-peerbots-teal\\\\/30{&:hover{@media(hover:hover){border-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 30%,transparent)}}}}.pb\\\\:hover\\\\:border-primary{&:hover{@media(hover:hover){border-color:var(--pb-color-primary)}}}.pb\\\\:hover\\\\:border-primary\\\\/80{&:hover{@media(hover:hover){border-color:var(--pb-color-primary);@supports (color: color-mix(in lab,red,red)){border-color:color-mix(in oklab,var(--pb-color-primary) 80%,transparent)}}}}.pb\\\\:hover\\\\:bg-amber-50{&:hover{@media(hover:hover){background-color:var(--pb-color-amber-50)}}}.pb\\\\:hover\\\\:bg-amber-100{&:hover{@media(hover:hover){background-color:var(--pb-color-amber-100)}}}.pb\\\\:hover\\\\:bg-amber-600{&:hover{@media(hover:hover){background-color:var(--pb-color-amber-600)}}}.pb\\\\:hover\\\\:bg-black\\\\/5{&:hover{@media(hover:hover){background-color:var(--pb-color-black);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-black) 5%,transparent)}}}}.pb\\\\:hover\\\\:bg-dark-primary{&:hover{@media(hover:hover){background-color:var(--pb-color-dark-primary)}}}.pb\\\\:hover\\\\:bg-emerald-50{&:hover{@media(hover:hover){background-color:var(--pb-color-emerald-50)}}}.pb\\\\:hover\\\\:bg-emerald-100{&:hover{@media(hover:hover){background-color:var(--pb-color-emerald-100)}}}.pb\\\\:hover\\\\:bg-emerald-800{&:hover{@media(hover:hover){background-color:var(--pb-color-emerald-800)}}}.pb\\\\:hover\\\\:bg-gray-50{&:hover{@media(hover:hover){background-color:var(--pb-color-gray-50)}}}.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-gray-700{&:hover{@media(hover:hover){background-color:var(--pb-color-gray-700)}}}.pb\\\\:hover\\\\:bg-peerbots-darkblue\\\\/10{&:hover{@media(hover:hover){background-color:var(--pb-color-peerbots-darkblue);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-darkblue) 10%,transparent)}}}}.pb\\\\:hover\\\\:bg-peerbots-darkblue\\\\/25{&:hover{@media(hover:hover){background-color:var(--pb-color-peerbots-darkblue);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-darkblue) 25%,transparent)}}}}.pb\\\\:hover\\\\:bg-peerbots-darkteal{&:hover{@media(hover:hover){background-color:var(--pb-color-peerbots-darkteal)}}}.pb\\\\:hover\\\\:bg-peerbots-pink\\\\/10{&:hover{@media(hover:hover){background-color:var(--pb-color-peerbots-pink);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-pink) 10%,transparent)}}}}.pb\\\\:hover\\\\:bg-peerbots-pink\\\\/30{&:hover{@media(hover:hover){background-color:var(--pb-color-peerbots-pink);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-pink) 30%,transparent)}}}}.pb\\\\:hover\\\\:bg-peerbots-teal\\\\/10{&:hover{@media(hover:hover){background-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 10%,transparent)}}}}.pb\\\\:hover\\\\:bg-peerbots-teal\\\\/15{&:hover{@media(hover:hover){background-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 15%,transparent)}}}}.pb\\\\:hover\\\\:bg-peerbots-teal\\\\/30{&:hover{@media(hover:hover){background-color:var(--pb-color-peerbots-teal);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-peerbots-teal) 30%,transparent)}}}}.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-primary\\\\/10{&: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) 10%,transparent)}}}}.pb\\\\:hover\\\\:bg-primary\\\\/30{&: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) 30%,transparent)}}}}.pb\\\\:hover\\\\:bg-red-50{&:hover{@media(hover:hover){background-color:var(--pb-color-red-50)}}}.pb\\\\:hover\\\\:bg-red-100{&:hover{@media(hover:hover){background-color:var(--pb-color-red-100)}}}.pb\\\\:hover\\\\:bg-red-700{&:hover{@media(hover:hover){background-color:var(--pb-color-red-700)}}}.pb\\\\:hover\\\\:bg-rose-700{&:hover{@media(hover:hover){background-color:var(--pb-color-rose-700)}}}.pb\\\\:hover\\\\:bg-white{&:hover{@media(hover:hover){background-color:var(--pb-color-white)}}}.pb\\\\:hover\\\\:bg-white\\\\/10{&:hover{@media(hover:hover){background-color:var(--pb-color-white);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--pb-color-white) 10%,transparent)}}}}.pb\\\\:hover\\\\:text-gray-600{&:hover{@media(hover:hover){color:var(--pb-color-gray-600)}}}.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-gray-950{&:hover{@media(hover:hover){color:var(--pb-color-gray-950)}}}.pb\\\\:hover\\\\:text-peerbots-darkteal{&:hover{@media(hover:hover){color:var(--pb-color-peerbots-darkteal)}}}.pb\\\\:hover\\\\:text-peerbots-teal{&:hover{@media(hover:hover){color:var(--pb-color-peerbots-teal)}}}.pb\\\\:hover\\\\:text-red-900{&:hover{@media(hover:hover){color:var(--pb-color-red-900)}}}.pb\\\\:hover\\\\:text-rose-950{&:hover{@media(hover:hover){color:var(--pb-color-rose-950)}}}.pb\\\\:hover\\\\:text-teal-900{&:hover{@media(hover:hover){color:var(--pb-color-teal-900)}}}.pb\\\\:hover\\\\:text-teal-950{&:hover{@media(hover:hover){color:var(--pb-color-teal-950)}}}.pb\\\\:hover\\\\:text-white{&:hover{@media(hover:hover){color:var(--pb-color-white)}}}.pb\\\\:hover\\\\:underline{&:hover{@media(hover:hover){text-decoration-line:underline}}}.pb\\\\:hover\\\\:opacity-10{&:hover{@media(hover:hover){opacity:10%}}}.pb\\\\:hover\\\\:opacity-90{&:hover{@media(hover:hover){opacity:90%}}}.pb\\\\:hover\\\\:opacity-100{&:hover{@media(hover:hover){opacity:100%}}}.pb\\\\:hover\\\\:shadow-lg{&:hover{@media(hover:hover){--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\\\\: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-gray-400{&:focus-visible{--tw-ring-color: var(--pb-color-gray-400)}}.pb\\\\:focus-visible\\\\:ring-peerbots-teal{&:focus-visible{--tw-ring-color: var(--pb-color-peerbots-teal)}}.pb\\\\:focus-visible\\\\:ring-primary{&:focus-visible{--tw-ring-color: var(--pb-color-primary)}}.pb\\\\:focus-visible\\\\:ring-offset-1{&:focus-visible{--tw-ring-offset-width: 1px;--tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}}.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\\\\:opacity-50{&:disabled{opacity:50%}}.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\\\\:grid-cols-3{@media(width>=40rem){grid-template-columns:repeat(3,minmax(0,1fr))}}.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-4{@media(width>=48rem){grid-template-columns:repeat(4,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-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;}@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-gradient-position{syntax: \\\"*\\\"; inherits: false;}@property --tw-gradient-from{syntax: \\\"<color>\\\"; inherits: false; initial-value: #0000;}@property --tw-gradient-via{syntax: \\\"<color>\\\"; inherits: false; initial-value: #0000;}@property --tw-gradient-to{syntax: \\\"<color>\\\"; inherits: false; initial-value: #0000;}@property --tw-gradient-stops{syntax: \\\"*\\\"; inherits: false;}@property --tw-gradient-via-stops{syntax: \\\"*\\\"; inherits: false;}@property --tw-gradient-from-position{syntax: \\\"<length-percentage>\\\"; inherits: false; initial-value: 0%;}@property --tw-gradient-via-position{syntax: \\\"<length-percentage>\\\"; inherits: false; initial-value: 50%;}@property --tw-gradient-to-position{syntax: \\\"<length-percentage>\\\"; inherits: false; initial-value: 100%;}@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-backdrop-blur{syntax: \\\"*\\\"; inherits: false;}@property --tw-backdrop-brightness{syntax: \\\"*\\\"; inherits: false;}@property --tw-backdrop-contrast{syntax: \\\"*\\\"; inherits: false;}@property --tw-backdrop-grayscale{syntax: \\\"*\\\"; inherits: false;}@property --tw-backdrop-hue-rotate{syntax: \\\"*\\\"; inherits: false;}@property --tw-backdrop-invert{syntax: \\\"*\\\"; inherits: false;}@property --tw-backdrop-opacity{syntax: \\\"*\\\"; inherits: false;}@property --tw-backdrop-saturate{syntax: \\\"*\\\"; inherits: false;}@property --tw-backdrop-sepia{syntax: \\\"*\\\"; inherits: false;}@property --tw-duration{syntax: \\\"*\\\"; inherits: false;}@property --tw-ease{syntax: \\\"*\\\"; inherits: false;}@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-scale-x: 1;--tw-scale-y: 1;--tw-scale-z: 1;--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-gradient-position: initial;--tw-gradient-from: #0000;--tw-gradient-via: #0000;--tw-gradient-to: #0000;--tw-gradient-stops: initial;--tw-gradient-via-stops: initial;--tw-gradient-from-position: 0%;--tw-gradient-via-position: 50%;--tw-gradient-to-position: 100%;--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-backdrop-blur: initial;--tw-backdrop-brightness: initial;--tw-backdrop-contrast: initial;--tw-backdrop-grayscale: initial;--tw-backdrop-hue-rotate: initial;--tw-backdrop-invert: initial;--tw-backdrop-opacity: initial;--tw-backdrop-saturate: initial;--tw-backdrop-sepia: initial;--tw-duration: initial;--tw-ease: initial}}}\\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 React from \"react\";\nimport { cn } from \"../utils\";\nimport { BrandColor, ComponentColor, ComponentSize } from \"../types\";\n\nconst headingSizes: Record<number, string> = {\n 1: \"pb:text-4xl sm:pb:text-5xl pb:font-bold pb:leading-tight\",\n 2: \"pb:text-3xl sm:pb:text-4xl pb:font-bold pb:leading-snug\",\n 3: \"pb:text-2xl sm:pb:text-3xl pb:font-bold pb:leading-snug\",\n 4: \"pb:text-xl sm:pb:text-2xl pb:font-bold pb:leading-snug\",\n 5: \"pb:text-lg sm:pb:text-xl pb:font-bold\",\n 6: \"pb:text-base sm:pb:text-lg pb:font-bold\",\n};\n\nconst headingColorClasses: Record<string, string> = {\n default: \"\",\n teal: \"pb:text-peerbots-darkteal\",\n pink: \"pb:text-rose-800\",\n primary: \"pb:text-dark-primary\",\n darkteal: \"pb:text-peerbots-darkteal\",\n darkblue: \"pb:text-peerbots-darkblue\",\n olive: \"pb:text-[#636814]\",\n dark: \"pb:text-peerbots-dark\",\n white: \"pb:text-white\",\n gradient:\n \"pb:bg-clip-text pb:text-transparent pb:bg-gradient-to-r pb:from-peerbots-teal pb:via-peerbots-pink pb:to-peerbots-darkblue\",\n};\n\nconst textColorClasses: Record<string, string> = {\n default: \"pb:text-slate-950\",\n neutral: \"pb:text-gray-800\",\n muted: \"pb:text-gray-600\",\n error: \"pb:text-red-700 pb:font-medium\",\n success: \"pb:text-emerald-800 pb:font-medium\",\n teal: \"pb:text-peerbots-darkteal\",\n pink: \"pb:text-rose-800\",\n primary: \"pb:text-dark-primary\",\n darkteal: \"pb:text-peerbots-darkteal\",\n darkblue: \"pb:text-peerbots-darkblue\",\n olive: \"pb:text-[#636814]\",\n dark: \"pb:text-peerbots-dark\",\n white: \"pb:text-white\",\n};\n\nconst textSizeClasses: Record<string, string> = {\n xs: \"pb:text-xs pb:leading-normal\",\n sm: \"pb:text-sm pb:leading-relaxed\",\n md: \"pb:text-base pb:leading-relaxed\",\n lg: \"pb:text-lg pb:leading-relaxed\",\n xl: \"pb:text-xl pb:leading-relaxed\",\n lead: \"pb:text-lg sm:pb:text-xl pb:leading-relaxed pb:text-slate-700\",\n};\n\nconst weightClasses = {\n normal: \"pb:font-normal\",\n medium: \"pb:font-medium\",\n semibold: \"pb:font-semibold\",\n bold: \"pb:font-bold\",\n};\n\nexport interface HeadingProps extends React.HTMLAttributes<HTMLHeadingElement> {\n /** Semantic HTML heading level (h1 - h6) */\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n /** Visual heading scale override (defaults to level) */\n size?: 1 | 2 | 3 | 4 | 5 | 6;\n /** Palette color or gradient text fill */\n color?: BrandColor | \"gradient\" | \"default\";\n /** Legacy variant prop (alias for color) */\n variant?: BrandColor | \"gradient\" | \"default\";\n /** Font weight */\n weight?: \"normal\" | \"medium\" | \"semibold\" | \"bold\";\n children?: React.ReactNode;\n}\n\nexport const Heading = ({\n level = 1,\n size,\n color,\n variant,\n weight,\n className,\n children,\n ...props\n}: HeadingProps) => {\n const visualScale = size !== undefined ? size : level;\n const resolvedColor = color || variant || \"default\";\n\n return React.createElement(\n `h${level}`,\n {\n className: cn(\n headingSizes[visualScale],\n headingColorClasses[resolvedColor] || \"\",\n weight && weightClasses[weight],\n className,\n ),\n ...props,\n },\n children,\n );\n};\n\nexport interface TextProps extends React.HTMLAttributes<HTMLElement> {\n /** HTML rendering tag */\n as?: React.ElementType;\n /** Typography scale */\n size?: ComponentSize | \"lead\";\n /** Text color / intent */\n color?: ComponentColor | \"muted\" | \"error\" | \"success\" | \"default\";\n /** Legacy variant prop for convenience / backward compatibility */\n variant?: \"default\" | \"muted\" | \"small\" | \"large\" | \"lead\" | \"error\" | \"success\";\n /** Font weight */\n weight?: \"normal\" | \"medium\" | \"semibold\" | \"bold\";\n /** Text alignment */\n align?: \"left\" | \"center\" | \"right\";\n children?: React.ReactNode;\n}\n\nexport const Text = ({\n as: Component = \"p\",\n size,\n color,\n variant,\n weight,\n align,\n className,\n children,\n ...props\n}: TextProps) => {\n const resolvedSize =\n size ||\n (variant === \"small\"\n ? \"sm\"\n : variant === \"large\"\n ? \"lg\"\n : variant === \"lead\"\n ? \"lead\"\n : \"md\");\n\n const resolvedColor =\n color ||\n (variant === \"muted\"\n ? \"muted\"\n : variant === \"error\"\n ? \"error\"\n : variant === \"success\"\n ? \"success\"\n : \"default\");\n\n return React.createElement(\n Component,\n {\n className: cn(\n textSizeClasses[resolvedSize] || textSizeClasses.md,\n textColorClasses[resolvedColor] || textColorClasses.default,\n weight && weightClasses[weight],\n align && `pb:text-${align}`,\n className,\n ),\n ...props,\n },\n children,\n );\n};\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 star: \"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\",\n shield: \"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\",\n chat: \"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\",\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 face: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M8 14s1.5 2 4 2 4-2 4-2\" />\n <line x1=\"9\" y1=\"9\" x2=\"9.01\" y2=\"9\" strokeWidth=\"3\" />\n <line x1=\"15\" y1=\"9\" x2=\"15.01\" y2=\"9\" strokeWidth=\"3\" />\n </>\n ),\n mic: (\n <>\n <path d=\"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z\" />\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"22\" />\n </>\n ),\n brain: (\n <>\n <path d=\"M9.5 2A2.5 2.5 0 0 1 12 4.5v15a2.5 2.5 0 0 1-4.96.44 2.5 2.5 0 0 1-2.96-3.08 3 3 0 0 1-.34-5.58 2.5 2.5 0 0 1 1.32-4.24 2.5 2.5 0 0 1 4.44-2.04Z\" />\n <path d=\"M14.5 2A2.5 2.5 0 0 0 12 4.5v15a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.96-3.08 3 3 0 0 0 .34-5.58 2.5 2.5 0 0 0-1.32-4.24 2.5 2.5 0 0 0-4.44-2.04Z\" />\n </>\n ),\n user: (\n <>\n <path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" />\n <circle cx=\"12\" cy=\"7\" r=\"4\" />\n </>\n ),\n users: (\n <>\n <path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <path d=\"M22 21v-2a4 4 0 0 0-3-3.87\" />\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\" />\n </>\n ),\n globe: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\" />\n <path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\" />\n </>\n ),\n devices: (\n <>\n <rect width=\"16\" height=\"10\" x=\"2\" y=\"3\" rx=\"2\" />\n <path d=\"M12 17v4\" />\n <path d=\"M8 21h8\" />\n </>\n ),\n volume: (\n <>\n <polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\" />\n <path d=\"M15.54 8.46a5 5 0 0 1 0 7.07\" />\n <path d=\"M19.07 4.93a10 10 0 0 1 0 14.14\" />\n </>\n ),\n sliders: (\n <>\n <line x1=\"4\" x2=\"4\" y1=\"21\" y2=\"14\" />\n <line x1=\"4\" x2=\"4\" y1=\"10\" y2=\"3\" />\n <line x1=\"12\" x2=\"12\" y1=\"21\" y2=\"12\" />\n <line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"3\" />\n <line x1=\"20\" x2=\"20\" y1=\"21\" y2=\"16\" />\n <line x1=\"20\" x2=\"20\" y1=\"12\" y2=\"3\" />\n <line x1=\"1\" x2=\"7\" y1=\"14\" y2=\"14\" />\n <line x1=\"9\" x2=\"15\" y1=\"8\" y2=\"8\" />\n <line x1=\"17\" x2=\"23\" y1=\"16\" y2=\"16\" />\n </>\n ),\n joystick: (\n <>\n <circle cx=\"12\" cy=\"7\" r=\"3\" />\n <path d=\"M12 10v7\" />\n <rect width=\"18\" height=\"4\" x=\"3\" y=\"17\" rx=\"2\" />\n </>\n ),\n book: (\n <>\n <path d=\"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1-2.5-2.5Z\" />\n <path d=\"M6 6h10\" />\n <path d=\"M6 10h10\" />\n </>\n ),\n store: (\n <>\n <path d=\"m2 7 4.41-4.41A2 2 0 0 1 7.83 2h8.34a2 2 0 0 1 1.42.59L22 7\" />\n <path d=\"M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8\" />\n <path d=\"M15 22v-4a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2v4\" />\n <path d=\"M2 7h20\" />\n </>\n ),\n award: (\n <>\n <circle cx=\"12\" cy=\"8\" r=\"7\" />\n <polyline points=\"8.21 13.89 7 23 12 20 17 23 15.79 13.88\" />\n </>\n ),\n headset: (\n <>\n <path d=\"M3 18v-6a9 9 0 0 1 18 0v6\" />\n <path d=\"M21 19a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3zM3 19a2 2 0 0 0 2 2h1a2 2 0 0 0 2-2v-3a2 2 0 0 0-2-2H3z\" />\n </>\n ),\n layout: (\n <>\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n <path d=\"M3 9h18\" />\n <path d=\"M9 21V9\" />\n </>\n ),\n video: (\n <>\n <polygon points=\"23 7 16 12 23 17 23 7\" />\n <rect width=\"14\" height=\"12\" x=\"1\" y=\"6\" rx=\"2\" />\n </>\n ),\n facebook: (\n <path\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n d=\"M22 12c0-5.523-4.477-10-10-10S2 6.477 2 12c0 4.991 3.657 9.128 8.438 9.878v-6.987h-2.54V12h2.54V9.797c0-2.506 1.492-3.89 3.777-3.89 1.094 0 2.238.195 2.238.195v2.46h-1.26c-1.243 0-1.63.771-1.63 1.562V12h2.773l-.443 2.89h-2.33v6.988C18.343 21.128 22 16.991 22 12z\"\n clipRule=\"evenodd\"\n />\n ),\n instagram: (\n <path\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n d=\"M12.315 2c2.43 0 2.784.013 3.808.06 1.064.049 1.791.218 2.427.465a4.902 4.902 0 011.772 1.153 4.902 4.902 0 011.153 1.772c.247.636.416 1.363.465 2.427.048 1.067.06 1.407.06 4.123v.08c0 2.643-.012 2.987-.06 4.043-.049 1.064-.218 1.791-.465 2.427a4.902 4.902 0 01-1.153 1.772 4.902 4.902 0 01-1.772 1.153c-.636.247-1.363.416-2.427.465-1.067.048-1.407.06-4.123.06h-.08c-2.643 0-2.987-.012-4.043-.06-1.064-.049-1.791-.218-2.427-.465a4.902 4.902 0 01-1.772-1.153 4.902 4.902 0 01-1.153-1.772c-.247-.636-.416-1.363-.465-2.427-.047-1.024-.06-1.379-.06-3.808v-.63c0-2.43.013-2.784.06-3.808.049-1.064.218-1.791.465-2.427a4.902 4.902 0 011.153-1.772A4.902 4.902 0 015.45 2.525c.636-.247 1.363-.416 2.427-.465C8.901 2.013 9.256 2 11.685 2h.63zm-.081 1.802h-.468c-2.456 0-2.784.011-3.807.058-.975.045-1.504.207-1.857.344-.467.182-.8.398-1.15.748-.35.35-.566.683-.748 1.15-.137.353-.3.882-.344 1.857-.047 1.023-.058 1.351-.058 3.807v.468c0 2.456.011 2.784.058 3.807.045.975.207 1.504.344 1.857.182.466.399.8.748 1.15.35.35.683.566 1.15.748.353.137.882.3 1.857.344 1.054.048 1.37.058 4.041.058h.08c2.597 0 2.917-.01 3.96-.058.976-.045 1.505-.207 1.858-.344.466-.182.8-.398 1.15-.748.35-.35.566-.683.748-1.15.137-.353.3-.882.344-1.857.048-1.055.058-1.37.058-4.041v-.08c0-2.597-.01-2.917-.058-3.96-.045-.976-.207-1.505-.344-1.858a3.097 3.097 0 00-.748-1.15 3.098 3.098 0 00-1.15-.748c-.353-.137-.882-.3-1.857-.344-1.023-.047-1.351-.058-3.807-.058zM12 6.865a5.135 5.135 0 110 10.27 5.135 5.135 0 010-10.27zm0 1.802a3.333 3.333 0 100 6.666 3.333 3.333 0 000-6.666zm5.338-3.205a1.2 1.2 0 110 2.4 1.2 1.2 0 010-2.4z\"\n clipRule=\"evenodd\"\n />\n ),\n linkedin: (\n <path\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n d=\"M19 3a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14m-.5 15.5v-5.3a3.26 3.26 0 0 0-3.26-3.26c-.85 0-1.84.52-2.28 1.3v-1.11h-2.79v8.37h2.79v-4.93c0-.77.62-1.4 1.39-1.4a1.4 1.4 0 0 1 1.4 1.4v4.93h2.75M6.88 8.56a1.68 1.68 0 0 0 1.68-1.68c0-.93-.75-1.69-1.68-1.69a1.69 1.69 0 0 0-1.69 1.69c0 .93.76 1.68 1.69 1.68m1.39 9.94v-8.37H5.5v8.37h2.77z\"\n clipRule=\"evenodd\"\n />\n ),\n twitter: (\n <path\n fill=\"currentColor\"\n d=\"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z\"\n />\n ),\n youtube: (\n <path\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n d=\"M21.582 6.186a2.806 2.806 0 0 0-1.974-1.986C17.868 3.75 12 3.75 12 3.75s-5.868 0-7.608.45A2.806 2.806 0 0 0 2.418 6.186C2 7.94 2 12 2 12s0 4.06.418 5.814a2.806 2.806 0 0 0 1.974 1.986c1.74.45 7.608.45 7.608.45s5.868 0 7.608-.45a2.806 2.806 0 0 0 1.974-1.986C22 16.06 22 12 22 12s0-4.06-.418-5.814zM9.75 15.568V8.432L15.818 12 9.75 15.568z\"\n clipRule=\"evenodd\"\n />\n ),\n bluesky: (\n <path\n fill=\"currentColor\"\n d=\"M12 10.8c-1.087-2.114-4.046-6.053-6.798-7.995C2.566 1.01 1.5 1.97 1.5 4.5c0 2.054.675 6.643 1.05 7.995.675 2.43 2.7 3.375 4.5 3.375-3.375.9-4.875 3.15-2.7 6.3 3.675 5.325 6.9-2.025 7.65-4.275.75 2.25 3.975 9.6 7.65 4.275 2.175-3.15.675-5.4-2.7-6.3 1.8 0 3.825-.945 4.5-3.375.375-1.352 1.05-5.941 1.05-7.995 0-2.53-1.066-3.49-3.702-1.695C16.046 4.747 13.087 8.686 12 10.8z\"\n />\n ),\n github: (\n <path\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n d=\"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.53 1.032 1.53 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z\"\n clipRule=\"evenodd\"\n />\n ),\n} as const;\n\nexport type IconName =\n | keyof typeof iconPaths\n | keyof typeof complexIcons\n | \"smile\"\n | \"avatar\"\n | \"voice\"\n | \"audio\"\n | \"speech\"\n | \"expert\"\n | \"profile\"\n | \"world\"\n | \"language\"\n | \"screen\"\n | \"laptop\"\n | \"sound\"\n | \"speaker\"\n | \"tune\"\n | \"adjust\"\n | \"message\"\n | \"team\"\n | \"group\"\n | \"motion\"\n | \"gamepad\"\n | \"curriculum\"\n | \"learning\"\n | \"education\"\n | \"marketplace\"\n | \"security\"\n | \"privacy\"\n | \"badge\"\n | \"certificate\"\n | \"support\"\n | \"help\"\n | \"x-brand\"\n | \"bsky\";\n\nconst iconAliases: Record<string, keyof typeof iconPaths | keyof typeof complexIcons> = {\n smile: \"face\",\n avatar: \"face\",\n voice: \"mic\",\n audio: \"mic\",\n speech: \"mic\",\n expert: \"brain\",\n profile: \"user\",\n world: \"globe\",\n language: \"globe\",\n screen: \"devices\",\n laptop: \"devices\",\n sound: \"volume\",\n speaker: \"volume\",\n tune: \"sliders\",\n adjust: \"sliders\",\n message: \"chat\",\n team: \"users\",\n group: \"users\",\n motion: \"joystick\",\n gamepad: \"joystick\",\n curriculum: \"book\",\n learning: \"book\",\n education: \"book\",\n marketplace: \"store\",\n security: \"shield\",\n privacy: \"shield\",\n badge: \"award\",\n certificate: \"award\",\n support: \"headset\",\n help: \"headset\",\n \"x-brand\": \"twitter\",\n bsky: \"bluesky\",\n};\n\nexport const getIconNode = (name: IconName): React.ReactNode => {\n const resolvedName = (iconAliases[name] || name) as\n | keyof typeof iconPaths\n | keyof typeof complexIcons;\n\n if (resolvedName in complexIcons) {\n return complexIcons[resolvedName as keyof typeof complexIcons];\n }\n if (resolvedName in iconPaths) {\n return <path d={iconPaths[resolvedName as keyof typeof iconPaths]} />;\n }\n return null;\n};\n\nexport const icons: Record<string, React.ReactNode> = new Proxy(\n {},\n {\n get: (_, prop: string) => getIconNode(prop as IconName),\n has: () => true,\n },\n);\n","import React from \"react\";\nimport { cn } from \"../utils\";\nimport { Icon, IconName } from \"./Icon\";\n\nexport interface SocialLinkItem {\n name: string;\n url: string;\n ariaLabel?: string;\n icon?: IconName;\n}\n\nexport const DEFAULT_PEERBOTS_SOCIAL_LINKS: SocialLinkItem[] = [\n {\n name: \"Facebook\",\n url: \"https://www.facebook.com/peerbots\",\n ariaLabel: \"Peerbots on Facebook\",\n icon: \"facebook\",\n },\n {\n name: \"Instagram\",\n url: \"https://www.instagram.com/peerbots\",\n ariaLabel: \"Peerbots on Instagram\",\n icon: \"instagram\",\n },\n {\n name: \"LinkedIn\",\n url: \"https://www.linkedin.com/company/peerbots\",\n ariaLabel: \"Peerbots on LinkedIn\",\n icon: \"linkedin\",\n },\n {\n name: \"Twitter\",\n url: \"https://twitter.com/peerbots\",\n ariaLabel: \"Peerbots on Twitter / X\",\n icon: \"twitter\",\n },\n {\n name: \"YouTube\",\n url: \"https://www.youtube.com/@peerbots\",\n ariaLabel: \"Peerbots on YouTube\",\n icon: \"youtube\",\n },\n {\n name: \"BlueSky\",\n url: \"https://bsky.app/profile/peerbots.bsky.social\",\n ariaLabel: \"Peerbots on BlueSky\",\n icon: \"bluesky\",\n },\n {\n name: \"GitHub\",\n url: \"https://github.com/peerbots\",\n ariaLabel: \"Peerbots on GitHub\",\n icon: \"github\",\n },\n];\n\nexport interface SocialLinksProps {\n className?: string;\n links?: SocialLinkItem[];\n size?: \"sm\" | \"md\" | \"lg\";\n variant?: \"default\" | \"white\" | \"teal\" | \"dark\" | \"muted\";\n}\n\nexport const SocialLinks: React.FC<SocialLinksProps> = ({\n className,\n links = DEFAULT_PEERBOTS_SOCIAL_LINKS,\n size = \"md\",\n variant = \"default\",\n}) => {\n const sizeClasses = {\n sm: \"pb:w-4 pb:h-4\",\n md: \"pb:w-5 pb:h-5\",\n lg: \"pb:w-6 pb:h-6\",\n }[size];\n\n const variantClasses = {\n default:\n \"pb:text-gray-500 pb:hover:text-peerbots-darkteal pb:hover:bg-peerbots-teal/10\",\n white: \"pb:text-white/80 pb:hover:text-white pb:hover:bg-white/10\",\n teal: \"pb:text-peerbots-teal pb:hover:text-peerbots-darkteal pb:hover:bg-peerbots-teal/15\",\n dark: \"pb:text-gray-900 pb:hover:text-peerbots-teal pb:hover:bg-gray-100\",\n muted: \"pb:text-gray-400 pb:hover:text-gray-700 pb:hover:bg-gray-100\",\n }[variant];\n\n const buttonSizeClasses = {\n sm: \"pb:p-1.5 pb:rounded-lg\",\n md: \"pb:p-2 pb:rounded-xl\",\n lg: \"pb:p-2.5 pb:rounded-2xl\",\n }[size];\n\n return (\n <div className={cn(\"pb:flex pb:flex-wrap pb:items-center pb:gap-1.5\", className)}>\n {links.map((link) => {\n const iconName = (link.icon ||\n link.name.toLowerCase().replace(/[^a-z0-9]/g, \"\")) as IconName;\n\n return (\n <a\n key={link.name}\n href={link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cn(\n \"pb:inline-flex pb:items-center pb:justify-center pb:transition-all pb:duration-200 pb:cursor-pointer\",\n variantClasses,\n buttonSizeClasses,\n )}\n aria-label={link.ariaLabel || `Visit Peerbots on ${link.name}`}\n title={link.name}\n >\n <Icon name={iconName} className={sizeClasses} />\n </a>\n );\n })}\n </div>\n );\n};\n","import React, { useState } from \"react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"./Icon\";\n\nexport interface CodeBlockProps {\n /** The code string to display */\n code: string;\n /** Programming language for syntax/badge (e.g. bash, tsx, json) */\n language?: string;\n /** Optional file name displayed in the window header */\n fileName?: string;\n /** Whether to show line numbers */\n showLineNumbers?: boolean;\n /** Style variant: 'default' (clean block) or 'window' (macOS window with colored dots) */\n variant?: \"default\" | \"window\" | \"flat\";\n /** Whether to show the copy button */\n showCopyButton?: boolean;\n className?: string;\n}\n\nexport const CodeBlock: React.FC<CodeBlockProps> = ({\n code = \"\",\n language,\n fileName,\n showLineNumbers = false,\n variant = \"default\",\n showCopyButton = true,\n className,\n}) => {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error(\"Failed to copy code to clipboard\", err);\n }\n };\n\n const codeLines = code.trim().split(\"\\n\");\n const isWindow = variant === \"window\";\n\n return (\n <div\n className={cn(\n \"pb:relative pb:group pb:rounded-xl pb:overflow-hidden pb:font-mono pb:text-sm pb:transition-all\",\n isWindow\n ? \"pb:shadow-xl pb:border pb:border-gray-800 pb:bg-[#1e222b] pb:text-gray-100\"\n : variant === \"flat\"\n ? \"pb:bg-[#1e222b]/90 pb:text-gray-100\"\n : \"pb:border pb:border-gray-800 pb:bg-[#1e222b] pb:text-gray-100 pb:shadow-md\",\n className,\n )}\n >\n {/* Window Header Bar (Only in window variant) */}\n {isWindow ? (\n <div className=\"pb:flex pb:items-center pb:justify-between pb:px-4 pb:py-3 pb:bg-[#161920] pb:border-b pb:border-gray-800/80\">\n <div className=\"pb:flex pb:items-center pb:gap-2\">\n <span className=\"pb:w-3 pb:h-3 pb:rounded-full pb:bg-red-500/80 pb:inline-block\" />\n <span className=\"pb:w-3 pb:h-3 pb:rounded-full pb:bg-yellow-500/80 pb:inline-block\" />\n <span className=\"pb:w-3 pb:h-3 pb:rounded-full pb:bg-green-500/80 pb:inline-block\" />\n {fileName && (\n <span className=\"pb:ml-2 pb:text-xs pb:text-gray-300 pb:font-sans pb:font-medium\">\n {fileName}\n </span>\n )}\n </div>\n\n <div className=\"pb:flex pb:items-center pb:gap-3\">\n {language && (\n <span className=\"pb:text-xs pb:uppercase pb:font-bold pb:text-gray-200 pb:bg-gray-800/80 pb:px-2.5 pb:py-0.5 pb:rounded-md\">\n {language}\n </span>\n )}\n {showCopyButton && (\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"pb:flex pb:items-center pb:gap-1.5 pb:px-3 pb:py-1 pb:text-xs pb:font-semibold pb:text-gray-200 pb:hover:text-white pb:bg-gray-800 pb:hover:bg-gray-700 pb:rounded-lg pb:transition-colors pb:cursor-pointer\"\n aria-label=\"Copy code to clipboard\"\n >\n {copied ? (\n <>\n <Icon name=\"check\" className=\"pb:w-3.5 pb:h-3.5 pb:text-peerbots-teal\" />\n <span className=\"pb:text-peerbots-teal\">Copied!</span>\n </>\n ) : (\n <>\n <Icon name=\"clipboard\" className=\"pb:w-3.5 pb:h-3.5\" />\n <span>Copy</span>\n </>\n )}\n </button>\n )}\n </div>\n </div>\n ) : (\n /* Floating Copy & Language badge for default / simple variant */\n (showCopyButton || language) && (\n <div className=\"pb:absolute pb:top-3 pb:right-3 pb:flex pb:items-center pb:gap-2 pb:z-10\">\n {language && (\n <span className=\"pb:text-[11px] pb:uppercase pb:font-bold pb:text-gray-200 pb:bg-gray-800/80 pb:px-2 pb:py-0.5 pb:rounded-md pb:select-none\">\n {language}\n </span>\n )}\n {showCopyButton && (\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"pb:p-1.5 pb:rounded-md pb:bg-gray-800/70 pb:hover:bg-gray-700 pb:text-gray-300 pb:hover:text-white pb:transition-all pb:duration-150 pb:cursor-pointer pb:border pb:border-gray-700/50\"\n aria-label=\"Copy code to clipboard\"\n title={copied ? \"Copied!\" : \"Copy code\"}\n >\n {copied ? (\n <Icon name=\"check\" className=\"pb:w-4 pb:h-4 pb:text-peerbots-teal\" />\n ) : (\n <Icon name=\"clipboard\" className=\"pb:w-4 pb:h-4\" />\n )}\n </button>\n )}\n </div>\n )\n )}\n\n {/* Code Block Body */}\n <div className=\"pb:p-4 sm:pb:p-5 pb:overflow-x-auto pb:text-sm sm:pb:text-base pb:leading-relaxed\">\n <pre className=\"pb:font-mono pb:m-0\">\n <code>\n {showLineNumbers ? (\n codeLines.map((line, idx) => (\n <div key={idx} className=\"pb:table-row\">\n <span className=\"pb:table-cell pb:pr-4 pb:text-right pb:select-none pb:text-gray-400 pb:text-xs\">\n {idx + 1}\n </span>\n <span className=\"pb:table-cell\">{line}</span>\n </div>\n ))\n ) : (\n code\n )}\n </code>\n </pre>\n </div>\n </div>\n );\n};\n","import * as React from \"react\";\nimport { cn } from \"../utils\";\nimport { ComponentColor } from \"../types\";\n\nexport interface AnchorProps\n extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n /**\n * Palette color or semantic intent.\n * @default \"default\"\n */\n color?: ComponentColor | \"muted\" | \"default\";\n /**\n * Underline text decoration control.\n * @default \"hover\"\n */\n underline?: \"hover\" | \"always\" | \"none\";\n /**\n * Interaction style variant.\n * @default \"default\"\n */\n variant?: \"default\" | \"ghost\";\n /** Polymorphic component wrapper (e.g. react-router Link, Next.js Link) */\n as?: React.ElementType;\n /** Custom render prop */\n render?: (\n props: React.AnchorHTMLAttributes<HTMLAnchorElement>,\n ) => React.ReactElement;\n}\n\nexport type LinkProps = AnchorProps;\n\nconst colorClasses: Record<string, string> = {\n default: \"pb:text-gray-900 pb:hover:text-peerbots-darkteal\",\n neutral: \"pb:text-gray-700 pb:hover:text-gray-950\",\n muted: \"pb:text-gray-600 pb:hover:text-gray-900\",\n teal: \"pb:text-peerbots-darkteal pb:hover:text-teal-950 pb:font-semibold\",\n pink: \"pb:text-rose-800 pb:hover:text-rose-950 pb:font-semibold\",\n primary: \"pb:text-dark-primary pb:hover:text-teal-950 pb:font-semibold\",\n darkteal: \"pb:text-peerbots-darkteal pb:hover:text-teal-950 pb:font-semibold\",\n darkblue: \"pb:text-peerbots-darkblue pb:hover:text-teal-900 pb:font-semibold\",\n danger: \"pb:text-red-700 pb:hover:text-red-900 pb:font-semibold\",\n};\n\nconst underlineClasses = {\n hover: \"pb:hover:underline pb:underline-offset-4 pb:decoration-current\",\n always: \"pb:underline pb:underline-offset-4 pb:decoration-current\",\n none: \"pb:no-underline\",\n};\n\nconst Anchor = React.forwardRef<HTMLAnchorElement, AnchorProps>(\n (\n {\n className,\n href,\n target,\n color = \"default\",\n underline = \"hover\",\n variant = \"default\",\n as: Component = \"a\",\n render,\n children,\n ...props\n },\n ref,\n ) => {\n const commonClass = cn(\n \"pb:transition-colors pb:duration-150 pb:cursor-pointer pb:font-medium pb:inline-flex pb:items-center pb:gap-1\",\n colorClasses[color] || colorClasses.default,\n underlineClasses[underline],\n variant === \"ghost\" && \"pb:px-2 pb:py-1 pb:rounded-lg pb:hover:bg-gray-100\",\n className,\n );\n\n const anchorProps = {\n href,\n target,\n className: commonClass,\n ...props,\n };\n\n if (render) {\n return render(anchorProps);\n }\n\n return (\n <Component ref={ref} {...anchorProps}>\n {children}\n </Component>\n );\n },\n);\n\nAnchor.displayName = \"Anchor\";\n\nexport const Link = Anchor;\nexport { Anchor };\n","import { Button as BaseButton } from \"@base-ui/react\";\nimport React from \"react\";\nimport { cn } from \"../utils\";\nimport {\n ComponentColor,\n FillVariant,\n ComponentSize,\n ComponentRadius,\n} from \"../types\";\n\nexport type ButtonVariant =\n | FillVariant\n | \"primary\"\n | \"secondary\"\n | \"danger\"\n | \"ghostly-danger\"\n | \"marketing-teal\"\n | \"marketing-pink\"\n | \"teal\"\n | \"pink\";\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement | HTMLAnchorElement> {\n /**\n * Visual fill style / treatment or legacy variant.\n * @default \"solid\"\n */\n variant?: ButtonVariant;\n /**\n * Palette color or semantic intent.\n * @default \"primary\"\n */\n color?: ComponentColor;\n /**\n * Button scale / padding.\n * @default \"md\"\n */\n size?: ComponentSize;\n /**\n * Border radius geometry.\n * @default \"md\" (rounded-xl)\n */\n radius?: ComponentRadius;\n /** Loading spinner indicator state */\n isLoading?: boolean;\n /** Icon placed before children */\n leftIcon?: React.ReactNode;\n /** Icon placed after children */\n rightIcon?: React.ReactNode;\n render?: BaseButton.Props[\"render\"];\n nativeButton?: boolean;\n isIconOnly?: boolean;\n href?: string;\n target?: string;\n rel?: string;\n}\n\nconst variantColorMap: Record<FillVariant, Record<string, string>> = {\n solid: {\n primary:\n \"pb:bg-primary pb:text-gray-900 pb:hover:bg-dark-primary pb:hover:text-white pb:shadow-xs pb:font-bold\",\n neutral:\n \"pb:bg-gray-100 pb:text-gray-900 pb:hover:bg-gray-200 pb:border pb:border-gray-300 pb:font-medium\",\n teal: \"pb:bg-peerbots-teal pb:text-gray-900 pb:hover:bg-peerbots-darkteal pb:hover:text-white pb:shadow-md pb:font-bold\",\n pink: \"pb:bg-peerbots-pink pb:text-gray-950 pb:hover:bg-rose-700 pb:hover:text-white pb:shadow-md pb:font-bold\",\n darkblue:\n \"pb:bg-peerbots-darkblue pb:text-white pb:hover:opacity-90 pb:shadow-md pb:font-bold\",\n danger:\n \"pb:bg-red-600 pb:text-white pb:hover:bg-red-700 pb:shadow-xs pb:font-bold\",\n success:\n \"pb:bg-emerald-700 pb:text-white pb:hover:bg-emerald-800 pb:shadow-xs pb:font-bold\",\n warning:\n \"pb:bg-amber-500 pb:text-gray-900 pb:hover:bg-amber-600 pb:shadow-xs pb:font-bold\",\n },\n soft: {\n primary:\n \"pb:bg-primary/20 pb:text-teal-950 pb:hover:bg-primary/30 pb:font-bold\",\n neutral:\n \"pb:bg-gray-100 pb:text-gray-800 pb:hover:bg-gray-200 pb:font-medium\",\n teal: \"pb:bg-peerbots-teal/20 pb:text-teal-950 pb:hover:bg-peerbots-teal/30 pb:font-bold\",\n pink: \"pb:bg-peerbots-pink/20 pb:text-rose-950 pb:hover:bg-peerbots-pink/30 pb:font-bold\",\n darkblue:\n \"pb:bg-peerbots-darkblue/15 pb:text-peerbots-darkblue pb:hover:bg-peerbots-darkblue/25 pb:font-bold\",\n danger:\n \"pb:bg-red-50 pb:text-red-800 pb:hover:bg-red-100 pb:font-bold\",\n success:\n \"pb:bg-emerald-50 pb:text-emerald-800 pb:hover:bg-emerald-100 pb:font-bold\",\n warning:\n \"pb:bg-amber-50 pb:text-amber-900 pb:hover:bg-amber-100 pb:font-bold\",\n },\n outline: {\n primary:\n \"pb:bg-transparent pb:border-2 pb:border-teal-700 pb:text-teal-900 pb:hover:bg-primary/10 pb:font-bold\",\n neutral:\n \"pb:bg-transparent pb:border-2 pb:border-gray-300 pb:text-gray-800 pb:hover:border-gray-400 pb:hover:bg-gray-50 pb:font-medium\",\n teal: \"pb:bg-transparent pb:border-2 pb:border-peerbots-darkteal pb:text-peerbots-darkteal pb:hover:bg-peerbots-teal/10 pb:font-bold\",\n pink: \"pb:bg-transparent pb:border-2 pb:border-rose-700 pb:text-rose-800 pb:hover:bg-peerbots-pink/10 pb:font-bold\",\n darkblue:\n \"pb:bg-transparent pb:border-2 pb:border-peerbots-darkblue pb:text-peerbots-darkblue pb:hover:bg-peerbots-darkblue/10 pb:font-bold\",\n danger:\n \"pb:bg-transparent pb:border-2 pb:border-red-600 pb:text-red-700 pb:hover:bg-red-50 pb:font-bold\",\n success:\n \"pb:bg-transparent pb:border-2 pb:border-emerald-600 pb:text-emerald-700 pb:hover:bg-emerald-50 pb:font-bold\",\n warning:\n \"pb:bg-transparent pb:border-2 pb:border-amber-600 pb:text-amber-900 pb:hover:bg-amber-50 pb:font-bold\",\n },\n ghost: {\n primary:\n \"pb:bg-transparent pb:text-teal-900 pb:hover:bg-primary/10 pb:font-bold\",\n neutral:\n \"pb:bg-transparent pb:text-gray-800 pb:hover:bg-gray-100 pb:hover:text-gray-900 pb:font-medium\",\n teal: \"pb:bg-transparent pb:text-peerbots-darkteal pb:hover:bg-peerbots-teal/10 pb:font-bold\",\n pink: \"pb:bg-transparent pb:text-rose-800 pb:hover:bg-peerbots-pink/10 pb:font-bold\",\n darkblue:\n \"pb:bg-transparent pb:text-peerbots-darkblue pb:hover:bg-peerbots-darkblue/10 pb:font-bold\",\n danger:\n \"pb:bg-transparent pb:text-red-700 pb:hover:bg-red-50 pb:font-bold\",\n success:\n \"pb:bg-transparent pb:text-emerald-700 pb:hover:bg-emerald-50 pb:font-bold\",\n warning:\n \"pb:bg-transparent pb:text-amber-900 pb:hover:bg-amber-50 pb:font-bold\",\n },\n link: {\n primary:\n \"pb:bg-transparent pb:p-0 pb:text-teal-800 pb:hover:underline pb:font-medium\",\n neutral:\n \"pb:bg-transparent pb:p-0 pb:text-gray-700 pb:hover:text-gray-900 pb:hover:underline pb:font-medium\",\n teal: \"pb:bg-transparent pb:p-0 pb:text-peerbots-darkteal pb:hover:underline pb:font-medium\",\n pink: \"pb:bg-transparent pb:p-0 pb:text-rose-800 pb:hover:underline pb:font-medium\",\n darkblue:\n \"pb:bg-transparent pb:p-0 pb:text-peerbots-darkblue pb:hover:underline pb:font-medium\",\n danger:\n \"pb:bg-transparent pb:p-0 pb:text-red-600 pb:hover:underline pb:font-medium\",\n success:\n \"pb:bg-transparent pb:p-0 pb:text-emerald-600 pb:hover:underline pb:font-medium\",\n warning:\n \"pb:bg-transparent pb:p-0 pb:text-amber-600 pb:hover:underline pb:font-medium\",\n },\n};\n\nconst radiusClasses: Record<ComponentRadius, string> = {\n none: \"pb:rounded-none\",\n sm: \"pb:rounded-md\",\n md: \"pb:rounded-xl\",\n lg: \"pb:rounded-2xl\",\n \"2xl\": \"pb:rounded-2xl\",\n pill: \"pb:rounded-full\",\n};\n\nexport const Button = React.forwardRef<\n HTMLButtonElement | HTMLAnchorElement,\n ButtonProps\n>(\n (\n {\n className,\n variant = \"solid\",\n color,\n size = \"md\",\n radius = \"md\",\n isLoading = false,\n leftIcon,\n rightIcon,\n children,\n disabled,\n render,\n nativeButton,\n isIconOnly,\n href,\n target,\n rel,\n ...props\n },\n ref,\n ) => {\n // Resolve legacy variants to orthogonal (FillVariant, ComponentColor, ComponentRadius)\n let resolvedVariant: FillVariant = \"solid\";\n let resolvedColor: ComponentColor = color || \"primary\";\n let resolvedRadius: ComponentRadius = radius;\n\n if (variant === \"secondary\") {\n resolvedVariant = \"solid\";\n resolvedColor = color || \"neutral\";\n } else if (variant === \"danger\") {\n resolvedVariant = \"solid\";\n resolvedColor = color || \"danger\";\n } else if (variant === \"ghostly-danger\") {\n resolvedVariant = \"ghost\";\n resolvedColor = color || \"danger\";\n } else if (variant === \"marketing-teal\" || variant === \"teal\") {\n resolvedVariant = \"solid\";\n resolvedColor = color || \"teal\";\n resolvedRadius = radius === \"md\" ? \"pill\" : radius;\n } else if (variant === \"marketing-pink\" || variant === \"pink\") {\n resolvedVariant = \"solid\";\n resolvedColor = color || \"pink\";\n resolvedRadius = radius === \"md\" ? \"pill\" : radius;\n } else if (\n variant === \"solid\" ||\n variant === \"soft\" ||\n variant === \"outline\" ||\n variant === \"ghost\" ||\n variant === \"link\"\n ) {\n resolvedVariant = variant;\n }\n\n const isActuallyIconOnly =\n isIconOnly || (!children && (!!leftIcon || !!rightIcon));\n\n const sizes: Record<ComponentSize, string> = {\n xs: isActuallyIconOnly\n ? \"pb:p-1 pb:text-xs\"\n : \"pb:px-2.5 pb:py-1 pb:text-xs\",\n sm: isActuallyIconOnly\n ? \"pb:p-1.5 pb:text-xs\"\n : \"pb:px-3.5 pb:py-1.5 pb:text-xs\",\n md: isActuallyIconOnly\n ? \"pb:p-2 pb:text-sm\"\n : \"pb:px-4.5 pb:py-2.5 pb:text-sm\",\n lg: isActuallyIconOnly\n ? \"pb:p-3 pb:text-base\"\n : \"pb:px-6 pb:py-3.5 pb:text-base sm:pb:text-lg\",\n xl: isActuallyIconOnly\n ? \"pb:p-3.5 pb:text-lg\"\n : \"pb:px-8 pb:py-4 pb:text-lg sm:pb:text-xl\",\n };\n\n const variantStyles =\n variantColorMap[resolvedVariant]?.[resolvedColor] ||\n variantColorMap[resolvedVariant]?.primary ||\n variantColorMap.solid.primary;\n\n const commonClasses = cn(\n \"pb:inline-flex pb:items-center pb:justify-center pb:transition-all pb:duration-150 pb:focus:outline-none pb:focus-visible:ring-2 pb:focus-visible:ring-peerbots-teal pb:focus-visible:ring-offset-2 pb:disabled:cursor-not-allowed pb:disabled:opacity-50 pb:cursor-pointer pb:font-medium\",\n radiusClasses[resolvedRadius],\n variantStyles,\n sizes[size],\n className,\n );\n\n const content = (\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 </>\n );\n\n if (href) {\n return (\n <a\n href={href}\n target={target}\n rel={rel}\n className={commonClasses}\n ref={ref as React.Ref<HTMLAnchorElement>}\n {...(props as React.AnchorHTMLAttributes<HTMLAnchorElement>)}\n >\n {content}\n </a>\n );\n }\n\n return (\n <BaseButton\n ref={ref as React.Ref<HTMLButtonElement>}\n render={render}\n nativeButton={nativeButton}\n className={commonClasses}\n disabled={disabled || isLoading}\n {...(props as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n >\n {content}\n </BaseButton>\n );\n },\n);\n\nButton.displayName = \"Button\";\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 \"../foundations/Icon\";\n\nexport interface SelectOption {\n label: string;\n value: string | number;\n}\n\nexport interface SelectProps extends React.AriaAttributes {\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 \"aria-label\": ariaLabel,\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 aria-label={ariaLabel || (typeof placeholder === \"string\" ? placeholder : \"Select an option\")}\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 { Slider as BaseSlider } from \"@base-ui/react\";\nimport { cn } from \"../utils\";\n\nexport interface SliderProps extends React.AriaAttributes {\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 \"aria-label\": ariaLabel,\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\n aria-label={ariaLabel || (name ? name : \"Slider\")}\n 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 />\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 extends React.AriaAttributes {\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 showButtons?: boolean;\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,\n showButtons = false,\n \"aria-label\": ariaLabel,\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 const defaultWidth = showButtons ? \"pb:w-28\" : \"pb:w-20\";\n const widthClass = inputWidth\n ? inputWidth.startsWith(\"pb:\")\n ? inputWidth\n : `pb:${inputWidth}`\n : defaultWidth;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"pb:flex pb:items-center pb:gap-3 pb:w-full pb:min-w-0\",\n className,\n )}\n {...props}\n >\n <div className=\"pb:flex-1 pb:min-w-0\">\n <Slider\n min={min}\n max={max}\n step={step}\n value={value}\n defaultValue={defaultValue}\n disabled={disabled}\n aria-label={ariaLabel ? `${ariaLabel} slider` : \"Slider value\"}\n onChange={handleChange}\n className=\"pb:w-full\"\n />\n </div>\n <div className={cn(widthClass, \"pb:shrink-0\")}>\n <NumberField\n value={value}\n defaultValue={defaultValue}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n aria-label={ariaLabel ? `${ariaLabel} input` : \"Numeric input\"}\n onChange={(val, event) => {\n if (val !== null) {\n handleChange(val, event);\n }\n }}\n showButtons={showButtons}\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 \"../foundations/Icon\";\n\nexport interface NumberFieldProps extends React.AriaAttributes {\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 \"aria-label\": ariaLabel,\n ...props\n },\n ref,\n ) => {\n return (\n <div className=\"pb:w-full\">\n <BaseNumberField.Root\n ref={ref}\n id={propsId}\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 <BaseNumberField.Group\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 placeholder={placeholder}\n aria-label={ariaLabel || (typeof placeholder === \"string\" ? placeholder : \"Number input\")}\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 </BaseNumberField.Group>\n </BaseNumberField.Root>\n </div>\n );\n },\n);\n\nNumberField.displayName = \"NumberField\";\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 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 { Tooltip as BaseTooltip } from \"@base-ui/react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"../foundations/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 { cn } from \"../utils\";\nimport { HelperTooltip } from \"../feedback/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 { 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 { 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 \"../foundations/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 React from \"react\";\nimport { cn } from \"../utils\";\n\nexport type PeerbotsColor =\n | \"Light Blue\"\n | \"Blue\"\n | \"Green\"\n | \"Red\"\n | \"Purple\"\n | \"Pink\"\n | \"Yellow\"\n | \"Orange\"\n | \"Grey\"\n | \"Black\"\n | \"White\";\n\nexport const PEERBOTS_COLOR_MAP: Record<PeerbotsColor, string> = {\n \"Light Blue\": \"#ABE3FA\",\n Blue: \"#5F94D6\",\n Green: \"#65C77D\",\n Red: \"#E6817E\",\n Purple: \"#9B86F3\",\n Pink: \"#EBA4E4\",\n Yellow: \"#F8EDB1\",\n Orange: \"#E6A575\",\n Grey: \"#CECECE\",\n Black: \"#4D4D4D\",\n White: \"#FDFEFE\",\n};\n\nexport const PEERBOTS_FONT_COLOR_MAP: Record<PeerbotsColor, string> = {\n \"Light Blue\": \"#020307\",\n Blue: \"#020307\",\n Green: \"#020307\",\n Red: \"#020307\",\n Purple: \"#020307\",\n Pink: \"#020307\",\n Yellow: \"#020307\",\n Orange: \"#020307\",\n Grey: \"#020307\",\n Black: \"#FDFEFE\",\n White: \"#020307\",\n};\n\nexport interface PeerbotsColorSelectorProps {\n selectedColor?: PeerbotsColor | string;\n onColorSelect: (color: PeerbotsColor) => void;\n colors?: PeerbotsColor[];\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n ariaLabelPrefix?: string;\n}\n\nexport function PeerbotsColorSelector({\n selectedColor,\n onColorSelect,\n colors = Object.keys(PEERBOTS_COLOR_MAP) as PeerbotsColor[],\n size = \"md\",\n className,\n ariaLabelPrefix = \"Select color\",\n}: PeerbotsColorSelectorProps) {\n const sizeClasses = {\n sm: \"pb:h-6 pb:w-6\",\n md: \"pb:h-8 pb:w-8\",\n lg: \"pb:h-10 pb:w-10\",\n };\n\n return (\n <div\n role=\"radiogroup\"\n aria-label=\"Color selector\"\n className={cn(\n \"pb:inline-flex pb:flex-wrap pb:gap-1 pb:items-center\",\n className,\n )}\n >\n {colors.map((colorName) => {\n const isSelected = selectedColor === colorName;\n return (\n <button\n key={colorName}\n type=\"button\"\n role=\"radio\"\n aria-checked={isSelected}\n aria-label={`${ariaLabelPrefix} ${colorName}`}\n className={cn(\n \"pb:rounded-full pb:cursor-pointer pb:border pb:transition-all pb:duration-150 pb:focus-visible:ring-2 pb:focus-visible:ring-gray-400 pb:focus-visible:outline-none\",\n sizeClasses[size],\n isSelected\n ? \"pb:border-2 pb:border-black pb:scale-110 pb:shadow-sm\"\n : \"pb:border-gray-300 pb:hover:border-gray-500 pb:hover:scale-105\",\n )}\n style={{ background: PEERBOTS_COLOR_MAP[colorName] || colorName }}\n onClick={() => onColorSelect(colorName)}\n />\n );\n })}\n </div>\n );\n}\n","import React, { useState } from \"react\";\nimport { cn } from \"../utils\";\nimport { ComponentColor, ComponentRadius, ComponentSize, FillVariant } from \"../types\";\n\nexport interface ChipOption<T = string> {\n value: T;\n label: React.ReactNode;\n badge?: React.ReactNode;\n disabled?: boolean;\n icon?: React.ReactNode;\n}\n\nexport interface ChipGroupProps<T = string> {\n /** Array of selectable chip options */\n options: ChipOption<T>[];\n /** Controlled single selected value */\n value?: T;\n /** Uncontrolled initial single selected value */\n defaultValue?: T;\n /** Callback fired when single selection changes */\n onChange?: (value: T) => void;\n /** Enable multiple selection mode */\n multiple?: boolean;\n /** Controlled array of selected values (for multi mode) */\n values?: T[];\n /** Uncontrolled initial array of selected values (for multi mode) */\n defaultValues?: T[];\n /** Callback fired when multiple selection changes */\n onMultipleChange?: (values: T[]) => void;\n /** Color theme */\n color?: ComponentColor;\n /** Visual fill style */\n variant?: \"solid\" | \"soft\" | \"outline\";\n /** Size scale */\n size?: ComponentSize;\n /** Border radius scale */\n radius?: ComponentRadius;\n /** Enable horizontal scrollable rail */\n scrollable?: boolean;\n className?: string;\n id?: string;\n name?: string;\n}\n\nconst activeColorStyles: Record<string, Record<string, string>> = {\n solid: {\n primary:\n \"pb:bg-primary pb:text-gray-900 pb:border-primary pb:shadow-sm pb:font-bold\",\n teal: \"pb:bg-peerbots-teal pb:text-gray-900 pb:border-peerbots-teal pb:shadow-sm pb:font-bold\",\n pink: \"pb:bg-rose-700 pb:text-white pb:border-rose-700 pb:shadow-sm pb:font-bold\",\n darkblue:\n \"pb:bg-peerbots-darkblue pb:text-white pb:border-peerbots-darkblue pb:shadow-sm pb:font-bold\",\n neutral:\n \"pb:bg-gray-800 pb:text-white pb:border-gray-800 pb:shadow-sm pb:font-bold\",\n danger: \"pb:bg-red-600 pb:text-white pb:border-red-600 pb:shadow-sm pb:font-bold\",\n },\n soft: {\n primary:\n \"pb:bg-primary/20 pb:text-teal-950 pb:border-primary/40 pb:font-bold\",\n teal: \"pb:bg-peerbots-teal/20 pb:text-teal-950 pb:border-peerbots-teal/40 pb:font-bold\",\n pink: \"pb:bg-peerbots-pink/20 pb:text-rose-950 pb:border-peerbots-pink/40 pb:font-bold\",\n darkblue:\n \"pb:bg-peerbots-darkblue/20 pb:text-peerbots-darkblue pb:border-peerbots-darkblue/40 pb:font-bold\",\n neutral:\n \"pb:bg-gray-200 pb:text-gray-900 pb:border-gray-300 pb:font-bold\",\n danger: \"pb:bg-red-100 pb:text-red-900 pb:border-red-300 pb:font-bold\",\n },\n outline: {\n primary:\n \"pb:bg-primary/10 pb:text-teal-950 pb:border-teal-700 pb:font-bold pb:border-2\",\n teal: \"pb:bg-peerbots-teal/10 pb:text-peerbots-darkteal pb:border-peerbots-darkteal pb:font-bold pb:border-2\",\n pink: \"pb:bg-peerbots-pink/10 pb:text-rose-800 pb:border-rose-700 pb:font-bold pb:border-2\",\n darkblue:\n \"pb:bg-peerbots-darkblue/10 pb:text-peerbots-darkblue pb:border-peerbots-darkblue pb:font-bold pb:border-2\",\n neutral:\n \"pb:bg-gray-100 pb:text-gray-900 pb:border-gray-400 pb:font-bold pb:border-2\",\n danger: \"pb:bg-red-50 pb:text-red-900 pb:border-red-500 pb:font-bold pb:border-2\",\n },\n};\n\nconst inactiveStyles =\n \"pb:bg-white pb:text-gray-700 pb:border-gray-300 pb:hover:border-gray-400 pb:hover:bg-gray-50 pb:hover:text-gray-950\";\n\nconst radiusClasses: Record<ComponentRadius, string> = {\n none: \"pb:rounded-none\",\n sm: \"pb:rounded-md\",\n md: \"pb:rounded-xl\",\n lg: \"pb:rounded-2xl\",\n \"2xl\": \"pb:rounded-2xl\",\n pill: \"pb:rounded-full\",\n};\n\nconst sizeClasses: Record<ComponentSize, { chip: string; text: string; badge: string }> = {\n xs: {\n chip: \"pb:px-2 pb:py-0.5 pb:gap-1\",\n text: \"pb:text-[10px]\",\n badge: \"pb:text-[8px] pb:px-1 pb:py-0.5\",\n },\n sm: {\n chip: \"pb:px-3 pb:py-1 pb:gap-1.5\",\n text: \"pb:text-xs\",\n badge: \"pb:text-[9px] pb:px-1.5 pb:py-0.5\",\n },\n md: {\n chip: \"pb:px-3.5 pb:py-1.5 pb:gap-2\",\n text: \"pb:text-sm\",\n badge: \"pb:text-[10px] pb:px-1.5 pb:py-0.5\",\n },\n lg: {\n chip: \"pb:px-4.5 pb:py-2 pb:gap-2.5\",\n text: \"pb:text-base\",\n badge: \"pb:text-xs pb:px-2 pb:py-0.5\",\n },\n xl: {\n chip: \"pb:px-6 pb:py-2.5 pb:gap-3\",\n text: \"pb:text-lg\",\n badge: \"pb:text-xs pb:px-2.5 pb:py-1\",\n },\n};\n\nexport function ChipGroup<T = string>({\n options,\n value: controlledValue,\n defaultValue,\n onChange,\n multiple = false,\n values: controlledValues,\n defaultValues,\n onMultipleChange,\n color = \"teal\",\n variant = \"soft\",\n size = \"md\",\n radius = \"pill\",\n scrollable = false,\n className,\n id,\n name,\n}: ChipGroupProps<T>) {\n const [internalValue, setInternalValue] = useState<T | undefined>(\n defaultValue !== undefined ? defaultValue : options[0]?.value,\n );\n const [internalValues, setInternalValues] = useState<T[]>(\n defaultValues || [],\n );\n\n const activeValue = controlledValue !== undefined ? controlledValue : internalValue;\n const activeValues = controlledValues !== undefined ? controlledValues : internalValues;\n\n const handleSelect = (optionValue: T, disabled?: boolean) => {\n if (disabled) return;\n\n if (multiple) {\n const exists = activeValues.includes(optionValue);\n const nextValues = exists\n ? activeValues.filter((v) => v !== optionValue)\n : [...activeValues, optionValue];\n\n if (controlledValues === undefined) {\n setInternalValues(nextValues);\n }\n onMultipleChange?.(nextValues);\n } else {\n if (controlledValue === undefined) {\n setInternalValue(optionValue);\n }\n onChange?.(optionValue);\n }\n };\n\n const activeStyle =\n activeColorStyles[variant]?.[color] ||\n activeColorStyles[variant]?.teal ||\n activeColorStyles.soft.teal;\n\n const currentSize = sizeClasses[size] || sizeClasses.md;\n\n return (\n <div\n id={id}\n role={multiple ? \"group\" : \"radiogroup\"}\n aria-label={name}\n className={cn(\n \"pb:flex pb:items-center pb:gap-2 pb:box-border\",\n scrollable\n ? \"pb:overflow-x-auto pb:no-scrollbar pb:py-1 pb:px-0.5\"\n : \"pb:flex-wrap\",\n className,\n )}\n >\n {options.map((option, idx) => {\n const isSelected = multiple\n ? activeValues.includes(option.value)\n : activeValue === option.value;\n\n return (\n <button\n key={idx}\n type=\"button\"\n role={multiple ? \"checkbox\" : \"radio\"}\n aria-checked={isSelected}\n disabled={option.disabled}\n onClick={() => handleSelect(option.value, option.disabled)}\n className={cn(\n \"pb:inline-flex pb:items-center pb:border pb:font-medium pb:transition-all pb:duration-150 pb:cursor-pointer pb:select-none pb:shrink-0 pb:focus:outline-none pb:focus-visible:ring-2 pb:focus-visible:ring-peerbots-teal pb:focus-visible:ring-offset-1\",\n radiusClasses[radius] || radiusClasses.pill,\n currentSize.chip,\n currentSize.text,\n isSelected ? activeStyle : inactiveStyles,\n option.disabled &&\n \"pb:opacity-40 pb:cursor-not-allowed pb:bg-gray-100 pb:text-gray-400 pb:border-gray-200\",\n )}\n >\n {option.icon && (\n <span className=\"pb:shrink-0 pb:flex pb:items-center\">\n {option.icon}\n </span>\n )}\n\n <span>{option.label}</span>\n\n {option.badge && (\n <span\n className={cn(\n \"pb:rounded-full pb:font-bold pb:leading-none pb:tracking-tight\",\n currentSize.badge,\n isSelected\n ? \"pb:bg-black/15 pb:text-current\"\n : \"pb:bg-gray-200 pb:text-gray-800\",\n )}\n >\n {option.badge}\n </span>\n )}\n </button>\n );\n })}\n </div>\n );\n}\n","import React from \"react\";\nimport { cn } from \"../utils\";\nimport { ComponentSize, ComponentRadius, SurfaceVariant } from \"../types\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n /**\n * Surface treatment / fill style.\n * @default \"surface\"\n */\n variant?: SurfaceVariant | \"default\" | \"elevated\";\n /**\n * Background color tinting.\n * @default \"default\"\n */\n color?: \"default\" | \"teal\" | \"pink\";\n /**\n * Card padding scale.\n * @default \"md\"\n */\n padding?: \"none\" | ComponentSize;\n /**\n * Border radius scale.\n * @default \"2xl\"\n */\n radius?: ComponentRadius;\n /** Whether the card shows interactive hover elevation */\n hoverable?: boolean;\n id?: string;\n as?: React.ElementType;\n href?: string;\n target?: string;\n rel?: string;\n}\n\nconst variantStyles: Record<string, string> = {\n surface: \"pb:bg-white pb:border pb:border-gray-200 pb:shadow-md\",\n elevated: \"pb:bg-white pb:border pb:border-gray-200 pb:shadow-md\",\n default: \"pb:bg-white pb:border pb:border-gray-200 pb:shadow-xs\",\n glass:\n \"pb:bg-white/90 pb:backdrop-blur-xl pb:border pb:border-white/40 pb:shadow-xl\",\n flat: \"pb:bg-gray-50/80 pb:border pb:border-gray-200\",\n outline: \"pb:bg-transparent pb:border-2 pb:border-gray-300\",\n};\n\nconst tintStyles: Record<string, string> = {\n default: \"\",\n teal: \"pb:bg-peerbots-teal/5 pb:border pb:border-peerbots-darkteal/30\",\n pink: \"pb:bg-peerbots-pink/5 pb:border pb:border-rose-300\",\n};\n\nconst radiusClasses: Record<ComponentRadius, string> = {\n none: \"pb:rounded-none\",\n sm: \"pb:rounded-md\",\n md: \"pb:rounded-xl\",\n lg: \"pb:rounded-2xl\",\n \"2xl\": \"pb:rounded-2xl\",\n pill: \"pb:rounded-full\",\n};\n\nconst paddingClasses: Record<string, string> = {\n none: \"\",\n xs: \"pb:p-2.5\",\n sm: \"pb:p-4\",\n md: \"pb:p-6 sm:pb:p-8\",\n lg: \"pb:p-8 sm:pb:p-10 md:pb:p-12\",\n xl: \"pb:p-10 sm:pb:p-12 md:pb:p-16\",\n};\n\nexport const Card = React.forwardRef<HTMLElement, CardProps>(\n (\n {\n children,\n className,\n variant = \"surface\",\n color = \"default\",\n padding = \"md\",\n radius = \"2xl\",\n hoverable = true,\n id,\n as: Component = \"div\",\n href,\n target,\n rel,\n ...rest\n },\n ref,\n ) => {\n const baseStyles = \"pb:overflow-hidden pb:transition-all pb:duration-300\";\n\n const hoverStyles = hoverable\n ? \"pb:hover:shadow-lg pb:hover:-translate-y-0.5 pb:hover:border-peerbots-teal/30 pb:focus-within:ring-2 pb:focus-within:ring-peerbots-teal\"\n : \"\";\n\n const isLink = Boolean(href) || Component === \"a\";\n const TargetTag = href ? \"a\" : Component;\n\n return (\n <TargetTag\n id={id}\n href={href}\n target={target}\n rel={rel}\n ref={ref as any}\n className={cn(\n baseStyles,\n radiusClasses[radius] || radiusClasses[\"2xl\"],\n color === \"default\"\n ? variantStyles[variant] || variantStyles.surface\n : tintStyles[color],\n hoverStyles,\n paddingClasses[padding] || paddingClasses.md,\n isLink && \"pb:cursor-pointer pb:block\",\n className,\n )}\n {...(rest as any)}\n >\n {children}\n </TargetTag>\n );\n },\n);\n\nCard.displayName = \"Card\";\n","import React, { useState, useId } from \"react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"../foundations/Icon\";\nimport { Text } from \"../foundations/Typography\";\n\nexport interface AccordionItem {\n id?: string;\n question?: React.ReactNode;\n title?: React.ReactNode;\n answer?: React.ReactNode;\n content?: React.ReactNode;\n description?: React.ReactNode;\n bodyHtml?: string;\n isOpenDefault?: boolean;\n}\n\nexport interface AccordionProps {\n /** List of accordion items for multi-item list mode */\n items?: AccordionItem[];\n /** Allow multiple items to be opened simultaneously */\n allowMultiple?: boolean;\n /** Visual style variant */\n variant?: \"default\" | \"bordered\" | \"flat\";\n /** Single-item mode: title for the disclosure */\n title?: React.ReactNode;\n /** Single-item mode: content/children for the disclosure */\n children?: React.ReactNode;\n /** Single-item mode: default open state */\n defaultOpen?: boolean;\n /** Controlled open state for single-item mode */\n isOpen?: boolean;\n /** Controlled toggle callback for single-item mode */\n onToggle?: (open: boolean) => void;\n className?: string;\n headerClassName?: string;\n contentClassName?: string;\n}\n\nexport const Accordion: React.FC<AccordionProps> = ({\n items,\n allowMultiple = false,\n variant = \"default\",\n title,\n children,\n defaultOpen = false,\n isOpen: controlledIsOpen,\n onToggle,\n className,\n headerClassName,\n contentClassName,\n}) => {\n const baseId = useId();\n\n // Normalize single-item props vs items array\n const resolvedItems: AccordionItem[] =\n items ||\n (title || children\n ? [\n {\n id: \"single\",\n title,\n content: children,\n isOpenDefault: defaultOpen,\n },\n ]\n : []);\n\n const [openIndices, setOpenIndices] = useState<number[]>(() => {\n const initial: number[] = [];\n resolvedItems.forEach((item, index) => {\n if (item.isOpenDefault || (index === 0 && defaultOpen)) {\n initial.push(index);\n }\n });\n return initial;\n });\n\n const toggleItem = (index: number) => {\n const isCurrentlyOpen =\n controlledIsOpen !== undefined && resolvedItems.length === 1\n ? controlledIsOpen\n : openIndices.includes(index);\n const willBeOpen = !isCurrentlyOpen;\n\n if (onToggle && resolvedItems.length === 1) {\n onToggle(willBeOpen);\n }\n\n if (controlledIsOpen === undefined) {\n if (allowMultiple) {\n setOpenIndices((prev) =>\n prev.includes(index)\n ? prev.filter((i) => i !== index)\n : [...prev, index],\n );\n } else {\n setOpenIndices((prev) => (prev.includes(index) ? [] : [index]));\n }\n }\n };\n\n return (\n <div className={cn(\"pb:w-full pb:space-y-3 pb:box-border\", className)}>\n {resolvedItems.map((item, index) => {\n const isOpen =\n controlledIsOpen !== undefined && resolvedItems.length === 1\n ? controlledIsOpen\n : openIndices.includes(index);\n\n const headingContent =\n item.question || item.title || `Section ${index + 1}`;\n const bodyContent =\n item.content || item.answer || item.description;\n\n const headerId = `${baseId}-header-${index}`;\n const panelId = `${baseId}-panel-${index}`;\n\n return (\n <div\n key={item.id || index}\n className={cn(\n \"pb:w-full pb:rounded-2xl pb:border pb:transition-all pb:duration-300 pb:overflow-hidden pb:box-border\",\n isOpen\n ? \"pb:bg-white pb:border-peerbots-teal/40 pb:shadow-xs\"\n : \"pb:bg-white/80 pb:hover:bg-white pb:border-gray-200/80\",\n variant === \"bordered\" && \"pb:border-2\",\n variant === \"flat\" && \"pb:border-none pb:bg-gray-100\",\n )}\n >\n <div className=\"pb:w-full pb:m-0 pb:p-0\">\n <button\n type=\"button\"\n id={headerId}\n aria-expanded={isOpen}\n aria-controls={panelId}\n onClick={() => toggleItem(index)}\n className={cn(\n \"pb:w-full pb:box-border pb:px-5 pb:py-4 sm:pb:px-6 sm:pb:py-4.5 pb:text-left pb:flex pb:items-center pb:justify-between pb:gap-4 pb:font-bold pb:text-gray-900 pb:hover:text-peerbots-darkteal pb:transition-colors pb:focus:outline-none pb:focus-visible:ring-2 pb:focus-visible:ring-peerbots-teal pb:cursor-pointer\",\n headerClassName,\n )}\n >\n <div className=\"pb:text-base sm:pb:text-lg pb:font-bold pb:leading-snug pb:flex-1 pb:min-w-0\">\n {typeof headingContent === \"string\" ? (\n <span>{headingContent}</span>\n ) : (\n headingContent\n )}\n </div>\n <span\n className={cn(\n \"pb:w-7 pb:h-7 pb:rounded-full pb:flex pb:items-center pb:justify-center pb:flex-shrink-0 pb:transition-transform pb:duration-300 pb:ease-in-out\",\n isOpen\n ? \"pb:bg-peerbots-teal pb:text-white pb:rotate-180\"\n : \"pb:bg-gray-100 pb:text-gray-600\",\n )}\n aria-hidden=\"true\"\n >\n <Icon\n name=\"chevronDownSmall\"\n className=\"pb:w-4 pb:h-4\"\n />\n </span>\n </button>\n </div>\n\n {/* Smooth animated expand / collapse container */}\n <div\n id={panelId}\n role=\"region\"\n aria-labelledby={headerId}\n className={cn(\n \"pb:grid pb:transition-all pb:duration-300 pb:ease-in-out\",\n isOpen\n ? \"pb:grid-rows-[1fr] pb:opacity-100\"\n : \"pb:grid-rows-[0fr] pb:opacity-0\",\n )}\n >\n <div className=\"pb:overflow-hidden\">\n <div\n className={cn(\n \"pb:w-full pb:box-border pb:px-5 pb:pb-5 pb:pt-2 sm:pb:px-6 pb:text-gray-700 pb:leading-relaxed pb:border-t pb:border-gray-100\",\n contentClassName,\n )}\n >\n {item.bodyHtml ? (\n <div\n className=\"pb:text-base pb:leading-relaxed\"\n dangerouslySetInnerHTML={{ __html: item.bodyHtml }}\n />\n ) : typeof bodyContent === \"string\" ? (\n <Text className=\"pb:text-base pb:text-gray-700 pb:leading-relaxed\">\n {bodyContent}\n </Text>\n ) : (\n bodyContent\n )}\n </div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n","import React, { useState } from \"react\";\nimport { Accordion } from \"./Accordion\";\nimport { ButtonProps } from \"../forms/Button\";\n\nexport interface CollapsibleProps {\n title: React.ReactNode;\n children: React.ReactNode;\n /** The variant of the trigger or panel */\n variant?: ButtonProps[\"variant\"] | \"default\" | \"bordered\" | \"flat\";\n /** The size of the trigger button */\n size?: ButtonProps[\"size\"];\n defaultOpen?: boolean;\n isOpen?: boolean;\n onToggle?: (open: boolean) => void;\n className?: string;\n}\n\nexport function Collapsible({\n title,\n children,\n variant = \"default\",\n defaultOpen = false,\n isOpen: controlledIsOpen,\n onToggle,\n className,\n}: CollapsibleProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isOpen = controlledIsOpen !== undefined ? controlledIsOpen : internalOpen;\n\n const handleToggle = (nextOpen: boolean) => {\n if (controlledIsOpen === undefined) {\n setInternalOpen(nextOpen);\n }\n if (onToggle) {\n onToggle(nextOpen);\n }\n };\n\n const accordionVariant =\n variant === \"bordered\" || variant === \"flat\" ? variant : \"default\";\n\n return (\n <Accordion\n variant={accordionVariant}\n title={title}\n isOpen={isOpen}\n onToggle={handleToggle}\n defaultOpen={defaultOpen}\n className={className}\n >\n {children}\n </Accordion>\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 { ReactNode } from \"react\";\nimport { Heading } from \"../foundations/Typography\";\nimport { cn } from \"../utils\";\nimport { Card } from \"./Card\";\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 * Built on top of Card and Collapsible for design system consistency.\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 pb:gap-3\", contentClassName)}>\n {children}\n </div>\n );\n\n if (collapsible) {\n return (\n <div className={cn(\"pb:w-full pb:mb-3\", className)}>\n <Collapsible\n title={\n typeof title === \"string\" ? (\n <Heading level={headingLevel} className=\"pb:text-gray-800 pb:font-bold\">\n {title}\n </Heading>\n ) : (\n title\n )\n }\n defaultOpen={defaultOpen}\n >\n {content}\n </Collapsible>\n </div>\n );\n }\n\n return (\n <Card\n variant=\"elevated\"\n padding=\"sm\"\n hoverable={false}\n className={cn(\"pb:w-full pb:mb-3 pb:flex pb:flex-col\", className)}\n >\n {title && (\n <div className=\"pb:flex pb:items-center pb:justify-between pb:mb-3 pb:pb-2 pb:border-b pb:border-gray-100 empty:hidden\">\n {typeof title === \"string\" ? (\n <Heading level={headingLevel} className=\"pb:text-gray-800 pb:font-bold\">\n {title}\n </Heading>\n ) : (\n title\n )}\n </div>\n )}\n {content}\n </Card>\n );\n}\n","import React, { useState } from \"react\";\nimport { Icon } from \"../foundations/Icon\";\nimport { cn } from \"../utils\";\n\nexport interface AvatarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Image source URL. */\n src?: string | null;\n /** Full name of the user, maker, or robot. Used to generate initials and accessible label. */\n name?: string;\n /** Accessible alt text for the avatar image. Defaults to `name` or `\"Avatar\"`. */\n alt?: string;\n /** Size variant. Defaults to `\"md\"`. */\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n /** Shape of the avatar. Defaults to `\"circle\"`. */\n shape?: \"circle\" | \"rounded\";\n /** Custom fallback icon if no image or initials are available. */\n fallbackIcon?: React.ReactNode;\n}\n\nfunction getInitials(name?: string): string {\n if (!name) return \"\";\n const trimmed = name.trim();\n if (!trimmed) return \"\";\n const parts = trimmed.split(/\\s+/);\n if (parts.length === 1) {\n return parts[0].substring(0, 2).toUpperCase();\n }\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n}\n\nconst colorTints = [\n \"pb:bg-teal-100 pb:text-teal-900 pb:border-teal-200\",\n \"pb:bg-blue-100 pb:text-blue-900 pb:border-blue-200\",\n \"pb:bg-purple-100 pb:text-purple-900 pb:border-purple-200\",\n \"pb:bg-amber-100 pb:text-amber-900 pb:border-amber-200\",\n \"pb:bg-rose-100 pb:text-rose-900 pb:border-rose-200\",\n \"pb:bg-emerald-100 pb:text-emerald-900 pb:border-emerald-200\",\n];\n\nfunction getHashColor(name?: string): string {\n if (!name) return colorTints[0];\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\n }\n const index = Math.abs(hash) % colorTints.length;\n return colorTints[index];\n}\n\nexport const Avatar = React.forwardRef<HTMLDivElement, AvatarProps>(\n (\n {\n src,\n name,\n alt,\n size = \"md\",\n shape = \"circle\",\n fallbackIcon,\n className,\n ...props\n },\n ref,\n ) => {\n const [imgError, setImgError] = useState(false);\n const initials = getInitials(name);\n const accessibleAlt = alt || name || \"Avatar\";\n\n const sizeStyles = {\n xs: \"pb:w-6 pb:h-6 pb:text-[10px]\",\n sm: \"pb:w-8 pb:h-8 pb:text-xs\",\n md: \"pb:w-10 pb:h-10 pb:text-sm\",\n lg: \"pb:w-12 pb:h-12 pb:text-base\",\n xl: \"pb:w-16 pb:h-16 pb:text-xl\",\n };\n\n const iconSizeStyles = {\n xs: \"pb:w-3.5 pb:h-3.5\",\n sm: \"pb:w-4 pb:h-4\",\n md: \"pb:w-5 pb:h-5\",\n lg: \"pb:w-6 pb:h-6\",\n xl: \"pb:w-8 pb:h-8\",\n };\n\n const shapeStyle = shape === \"circle\" ? \"pb:rounded-full\" : \"pb:rounded-xl\";\n const colorStyle = getHashColor(name);\n\n const hasValidImage = Boolean(src && !imgError);\n\n return (\n <div\n ref={ref}\n role=\"img\"\n aria-label={accessibleAlt}\n className={cn(\n \"pb:relative pb:inline-flex pb:items-center pb:justify-center pb:shrink-0 pb:overflow-hidden pb:border pb:font-bold pb:select-none\",\n sizeStyles[size],\n shapeStyle,\n !hasValidImage && colorStyle,\n className,\n )}\n {...props}\n >\n {hasValidImage ? (\n <img\n src={src!}\n alt={accessibleAlt}\n onError={() => setImgError(true)}\n className=\"pb:w-full pb:h-full pb:object-cover\"\n />\n ) : initials ? (\n <span className=\"pb:tracking-wider\">{initials}</span>\n ) : (\n <span className={cn(\"pb:flex pb:items-center pb:justify-center\", iconSizeStyles[size])}>\n {fallbackIcon || <Icon name=\"userCircle\" className=\"pb:w-full pb:h-full\" />}\n </span>\n )}\n </div>\n );\n },\n);\n\nAvatar.displayName = \"Avatar\";\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { Button } from \"../forms/Button\";\nimport { Icon } from \"../foundations/Icon\";\nimport { cn } from \"../utils\";\n\nexport interface DropzoneProps {\n /** Accepted MIME types or extensions (e.g. `\"image/*\"`, `\"video/*\"`, `\".zip\"`). */\n accept?: string;\n /** Maximum file size allowed in Megabytes (MB). */\n maxSizeMB?: number;\n /** Whether the dropzone is disabled. */\n disabled?: boolean;\n /**\n * Optional controlled URL or data URL of an uploaded file to display in preview mode.\n * If not provided, Dropzone will automatically generate and display a preview for selected images/videos.\n */\n previewUrl?: string | null;\n /** Optional controlled File object. */\n value?: File | null;\n /** Whether to automatically show a preview when an image/video is selected. Default is `true`. */\n showPreview?: boolean;\n /** How to render the preview. Default is `\"auto\"`. */\n previewType?: \"image\" | \"video\" | \"auto\";\n /** Main callout title. Default is `\"Click or drag file to upload\"`. */\n title?: React.ReactNode;\n /** Subtitle or requirement text. Default is `\"Supported formats: PNG, JPG, WEBP, MP4\"`. */\n subtitle?: React.ReactNode;\n /** Custom icon for the dropzone idle state. */\n icon?: React.ReactNode;\n /** Callback fired when a valid file is dropped or selected. */\n onFileSelect?: (file: File) => void;\n /** Callback fired when the active file/preview is cleared. */\n onFileRemove?: () => void;\n /** Callback fired when a file exceeds size limit or validation fails. */\n onError?: (errorMessage: string) => void;\n /** Optional custom CSS classes for the root dropzone container. */\n className?: string;\n id?: string;\n name?: string;\n}\n\nexport const Dropzone = React.forwardRef<HTMLDivElement, DropzoneProps>(\n (\n {\n accept,\n maxSizeMB,\n disabled = false,\n previewUrl: controlledPreviewUrl,\n value,\n showPreview = true,\n previewType = \"auto\",\n title = \"Click or drag file to upload\",\n subtitle,\n icon,\n onFileSelect,\n onFileRemove,\n onError,\n className,\n id,\n name,\n },\n ref,\n ) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [isDragging, setIsDragging] = useState(false);\n const [internalPreviewUrl, setInternalPreviewUrl] = useState<string | null>(null);\n const [internalPreviewType, setInternalPreviewType] = useState<\"image\" | \"video\">(\"image\");\n const [imageLoadError, setImageLoadError] = useState(false);\n const generatedUrlRef = useRef<string | null>(null);\n\n // Sync value file prop to preview if passed\n useEffect(() => {\n if (value && showPreview) {\n if (generatedUrlRef.current) {\n URL.revokeObjectURL(generatedUrlRef.current);\n }\n const isVid = value.type.startsWith(\"video/\");\n const url = URL.createObjectURL(value);\n generatedUrlRef.current = url;\n setInternalPreviewUrl(url);\n setInternalPreviewType(isVid ? \"video\" : \"image\");\n setImageLoadError(false);\n }\n }, [value, showPreview]);\n\n // Clean up created object URLs on unmount\n useEffect(() => {\n return () => {\n if (generatedUrlRef.current) {\n URL.revokeObjectURL(generatedUrlRef.current);\n }\n };\n }, []);\n\n const activePreviewUrl =\n controlledPreviewUrl !== undefined\n ? controlledPreviewUrl\n : internalPreviewUrl;\n\n const handleFile = (file: File) => {\n if (disabled) return;\n\n if (maxSizeMB) {\n const fileMB = file.size / (1024 * 1024);\n if (fileMB > maxSizeMB) {\n const msg = `File \"${file.name}\" (${fileMB.toFixed(1)} MB) exceeds maximum allowed size of ${maxSizeMB} MB.`;\n onError?.(msg);\n if (inputRef.current) inputRef.current.value = \"\";\n return;\n }\n }\n\n // Generate internal preview if enabled and not strictly controlled\n if (showPreview) {\n const isImg = file.type.startsWith(\"image/\");\n const isVid = file.type.startsWith(\"video/\");\n if (isImg || isVid) {\n if (generatedUrlRef.current) {\n URL.revokeObjectURL(generatedUrlRef.current);\n }\n const url = URL.createObjectURL(file);\n generatedUrlRef.current = url;\n setInternalPreviewUrl(url);\n setInternalPreviewType(isVid ? \"video\" : \"image\");\n setImageLoadError(false);\n }\n }\n\n onFileSelect?.(file);\n };\n\n const handleDragEnter = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (disabled) return;\n setIsDragging(true);\n };\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (disabled) return;\n setIsDragging(true);\n };\n\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n };\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n if (disabled) return;\n\n const file = e.dataTransfer.files?.[0];\n if (file) {\n handleFile(file);\n }\n };\n\n const handleClick = () => {\n if (disabled) return;\n inputRef.current?.click();\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file) {\n handleFile(file);\n }\n };\n\n const handleRemove = (e?: React.MouseEvent) => {\n e?.stopPropagation();\n if (generatedUrlRef.current) {\n URL.revokeObjectURL(generatedUrlRef.current);\n generatedUrlRef.current = null;\n }\n setInternalPreviewUrl(null);\n setImageLoadError(false);\n if (inputRef.current) inputRef.current.value = \"\";\n onFileRemove?.();\n };\n\n const isVideo =\n previewType === \"video\" ||\n (previewType === \"auto\" &&\n (internalPreviewType === \"video\" ||\n (activePreviewUrl &&\n (activePreviewUrl.includes(\".mp4\") ||\n activePreviewUrl.includes(\".mov\") ||\n activePreviewUrl.includes(\".webm\") ||\n activePreviewUrl.startsWith(\"data:video/\")))));\n\n const hasPreview = Boolean(showPreview && activePreviewUrl);\n\n return (\n <div\n ref={ref}\n className={cn(\n \"pb:relative pb:w-full pb:rounded-2xl pb:border-2 pb:border-dashed pb:transition-all pb:overflow-hidden\",\n isDragging\n ? \"pb:border-primary pb:bg-primary/10\"\n : \"pb:border-gray-300 pb:hover:border-primary/80 pb:bg-gray-50/70 pb:hover:bg-gray-50\",\n disabled && \"pb:bg-gray-100/90 pb:border-gray-300 pb:cursor-not-allowed pb:hover:border-gray-300\",\n className,\n )}\n onDragEnter={handleDragEnter}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n <input\n ref={inputRef}\n type=\"file\"\n id={id}\n name={name}\n accept={accept}\n disabled={disabled}\n onChange={handleInputChange}\n className=\"pb:hidden\"\n tabIndex={-1}\n />\n\n {/* Dragging Overlay when in preview mode */}\n {isDragging && hasPreview && (\n <div className=\"pb:absolute pb:inset-0 pb:z-20 pb:bg-primary/20 pb:backdrop-blur-xs pb:flex pb:flex-col pb:items-center pb:justify-center pb:gap-2\">\n <div className=\"pb:w-10 pb:h-10 pb:rounded-full pb:bg-primary pb:text-slate-950 pb:flex pb:items-center pb:justify-center pb:shadow-md\">\n <Icon name=\"arrowDownTray\" className=\"pb:w-5 pb:h-5\" />\n </div>\n <p className=\"pb:text-xs pb:font-bold pb:text-gray-900\">Drop file to replace</p>\n </div>\n )}\n\n {hasPreview ? (\n <div className=\"pb:p-4 pb:space-y-3\">\n <div\n onClick={handleClick}\n className=\"pb:relative pb:w-full pb:h-56 pb:overflow-hidden pb:rounded-xl pb:bg-gray-900 pb:flex pb:items-center pb:justify-center pb:cursor-pointer pb:group\"\n title=\"Click to change file\"\n >\n {isVideo ? (\n <video\n src={activePreviewUrl!}\n controls\n className=\"pb:w-full pb:h-full pb:object-contain\"\n />\n ) : imageLoadError ? (\n <div className=\"pb:p-6 pb:text-center pb:text-gray-400 pb:space-y-2\">\n <Icon name=\"xCircle\" className=\"pb:w-8 pb:h-8 pb:mx-auto pb:text-red-400\" />\n <p className=\"pb:text-xs pb:font-medium\">Failed to load image preview</p>\n </div>\n ) : (\n <img\n src={activePreviewUrl!}\n alt=\"File preview\"\n onError={() => setImageLoadError(true)}\n className=\"pb:w-full pb:h-full pb:object-contain pb:group-hover:scale-102 pb:transition-transform\"\n />\n )}\n\n {/* Hover overlay hint */}\n <div className=\"pb:absolute pb:inset-0 pb:bg-black/30 pb:opacity-0 pb:group-hover:opacity-100 pb:transition-opacity pb:flex pb:items-center pb:justify-center pb:pointer-events-none\">\n <span className=\"pb:bg-white/90 pb:text-gray-900 pb:text-xs pb:font-bold pb:px-3 pb:py-1.5 pb:rounded-lg pb:shadow\">\n Click or drag to replace\n </span>\n </div>\n </div>\n\n <div className=\"pb:flex pb:items-center pb:justify-center pb:gap-3\">\n <Button\n type=\"button\"\n color=\"neutral\"\n size=\"sm\"\n onClick={handleClick}\n disabled={disabled}\n leftIcon={<Icon name=\"arrowUpTray\" />}\n >\n Change File\n </Button>\n\n <Button\n type=\"button\"\n variant=\"ghost\"\n color=\"danger\"\n size=\"sm\"\n onClick={handleRemove}\n disabled={disabled}\n leftIcon={<Icon name=\"x\" />}\n >\n Remove\n </Button>\n </div>\n </div>\n ) : (\n <div\n onClick={handleClick}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleClick();\n }\n }}\n className=\"pb:p-8 pb:text-center pb:cursor-pointer pb:focus:outline-none pb:focus:ring-2 pb:focus:ring-primary pb:focus:ring-offset-2 pb:rounded-xl pb:space-y-2.5 pb:flex pb:flex-col pb:items-center pb:justify-center\"\n >\n <div className=\"pb:w-12 pb:h-12 pb:rounded-full pb:bg-primary/20 pb:text-dark-primary pb:flex pb:items-center pb:justify-center\">\n {icon || <Icon name=\"cloudArrowUp\" className=\"pb:w-6 pb:h-6\" />}\n </div>\n\n <div className=\"pb:space-y-1\">\n <p className=\"pb:text-sm pb:font-bold pb:text-gray-900\">{title}</p>\n {subtitle && (\n <p className=\"pb:text-xs pb:text-gray-600\">{subtitle}</p>\n )}\n </div>\n </div>\n )}\n </div>\n );\n },\n);\n\nDropzone.displayName = \"Dropzone\";\n","import React, { useRef, useState } from \"react\";\nimport { Button, ButtonProps } from \"../forms/Button\";\nimport { Icon } from \"../foundations/Icon\";\nimport { cn } from \"../utils\";\n\nexport interface FileUploadProps {\n /** Accepted file types (e.g. `\"image/*\"`, `\".pdf\"`, `\"audio/*\"`). */\n accept?: string;\n /** Whether multiple files can be selected. */\n multiple?: boolean;\n /** Whether the input is disabled. */\n disabled?: boolean;\n /** Maximum allowable file size in bytes. */\n maxSizeBytes?: number;\n /** Text displayed inside the trigger button. Default is `\"Choose File\"`. */\n buttonText?: React.ReactNode;\n /** Button style variant. Default is `\"secondary\"`. */\n buttonVariant?: ButtonProps[\"variant\"];\n /** Button size. Default is `\"md\"`. */\n buttonSize?: ButtonProps[\"size\"];\n /** Icon shown inside the button. Default is `<Icon name=\"arrowUpTray\" />`. */\n buttonIcon?: React.ReactNode;\n /** Text shown when no file has been chosen. Default is `\"No file chosen\"`. */\n placeholder?: string;\n /** Whether to show a clear/remove button when files are selected. Default is `true`. */\n clearable?: boolean;\n /** Controlled file(s) value. */\n value?: File | File[] | null;\n /** Callback fired when file selection changes. */\n onChange?: (files: File | File[] | null) => void;\n /** Callback fired when a file exceeds size limit or validation fails. */\n onError?: (errorMessage: string) => void;\n /** Optional custom CSS classes. */\n className?: string;\n id?: string;\n name?: string;\n}\n\nfunction formatBytes(bytes: number, decimals = 1): string {\n if (bytes === 0) return \"0 Bytes\";\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + \" \" + sizes[i];\n}\n\nexport const FileUpload = React.forwardRef<HTMLDivElement, FileUploadProps>(\n (\n {\n accept,\n multiple = false,\n disabled = false,\n maxSizeBytes,\n buttonText = \"Choose File\",\n buttonVariant = \"secondary\",\n buttonSize = \"md\",\n buttonIcon = <Icon name=\"arrowUpTray\" />,\n placeholder = \"No file chosen\",\n clearable = true,\n value,\n onChange,\n onError,\n className,\n id,\n name,\n },\n ref,\n ) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [internalFiles, setInternalFiles] = useState<File[]>([]);\n\n const activeFiles = value\n ? Array.isArray(value)\n ? value\n : [value]\n : internalFiles;\n\n const handleButtonClick = () => {\n if (disabled) return;\n inputRef.current?.click();\n };\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const selected = e.target.files ? Array.from(e.target.files) : [];\n if (selected.length === 0) return;\n\n // Validate file sizes\n if (maxSizeBytes) {\n const oversized = selected.find((f) => f.size > maxSizeBytes);\n if (oversized) {\n const msg = `File \"${oversized.name}\" exceeds maximum allowed size of ${formatBytes(maxSizeBytes)}.`;\n onError?.(msg);\n if (inputRef.current) inputRef.current.value = \"\";\n return;\n }\n }\n\n setInternalFiles(selected);\n if (onChange) {\n onChange(multiple ? selected : selected[0] || null);\n }\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n setInternalFiles([]);\n if (inputRef.current) inputRef.current.value = \"\";\n if (onChange) {\n onChange(multiple ? [] : null);\n }\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"pb:inline-flex pb:items-center pb:gap-3 pb:w-full pb:max-w-md\",\n disabled && \"pb:cursor-not-allowed\",\n className,\n )}\n >\n <input\n ref={inputRef}\n type=\"file\"\n id={id}\n name={name}\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={handleFileChange}\n className=\"pb:hidden\"\n tabIndex={-1}\n />\n\n <Button\n type=\"button\"\n variant={buttonVariant}\n size={buttonSize}\n disabled={disabled}\n leftIcon={buttonIcon}\n onClick={handleButtonClick}\n >\n {buttonText}\n </Button>\n\n <div className=\"pb:flex-1 pb:min-w-0 pb:flex pb:items-center pb:justify-between pb:gap-2 pb:py-1 pb:px-2 pb:bg-gray-50 pb:border pb:border-gray-200 pb:rounded-md pb:text-xs\">\n {activeFiles.length > 0 ? (\n <span className=\"pb:font-medium pb:text-gray-800 pb:truncate\">\n {activeFiles.length === 1\n ? `${activeFiles[0].name} (${formatBytes(activeFiles[0].size)})`\n : `${activeFiles.length} files selected`}\n </span>\n ) : (\n <span className=\"pb:text-gray-600 pb:truncate\">{placeholder}</span>\n )}\n\n {clearable && activeFiles.length > 0 && !disabled && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"pb:p-0.5 pb:text-gray-400 pb:hover:text-gray-700 pb:rounded pb:hover:bg-gray-200 pb:cursor-pointer pb:transition-colors\"\n title=\"Clear selection\"\n aria-label=\"Clear selected file\"\n >\n <Icon name=\"x\" className=\"pb:w-3.5 pb:h-3.5\" />\n </button>\n )}\n </div>\n </div>\n );\n },\n);\n\nFileUpload.displayName = \"FileUpload\";\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:border-gray-100 pb:bg-white pb:p-6 pb:shadow-2xl 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%] pb:rounded-2xl\",\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\";\nimport { Icon } from \"../foundations/Icon\";\nimport { SurfaceVariant } from \"../types\";\n\nexport interface PopoverProps {\n /** The element that triggers the popover when clicked */\n trigger: React.ReactNode;\n /** Popover body content */\n children: React.ReactNode;\n /** Optional header title */\n title?: React.ReactNode;\n /** Controlled open state */\n open?: boolean;\n /** Initial open state in uncontrolled mode */\n defaultOpen?: boolean;\n /** Callback fired when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Side where the popover appears */\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n /** Alignment relative to the trigger */\n align?: \"start\" | \"center\" | \"end\";\n /** Distance from the trigger in pixels */\n sideOffset?: number;\n /** Surface visual variant */\n variant?: SurfaceVariant | \"default\";\n /** Whether to show a close button in the header */\n showCloseButton?: boolean;\n /** Whether to display a pointing arrow */\n showArrow?: boolean;\n className?: string;\n}\n\nconst variantStyles: Record<string, string> = {\n surface: \"pb:bg-white pb:border pb:border-gray-100 pb:shadow-xl\",\n default: \"pb:bg-white pb:border pb:border-gray-100 pb:shadow-xl\",\n glass:\n \"pb:bg-white/90 pb:backdrop-blur-2xl pb:border pb:border-white/50 pb:shadow-2xl\",\n outline: \"pb:bg-white pb:border-2 pb:border-gray-300 pb:shadow-md\",\n flat: \"pb:bg-gray-50 pb:border pb:border-gray-200 pb:shadow-lg\",\n};\n\nexport function Popover({\n trigger,\n children,\n title,\n open,\n defaultOpen,\n onOpenChange,\n side = \"bottom\",\n align = \"center\",\n sideOffset = 8,\n variant = \"surface\",\n showCloseButton = true,\n showArrow = true,\n className,\n}: PopoverProps) {\n return (\n <BasePopover.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={(nextOpen) => {\n onOpenChange?.(nextOpen);\n }}\n >\n {React.isValidElement(trigger) ? (\n <BasePopover.Trigger render={trigger as React.ReactElement} />\n ) : (\n <BasePopover.Trigger>{trigger}</BasePopover.Trigger>\n )}\n\n <BasePopover.Portal>\n <BasePopover.Positioner\n side={side}\n align={align}\n sideOffset={sideOffset}\n >\n <BasePopover.Popup\n className={cn(\n \"pb:z-50 pb:rounded-2xl pb:p-4 pb:min-w-[240px] pb:max-w-sm pb:text-gray-900 pb:transition-all pb:duration-150 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\",\n variantStyles[variant] || variantStyles.surface,\n className,\n )}\n >\n {(title || showCloseButton) && (\n <div className=\"pb:flex pb:items-center pb:justify-between pb:gap-3 pb:border-b pb:border-gray-100 pb:pb-2.5 pb:mb-3\">\n {title ? (\n <div className=\"pb:text-xs pb:font-bold pb:text-gray-900 pb:uppercase pb:tracking-wider\">\n {title}\n </div>\n ) : (\n <div />\n )}\n\n {showCloseButton && (\n <BasePopover.Close\n aria-label=\"Close popover\"\n className=\"pb:p-1 pb:rounded-lg pb:text-gray-400 pb:hover:text-gray-700 pb:hover:bg-gray-100 pb:transition-colors pb:cursor-pointer\"\n >\n <Icon name=\"xCircle\" className=\"pb:w-4 pb:h-4\" />\n </BasePopover.Close>\n )}\n </div>\n )}\n\n <div className=\"pb:text-sm\">{children}</div>\n\n {showArrow && (\n <BasePopover.Arrow\n className={cn(\n variant === \"glass\"\n ? \"pb:fill-white/90 pb:stroke-white/50\"\n : \"pb:fill-white pb:stroke-gray-100\",\n )}\n />\n )}\n </BasePopover.Popup>\n </BasePopover.Positioner>\n </BasePopover.Portal>\n </BasePopover.Root>\n );\n}\n\nexport const PopoverTitle = (\n props: React.ComponentProps<typeof BasePopover.Title>,\n) => <BasePopover.Title {...props} />;\n\nexport const PopoverDescription = (\n props: React.ComponentProps<typeof BasePopover.Description>,\n) => <BasePopover.Description {...props} />;\n\nexport const PopoverClose = (\n props: React.ComponentProps<typeof BasePopover.Close>,\n) => <BasePopover.Close {...props} />;\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\", className)}\n {...props}\n />\n );\n}\n","import React, { useState } from \"react\";\nimport { Button } from \"../forms/Button\";\nimport { Icon } from \"../foundations/Icon\";\nimport { cn } from \"../utils\";\nimport { ComponentRadius, FillVariant } from \"../types\";\n\nexport type AlertLevel = \"Error\" | \"Warning\" | \"Success\" | \"Info\";\nexport type AlertColor = \"danger\" | \"warning\" | \"success\" | \"info\" | \"neutral\";\n\nexport interface AlertAction {\n name: string;\n callback: () => void;\n}\n\nexport interface AlertUIProps {\n /** Alert semantic color */\n color?: AlertColor;\n /** Legacy level prop for backward compatibility */\n level?: AlertLevel;\n /** Visual style variant */\n variant?: \"soft\" | \"outline\" | \"solid\";\n /** Optional alert title */\n title?: React.ReactNode;\n /** Alert message body */\n message?: React.ReactNode;\n /** Children as alternative to message */\n children?: React.ReactNode;\n /** Optional action button */\n action?: AlertAction;\n /** Callback fired when alert is dismissed */\n onClose?: () => void;\n /** Border radius scale */\n radius?: ComponentRadius;\n className?: string;\n}\n\nconst levelColorMap: Record<AlertLevel, AlertColor> = {\n Error: \"danger\",\n Warning: \"warning\",\n Success: \"success\",\n Info: \"info\",\n};\n\nconst iconMap: Record<AlertColor, { name: any; colorClass: string }> = {\n danger: { name: \"exclamationCircle\", colorClass: \"pb:text-red-700\" },\n warning: { name: \"exclamationTriangle\", colorClass: \"pb:text-amber-800\" },\n success: { name: \"checkCircle\", colorClass: \"pb:text-emerald-800\" },\n info: { name: \"megaphone\", colorClass: \"pb:text-teal-800\" },\n neutral: { name: \"questionMarkCircle\", colorClass: \"pb:text-gray-700\" },\n};\n\nconst variantColorClasses: Record<string, Record<AlertColor, string>> = {\n soft: {\n danger: \"pb:bg-red-50 pb:border-red-200 pb:text-red-900\",\n warning: \"pb:bg-amber-50 pb:border-amber-200 pb:text-amber-900\",\n success: \"pb:bg-emerald-50 pb:border-emerald-200 pb:text-emerald-900\",\n info: \"pb:bg-teal-50 pb:border-teal-200 pb:text-teal-900\",\n neutral: \"pb:bg-gray-50 pb:border-gray-200 pb:text-gray-900\",\n },\n outline: {\n danger: \"pb:bg-red-50/40 pb:border-2 pb:border-red-400 pb:text-red-950\",\n warning: \"pb:bg-amber-50/40 pb:border-2 pb:border-amber-400 pb:text-amber-950\",\n success: \"pb:bg-emerald-50/40 pb:border-2 pb:border-emerald-500 pb:text-emerald-950\",\n info: \"pb:bg-teal-50/40 pb:border-2 pb:border-teal-500 pb:text-teal-950\",\n neutral: \"pb:bg-gray-50/40 pb:border-2 pb:border-gray-300 pb:text-gray-950\",\n },\n solid: {\n danger: \"pb:bg-red-700 pb:border-transparent pb:text-white\",\n warning: \"pb:bg-amber-300 pb:border-transparent pb:text-gray-950 pb:font-medium\",\n success: \"pb:bg-emerald-700 pb:border-transparent pb:text-white\",\n info: \"pb:bg-teal-700 pb:border-transparent pb:text-white\",\n neutral: \"pb:bg-gray-900 pb:border-transparent pb:text-white\",\n },\n};\n\nconst radiusClasses: Record<ComponentRadius, string> = {\n none: \"pb:rounded-none\",\n sm: \"pb:rounded-md\",\n md: \"pb:rounded-xl\",\n lg: \"pb:rounded-2xl\",\n \"2xl\": \"pb:rounded-2xl\",\n pill: \"pb:rounded-full\",\n};\n\nexport function Alert({\n color,\n level,\n variant = \"soft\",\n title,\n message,\n children,\n action,\n onClose,\n radius = \"2xl\",\n className,\n}: AlertUIProps) {\n const [visible, setVisible] = useState(true);\n\n if (!visible) return null;\n\n const resolvedColor: AlertColor =\n color || (level ? levelColorMap[level] : \"info\") || \"info\";\n\n const { name: iconName, colorClass } = iconMap[resolvedColor];\n const colorStyle = variantColorClasses[variant]?.[resolvedColor] || variantColorClasses.soft.info;\n\n const handleDismiss = () => {\n setVisible(false);\n onClose?.();\n };\n\n const body = children || message;\n\n return (\n <div\n role=\"alert\"\n className={cn(\n \"pb:flex pb:w-full pb:items-start pb:gap-3.5 pb:p-4.5 pb:border pb:shadow-xs pb:transition-all pb:duration-200\",\n radiusClasses[radius] || radiusClasses[\"2xl\"],\n colorStyle,\n className,\n )}\n >\n <div className=\"pb:shrink-0 pb:pt-0.5\">\n <Icon\n name={iconName}\n className={cn(\n \"pb:w-5 pb:h-5\",\n variant === \"solid\" ? \"pb:text-current\" : colorClass,\n )}\n />\n </div>\n\n <div className=\"pb:flex-1 pb:min-w-0 pb:text-sm pb:leading-relaxed\">\n {title && (\n <div className=\"pb:font-bold pb:text-base pb:mb-1 pb:leading-snug\">\n {title}\n </div>\n )}\n <div className={cn(title && \"pb:opacity-90\")}>{body}</div>\n </div>\n\n {action && (\n <Button\n size=\"sm\"\n variant={variant === \"solid\" ? \"outline\" : \"solid\"}\n color={resolvedColor === \"danger\" ? \"danger\" : \"neutral\"}\n onClick={() => {\n action.callback();\n handleDismiss();\n }}\n className=\"pb:shrink-0 pb:self-center\"\n >\n {action.name}\n </Button>\n )}\n\n <button\n type=\"button\"\n onClick={handleDismiss}\n aria-label=\"Dismiss alert\"\n className=\"pb:shrink-0 pb:p-1 pb:rounded-lg pb:opacity-70 pb:hover:opacity-100 pb:transition-opacity pb:cursor-pointer pb:self-start pb:-mr-1\"\n >\n <Icon name=\"xCircle\" className=\"pb:w-5 pb:h-5\" />\n </button>\n </div>\n );\n}\n","import React from \"react\";\nimport { Button } from \"../forms/Button\";\nimport { Icon, IconProps } from \"../foundations/Icon\";\nimport { Heading, Text } from \"../foundations/Typography\";\nimport { cn } from \"../utils\";\nimport { ComponentColor, FillVariant } from \"../types\";\n\nexport interface EmptyStateAction {\n label: React.ReactNode;\n onClick?: () => void;\n render?: React.ReactElement;\n variant?: FillVariant;\n color?: ComponentColor;\n icon?: IconProps[\"name\"] | React.ReactNode;\n}\n\nexport interface EmptyStateProps {\n title: React.ReactNode;\n description?: React.ReactNode;\n icon?: IconProps[\"name\"] | React.ReactNode;\n primaryAction?: EmptyStateAction;\n secondaryAction?: EmptyStateAction;\n children?: React.ReactNode;\n className?: string;\n}\n\nexport function EmptyState({\n title,\n description,\n icon,\n primaryAction,\n secondaryAction,\n children,\n className,\n}: EmptyStateProps) {\n const renderIcon = () => {\n if (!icon) return null;\n if (typeof icon === \"string\") {\n return (\n <Icon\n name={icon as IconProps[\"name\"]}\n className=\"pb:w-16 pb:h-16 pb:mx-auto pb:text-gray-400 pb:mb-4\"\n />\n );\n }\n return <div className=\"pb:flex pb:justify-center pb:mb-4\">{icon}</div>;\n };\n\n return (\n <div\n className={cn(\n \"pb:flex pb:flex-col pb:items-center pb:justify-center pb:p-8 pb:text-center pb:rounded-2xl pb:border pb:border-dashed pb:border-gray-200 pb:bg-white/50\",\n className,\n )}\n >\n {renderIcon()}\n\n {typeof title === \"string\" ? (\n <Heading\n level={3}\n className=\"pb:font-bold pb:text-gray-800 pb:mb-2\"\n >\n {title}\n </Heading>\n ) : (\n title\n )}\n\n {description &&\n (typeof description === \"string\" ? (\n <Text\n color=\"muted\"\n className=\"pb:max-w-md pb:mb-6\"\n >\n {description}\n </Text>\n ) : (\n <div className=\"pb:text-gray-600 pb:max-w-md pb:mb-6\">{description}</div>\n ))}\n\n {(primaryAction || secondaryAction) && (\n <div className=\"pb:flex pb:flex-wrap pb:gap-3 pb:justify-center pb:items-center\">\n {primaryAction && (\n <Button\n variant={primaryAction.variant || \"solid\"}\n color={primaryAction.color || \"primary\"}\n onClick={primaryAction.onClick}\n render={primaryAction.render}\n leftIcon={\n typeof primaryAction.icon === \"string\" ? (\n <Icon name={primaryAction.icon as IconProps[\"name\"]} />\n ) : (\n primaryAction.icon\n )\n }\n >\n {primaryAction.label}\n </Button>\n )}\n {secondaryAction && (\n <Button\n variant={secondaryAction.variant || \"solid\"}\n color={secondaryAction.color || \"neutral\"}\n onClick={secondaryAction.onClick}\n render={secondaryAction.render}\n leftIcon={\n typeof secondaryAction.icon === \"string\" ? (\n <Icon name={secondaryAction.icon as IconProps[\"name\"]} />\n ) : (\n secondaryAction.icon\n )\n }\n >\n {secondaryAction.label}\n </Button>\n )}\n </div>\n )}\n\n {children}\n </div>\n );\n}\n","import React from \"react\";\nimport { cn } from \"../utils\";\nimport { BrandColor, ComponentSize } from \"../types\";\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Size variant of the spinner */\n size?: ComponentSize;\n /** Color theme of the spinner */\n color?: BrandColor | \"primary\" | \"neutral\";\n /** Screen-reader accessible label */\n label?: string;\n}\n\nconst sizeClasses: Record<ComponentSize, string> = {\n xs: \"pb:w-3.5 pb:h-3.5 pb:border-[1.5px]\",\n sm: \"pb:w-5 pb:h-5 pb:border-2\",\n md: \"pb:w-8 pb:h-8 pb:border-[2.5px]\",\n lg: \"pb:w-12 pb:h-12 pb:border-4\",\n xl: \"pb:w-16 pb:h-16 pb:border-4\",\n};\n\nconst colorClasses: Record<string, string> = {\n primary: \"pb:border-primary pb:border-t-transparent\",\n teal: \"pb:border-peerbots-teal pb:border-t-transparent\",\n pink: \"pb:border-peerbots-pink pb:border-t-transparent\",\n darkteal: \"pb:border-peerbots-darkteal pb:border-t-transparent\",\n darkblue: \"pb:border-peerbots-darkblue pb:border-t-transparent\",\n neutral: \"pb:border-gray-500 pb:border-t-transparent\",\n white: \"pb:border-white pb:border-t-transparent\",\n};\n\nexport const Spinner = React.forwardRef<HTMLDivElement, SpinnerProps>(\n (\n {\n size = \"md\",\n color = \"teal\",\n label = \"Loading...\",\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label={label}\n className={cn(\n \"pb:inline-block pb:rounded-full pb:animate-spin pb:shrink-0\",\n sizeClasses[size] || sizeClasses.md,\n colorClasses[color] || colorClasses.teal,\n className,\n )}\n {...props}\n >\n <span className=\"pb:sr-only\">{label}</span>\n </div>\n );\n },\n);\n\nSpinner.displayName = \"Spinner\";\n","import { useFormStatus } from \"react-dom\";\nimport { Button, Input, Heading, Text, Icon, Field } from \"..\";\nimport React from \"react\";\n\nfunction SubmitButton({ label }: { label: string }) {\n const { pending } = useFormStatus();\n return (\n <Button\n type=\"submit\"\n color=\"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\" color=\"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\" color=\"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 size=\"sm\">\n Already have an account?{\" \"}\n <Button\n variant=\"link\"\n color=\"teal\"\n size=\"sm\"\n onClick={() => onModeChange(\"signing in\")}\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 size=\"sm\">\n Forgot your password?{\" \"}\n <Button\n variant=\"link\"\n color=\"teal\"\n size=\"sm\"\n onClick={() => onModeChange(\"resetting password\")}\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-700\">or</span>\n </div>\n </div>\n <Text size=\"sm\">\n Don't have an account?{\" \"}\n <Button\n variant=\"link\"\n color=\"teal\"\n size=\"sm\"\n onClick={() => onModeChange(\"signing up\")}\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 size=\"sm\">\n Don't have an account?{\" \"}\n <Button\n variant=\"link\"\n color=\"teal\"\n size=\"sm\"\n onClick={() => onModeChange(\"signing up\")}\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-700\">or</span>\n </div>\n </div>\n <Text size=\"sm\">\n Remembered your password?{\" \"}\n <Button\n variant=\"link\"\n color=\"teal\"\n size=\"sm\"\n onClick={() => onModeChange(\"signing in\")}\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 color=\"neutral\"\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 { 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 color=\"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","import React, { useRef, useImperativeHandle } from \"react\";\nimport { Icon } from \"../foundations/Icon\";\nimport { Input, InputProps } from \"../forms/Input\";\nimport { cn } from \"../utils\";\n\nexport interface SearchInputProps\n extends Omit<InputProps, \"leftIcon\" | \"rightIcon\"> {\n onSearch?: (query: string) => void;\n onClear?: () => void;\n showClearButton?: boolean;\n}\n\nexport const SearchInput = React.forwardRef<HTMLInputElement, SearchInputProps>(\n (\n {\n className,\n value,\n defaultValue,\n onChange,\n onSearch,\n onClear,\n showClearButton = true,\n placeholder = \"Search...\",\n onKeyDown,\n ...props\n },\n ref,\n ) => {\n const internalRef = useRef<HTMLInputElement>(null);\n useImperativeHandle(ref, () => internalRef.current as HTMLInputElement);\n\n const handleClear = () => {\n if (internalRef.current) {\n internalRef.current.value = \"\";\n }\n if (onClear) {\n onClear();\n }\n if (onSearch) {\n onSearch(\"\");\n }\n internalRef.current?.focus();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" && onSearch) {\n onSearch(internalRef.current?.value ?? \"\");\n } else if (e.key === \"Escape\") {\n handleClear();\n }\n if (onKeyDown) {\n onKeyDown(e);\n }\n };\n\n const hasValue =\n value !== undefined\n ? String(value).length > 0\n : internalRef.current?.value && internalRef.current.value.length > 0;\n\n return (\n <div className={cn(\"pb:relative pb:w-full\", className)}>\n <Input\n ref={internalRef}\n type=\"text\"\n value={value}\n defaultValue={defaultValue}\n placeholder={placeholder}\n onChange={onChange}\n onKeyDown={handleKeyDown}\n leftIcon={<Icon name=\"search\" className=\"pb:w-4 pb:h-4 pb:text-gray-400\" />}\n className=\"pb:pr-8\"\n {...props}\n />\n {showClearButton && (\n <button\n type=\"button\"\n aria-label=\"Clear search\"\n onClick={handleClear}\n className={cn(\n \"pb:absolute pb:inset-y-0 pb:right-0 pb:flex pb:items-center pb:pr-2.5 pb:text-gray-400 pb:hover:text-gray-600 pb:cursor-pointer pb:transition-opacity pb:duration-150 pb:focus-visible:outline-none pb:focus-visible:ring-2 pb:focus-visible:ring-primary pb:rounded-r-md\",\n hasValue ? \"pb:opacity-100 pb:visible\" : \"pb:opacity-0 pb:invisible\",\n )}\n >\n <Icon name=\"xCircle\" className=\"pb:w-4 pb:h-4\" />\n </button>\n )}\n </div>\n );\n },\n);\n\nSearchInput.displayName = \"SearchInput\";\n","import React from \"react\";\nimport { Button, ButtonProps } from \"../forms/Button\";\nimport { Icon } from \"../foundations/Icon\";\nimport { useClipboard } from \"./useClipboard\";\nimport { cn } from \"../utils\";\n\nexport interface CopyButtonProps extends Omit<ButtonProps, \"onClick\"> {\n /** The text value to copy to the clipboard. */\n value: string;\n /** Label displayed before copying. Default is `\"Copy\"`. Pass `null` or use `isIconOnly` for icon-only. */\n label?: React.ReactNode;\n /** Label displayed after copying. Default is `\"Copied!\"`. */\n successLabel?: React.ReactNode;\n /** Duration in milliseconds for the success state. Default is `2000`. */\n timeout?: number;\n /** Callback fired after successfully copying to clipboard. */\n onCopied?: (value: string) => void;\n /** Callback fired if copying fails. */\n onCopyError?: (error: Error) => void;\n /** Custom icon shown in default state. */\n copyIcon?: React.ReactNode;\n /** Custom icon shown in copied state. */\n successIcon?: React.ReactNode;\n /** Whether to show icons. Default is `true`. */\n showIcon?: boolean;\n}\n\nexport const CopyButton = React.forwardRef<HTMLButtonElement, CopyButtonProps>(\n (\n {\n value,\n label = \"Copy\",\n successLabel = \"Copied!\",\n timeout = 2000,\n onCopied,\n onCopyError,\n copyIcon,\n successIcon,\n showIcon = true,\n variant = \"outline\",\n color = \"neutral\",\n size = \"md\",\n radius = \"md\",\n isIconOnly,\n className,\n ...props\n },\n ref,\n ) => {\n const { copy, copied } = useClipboard({\n timeout,\n onSuccess: onCopied,\n onError: onCopyError,\n });\n\n const currentIcon = copied\n ? successIcon || <Icon name=\"check\" className=\"pb:text-peerbots-teal\" />\n : copyIcon || <Icon name=\"clipboard\" />;\n\n const currentLabel = copied ? successLabel : label;\n\n return (\n <Button\n ref={ref}\n variant={variant}\n color={color}\n size={size}\n radius={radius}\n isIconOnly={isIconOnly}\n onClick={() => copy(value)}\n leftIcon={showIcon ? currentIcon : undefined}\n className={cn(\n \"pb:transition-all pb:duration-150\",\n copied && \"pb:border-peerbots-teal pb:text-peerbots-darkteal\",\n className,\n )}\n aria-live=\"polite\"\n aria-label={\n isIconOnly\n ? typeof currentLabel === \"string\"\n ? currentLabel\n : \"Copy\"\n : undefined\n }\n {...props}\n >\n {isIconOnly ? null : currentLabel}\n </Button>\n );\n },\n);\n\nCopyButton.displayName = \"CopyButton\";\n","import { useState, useCallback, useRef, useEffect } from \"react\";\n\nexport interface UseClipboardOptions {\n /**\n * Duration in milliseconds for the `copied` state to remain `true`.\n * @default 2000\n */\n timeout?: number;\n /** Callback fired after successfully copying to clipboard. */\n onSuccess?: (text: string) => void;\n /** Callback fired if copying fails. */\n onError?: (error: Error) => void;\n}\n\nexport function useClipboard(options: UseClipboardOptions = {}) {\n const { timeout = 2000, onSuccess, onError } = options;\n const [copied, setCopied] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const copy = useCallback(\n async (text: string): Promise<boolean> => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n\n try {\n if (navigator?.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n } else {\n // Fallback for non-secure / legacy contexts\n const textarea = document.createElement(\"textarea\");\n textarea.value = text;\n textarea.style.position = \"fixed\";\n textarea.style.opacity = \"0\";\n document.body.appendChild(textarea);\n textarea.focus();\n textarea.select();\n const successful = document.execCommand(\"copy\");\n document.body.removeChild(textarea);\n if (!successful) {\n throw new Error(\"execCommand copy failed\");\n }\n }\n\n setCopied(true);\n setError(null);\n onSuccess?.(text);\n\n timerRef.current = setTimeout(() => {\n setCopied(false);\n }, timeout);\n\n return true;\n } catch (err) {\n const copyError = err instanceof Error ? err : new Error(String(err));\n setError(copyError);\n setCopied(false);\n onError?.(copyError);\n return false;\n }\n },\n [timeout, onSuccess, onError],\n );\n\n useEffect(() => {\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n };\n }, []);\n\n return { copy, copied, error };\n}\n","import React from \"react\";\nimport { cn } from \"../utils\";\nimport { Icon } from \"../foundations/Icon\";\nimport { ComponentColor, ComponentSize } from \"../types\";\n\nexport type StepStatus = \"complete\" | \"current\" | \"upcoming\" | \"disabled\";\n\nexport interface StepItem {\n id: string;\n title: React.ReactNode;\n description?: React.ReactNode;\n status?: StepStatus;\n icon?: React.ReactNode;\n}\n\nexport interface StepperProps {\n /** Array of sequential steps */\n steps: StepItem[];\n /** Controlled currently active step id */\n activeStepId?: string;\n /** Callback fired when a step is clicked */\n onStepClick?: (stepId: string) => void;\n /** Layout orientation */\n orientation?: \"horizontal\" | \"vertical\" | \"chips\";\n /** Brand color theme */\n color?: ComponentColor;\n /** Size scale */\n size?: ComponentSize;\n className?: string;\n}\n\nconst colorBadgeStyles: Record<string, { current: string; complete: string; line: string }> = {\n teal: {\n current: \"pb:bg-peerbots-teal pb:text-gray-900 pb:ring-4 pb:ring-peerbots-teal/30\",\n complete: \"pb:bg-peerbots-darkteal pb:text-white\",\n line: \"pb:bg-peerbots-darkteal\",\n },\n pink: {\n current: \"pb:bg-rose-700 pb:text-white pb:ring-4 pb:ring-rose-200\",\n complete: \"pb:bg-rose-800 pb:text-white\",\n line: \"pb:bg-rose-700\",\n },\n primary: {\n current: \"pb:bg-primary pb:text-gray-900 pb:ring-4 pb:ring-primary/30\",\n complete: \"pb:bg-dark-primary pb:text-white\",\n line: \"pb:bg-dark-primary\",\n },\n darkblue: {\n current: \"pb:bg-peerbots-darkblue pb:text-white pb:ring-4 pb:ring-peerbots-darkblue/20\",\n complete: \"pb:bg-peerbots-darkblue pb:text-white\",\n line: \"pb:bg-peerbots-darkblue\",\n },\n neutral: {\n current: \"pb:bg-gray-900 pb:text-white pb:ring-4 pb:ring-gray-300\",\n complete: \"pb:bg-gray-800 pb:text-white\",\n line: \"pb:bg-gray-600\",\n },\n};\n\nexport function Stepper({\n steps,\n activeStepId,\n onStepClick,\n orientation = \"horizontal\",\n color = \"teal\",\n size = \"md\",\n className,\n}: StepperProps) {\n const activeIndex = steps.findIndex((s) => s.id === activeStepId);\n const colorStyle = colorBadgeStyles[color] || colorBadgeStyles.teal;\n\n const resolveStatus = (step: StepItem, index: number): StepStatus => {\n if (step.status) return step.status;\n if (activeIndex === -1) return index === 0 ? \"current\" : \"upcoming\";\n if (index < activeIndex) return \"complete\";\n if (index === activeIndex) return \"current\";\n return \"upcoming\";\n };\n\n // 1. \"chips\" compact jump mode (as in Moddy build guide)\n if (orientation === \"chips\") {\n return (\n <ol\n className={cn(\n \"pb:flex pb:flex-row pb:flex-wrap pb:items-center pb:gap-2 pb:list-none pb:p-0 pb:m-0\",\n className,\n )}\n >\n {steps.map((step, idx) => {\n const status = resolveStatus(step, idx);\n const isCurrent = status === \"current\";\n const isComplete = status === \"complete\";\n const isClickable = Boolean(onStepClick) && status !== \"disabled\";\n const stepLabel = typeof step.title === \"string\" ? `Step ${idx + 1}: ${step.title}` : `Step ${idx + 1}`;\n\n return (\n <li key={step.id}>\n <button\n type=\"button\"\n aria-label={stepLabel}\n disabled={!isClickable}\n onClick={() => onStepClick?.(step.id)}\n className={cn(\n \"pb:inline-flex pb:items-center pb:gap-1.5 pb:pl-1.5 pb:pr-3 pb:py-1 pb:rounded-full pb:border pb:transition-all pb:duration-150 pb:text-xs pb:font-bold\",\n isClickable ? \"pb:cursor-pointer\" : \"pb:cursor-default\",\n isCurrent\n ? cn(colorStyle.current, \"pb:shadow-sm\")\n : isComplete\n ? \"pb:bg-gray-100 pb:text-gray-900 pb:border-gray-300 pb:hover:border-peerbots-darkteal\"\n : \"pb:bg-white pb:text-gray-600 pb:border-gray-300 pb:hover:text-gray-900\",\n )}\n >\n <span\n className={cn(\n \"pb:flex pb:items-center pb:justify-center pb:w-4 pb:h-4 pb:rounded-full pb:text-[10px] pb:font-bold\",\n isCurrent\n ? \"pb:bg-black/15 pb:text-current\"\n : isComplete\n ? \"pb:bg-peerbots-darkteal pb:text-white\"\n : \"pb:bg-gray-200 pb:text-gray-700\",\n )}\n >\n {isComplete ? (\n <Icon name=\"check\" className=\"pb:w-2.5 pb:pb:h-2.5\" />\n ) : (\n idx + 1\n )}\n </span>\n <span className=\"pb:uppercase pb:tracking-tight pb:whitespace-nowrap\">\n {step.title}\n </span>\n </button>\n </li>\n );\n })}\n </ol>\n );\n }\n\n // 2. \"vertical\" layout mode\n if (orientation === \"vertical\") {\n return (\n <ol\n className={cn(\n \"pb:flex pb:flex-col pb:gap-0 pb:list-none pb:p-0 pb:m-0\",\n className,\n )}\n >\n {steps.map((step, idx) => {\n const status = resolveStatus(step, idx);\n const isCurrent = status === \"current\";\n const isComplete = status === \"complete\";\n const isLast = idx === steps.length - 1;\n const isClickable = Boolean(onStepClick) && status !== \"disabled\";\n const stepLabel = typeof step.title === \"string\" ? `Step ${idx + 1}: ${step.title}` : `Step ${idx + 1}`;\n\n return (\n <li key={step.id} className=\"pb:relative pb:flex pb:items-start pb:gap-4 pb:pb-6\">\n {!isLast && (\n <div\n className={cn(\n \"pb:absolute pb:left-4 pb:top-8 pb:-bottom-0 pb:w-0.5 pb:bg-gray-200\",\n isComplete && colorStyle.line,\n )}\n />\n )}\n\n <button\n type=\"button\"\n aria-label={stepLabel}\n disabled={!isClickable}\n onClick={() => onStepClick?.(step.id)}\n className={cn(\n \"pb:flex pb:items-center pb:justify-center pb:w-8 pb:h-8 pb:rounded-full pb:font-bold pb:text-xs pb:shrink-0 pb:transition-all pb:duration-200 pb:z-10\",\n isClickable ? \"pb:cursor-pointer\" : \"pb:cursor-default\",\n isCurrent\n ? colorStyle.current\n : isComplete\n ? colorStyle.complete\n : \"pb:bg-gray-100 pb:text-gray-700 pb:border pb:border-gray-300\",\n )}\n >\n {step.icon || (isComplete ? <Icon name=\"check\" className=\"pb:w-4 pb:h-4\" /> : idx + 1)}\n </button>\n\n <div\n onClick={() => isClickable && onStepClick?.(step.id)}\n className={cn(\n \"pb:pt-0.5 pb:flex-1\",\n isClickable && \"pb:cursor-pointer\",\n )}\n >\n <div\n className={cn(\n \"pb:text-sm pb:font-bold\",\n isCurrent\n ? \"pb:text-gray-950\"\n : isComplete\n ? \"pb:text-gray-900\"\n : \"pb:text-gray-600\",\n )}\n >\n {step.title}\n </div>\n {step.description && (\n <div className=\"pb:text-xs pb:text-gray-600 pb:mt-0.5 pb:leading-relaxed\">\n {step.description}\n </div>\n )}\n </div>\n </li>\n );\n })}\n </ol>\n );\n }\n\n // 3. \"horizontal\" rail mode (default)\n return (\n <ol\n className={cn(\n \"pb:flex pb:w-full pb:items-center pb:justify-between pb:gap-0 pb:list-none pb:p-0 pb:m-0\",\n className,\n )}\n >\n {steps.map((step, idx) => {\n const status = resolveStatus(step, idx);\n const isCurrent = status === \"current\";\n const isComplete = status === \"complete\";\n const isLast = idx === steps.length - 1;\n const isClickable = Boolean(onStepClick) && status !== \"disabled\";\n const stepLabel = typeof step.title === \"string\" ? `Step ${idx + 1}: ${step.title}` : `Step ${idx + 1}`;\n\n return (\n <li\n key={step.id}\n className={cn(\n \"pb:flex pb:items-center\",\n isLast ? \"pb:flex-none\" : \"pb:flex-1\",\n )}\n >\n <div className=\"pb:flex pb:flex-col pb:items-center pb:text-center pb:relative\">\n <button\n type=\"button\"\n aria-label={stepLabel}\n disabled={!isClickable}\n onClick={() => onStepClick?.(step.id)}\n className={cn(\n \"pb:flex pb:items-center pb:justify-center pb:w-9 pb:h-9 pb:rounded-full pb:font-bold pb:text-xs pb:transition-all pb:duration-200 pb:z-10\",\n isClickable ? \"pb:cursor-pointer\" : \"pb:cursor-default\",\n isCurrent\n ? colorStyle.current\n : isComplete\n ? colorStyle.complete\n : \"pb:bg-gray-100 pb:text-gray-700 pb:border pb:border-gray-300\",\n )}\n >\n {step.icon || (isComplete ? <Icon name=\"check\" className=\"pb:w-4 pb:h-4\" /> : idx + 1)}\n </button>\n\n <div className=\"pb:mt-2 pb:max-w-[120px]\">\n <div\n className={cn(\n \"pb:text-xs pb:font-bold pb:leading-tight\",\n isCurrent\n ? \"pb:text-gray-950\"\n : isComplete\n ? \"pb:text-gray-900\"\n : \"pb:text-gray-600\",\n )}\n >\n {step.title}\n </div>\n {step.description && (\n <div className=\"pb:text-[10px] pb:text-gray-600 pb:mt-0.5 pb:hidden sm:pb:block truncate\">\n {step.description}\n </div>\n )}\n </div>\n </div>\n\n {!isLast && (\n <div\n className={cn(\n \"pb:flex-1 pb:h-0.5 pb:bg-gray-200 pb:mx-2 pb:transition-colors pb:duration-300 pb:-mt-6\",\n isComplete && colorStyle.line,\n )}\n />\n )}\n </li>\n );\n })}\n </ol>\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=\"region\" aria-label={alt}>\n {label && (\n <span className=\"pb:text-xs pb:uppercase pb:font-bold pb:text-gray-700 pb:block pb:mb-2 pb:px-1\">\n {label}\n </span>\n )}\n <VictoryChart\n width={chartWidth}\n height={chartHeight}\n padding={{ left: 100, right: 50, top: 40, bottom: 60 }}\n containerComponent={\n <VictoryVoronoiContainer\n title={alt}\n desc={alt}\n aria-label={alt}\n />\n }\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=\"region\" aria-label={alt}>\n {label && (\n <span className=\"pb:text-xs pb:uppercase pb:font-bold pb:text-gray-700 pb:block pb:mb-2 pb:px-1\">\n {label}\n </span>\n )}\n <VictoryChart\n width={chartWidth}\n height={chartHeight}\n padding={padding}\n containerComponent={\n <VictoryVoronoiContainer\n title={alt}\n desc={alt}\n aria-label={alt}\n />\n }\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","import React from \"react\";\nimport { cn } from \"../ui/utils\";\n\nexport interface LineGraphPoint {\n x: number;\n y: number;\n}\n\nexport interface LineGraphHighlightPoint extends LineGraphPoint {\n color?: string;\n label?: string;\n}\n\nexport interface LineGraphProps {\n data: LineGraphPoint[];\n highlightPoints?: LineGraphHighlightPoint[];\n minX?: number;\n maxX?: number;\n minY?: number;\n maxY?: number;\n width?: number | string;\n height?: number;\n strokeColor?: string;\n strokeWidth?: number;\n fillColor?: string;\n showGrid?: boolean;\n showAxisLabels?: boolean;\n xUnit?: string;\n padding?: number;\n className?: string;\n}\n\nexport function LineGraph({\n data = [],\n highlightPoints = [],\n minX,\n maxX,\n minY = 0,\n maxY,\n width = \"100%\",\n height = 200,\n strokeColor = \"#3b82f6\",\n strokeWidth = 2,\n fillColor,\n showGrid = true,\n showAxisLabels = true,\n xUnit = \"ms\",\n padding = 24,\n className,\n}: LineGraphProps) {\n const svgWidth = typeof width === \"number\" ? width : 800;\n const svgHeight = height;\n\n const hasData = data && data.length > 0;\n\n const calculatedMinX =\n minX ?? (hasData ? Math.min(...data.map((d) => d.x)) : 0);\n const calculatedMaxX =\n maxX ?? (hasData ? Math.max(...data.map((d) => d.x)) : 1000);\n const xSpan = Math.max(calculatedMaxX - calculatedMinX, 1);\n\n const calculatedMinY =\n minY ?? (hasData ? Math.min(...data.map((d) => d.y)) : 0);\n const calculatedMaxY =\n maxY ?? (hasData ? Math.max(...data.map((d) => d.y)) : 1);\n const ySpan = Math.max(calculatedMaxY - calculatedMinY, 0.001);\n\n const getCanvasX = (x: number) =>\n ((x - calculatedMinX) / xSpan) * (svgWidth - 2 * padding) + padding;\n\n const getCanvasY = (y: number) =>\n svgHeight -\n padding -\n ((y - calculatedMinY) / ySpan) * (svgHeight - 2 * padding);\n\n const pathData = hasData\n ? data\n .map(\n (p, i) =>\n `${i === 0 ? \"M\" : \"L\"} ${getCanvasX(p.x)} ${getCanvasY(p.y)}`,\n )\n .join(\" \")\n : `M ${padding} ${getCanvasY(calculatedMinY)} L ${\n svgWidth - padding\n } ${getCanvasY(calculatedMinY)}`;\n\n const fillPathData =\n hasData && fillColor\n ? `${pathData} L ${getCanvasX(\n data[data.length - 1].x,\n )} ${getCanvasY(calculatedMinY)} L ${getCanvasX(\n data[0].x,\n )} ${getCanvasY(calculatedMinY)} Z`\n : undefined;\n\n return (\n <div className={cn(\"pb:relative pb:w-full pb:overflow-x-auto\", className)}>\n <svg\n viewBox={`0 0 ${svgWidth} ${svgHeight}`}\n className=\"pb:w-full pb:h-auto pb:bg-gray-50 pb:rounded pb:border pb:border-gray-200\"\n style={{ minWidth: typeof width === \"number\" ? `${width}px` : \"300px\" }}\n >\n {/* Grid and Axes */}\n {showGrid && (\n <>\n {/* X-axis */}\n <line\n x1={padding}\n y1={svgHeight - padding}\n x2={svgWidth - padding}\n y2={svgHeight - padding}\n stroke=\"#e5e7eb\"\n strokeWidth=\"1\"\n />\n {/* Y-axis */}\n <line\n x1={padding}\n y1={padding}\n x2={padding}\n y2={svgHeight - padding}\n stroke=\"#e5e7eb\"\n strokeWidth=\"1\"\n />\n {/* Mid Y-grid */}\n <line\n x1={padding}\n y1={getCanvasY((calculatedMinY + calculatedMaxY) / 2)}\n x2={svgWidth - padding}\n y2={getCanvasY((calculatedMinY + calculatedMaxY) / 2)}\n stroke=\"#f3f4f6\"\n strokeWidth=\"1\"\n strokeDasharray=\"4\"\n />\n </>\n )}\n\n {/* Fill Area */}\n {fillPathData && (\n <path d={fillPathData} fill={fillColor} opacity={0.3} />\n )}\n\n {/* Data Path */}\n <path\n d={pathData}\n fill=\"none\"\n stroke={strokeColor}\n strokeWidth={hasData ? strokeWidth : 1}\n strokeLinejoin=\"round\"\n strokeLinecap=\"round\"\n />\n\n {/* Highlight Points */}\n {highlightPoints?.map((p, i) => (\n <circle\n key={i}\n cx={getCanvasX(p.x)}\n cy={getCanvasY(p.y)}\n r=\"3.5\"\n fill={p.color ?? \"#ef4444\"}\n className=\"pb:transition-all pb:duration-150 pb:hover:r-5 pb:cursor-crosshair\"\n >\n {p.label && <title>{p.label}</title>}\n </circle>\n ))}\n\n {/* Axis Labels */}\n {showAxisLabels && (\n <>\n {/* Bottom-left X min */}\n <text\n x={padding}\n y={svgHeight - 6}\n fontSize=\"10\"\n fill=\"#9ca3af\"\n textAnchor=\"start\"\n >\n {calculatedMinX}\n {xUnit}\n </text>\n {/* Bottom-right X max */}\n <text\n x={svgWidth - padding}\n y={svgHeight - 6}\n fontSize=\"10\"\n fill=\"#9ca3af\"\n textAnchor=\"end\"\n >\n {calculatedMaxX}\n {xUnit}\n </text>\n {/* Top-left Y max */}\n <text\n x={6}\n y={padding + 4}\n fontSize=\"10\"\n fill=\"#9ca3af\"\n textAnchor=\"start\"\n >\n {calculatedMaxY.toFixed(1)}\n </text>\n {/* Bottom-left Y min */}\n <text\n x={6}\n y={svgHeight - padding}\n fontSize=\"10\"\n fill=\"#9ca3af\"\n textAnchor=\"start\"\n >\n {calculatedMinY.toFixed(1)}\n </text>\n </>\n )}\n </svg>\n </div>\n );\n}\n"],"mappings":"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ACE,UAAWF,EACTd,GAAgBkB,CAAY,GAAKlB,GAAgB,GACjDD,GAAiBa,CAAa,GAAKb,GAAiB,QACpDQ,GAAUN,GAAcM,CAAM,EAC9BU,GAAS,WAAWA,CAAK,GACzBT,CACF,EACA,GAAGE,CACL,EACAD,CACF,CACF,EClKA,IAAAU,GAAkB,oBCsGd,IAAAC,EAAA,6BAjGSC,GAAY,CACvB,MAAO,kBACP,EAAG,uBACH,KAAM,iKACN,MAAO,uBACP,KAAM,yBACN,UAAW,wCACX,QAAS,qCACT,UACE,wdACF,aACE,sJACF,gBAAiB,8BACjB,OACE,uJACF,gBACE,uJACF,QACE,qcACF,WACE,utCACF,gBACE,6EACF,SACE,+kBACF,aACE,uIACF,KAAM,kLACN,aACE,8QACF,MAAO,WACP,aACE,oPACF,sBACE,wMACF,eAAgB,6BAChB,iBAAkB,8BAClB,eAAgB,wCAChB,iBAAkB,2CAClB,YACE,yQACF,IAAK,8DACL,KAAM,0EACN,mBACE,uMACF,OACE,gFACF,kBACE,8EACF,oBACE,mLACF,YACE,oeACF,UACE,8mBACF,QACE,wEACF,iBACE,wIACF,kBACE,wJACF,UACE,0UACF,eAAgB,6CAChB,oBACE,kGACF,aACE,4EACF,SACE,uGACF,WACE,uGACF,WACE,gMACF,sBACE,qJACF,aAAc,4BACd,cACE,+GACF,YACE,8GACF,OACE,2JACF,OACE,uJACF,KAAM,6OACN,KAAM,oBACN,KAAM,+FACN,OAAQ,8CACR,KAAM,+DACR,EAKaC,GAAe,CAC1B,OACE,oBACE,oBAAC,QAAK,EAAE,2LAA2L,KACnM,OAAC,QAAK,EAAE,sCAAsC,GAChD,EAEF,UACE,QAAC,KAAE,UAAU,4CACX,oBAAC,QACC,KAAK,UACL,OAAO,OACP,EAAE,4OACJ,KACA,OAAC,QACC,KAAK,UACL,OAAO,OACP,EAAE,kQACJ,KACA,OAAC,QACC,KAAK,UACL,OAAO,OACP,EAAE,oQACJ,KACA,OAAC,QACC,KAAK,UACL,OAAO,OACP,EAAE,iPACJ,GACF,EAEF,QACE,oBACE,oBAAC,UAAO,GAAG,KAAK,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","names":["src_exports","__export","Accordion","Alert","Anchor","AuthFormUI","Avatar","Button","Card","Checkbox","ChipGroup","CodeBlock","Collapsible","CopyButton","DEFAULT_PEERBOTS_SOCIAL_LINKS","Dialog","DialogClose","DialogDescription","DialogTitle","DistributionBarChart","DistributionHistogram","Dropdown","DropdownItem","DropdownSeparator","Dropzone","EmptyState","Field","FileUpload","Heading","HelperTooltip","Icon","Input","Label","LineGraph","Link","NumberField","PEERBOTS_COLOR_MAP","PEERBOTS_FONT_COLOR_MAP","PeerbotsColorSelector","Popover","PopoverClose","PopoverDescription","PopoverTitle","SEO","SearchInput","Select","Separator","SettingsPanel","Skeleton","Slider","SliderWithNumberField","SocialLinks","Spinner","Stepper","Switch","TabRadio","TabSelection","Text","TextArea","Tooltip","cn","iconPaths","useClipboard","__toCommonJS","styleInject","css","insertAt","head","style","styleInject","import_clsx","import_tailwind_merge","cn","inputs","import_react","headingSizes","headingColorClasses","textColorClasses","textSizeClasses","weightClasses","Heading","level","size","color","variant","weight","className","children","props","visualScale","resolvedColor","React","cn","Text","Component","align","resolvedSize","import_react","import_jsx_runtime","iconPaths","complexIcons","iconAliases","getIconNode","name","resolvedName","icons","_","prop","import_jsx_runtime","Icon","React","className","size","name","children","props","ref","sizes","iconContent","icons","cn","import_jsx_runtime","DEFAULT_PEERBOTS_SOCIAL_LINKS","SocialLinks","className","links","size","variant","sizeClasses","variantClasses","buttonSizeClasses","cn","link","iconName","Icon","import_react","import_jsx_runtime","CodeBlock","code","language","fileName","showLineNumbers","variant","showCopyButton","className","copied","setCopied","handleCopy","err","codeLines","isWindow","cn","Icon","line","idx","React","import_jsx_runtime","colorClasses","underlineClasses","Anchor","className","href","target","color","underline","variant","Component","render","children","props","ref","commonClass","cn","anchorProps","Link","import_react","import_jsx_runtime","variantColorMap","radiusClasses","Button","React","className","variant","color","size","radius","isLoading","leftIcon","rightIcon","children","disabled","render","nativeButton","isIconOnly","href","target","rel","props","ref","resolvedVariant","resolvedColor","resolvedRadius","isActuallyIconOnly","sizes","variantStyles","commonClasses","cn","content","BaseButton","import_react","import_jsx_runtime","Input","React","className","leftIcon","rightIcon","id","props","ref","inputClasses","cn","BaseInput","import_react","import_jsx_runtime","Select","React","className","options","propsId","value","defaultValue","onChange","disabled","placeholder","onFocus","ariaLabel","props","ref","generatedId","selectId","BaseSelect","val","details","event","cn","Icon","option","index","label","import_react","import_jsx_runtime","Slider","React","className","min","max","step","value","defaultValue","disabled","onChange","name","icon","ariaLabel","props","ref","handleChange","val","event","cn","BaseSlider","details","import_react","import_react","import_jsx_runtime","NumberField","React","className","value","defaultValue","min","max","step","onChange","disabled","readOnly","propsId","placeholder","showButtons","ariaLabel","props","ref","BaseNumberField","val","details","event","cn","Icon","import_jsx_runtime","SliderWithNumberField","React","className","min","max","step","value","defaultValue","disabled","onChange","inputWidth","showButtons","ariaLabel","props","ref","handleChange","val","event","newValue","widthClass","cn","Slider","NumberField","import_react","import_jsx_runtime","Dropdown","trigger","children","align","className","BaseMenu","React","cn","DropdownItem","props","ref","DropdownSeparator","import_react","import_jsx_runtime","Switch","React","checked","defaultChecked","onChange","disabled","className","externalId","props","ref","autoId","id","cn","BaseSwitch","eventDetails","import_react","import_jsx_runtime","Tooltip","content","children","className","delay","BaseTooltip","React","cn","HelperTooltip","Icon","import_jsx_runtime","Label","children","tooltip","className","props","cn","HelperTooltip","import_react","import_jsx_runtime","variantStyles","TabRadio","options","value","onChange","className","variant","ariaLabel","val","cn","option","import_react","import_jsx_runtime","Field","React","label","description","error","tooltip","children","className","icon","labelPlacement","labelWeight","props","ref","isHorizontal","labelOnRight","BaseField","cn","Label","import_react","import_jsx_runtime","TextArea","React","className","id","props","ref","BaseInput","cn","import_react","import_jsx_runtime","Checkbox","React","className","id","checked","onChange","props","ref","BaseCheckbox","val","cn","Icon","import_jsx_runtime","PEERBOTS_COLOR_MAP","PEERBOTS_FONT_COLOR_MAP","PeerbotsColorSelector","selectedColor","onColorSelect","colors","size","className","ariaLabelPrefix","sizeClasses","cn","colorName","isSelected","import_react","import_jsx_runtime","activeColorStyles","inactiveStyles","radiusClasses","sizeClasses","ChipGroup","options","controlledValue","defaultValue","onChange","multiple","controlledValues","defaultValues","onMultipleChange","color","variant","size","radius","scrollable","className","id","name","internalValue","setInternalValue","internalValues","setInternalValues","activeValue","activeValues","handleSelect","optionValue","disabled","nextValues","v","activeStyle","currentSize","cn","option","idx","isSelected","import_react","import_jsx_runtime","variantStyles","tintStyles","radiusClasses","paddingClasses","Card","React","children","className","variant","color","padding","radius","hoverable","id","Component","href","target","rel","rest","ref","baseStyles","hoverStyles","isLink","cn","import_react","import_jsx_runtime","Accordion","items","allowMultiple","variant","title","children","defaultOpen","controlledIsOpen","onToggle","className","headerClassName","contentClassName","baseId","resolvedItems","openIndices","setOpenIndices","initial","item","index","toggleItem","willBeOpen","prev","i","cn","isOpen","headingContent","bodyContent","headerId","panelId","Icon","Text","import_react","import_jsx_runtime","Collapsible","title","children","variant","defaultOpen","controlledIsOpen","onToggle","className","internalOpen","setInternalOpen","Accordion","nextOpen","React","import_separator","import_jsx_runtime","Separator","className","orientation","props","ref","BaseSeparator","cn","import_jsx_runtime","SettingsPanel","title","children","className","contentClassName","collapsible","defaultOpen","headingLevel","content","cn","Collapsible","Heading","Card","import_react","import_jsx_runtime","getInitials","name","trimmed","parts","colorTints","getHashColor","hash","i","index","Avatar","React","src","alt","size","shape","fallbackIcon","className","props","ref","imgError","setImgError","initials","accessibleAlt","sizeStyles","iconSizeStyles","shapeStyle","colorStyle","hasValidImage","cn","Icon","import_react","import_jsx_runtime","Dropzone","React","accept","maxSizeMB","disabled","controlledPreviewUrl","value","showPreview","previewType","title","subtitle","icon","onFileSelect","onFileRemove","onError","className","id","name","ref","inputRef","isDragging","setIsDragging","internalPreviewUrl","setInternalPreviewUrl","internalPreviewType","setInternalPreviewType","imageLoadError","setImageLoadError","generatedUrlRef","isVid","url","activePreviewUrl","handleFile","file","fileMB","msg","isImg","handleDragEnter","e","handleDragOver","handleDragLeave","handleDrop","handleClick","handleInputChange","handleRemove","isVideo","hasPreview","cn","Icon","Button","import_react","import_jsx_runtime","formatBytes","bytes","decimals","k","dm","sizes","i","FileUpload","React","accept","multiple","disabled","maxSizeBytes","buttonText","buttonVariant","buttonSize","buttonIcon","Icon","placeholder","clearable","value","onChange","onError","className","id","name","ref","inputRef","internalFiles","setInternalFiles","activeFiles","handleButtonClick","handleFileChange","e","selected","oversized","f","msg","handleClear","cn","Button","import_react","import_jsx_runtime","Dialog","open","onOpenChange","trigger","children","className","BaseDialog","eventDetails","React","cn","DialogTitle","props","DialogDescription","DialogClose","import_react","import_jsx_runtime","variantStyles","Popover","trigger","children","title","open","defaultOpen","onOpenChange","side","align","sideOffset","variant","showCloseButton","showArrow","className","BasePopover","nextOpen","React","cn","Icon","PopoverTitle","props","PopoverDescription","PopoverClose","import_jsx_runtime","Skeleton","className","props","cn","import_react","import_jsx_runtime","levelColorMap","iconMap","variantColorClasses","radiusClasses","Alert","color","level","variant","title","message","children","action","onClose","radius","className","visible","setVisible","resolvedColor","iconName","colorClass","colorStyle","handleDismiss","body","cn","Icon","Button","import_jsx_runtime","EmptyState","title","description","icon","primaryAction","secondaryAction","children","className","renderIcon","Icon","cn","Heading","Text","Button","import_react","import_jsx_runtime","sizeClasses","colorClasses","Spinner","React","size","color","label","className","props","ref","cn","import_react_dom","import_jsx_runtime","SubmitButton","label","pending","Button","AuthFormUI","mode","onModeChange","formAction","actionState","onGoogleSignIn","title","description","Heading","Text","Field","Input","Icon","import_jsx_runtime","TabSelection","tabs","activeTabId","onTabClick","onAddClick","className","tab","isActive","Button","e","Icon","import_react","import_jsx_runtime","SearchInput","React","className","value","defaultValue","onChange","onSearch","onClear","showClearButton","placeholder","onKeyDown","props","ref","internalRef","handleClear","handleKeyDown","e","hasValue","cn","Input","Icon","import_react","import_react","useClipboard","options","timeout","onSuccess","onError","copied","setCopied","error","setError","timerRef","copy","text","textarea","successful","err","copyError","import_jsx_runtime","CopyButton","React","value","label","successLabel","timeout","onCopied","onCopyError","copyIcon","successIcon","showIcon","variant","color","size","radius","isIconOnly","className","props","ref","copy","copied","useClipboard","currentIcon","Icon","currentLabel","Button","cn","import_jsx_runtime","colorBadgeStyles","Stepper","steps","activeStepId","onStepClick","orientation","color","size","className","activeIndex","s","colorStyle","resolveStatus","step","index","cn","idx","status","isCurrent","isComplete","isClickable","stepLabel","Icon","isLast","import_jsx_runtime","SEO","title","description","image","url","type","siteTitle","fullTitle","currentUrl","import_victory","import_jsx_runtime","DistributionBarChart","data","alt","chartWidth","chartHeight","average","referenceLineValue","referenceLineLabel","label","maxCount","d","labels","x","datum","labelText","import_victory","import_jsx_runtime","DistributionHistogram","data","alt","label","average","referenceLineValue","referenceLineLabel","chartWidth","chartHeight","binSize","maxLength","r","maxX","boundaries","i","x","datum","items","d","labelText","import_jsx_runtime","LineGraph","data","highlightPoints","minX","maxX","minY","maxY","width","height","strokeColor","strokeWidth","fillColor","showGrid","showAxisLabels","xUnit","padding","className","svgWidth","svgHeight","hasData","calculatedMinX","d","calculatedMaxX","xSpan","calculatedMinY","calculatedMaxY","ySpan","getCanvasX","x","getCanvasY","y","pathData","p","i","fillPathData","cn"]}
|