@3dverse/ui-lib 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +4 -4
- package/dist/index.mjs +3 -3
- package/dist/index.mjs.map +4 -4
- package/dist/sources/components/index.d.ts +20 -19
- package/dist/sources/components/index.d.ts.map +1 -1
- package/dist/sources/components/ui/accordion.d.ts +6 -1
- package/dist/sources/components/ui/accordion.d.ts.map +1 -1
- package/dist/sources/components/ui/badge.d.ts +17 -0
- package/dist/sources/components/ui/badge.d.ts.map +1 -0
- package/dist/sources/components/ui/bottom-sheet.d.ts +9 -1
- package/dist/sources/components/ui/bottom-sheet.d.ts.map +1 -1
- package/dist/sources/components/ui/button-tile.d.ts +9 -5
- package/dist/sources/components/ui/button-tile.d.ts.map +1 -1
- package/dist/sources/components/ui/button.d.ts +1 -1
- package/dist/sources/components/ui/button.d.ts.map +1 -1
- package/dist/sources/components/ui/data-item.d.ts +6 -0
- package/dist/sources/components/ui/data-item.d.ts.map +1 -1
- package/dist/sources/components/ui/dialog.d.ts +8 -1
- package/dist/sources/components/ui/dialog.d.ts.map +1 -1
- package/dist/sources/components/ui/dot-ping.d.ts +2 -0
- package/dist/sources/components/ui/dot-ping.d.ts.map +1 -1
- package/dist/sources/components/ui/empty-state.d.ts +2 -0
- package/dist/sources/components/ui/empty-state.d.ts.map +1 -1
- package/dist/sources/components/ui/icon.d.ts +2 -1
- package/dist/sources/components/ui/icon.d.ts.map +1 -1
- package/dist/sources/components/ui/loader.d.ts +2 -1
- package/dist/sources/components/ui/loader.d.ts.map +1 -1
- package/dist/sources/components/ui/menu.d.ts +16 -2
- package/dist/sources/components/ui/menu.d.ts.map +1 -1
- package/dist/sources/components/ui/overlay-container.d.ts +1 -2
- package/dist/sources/components/ui/overlay-container.d.ts.map +1 -1
- package/dist/sources/components/ui/popover.d.ts +7 -1
- package/dist/sources/components/ui/popover.d.ts.map +1 -1
- package/dist/sources/components/ui/scrollable-area.d.ts +2 -0
- package/dist/sources/components/ui/scrollable-area.d.ts.map +1 -1
- package/dist/sources/components/ui/slider.d.ts +2 -2
- package/dist/sources/components/ui/slider.d.ts.map +1 -1
- package/dist/sources/components/ui/switch.d.ts +3 -1
- package/dist/sources/components/ui/switch.d.ts.map +1 -1
- package/dist/sources/components/ui/tabs.d.ts +6 -1
- package/dist/sources/components/ui/tabs.d.ts.map +1 -1
- package/dist/sources/components/ui/tooltip.d.ts +6 -1
- package/dist/sources/components/ui/tooltip.d.ts.map +1 -1
- package/dist/styles/index.css +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../sources/components/3dverse/AppIcon/AppIcon.module.css", "../sources/components/3dverse/AppIcon/AppIcon.tsx", "../sources/components/3dverse/EntityComponent/EntityComponentBadge.tsx", "../sources/components/3dverse/EntityComponent/EntityComponentIcon.tsx", "../sources/components/3dverse/EntityComponent/entity_components.schema.json", "../sources/components/3dverse/EntityRecipe/EntityRecipe.tsx", "../sources/utils/css.ts", "../sources/components/3dverse/GlowEffect/GlowEffect.module.css", "../sources/components/3dverse/GlowEffect/GlowEffect.tsx", "../sources/components/3dverse/IsometricSchema/IsometricSchema.tsx", "../sources/components/3dverse/Logo3dverse.tsx", "../sources/components/3dverse/Spinner/Spinner.module.css", "../sources/components/3dverse/Spinner/Spinner.tsx", "../sources/components/3dverse/AssetIcon.tsx", "../sources/components/ui/icon.tsx", "../sources/components/3dverse/icon-asset-scene.tsx", "../sources/components/ui/accordion.tsx", "../sources/components/ui/bottom-sheet.tsx", "../sources/components/ui/button.tsx", "../sources/components/ui/button-tile.tsx", "../sources/components/ui/data-item.tsx", "../sources/components/ui/dialog.tsx", "../sources/components/ui/dot-ping.tsx", "../sources/components/ui/empty-state.tsx", "../sources/components/ui/island-panel.tsx", "../sources/components/ui/kbd.tsx", "../sources/components/ui/loader.tsx", "../sources/components/ui/menu.tsx", "../sources/components/ui/modal.tsx", "../sources/components/ui/panel.tsx", "../sources/components/ui/popover.tsx", "../sources/components/ui/scrollable-area.tsx", "../sources/components/ui/slider.tsx", "../sources/components/ui/switch.tsx", "../sources/components/ui/overlay-container.tsx", "../sources/components/ui/stack.tsx", "../sources/components/ui/tabs.tsx", "../sources/components/ui/text.tsx", "../sources/components/ui/toggle-button.tsx", "../sources/components/ui/tooltip.tsx"],
|
|
4
|
-
"sourcesContent": [".container {\n position: relative;\n overflow: hidden;\n display: block;\n width: 6rem;\n aspect-ratio: 1;\n\n background-image: linear-gradient(to top right, var(--gradient-from), var(--gradient-to));\n --border-radius: 30%;\n border-radius: var(--border-radius);\n corner-shape: squircle;\n\n &:after {\n content: \"\";\n position: absolute;\n bottom: -20%;\n left: 0px;\n width: 100%;\n height: 100%;\n\n background: #41c9e9aa;\n border-radius: inherit;\n corner-shape: inherit;\n filter: blur(200px);\n }\n}\n\n.inner {\n width: 100%;\n height: 100%;\n padding: 3%;\n}\n\n.innerShape {\n display: grid;\n grid-template-rows: repeat(2, minmax(0, 1fr));\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 10%;\n width: calc(100% - 6%);\n height: calc(100% - 6%);\n margin: 3%;\n padding: 10%;\n\n background-image: linear-gradient(to bottom right, var(--gradient-from), var(--gradient-to));\n border-radius: calc(var(--border-radius) + -3%);\n corner-shape: inherit;\n mix-blend-mode: overlay;\n overflow: hidden;\n}\n\n.shape {\n display: block;\n height: 100%;\n\n background-color: currentColor;\n border-color: currentColor;\n filter: brightness(1) hue-rotate(250deg) invert(1) saturate(1);\n}\n\n.shapeAlt {\n height: 200%;\n scale: 2;\n translate: 80% 0;\n}\n", "//------------------------------------------------------------------------------\nimport styles from \"./AppIcon.module.css\";\n\nconst appColorInventory = [\n \"#EDB5FB\",\n \"#FBB5B5\",\n \"#F4D35B\",\n \"#B5FBF7\",\n \"#B5DDFB\",\n \"#B5C2FB\",\n \"#CBB5FB\",\n \"#189AB4\",\n \"#75E6DA\",\n \"#D4F1F4\",\n \"#EF7C8E\",\n \"#FAE8E0\",\n \"#B6E2D3\",\n \"#D8A7B1\",\n \"#F6EEE0\",\n \"#E4B7A0\",\n \"#C38370\",\n \"#94DFE6\",\n \"#EBDCC7\",\n \"#B5EECB\",\n \"#DCC5C3\",\n \"#D6E1EB\",\n \"#ADC4D7\",\n \"#FACB80\",\n \"#FBD8B0\",\n \"#feb191\",\n \"#a2f9c6\",\n];\n\n//------------------------------------------------------------------------------\nexport const appIconShapes: Array<React.CSSProperties> = [\n // Square\n {},\n { borderWidth: \"2px\", borderStyle: \"solid\", borderColor: \"currentColor\", backgroundColor: \"transparent\" },\n { scale: \"0.75\" },\n { scale: \"0.5\" },\n\n // Round\n { borderRadius: \"9999px\" },\n {\n borderRadius: \"9999px\",\n borderWidth: \"2px\",\n borderStyle: \"solid\",\n borderColor: \"currentColor\",\n backgroundColor: \"transparent\",\n },\n { borderRadius: \"9999px\", height: \"50%\", translate: \"0 50%\" },\n { borderRadius: \"9999px\", scale: \"0.5\" },\n\n // Round angle\n { borderTopLeftRadius: \"9999px\", borderTopRightRadius: \"9999px\" },\n { borderTopRightRadius: \"9999px\", borderBottomRightRadius: \"9999px\" },\n { borderBottomRightRadius: \"9999px\", borderBottomLeftRadius: \"9999px\" },\n { borderTopLeftRadius: \"9999px\", borderBottomLeftRadius: \"9999px\" },\n\n // Round angle small\n { borderTopLeftRadius: \"9999px\", borderTopRightRadius: \"9999px\", height: \"50%\" },\n { borderTopRightRadius: \"9999px\", borderBottomRightRadius: \"9999px\", width: \"50%\" },\n { borderBottomRightRadius: \"9999px\", borderBottomLeftRadius: \"9999px\", height: \"50%\" },\n { borderTopLeftRadius: \"9999px\", borderBottomLeftRadius: \"9999px\", width: \"50%\" },\n\n // Oval\n { borderBottomRightRadius: \"9999px\", borderTopLeftRadius: \"9999px\" },\n { borderBottomLeftRadius: \"9999px\", borderTopRightRadius: \"9999px\" },\n {},\n {},\n\n // Quarter circle (elliptical border-radius)\n { borderRadius: \"100% 0% 100% 0% / 100% 100% 0% 0%\" },\n { borderRadius: \"100% 0% 100% 0% / 100% 100% 0% 0%\", transform: \"rotate(180deg)\" },\n { borderRadius: \"100% 0% 100% 0% / 100% 100% 0% 0%\", transform: \"rotate(180deg) scaleY(-1)\" },\n { borderRadius: \"100% 0% 100% 0% / 100% 100% 0% 0%\", transform: \"scaleY(-1)\" },\n\n // Losange (diamond)\n { clipPath: \"polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)\" },\n // Pentagon\n { clipPath: \"polygon(50% 0%, 100% 38%, 82% 100%, 18% 100%, 0% 38%)\" },\n // Heart (SVG path clip)\n {\n clipPath:\n 'path(\"M12 4.248c-3.148-5.402-12-3.825-12 2.944 0 4.661 5.571 9.427 12 15.808 6.43-6.381 12-11.147 12-15.808 0-6.792-8.875-8.306-12-2.944z\")',\n },\n // Triangle\n { clipPath: \"polygon(0 0, 0% 100%, 100% 100%)\" },\n // Angle\n { clipPath: \"polygon(61% 50%, 100% 0, 100% 100%, 0% 100%)\" },\n\n // Example from comment (kept as a note, not active):\n // { width: 0, height: 0, borderTopWidth: \"50%\", borderTopColor: \"transparent\", borderLeftWidth: \"75%\", borderLeftColor: \"red\", borderBottomWidth: \"50%\", borderBottomColor: \"transparent\", borderStyle: \"solid\" },\n];\n\n//------------------------------------------------------------------------------\nconst SHAPE_COUNT = appIconShapes.length;\nconst COLOR_COUNT = appColorInventory.length;\n// Note: 90deg is forbidden otherwise shapes look like smiley :)\nconst ROTATIONS = [0, 180, 270];\n\nconst RANDOM_1 = 101;\nconst RANDOM_2 = 200;\nconst RANDOM_3 = 301;\n\n//------------------------------------------------------------------------------\nexport const AppIcon = ({\n id,\n shape,\n colors,\n className,\n style,\n}: {\n id?: string;\n shape?: number[];\n colors?: number[];\n className?: string;\n style?: React.CSSProperties;\n}) => {\n //--------------------------------------------------------------------------\n const _id = Number(id?.replace(/\\D/g, \"\").replace(/-/g, \"\"));\n\n const _colors = [\n appColorInventory[colors?.[0] ?? Math.floor((_id % RANDOM_1) % COLOR_COUNT)],\n appColorInventory[colors?.[1] ?? Math.floor((_id % RANDOM_2) % COLOR_COUNT)],\n appColorInventory[colors?.[2] ?? Math.floor((_id % RANDOM_3) % COLOR_COUNT)],\n ];\n\n const _shape = shape || [\n Math.floor((_id % RANDOM_1) % SHAPE_COUNT),\n Math.floor((_id % RANDOM_2) % SHAPE_COUNT),\n Math.floor((_id % RANDOM_3) % SHAPE_COUNT),\n ];\n\n const rotation = ROTATIONS[(_id % RANDOM_1) % ROTATIONS.length];\n\n //--------------------------------------------------------------------------\n return (\n <div\n role=\"img\"\n aria-label=\"Project icon\"\n className={`${styles.container} ${className}`}\n style={\n {\n \"--gradient-from\": _colors[1],\n \"--gradient-to\": _colors[2],\n \"--gradient-stops\": \"var(--gradient-from), var(--gradient-to)\",\n ...style,\n } as React.CSSProperties\n }\n >\n <div\n className={styles.innerShape}\n style={{\n color: _colors[0],\n rotate: `${rotation}deg`,\n }}\n >\n <span\n className={styles.shape}\n style={{\n ...appIconShapes[_shape[0]],\n boxShadow:\n \"5px 0px 0px 6px color-mix(in srgb, currentColor 40%, transparent), 4px 0px 0px 32px color-mix(in srgb, currentColor 30%, transparent)\",\n }}\n />\n <span className={`${styles.shape} ${styles.shapeAlt}`} style={appIconShapes[_shape[1]]} />\n <span className={styles.shape} style={appIconShapes[_shape[2]]} />\n </div>\n </div>\n );\n};\n", "import { entityComponents as entityComponentStyles } from \"@3dverse/design-tokens\";\nimport { Icon, cn } from \"@3dverse/ui-lib\";\n\nimport { EntityComponentIcon } from \"./EntityComponentIcon\";\nimport componentSchemas from \"./entity_components.schema.json\";\n\n//------------------------------------------------------------------------------\nexport const EntityComponentBadge = ({\n name,\n hasLinkToReference = false,\n className,\n}: {\n name: string;\n hasLinkToReference?: boolean;\n className?: string;\n}) => {\n //--------------------------------------------------------------------------\n const schema = componentSchemas.properties[name as keyof typeof componentSchemas.properties];\n const style = entityComponentStyles[name as keyof typeof entityComponentStyles];\n\n // htmlTitle is not used anymore\n const htmlTitle =\n name === \"*_geometry\"\n ? \"box_geometry; capsule_geometry; cylinder_geometry; plane_geometry; sphere_geometry\"\n : name;\n\n //--------------------------------------------------------------------------\n if (!schema || !style) {\n return <span>{name}</span>;\n }\n const { color } = style;\n\n const referenceUrl =\n name === \"*_geometry\" ? `/references/entity-components#box_geometry` : `/references/entity-components#${name}`;\n\n //----------------------------------------------------------------------\n return (\n <span\n className={cn(\n \"no-underline! inline-flex items-baseline gap-2 w-fit my-0 me-1\",\n \"text-[90%] font-medium tracking-wide rounded-full whitespace-nowrap cursor-default\",\n \"bg-current/10 border border-transparent has-[.link-to-ref:hover]:border-current/20 transition-colors\",\n !hasLinkToReference && \"pr-3\",\n className,\n )}\n style={{\n color: color,\n }}\n >\n <EntityComponentIcon componentId={name} className=\"h-5 text-4xs\" />\n <span className=\"text-primary\">{schema?.title}</span>\n {hasLinkToReference && (\n <a\n href={referenceUrl}\n className=\"link-to-ref px-1 mr-0.5 h-full text-xs text-current! rounded-full opacity-70 hover:opacity-100 hover:bg-ground/50 transition-all\"\n >\n <Icon className=\"fal fa-external-link-square text-sm\" />\n </a>\n )}\n </span>\n );\n};\n", "import { entityComponents as entityComponentStyles } from \"@3dverse/design-tokens\";\nimport { Icon, cn } from \"@3dverse/ui-lib\";\n\n//------------------------------------------------------------------------------\nexport const EntityComponentIcon = ({\n componentId,\n variant = \"default\",\n style,\n className = \"\",\n}: {\n componentId: string;\n variant?: \"default\" | \"special\";\n style?: React.CSSProperties;\n className?: string;\n}) => {\n if (!entityComponentStyles[componentId as keyof typeof entityComponentStyles]) {\n return <>{componentId}</>;\n }\n\n //--------------------------------------------------------------------------\n const { color, fontAwesome } = entityComponentStyles[componentId as keyof typeof entityComponentStyles];\n console.log(color, fontAwesome);\n\n //--------------------------------------------------------------------------\n if (!fontAwesome) {\n return <>{componentId}</>;\n }\n\n //--------------------------------------------------------------------------\n return (\n <Icon\n className={cn(\n \"flex! justify-center items-center h-[2.5em] w-auto! aspect-square shrink-0 text-base text-current bg-current/20 rounded-full\",\n \"fal\",\n fontAwesome,\n className,\n )}\n style={{\n color: color,\n boxShadow:\n variant === \"special\"\n ? \"0 0 10px color-mix(in srgb, var(--entity-component-color), var(--color-bg-underground) 100%), 20px 0 0px -11px color-mix(in srgb, currentcolor, transparent 85%), -20px 0 0px -11px color-mix(in srgb, currentcolor, transparent 85%)\"\n : undefined,\n ...style,\n }}\n />\n );\n};\n", "{\"properties\":{\"animation_controller\":{\"description\":\"Drives skeletal animation using an Animation Graph and Animation Set; animates descendant skinned meshes whose skeletons are compatible with the set.\",\"properties\":{\"animationGraphRef\":{\"description\":\"Referenced Animation Graph (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Animation Graph Ref\",\"type\":\"string\",\"x-asset-ref\":\"animation_graph\",\"x-display-type\":\"UUID\"},\"animationSetRef\":{\"description\":\"Referenced Animation Set (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Animation Set Ref\",\"type\":\"string\",\"x-asset-ref\":\"animation_set\",\"x-display-type\":\"UUID\"},\"dataJSON\":{\"description\":\"Animation Graph input parameters in JSON format.\",\"title\":\"Data Json\",\"type\":\"object\",\"x-display-type\":\"JSON\"},\"rootBoneEntityRef\":{\"description\":\"Entity containing the Bone component for the skeleton's root bone.\",\"properties\":{\"linkage\":{\"default\":[],\"items\":{\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"},\"type\":\"array\"},\"originalEUID\":{\"default\":\"00000000-0000-0000-0000-000000000000\",\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"}},\"required\":[\"originalEUID\",\"linkage\"],\"title\":\"Root Bone Entity Ref\",\"type\":\"object\",\"x-display-type\":\"Entity Reference\"},\"rootMotionEnabled\":{\"default\":false,\"description\":\"Enable root motion extraction and application to the entity transform.\",\"title\":\"Root Motion Enabled\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"}},\"title\":\"Animation Controller\",\"type\":\"object\",\"x-category\":\"animation\"},\"animation_sequence_controller\":{\"description\":\"Controls playback of an Animation Sequence; assigns tracks to entities.\",\"properties\":{\"animationSequenceRef\":{\"description\":\"Referenced Animation Sequence (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Animation Sequence Ref\",\"type\":\"string\",\"x-asset-ref\":\"animation_sequence\",\"x-display-type\":\"UUID\"},\"entities\":{\"additionalProperties\":{\"properties\":{\"linkage\":{\"default\":[],\"items\":{\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"},\"type\":\"array\"},\"originalEUID\":{\"default\":\"00000000-0000-0000-0000-000000000000\",\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"}},\"required\":[\"originalEUID\",\"linkage\"],\"type\":\"object\",\"x-display-type\":\"Entity Reference\"},\"description\":\"Map from track UUID to assigned entity.\",\"title\":\"Entities\",\"type\":\"object\"},\"loop\":{\"default\":false,\"description\":\"Loop playback when reaching the stop offset.\",\"title\":\"Loop\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"playbackSpeed\":{\"default\":1,\"description\":\"Playback speed multiplier. Negative values play in reverse.\",\"format\":\"float\",\"title\":\"Playback Speed\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"startOffset\":{\"default\":0,\"description\":\"Normalized start offset [0, 1].\",\"format\":\"float\",\"maximum\":1,\"minimum\":0,\"title\":\"Start Offset\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"stopOffset\":{\"default\":1,\"description\":\"Normalized stop offset [0, 1]. When looping, playback wraps to startOffset at this point.\",\"format\":\"float\",\"maximum\":1,\"minimum\":0,\"title\":\"Stop Offset\",\"type\":\"number\",\"x-display-type\":\"Float\"}},\"title\":\"Animation Sequence Controller\",\"type\":\"object\",\"x-category\":\"animation\"},\"bone\":{\"description\":\"Associates this entity with a bone in a skeleton (for attachments and transforms).\",\"properties\":{\"boneIndex\":{\"description\":\"Zero-based index of this bone within the bound skeleton.\",\"format\":\"int32\",\"minimum\":0,\"title\":\"Bone Index\",\"type\":\"integer\",\"x-display-type\":\"Unsigned Integer\"}},\"title\":\"Bone\",\"type\":\"object\",\"x-category\":\"animation\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"box_geometry\":{\"description\":\"Box geometry.\",\"properties\":{\"dimension\":{\"default\":[1,1,1],\"description\":\"Box dimensions (width, height, depth) in meters.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Dimension\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"m\"},\"offset\":{\"default\":[0,0,0],\"description\":\"Local offset of the geometry origin (meters).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Offset\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"m\"}},\"title\":\"Box Geometry\",\"type\":\"object\",\"x-category\":\"geometry\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"camera\":{\"description\":\"Virtual camera.\",\"properties\":{\"dataJSON\":{\"description\":\"Render Graph input parameters in JSON; schema defined by renderGraphRef.\",\"title\":\"Data Json\",\"type\":\"object\",\"x-display-type\":\"JSON\"},\"renderGraphRef\":{\"description\":\"Referenced render graph to use for rendering from this camera.\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Render Graph Ref\",\"type\":\"string\",\"x-asset-ref\":\"render_graph\",\"x-display-type\":\"UUID\"},\"renderTargetIndex\":{\"default\":-1,\"description\":\"Index of the render target to blit/output to. -1 indicates the default target.\",\"format\":\"int32\",\"title\":\"Render Target Index\",\"type\":\"integer\",\"x-display-type\":\"Integer\"}},\"title\":\"Camera\",\"type\":\"object\",\"x-category\":\"camera\",\"x-requires\":{\"allOf\":[\"local_transform\"],\"oneOf\":[\"orthographic_lens\",\"perspective_lens\",\"custom_lens\"]}},\"capsule_geometry\":{\"description\":\"Capsule geometry.\",\"properties\":{\"axis\":{\"default\":1,\"description\":\"Alignment axis of the capsule: 0=X, 1=Y, 2=Z.\",\"format\":\"int32\",\"oneOf\":[{\"const\":0,\"description\":\"Capsule is aligned with the X Axis.\",\"title\":\"X-Axis\"},{\"const\":1,\"description\":\"Capsule is aligned with the Y Axis.\",\"title\":\"Y-Axis\"},{\"const\":2,\"description\":\"Capsule is aligned with the Z Axis.\",\"title\":\"Z-Axis\"}],\"title\":\"Axis\",\"type\":\"integer\",\"x-display-type\":\"Integer\"},\"height\":{\"default\":1,\"description\":\"Height of the cylindrical mid-section (meters).\",\"format\":\"float\",\"title\":\"Height\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"offset\":{\"default\":[0,0,0],\"description\":\"Local offset of the geometry origin (meters).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Offset\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"m\"},\"radius\":{\"default\":0.5,\"description\":\"Radius of the hemispherical ends (meters).\",\"format\":\"float\",\"title\":\"Radius\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"}},\"title\":\"Capsule Geometry\",\"type\":\"object\",\"x-category\":\"geometry\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"character_controller\":{\"description\":\"Kinematic character controller for collision-constrained movement without a rigid body. Uses tuned collision handling for responsive control.\",\"properties\":{\"skinWidth\":{\"default\":0,\"description\":\"Collision skin width (meters).\",\"format\":\"float\",\"title\":\"Skin Width\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"slopeLimit\":{\"default\":45,\"description\":\"Maximum walkable slope (degrees). Slopes steeper than this are not walkable.\",\"format\":\"float\",\"title\":\"Slope Limit\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"deg\"},\"stepOffset\":{\"default\":0,\"description\":\"Maximum climbable step height. Steps higher than this cannot be climbed automatically.\",\"format\":\"float\",\"title\":\"Step Offset\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"}},\"title\":\"Character Controller\",\"type\":\"object\",\"x-category\":\"physics\",\"x-requires\":{\"allOf\":[\"local_transform\",\"physics_material\"],\"oneOf\":[\"box_geometry\",\"capsule_geometry\"]}},\"collision_geometry_ref\":{\"description\":\"Reference to a collision geometry asset used by physics.\",\"properties\":{\"collisionGeometryRef\":{\"description\":\"Referenced collision geometry (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Collision Geometry Ref\",\"type\":\"string\",\"x-asset-ref\":\"collision_geometry\",\"x-display-type\":\"UUID\"}},\"title\":\"Collision Geometry Reference\",\"type\":\"object\",\"x-category\":\"physics\",\"x-requires\":{\"allOf\":[\"local_transform\",\"physics_material\"]}},\"constraint\":{\"description\":\"6-DoF constraint built on a Joint. Defaults to fixed; selectively unlock translation and rotation on X/Y/Z and configure limits and springs.\",\"properties\":{\"motionLimitSpringDamping\":{\"default\":[0,0,0],\"description\":\"Linear limit spring damping per axis (N\u00B7s/m).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Motion Limit Spring Damping\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"N.s/m\"},\"motionLimitSpringStiffness\":{\"default\":[0,0,0],\"description\":\"Linear limit spring stiffness per axis (N/m). >0 makes the limit soft (spring-like).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Motion Limit Spring Stiffness\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"N/m\"},\"motionLowerLimit\":{\"default\":[0,0,0],\"description\":\"Lower linear limit per axis (meters).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Motion Lower Limit\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"m\"},\"motionUpperLimit\":{\"default\":[0,0,0],\"description\":\"Upper linear limit per axis (meters).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Motion Upper Limit\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"m\"},\"swingLimitAngle\":{\"default\":[0,0],\"description\":\"Swing cone half-angles about Y and Z of the constraint frame (degrees). 0 does not restrict rotation; max 180. Used if either swing axis is limited.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":2,\"minItems\":2,\"title\":\"Swing Limit Angle\",\"type\":\"array\",\"x-display-type\":\"Vector2\",\"x-unit\":\"deg\"},\"swingSpringDamping\":{\"default\":0,\"description\":\"Swing limit spring damping (N\u00B7m\u00B7s/rad).\",\"format\":\"float\",\"title\":\"Swing Spring Damping\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"N.m.s/rad\"},\"swingSpringStiffness\":{\"default\":0,\"description\":\"Swing limit spring stiffness (N\u00B7m/rad). >0 makes the limit soft.\",\"format\":\"float\",\"title\":\"Swing Spring Stiffness\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"N.m/rad\"},\"twistLimitAngle\":{\"default\":[0,0],\"description\":\"Twist angle limits (min,max) around the twist axis (degrees). Range (\u2212360, 360).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":2,\"minItems\":2,\"title\":\"Twist Limit Angle\",\"type\":\"array\",\"x-display-type\":\"Vector2\",\"x-unit\":\"deg\"},\"twistSpringDamping\":{\"default\":0,\"description\":\"Twist limit spring damping (N\u00B7m\u00B7s/rad).\",\"format\":\"float\",\"title\":\"Twist Spring Damping\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"N.m.s/rad\"},\"twistSpringStiffness\":{\"default\":0,\"description\":\"Twist limit spring stiffness (N\u00B7m/rad). >0 makes the limit soft.\",\"format\":\"float\",\"title\":\"Twist Spring Stiffness\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"N.m/rad\"},\"unlockedMotion\":{\"default\":0,\"description\":\"Unlock motion along/around the specified axes.\",\"format\":\"int32\",\"minimum\":0,\"title\":\"Unlocked Motion\",\"type\":\"integer\",\"x-bitFlags\":[{\"description\":\"Unlock motion along the X axis.\",\"name\":\"Along X\",\"value\":1},{\"description\":\"Unlock motion along the Y axis.\",\"name\":\"Along Y\",\"value\":2},{\"description\":\"Unlock motion along the Z axis.\",\"name\":\"Along Z\",\"value\":4},{\"description\":\"Unlock motion around the X axis.\",\"name\":\"Around X\",\"value\":8},{\"description\":\"Unlock motion around the Y axis.\",\"name\":\"Around Y\",\"value\":16},{\"description\":\"Unlock motion around the Z axis.\",\"name\":\"Around Z\",\"value\":32}],\"x-display-type\":\"Unsigned Integer\"}},\"title\":\"Constraint\",\"type\":\"object\",\"x-category\":\"physics\",\"x-requires\":{\"allOf\":[\"joint\"]}},\"constraint_actuator\":{\"description\":\"Drives a Constraint toward target position/orientation and velocities using configurable stiffness, damping, and force limits.\",\"properties\":{\"angularDamping\":{\"default\":[0,0,0],\"description\":\"Angular drive damping per axis (N\u00B7m\u00B7s/rad).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Angular Damping\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"N.m.s/rad\"},\"angularForceLimit\":{\"default\":[-1,-1,-1],\"description\":\"Max angular drive torque/impulse per axis (N\u00B7m). \u22121 = unlimited.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Angular Force Limit\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"N.m\"},\"angularStiffness\":{\"default\":[0,0,0],\"description\":\"Angular drive stiffness per axis (N\u00B7m/rad). >0 applies spring torque toward the goal.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Angular Stiffness\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"N.m/rad\"},\"angularVelocity\":{\"default\":[0,0,0],\"description\":\"Target angular velocity (rad/s).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Angular Velocity\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"rad/s\"},\"goalOrientation\":{\"default\":[0,0,0,1],\"description\":\"Target angular orientation.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":4,\"minItems\":4,\"title\":\"Goal Orientation\",\"type\":\"array\",\"x-display-type\":\"Quaternion\"},\"goalPosition\":{\"default\":[0,0,0],\"description\":\"Target linear position offset (meters).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Goal Position\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"m\"},\"linearDamping\":{\"default\":[0,0,0],\"description\":\"Linear drive damping per axis (N\u00B7s/m).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Linear Damping\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"N.s/m\"},\"linearForceLimit\":{\"default\":[-1,-1,-1],\"description\":\"Max linear drive force/impulse per axis (N). \u22121 = unlimited.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Linear Force Limit\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"N\"},\"linearStiffness\":{\"default\":[0,0,0],\"description\":\"Linear drive stiffness per axis (N/m). >0 applies spring force toward the goal.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Linear Stiffness\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"N/m\"},\"linearVelocity\":{\"default\":[0,0,0],\"description\":\"Target linear velocity (m/s).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Linear Velocity\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"m/s\"},\"type\":{\"default\":1,\"description\":\"Drive type: apply as force or as acceleration.\",\"format\":\"int32\",\"oneOf\":[{\"const\":0,\"title\":\"FORCE\"},{\"const\":1,\"title\":\"ACCELERATION\"}],\"title\":\"Type\",\"type\":\"integer\",\"x-display-type\":\"Integer\"}},\"title\":\"Constraint Actuator\",\"type\":\"object\",\"x-category\":\"physics\",\"x-requires\":{\"allOf\":[\"constraint\"]}},\"culling_geometry\":{\"description\":\"Enables culling using a simple analytic shape. Add alongside a geometry component (box, cylinder, plane, sphere).\",\"properties\":{\"isAdditive\":{\"default\":true,\"description\":\"Additive: show elements inside the geometry. Subtractive: show elements outside the geometry.\",\"title\":\"Is Additive\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"}},\"title\":\"Culling Geometry\",\"type\":\"object\",\"x-category\":\"rendering\",\"x-requires\":{\"allOf\":[\"local_transform\"],\"oneOf\":[\"box_geometry\",\"cylinder_geometry\",\"plane_geometry\",\"sphere_geometry\"]}},\"custom_lens\":{\"description\":\"Custom projection lens using an explicit projection matrix.\",\"properties\":{\"cs_from_vs\":{\"description\":\"Projection matrix mapping view-space to clip-space (cs_from_vs).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":16,\"minItems\":16,\"title\":\"Cs From Vs\",\"type\":\"array\",\"x-display-type\":\"Matrix4\"}},\"title\":\"Custom Lens\",\"type\":\"object\",\"x-category\":\"camera\",\"x-requires\":{\"allOf\":[\"camera\"]}},\"cylinder_geometry\":{\"description\":\"Cylinder geometry.\",\"properties\":{\"axis\":{\"default\":1,\"description\":\"Alignment axis of the cylinder: 0=X, 1=Y, 2=Z.\",\"format\":\"int32\",\"oneOf\":[{\"const\":0,\"description\":\"Cylinder is aligned with the X Axis.\",\"title\":\"X-Axis\"},{\"const\":1,\"description\":\"Cylinder is aligned with the Y Axis.\",\"title\":\"Y-Axis\"},{\"const\":2,\"description\":\"Cylinder is aligned with the Z Axis.\",\"title\":\"Z-Axis\"}],\"title\":\"Axis\",\"type\":\"integer\",\"x-display-type\":\"Integer\"},\"height\":{\"default\":1,\"description\":\"Height of the cylinder (meters).\",\"format\":\"float\",\"title\":\"Height\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"offset\":{\"default\":[0,0,0],\"description\":\"Local offset of the geometry origin (meters).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Offset\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"m\"},\"radius\":{\"default\":0.5,\"description\":\"Radius of the cylinder (meters).\",\"format\":\"float\",\"title\":\"Radius\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"}},\"title\":\"Cylinder Geometry\",\"type\":\"object\",\"x-category\":\"geometry\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"debug_name\":{\"description\":\"Human-readable name of the entity.\",\"properties\":{\"value\":{\"description\":\"Entity name.\",\"title\":\"Value\",\"type\":\"string\",\"x-display-type\":\"String\"}},\"title\":\"Name\",\"type\":\"object\",\"x-category\":\"core\"},\"decal_projector\":{\"description\":\"Projects a material onto scene surfaces within the projector's box volume.\",\"properties\":{\"zIndex\":{\"default\":0,\"description\":\"Z-index ordering for decal rendering; higher values render on top of lower ones.\",\"format\":\"int32\",\"title\":\"Z Index\",\"type\":\"integer\",\"x-display-type\":\"Integer\"}},\"title\":\"Decal Projector\",\"type\":\"object\",\"x-category\":\"rendering\",\"x-requires\":{\"allOf\":[\"local_transform\",\"material_ref\",\"box_geometry\"]}},\"environment\":{\"description\":\"Scene environment settings, including skybox background and precomputed image-based lighting (IBL). This component is only applied in the scene where this entity lives, it is discarded for subscenes.\",\"properties\":{\"irradianceUUID\":{\"description\":\"Diffuse irradiance cubemap used for ambient PBR lighting.\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Irradiance Uuid\",\"type\":\"string\",\"x-asset-ref\":\"cubemap\",\"x-display-type\":\"UUID\"},\"radianceUUID\":{\"description\":\"Specular radiance cubemap (prefiltered) used for PBR reflections.\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Radiance Uuid\",\"type\":\"string\",\"x-asset-ref\":\"cubemap\",\"x-display-type\":\"UUID\"},\"skyboxUUID\":{\"description\":\"Skybox cubemap used as the scene background (no lighting effect).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Skybox Uuid\",\"type\":\"string\",\"x-asset-ref\":\"cubemap\",\"x-display-type\":\"UUID\"}},\"title\":\"Environment\",\"type\":\"object\",\"x-category\":\"lighting\"},\"euid\":{\"description\":\"Unique identifier for the entity.\",\"properties\":{\"value\":{\"description\":\"Unique identifier value.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"title\":\"Value\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"}},\"readOnly\":true,\"required\":[\"value\"],\"title\":\"Entity UID\",\"type\":\"object\",\"x-category\":\"core\"},\"joint\":{\"description\":\"Base joint connecting two bodies. By default locks relative position and orientation between constrainer and constrainee.\",\"properties\":{\"breakForce\":{\"default\":10000000000000000,\"description\":\"Break force threshold (Newtons).\",\"format\":\"float\",\"title\":\"Break Force\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"N\"},\"breakTorque\":{\"default\":10000000000000000,\"description\":\"Break torque threshold (N\u00B7m).\",\"format\":\"float\",\"title\":\"Break Torque\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"N.m\"},\"constrainee\":{\"description\":\"Entity with a Rigid Body to be constrained.\",\"properties\":{\"linkage\":{\"default\":[],\"items\":{\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"},\"type\":\"array\"},\"originalEUID\":{\"default\":\"00000000-0000-0000-0000-000000000000\",\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"}},\"required\":[\"originalEUID\",\"linkage\"],\"title\":\"Constrainee\",\"type\":\"object\",\"x-display-type\":\"Entity Reference\",\"x-required-components\":[\"rigid_body\"]},\"constrainer\":{\"description\":\"Entity acting as constrainer (rigid/static) or null to constrain to world origin.\",\"properties\":{\"linkage\":{\"default\":[],\"items\":{\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"},\"type\":\"array\"},\"originalEUID\":{\"default\":\"00000000-0000-0000-0000-000000000000\",\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"}},\"required\":[\"originalEUID\",\"linkage\"],\"title\":\"Constrainer\",\"type\":\"object\",\"x-display-type\":\"Entity Reference\"},\"enableCollision\":{\"default\":false,\"description\":\"Enable collision between constrainer and constrainee bodies.\",\"title\":\"Enable Collision\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"}},\"title\":\"Joint\",\"type\":\"object\",\"x-category\":\"physics\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"label\":{\"description\":\"Displays an editor-only label in the 3D view.\",\"properties\":{\"camera\":{\"default\":[0,0,0,0,0,0,1],\"description\":\"Camera framing parameters for navigating to the label.\",\"items\":{\"format\":\"float\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"title\":\"Camera\",\"type\":\"array\"},\"description\":{\"description\":\"Label description text.\",\"title\":\"Description\",\"type\":\"string\",\"x-display-type\":\"String\"},\"speed\":{\"default\":15,\"description\":\"Camera travel speed (meters/second).\",\"format\":\"float\",\"title\":\"Speed\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"title\":{\"description\":\"Label title text.\",\"title\":\"Title\",\"type\":\"string\",\"x-display-type\":\"String\"}},\"title\":\"Label\",\"type\":\"object\",\"x-category\":\"editor\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"lineage\":{\"description\":\"Records the entity's lineage through linkers and parentage.\",\"properties\":{\"ordinal\":{\"default\":0,\"description\":\"Ordinal index among siblings (editor-only).\",\"format\":\"int32\",\"title\":\"Ordinal\",\"type\":\"integer\",\"x-display-type\":\"Integer\"},\"parentUUID\":{\"description\":\"UUID of this entity's parent (default is root).\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"title\":\"Parent Uuid\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"}},\"title\":\"Lineage\",\"type\":\"object\",\"x-category\":\"core\"},\"local_aabb\":{\"description\":\"Local-space axis-aligned bounding box.\",\"properties\":{\"max\":{\"description\":\"Local AABB maximum corner (x,y,z).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Max\",\"type\":\"array\",\"x-display-type\":\"Vector3\"},\"min\":{\"description\":\"Local AABB minimum corner (x,y,z).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Min\",\"type\":\"array\",\"x-display-type\":\"Vector3\"}},\"title\":\"Local AABB\",\"type\":\"object\",\"x-category\":\"core\"},\"local_transform\":{\"description\":\"Local transform of the entity (position, orientation, scale).\",\"properties\":{\"eulerOrientation\":{\"default\":[0,0,0],\"description\":\"Local orientation as Euler angles (editor-only).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Orientation\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"deg\"},\"globalEulerOrientation\":{\"default\":[0,0,0],\"description\":\"Last global orientation entered by a user as Euler angles (may be invalid; editor-only).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Global Euler Orientation\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"deg\"},\"orientation\":{\"default\":[0,0,0,1],\"description\":\"Local orientation as a quaternion.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":4,\"minItems\":4,\"title\":\"Orientation\",\"type\":\"array\",\"x-display-type\":\"Quaternion\"},\"position\":{\"default\":[0,0,0],\"description\":\"Local position (x, y, z) in meters.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Position\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"m\"},\"scale\":{\"default\":[1,1,1],\"description\":\"Local non-uniform scale (x, y, z).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Scale\",\"type\":\"array\",\"x-display-type\":\"Vector3\"}},\"title\":\"Transform\",\"type\":\"object\",\"x-category\":\"core\"},\"material\":{\"description\":\"Assigns a shader to the entity's mesh and provides its input values and specialization constants.\",\"properties\":{\"constantsJSON\":{\"description\":\"Specialization constants (JSON); schema defined by shaderRef.\",\"title\":\"Constants Json\",\"type\":\"object\",\"x-display-type\":\"JSON\"},\"dataJSON\":{\"description\":\"Shader input values (JSON); schema defined by shaderRef.\",\"title\":\"Data Json\",\"type\":\"object\",\"x-display-type\":\"JSON\"},\"isDoubleSided\":{\"default\":false,\"description\":\"Render both front and back faces (double-sided).\",\"title\":\"Is Double Sided\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"shaderRef\":{\"description\":\"Referenced shader (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Shader Ref\",\"type\":\"string\",\"x-asset-ref\":\"shader\",\"x-display-type\":\"UUID\"}},\"title\":\"Material\",\"type\":\"object\",\"x-category\":\"rendering\",\"x-requires\":{\"allOf\":[\"mesh_ref\"]}},\"material_ref\":{\"description\":\"Reference to a material to use for rendering.\",\"properties\":{\"faceCulling\":{\"default\":0,\"description\":\"Face culling override: 0 = inherit from material, 1 = single-sided, 2 = double-sided.\",\"format\":\"int32\",\"oneOf\":[{\"const\":0,\"title\":\"Inherit from material\"},{\"const\":1,\"title\":\"Single Sided\"},{\"const\":2,\"title\":\"Double Sided\"}],\"title\":\"Face Culling\",\"type\":\"integer\",\"x-display-type\":\"Integer\"},\"value\":{\"description\":\"Referenced material (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Value\",\"type\":\"string\",\"x-asset-ref\":\"material\",\"x-display-type\":\"UUID\"}},\"title\":\"Material Reference\",\"type\":\"object\",\"x-category\":\"rendering\",\"x-requires\":{\"oneOf\":[\"mesh_ref\",\"decal_projector\"]}},\"measure\":{\"description\":\"Displays editor-only measurement annotations in the 3D view.\",\"properties\":{\"color\":{\"default\":[1,1,1],\"description\":\"Display color for the measurement.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Color\",\"type\":\"array\",\"x-display-type\":\"Vector3\"},\"type\":{\"default\":0,\"description\":\"Measurement type to display.\",\"format\":\"int32\",\"minimum\":0,\"oneOf\":[{\"const\":0,\"title\":\"Linear\"},{\"const\":1,\"title\":\"Angle\"},{\"const\":2,\"title\":\"Area\"},{\"const\":3,\"title\":\"Volume\"}],\"title\":\"Type\",\"type\":\"integer\",\"x-display-type\":\"Unsigned Integer\"}},\"title\":\"Measure\",\"type\":\"object\",\"x-category\":\"editor\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"mesh_ref\":{\"description\":\"Reference to a mesh to render (with submesh selection).\",\"properties\":{\"shadowCastingMode\":{\"default\":1,\"description\":\"Shadow casting mode for this mesh.\",\"format\":\"int8\",\"minimum\":0,\"oneOf\":[{\"const\":0,\"description\":\"Shadow casting is disabled for this entity.\",\"title\":\"Off\"},{\"const\":1,\"description\":\"Shadow casting is enabled for this entity.\",\"title\":\"On\"}],\"title\":\"Shadow Casting Mode\",\"type\":\"integer\",\"x-display-type\":\"Unsigned Byte\"},\"submeshIndex\":{\"default\":0,\"description\":\"Index of the submesh within the mesh's submesh array.\",\"format\":\"int32\",\"title\":\"Submesh Index\",\"type\":\"integer\",\"x-display-type\":\"Integer\"},\"value\":{\"description\":\"Referenced mesh (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Value\",\"type\":\"string\",\"x-asset-ref\":\"mesh\",\"x-display-type\":\"UUID\"}},\"title\":\"Mesh Reference\",\"type\":\"object\",\"x-category\":\"rendering\",\"x-requires\":{\"allOf\":[\"local_transform\"],\"oneOf\":[\"material\",\"material_ref\"]}},\"morph_targets\":{\"description\":\"Contains weights assigned to morph targets of the mesh referred to by the entity's mesh_ref.\",\"properties\":{\"weights\":{\"additionalProperties\":{\"format\":\"float\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"description\":\"Map from morph target name to weight (commonly 0..1).\",\"title\":\"Weights\",\"type\":\"object\"}},\"title\":\"Morph Targets\",\"type\":\"object\",\"x-category\":\"animation\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"orthographic_lens\":{\"description\":\"Orthographic projection lens with configurable zoom and depth range.\",\"properties\":{\"zFar\":{\"default\":100,\"description\":\"Far clipping plane distance (meters).\",\"format\":\"float\",\"title\":\"Z Far\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"zNear\":{\"default\":0,\"description\":\"Near clipping plane distance (meters).\",\"format\":\"float\",\"title\":\"Z Near\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"zoomFactor\":{\"default\":[1,1],\"description\":\"Zoom factor applied to the orthographic extents (X,Y). 1 = no zoom.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":2,\"minItems\":2,\"title\":\"Zoom Factor\",\"type\":\"array\",\"x-display-type\":\"Vector2\"}},\"title\":\"Orthographic Lens\",\"type\":\"object\",\"x-category\":\"camera\",\"x-requires\":{\"allOf\":[\"camera\"]}},\"overrider\":{\"description\":\"Overrides an entity from a subscene: mark for deletion, replace components, or detach specific components.\",\"properties\":{\"componentsToDetach\":{\"description\":\"Hashes of components to detach from the overridden entity.\",\"items\":{\"format\":\"int32\",\"type\":\"integer\",\"x-display-type\":\"Integer\"},\"title\":\"Components to Detach\",\"type\":\"array\"},\"deleter\":{\"default\":false,\"description\":\"Mark the overridden entity as deleted in the composed scene.\",\"title\":\"Deleter\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"entityRef\":{\"description\":\"Target entity to override.\",\"properties\":{\"linkage\":{\"default\":[],\"items\":{\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"},\"type\":\"array\"},\"originalEUID\":{\"default\":\"00000000-0000-0000-0000-000000000000\",\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"}},\"required\":[\"originalEUID\",\"linkage\"],\"title\":\"Entity Ref\",\"type\":\"object\",\"x-display-type\":\"Entity Reference\"}},\"title\":\"Overrider\",\"type\":\"object\",\"x-category\":\"linker\"},\"perspective_lens\":{\"description\":\"Perspective projection lens with vertical field of view and near/far clipping planes.\",\"properties\":{\"farPlane\":{\"default\":0,\"description\":\"Far clipping plane distance (meters). Set to 0 for an infinite far plane.\",\"format\":\"float\",\"title\":\"Far Plane\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"fovy\":{\"default\":60,\"description\":\"Vertical field of view angle in degrees.\",\"format\":\"float\",\"title\":\"Vertical Field of View\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"deg\"},\"nearPlane\":{\"default\":0.01,\"description\":\"Near clipping plane distance (meters).\",\"format\":\"float\",\"title\":\"Near Plane\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"offset\":{\"default\":[0,0],\"description\":\"Projection center offset for stereoscopic rendering (meters).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":2,\"minItems\":2,\"title\":\"Offset\",\"type\":\"array\",\"x-display-type\":\"Vector2\",\"x-unit\":\"m\"}},\"title\":\"Perspective Lens\",\"type\":\"object\",\"x-category\":\"camera\",\"x-requires\":{\"allOf\":[\"camera\"]}},\"physics_material\":{\"description\":\"Physical surface properties used for contact: friction, restitution, optional contact modification, and trigger mode.\",\"properties\":{\"contactVelocity\":{\"default\":[0,0,0],\"description\":\"Applied contact velocity offset when colliding (m/s). Only used if modifyContact is true.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Contact Velocity\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"m/s\"},\"dynamicFriction\":{\"default\":0.5,\"description\":\"Dynamic (kinetic) friction coefficient (typically 0..1). If greater than staticFriction, staticFriction is clamped up to match. Effective value is averaged with the other surface.\",\"format\":\"float\",\"title\":\"Dynamic Friction\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"isTrigger\":{\"default\":false,\"description\":\"Treat associated geometry as a trigger (generates events but no physical response).\",\"title\":\"Is Trigger\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"modifyContact\":{\"default\":false,\"description\":\"Enable contact modification (applies contactVelocity on collisions).\",\"title\":\"Modify Contact\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"restitution\":{\"default\":0,\"description\":\"Restitution (bounciness) in [0,1]. 0 = no bounce; 1 = perfectly elastic. Effective value is averaged with the other surface.\",\"format\":\"float\",\"title\":\"Restitution\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"staticFriction\":{\"default\":0.5,\"description\":\"Static friction coefficient (typically 0..1). 0 feels like ice; higher resists start of motion. Effective value is averaged with the other surface.\",\"format\":\"float\",\"title\":\"Static Friction\",\"type\":\"number\",\"x-display-type\":\"Float\"}},\"title\":\"Physics Material\",\"type\":\"object\",\"x-category\":\"physics\",\"x-requires\":{\"oneOf\":[\"box_geometry\",\"capsule_geometry\",\"cylinder_geometry\",\"plane_geometry\",\"sphere_geometry\",\"collision_geometry_ref\"]}},\"plane_geometry\":{\"description\":\"Infinite plane geometry.\",\"properties\":{\"distance\":{\"default\":0,\"description\":\"Signed distance from the origin along the plane normal (meters).\",\"format\":\"float\",\"title\":\"Distance\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"normal\":{\"default\":[0,1,0],\"description\":\"Unit normal vector of the plane (in local space).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Normal\",\"type\":\"array\",\"x-display-type\":\"Vector3\"}},\"title\":\"Plane Geometry\",\"type\":\"object\",\"x-category\":\"geometry\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"point_cloud_ref\":{\"description\":\"Reference to a point cloud.\",\"properties\":{\"value\":{\"description\":\"Referenced point cloud (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Value\",\"type\":\"string\",\"x-asset-ref\":\"point_cloud\",\"x-display-type\":\"UUID\"}},\"title\":\"Point Cloud Reference\",\"type\":\"object\",\"x-category\":\"point cloud\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"point_light\":{\"description\":\"Omnidirectional light source with physically based intensity and falloff. Acts as a point light by default; enable isDirectional to emit parallel rays. Attach a Spot Light component to add a cone cutoff. Can optionally drive the atmosphere sun direction.\",\"properties\":{\"color\":{\"default\":[1,1,1],\"description\":\"RGB light color in linear space [0\u20131]. Multiplies intensity.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Color\",\"type\":\"array\",\"x-display-type\":\"Vector3\"},\"intensity\":{\"default\":1,\"description\":\"Radiant intensity (W/sr). Controls brightness for physically based shading (inverse-square falloff).\",\"format\":\"float\",\"title\":\"Intensity\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"W/sr\"},\"isDirectional\":{\"default\":false,\"description\":\"Treat this as a directional light using the entity's orientation; position is ignored.\",\"title\":\"Is Directional\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"isSun\":{\"default\":false,\"description\":\"Use this light's direction to control the atmosphere sun direction. Only one light should be marked as the sun; multiple are undefined.\",\"title\":\"Is Sun\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"range\":{\"default\":0,\"description\":\"Hard cutoff distance for light influence and culling (meters). Set to 0 for no hard cutoff and physically correct inverse-square attenuation.\",\"format\":\"float\",\"title\":\"Range\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"}},\"title\":\"Light\",\"type\":\"object\",\"x-category\":\"lighting\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"reflection_probe\":{\"description\":\"Omnidirectional reflection probe that captures the local environment into a cubemap for specular reflections (IBL).\",\"properties\":{\"farDist\":{\"default\":100,\"description\":\"Capture far clip distance (meters).\",\"format\":\"float\",\"title\":\"Far Dist\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"nearDist\":{\"default\":0.1,\"description\":\"Capture near clip distance (meters).\",\"format\":\"float\",\"title\":\"Near Dist\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"offset\":{\"default\":[0,0,0],\"description\":\"Offset of the probe capture origin relative to the entity position (meters).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Offset\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"m\"},\"quality\":{\"default\":128,\"description\":\"Reflection cubemap resolution (pixels per face). Higher values increase detail and cost.\",\"format\":\"int32\",\"title\":\"Quality\",\"type\":\"integer\",\"x-display-type\":\"Integer\"}},\"title\":\"Reflection probe\",\"type\":\"object\",\"x-category\":\"lighting\",\"x-requires\":{\"allOf\":[\"local_transform\",\"box_geometry\"]}},\"rigid_body\":{\"description\":\"Rigid body parameters for dynamic simulation (mass, damping, limits, CCD, and kinematic/gravity behavior).\",\"properties\":{\"angularDamping\":{\"default\":0.05,\"description\":\"Angular damping coefficient (s^-1). 0 = no damping; must be non-negative.\",\"format\":\"float\",\"minimum\":0,\"title\":\"Angular Damping\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"s^-1\"},\"centerOfMass\":{\"default\":[0,0,0],\"description\":\"Center of mass relative to the entity's local transform (meters).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Center of Mass\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"m\"},\"collisionDetection\":{\"default\":0,\"description\":\"Collision detection mode (CCD). Kinematic bodies do not support Linear/Continuous CCD.\",\"format\":\"int8\",\"minimum\":0,\"oneOf\":[{\"const\":0,\"description\":\"Discrete collision detection.\",\"title\":\"Discrete\"},{\"const\":1,\"description\":\"Linear, or sweep-based, CCD. This prevents the affected rigid bodies from going through other physics bodies at high velocities (a problem also known as tunnelling). Not functional with kinematic rigid bodies.\",\"title\":\"LinearContinuous\"},{\"const\":2,\"description\":\"Angular, or speculative, CCD is better at catching missed contacts generated by fast angular motions but not as good with fast linear motions. Angular CCD is cheaper but less robust compared to linear CCD.\",\"title\":\"AngularContinuous\"},{\"const\":3,\"description\":\"Linear and angular CCD are enabled. This often results in best-of-both-worlds behavior. Not functional with kinematic rigid bodies.\",\"title\":\"Continuous\"}],\"title\":\"Collision Detection\",\"type\":\"integer\",\"x-display-type\":\"Unsigned Byte\"},\"isKinematic\":{\"default\":false,\"description\":\"Treat the rigid body as kinematic (unaffected by forces; driven by animation/app logic).\",\"title\":\"Is Kinematic\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"linearDamping\":{\"default\":0,\"description\":\"Linear damping coefficient (s^-1). 0 = no damping; must be non-negative.\",\"format\":\"float\",\"minimum\":0,\"title\":\"Linear Damping\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"s^-1\"},\"lockedAxis\":{\"default\":0,\"description\":\"Lock motion along/around the specified axes.\",\"format\":\"int8\",\"minimum\":0,\"title\":\"Locked Axis\",\"type\":\"integer\",\"x-bitFlags\":[{\"description\":\"Locks motion along the X axis.\",\"name\":\"Linear X\",\"value\":1},{\"description\":\"Locks motion along the Y axis.\",\"name\":\"Linear Y\",\"value\":2},{\"description\":\"Locks motion along the Z axis.\",\"name\":\"Linear Z\",\"value\":4},{\"description\":\"Locks motion around the X axis.\",\"name\":\"Angular X\",\"value\":8},{\"description\":\"Locks motion around the Y axis.\",\"name\":\"Angular Y\",\"value\":16},{\"description\":\"Locks motion around the Z axis.\",\"name\":\"Angular Z\",\"value\":32}],\"x-display-type\":\"Unsigned Byte\"},\"mass\":{\"default\":1,\"description\":\"Mass (kg). A value of 0 is treated as infinite mass (static).\",\"format\":\"float\",\"title\":\"Mass\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"kg\"},\"maxAngularVelocity\":{\"default\":100,\"description\":\"Maximum angular velocity (rad/s). Must be non-negative.\",\"format\":\"float\",\"minimum\":0,\"title\":\"Max Angular Velocity\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"rad/s\"},\"maxLinearVelocity\":{\"default\":10000000000000000,\"description\":\"Maximum linear velocity (m/s). Must be non-negative.\",\"format\":\"float\",\"minimum\":0,\"title\":\"Max Linear Velocity\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m/s\"},\"useGravity\":{\"default\":true,\"description\":\"Whether the rigid body is affected by gravity.\",\"title\":\"Use Gravity\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"}},\"title\":\"Rigid Body\",\"type\":\"object\",\"x-category\":\"physics\",\"x-requires\":{\"allOf\":[\"local_transform\",\"physics_material\"]}},\"scene_ref\":{\"description\":\"Reference to a subscene (linker); used to compose scenes.\",\"properties\":{\"maxRecursionCount\":{\"default\":1,\"description\":\"Maximum recursion depth when a scene references itself.\",\"format\":\"int32\",\"minimum\":0,\"title\":\"Max Recursion Count\",\"type\":\"integer\",\"x-display-type\":\"Unsigned Integer\"},\"value\":{\"description\":\"Referenced scene (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Value\",\"type\":\"string\",\"x-asset-ref\":\"scene\",\"x-display-type\":\"UUID\"}},\"title\":\"Scene Reference\",\"type\":\"object\",\"x-category\":\"linker\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"script_element\":{\"description\":\"References a script and supplies its input values.\",\"properties\":{\"dataJSON\":{\"description\":\"Script input values in JSON; schema defined by scriptRef.\",\"title\":\"Data Json\",\"type\":\"object\",\"x-display-type\":\"JSON\"},\"scriptRef\":{\"description\":\"Referenced script (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Script Ref\",\"type\":\"string\",\"x-asset-ref\":\"script\",\"x-display-type\":\"UUID\"}},\"title\":\"Script Element\",\"type\":\"object\",\"x-category\":\"scripting\"},\"script_map\":{\"description\":\"Holds a set of script elements keyed by UUID.\",\"properties\":{\"elements\":{\"additionalProperties\":{\"description\":\"References a script and supplies its input values.\",\"properties\":{\"dataJSON\":{\"description\":\"Script input values in JSON; schema defined by scriptRef.\",\"title\":\"Data Json\",\"type\":\"object\",\"x-display-type\":\"JSON\"},\"scriptRef\":{\"description\":\"Referenced script (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Script Ref\",\"type\":\"string\",\"x-asset-ref\":\"script\",\"x-display-type\":\"UUID\"}},\"title\":\"Script Element\",\"type\":\"object\",\"x-category\":\"scripting\"},\"description\":\"Map of script UUID to script element.\",\"title\":\"Elements\",\"type\":\"object\"}},\"title\":\"Script Map\",\"type\":\"object\",\"x-category\":\"scripting\"},\"shadow_caster\":{\"description\":\"Enables a light to cast real-time shadows with configurable map resolution, depth range, and (for directional lights) cascades.\",\"properties\":{\"accumulateShadowCascades\":{\"default\":true,\"description\":\"Directional lights only: blend/accumulate all cascades to reduce visible transitions between splits.\",\"title\":\"Accumulate Shadow Cascades\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"bias\":{\"default\":0.004,\"description\":\"Depth bias applied during shadow tests to reduce self-shadowing (acne). Increase to mitigate artifacts; too high causes peter-panning.\",\"format\":\"float\",\"title\":\"Bias\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"cascadeCount\":{\"default\":4,\"description\":\"Directional lights only: number of cascades for CSM. 0 = static shadow map, 1\u20134 = increasing cascade count.\",\"format\":\"int8\",\"oneOf\":[{\"const\":0,\"description\":\"A single, precomputed shadow map that does not depend on the camera's view. Provides consistent shadows across the scene but lacks adaptability for dynamic perspectives or varying levels of detail.\",\"title\":\"Static Shadow Map\"},{\"const\":1,\"description\":\"One shadow layer for the entire view. Provides consistent but basic coverage, suitable for simple scenes or performance-critical applications.\",\"title\":\"Single Cascade\"},{\"const\":2,\"description\":\"Two layers of shadow refinement enhance detail near the viewer while managing distant shadows more efficiently.\",\"title\":\"Dual Cascade\"},{\"const\":3,\"description\":\"Three shadow regions create a balanced depth, offering clarity across close and mid-range distances.\",\"title\":\"Triple Cascade\"},{\"const\":4,\"description\":\"Four layers provide precise and adaptive shadow detail, ensuring realistic depth and smooth transitions across a wide range of distances.\",\"title\":\"Quad Cascade\"}],\"title\":\"Cascade Count\",\"type\":\"integer\",\"x-display-type\":\"Byte\"},\"cascadeSplitLambda\":{\"default\":0.94,\"description\":\"Directional lights only: cascade split distribution for CSM. 0 = uniform (linear) splits; 1 = logarithmic (more resolution near the camera). Values in [0,1] blend between the two.\",\"format\":\"float\",\"title\":\"Cascade Split Lambda\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"farDist\":{\"default\":100,\"description\":\"Shadow camera far clip distance (meters). Use the smallest range that contains casters/receivers.\",\"format\":\"float\",\"title\":\"Far Dist\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"nearDist\":{\"default\":0.1,\"description\":\"Shadow camera near clip distance (meters). Tighten to improve depth precision.\",\"format\":\"float\",\"title\":\"Near Dist\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"quality\":{\"default\":1024,\"description\":\"Shadow map resolution (pixels per side). Higher values increase detail at the cost of memory and performance.\",\"format\":\"int32\",\"oneOf\":[{\"const\":256,\"description\":\"Shadows are vague and blocky, providing just enough to indicate their general presence.\",\"title\":\"Ultra-Low (256x256)\"},{\"const\":512,\"description\":\"Shadows appear soft and blurry, offering a basic sense of shape with little detail.\",\"title\":\"Very Low (512x512)\"},{\"const\":1024,\"description\":\"Shadows are smoother and moderately clear but lack sharpness, giving a gentle impression of depth.\",\"title\":\"Low (1024x1024)\"},{\"const\":2048,\"description\":\"Standard quality with adequate clarity for most scenes. Shadows are defined but not overly sharp.\",\"title\":\"Medium-Low (2048x2048)\"},{\"const\":3072,\"description\":\"*RECOMMENDED* Shadows have clean edges and are crisp enough to make fine details noticeable in most environments.\",\"title\":\"Medium (3072x3072)\"},{\"const\":4096,\"description\":\"High-quality shadows with detailed edges and accurate representation of shape and form.\",\"title\":\"Medium High (4096x4096)\"},{\"const\":6144,\"description\":\"Sharp and precise shadows that maintain clarity even for intricate details. Suitable for premium visual fidelity.\",\"title\":\"High (6144x6144)\"},{\"const\":8192,\"description\":\"Hyper-realistic shadows with razor-sharp detail and unparalleled depth, delivering cinematic-level quality.\",\"title\":\"Ultra High (8192x8192)\"}],\"title\":\"Quality\",\"type\":\"integer\",\"x-display-type\":\"Integer\"}},\"title\":\"Shadow caster\",\"type\":\"object\",\"x-category\":\"lighting\",\"x-requires\":{\"allOf\":[\"point_light\"]}},\"skeleton_ref\":{\"description\":\"Reference to a skeleton asset for skinning and animation.\",\"properties\":{\"value\":{\"description\":\"Referenced skeleton (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Value\",\"type\":\"string\",\"x-asset-ref\":\"skeleton\",\"x-display-type\":\"UUID\"}},\"title\":\"Skeleton Reference\",\"type\":\"object\",\"x-category\":\"animation\",\"x-requires\":{\"allOf\":[\"local_transform\"],\"oneOf\":[\"mesh_ref\",\"bone\"]}},\"sound_ref\":{\"description\":\"Reference to a sound asset with playback and spatialization controls.\",\"properties\":{\"attenuationModel\":{\"default\":0,\"description\":\"Distance attenuation model.\",\"format\":\"int8\",\"minimum\":0,\"oneOf\":[{\"const\":0,\"description\":\"No attenuation.\",\"title\":\"No Attenuation\"},{\"const\":1,\"description\":\"Inverse distance attenuation model.\",\"title\":\"Inverse Distance\"},{\"const\":2,\"description\":\"Linear distance attenuation model.\",\"title\":\"Linear Distance\"},{\"const\":3,\"description\":\"Exponential distance attenuation model.\",\"title\":\"Exponential Distance\"}],\"title\":\"Attenuation Model\",\"type\":\"integer\",\"x-display-type\":\"Unsigned Byte\"},\"attenuationRolloffFactor\":{\"default\":1,\"description\":\"Rolloff factor for distance attenuation.\",\"format\":\"float\",\"minimum\":0,\"title\":\"Attenuation Rolloff Factor\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"autoPlayOnStart\":{\"default\":false,\"description\":\"Autoplay when the simulation starts.\",\"title\":\"Auto Play on Start\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"dopplerFactor\":{\"default\":1,\"description\":\"Scale factor for the Doppler effect.\",\"format\":\"float\",\"minimum\":0,\"title\":\"Doppler Factor\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"inaudibleBehavior\":{\"default\":0,\"description\":\"Behavior when the sound becomes inaudible.\",\"format\":\"int8\",\"minimum\":0,\"oneOf\":[{\"const\":0,\"description\":\"Continue updating while inaudible.\",\"title\":\"Tick\"},{\"const\":1,\"description\":\"Suspend updates while inaudible.\",\"title\":\"Don't Tick\"},{\"const\":2,\"description\":\"Stop playback and release resources when inaudible.\",\"title\":\"Kill\"}],\"title\":\"Inaudible Behavior\",\"type\":\"integer\",\"x-display-type\":\"Unsigned Byte\"},\"looping\":{\"default\":false,\"description\":\"Whether the sound loops.\",\"title\":\"Looping\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"maxDistance\":{\"default\":50,\"description\":\"Distance beyond which the sound is inaudible (meters).\",\"format\":\"float\",\"minimum\":0,\"title\":\"Max Distance\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"minDistance\":{\"default\":5,\"description\":\"Distance at which the sound stays at max volume (meters).\",\"format\":\"float\",\"minimum\":0,\"title\":\"Min Distance\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"pan\":{\"default\":0,\"description\":\"Stereo pan. \u22121 = left, 1 = right.\",\"format\":\"float\",\"maximum\":1,\"minimum\":-1,\"title\":\"Pan\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"playSpeed\":{\"default\":1,\"description\":\"Playback speed multiplier (1.0 = normal).\",\"format\":\"float\",\"title\":\"Play Speed\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"value\":{\"description\":\"Referenced sound (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Value\",\"type\":\"string\",\"x-asset-ref\":\"sound\",\"x-display-type\":\"UUID\"},\"volume\":{\"default\":1,\"description\":\"Playback volume [0..1].\",\"format\":\"float\",\"maximum\":1,\"minimum\":0,\"title\":\"Volume\",\"type\":\"number\",\"x-display-type\":\"Float\"}},\"title\":\"Sound Reference\",\"type\":\"object\",\"x-category\":\"sound\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"sphere_geometry\":{\"description\":\"Sphere geometry.\",\"properties\":{\"offset\":{\"default\":[0,0,0],\"description\":\"Local offset of the geometry origin (meters).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Offset\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"m\"},\"radius\":{\"default\":0.5,\"description\":\"Radius of the sphere (meters).\",\"format\":\"float\",\"title\":\"Radius\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"}},\"title\":\"Sphere Geometry\",\"type\":\"object\",\"x-category\":\"geometry\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"spline\":{\"description\":\"Displays an editor-only spline in the 3D view.\",\"properties\":{\"color\":{\"default\":[1,1,1],\"description\":\"Display color of the curve.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Color\",\"type\":\"array\",\"x-display-type\":\"Vector3\"},\"tension\":{\"default\":0.5,\"description\":\"Catmull-Rom tension (only when type is Catmull-Rom).\",\"format\":\"float\",\"title\":\"Tension\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"type\":{\"default\":0,\"description\":\"Spline interpolation type.\",\"format\":\"int32\",\"minimum\":0,\"oneOf\":[{\"const\":0,\"title\":\"Centripetal\"},{\"const\":1,\"title\":\"Chordal \"},{\"const\":2,\"title\":\"Catmullrom\"}],\"title\":\"Type\",\"type\":\"integer\",\"x-display-type\":\"Unsigned Integer\"}},\"title\":\"Spline\",\"type\":\"object\",\"x-category\":\"editor\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"spot_light\":{\"description\":\"Adds a cone cutoff to a light, producing a spotlight. Requires a Point Light component for color/intensity and falloff.\",\"properties\":{\"IESProfile\":{\"description\":\"Optional IES photometric profile (2D texture). Modulates emitted intensity by direction; leave empty for uniform distribution.\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Ies Profile\",\"type\":\"string\",\"x-asset-ref\":\"texture\",\"x-display-type\":\"UUID\"},\"cutoff\":{\"default\":30,\"description\":\"Outer cone half-angle in degrees. Light intensity falls to zero outside this angle.\",\"format\":\"float\",\"title\":\"Cutoff\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"deg\"}},\"title\":\"Spot Light\",\"type\":\"object\",\"x-category\":\"lighting\",\"x-requires\":{\"allOf\":[\"point_light\"]}},\"tags\":{\"description\":\"Free-form tags used to group and filter entities.\",\"properties\":{\"value\":{\"description\":\"List of tags applied to this entity.\",\"items\":{\"type\":\"string\",\"x-display-type\":\"String\"},\"title\":\"Value\",\"type\":\"array\"}},\"title\":\"Tags\",\"type\":\"object\",\"x-category\":\"core\"},\"vehicle_controller\":{\"description\":\"Vehicle Controller parameters.\",\"properties\":{\"chassis\":{\"description\":\"The chassis.\",\"properties\":{\"linkage\":{\"default\":[],\"items\":{\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"},\"type\":\"array\"},\"originalEUID\":{\"default\":\"00000000-0000-0000-0000-000000000000\",\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"}},\"required\":[\"originalEUID\",\"linkage\"],\"title\":\"Chassis\",\"type\":\"object\",\"x-display-type\":\"Entity Reference\"},\"frontLeftWheel\":{\"description\":\"The front left wheel.\",\"properties\":{\"linkage\":{\"default\":[],\"items\":{\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"},\"type\":\"array\"},\"originalEUID\":{\"default\":\"00000000-0000-0000-0000-000000000000\",\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"}},\"required\":[\"originalEUID\",\"linkage\"],\"title\":\"Front Left Wheel\",\"type\":\"object\",\"x-display-type\":\"Entity Reference\"},\"frontRightWheel\":{\"description\":\"The front right wheel.\",\"properties\":{\"linkage\":{\"default\":[],\"items\":{\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"},\"type\":\"array\"},\"originalEUID\":{\"default\":\"00000000-0000-0000-0000-000000000000\",\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"}},\"required\":[\"originalEUID\",\"linkage\"],\"title\":\"Front Right Wheel\",\"type\":\"object\",\"x-display-type\":\"Entity Reference\"},\"rearLeftWheel\":{\"description\":\"The rear left wheel.\",\"properties\":{\"linkage\":{\"default\":[],\"items\":{\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"},\"type\":\"array\"},\"originalEUID\":{\"default\":\"00000000-0000-0000-0000-000000000000\",\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"}},\"required\":[\"originalEUID\",\"linkage\"],\"title\":\"Rear Left Wheel\",\"type\":\"object\",\"x-display-type\":\"Entity Reference\"},\"rearRightWheel\":{\"description\":\"The rear right wheel.\",\"properties\":{\"linkage\":{\"default\":[],\"items\":{\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"},\"type\":\"array\"},\"originalEUID\":{\"default\":\"00000000-0000-0000-0000-000000000000\",\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"}},\"required\":[\"originalEUID\",\"linkage\"],\"title\":\"Rear Right Wheel\",\"type\":\"object\",\"x-display-type\":\"Entity Reference\"}},\"title\":\"Vehicle Controller\",\"type\":\"object\",\"x-category\":\"physics\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"volume_filter\":{\"description\":\"View filtering and display controls applied to the referenced volume.\",\"properties\":{\"applyGaussianFiltering\":{\"default\":false,\"description\":\"Apply Gaussian smoothing when sampling voxels.\",\"title\":\"Apply Gaussian Filtering\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"enable3D\":{\"default\":true,\"description\":\"Whether this volume is visible in the 3D view.\",\"title\":\"Enable3 D\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"enableMPR\":{\"default\":true,\"description\":\"Whether this volume is visible in the MPR (multi-planar reconstruction) view.\",\"title\":\"Enable Mpr\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"mprColor\":{\"default\":[1,1,1],\"description\":\"Tint applied to this volume's MPR/projection output.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Mpr Color\",\"type\":\"array\",\"x-display-type\":\"Vector3\"},\"range\":{\"default\":[0,1],\"description\":\"Displayed voxel intensity range [min, max]. Values outside the material's valid range are clamped/ignored.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":2,\"minItems\":2,\"title\":\"Range\",\"type\":\"array\",\"x-display-type\":\"Vector2\"},\"sampleUnfiltered\":{\"default\":false,\"description\":\"Sample texels without hardware filtering (nearest).\",\"title\":\"Sample Unfiltered\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"}},\"title\":\"Volume Filter\",\"type\":\"object\",\"x-category\":\"rendering\",\"x-requires\":{\"allOf\":[\"volume_ref\"]}},\"volume_material_ref\":{\"description\":\"Reference to the volume material used for shading and transfer functions.\",\"properties\":{\"value\":{\"description\":\"Referenced volume material (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Value\",\"type\":\"string\",\"x-asset-ref\":\"volume_material\",\"x-display-type\":\"UUID\"}},\"title\":\"Volume Material Reference\",\"type\":\"object\",\"x-category\":\"rendering\",\"x-requires\":{\"allOf\":[\"volume_ref\"]}},\"volume_ref\":{\"description\":\"Reference to a volumetric dataset stored as a 3D texture (voxels).\",\"properties\":{\"texture3dRef\":{\"description\":\"Referenced 3D texture (UUID) containing the volume voxels.\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Texture3d Ref\",\"type\":\"string\",\"x-asset-ref\":\"texture_3d\",\"x-display-type\":\"UUID\"}},\"title\":\"Volume Reference\",\"type\":\"object\",\"x-category\":\"rendering\",\"x-requires\":{\"allOf\":[\"local_transform\",\"volume_material_ref\"]}}},\"required\":[\"euid\"],\"type\":\"object\"}", "import { entityComponents as entityComponentStyles } from \"@3dverse/design-tokens\";\nimport { EntityComponentBadge } from \"../EntityComponent/EntityComponentBadge\";\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport type EntityRecipeProps = {\n allOf?: string[];\n oneOf?: string[];\n withAttributes?: Record<string, any>;\n className?: string;\n};\n\n//------------------------------------------------------------------------------\nexport function EntityRecipe({ allOf, oneOf, withAttributes, className }: EntityRecipeProps) {\n return (\n <article\n className={cn(\n \"relative w-fit flex flex-col flex-wrap my-4 border border-primary-alpha rounded-[1.5rem]\",\n className,\n )}\n >\n <div className=\"absolute [writing-mode:vertical-rl] rotate-180 top-1/2 -left-3 -translate-x-1/2 -translate-y-1/2 text-[.6rem] font-medium text-tertiary tracking-wider opacity-60 uppercase\">\n Entity\n </div>\n <div className=\"flex flex-wrap gap-2 p-2\">\n {allOf?.map(component => (\n <EntityComponentBadgeEx key={component} name={component} withAttributes={withAttributes} />\n ))}\n </div>\n {oneOf && (\n <div className=\"flex gap-3 pl-4 p-2 border-t border-secondary-alpha\">\n <div className=\"shrink-0 mt-px text-3xs text-tertiary font-medium\">\n <i className=\"fal fa-plus mr-1\" /> One of\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {oneOf.map(component => (\n <EntityComponentBadge key={component} name={component} />\n ))}\n </div>\n </div>\n )}\n </article>\n );\n}\n\n//------------------------------------------------------------------------------\nconst EntityComponentBadgeEx = ({ name, withAttributes }: { name: string; withAttributes?: Record<string, any> }) => {\n if (withAttributes && Object.keys(withAttributes).includes(name)) {\n const { color } = entityComponentStyles[name as keyof typeof entityComponentStyles];\n return (\n <div\n className=\"flex flex-col bg-(--entity-component-color)/5 rounded-[14px]\"\n style={{ \"--entity-component-color\": color } as React.CSSProperties}\n >\n <EntityComponentBadge name={name} className=\"w-full\" />\n <ComponentAttributes attributes={withAttributes[name]} />\n </div>\n );\n }\n return <EntityComponentBadge name={name} />;\n};\n\n//------------------------------------------------------------------------------\nconst ComponentAttributes = ({ attributes }: { attributes: Record<string, any> }) => {\n return (\n <div className=\"flex flex-col flex-wrap gap-1 p-2 pr-4 text-xs text-tertiary\">\n {Object.entries(attributes).map(([key, value]) => (\n <div key={key} className=\"flex gap-1\">\n <span className=\"font-mono\">{key}:</span>\n <span className=\"font-mono\">{JSON.stringify(value)}</span>\n </div>\n ))}\n </div>\n );\n};\n", "//------------------------------------------------------------------------------\nimport { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n//------------------------------------------------------------------------------\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n", ".glowEffect {\n position: relative;\n /* --color: var(--glow-color, #565c7e); */\n --color: var(--color-informative);\n\n &:before {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 400%;\n max-width: 13rem;\n aspect-ratio: 1 / 1;\n\n background-color: var(--color);\n border-radius: 100%;\n filter: blur(60px);\n opacity: 0.2;\n pointer-events: none;\n }\n}\n\n.glowEffectWide {\n &:before {\n max-width: 20rem;\n aspect-ratio: 1 / 0.6;\n filter: blur(60px);\n }\n}\n", "//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nimport styles from \"./GlowEffect.module.css\";\n\n//------------------------------------------------------------------------------\nexport const GlowEffect = ({\n children,\n variant = \"default\",\n className,\n}: {\n children: React.ReactNode;\n variant?: \"default\" | \"wide\";\n className?: string;\n}) => {\n return (\n <div className={cn(styles.glowEffect, variant === \"wide\" && styles.glowEffectWide, className)}>{children}</div>\n );\n};\n", "import React from \"react\";\nimport { IsometricGridProps } from \"./IsometricSchemaTypes\";\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport const IsometricSchema: React.FC<IsometricGridProps> = ({\n items = [],\n connections = [],\n gridSize = 40,\n cellSize = 70,\n containerWidth = 800,\n containerHeight = 400,\n caption,\n animateOnScroll = true,\n className,\n}) => {\n //--------------------------------------------------------------------------\n // Appear animation of items and connections.\n // - Hidden by the animation's first keyframe (fill-mode \"both\") rather than an inline\n // opacity, so elements stay visible when the scroll timeline is inactive\n // (e.g. a page that doesn't scroll) or unsupported.\n // - The range is based on \"entry\": an element fully in view has completed its entry,\n // so it's always revealed, even if the page can't scroll.\n const appearStyle = (delay?: string): React.CSSProperties =>\n ({\n animationFillMode: \"both\",\n ...(animateOnScroll\n ? { animationTimeline: \"view(block)\", animationRange: \"entry 25% entry 100%\" }\n : { animationDelay: delay }),\n }) as React.CSSProperties;\n\n //--------------------------------------------------------------------------\n // Convert isometric coordinates to screen coordinates\n const isoToScreen = (x: number, y: number) => {\n const screenX = (x - y) * (cellSize / 2);\n const screenY = (x + y) * (cellSize / 4);\n return { x: screenX, y: screenY };\n };\n\n //--------------------------------------------------------------------------\n // Center point of the container\n const centerX = containerWidth / 2;\n const centerY = containerHeight / 2;\n\n //--------------------------------------------------------------------------\n // Generate grid lines\n const generateGrid = () => {\n const lines = [];\n const halfGrid = gridSize / 2;\n\n // Horizontal lines (parallel to x-axis)\n for (let y = -halfGrid; y <= halfGrid; y++) {\n const start = isoToScreen(-halfGrid, y);\n const end = isoToScreen(halfGrid, y);\n lines.push(\n <line\n key={`h-${y}`}\n x1={centerX + start.x}\n y1={centerY + start.y}\n x2={centerX + end.x}\n y2={centerY + end.y}\n stroke=\"rgba(100, 150, 200, 0.4)\"\n strokeWidth=\"1\"\n />,\n );\n }\n\n // Vertical lines (parallel to y-axis)\n for (let x = -halfGrid; x <= halfGrid; x++) {\n const start = isoToScreen(x, -halfGrid);\n const end = isoToScreen(x, halfGrid);\n lines.push(\n <line\n key={`v-${x}`}\n x1={centerX + start.x}\n y1={centerY + start.y}\n x2={centerX + end.x}\n y2={centerY + end.y}\n stroke=\"rgba(100, 150, 200, 0.4)\"\n strokeWidth=\"1\"\n />,\n );\n }\n\n return lines;\n };\n\n //--------------------------------------------------------------------------\n // Generate arrow marker\n const generateArrow = (direction: \"start\" | \"end\", color: string, index: number) => {\n const size = 10;\n const id = `arrow-${direction}-${index}`;\n\n return (\n <marker\n id={id}\n markerWidth={size}\n markerHeight={size}\n refX={direction === \"end\" ? size - 4 : 4}\n refY={size / 2}\n orient=\"auto\"\n markerUnits=\"userSpaceOnUse\"\n >\n <polygon\n points={\n direction === \"end\"\n ? `0,0 ${size},${size / 2} 0,${size}`\n : `${size},0 0,${size / 2} ${size},${size}`\n }\n fill={color}\n />\n </marker>\n );\n };\n\n //--------------------------------------------------------------------------\n // Generate connections that follow grid lines\n const generateConnections = () => {\n return connections.map((conn, index) => {\n const {\n from_x,\n from_y,\n to_x,\n to_y,\n via_x = from_x, // default via to straight line if not provided\n via_y = from_y,\n arrow_start,\n arrow_end,\n color = \"#fbbf24\",\n name,\n showDebug,\n isAnimated = false,\n animationDirection = \"end\",\n } = conn;\n\n // Build path that follows grid lines\n const points: { x: number; y: number }[] = [];\n const segments: { from: { x: number; y: number }; to: { x: number; y: number } }[] = [];\n let currentX = from_x;\n let currentY = from_y;\n\n points.push(isoToScreen(currentX, currentY));\n\n // Move to via point following grid lines\n if (currentX !== via_x) {\n const nextX = via_x;\n segments.push({ from: { x: currentX, y: currentY }, to: { x: nextX, y: currentY } });\n currentX = nextX;\n points.push(isoToScreen(currentX, currentY));\n }\n if (currentY !== via_y) {\n const nextY = via_y;\n segments.push({ from: { x: currentX, y: currentY }, to: { x: currentX, y: nextY } });\n currentY = nextY;\n points.push(isoToScreen(currentX, currentY));\n }\n\n // Move to destination following grid lines\n if (currentX !== to_x) {\n const nextX = to_x;\n segments.push({ from: { x: currentX, y: currentY }, to: { x: nextX, y: currentY } });\n currentX = nextX;\n points.push(isoToScreen(currentX, currentY));\n }\n if (currentY !== to_y) {\n const nextY = to_y;\n segments.push({ from: { x: currentX, y: currentY }, to: { x: currentX, y: nextY } });\n currentY = nextY;\n points.push(isoToScreen(currentX, currentY));\n }\n\n // Find the longest segment (for label orientation)\n let longestSegment = segments[0];\n let maxLength = 0;\n segments.forEach(seg => {\n const dx = seg.to.x - seg.from.x;\n const dy = seg.to.y - seg.from.y;\n const length = Math.hypot(dx, dy);\n if (length > maxLength) {\n maxLength = length;\n longestSegment = seg;\n }\n });\n\n const segStart = isoToScreen(longestSegment.from.x, longestSegment.from.y);\n const segEnd = isoToScreen(longestSegment.to.x, longestSegment.to.y);\n const segMidX = centerX + (segStart.x + segEnd.x) / 2;\n const segMidY = centerY + (segStart.y + segEnd.y) / 2;\n const rawAngle = Math.atan2(segEnd.y - segStart.y, segEnd.x - segStart.x) * (180 / Math.PI);\n\n // Keep any angle visually upright but aligned to the segment\n const normalizeAngleDeg = (deg: number) => {\n // wrap to (-180, 180]\n let a = ((deg + 180) % 360) - 180;\n // fold into [-90, 90]\n if (a > 90) a -= 180;\n if (a < -90) a += 180;\n return a;\n };\n const labelAngle = normalizeAngleDeg(rawAngle);\n\n // Convert points to path string\n const pathCommands = points\n .map((p, i) => {\n const x = centerX + p.x;\n const y = centerY + p.y;\n return i === 0 ? `M ${x},${y}` : `L ${x},${y}`;\n })\n .join(\" \");\n\n // Approx total path length in screen space (for speed/duration)\n let totalLen = 0;\n for (let i = 1; i < points.length; i++) {\n const a = points[i - 1];\n const b = points[i];\n const ax = centerX + a.x;\n const ay = centerY + a.y;\n const bx = centerX + b.x;\n const by = centerY + b.y;\n totalLen += Math.hypot(bx - ax, by - ay);\n }\n const dur = Math.max(1.2, totalLen / 150); // ~constant speed\n\n // Unique IDs for path & markers\n const pathId = `conn-path-${index}`;\n const startMarkerId = `arrow-start-${index * 2}`;\n const endMarkerId = `arrow-end-${index * 2 + 1}`;\n\n const ArrowDefs = () => (\n <defs>\n {arrow_start && generateArrow(\"start\", color, index * 2)}\n {arrow_end && generateArrow(\"end\", color, index * 2 + 1)}\n </defs>\n );\n\n // Helper to render a glowing dot that travels along the path\n const GlowDot = ({ reverse = false, begin = \"0s\" }: { reverse?: boolean; begin?: string }) => (\n <g filter=\"url(#conn-glow)\">\n <ellipse cx=\"5\" cy=\"0\" rx=\"4\" ry=\"2\" fill={color} opacity=\"0.8\" />\n <animateMotion\n dur={`${dur}s`}\n repeatCount=\"indefinite\"\n begin={begin}\n keyPoints={reverse ? \"1;0\" : \"0;1\"}\n keyTimes=\"0;1\"\n calcMode=\"linear\"\n rotate=\"auto\"\n >\n <mpath xlinkHref={`#${pathId}`} />\n </animateMotion>\n </g>\n );\n\n // Choose how many dots based on direction\n const renderDots = () => {\n if (!isAnimated) return null;\n if (animationDirection === \"both\") {\n return (\n <>\n <GlowDot reverse={false} begin=\"0s\" />\n <GlowDot reverse={true} begin={`${dur / 2}s`} />\n </>\n );\n }\n if (animationDirection === \"start\") {\n // move from end -> start\n return <GlowDot reverse={true} />;\n }\n // default \"end\": move from start -> end\n return <GlowDot reverse={false} />;\n };\n\n return (\n <g key={index} className=\"animate-appear-top cursor-default\" style={appearStyle(\".2s\")}>\n <ArrowDefs />\n {/* The actual connection path */}\n <path\n id={pathId}\n d={pathCommands}\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n fill=\"none\"\n markerStart={arrow_start ? `url(#${startMarkerId})` : undefined}\n markerEnd={arrow_end ? `url(#${endMarkerId})` : undefined}\n style={conn.style}\n />\n {/* Moving light(s) on top */}\n {renderDots()}\n\n {name && (\n <g transform={`translate(${segMidX}, ${segMidY}) rotate(${labelAngle})`}>\n <text\n x=\"12\"\n y=\"12\"\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n className=\"text-sm font-bold fill-accent\"\n >\n {name}\n </text>\n </g>\n )}\n {showDebug && (\n <>\n {points.map((p, i) => (\n <circle\n key={i}\n cx={centerX + p.x}\n cy={centerY + p.y}\n r=\"3\"\n fill={i === 0 ? \"red\" : i === points.length - 1 ? \"green\" : \"blue\"}\n />\n ))}\n </>\n )}\n </g>\n );\n });\n };\n\n //--------------------------------------------------------------------------\n // Generate isometric items\n const generateItems = () => {\n return items.map((item, index) => {\n const { x, y, width, height, color = \"#52548B\", name, showDebug, image } = item;\n\n // Calculate the four corners of the item\n const bottomLeft = isoToScreen(x, y);\n const bottomRight = isoToScreen(x + width, y);\n const topRight = isoToScreen(x + width, y - height);\n const topLeft = isoToScreen(x, y - height);\n\n // Create polygon points\n const points = [\n [centerX + bottomLeft.x, centerY + bottomLeft.y],\n [centerX + bottomRight.x, centerY + bottomRight.y],\n [centerX + topRight.x, centerY + topRight.y],\n [centerX + topLeft.x, centerY + topLeft.y],\n ]\n .map(([px, py]) => `${px},${py}`)\n .join(\" \");\n\n // Calculate center for label\n const centerPos = isoToScreen(x + width / 2, y - height / 2);\n\n return (\n <g key={index} className=\"group animate-appear-top cursor-default\" style={appearStyle()}>\n <g\n // transform={`translate(${bottomLeft.x}px, ${bottomLeft.y}px)`}\n className=\"drop-shadow-[0_9px_7px_var(--shadow-color)] hover:drop-shadow-[0_12px_10px_var(--shadow-color)] hover:[--translate:-8px] transition-transform duration-300\"\n style={\n {\n \"--shadow-color\": `color-mix(in srgb, ${color} 10%, var(--color-bg-ground))`,\n translate: \"0 var(--translate, -4px)\",\n } as React.CSSProperties\n }\n >\n <polygon\n points={points}\n fill={color}\n strokeLinejoin=\"round\"\n className=\"opacity-80 group-hover:opacity-100 transition-opacity duration-all duration-300\"\n />\n {image &&\n (() => {\n // Calculate image position at bottom-left corner\n const imageX = centerX + bottomLeft.x + 5;\n const imageY = centerY + bottomLeft.y - 80;\n return <image href={image} x={imageX} y={imageY} width=\"128px\" />;\n })()}\n\n {name && (\n <g transform={`translate(${centerX + centerPos.x}, ${centerY + centerPos.y})`}>\n {/* Background rectangle */}\n <rect\n x={-(name.length * 4 + 8)}\n y={-12}\n width={name.length * 8 + 16}\n height={24}\n fill=\"#181a59\"\n fillOpacity=\"0.8\"\n rx=\"4\"\n />\n <text\n x={0}\n y={0}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n className=\"text-base\"\n fill=\"white\"\n >\n {name}\n </text>\n </g>\n )}\n {showDebug && (\n <text\n x={centerX + centerPos.x}\n y={centerY + centerPos.y + 20}\n textAnchor=\"middle\"\n fill=\"white\"\n fontSize=\"10\"\n opacity=\"0.7\"\n >\n ({x}, {y})\n </text>\n )}\n </g>\n </g>\n );\n });\n };\n\n //--------------------------------------------------------------------------\n return (\n <figure className={cn(\"m-0 w-full\", className)} role=\"img\" aria-label={caption}>\n <svg\n viewBox={`0 0 ${containerWidth} ${containerHeight}`}\n preserveAspectRatio=\"xMidYMid meet\"\n className=\"w-full\"\n >\n <defs>\n <filter id=\"conn-glow\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"3\" result=\"blur\" />\n <feMerge>\n <feMergeNode in=\"blur\" />\n <feMergeNode in=\"SourceGraphic\" />\n </feMerge>\n </filter>\n <mask id=\"fadeMask\" maskUnits=\"objectBoundingBox\">\n <radialGradient id=\"fadeGradient\">\n <stop offset=\"40%\" stopColor=\"white\" />\n <stop offset=\"90%\" stopColor=\"black\" />\n </radialGradient>\n <rect width=\"100%\" height=\"100%\" fill=\"url(#fadeGradient)\" />\n </mask>\n <filter id=\"text-backdrop-blur\" x=\"-200%\" y=\"-200%\" width=\"500%\" height=\"500%\">\n <feGaussianBlur in=\"BackgroundImage\" stdDeviation=\"20\" result=\"blurredBg\" />\n <feFlood floodColor=\"black\" floodOpacity=\"0.8\" result=\"bgColor\" />\n <feComposite in=\"bgColor\" in2=\"blurredBg\" operator=\"in\" result=\"coloredBlur\" />\n <feComposite in=\"coloredBlur\" in2=\"SourceGraphic\" operator=\"over\" result=\"final\" />\n </filter>\n </defs>\n <rect width={containerWidth} height={containerHeight} fill=\"transparent\" />\n <g mask=\"url(#fadeMask)\">{generateGrid()}</g>\n {generateConnections()}\n {generateItems()}\n </svg>\n {caption && (\n <figcaption className=\"-translate-y-6 text-center text-sm text-tertiary text-balance\">\n {caption}\n </figcaption>\n )}\n </figure>\n );\n};\n", "//------------------------------------------------------------------------------\nexport const Logo3dverse = ({ style, className = \"\" }: { style?: React.CSSProperties; className?: string }) => {\n return (\n <svg viewBox=\"0 0 99 20\" xmlns=\"http://www.w3.org/2000/svg\" style={style} className={className}>\n <path\n fill=\"var(--color-wordmark-prefix, var(--color-brand))\"\n d=\"M6.059 19.351c-.92733 0-1.79833-.1733-2.613-.52-.81467-.3553-1.521-.858-2.119-1.508-.589333-.65-1.018333-1.417-1.2869999-2.301L2.666 14.294c.25133.806.689 1.4257 1.313 1.859.624.4247 1.31733.6327 2.08.624.68467-.0087 1.287-.169 1.807-.481.52-.312.92733-.7323 1.222-1.261.29467-.5373.442-1.1527.442-1.846 0-1.04-.325-1.898-.975-2.574-.64133-.676-1.482-1.014-2.522-1.014-.29467 0-.598.04333-.91.13-.30333.08667-.58933.19933-.858.338L2.991 7.924l6.604-5.837.286.78h-9.1V.279999h11.258V2.867L6.553 8.145l-.026-.884c1.17867 0 2.20133.26433 3.068.793.8667.52 1.534 1.23067 2.002 2.132.4767.8927.715 1.8937.715 3.003 0 1.196-.2817 2.2577-.845 3.185-.5547.9273-1.3043 1.6553-2.249 2.184-.936.5287-1.989.793-3.159.793Zm15.4769.039c-1.3087 0-2.4397-.325-3.393-.975-.9447-.65-1.677-1.534-2.197-2.652-.5113-1.1267-.767-2.392-.767-3.796 0-1.4127.26-2.67367.78-3.783.52-1.118 1.2567-1.99767 2.21-2.639.962-.65 2.1017-.975 3.419-.975 1.326 0 2.4397.325 3.341.975.91.64133 1.5947 1.521 2.054 2.639.468 1.118.702 2.379.702 3.783s-.234 2.665-.702 3.783c-.468 1.118-1.157 2.0063-2.067 2.665-.91.65-2.0367.975-3.38.975Zm.377-2.457c.8927 0 1.6207-.2123 2.184-.637.5633-.4247.975-1.0097 1.235-1.755.26-.7453.39-1.6033.39-2.574 0-.9707-.1343-1.8287-.403-2.574-.26-.74533-.6673-1.326-1.222-1.742-.546-.416-1.2437-.624-2.093-.624-.9013 0-1.6423.221-2.223.663-.5807.442-1.014 1.03567-1.3 1.781-.2773.7453-.416 1.5773-.416 2.496 0 .9273.1387 1.768.416 2.522.286.7453.7107 1.339 1.274 1.781.572.442 1.2913.663 2.158.663ZM25.7219 19V8.899h-.312V.279999h2.73V19h-2.418Z\"\n />\n <path\n fill=\"var(--color-wordmark, var(--color-content-secondary))\"\n d=\"m35.8333 19-5.096-14.04h2.743l3.731 10.634 3.731-10.634h2.743L38.5893 19h-2.756Zm16.1734.39c-1.3953 0-2.6217-.3033-3.679-.91-1.0487-.6153-1.8677-1.469-2.457-2.561-.5807-1.1007-.871-2.3747-.871-3.822 0-1.534.286-2.86433.858-3.991.5807-1.12667 1.3867-1.99767 2.418-2.613 1.0313-.61533 2.2317-.923 3.601-.923 1.43 0 2.6477.33367 3.653 1.001 1.0053.65867 1.755 1.599 2.249 2.821.5027 1.222.702 2.6737.598 4.355h-2.717v-.988c-.0173-1.6293-.3293-2.834-.936-3.614-.598-.78-1.5123-1.17-2.743-1.17-1.3607 0-2.3833.429-3.068 1.287-.6847.858-1.027 2.0973-1.027 3.718 0 1.5427.3423 2.7387 1.027 3.588.6847.8407 1.6727 1.261 2.964 1.261.8493 0 1.5817-.1907 2.197-.572.624-.39 1.1093-.9447 1.456-1.664l2.665.845c-.546 1.2567-1.3737 2.2317-2.483 2.925-1.1093.6847-2.3443 1.027-3.705 1.027Zm-5.005-6.643v-2.119h10.023v2.119h-10.023ZM61.5534 19V4.96h2.418v3.406l-.338-.442c.1733-.45067.3986-.86233.676-1.235.2773-.38133.598-.69333.962-.936.3553-.26.7496-.45933 1.183-.598.442-.14733.8926-.234 1.352-.26.4593-.03467.9013-.013 1.326.065v2.548c-.4594-.12133-.9707-.156-1.534-.104-.5547.052-1.066.22967-1.534.533-.442.286-.793.63267-1.053 1.04-.2514.40733-.4334.86233-.546 1.365-.1127.494-.169 1.0183-.169 1.573V19h-2.743Zm15.1758.377c-1.7073 0-3.0983-.377-4.173-1.131-1.0746-.754-1.7333-1.8157-1.976-3.185l2.782-.429c.1734.728.572 1.3043 1.196 1.729.6327.416 1.417.624 2.353.624.8494 0 1.5124-.1733 1.989-.52.4854-.3467.728-.8233.728-1.43 0-.3553-.0866-.6413-.26-.858-.1646-.2253-.5156-.4377-1.053-.637-.5373-.1993-1.3563-.4463-2.457-.741-1.2046-.312-2.1623-.6457-2.873-1.001-.702-.364-1.2046-.7843-1.508-1.261-.2946-.4853-.442-1.07033-.442-1.755 0-.84933.2254-1.59033.676-2.223.4507-.63267 1.0834-1.12233 1.898-1.469.8234-.34667 1.7854-.52 2.886-.52 1.0747 0 2.0324.169 2.873.507.8407.338 1.521.819 2.041 1.443.52.61533.832 1.339.936 2.171l-2.782.507c-.0953-.676-.4116-1.209-.949-1.599-.5373-.39-1.235-.60233-2.093-.637-.8233-.03467-1.4906.104-2.002.416-.5113.30333-.767.72367-.767 1.261 0 .312.0954.57633.286.793.1994.21667.5807.42467 1.144.624.5634.1993 1.3954.4377 2.496.715 1.1787.3033 2.1147.6413 2.808 1.014.6934.364 1.1874.8017 1.482 1.313.3034.5027.455 1.1137.455 1.833 0 1.3867-.507 2.4743-1.521 3.263-1.0053.7887-2.3963 1.183-4.173 1.183Zm15.0575.013c-1.3953 0-2.6217-.3033-3.679-.91-1.0487-.6153-1.8677-1.469-2.457-2.561-.5807-1.1007-.871-2.3747-.871-3.822 0-1.534.286-2.86433.858-3.991.5807-1.12667 1.3867-1.99767 2.418-2.613 1.0313-.61533 2.2317-.923 3.601-.923 1.43 0 2.6477.33367 3.653 1.001 1.0053.65867 1.755 1.599 2.249 2.821.5027 1.222.702 2.6737.598 4.355h-2.717v-.988c-.0173-1.6293-.3293-2.834-.936-3.614-.598-.78-1.5123-1.17-2.743-1.17-1.3607 0-2.3833.429-3.068 1.287-.6847.858-1.027 2.0973-1.027 3.718 0 1.5427.3423 2.7387 1.027 3.588.6847.8407 1.6727 1.261 2.964 1.261.8493 0 1.5817-.1907 2.197-.572.624-.39 1.1093-.9447 1.456-1.664l2.665.845c-.546 1.2567-1.3737 2.2317-2.483 2.925-1.1093.6847-2.3443 1.027-3.705 1.027Zm-5.005-6.643v-2.119h10.023v2.119h-10.023Z\"\n />\n </svg>\n );\n};\n\n//------------------------------------------------------------------------------\nexport const Logo3dverseRocket = ({ style, className = \"\" }: { style?: React.CSSProperties; className?: string }) => {\n return (\n <svg viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style={style} className={className}>\n <path\n d=\"M5.28808 19.7527L14.1837 28.4509L14.1837 39.9995L5.28302 31.294L5.28808 19.7527Z\"\n fill=\"var(--logo-color, #8d670b)\"\n />\n <path\n d=\"M33.9949 19.7527L25.0993 28.4509L25.0993 39.9995L34 31.294L33.9949 19.7527Z\"\n fill=\"var(--logo-color, #8d670b)\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M29.3294 13.2721L34.2049 19.747V31.294L24.9911 19.747V24.8481H24.9904V24.8488L14.4968 24.8488V19.7477H14.4968V19.747L5.28302 31.294L5.28302 19.7527L10.1585 13.28V9.17384C10.1585 3.05795 14.9512 0 19.744 0C22.106 0 24.468 0.742731 26.2563 2.22819C28.0966 3.75685 29.3294 6.07206 29.3294 9.17384L29.3294 13.2721L29.3294 13.2721ZM19.744 5.75545C21.2537 5.75545 22.7634 6.83514 22.7634 8.99452L22.7634 13.2748L16.7245 13.2773V8.99452C16.7245 7.40326 17.5444 6.3983 18.5799 5.97965C18.9496 5.83019 19.3468 5.75545 19.744 5.75545ZM16.7245 13.2773V13.28L22.7634 13.28L16.7245 13.28V13.2773H16.7245ZM19.7439 29.9788L14.4968 24.8488L24.9911 24.8488L19.7439 29.9788Z\"\n fill=\"url(#logo-rocket-gradient)\"\n />\n <defs>\n <linearGradient\n id=\"logo-rocket-gradient\"\n x1=\"12.0755\"\n y1=\"1.88679\"\n x2=\"31.3208\"\n y2=\"32.4528\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"var(--logo-top-color, #f0c732)\" />\n <stop offset=\"1\" stopColor=\"var(--logo-bottom-color, #ffc800)\" />\n </linearGradient>\n </defs>\n </svg>\n );\n};\n", ".spinnerLogo {\n position: relative;\n width: 40px;\n height: 40px;\n\n background-image: url(\"/app-launcher/images/3dverse-logo-shape.svg\");\n background-repeat: no-repeat;\n background-position: 0px 1px;\n color: var(--color-accent);\n filter: drop-shadow(0px 14px 5px color-mix(in srgb, var(--color-accent), black 90%));\n}\n\n.circle {\n position: absolute;\n top: -50%;\n left: -50%;\n width: 200%;\n height: 200%;\n\n border-radius: 47%;\n corner-shape: superellipse(0.65);\n border: 1px solid currentColor;\n border-right-color: color-mix(in srgb, currentColor, transparent 70%);\n border-top-color: color-mix(in srgb, currentColor, transparent 40%);\n border-bottom-color: color-mix(in srgb, currentColor, transparent 40%);\n\n animation: loaderRotate 3s infinite linear;\n transition-property: opacity, scale;\n transition-duration: 0.4s;\n transition-timing-function: ease-in-out;\n\n @starting-style {\n opacity: 0;\n scale: 0.8;\n }\n}\n\n.circle:before {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n\n border: inherit;\n border-radius: inherit;\n corner-shape: inherit;\n filter: blur(1px);\n\n rotate: 135deg;\n animation: loaderRotate 3s infinite ease-in-out;\n}\n.circle:after {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n\n border: inherit;\n border-radius: inherit;\n corner-shape: inherit;\n filter: blur(1px);\n\n rotate: 90deg;\n animation: loaderRotate 4s infinite ease-in-out;\n}\n\n@keyframes loaderRotate {\n from {\n transform: rotate(0);\n }\n to {\n transform: rotate(360deg);\n }\n}\n", "import { Logo3dverseRocket } from \"../Logo3dverse\";\nimport styles from \"./Spinner.module.css\";\n\n//------------------------------------------------------------------------------\nexport const Spinner = () => {\n return (\n <div className={styles.spinnerLogo}>\n <Logo3dverseRocket />\n <span className={styles.circle} />\n </div>\n );\n};\n", "import { assets } from \"@3dverse/design-tokens\";\nimport { Icon } from \"../ui/icon\";\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport const AssetIcon = ({\n assetId,\n variant,\n weight = \"light\",\n className = \"\",\n}: {\n assetId: keyof typeof assets;\n variant?: \"file\";\n weight?: \"solid\" | \"light\" | \"regular\";\n className?: string;\n}) => {\n const { color, fontAwesome } = assets[assetId];\n\n const _className =\n variant === \"file\"\n ? `\n fa-fw\n relative inline-block aspect-[1/1.15] px-[.9em] pt-[.3em] inline-flex justify-center items-center rounded-sm rounded-tr-[20%] [corner-top-right-shape:bevel] overflow-hidden\n bg-radial-[at_50%_65%] from-(--asset-color)/30 via-(--asset-color)/15 to-(--asset-color)/25 to-90%\n border border-(--asset-color)/15\n after:content-[''] after:absolute after:top-0 after:right-0 after:w-[20%] after:h-[20%] after:bg-(--asset-color) after:opacity-50\n ${className}\n `\n : className;\n\n if (!fontAwesome) {\n return <>{assetId}</>;\n }\n\n if (assetId === \"scene\") {\n return (\n <AssetScene\n variant={variant}\n className={_className}\n style={{ color: color, \"--asset-color\": color } as React.CSSProperties}\n />\n );\n }\n\n return (\n <Icon\n className={cn(\n fontAwesome,\n weight === \"solid\" ? \"fas\" : weight === \"regular\" ? \"far\" : \"fal\",\n \"text-(--asset-color)\",\n _className,\n )}\n style={{ \"--asset-color\": color } as React.CSSProperties}\n />\n );\n};\n\n//------------------------------------------------------------------------------\nexport const AssetScene = ({\n variant,\n className = \"\",\n style,\n}: {\n variant?: \"file\";\n className?: string;\n style?: React.CSSProperties;\n}) => {\n const _className = variant === \"file\" ? `w-[1em] px-[.4em]! h-[calc(1em*2.1)]` : \"w-[1em] h-[1em]\";\n return (\n <svg\n viewBox=\"0 0 16 16\"\n className={`inline-block self-center align-middle box-content ${_className} ${className}`}\n fill=\"currentColor\"\n style={style}\n aria-hidden=\"true\"\n focusable=\"false\"\n role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8 16C12.4183 16 16 12.4183 16 8C16 3.58172 12.4183 0 8 0C3.58172 0 0 3.58172 0 8C0 12.4183 3.58172 16 8 16ZM7.89258 3.68555C7.96094 3.66016 8.03711 3.66016 8.10742 3.68555L12.1387 5.16406L8 6.78906L3.86133 5.16211L7.89258 3.68555ZM12.1699 10.8262L8.3125 12.2402V12.2383V7.33594L12.375 5.74023V10.5332C12.375 10.6641 12.293 10.7812 12.1699 10.8262ZM8.32227 3.09766C8.11523 3.02148 7.88672 3.02148 7.67773 3.09766L3.61523 4.58789C3.24609 4.72461 3 5.07617 3 5.46875V10.5332C3 10.9258 3.24609 11.2773 3.61523 11.4121L7.67773 12.9023C7.88477 12.9785 8.11328 12.9785 8.32227 12.9023L12.3848 11.4141C12.7539 11.2773 13 10.9258 13 10.5332V5.46875C13 5.07422 12.7539 4.72266 12.3848 4.58789L8.32227 3.09766Z\"\n />\n </svg>\n );\n};\n", "//------------------------------------------------------------------------------\nimport type { CSSProperties } from \"react\";\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport interface IconProps {\n variant?: \"shadowCast\";\n // Draws a diagonal strike over the glyph (design-system `crossed`).\n crossed?: boolean;\n // Either a full Font Awesome class string (e.g. \"fal fa-cog\") ...\n className?: string;\n style?: CSSProperties;\n}\n\n//------------------------------------------------------------------------------\n// Renders a Font Awesome `<i>`. FontAwesome Pro CSS is loaded globally.\n// When `crossed`, the strike is drawn by a wrapper span's `after:` pseudo-element\n// because duotone icons already use the <i>'s ::before and ::after pseudo-elements\n// for their two glyph layers.\nconst CROSSED_CLASS_NAME =\n \"relative inline-flex items-center justify-center \" +\n \"after:content-[''] after:absolute after:left-1/2 after:top-1/2 after:w-[125%] after:h-0.5 after:rounded-[1px] \" +\n \"after:bg-accent after:-translate-x-1/2 after:-translate-y-1/2 after:-rotate-45 after:origin-center after:pointer-events-none\";\n\n//------------------------------------------------------------------------------\nexport function Icon({ variant, crossed, className, style }: IconProps) {\n if (variant === \"shadowCast\") {\n return (\n <div role=\"img\" className=\"relative text-tertiary\" style={style}>\n <Icon className={cn(\"relative z-10\", className)} />\n <Icon\n className={cn(\n \"absolute top-0 left-0 translate-x-[40%] translate-y-[15%] scale-94 text-underground/80\",\n className,\n )}\n style={{\n filter: \"drop-shadow(3px 6px 30px color-mix(in oklab, var(--color-content-tertiary) 80%, transparent))\",\n }}\n />\n </div>\n );\n }\n //--------------------------------------------------------------------------\n if (crossed) {\n return (\n <span className={CROSSED_CLASS_NAME} style={style} aria-hidden>\n <i data-slot=\"icon\" className={className} />\n </span>\n );\n }\n\n //--------------------------------------------------------------------------\n return <i data-slot=\"icon\" className={className} style={style} aria-hidden />;\n}\n", "//------------------------------------------------------------------------------\nexport const IconAssetScene = ({ size, className }: { size?: string; className?: string }) => {\n //--------------------------------------------------------------------------\n const _size = size ? `fa-${size}` : undefined;\n\n //--------------------------------------------------------------------------\n return (\n <svg\n viewBox=\"0 0 16 16\"\n height=\"1em\"\n className={`svg-inline--fa ${_size ?? \"\"} ${className ?? \"\"}`}\n fill=\"currentColor\"\n color=\"var(--asset-color-scene)\"\n aria-hidden=\"true\"\n focusable=\"false\"\n role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8 16C12.4183 16 16 12.4183 16 8C16 3.58172 12.4183 0 8 0C3.58172 0 0 3.58172 0 8C0 12.4183 3.58172 16 8 16ZM7.89258 3.68555C7.96094 3.66016 8.03711 3.66016 8.10742 3.68555L12.1387 5.16406L8 6.78906L3.86133 5.16211L7.89258 3.68555ZM12.1699 10.8262L8.3125 12.2402V12.2383V7.33594L12.375 5.74023V10.5332C12.375 10.6641 12.293 10.7812 12.1699 10.8262ZM8.32227 3.09766C8.11523 3.02148 7.88672 3.02148 7.67773 3.09766L3.61523 4.58789C3.24609 4.72461 3 5.07617 3 5.46875V10.5332C3 10.9258 3.24609 11.2773 3.61523 11.4121L7.67773 12.9023C7.88477 12.9785 8.11328 12.9785 8.32227 12.9023L12.3848 11.4141C12.7539 11.2773 13 10.9258 13 10.5332V5.46875C13 5.07422 12.7539 4.72266 12.3848 4.58789L8.32227 3.09766Z\"\n />\n </svg>\n );\n};\n", "//------------------------------------------------------------------------------\nimport { Accordion as AccordionPrimitive } from \"@base-ui/react/accordion\";\n\n//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nfunction Accordion({ ...props }: AccordionPrimitive.Root.Props) {\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />;\n}\n\n//------------------------------------------------------------------------------\nfunction AccordionItem({ className, ...props }: AccordionPrimitive.Item.Props) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn(\"group/accordion-item\", className)}\n {...props}\n />\n );\n}\n\n//------------------------------------------------------------------------------\nfunction AccordionTrigger({ className, children, ...props }: AccordionPrimitive.Trigger.Props) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n \"flex flex-1 items-center justify-between gap-3 py-2 text-left text-sm outline-0 transition-colors cursor-pointer\",\n \"text-secondary hover:text-primary\",\n \"focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n {children}\n {/* <Icon className=\"fal fa-chevron-right text-3xs text-tertiary shrink-0 transition-transform duration-200 group-data-open/accordion-item:rotate-90\" /> */}\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n}\n\n//------------------------------------------------------------------------------\nfunction AccordionContent({ className, children, ...props }: AccordionPrimitive.Panel.Props) {\n return (\n <AccordionPrimitive.Panel\n data-slot=\"accordion-content\"\n className={cn(\n \"h-(--accordion-panel-height) overflow-hidden text-sm transition-[height] duration-200 ease-out\",\n \"data-starting-style:h-0 data-ending-style:h-0\",\n )}\n {...props}\n >\n <div className={cn(\"pb-3\", className)}>{children}</div>\n </AccordionPrimitive.Panel>\n );\n}\n\n//------------------------------------------------------------------------------\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n", "import * as React from \"react\";\nimport { Drawer as DrawerPrimitive } from \"@base-ui/react/drawer\";\n\nimport { cn } from \"@/utils/css\";\nimport { Button } from \"./button\";\nimport { Icon } from \"./icon\";\n\n//------------------------------------------------------------------------------\nfunction BottomSheet({\n swipeDirection = \"down\",\n closeOnBlur = true,\n ...props\n}: Omit<DrawerPrimitive.Root.Props, \"disablePointerDismissal\"> & {\n /**\n * Whether the sheet closes when it loses focus (outside press or focus moving outside it).\n * @default true\n */\n closeOnBlur?: boolean;\n}) {\n return (\n <DrawerPrimitive.Root\n data-slot=\"bottom-sheet\"\n swipeDirection={swipeDirection}\n disablePointerDismissal={!closeOnBlur}\n {...props}\n />\n );\n}\n\nfunction BottomSheetTrigger({ ...props }: DrawerPrimitive.Trigger.Props) {\n return <DrawerPrimitive.Trigger data-slot=\"bottom-sheet-trigger\" {...props} />;\n}\n\nfunction BottomSheetPortal({ ...props }: DrawerPrimitive.Portal.Props) {\n return <DrawerPrimitive.Portal data-slot=\"bottom-sheet-portal\" {...props} />;\n}\n\nfunction BottomSheetClose({ ...props }: DrawerPrimitive.Close.Props) {\n return <DrawerPrimitive.Close data-slot=\"bottom-sheet-close\" {...props} />;\n}\n\nfunction BottomSheetOverlay({ className, ...props }: DrawerPrimitive.Backdrop.Props) {\n return (\n <DrawerPrimitive.Backdrop\n data-slot=\"bottom-sheet-overlay\"\n className={cn(\n \"fixed inset-0 isolate z-10100 bg-ground/40 backdrop-blur-xs transition-opacity duration-100 ease-out data-swiping:transition-none\",\n \"data-open:animate-in data-open:fade-in-0 data-open:duration-100\",\n // Swipe-to-dismiss animates the popup itself via JS, so skip the generic\n // keyframe exit here and just let the inline opacity (bound to the live\n // swipe progress below) carry the fade through \u2014 running both at once is\n // what caused the opacity to jump/flicker back to full before fading out.\n // fill-mode-forwards holds the animated opacity at 0 once the exit keyframe\n // ends instead of snapping back to the inline style's base opacity (1) for\n // the frame before the node actually unmounts.\n \"data-closed:not-data-swipe-dismiss:animate-out data-closed:not-data-swipe-dismiss:fade-out-0 data-closed:not-data-swipe-dismiss:duration-100 data-closed:not-data-swipe-dismiss:fill-mode-forwards\",\n className,\n )}\n {...props}\n style={{ opacity: \"calc(1 - var(--drawer-swipe-progress, 0))\" }}\n />\n );\n}\n\nfunction BottomSheetViewport({ className, ...props }: DrawerPrimitive.Viewport.Props) {\n return (\n <DrawerPrimitive.Viewport\n data-slot=\"bottom-sheet-viewport\"\n className={cn(\"fixed inset-x-0 bottom-0 z-10110 flex justify-center outline-0\", className)}\n {...props}\n />\n );\n}\n\nfunction BottomSheetContent({\n className,\n children,\n showHandle = true,\n showCloseButton = false,\n showOverlay = true,\n ...props\n}: DrawerPrimitive.Popup.Props & {\n showHandle?: boolean;\n showCloseButton?: boolean;\n showOverlay?: boolean;\n}) {\n return (\n <BottomSheetPortal>\n {showOverlay && <BottomSheetOverlay />}\n <BottomSheetViewport>\n <DrawerPrimitive.Popup\n data-slot=\"bottom-sheet-content\"\n className={cn(\n \"relative flex w-full flex-col rounded-t-2xl bg-ground/80 backdrop-blur-lg p-4 pt-2 pb-[calc(1rem+env(safe-area-inset-bottom))] text-sm text-popover-foreground ring-1 ring-foreground/10 outline-0\",\n // While dragging, the swipe offset lives in an inline transform that is removed\n // on release; only --drawer-swipe-movement-y keeps it. Binding the resting\n // transform to that variable makes the exit keyframe start from where the\n // sheet was released instead of jumping back to its fully open position.\n \"transform-[translateY(var(--drawer-swipe-movement-y,0px))]\",\n // fill-mode-forwards keeps the popup translated off-screen once the exit\n // keyframe ends instead of snapping back to its resting position (fully\n // visible) for a frame before the node actually unmounts.\n \"data-open:animate-in data-open:slide-in-from-bottom data-open:duration-200 data-closed:animate-out data-closed:slide-out-to-bottom data-closed:duration-150 data-closed:fill-mode-forwards\",\n className,\n )}\n {...props}\n >\n {showHandle && (\n <div\n data-slot=\"bottom-sheet-handle\"\n className=\"self-center h-px w-8 -translate-y-1 rounded-full bg-(--color-content-secondary)/50 touch-none select-none\"\n aria-hidden\n />\n )}\n {children}\n {showCloseButton && (\n <DrawerPrimitive.Close\n data-slot=\"bottom-sheet-close\"\n render={<Button variant=\"ghost\" className=\"absolute top-2 right-2\" size=\"icon-sm\" />}\n >\n <Icon className=\"fas fa-xmark\" />\n <span className=\"sr-only\">Close</span>\n </DrawerPrimitive.Close>\n )}\n {/* Out-of-flow: extends the sheet's background past its own bottom edge without\n growing the popup's layout box (which would otherwise enlarge the viewport's\n hit-testable area over the canvas). Only revealed by swiping/rubber-banding up. */}\n <div\n aria-hidden\n className=\"pointer-events-none absolute inset-x-0 top-full h-[30vh] bg-ground/50 backdrop-blur-lg\"\n />\n </DrawerPrimitive.Popup>\n </BottomSheetViewport>\n </BottomSheetPortal>\n );\n}\n\nfunction BottomSheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"bottom-sheet-header\" className={cn(\"flex flex-col gap-2\", className)} {...props} />;\n}\n\nfunction BottomSheetFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean;\n}) {\n return (\n <div\n data-slot=\"bottom-sheet-footer\"\n className={cn(\n \"-mx-4 -mb-4 flex flex-col-reverse sm:flex-row gap-2 rounded-b-xl border-t border-tertiary bg-muted/50 p-4 pb-[calc(1rem+env(safe-area-inset-bottom))] sm:justify-end\",\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DrawerPrimitive.Close render={<Button variant=\"outline\" />}>Close</DrawerPrimitive.Close>\n )}\n </div>\n );\n}\n\nfunction BottomSheetTitle({ className, ...props }: DrawerPrimitive.Title.Props) {\n return (\n <DrawerPrimitive.Title\n data-slot=\"bottom-sheet-title\"\n className={cn(\n \"font-heading uppercase text-4xs leading-none font-medium text-tertiary pl-3 mt-1\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction BottomSheetDescription({ className, ...props }: DrawerPrimitive.Description.Props) {\n return (\n <DrawerPrimitive.Description\n data-slot=\"bottom-sheet-description\"\n className={cn(\n \"text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n BottomSheet,\n BottomSheetClose,\n BottomSheetContent,\n BottomSheetDescription,\n BottomSheetFooter,\n BottomSheetHeader,\n BottomSheetOverlay,\n BottomSheetPortal,\n BottomSheetTitle,\n BottomSheetTrigger,\n BottomSheetViewport,\n};\n", "//------------------------------------------------------------------------------\nimport type { ComponentPropsWithoutRef, ElementType } from \"react\";\nimport { Button as ButtonPrimitive } from \"@base-ui/react/button\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\n//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nconst buttonVariants = cva(\n `\n group/button inline-flex shrink-0 items-center justify-center\n text-sm font-normal whitespace-nowrap select-none\n bg-clip-padding outline-0 transition-all\n disabled:pointer-events-none disabled:opacity-50\n aria-invalid:border-negative aria-invalid:ring-3 aria-invalid:ring-negative/20 dark:aria-invalid:border-negative/50 dark:aria-invalid:ring-negative/40\n [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 cursor-pointer\n \n `,\n {\n variants: {\n variant: {\n default: \"bg-primary text-(--color-bg-ground) hover:bg-primary/90\",\n accent: \"bg-accent text-black hover:text-black hover:bg-accent-400\",\n outline:\n \"text-primary border border-(--color-content-primary)/50 hover:border-(--color-content-primary)/80\",\n \"outline-accent\": \"text-accent border border-accent/50 hover:border-accent/80\",\n secondary: \"bg-secondary/10 text-secondary hover:bg-secondary/20\",\n ghost: \"text-secondary hover:text-primary active:text-primary\",\n \"ghost-shadow\": cn(\n \"relative text-neutral-0/80 [text-shadow:0_0_1px_black/40]\",\n \"before:content-[''] before:absolute before:inset-0 before:scale-150 before:bg-neutral-1000 before:opacity-50 before:rounded-full before:blur-lg before:z-[-1]\",\n \"data-[active=true]:z-1 data-[active=true]:before:opacity-100\",\n ),\n destructive: cn(\n \"bg-negative/10 text-negative hover:bg-negative/20\",\n \"focus-visible:border-negative/40 focus-visible:ring-negative/20 dark:bg-negative/20 dark:hover:bg-negative/30 dark:focus-visible:ring-negative/40\",\n ),\n link: \"text-primary underline-offset-4 hover:underline\",\n overlay: cn(\n \"relative text-primary hover:text-primary/90\",\n \"before:absolute before:inset-y-0.5 before:inset-x-0.5 before:rounded-full before:z-[-1]\",\n \"before:bg-neutral-1000/25 before:opacity-0 before:transition-opacity before:duration-500 before:ease-out\",\n \"data-[active=true]:z-1 data-[active=true]:before:opacity-100\",\n ),\n \"overlay-outline\": cn(\n \"border border-primary/40\",\n \"relative text-primary hover:text-primary/90\",\n \"before:absolute before:inset-y-0.5 before:inset-x-0.5 before:rounded-[inherit] before:corner-shape-[inherit] before:z-[-1]\",\n \"before:bg-neutral-1000/25 before:opacity-0 before:transition-opacity before:duration-500 before:ease-out\",\n \"data-[active=true]:z-1 data-[active=true]:before:opacity-100\",\n ),\n },\n size: {\n \"3xs\": \"min-h-4 gap-1 px-1 text-4xs rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n \"2xs\": \"min-h-5 gap-1 px-1 text-3xs rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n xs: \"min-h-6 gap-1 px-2 text-2xs rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"min-h-7 gap-1 px-2.5 text-xs rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5\",\n md: \"min-h-8 gap-1.5 px-3 text-sm **:data-[slot=icon]:text-xs has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n lg: \"min-h-9 text-md gap-1.5 px-3 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n xl: \"min-h-12 text-lg gap-1.5 px-2.5 font-medium tracking-wide has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n \"icon-xs\":\n \"text-3xs size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg\",\n \"icon-sm\": \"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg\",\n \"icon-md\": \"text-base size-8\",\n \"icon-lg\": \"text-xl size-9\",\n \"icon-xl\": \"text-xl size-10\",\n },\n round: {\n true: \"rounded-full\",\n false: \"rounded-xl [corner-shape:squircle]\",\n },\n active: {\n true: \"\",\n false: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n },\n);\n\n//------------------------------------------------------------------------------\ntype ButtonOwnProps = VariantProps<typeof buttonVariants> & {\n active?: boolean;\n};\n\ntype ButtonProps<T extends ElementType = \"button\"> = ButtonOwnProps & {\n as?: T;\n} & Omit<T extends \"button\" ? ButtonPrimitive.Props : ComponentPropsWithoutRef<T>, keyof ButtonOwnProps | \"as\">;\n\n//------------------------------------------------------------------------------\nfunction Button<T extends ElementType = \"button\">({\n as,\n className,\n variant = \"default\",\n size = \"md\",\n round = false,\n active = false,\n children,\n ...props\n}: ButtonProps<T>) {\n //--------------------------------------------------------------------------\n const As = (!as || as === \"button\" ? ButtonPrimitive : as) as ElementType;\n\n //--------------------------------------------------------------------------\n return (\n <As\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, round, active }), className)}\n data-active={active}\n {...props}\n >\n {children}\n </As>\n );\n}\n\n//------------------------------------------------------------------------------\nexport { Button, buttonVariants };\n", "//------------------------------------------------------------------------------\nimport { Button } from \"./button\";\nimport { Icon } from \"./icon\";\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nfunction ButtonTile({\n as,\n className,\n variant = \"ghost\",\n size = \"md\",\n orientation = \"vertical\",\n round = false,\n icon,\n rightComponent,\n isEnabled = true,\n children,\n ...props\n}: any & {\n as?: React.ElementType;\n orientation?: \"vertical\" | \"inline\";\n icon?: string;\n rightComponent?: React.ReactNode;\n isEnabled?: boolean;\n}) {\n //--------------------------------------------------------------------------\n return (\n <Button\n {...props}\n as={as}\n variant={variant}\n size={size}\n round={round}\n className={cn(className, isEnabled ? \"\" : \"opacity-75\")}\n >\n <div\n className={cn(\n \"grow flex py-2\",\n orientation === \"inline\" ? \"items-center gap-2\" : \"gap-1.5 flex-col justify-between items-start\",\n )}\n >\n {icon && <Icon className={icon} crossed={!isEnabled} />}\n {children}\n </div>\n {rightComponent}\n </Button>\n );\n}\n\n//------------------------------------------------------------------------------\nexport { ButtonTile };\n", "//------------------------------------------------------------------------------\nimport { Icon } from \"./icon\";\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport const DataItem = ({\n children,\n size = \"sm\",\n className,\n}: {\n children: React.ReactNode;\n size?: \"sm\" | \"2xs\" | \"3xs\";\n className?: string;\n}) => {\n //--------------------------------------------------------------------------\n const textSize = size === \"2xs\" ? \"text-2xs\" : size === \"3xs\" ? \"text-3xs\" : \"text-sm\";\n // Tighter sizes trim the label padding, and the icon follows so it stays aligned with the first line.\n const dataItemLabelPaddingY = [\"3xs\", \"2xs\"].includes(size) && \"**:data-[slot=data-item-label]:py-1.5\";\n\n //--------------------------------------------------------------------------\n return (\n <fieldset\n className={cn(\n \"flex gap-2 items-baseline justify-center w-full px-2.5\",\n textSize,\n dataItemLabelPaddingY,\n className,\n )}\n >\n {children}\n </fieldset>\n );\n};\n\n//------------------------------------------------------------------------------\nexport const DataItemLabel = ({\n children,\n icon,\n className,\n}: {\n children: React.ReactNode;\n icon?: string;\n className?: string;\n}) => {\n return (\n <div\n data-slot=\"data-item-label\"\n className={cn(\"relative grow flex py-2 items-baseline gap-3 text-balance\", className)}\n >\n {icon && <Icon className={cn(\"text-[88%] text-tertiary -translate-y-px\", icon)} />}\n {children}\n </div>\n );\n};\n\n//------------------------------------------------------------------------------\nexport const DataItemTitle = ({ children, className }: { children: React.ReactNode; className?: string }) => {\n return <p className={className}>{children}</p>;\n};\n\n//------------------------------------------------------------------------------\nexport const DataItemDescription = ({ children, className }: { children: React.ReactNode; className?: string }) => {\n return <p className={cn(\"my-px text-[88%] leading-tight text-tertiary\", className)}>{children}</p>;\n};\n\n//------------------------------------------------------------------------------\nexport const DataItemValue = ({ children, className }: { children: React.ReactNode; className?: string }) => {\n return <div className={cn(\"text-primary\", className)}>{children}</div>;\n};\n", "import * as React from \"react\";\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\";\n\nimport { cn } from \"@/utils/css\";\nimport { Button } from \"./button\";\nimport { Icon } from \"./icon\";\n\n//------------------------------------------------------------------------------\nfunction Dialog({ ...props }: DialogPrimitive.Root.Props) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\nfunction DialogTrigger({ ...props }: DialogPrimitive.Trigger.Props) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\nfunction DialogPortal({ ...props }: DialogPrimitive.Portal.Props) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n}\n\nfunction DialogClose({ ...props }: DialogPrimitive.Close.Props) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n}\n\nfunction DialogOverlay({ className, ...props }: DialogPrimitive.Backdrop.Props) {\n return (\n <DialogPrimitive.Backdrop\n data-slot=\"dialog-overlay\"\n className={cn(\n \"fixed inset-0 isolate z-10100 bg-ground/80 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = false,\n ...props\n}: DialogPrimitive.Popup.Props & {\n showCloseButton?: boolean;\n}) {\n return (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Popup\n data-slot=\"dialog-content\"\n className={cn(\n \"fixed top-1/2 left-1/2 z-10110 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-0 sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n render={<Button variant=\"ghost\" className=\"absolute top-2 right-2\" size=\"icon-sm\" />}\n >\n <Icon className=\"fal fa-xmark\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Popup>\n </DialogPortal>\n );\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"dialog-header\" className={cn(\"flex flex-col gap-2\", className)} {...props} />;\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean;\n}) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:justify-end\",\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close render={<Button variant=\"outline\" />}>Close</DialogPrimitive.Close>\n )}\n </div>\n );\n}\n\nfunction DialogTitle({ className, ...props }: DialogPrimitive.Title.Props) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"font-heading text-base leading-none font-medium\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogDescription({ className, ...props }: DialogPrimitive.Description.Props) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\n \"text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n", "//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport const DotPing = ({ className, isActive }: { className?: string; isActive?: boolean }) => {\n return (\n <span\n className={cn(\n \"relative block w-2 h-2 rounded-full bg-current z-1 pointer-events-none\",\n \"before:content-[''] before:block before:w-4 before:h-4 before:absolute before:-inset-1 before:rounded-full before:bg-inherit before:opacity-10\",\n isActive ? \"text-positive before:animate-pulse\" : \"text-primary/40 before:animate-none\",\n className,\n )}\n />\n );\n};\n", "//------------------------------------------------------------------------------\nimport { Icon } from \"./icon\";\n\n//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport const EmptyState = ({\n icon,\n title,\n description,\n variant = \"default\",\n className,\n}: {\n icon: string;\n title: string;\n description: string;\n variant?: \"default\" | \"glow\";\n className?: string;\n}) => {\n return (\n <div\n className={cn(\n \"flex flex-col items-center gap-4 text-center px-3 py-7 text-balance\",\n variant === \"glow\" && \"glow-effect\",\n className,\n )}\n >\n {icon && (\n <div className=\"flex shrink-0 items-center justify-center\">\n <Icon\n className={cn(\n icon,\n \"text-2xl text-tertiary\",\n variant === \"glow\" && \"drop-shadow-[0_12px_6px_var(--color-bg-underground)]\",\n )}\n />\n </div>\n )}\n <div className=\"flex flex-col gap-0.5\">\n {title && <span className=\"text-md\">{title}</span>}\n {description && <span className=\"mt-px text-3xs text-tertiary font-normal\">{description}</span>}\n </div>\n </div>\n );\n};\n", "//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport interface IslandPanelProps {\n children: React.ReactNode;\n className?: string;\n shadow?: \"lg\" | \"none\";\n as?: React.ElementType;\n}\n\n//------------------------------------------------------------------------------\nexport const IslandPanel = ({ children, shadow = \"none\", className, as, ...rest }: IslandPanelProps) => {\n const Component = as || \"div\";\n return (\n <Component\n className={cn(\n \"flex items-center bg-ground/50 backdrop-blur-sm border border-white/20 rounded-full [corner-shape:squircle]\",\n \"pointer-events-auto\",\n shadow === \"lg\" && \"shadow-[0_20px_15px_-12px_rgba(0,0,0,.35)]\",\n className,\n )}\n {...rest}\n >\n {children}\n </Component>\n );\n};\n", "//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport interface KbdProps {\n children: React.ReactNode;\n className?: string;\n}\n\n//------------------------------------------------------------------------------\nexport const Kbd = ({ children, className }: KbdProps) => (\n <kbd\n className={cn(\n \"inline-flex items-center justify-center min-w-4 h-4 px-1 rounded border border-current/30 text-[0.65rem] leading-none font-normal uppercase opacity-70\",\n className,\n )}\n >\n {children}\n </kbd>\n);\n", "//------------------------------------------------------------------------------\nimport type { ComponentPropsWithoutRef } from \"react\";\nimport { Icon } from \"./icon\";\n\n//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport function Loader({ className, ...rest }: ComponentPropsWithoutRef<typeof Icon>) {\n return <Icon className={cn(\"fal fa-spinner size-6 animate-spin text-primary\", className)} {...rest} />;\n}\n", "import { Menu as MenuPrimitive } from \"@base-ui/react/menu\";\n\nimport { cn } from \"@/utils/css\";\n\nfunction Menu({ ...props }: MenuPrimitive.Root.Props) {\n return <MenuPrimitive.Root data-slot=\"menu\" {...props} />;\n}\n\nfunction MenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) {\n return <MenuPrimitive.Trigger data-slot=\"menu-trigger\" {...props} />;\n}\n\nfunction MenuPortal({ ...props }: MenuPrimitive.Portal.Props) {\n return <MenuPrimitive.Portal data-slot=\"menu-portal\" {...props} />;\n}\n\nfunction MenuPositioner({ className, sideOffset = 8, align = \"end\", ...props }: MenuPrimitive.Positioner.Props) {\n return (\n <MenuPrimitive.Positioner\n data-slot=\"menu-positioner\"\n sideOffset={sideOffset}\n align={align}\n className={cn(\"z-10110 outline-0\", className)}\n {...props}\n />\n );\n}\n\nfunction MenuContent({ className, children, ...props }: MenuPrimitive.Popup.Props) {\n return (\n <MenuPortal>\n <MenuPositioner>\n <MenuPrimitive.Popup\n data-slot=\"menu-content\"\n className={cn(\n \"min-w-40 origin-(--transform-origin) bg-ground/80 backdrop-blur-lg p-1 text-xs outline-0\",\n \"rounded-xl [corner-shape:squircle]\",\n \"data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n className,\n )}\n {...props}\n >\n {children}\n </MenuPrimitive.Popup>\n </MenuPositioner>\n </MenuPortal>\n );\n}\n\nfunction MenuItem({ className, ...props }: MenuPrimitive.Item.Props) {\n return (\n <MenuPrimitive.Item\n data-slot=\"menu-item\"\n className={cn(\n \"flex cursor-pointer items-center gap-3 rounded-sm px-2 py-1 text-sm outline-0 select-none\",\n \"data-highlighted:bg-primary/10 data-highlighted:text-primary\",\n \"data-disabled:pointer-events-none data-disabled:opacity-50\",\n \"transition-colors duration-200 ease-in-out\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 **:data-[slot=icon]:text-3xs **:data-[slot=icon]:w-3\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction MenuSeparator({ className, ...props }: MenuPrimitive.Separator.Props) {\n return (\n <MenuPrimitive.Separator\n data-slot=\"menu-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-foreground/10\", className)}\n {...props}\n />\n );\n}\n\nfunction MenuGroup({ ...props }: MenuPrimitive.Group.Props) {\n return <MenuPrimitive.Group data-slot=\"menu-group\" {...props} />;\n}\n\nfunction MenuGroupLabel({ className, ...props }: MenuPrimitive.GroupLabel.Props) {\n return (\n <MenuPrimitive.GroupLabel\n data-slot=\"menu-group-label\"\n className={cn(\"px-2.5 py-1.5 text-xs text-tertiary\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Menu,\n MenuTrigger,\n MenuPortal,\n MenuPositioner,\n MenuContent,\n MenuItem,\n MenuSeparator,\n MenuGroup,\n MenuGroupLabel,\n};\n", "//------------------------------------------------------------------------------\nimport type { CSSProperties, ReactNode } from \"react\";\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\";\n\n//------------------------------------------------------------------------------\nimport { Button } from \"./button\";\nimport { Icon } from \"./icon\";\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\n// Lightweight full-viewport modal built directly on Base UI's Dialog primitive.\n// Portalled into #app-container (see below) rather than <body> so it keeps its\n// explicit z-index context. A dark scrim is drawn by default; callers override\n// it via `backdropBg`.\nexport interface ModalProps {\n open: boolean;\n onClose?: () => void;\n closeIcon?: boolean;\n fullScreen?: boolean;\n disableBackdropClick?: boolean;\n disableEscapeKeyDown?: boolean;\n backdropBg?: string;\n className?: string;\n style?: CSSProperties;\n children?: ReactNode;\n \"aria-labelledby\"?: string;\n}\n\n//------------------------------------------------------------------------------\nexport function Modal({\n open,\n onClose,\n closeIcon,\n fullScreen,\n disableBackdropClick,\n disableEscapeKeyDown,\n backdropBg = \"var(--color-underground)\",\n className,\n style,\n children,\n ...rest\n}: ModalProps) {\n //--------------------------------------------------------------------------\n return (\n <DialogPrimitive.Root\n open={open}\n modal\n disablePointerDismissal={disableBackdropClick}\n onOpenChange={(isOpen, eventDetails) => {\n if (isOpen) {\n return;\n }\n if (disableEscapeKeyDown && eventDetails.reason === \"escape-key\") {\n return;\n }\n onClose?.();\n }}\n >\n {/* Portalled into #app-container (rather than the default <body>) so it\n stays inside that root's explicit z-index stacking context. See the\n comment on #app-container in index.html about the zIndex > 10000\n requirement. */}\n <DialogPrimitive.Portal container={document.getElementById(\"app-container\")}>\n {/* Match content's z-index: raised explicitly so `style.zIndex`\n (e.g. 10005) always wins over the HUD's 10003. */}\n <DialogPrimitive.Backdrop\n className=\"fixed inset-0\"\n style={{ background: backdropBg, opacity: 0.9, zIndex: style?.zIndex }}\n />\n <DialogPrimitive.Popup\n className={cn(\"fixed inset-0 flex items-center justify-center\", !fullScreen && \"p-4\", className)}\n style={{\n ...style,\n width: fullScreen ? \"100%\" : undefined,\n height: fullScreen ? \"100%\" : undefined,\n }}\n aria-labelledby={rest[\"aria-labelledby\"]}\n >\n {closeIcon && (\n <DialogPrimitive.Close\n render={\n <Button\n aria-label=\"Close\"\n variant=\"ghost\"\n size=\"icon-md\"\n className=\"absolute top-4 right-4\"\n />\n }\n >\n <Icon className=\"fal fa-xmark\" />\n </DialogPrimitive.Close>\n )}\n {children}\n </DialogPrimitive.Popup>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n}\n", "//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport interface PanelProps {\n startingTransiton?: boolean;\n children: React.ReactNode;\n className?: string;\n ref?: React.RefObject<HTMLDivElement>;\n}\n\nexport const Panel = ({ startingTransiton = false, children, className, ref, ...rest }: PanelProps) => {\n return (\n <aside\n ref={ref}\n data-slot=\"panel\"\n className={cn(\n \"border border-primary/50 bg-ground/80 backdrop-blur-sm shadow-[0_10px_20px_-8px_rgba(0,0,0,.6)]\",\n \"rounded-[1rem] [corner-shape:squircle]\",\n startingTransiton &&\n \"starting:opacity-0 starting:translate-y-4 starting:scale-95 transition-all duration-350 ease-in-out\",\n \"pointer-events-auto\",\n className,\n )}\n {...rest}\n >\n {children}\n </aside>\n );\n};\n\n//------------------------------------------------------------------------------\nexport interface PanelHeaderProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const PanelHeader = ({ children, className, ...rest }: PanelHeaderProps) => {\n return (\n <header className={cn(\"flex px-3 py-2\", className)} {...rest}>\n {children}\n </header>\n );\n};\n\n//------------------------------------------------------------------------------\nexport interface PanelTitleProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const PanelTitle = ({ children, className, ...rest }: PanelTitleProps) => {\n return (\n <h2 className={cn(\"text-[.7rem] text-secondary font-normal tracking-wider uppercase\", className)} {...rest}>\n {children}\n </h2>\n );\n};\n", "import * as React from \"react\";\nimport { Popover as PopoverPrimitive } from \"@base-ui/react/popover\";\n\nimport { cn } from \"@/utils/css\";\n\nfunction Popover({ ...props }: PopoverPrimitive.Root.Props) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\n}\n\nfunction PopoverTrigger({ ...props }: PopoverPrimitive.Trigger.Props) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n alignOffset = 0,\n side = \"bottom\",\n sideOffset = 4,\n shadow,\n anchor,\n ...props\n}: PopoverPrimitive.Popup.Props &\n Pick<PopoverPrimitive.Positioner.Props, \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"> & {\n shadow?: \"lg\";\n anchor?: HTMLElement | null | React.RefObject<HTMLElement | null>;\n }) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n anchor={anchor}\n className=\"z-10110\"\n >\n <PopoverPrimitive.Popup\n data-slot=\"popover-content\"\n className={cn(\n \"border border-primary/50 bg-ground/80 backdrop-blur-sm \",\n \"rounded-[1rem] [corner-shape:squircle]\",\n \"flex w-72 origin-(--transform-origin) flex-col gap-2.5 p-2.5 text-sm text-popover-foreground outline-hidden duration-100\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n shadow === \"lg\"\n ? \"shadow-[0_20px_15px_-12px_rgba(0,0,0,.35)]\"\n : \"shadow-[0_10px_20px_-8px_rgba(0,0,0,.6)]\",\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Positioner>\n </PopoverPrimitive.Portal>\n );\n}\n\nfunction PopoverHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"popover-header\" className={cn(\"flex flex-col gap-0.5 text-sm\", className)} {...props} />;\n}\n\nfunction PopoverTitle({ className, ...props }: PopoverPrimitive.Title.Props) {\n return <PopoverPrimitive.Title data-slot=\"popover-title\" className={cn(\"font-medium\", className)} {...props} />;\n}\n\nfunction PopoverDescription({ className, ...props }: PopoverPrimitive.Description.Props) {\n return (\n <PopoverPrimitive.Description\n data-slot=\"popover-description\"\n className={cn(\"text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nexport { Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger };\n", "//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport const ScrollableArea = ({\n direction = \"horizontal\",\n children,\n className,\n ref,\n}: {\n direction?: \"horizontal\" | \"vertical\";\n children: React.ReactNode;\n className?: string;\n ref?: React.Ref<HTMLDivElement>;\n}) => {\n return (\n <div\n ref={ref}\n className={cn(\n direction === \"horizontal\" ? \"overflow-x-auto\" : \"overflow-y-auto\",\n direction === \"horizontal\"\n ? \"[-webkit-mask-image:linear-gradient(to_right,transparent,black_16px,black_calc(100%-16px),transparent)]\"\n : \"[-webkit-mask-image:linear-gradient(to_bottom,transparent,black_16px,black_calc(100%-16px),transparent)]\",\n direction === \"horizontal\"\n ? \"mask-[linear-gradient(to_right,transparent,black_16px,black_calc(100%-16px),transparent)]\"\n : \"mask-[linear-gradient(to_bottom,transparent,black_16px,black_calc(100%-16px),transparent)]\",\n className,\n )}\n >\n {children}\n </div>\n );\n};\n", "//------------------------------------------------------------------------------\nimport { Fragment, useMemo } from \"react\";\nimport { Slider as SliderPrimitive } from \"@base-ui/react/slider\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\n//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\n// Parts read their dimensions and color from variables set on the root:\n// --slider-bar cross size of the \"default\" bar (heights follow Button sizes)\n// --slider-thumb size of the \"classic\" thumb\n// --slider-accent fill/handle color, swapped for the tertiary content color when read-only\nconst sliderVariants = cva(\n [\n \"flex [--slider-accent:var(--color-accent)] data-readonly:[--slider-accent:var(--color-tertiary)]\",\n \"data-[orientation=horizontal]:w-full data-[orientation=horizontal]:flex-col data-[orientation=vertical]:h-full\",\n \"data-disabled:opacity-50 data-disabled:cursor-not-allowed\",\n ],\n {\n variants: {\n size: {\n \"2xs\": \"text-3xs [--slider-bar:--spacing(5)] [--slider-thumb:--spacing(2.5)]\",\n xs: \"text-2xs [--slider-bar:--spacing(6)] [--slider-thumb:--spacing(3)]\",\n sm: \"text-xs [--slider-bar:--spacing(7)] [--slider-thumb:--spacing(3.5)]\",\n md: \"text-sm [--slider-bar:--spacing(8)] [--slider-thumb:--spacing(4)]\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n },\n);\n\n//------------------------------------------------------------------------------\n// \"default\" is a bar tall enough to hold its value, marked by a 1px handle.\n// \"classic\" is a thin track with a round thumb.\nconst sliderControlVariants = cva(\n \"relative flex touch-none items-center select-none data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-32 data-[orientation=vertical]:flex-col\",\n {\n variants: {\n variant: {\n default: [\n \"data-[orientation=horizontal]:h-(--slider-bar) data-[orientation=vertical]:w-(--slider-bar)\",\n \"not-data-disabled:cursor-col-resize not-data-disabled:data-[orientation=vertical]:cursor-row-resize\",\n ],\n classic:\n \"data-[orientation=horizontal]:h-(--slider-thumb) data-[orientation=vertical]:w-(--slider-thumb)\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\n//------------------------------------------------------------------------------\nconst sliderTrackVariants = cva(\"relative data-[orientation=horizontal]:w-full data-[orientation=vertical]:grow\", {\n variants: {\n variant: {\n default: [\n \"overflow-hidden rounded-md bg-neutral-0/10\",\n \"data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full\",\n \"has-focus-visible:ring-[3px] has-focus-visible:ring-(--slider-accent)/50\",\n ],\n classic: \"rounded-full bg-neutral-0/20 data-[orientation=horizontal]:h-1 data-[orientation=vertical]:w-1\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\n//------------------------------------------------------------------------------\nconst sliderIndicatorVariants = cva(\"\", {\n variants: {\n variant: {\n default: \"bg-(--slider-accent)/50\",\n classic: \"rounded-full bg-(--slider-accent)\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\n//------------------------------------------------------------------------------\nconst sliderThumbVariants = cva(\"block outline-0\", {\n variants: {\n variant: {\n default:\n \"bg-(--slider-accent) data-[orientation=horizontal]:h-full data-[orientation=horizontal]:w-px data-[orientation=vertical]:h-px data-[orientation=vertical]:w-full\",\n classic: [\n \"size-(--slider-thumb) cursor-grab rounded-full bg-neutral-0 shadow-sm transition-shadow\",\n \"data-dragging:cursor-grabbing data-disabled:cursor-not-allowed\",\n \"has-focus-visible:ring-[3px] has-focus-visible:ring-(--slider-accent)/50\",\n ],\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\n//------------------------------------------------------------------------------\ntype SliderMarkersProps = {\n markers: readonly number[];\n min: number;\n max: number;\n orientation: SliderPrimitive.Root.State[\"orientation\"];\n variant: VariantProps<typeof sliderTrackVariants>[\"variant\"];\n format?: Intl.NumberFormatOptions;\n locale?: Intl.LocalesArgument;\n};\n\n//------------------------------------------------------------------------------\n// Ticks and labels each get one grid track (a row, or a column when vertical), all ticks sharing one cell\n// and all labels another, so the grid sizes to them; each is then offset to its value.\n// Offsets follow the thumb's edge alignment (inset by half the thumb at both ends) so ticks line up with it.\n// Horizontally, shifting a label by its own percentage keeps the first and last ones inside the slider's\n// bounds; vertically, labels are centered on their tick, like an axis.\nfunction SliderMarkers({ markers, min, max, orientation, variant, format, locale }: SliderMarkersProps) {\n const formatter = useMemo(() => new Intl.NumberFormat(locale, format), [locale, format]);\n const vertical = orientation === \"vertical\";\n const thumbSize = variant === \"classic\" ? \"var(--slider-thumb)\" : \"1px\";\n\n return (\n <div\n aria-hidden\n data-slot=\"slider-markers\"\n data-orientation={orientation}\n className={cn(\n \"grid text-[0.8em] leading-none text-tertiary tabular-nums select-none *:relative\",\n vertical ? \"grid-cols-[auto_auto] grid-rows-1 gap-x-1 pl-1\" : \"grid-rows-[auto_auto] gap-y-0.5 pt-1\",\n )}\n >\n {markers.map(marker => {\n const percent = ((marker - min) / (max - min)) * 100;\n const offset = `calc(${thumbSize} / 2 + ${percent / 100} * (100% - ${thumbSize}))`;\n return (\n <Fragment key={marker}>\n <span\n data-slot=\"slider-marker-tick\"\n className={cn(\n \"bg-current [grid-area:1/1]\",\n vertical ? \"h-px w-1 self-end\" : \"h-1 w-px justify-self-start\",\n )}\n style={\n vertical ? { bottom: offset, translate: \"0 50%\" } : { left: offset, translate: \"-50%\" }\n }\n />\n <span\n data-slot=\"slider-marker-label\"\n className={vertical ? \"[grid-area:1/2] self-end\" : \"[grid-area:2/1] justify-self-start\"}\n style={\n vertical ? { bottom: offset, translate: \"0 50%\" } : { left: offset, translate: `-${percent}%` }\n }\n >\n {formatter.format(marker)}\n </span>\n </Fragment>\n );\n })}\n </div>\n );\n}\n\n//------------------------------------------------------------------------------\ntype SliderProps<Value extends number | readonly number[]> = SliderPrimitive.Root.Props<Value> &\n Pick<SliderPrimitive.Thumb.Props, \"getAriaLabel\"> &\n VariantProps<typeof sliderVariants> &\n VariantProps<typeof sliderTrackVariants> & {\n /** Values ticked and labelled below the slider (beside it when vertical), formatted like the value itself. */\n markers?: readonly number[];\n /** Shows the value without letting it change; the accent color turns to the tertiary content color. */\n readOnly?: boolean;\n };\n\n//------------------------------------------------------------------------------\n/**\n * A single-value or range slider: pass an array as `value`/`defaultValue` to get one thumb per entry.\n * The default variant shows its value inside the bar, formatted with the `format` and `locale` props.\n * `aria-label` and `getAriaLabel` are forwarded to the thumbs, which hold the focusable inputs.\n */\nfunction Slider<Value extends number | readonly number[]>({\n className,\n variant = \"default\",\n size = \"md\",\n value,\n defaultValue,\n min = 0,\n max = 100,\n orientation = \"horizontal\",\n format,\n locale,\n markers,\n readOnly = false,\n onValueChange,\n \"aria-label\": ariaLabel,\n getAriaLabel,\n ...props\n}: SliderProps<Value>) {\n const values = value ?? defaultValue;\n const thumbCount = Array.isArray(values) ? values.length : 1;\n\n return (\n <SliderPrimitive.Root\n data-slot=\"slider\"\n data-variant={variant}\n data-size={size}\n data-readonly={readOnly || undefined}\n value={value}\n defaultValue={defaultValue}\n min={min}\n max={max}\n orientation={orientation}\n format={format}\n locale={locale}\n thumbAlignment=\"edge\"\n onValueChange={(newValue, eventDetails) => {\n // Base UI has no read-only mode: cancelling the change keeps the value as is.\n if (readOnly) {\n eventDetails.cancel();\n return;\n }\n onValueChange?.(newValue, eventDetails);\n }}\n className={cn(sliderVariants({ size }), className)}\n {...props}\n >\n <SliderPrimitive.Control\n data-slot=\"slider-control\"\n className={cn(sliderControlVariants({ variant }), readOnly && \"pointer-events-none\")}\n >\n <SliderPrimitive.Track data-slot=\"slider-track\" className={sliderTrackVariants({ variant })}>\n <SliderPrimitive.Indicator\n data-slot=\"slider-indicator\"\n className={sliderIndicatorVariants({ variant })}\n />\n {/* Drawn above the thumbs (which take z-index 1\u20132 while active) so the handle never hides the text. */}\n {variant === \"default\" && (\n <SliderPrimitive.Value\n data-slot=\"slider-value\"\n className={cn(\n \"pointer-events-none absolute inset-0 z-10 flex items-center px-2 text-primary tabular-nums\",\n \"data-[orientation=vertical]:items-end data-[orientation=vertical]:justify-center data-[orientation=vertical]:px-0 data-[orientation=vertical]:pb-1\",\n )}\n />\n )}\n {Array.from({ length: thumbCount }, (_, index) => (\n <SliderPrimitive.Thumb\n key={index}\n index={index}\n aria-label={ariaLabel}\n getAriaLabel={getAriaLabel}\n // The thumb doesn't forward aria-readonly to its input, so it's set here.\n inputRef={input => {\n if (readOnly) input?.setAttribute(\"aria-readonly\", \"true\");\n else input?.removeAttribute(\"aria-readonly\");\n }}\n data-slot=\"slider-thumb\"\n className={sliderThumbVariants({ variant })}\n />\n ))}\n </SliderPrimitive.Track>\n </SliderPrimitive.Control>\n {markers && (\n <SliderMarkers\n markers={markers}\n min={min}\n max={max}\n orientation={orientation}\n variant={variant}\n format={format}\n locale={locale}\n />\n )}\n </SliderPrimitive.Root>\n );\n}\n\n//------------------------------------------------------------------------------\nexport { Slider };\n", "//------------------------------------------------------------------------------\nimport { Switch as SwitchPrimitive } from \"@base-ui/react/switch\";\n\n//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nfunction Switch({ className, disabled, ...props }: SwitchPrimitive.Root.Props) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n \"inline-flex h-5 w-8 shrink-0 cursor-pointer items-center rounded-full border border-transparent bg-neutral-0/20 p-0.5 transition-colors outline-0\",\n \"focus-visible:ring-[3px] focus-visible:ring-ring/50\",\n \"data-disabled:opacity-50 data-disabled:cursor-not-allowed\",\n \"data-checked:bg-accent\",\n className,\n )}\n data-disabled={disabled}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className=\"block size-4 rounded-full bg-neutral-0 opacity-50 data-checked:opacity-100 shadow-sm transition-[translate,opacity] data-checked:translate-x-3\"\n />\n </SwitchPrimitive.Root>\n );\n}\n\n//------------------------------------------------------------------------------\nexport { Switch };\n", "//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\ntype OverlayContainerProps = {\n children: React.ReactNode;\n className?: string;\n as?: React.ElementType;\n};\n//------------------------------------------------------------------------------\nexport const OverlayContainer = ({ children, className, as }: OverlayContainerProps) => {\n const Component = as || \"div\";\n return (\n <Component\n className={cn(\n \"flex rounded-full bg-neutral-1000/10 light:bg-neutral-1000/30 backdrop-blur-sm filter-[drop-shadow(2px_4px_8px_rgb(0_0_0/0.6))] light:filter-[drop-shadow(2px_4px_8px_rgb(0_0_0/0.4))]\",\n className,\n )}\n >\n {children}\n </Component>\n );\n};\n", "//------------------------------------------------------------------------------\nimport { forwardRef, type ComponentPropsWithoutRef } from \"react\";\n\n//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\n// Layout primitive replacing the design-system `Stack`. Centering props are\n// direction-aware: `vCenter`/`hCenter` always mean vertical/horizontal centering\n// regardless of `vertical`, matching the original design-system semantics.\nexport interface StackProps extends ComponentPropsWithoutRef<\"div\"> {\n fullWidth?: boolean;\n fullHeight?: boolean;\n vertical?: boolean;\n vCenter?: boolean;\n hCenter?: boolean;\n opposite?: boolean;\n gapRight?: number;\n gapBottom?: number;\n}\n\n//------------------------------------------------------------------------------\nexport const Stack = forwardRef<HTMLDivElement, StackProps>(function Stack(\n { fullWidth, fullHeight, vertical, vCenter, hCenter, opposite, gapRight, gapBottom, className, style, ...rest },\n ref,\n) {\n const isColumn = Boolean(vertical);\n const gap = gapRight ?? gapBottom;\n\n const align = isColumn ? (hCenter ? \"center\" : undefined) : vCenter ? \"center\" : undefined;\n const justify = opposite\n ? \"space-between\"\n : isColumn\n ? vCenter\n ? \"center\"\n : undefined\n : hCenter\n ? \"center\"\n : undefined;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex\",\n isColumn ? \"flex-col\" : \"flex-row\",\n fullWidth && \"w-full\",\n fullHeight && \"h-full\",\n className,\n )}\n style={{\n alignItems: align,\n justifyContent: justify,\n gap: gap !== undefined ? `${gap}rem` : undefined,\n ...style,\n }}\n {...rest}\n />\n );\n});\n", "//------------------------------------------------------------------------------\nimport { createContext, useContext, useRef, type PointerEvent as ReactPointerEvent } from \"react\";\nimport { Tabs as TabsPrimitive } from \"@base-ui/react/tabs\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\n//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nfunction Tabs({ className, orientation = \"horizontal\", ...props }: TabsPrimitive.Root.Props) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-orientation={orientation}\n className={cn(\"group/tabs flex gap-2 data-[orientation=horizontal]:flex-col\", className)}\n {...props}\n />\n );\n}\n\n//------------------------------------------------------------------------------\nconst tabsListVariants = cva(\n \"relative inline-flex w-fit items-center justify-center rounded-lg text-secondary group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col\",\n {\n variants: {\n variant: {\n default: \"bg-muted\",\n segment: \"text-white/85 border border-white/40 rounded-full\",\n line: \"gap-1 bg-transparent rounded-none\",\n },\n size: {\n \"2xs\": \"p-[2px] text-2xs group-data-[orientation=horizontal]/tabs:h-6\",\n xs: \"p-[2px] text-xs group-data-[orientation=horizontal]/tabs:h-6\",\n sm: \"p-[2px] text-sm group-data-[orientation=horizontal]/tabs:h-7\",\n md: \"p-[2px] text-md group-data-[orientation=horizontal]/tabs:h-8\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n },\n);\n\n//------------------------------------------------------------------------------\nconst tabsTriggerVariants = cva(\n cn(\n \"relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 px-1.5 py-0.5\",\n \"rounded-md border border-transparent whitespace-nowrap transition-all cursor-pointer\",\n \"group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start\",\n \"hover:text-primary focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring\",\n \"disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50\",\n \"has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n ),\n {\n variants: {\n variant: {\n default: \"text-quaternary data-active:text-primary data-active:bg-background\",\n segment: \"text-inherit data-active:text-black\",\n line: cn(\n \"text-inherit data-active:text-primary\",\n // Underline below (horizontal) or beside (vertical) the active tab.\n \"after:absolute after:bg-foreground after:opacity-0 after:transition-opacity data-active:after:opacity-100\",\n \"group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5\",\n \"group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5\",\n ),\n },\n size: {\n \"2xs\": \"\",\n xs: \"\",\n sm: \"gap-1 py-0 text-xs\",\n md: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n },\n);\n\n//------------------------------------------------------------------------------\n// Hands the list's variant/size down to its triggers, so each one only carries the classes of\n// the variant it's actually rendered in.\nconst TabsListContext = createContext<VariantProps<typeof tabsListVariants>>({ variant: \"default\", size: \"md\" });\n\n//------------------------------------------------------------------------------\n// Minimum finger movement, in pixels, before a touch is treated as a swipe rather than a tap.\nconst SWIPE_DRAG_THRESHOLD = 6;\n\n//------------------------------------------------------------------------------\ntype TriggerMetrics = { el: HTMLElement; left: number; width: number };\n\n//------------------------------------------------------------------------------\nfunction measureTriggers(list: HTMLElement): TriggerMetrics[] {\n const listRect = list.getBoundingClientRect();\n return Array.from(list.querySelectorAll<HTMLElement>('[data-slot=\"tabs-trigger\"]')).map(el => {\n const rect = el.getBoundingClientRect();\n return { el, left: rect.left - listRect.left, width: rect.width };\n });\n}\n\n//------------------------------------------------------------------------------\n// Interpolates the indicator's left/width between the two triggers surrounding `left`, so the\n// pill morphs smoothly as it tracks the finger instead of jumping between tab sizes.\nfunction interpolateIndicatorRect(left: number, triggers: TriggerMetrics[]) {\n const first = triggers[0];\n const last = triggers[triggers.length - 1];\n const clamped = Math.min(Math.max(left, first.left), last.left);\n\n for (let i = 0; i < triggers.length - 1; i++) {\n const from = triggers[i];\n const to = triggers[i + 1];\n if (clamped >= from.left && clamped <= to.left) {\n const progress = (clamped - from.left) / (to.left - from.left || 1);\n return { left: clamped, width: from.width + progress * (to.width - from.width) };\n }\n }\n return { left: clamped, width: clamped === first.left ? first.width : last.width };\n}\n\n//------------------------------------------------------------------------------\nfunction findNearestTrigger(centerX: number, triggers: TriggerMetrics[]) {\n return triggers.reduce((nearest, trigger) => {\n const triggerCenter = trigger.left + trigger.width / 2;\n const nearestCenter = nearest.left + nearest.width / 2;\n return Math.abs(centerX - triggerCenter) < Math.abs(centerX - nearestCenter) ? trigger : nearest;\n });\n}\n\n//------------------------------------------------------------------------------\n// Matches the \"text-white/85\" (inactive) / \"text-black\" (active, data-active) colors from\n// tabsListVariants/tabsTriggerVariants above, so the interpolated color lines up with the CSS-driven one\n// once a drag ends and inline styles are cleared.\nconst SEGMENT_INACTIVE_TEXT_COLOR: [number, number, number, number] = [255, 255, 255, 0.85];\nconst SEGMENT_ACTIVE_TEXT_COLOR: [number, number, number, number] = [0, 0, 0, 1];\n\n//------------------------------------------------------------------------------\nfunction mixSegmentTextColor(fraction: number): string {\n const clamped = Math.min(Math.max(fraction, 0), 1);\n const [r, g, b, a] = SEGMENT_INACTIVE_TEXT_COLOR.map(\n (channel, i) => channel + (SEGMENT_ACTIVE_TEXT_COLOR[i] - channel) * clamped,\n );\n return `rgba(${r}, ${g}, ${b}, ${a})`;\n}\n\n//------------------------------------------------------------------------------\n// How much of `trigger` the indicator rect [left, left + width] currently covers, from 0 (no\n// overlap) to 1 (indicator fully covers the trigger).\nfunction overlapFraction(left: number, width: number, trigger: TriggerMetrics): number {\n const overlap = Math.min(left + width, trigger.left + trigger.width) - Math.max(left, trigger.left);\n return Math.max(0, overlap) / trigger.width;\n}\n\n//------------------------------------------------------------------------------\n// Tints each trigger's label white-to-black by how much the indicator currently overlaps it, so\n// the text darkens as the pill slides under it instead of flipping color only once the drag ends.\nfunction applyTriggerColors(left: number, width: number, triggers: TriggerMetrics[]) {\n for (const trigger of triggers) {\n trigger.el.style.color = mixSegmentTextColor(overlapFraction(left, width, trigger));\n }\n}\n\n//------------------------------------------------------------------------------\nfunction resetTriggerColors(triggers: TriggerMetrics[]) {\n for (const trigger of triggers) {\n trigger.el.style.transition = \"\";\n trigger.el.style.color = \"\";\n }\n}\n\n//------------------------------------------------------------------------------\ntype DragState = {\n pointerId: number;\n startX: number;\n isDragging: boolean;\n activeLeft: number;\n activeEl: HTMLElement;\n triggers: TriggerMetrics[];\n};\n\n//------------------------------------------------------------------------------\ntype TabsListProps = TabsPrimitive.List.Props & VariantProps<typeof tabsListVariants> & { swipeable?: boolean };\n\n//------------------------------------------------------------------------------\n// Router: keeps the swipe-drag machinery (refs, pointer handlers) out of every TabsList that\n// doesn't ask for it \u2014 only `swipeable` segment tabs pay for it.\nfunction TabsList({ swipeable = false, variant = \"default\", ...props }: TabsListProps) {\n if (swipeable && variant === \"segment\") {\n return <SwipeableSegmentTabsList {...props} />;\n }\n return <PlainTabsList variant={variant} {...props} />;\n}\n\n//------------------------------------------------------------------------------\nfunction PlainTabsList({\n className,\n variant = \"default\",\n size = \"md\",\n children,\n ...props\n}: Omit<TabsListProps, \"swipeable\">) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n data-variant={variant}\n data-size={size}\n className={cn(tabsListVariants({ variant, size }), className)}\n {...props}\n >\n <TabsListContext.Provider value={{ variant, size }}>{children}</TabsListContext.Provider>\n {variant === \"segment\" && <TabsIndicator />}\n </TabsPrimitive.List>\n );\n}\n\n//------------------------------------------------------------------------------\nfunction SwipeableSegmentTabsList({\n className,\n size = \"md\",\n children,\n ...props\n}: Omit<TabsListProps, \"swipeable\" | \"variant\">) {\n const listRef = useRef<HTMLDivElement>(null);\n const dragRef = useRef<DragState | null>(null);\n // Pending cleanup (transitionend listener + fallback timeout) scheduled by the previous\n // release's landing animation \u2014 cancelled if a new drag starts before it runs, otherwise it\n // would clear the *new* drag's inline style mid-gesture.\n const releaseCleanupRef = useRef<{ indicator: HTMLElement; handler: () => void; timeoutId: number } | null>(null);\n\n //----------------------------------------------------------------------------\n const getIndicator = () => listRef.current?.querySelector<HTMLElement>('[data-slot=\"tabs-indicator\"]');\n\n //----------------------------------------------------------------------------\n const resetIndicatorStyle = () => {\n const indicator = getIndicator();\n if (indicator) {\n indicator.style.transition = \"\";\n indicator.style.translate = \"\";\n indicator.style.width = \"\";\n }\n };\n\n //----------------------------------------------------------------------------\n const cancelPendingReleaseCleanup = () => {\n const pending = releaseCleanupRef.current;\n if (!pending) {\n return;\n }\n pending.indicator.removeEventListener(\"transitionend\", pending.handler);\n clearTimeout(pending.timeoutId);\n releaseCleanupRef.current = null;\n };\n\n //----------------------------------------------------------------------------\n const handlePointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (event.pointerType !== \"touch\") {\n return;\n }\n\n cancelPendingReleaseCleanup();\n\n const list = listRef.current;\n const activeTrigger = list?.querySelector<HTMLElement>('[data-slot=\"tabs-trigger\"][data-active]');\n if (!list || !activeTrigger) {\n return;\n }\n\n const triggers = measureTriggers(list);\n const active = triggers.find(trigger => trigger.el === activeTrigger);\n if (!active) {\n return;\n }\n\n dragRef.current = {\n pointerId: event.pointerId,\n startX: event.clientX,\n isDragging: false,\n activeLeft: active.left,\n activeEl: activeTrigger,\n triggers,\n };\n };\n\n //----------------------------------------------------------------------------\n const handlePointerMove = (event: ReactPointerEvent<HTMLDivElement>) => {\n const drag = dragRef.current;\n if (!drag || event.pointerId !== drag.pointerId) {\n return;\n }\n\n const delta = event.clientX - drag.startX;\n if (!drag.isDragging) {\n if (Math.abs(delta) < SWIPE_DRAG_THRESHOLD) {\n return;\n }\n drag.isDragging = true;\n listRef.current?.setPointerCapture(event.pointerId);\n const indicator = getIndicator();\n if (indicator) {\n indicator.style.transition = \"none\";\n }\n for (const trigger of drag.triggers) {\n trigger.el.style.transition = \"none\";\n }\n }\n\n // Position via the `translate` longhand (not `transform`) because the indicator's resting\n // position is also set via `translate` (the `translate-x-(--active-tab-left)` class, driven\n // by base-ui's CSS var). `transform` and `translate` are separate CSS properties that stack\n // rather than override each other, so using `transform` here would add the drag offset on\n // top of the resting position instead of replacing it.\n\n event.preventDefault();\n const indicator = getIndicator();\n if (!indicator) {\n return;\n }\n\n const { left, width } = interpolateIndicatorRect(drag.activeLeft + delta, drag.triggers);\n indicator.style.translate = `${left}px`;\n indicator.style.width = `${width}px`;\n applyTriggerColors(left, width, drag.triggers);\n };\n\n //----------------------------------------------------------------------------\n const endDrag = (event: ReactPointerEvent<HTMLDivElement>, commit: boolean) => {\n const drag = dragRef.current;\n if (!drag || event.pointerId !== drag.pointerId) {\n return;\n }\n dragRef.current = null;\n if (!drag.isDragging) {\n return;\n }\n\n listRef.current?.releasePointerCapture(event.pointerId);\n\n const indicator = getIndicator();\n if (!commit || !indicator) {\n resetIndicatorStyle();\n resetTriggerColors(drag.triggers);\n return;\n }\n\n // Re-enable the transition and drive the indicator to the landing tab's rect ourselves\n // (rather than clearing the inline override right away) so it animates there directly.\n // Clicking the trigger updates base-ui's active-tab CSS vars asynchronously, so clearing\n // the override immediately would drop the indicator back to the *old* active tab's resting\n // position for a frame before base-ui's own transition kicks in \u2014 the \"jumps to the previous\n // position first\" glitch. Only once our own transition finishes (matching where the CSS\n // vars will have landed) is it safe to hand positioning back to the CSS class.\n const delta = event.clientX - drag.startX;\n const { left, width } = interpolateIndicatorRect(drag.activeLeft + delta, drag.triggers);\n const nearest = findNearestTrigger(left + width / 2, drag.triggers);\n\n indicator.style.transition = \"\";\n indicator.style.translate = `${nearest.left}px`;\n indicator.style.width = `${nearest.width}px`;\n\n for (const trigger of drag.triggers) {\n trigger.el.style.transition = \"\";\n }\n applyTriggerColors(nearest.left, nearest.width, drag.triggers);\n\n if (nearest.el !== drag.activeEl) {\n nearest.el.click();\n }\n\n // `transitionend` won't fire if the indicator was already sitting at `nearest`'s rect (e.g.\n // released right back on the active tab), so also clear on a timeout matching the\n // transition duration as a fallback \u2014 the reset functions are idempotent either way.\n // Both are tracked so a new drag starting before this fires can cancel it.\n const settle = () => {\n resetIndicatorStyle();\n resetTriggerColors(drag.triggers);\n };\n indicator.addEventListener(\"transitionend\", settle, { once: true });\n const timeoutId = window.setTimeout(() => {\n releaseCleanupRef.current = null;\n settle();\n }, 200);\n releaseCleanupRef.current = { indicator, handler: settle, timeoutId };\n };\n\n return (\n <TabsPrimitive.List\n ref={listRef}\n data-slot=\"tabs-list\"\n data-variant=\"segment\"\n data-size={size}\n className={cn(tabsListVariants({ variant: \"segment\", size }), \"touch-pan-y\", className)}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={event => endDrag(event, true)}\n onPointerCancel={event => endDrag(event, false)}\n {...props}\n >\n <TabsListContext.Provider value={{ variant: \"segment\", size }}>{children}</TabsListContext.Provider>\n <TabsIndicator />\n </TabsPrimitive.List>\n );\n}\n\n//------------------------------------------------------------------------------\n// Slides horizontally behind the selected tab of a `segment` TabsList.\nfunction TabsIndicator({ className, ...props }: TabsPrimitive.Indicator.Props) {\n return (\n <TabsPrimitive.Indicator\n data-slot=\"tabs-indicator\"\n className={cn(\n \"absolute z-[-1] h-[calc(100%-4px)]! rounded-full bg-white transition-[translate,width] duration-200 ease-in-out\",\n \"group-data-[orientation=horizontal]/tabs:top-0.5 group-data-[orientation=horizontal]/tabs:left-0 group-data-[orientation=horizontal]/tabs:h-full group-data-[orientation=horizontal]/tabs:w-(--active-tab-width) group-data-[orientation=horizontal]/tabs:translate-x-(--active-tab-left)\",\n \"group-data-[orientation=vertical]/tabs:top-0.5 group-data-[orientation=vertical]/tabs:left-0 group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:h-(--active-tab-height) group-data-[orientation=vertical]/tabs:translate-y-(--active-tab-top)\",\n className,\n )}\n {...props}\n />\n );\n}\n\n//------------------------------------------------------------------------------\nfunction TabsTrigger({ className, ...props }: TabsPrimitive.Tab.Props) {\n const { variant, size } = useContext(TabsListContext);\n return (\n <TabsPrimitive.Tab\n data-slot=\"tabs-trigger\"\n className={cn(tabsTriggerVariants({ variant, size }), className)}\n {...props}\n />\n );\n}\n\n//------------------------------------------------------------------------------\nfunction TabsContent({ className, ...props }: TabsPrimitive.Panel.Props) {\n return (\n <TabsPrimitive.Panel\n data-slot=\"tabs-content\"\n className={cn(\"flex-1 text-sm outline-0\", className)}\n {...props}\n />\n );\n}\n\n//------------------------------------------------------------------------------\nexport { Tabs, TabsList, TabsTrigger, TabsContent, TabsIndicator, tabsListVariants, tabsTriggerVariants };\n", "//------------------------------------------------------------------------------\nimport type { ComponentPropsWithoutRef, ElementType } from \"react\";\n\n//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\ntype TextFormat = \"title1\" | \"title2\" | \"body1\" | \"body2\" | \"body3\";\ntype DSTextColor = \"primary\" | \"secondary\";\n\n//------------------------------------------------------------------------------\nconst FORMAT_MAP: Record<TextFormat, { className: string; as: \"h1\" | \"h2\" | \"p\" }> = {\n title1: { className: \"text-2xl font-semibold\", as: \"h1\" },\n title2: { className: \"text-xl font-semibold\", as: \"h2\" },\n body1: { className: \"text-base\", as: \"p\" },\n body2: { className: \"text-sm\", as: \"p\" },\n body3: { className: \"text-xs\", as: \"p\" },\n};\n\n//------------------------------------------------------------------------------\nexport interface TextProps extends Omit<ComponentPropsWithoutRef<\"p\">, \"color\"> {\n as?: ElementType;\n format?: TextFormat;\n color?: DSTextColor;\n align?: \"left\" | \"center\" | \"right\";\n}\n\n//------------------------------------------------------------------------------\nexport function Text({ as, format, color, align, className, ...rest }: TextProps) {\n const formatProps = format ? FORMAT_MAP[format] : undefined;\n const As = as ?? formatProps?.as ?? \"p\";\n return (\n <As\n className={cn(\n formatProps?.className,\n color === \"secondary\" && \"text-tertiary\",\n align === \"left\" && \"text-left\",\n align === \"center\" && \"text-center\",\n align === \"right\" && \"text-right\",\n className,\n )}\n {...rest}\n />\n );\n}\n", "//------------------------------------------------------------------------------\nimport { Button } from \"./button\";\nimport { Icon } from \"./icon\";\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport type ToggleButtonProps = {\n isOn: boolean;\n onToggle: () => void;\n size?: \"2xs\" | \"sm\";\n disabled?: boolean;\n className?: string;\n};\n\n//------------------------------------------------------------------------------\n/**\n * A compact ON/OFF toggle, meant to sit as the value of a settings row (e.g. inside a `DataItemValue`).\n * The `size` follows the panel it sits in: the desktop popover is tighter than the mobile sheet.\n */\nexport const ToggleButton = ({ isOn, onToggle, size = \"sm\", disabled, className }: ToggleButtonProps) => {\n return (\n <Button\n variant=\"ghost\"\n size={size}\n onClick={onToggle}\n disabled={disabled}\n aria-pressed={isOn}\n className={className}\n >\n {isOn && (\n <Icon className=\"fas fa-check starting:translate-x-4 starting:opacity-0 transition-all duration-150\" />\n )}\n <span className={cn(!isOn && \"text-tertiary\")}>{isOn ? \"ON\" : \"OFF\"}</span>\n </Button>\n );\n};\n", "import { Tooltip as TooltipPrimitive } from \"@base-ui/react/tooltip\";\n\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nfunction TooltipProvider({ delay = 0, ...props }: TooltipPrimitive.Provider.Props) {\n return <TooltipPrimitive.Provider data-slot=\"tooltip-provider\" delay={delay} {...props} />;\n}\n\n//------------------------------------------------------------------------------\nfunction Tooltip({ ...props }: TooltipPrimitive.Root.Props) {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />;\n}\n\n//------------------------------------------------------------------------------\nfunction TooltipTrigger({ ...props }: TooltipPrimitive.Trigger.Props) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\n//------------------------------------------------------------------------------\nfunction TooltipContent({\n className,\n side = \"top\",\n sideOffset = 4,\n align = \"center\",\n alignOffset = 0,\n children,\n ...props\n}: TooltipPrimitive.Popup.Props &\n Pick<TooltipPrimitive.Positioner.Props, \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\">) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n className=\"isolate z-50\"\n >\n <TooltipPrimitive.Popup\n data-slot=\"tooltip-content\"\n className={cn(\n \"z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n className,\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5\" />\n </TooltipPrimitive.Popup>\n </TooltipPrimitive.Positioner>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["AppIcon_default", "container", "inner", "innerShape", "shape", "shapeAlt", "jsx", "jsxs", "appColorInventory", "appIconShapes", "SHAPE_COUNT", "COLOR_COUNT", "ROTATIONS", "RANDOM_1", "RANDOM_2", "RANDOM_3", "AppIcon", "id", "shape", "colors", "className", "style", "_id", "_colors", "_shape", "rotation", "AppIcon_default", "entityComponentStyles", "Icon", "cn", "entityComponentStyles", "Icon", "cn", "Fragment", "jsx", "EntityComponentIcon", "componentId", "variant", "style", "className", "color", "fontAwesome", "entity_components_schema_default", "jsx", "jsxs", "EntityComponentBadge", "name", "hasLinkToReference", "className", "schema", "entity_components_schema_default", "style", "entityComponentStyles", "htmlTitle", "color", "referenceUrl", "cn", "EntityComponentIcon", "Icon", "entityComponentStyles", "clsx", "twMerge", "cn", "inputs", "jsx", "jsxs", "EntityRecipe", "allOf", "oneOf", "withAttributes", "className", "cn", "component", "EntityComponentBadgeEx", "EntityComponentBadge", "name", "color", "entityComponentStyles", "ComponentAttributes", "attributes", "key", "value", "GlowEffect_default", "glowEffect", "glowEffectWide", "jsx", "GlowEffect", "children", "variant", "className", "cn", "GlowEffect_default", "Fragment", "jsx", "jsxs", "IsometricSchema", "items", "connections", "gridSize", "cellSize", "containerWidth", "containerHeight", "caption", "animateOnScroll", "className", "appearStyle", "delay", "isoToScreen", "x", "y", "screenX", "screenY", "centerX", "centerY", "generateGrid", "lines", "halfGrid", "start", "end", "generateArrow", "direction", "color", "index", "id", "generateConnections", "conn", "from_x", "from_y", "to_x", "to_y", "via_x", "via_y", "arrow_start", "arrow_end", "name", "showDebug", "isAnimated", "animationDirection", "points", "segments", "currentX", "currentY", "nextX", "nextY", "longestSegment", "maxLength", "seg", "dx", "dy", "length", "segStart", "segEnd", "segMidX", "segMidY", "rawAngle", "labelAngle", "deg", "a", "pathCommands", "p", "i", "totalLen", "b", "ax", "ay", "bx", "by", "dur", "pathId", "startMarkerId", "endMarkerId", "ArrowDefs", "GlowDot", "reverse", "begin", "renderDots", "generateItems", "item", "width", "height", "image", "bottomLeft", "bottomRight", "topRight", "topLeft", "px", "py", "centerPos", "imageX", "imageY", "cn", "jsx", "jsxs", "Logo3dverse", "style", "className", "Logo3dverseRocket", "Spinner_default", "spinnerLogo", "circle", "loaderRotate", "jsx", "jsxs", "Spinner", "Spinner_default", "Logo3dverseRocket", "assets", "jsx", "jsxs", "CROSSED_CLASS_NAME", "Icon", "variant", "crossed", "className", "style", "cn", "Fragment", "jsx", "AssetIcon", "assetId", "variant", "weight", "className", "color", "fontAwesome", "assets", "_className", "AssetScene", "Icon", "cn", "style", "jsx", "IconAssetScene", "size", "className", "_size", "AccordionPrimitive", "jsx", "Accordion", "props", "AccordionPrimitive", "AccordionItem", "className", "cn", "AccordionTrigger", "children", "AccordionContent", "DrawerPrimitive", "ButtonPrimitive", "cva", "jsx", "buttonVariants", "cva", "cn", "Button", "as", "className", "variant", "size", "round", "active", "children", "props", "ButtonPrimitive", "jsx", "jsxs", "BottomSheet", "swipeDirection", "closeOnBlur", "props", "DrawerPrimitive", "BottomSheetTrigger", "BottomSheetPortal", "BottomSheetClose", "BottomSheetOverlay", "className", "cn", "BottomSheetViewport", "BottomSheetContent", "children", "showHandle", "showCloseButton", "showOverlay", "Button", "Icon", "BottomSheetHeader", "BottomSheetFooter", "BottomSheetTitle", "BottomSheetDescription", "jsx", "jsxs", "ButtonTile", "as", "className", "variant", "size", "orientation", "round", "icon", "rightComponent", "isEnabled", "children", "props", "Button", "cn", "Icon", "jsx", "jsxs", "DataItem", "children", "size", "className", "textSize", "dataItemLabelPaddingY", "cn", "DataItemLabel", "icon", "Icon", "DataItemTitle", "DataItemDescription", "DataItemValue", "DialogPrimitive", "jsx", "jsxs", "Dialog", "props", "DialogPrimitive", "DialogTrigger", "DialogPortal", "DialogOverlay", "className", "props", "jsx", "DialogPrimitive", "cn", "DialogContent", "children", "showCloseButton", "jsxs", "DialogPortal", "Button", "Icon", "DialogHeader", "DialogFooter", "DialogTitle", "DialogDescription", "jsx", "DotPing", "className", "isActive", "cn", "jsx", "jsxs", "EmptyState", "icon", "title", "description", "variant", "className", "cn", "Icon", "jsx", "IslandPanel", "children", "shadow", "className", "as", "rest", "cn", "jsx", "Kbd", "children", "className", "cn", "jsx", "Loader", "className", "rest", "Icon", "cn", "MenuPrimitive", "jsx", "Menu", "props", "MenuPrimitive", "MenuTrigger", "MenuPortal", "MenuPositioner", "className", "sideOffset", "align", "
|
|
3
|
+
"sources": ["../sources/components/3dverse/AppIcon/AppIcon.module.css", "../sources/components/3dverse/AppIcon/AppIcon.tsx", "../sources/components/3dverse/EntityComponent/EntityComponentBadge.tsx", "../sources/components/3dverse/EntityComponent/EntityComponentIcon.tsx", "../sources/components/3dverse/EntityComponent/entity_components.schema.json", "../sources/components/3dverse/EntityRecipe/EntityRecipe.tsx", "../sources/utils/css.ts", "../sources/components/3dverse/GlowEffect/GlowEffect.module.css", "../sources/components/3dverse/GlowEffect/GlowEffect.tsx", "../sources/components/3dverse/IsometricSchema/IsometricSchema.tsx", "../sources/components/3dverse/Logo3dverse.tsx", "../sources/components/3dverse/Spinner/Spinner.module.css", "../sources/components/3dverse/Spinner/Spinner.tsx", "../sources/components/3dverse/AssetIcon.tsx", "../sources/components/ui/icon.tsx", "../sources/components/3dverse/icon-asset-scene.tsx", "../sources/components/ui/accordion.tsx", "../sources/components/ui/bottom-sheet.tsx", "../sources/components/ui/button.tsx", "../sources/components/ui/badge.tsx", "../sources/components/ui/button-tile.tsx", "../sources/components/ui/data-item.tsx", "../sources/components/ui/dialog.tsx", "../sources/components/ui/dot-ping.tsx", "../sources/components/ui/empty-state.tsx", "../sources/components/ui/island-panel.tsx", "../sources/components/ui/kbd.tsx", "../sources/components/ui/loader.tsx", "../sources/components/ui/menu.tsx", "../sources/components/ui/modal.tsx", "../sources/components/ui/panel.tsx", "../sources/components/ui/popover.tsx", "../sources/components/ui/scrollable-area.tsx", "../sources/components/ui/slider.tsx", "../sources/components/ui/switch.tsx", "../sources/components/ui/overlay-container.tsx", "../sources/components/ui/stack.tsx", "../sources/components/ui/tabs.tsx", "../sources/components/ui/text.tsx", "../sources/components/ui/toggle-button.tsx", "../sources/components/ui/tooltip.tsx"],
|
|
4
|
+
"sourcesContent": [".container {\n position: relative;\n overflow: hidden;\n display: block;\n width: 6rem;\n aspect-ratio: 1;\n\n background-image: linear-gradient(to top right, var(--gradient-from), var(--gradient-to));\n --border-radius: 30%;\n border-radius: var(--border-radius);\n corner-shape: squircle;\n\n &:after {\n content: \"\";\n position: absolute;\n bottom: -20%;\n left: 0px;\n width: 100%;\n height: 100%;\n\n background: #41c9e9aa;\n border-radius: inherit;\n corner-shape: inherit;\n filter: blur(200px);\n }\n}\n\n.inner {\n width: 100%;\n height: 100%;\n padding: 3%;\n}\n\n.innerShape {\n display: grid;\n grid-template-rows: repeat(2, minmax(0, 1fr));\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 10%;\n width: calc(100% - 6%);\n height: calc(100% - 6%);\n margin: 3%;\n padding: 10%;\n\n background-image: linear-gradient(to bottom right, var(--gradient-from), var(--gradient-to));\n border-radius: calc(var(--border-radius) + -3%);\n corner-shape: inherit;\n mix-blend-mode: overlay;\n overflow: hidden;\n}\n\n.shape {\n display: block;\n height: 100%;\n\n background-color: currentColor;\n border-color: currentColor;\n filter: brightness(1) hue-rotate(250deg) invert(1) saturate(1);\n}\n\n.shapeAlt {\n height: 200%;\n scale: 2;\n translate: 80% 0;\n}\n", "//------------------------------------------------------------------------------\nimport styles from \"./AppIcon.module.css\";\n\nconst appColorInventory = [\n \"#EDB5FB\",\n \"#FBB5B5\",\n \"#F4D35B\",\n \"#B5FBF7\",\n \"#B5DDFB\",\n \"#B5C2FB\",\n \"#CBB5FB\",\n \"#189AB4\",\n \"#75E6DA\",\n \"#D4F1F4\",\n \"#EF7C8E\",\n \"#FAE8E0\",\n \"#B6E2D3\",\n \"#D8A7B1\",\n \"#F6EEE0\",\n \"#E4B7A0\",\n \"#C38370\",\n \"#94DFE6\",\n \"#EBDCC7\",\n \"#B5EECB\",\n \"#DCC5C3\",\n \"#D6E1EB\",\n \"#ADC4D7\",\n \"#FACB80\",\n \"#FBD8B0\",\n \"#feb191\",\n \"#a2f9c6\",\n];\n\n//------------------------------------------------------------------------------\nexport const appIconShapes: Array<React.CSSProperties> = [\n // Square\n {},\n { borderWidth: \"2px\", borderStyle: \"solid\", borderColor: \"currentColor\", backgroundColor: \"transparent\" },\n { scale: \"0.75\" },\n { scale: \"0.5\" },\n\n // Round\n { borderRadius: \"9999px\" },\n {\n borderRadius: \"9999px\",\n borderWidth: \"2px\",\n borderStyle: \"solid\",\n borderColor: \"currentColor\",\n backgroundColor: \"transparent\",\n },\n { borderRadius: \"9999px\", height: \"50%\", translate: \"0 50%\" },\n { borderRadius: \"9999px\", scale: \"0.5\" },\n\n // Round angle\n { borderTopLeftRadius: \"9999px\", borderTopRightRadius: \"9999px\" },\n { borderTopRightRadius: \"9999px\", borderBottomRightRadius: \"9999px\" },\n { borderBottomRightRadius: \"9999px\", borderBottomLeftRadius: \"9999px\" },\n { borderTopLeftRadius: \"9999px\", borderBottomLeftRadius: \"9999px\" },\n\n // Round angle small\n { borderTopLeftRadius: \"9999px\", borderTopRightRadius: \"9999px\", height: \"50%\" },\n { borderTopRightRadius: \"9999px\", borderBottomRightRadius: \"9999px\", width: \"50%\" },\n { borderBottomRightRadius: \"9999px\", borderBottomLeftRadius: \"9999px\", height: \"50%\" },\n { borderTopLeftRadius: \"9999px\", borderBottomLeftRadius: \"9999px\", width: \"50%\" },\n\n // Oval\n { borderBottomRightRadius: \"9999px\", borderTopLeftRadius: \"9999px\" },\n { borderBottomLeftRadius: \"9999px\", borderTopRightRadius: \"9999px\" },\n {},\n {},\n\n // Quarter circle (elliptical border-radius)\n { borderRadius: \"100% 0% 100% 0% / 100% 100% 0% 0%\" },\n { borderRadius: \"100% 0% 100% 0% / 100% 100% 0% 0%\", transform: \"rotate(180deg)\" },\n { borderRadius: \"100% 0% 100% 0% / 100% 100% 0% 0%\", transform: \"rotate(180deg) scaleY(-1)\" },\n { borderRadius: \"100% 0% 100% 0% / 100% 100% 0% 0%\", transform: \"scaleY(-1)\" },\n\n // Losange (diamond)\n { clipPath: \"polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)\" },\n // Pentagon\n { clipPath: \"polygon(50% 0%, 100% 38%, 82% 100%, 18% 100%, 0% 38%)\" },\n // Heart (SVG path clip)\n {\n clipPath:\n 'path(\"M12 4.248c-3.148-5.402-12-3.825-12 2.944 0 4.661 5.571 9.427 12 15.808 6.43-6.381 12-11.147 12-15.808 0-6.792-8.875-8.306-12-2.944z\")',\n },\n // Triangle\n { clipPath: \"polygon(0 0, 0% 100%, 100% 100%)\" },\n // Angle\n { clipPath: \"polygon(61% 50%, 100% 0, 100% 100%, 0% 100%)\" },\n\n // Example from comment (kept as a note, not active):\n // { width: 0, height: 0, borderTopWidth: \"50%\", borderTopColor: \"transparent\", borderLeftWidth: \"75%\", borderLeftColor: \"red\", borderBottomWidth: \"50%\", borderBottomColor: \"transparent\", borderStyle: \"solid\" },\n];\n\n//------------------------------------------------------------------------------\nconst SHAPE_COUNT = appIconShapes.length;\nconst COLOR_COUNT = appColorInventory.length;\n// Note: 90deg is forbidden otherwise shapes look like smiley :)\nconst ROTATIONS = [0, 180, 270];\n\nconst RANDOM_1 = 101;\nconst RANDOM_2 = 200;\nconst RANDOM_3 = 301;\n\n//------------------------------------------------------------------------------\nexport const AppIcon = ({\n id,\n shape,\n colors,\n className,\n style,\n}: {\n id?: string;\n shape?: number[];\n colors?: number[];\n className?: string;\n style?: React.CSSProperties;\n}) => {\n //--------------------------------------------------------------------------\n const _id = Number(id?.replace(/\\D/g, \"\").replace(/-/g, \"\"));\n\n const _colors = [\n appColorInventory[colors?.[0] ?? Math.floor((_id % RANDOM_1) % COLOR_COUNT)],\n appColorInventory[colors?.[1] ?? Math.floor((_id % RANDOM_2) % COLOR_COUNT)],\n appColorInventory[colors?.[2] ?? Math.floor((_id % RANDOM_3) % COLOR_COUNT)],\n ];\n\n const _shape = shape || [\n Math.floor((_id % RANDOM_1) % SHAPE_COUNT),\n Math.floor((_id % RANDOM_2) % SHAPE_COUNT),\n Math.floor((_id % RANDOM_3) % SHAPE_COUNT),\n ];\n\n const rotation = ROTATIONS[(_id % RANDOM_1) % ROTATIONS.length];\n\n //--------------------------------------------------------------------------\n return (\n <div\n role=\"img\"\n aria-label=\"Project icon\"\n className={`${styles.container} ${className}`}\n style={\n {\n \"--gradient-from\": _colors[1],\n \"--gradient-to\": _colors[2],\n \"--gradient-stops\": \"var(--gradient-from), var(--gradient-to)\",\n ...style,\n } as React.CSSProperties\n }\n >\n <div\n className={styles.innerShape}\n style={{\n color: _colors[0],\n rotate: `${rotation}deg`,\n }}\n >\n <span\n className={styles.shape}\n style={{\n ...appIconShapes[_shape[0]],\n boxShadow:\n \"5px 0px 0px 6px color-mix(in srgb, currentColor 40%, transparent), 4px 0px 0px 32px color-mix(in srgb, currentColor 30%, transparent)\",\n }}\n />\n <span className={`${styles.shape} ${styles.shapeAlt}`} style={appIconShapes[_shape[1]]} />\n <span className={styles.shape} style={appIconShapes[_shape[2]]} />\n </div>\n </div>\n );\n};\n", "import { entityComponents as entityComponentStyles } from \"@3dverse/design-tokens\";\nimport { Icon, cn } from \"@3dverse/ui-lib\";\n\nimport { EntityComponentIcon } from \"./EntityComponentIcon\";\nimport componentSchemas from \"./entity_components.schema.json\";\n\n//------------------------------------------------------------------------------\nexport const EntityComponentBadge = ({\n name,\n hasLinkToReference = false,\n className,\n}: {\n name: string;\n hasLinkToReference?: boolean;\n className?: string;\n}) => {\n //--------------------------------------------------------------------------\n const schema = componentSchemas.properties[name as keyof typeof componentSchemas.properties];\n const style = entityComponentStyles[name as keyof typeof entityComponentStyles];\n\n // htmlTitle is not used anymore\n const htmlTitle =\n name === \"*_geometry\"\n ? \"box_geometry; capsule_geometry; cylinder_geometry; plane_geometry; sphere_geometry\"\n : name;\n\n //--------------------------------------------------------------------------\n if (!schema || !style) {\n return <span>{name}</span>;\n }\n const { color } = style;\n\n const referenceUrl =\n name === \"*_geometry\" ? `/references/entity-components#box_geometry` : `/references/entity-components#${name}`;\n\n //----------------------------------------------------------------------\n return (\n <span\n className={cn(\n \"no-underline! inline-flex items-baseline gap-2 w-fit my-0 me-1\",\n \"text-[90%] font-medium tracking-wide rounded-full whitespace-nowrap cursor-default\",\n \"bg-current/10 border border-transparent has-[.link-to-ref:hover]:border-current/20 transition-colors\",\n !hasLinkToReference && \"pr-3\",\n className,\n )}\n style={{\n color: color,\n }}\n >\n <EntityComponentIcon componentId={name} className=\"h-5 text-4xs\" />\n <span className=\"text-primary\">{schema?.title}</span>\n {hasLinkToReference && (\n <a\n href={referenceUrl}\n className=\"link-to-ref px-1 mr-0.5 h-full text-xs text-current! rounded-full opacity-70 hover:opacity-100 hover:bg-ground/50 transition-all\"\n >\n <Icon className=\"fal fa-external-link-square text-sm\" />\n </a>\n )}\n </span>\n );\n};\n", "import { entityComponents as entityComponentStyles } from \"@3dverse/design-tokens\";\nimport { Icon, cn } from \"@3dverse/ui-lib\";\n\n//------------------------------------------------------------------------------\nexport const EntityComponentIcon = ({\n componentId,\n variant = \"default\",\n style,\n className = \"\",\n}: {\n componentId: string;\n variant?: \"default\" | \"special\";\n style?: React.CSSProperties;\n className?: string;\n}) => {\n if (!entityComponentStyles[componentId as keyof typeof entityComponentStyles]) {\n return <>{componentId}</>;\n }\n\n //--------------------------------------------------------------------------\n const { color, fontAwesome } = entityComponentStyles[componentId as keyof typeof entityComponentStyles];\n console.log(color, fontAwesome);\n\n //--------------------------------------------------------------------------\n if (!fontAwesome) {\n return <>{componentId}</>;\n }\n\n //--------------------------------------------------------------------------\n return (\n <Icon\n className={cn(\n \"flex! justify-center items-center h-[2.5em] w-auto! aspect-square shrink-0 text-base text-current bg-current/20 rounded-full\",\n \"fal\",\n fontAwesome,\n className,\n )}\n style={{\n color: color,\n boxShadow:\n variant === \"special\"\n ? \"0 0 10px color-mix(in srgb, var(--entity-component-color), var(--color-bg-underground) 100%), 20px 0 0px -11px color-mix(in srgb, currentcolor, transparent 85%), -20px 0 0px -11px color-mix(in srgb, currentcolor, transparent 85%)\"\n : undefined,\n ...style,\n }}\n />\n );\n};\n", "{\"properties\":{\"animation_controller\":{\"description\":\"Drives skeletal animation using an Animation Graph and Animation Set; animates descendant skinned meshes whose skeletons are compatible with the set.\",\"properties\":{\"animationGraphRef\":{\"description\":\"Referenced Animation Graph (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Animation Graph Ref\",\"type\":\"string\",\"x-asset-ref\":\"animation_graph\",\"x-display-type\":\"UUID\"},\"animationSetRef\":{\"description\":\"Referenced Animation Set (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Animation Set Ref\",\"type\":\"string\",\"x-asset-ref\":\"animation_set\",\"x-display-type\":\"UUID\"},\"dataJSON\":{\"description\":\"Animation Graph input parameters in JSON format.\",\"title\":\"Data Json\",\"type\":\"object\",\"x-display-type\":\"JSON\"},\"rootBoneEntityRef\":{\"description\":\"Entity containing the Bone component for the skeleton's root bone.\",\"properties\":{\"linkage\":{\"default\":[],\"items\":{\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"},\"type\":\"array\"},\"originalEUID\":{\"default\":\"00000000-0000-0000-0000-000000000000\",\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"}},\"required\":[\"originalEUID\",\"linkage\"],\"title\":\"Root Bone Entity Ref\",\"type\":\"object\",\"x-display-type\":\"Entity Reference\"},\"rootMotionEnabled\":{\"default\":false,\"description\":\"Enable root motion extraction and application to the entity transform.\",\"title\":\"Root Motion Enabled\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"}},\"title\":\"Animation Controller\",\"type\":\"object\",\"x-category\":\"animation\"},\"animation_sequence_controller\":{\"description\":\"Controls playback of an Animation Sequence; assigns tracks to entities.\",\"properties\":{\"animationSequenceRef\":{\"description\":\"Referenced Animation Sequence (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Animation Sequence Ref\",\"type\":\"string\",\"x-asset-ref\":\"animation_sequence\",\"x-display-type\":\"UUID\"},\"entities\":{\"additionalProperties\":{\"properties\":{\"linkage\":{\"default\":[],\"items\":{\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"},\"type\":\"array\"},\"originalEUID\":{\"default\":\"00000000-0000-0000-0000-000000000000\",\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"}},\"required\":[\"originalEUID\",\"linkage\"],\"type\":\"object\",\"x-display-type\":\"Entity Reference\"},\"description\":\"Map from track UUID to assigned entity.\",\"title\":\"Entities\",\"type\":\"object\"},\"loop\":{\"default\":false,\"description\":\"Loop playback when reaching the stop offset.\",\"title\":\"Loop\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"playbackSpeed\":{\"default\":1,\"description\":\"Playback speed multiplier. Negative values play in reverse.\",\"format\":\"float\",\"title\":\"Playback Speed\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"startOffset\":{\"default\":0,\"description\":\"Normalized start offset [0, 1].\",\"format\":\"float\",\"maximum\":1,\"minimum\":0,\"title\":\"Start Offset\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"stopOffset\":{\"default\":1,\"description\":\"Normalized stop offset [0, 1]. When looping, playback wraps to startOffset at this point.\",\"format\":\"float\",\"maximum\":1,\"minimum\":0,\"title\":\"Stop Offset\",\"type\":\"number\",\"x-display-type\":\"Float\"}},\"title\":\"Animation Sequence Controller\",\"type\":\"object\",\"x-category\":\"animation\"},\"bone\":{\"description\":\"Associates this entity with a bone in a skeleton (for attachments and transforms).\",\"properties\":{\"boneIndex\":{\"description\":\"Zero-based index of this bone within the bound skeleton.\",\"format\":\"int32\",\"minimum\":0,\"title\":\"Bone Index\",\"type\":\"integer\",\"x-display-type\":\"Unsigned Integer\"}},\"title\":\"Bone\",\"type\":\"object\",\"x-category\":\"animation\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"box_geometry\":{\"description\":\"Box geometry.\",\"properties\":{\"dimension\":{\"default\":[1,1,1],\"description\":\"Box dimensions (width, height, depth) in meters.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Dimension\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"m\"},\"offset\":{\"default\":[0,0,0],\"description\":\"Local offset of the geometry origin (meters).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Offset\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"m\"}},\"title\":\"Box Geometry\",\"type\":\"object\",\"x-category\":\"geometry\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"camera\":{\"description\":\"Virtual camera.\",\"properties\":{\"dataJSON\":{\"description\":\"Render Graph input parameters in JSON; schema defined by renderGraphRef.\",\"title\":\"Data Json\",\"type\":\"object\",\"x-display-type\":\"JSON\"},\"renderGraphRef\":{\"description\":\"Referenced render graph to use for rendering from this camera.\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Render Graph Ref\",\"type\":\"string\",\"x-asset-ref\":\"render_graph\",\"x-display-type\":\"UUID\"},\"renderTargetIndex\":{\"default\":-1,\"description\":\"Index of the render target to blit/output to. -1 indicates the default target.\",\"format\":\"int32\",\"title\":\"Render Target Index\",\"type\":\"integer\",\"x-display-type\":\"Integer\"}},\"title\":\"Camera\",\"type\":\"object\",\"x-category\":\"camera\",\"x-requires\":{\"allOf\":[\"local_transform\"],\"oneOf\":[\"orthographic_lens\",\"perspective_lens\",\"custom_lens\"]}},\"capsule_geometry\":{\"description\":\"Capsule geometry.\",\"properties\":{\"axis\":{\"default\":1,\"description\":\"Alignment axis of the capsule: 0=X, 1=Y, 2=Z.\",\"format\":\"int32\",\"oneOf\":[{\"const\":0,\"description\":\"Capsule is aligned with the X Axis.\",\"title\":\"X-Axis\"},{\"const\":1,\"description\":\"Capsule is aligned with the Y Axis.\",\"title\":\"Y-Axis\"},{\"const\":2,\"description\":\"Capsule is aligned with the Z Axis.\",\"title\":\"Z-Axis\"}],\"title\":\"Axis\",\"type\":\"integer\",\"x-display-type\":\"Integer\"},\"height\":{\"default\":1,\"description\":\"Height of the cylindrical mid-section (meters).\",\"format\":\"float\",\"title\":\"Height\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"offset\":{\"default\":[0,0,0],\"description\":\"Local offset of the geometry origin (meters).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Offset\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"m\"},\"radius\":{\"default\":0.5,\"description\":\"Radius of the hemispherical ends (meters).\",\"format\":\"float\",\"title\":\"Radius\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"}},\"title\":\"Capsule Geometry\",\"type\":\"object\",\"x-category\":\"geometry\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"character_controller\":{\"description\":\"Kinematic character controller for collision-constrained movement without a rigid body. Uses tuned collision handling for responsive control.\",\"properties\":{\"skinWidth\":{\"default\":0,\"description\":\"Collision skin width (meters).\",\"format\":\"float\",\"title\":\"Skin Width\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"slopeLimit\":{\"default\":45,\"description\":\"Maximum walkable slope (degrees). Slopes steeper than this are not walkable.\",\"format\":\"float\",\"title\":\"Slope Limit\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"deg\"},\"stepOffset\":{\"default\":0,\"description\":\"Maximum climbable step height. Steps higher than this cannot be climbed automatically.\",\"format\":\"float\",\"title\":\"Step Offset\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"}},\"title\":\"Character Controller\",\"type\":\"object\",\"x-category\":\"physics\",\"x-requires\":{\"allOf\":[\"local_transform\",\"physics_material\"],\"oneOf\":[\"box_geometry\",\"capsule_geometry\"]}},\"collision_geometry_ref\":{\"description\":\"Reference to a collision geometry asset used by physics.\",\"properties\":{\"collisionGeometryRef\":{\"description\":\"Referenced collision geometry (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Collision Geometry Ref\",\"type\":\"string\",\"x-asset-ref\":\"collision_geometry\",\"x-display-type\":\"UUID\"}},\"title\":\"Collision Geometry Reference\",\"type\":\"object\",\"x-category\":\"physics\",\"x-requires\":{\"allOf\":[\"local_transform\",\"physics_material\"]}},\"constraint\":{\"description\":\"6-DoF constraint built on a Joint. Defaults to fixed; selectively unlock translation and rotation on X/Y/Z and configure limits and springs.\",\"properties\":{\"motionLimitSpringDamping\":{\"default\":[0,0,0],\"description\":\"Linear limit spring damping per axis (N\u00B7s/m).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Motion Limit Spring Damping\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"N.s/m\"},\"motionLimitSpringStiffness\":{\"default\":[0,0,0],\"description\":\"Linear limit spring stiffness per axis (N/m). >0 makes the limit soft (spring-like).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Motion Limit Spring Stiffness\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"N/m\"},\"motionLowerLimit\":{\"default\":[0,0,0],\"description\":\"Lower linear limit per axis (meters).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Motion Lower Limit\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"m\"},\"motionUpperLimit\":{\"default\":[0,0,0],\"description\":\"Upper linear limit per axis (meters).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Motion Upper Limit\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"m\"},\"swingLimitAngle\":{\"default\":[0,0],\"description\":\"Swing cone half-angles about Y and Z of the constraint frame (degrees). 0 does not restrict rotation; max 180. Used if either swing axis is limited.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":2,\"minItems\":2,\"title\":\"Swing Limit Angle\",\"type\":\"array\",\"x-display-type\":\"Vector2\",\"x-unit\":\"deg\"},\"swingSpringDamping\":{\"default\":0,\"description\":\"Swing limit spring damping (N\u00B7m\u00B7s/rad).\",\"format\":\"float\",\"title\":\"Swing Spring Damping\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"N.m.s/rad\"},\"swingSpringStiffness\":{\"default\":0,\"description\":\"Swing limit spring stiffness (N\u00B7m/rad). >0 makes the limit soft.\",\"format\":\"float\",\"title\":\"Swing Spring Stiffness\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"N.m/rad\"},\"twistLimitAngle\":{\"default\":[0,0],\"description\":\"Twist angle limits (min,max) around the twist axis (degrees). Range (\u2212360, 360).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":2,\"minItems\":2,\"title\":\"Twist Limit Angle\",\"type\":\"array\",\"x-display-type\":\"Vector2\",\"x-unit\":\"deg\"},\"twistSpringDamping\":{\"default\":0,\"description\":\"Twist limit spring damping (N\u00B7m\u00B7s/rad).\",\"format\":\"float\",\"title\":\"Twist Spring Damping\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"N.m.s/rad\"},\"twistSpringStiffness\":{\"default\":0,\"description\":\"Twist limit spring stiffness (N\u00B7m/rad). >0 makes the limit soft.\",\"format\":\"float\",\"title\":\"Twist Spring Stiffness\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"N.m/rad\"},\"unlockedMotion\":{\"default\":0,\"description\":\"Unlock motion along/around the specified axes.\",\"format\":\"int32\",\"minimum\":0,\"title\":\"Unlocked Motion\",\"type\":\"integer\",\"x-bitFlags\":[{\"description\":\"Unlock motion along the X axis.\",\"name\":\"Along X\",\"value\":1},{\"description\":\"Unlock motion along the Y axis.\",\"name\":\"Along Y\",\"value\":2},{\"description\":\"Unlock motion along the Z axis.\",\"name\":\"Along Z\",\"value\":4},{\"description\":\"Unlock motion around the X axis.\",\"name\":\"Around X\",\"value\":8},{\"description\":\"Unlock motion around the Y axis.\",\"name\":\"Around Y\",\"value\":16},{\"description\":\"Unlock motion around the Z axis.\",\"name\":\"Around Z\",\"value\":32}],\"x-display-type\":\"Unsigned Integer\"}},\"title\":\"Constraint\",\"type\":\"object\",\"x-category\":\"physics\",\"x-requires\":{\"allOf\":[\"joint\"]}},\"constraint_actuator\":{\"description\":\"Drives a Constraint toward target position/orientation and velocities using configurable stiffness, damping, and force limits.\",\"properties\":{\"angularDamping\":{\"default\":[0,0,0],\"description\":\"Angular drive damping per axis (N\u00B7m\u00B7s/rad).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Angular Damping\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"N.m.s/rad\"},\"angularForceLimit\":{\"default\":[-1,-1,-1],\"description\":\"Max angular drive torque/impulse per axis (N\u00B7m). \u22121 = unlimited.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Angular Force Limit\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"N.m\"},\"angularStiffness\":{\"default\":[0,0,0],\"description\":\"Angular drive stiffness per axis (N\u00B7m/rad). >0 applies spring torque toward the goal.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Angular Stiffness\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"N.m/rad\"},\"angularVelocity\":{\"default\":[0,0,0],\"description\":\"Target angular velocity (rad/s).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Angular Velocity\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"rad/s\"},\"goalOrientation\":{\"default\":[0,0,0,1],\"description\":\"Target angular orientation.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":4,\"minItems\":4,\"title\":\"Goal Orientation\",\"type\":\"array\",\"x-display-type\":\"Quaternion\"},\"goalPosition\":{\"default\":[0,0,0],\"description\":\"Target linear position offset (meters).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Goal Position\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"m\"},\"linearDamping\":{\"default\":[0,0,0],\"description\":\"Linear drive damping per axis (N\u00B7s/m).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Linear Damping\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"N.s/m\"},\"linearForceLimit\":{\"default\":[-1,-1,-1],\"description\":\"Max linear drive force/impulse per axis (N). \u22121 = unlimited.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Linear Force Limit\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"N\"},\"linearStiffness\":{\"default\":[0,0,0],\"description\":\"Linear drive stiffness per axis (N/m). >0 applies spring force toward the goal.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Linear Stiffness\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"N/m\"},\"linearVelocity\":{\"default\":[0,0,0],\"description\":\"Target linear velocity (m/s).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Linear Velocity\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"m/s\"},\"type\":{\"default\":1,\"description\":\"Drive type: apply as force or as acceleration.\",\"format\":\"int32\",\"oneOf\":[{\"const\":0,\"title\":\"FORCE\"},{\"const\":1,\"title\":\"ACCELERATION\"}],\"title\":\"Type\",\"type\":\"integer\",\"x-display-type\":\"Integer\"}},\"title\":\"Constraint Actuator\",\"type\":\"object\",\"x-category\":\"physics\",\"x-requires\":{\"allOf\":[\"constraint\"]}},\"culling_geometry\":{\"description\":\"Enables culling using a simple analytic shape. Add alongside a geometry component (box, cylinder, plane, sphere).\",\"properties\":{\"isAdditive\":{\"default\":true,\"description\":\"Additive: show elements inside the geometry. Subtractive: show elements outside the geometry.\",\"title\":\"Is Additive\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"}},\"title\":\"Culling Geometry\",\"type\":\"object\",\"x-category\":\"rendering\",\"x-requires\":{\"allOf\":[\"local_transform\"],\"oneOf\":[\"box_geometry\",\"cylinder_geometry\",\"plane_geometry\",\"sphere_geometry\"]}},\"custom_lens\":{\"description\":\"Custom projection lens using an explicit projection matrix.\",\"properties\":{\"cs_from_vs\":{\"description\":\"Projection matrix mapping view-space to clip-space (cs_from_vs).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":16,\"minItems\":16,\"title\":\"Cs From Vs\",\"type\":\"array\",\"x-display-type\":\"Matrix4\"}},\"title\":\"Custom Lens\",\"type\":\"object\",\"x-category\":\"camera\",\"x-requires\":{\"allOf\":[\"camera\"]}},\"cylinder_geometry\":{\"description\":\"Cylinder geometry.\",\"properties\":{\"axis\":{\"default\":1,\"description\":\"Alignment axis of the cylinder: 0=X, 1=Y, 2=Z.\",\"format\":\"int32\",\"oneOf\":[{\"const\":0,\"description\":\"Cylinder is aligned with the X Axis.\",\"title\":\"X-Axis\"},{\"const\":1,\"description\":\"Cylinder is aligned with the Y Axis.\",\"title\":\"Y-Axis\"},{\"const\":2,\"description\":\"Cylinder is aligned with the Z Axis.\",\"title\":\"Z-Axis\"}],\"title\":\"Axis\",\"type\":\"integer\",\"x-display-type\":\"Integer\"},\"height\":{\"default\":1,\"description\":\"Height of the cylinder (meters).\",\"format\":\"float\",\"title\":\"Height\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"offset\":{\"default\":[0,0,0],\"description\":\"Local offset of the geometry origin (meters).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Offset\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"m\"},\"radius\":{\"default\":0.5,\"description\":\"Radius of the cylinder (meters).\",\"format\":\"float\",\"title\":\"Radius\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"}},\"title\":\"Cylinder Geometry\",\"type\":\"object\",\"x-category\":\"geometry\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"debug_name\":{\"description\":\"Human-readable name of the entity.\",\"properties\":{\"value\":{\"description\":\"Entity name.\",\"title\":\"Value\",\"type\":\"string\",\"x-display-type\":\"String\"}},\"title\":\"Name\",\"type\":\"object\",\"x-category\":\"core\"},\"decal_projector\":{\"description\":\"Projects a material onto scene surfaces within the projector's box volume.\",\"properties\":{\"zIndex\":{\"default\":0,\"description\":\"Z-index ordering for decal rendering; higher values render on top of lower ones.\",\"format\":\"int32\",\"title\":\"Z Index\",\"type\":\"integer\",\"x-display-type\":\"Integer\"}},\"title\":\"Decal Projector\",\"type\":\"object\",\"x-category\":\"rendering\",\"x-requires\":{\"allOf\":[\"local_transform\",\"material_ref\",\"box_geometry\"]}},\"environment\":{\"description\":\"Scene environment settings, including skybox background and precomputed image-based lighting (IBL). This component is only applied in the scene where this entity lives, it is discarded for subscenes.\",\"properties\":{\"irradianceUUID\":{\"description\":\"Diffuse irradiance cubemap used for ambient PBR lighting.\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Irradiance Uuid\",\"type\":\"string\",\"x-asset-ref\":\"cubemap\",\"x-display-type\":\"UUID\"},\"radianceUUID\":{\"description\":\"Specular radiance cubemap (prefiltered) used for PBR reflections.\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Radiance Uuid\",\"type\":\"string\",\"x-asset-ref\":\"cubemap\",\"x-display-type\":\"UUID\"},\"skyboxUUID\":{\"description\":\"Skybox cubemap used as the scene background (no lighting effect).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Skybox Uuid\",\"type\":\"string\",\"x-asset-ref\":\"cubemap\",\"x-display-type\":\"UUID\"}},\"title\":\"Environment\",\"type\":\"object\",\"x-category\":\"lighting\"},\"euid\":{\"description\":\"Unique identifier for the entity.\",\"properties\":{\"value\":{\"description\":\"Unique identifier value.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"title\":\"Value\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"}},\"readOnly\":true,\"required\":[\"value\"],\"title\":\"Entity UID\",\"type\":\"object\",\"x-category\":\"core\"},\"joint\":{\"description\":\"Base joint connecting two bodies. By default locks relative position and orientation between constrainer and constrainee.\",\"properties\":{\"breakForce\":{\"default\":10000000000000000,\"description\":\"Break force threshold (Newtons).\",\"format\":\"float\",\"title\":\"Break Force\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"N\"},\"breakTorque\":{\"default\":10000000000000000,\"description\":\"Break torque threshold (N\u00B7m).\",\"format\":\"float\",\"title\":\"Break Torque\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"N.m\"},\"constrainee\":{\"description\":\"Entity with a Rigid Body to be constrained.\",\"properties\":{\"linkage\":{\"default\":[],\"items\":{\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"},\"type\":\"array\"},\"originalEUID\":{\"default\":\"00000000-0000-0000-0000-000000000000\",\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"}},\"required\":[\"originalEUID\",\"linkage\"],\"title\":\"Constrainee\",\"type\":\"object\",\"x-display-type\":\"Entity Reference\",\"x-required-components\":[\"rigid_body\"]},\"constrainer\":{\"description\":\"Entity acting as constrainer (rigid/static) or null to constrain to world origin.\",\"properties\":{\"linkage\":{\"default\":[],\"items\":{\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"},\"type\":\"array\"},\"originalEUID\":{\"default\":\"00000000-0000-0000-0000-000000000000\",\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"}},\"required\":[\"originalEUID\",\"linkage\"],\"title\":\"Constrainer\",\"type\":\"object\",\"x-display-type\":\"Entity Reference\"},\"enableCollision\":{\"default\":false,\"description\":\"Enable collision between constrainer and constrainee bodies.\",\"title\":\"Enable Collision\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"}},\"title\":\"Joint\",\"type\":\"object\",\"x-category\":\"physics\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"label\":{\"description\":\"Displays an editor-only label in the 3D view.\",\"properties\":{\"camera\":{\"default\":[0,0,0,0,0,0,1],\"description\":\"Camera framing parameters for navigating to the label.\",\"items\":{\"format\":\"float\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"title\":\"Camera\",\"type\":\"array\"},\"description\":{\"description\":\"Label description text.\",\"title\":\"Description\",\"type\":\"string\",\"x-display-type\":\"String\"},\"speed\":{\"default\":15,\"description\":\"Camera travel speed (meters/second).\",\"format\":\"float\",\"title\":\"Speed\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"title\":{\"description\":\"Label title text.\",\"title\":\"Title\",\"type\":\"string\",\"x-display-type\":\"String\"}},\"title\":\"Label\",\"type\":\"object\",\"x-category\":\"editor\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"lineage\":{\"description\":\"Records the entity's lineage through linkers and parentage.\",\"properties\":{\"ordinal\":{\"default\":0,\"description\":\"Ordinal index among siblings (editor-only).\",\"format\":\"int32\",\"title\":\"Ordinal\",\"type\":\"integer\",\"x-display-type\":\"Integer\"},\"parentUUID\":{\"description\":\"UUID of this entity's parent (default is root).\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"title\":\"Parent Uuid\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"}},\"title\":\"Lineage\",\"type\":\"object\",\"x-category\":\"core\"},\"local_aabb\":{\"description\":\"Local-space axis-aligned bounding box.\",\"properties\":{\"max\":{\"description\":\"Local AABB maximum corner (x,y,z).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Max\",\"type\":\"array\",\"x-display-type\":\"Vector3\"},\"min\":{\"description\":\"Local AABB minimum corner (x,y,z).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Min\",\"type\":\"array\",\"x-display-type\":\"Vector3\"}},\"title\":\"Local AABB\",\"type\":\"object\",\"x-category\":\"core\"},\"local_transform\":{\"description\":\"Local transform of the entity (position, orientation, scale).\",\"properties\":{\"eulerOrientation\":{\"default\":[0,0,0],\"description\":\"Local orientation as Euler angles (editor-only).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Orientation\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"deg\"},\"globalEulerOrientation\":{\"default\":[0,0,0],\"description\":\"Last global orientation entered by a user as Euler angles (may be invalid; editor-only).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Global Euler Orientation\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"deg\"},\"orientation\":{\"default\":[0,0,0,1],\"description\":\"Local orientation as a quaternion.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":4,\"minItems\":4,\"title\":\"Orientation\",\"type\":\"array\",\"x-display-type\":\"Quaternion\"},\"position\":{\"default\":[0,0,0],\"description\":\"Local position (x, y, z) in meters.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Position\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"m\"},\"scale\":{\"default\":[1,1,1],\"description\":\"Local non-uniform scale (x, y, z).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Scale\",\"type\":\"array\",\"x-display-type\":\"Vector3\"}},\"title\":\"Transform\",\"type\":\"object\",\"x-category\":\"core\"},\"material\":{\"description\":\"Assigns a shader to the entity's mesh and provides its input values and specialization constants.\",\"properties\":{\"constantsJSON\":{\"description\":\"Specialization constants (JSON); schema defined by shaderRef.\",\"title\":\"Constants Json\",\"type\":\"object\",\"x-display-type\":\"JSON\"},\"dataJSON\":{\"description\":\"Shader input values (JSON); schema defined by shaderRef.\",\"title\":\"Data Json\",\"type\":\"object\",\"x-display-type\":\"JSON\"},\"isDoubleSided\":{\"default\":false,\"description\":\"Render both front and back faces (double-sided).\",\"title\":\"Is Double Sided\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"shaderRef\":{\"description\":\"Referenced shader (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Shader Ref\",\"type\":\"string\",\"x-asset-ref\":\"shader\",\"x-display-type\":\"UUID\"}},\"title\":\"Material\",\"type\":\"object\",\"x-category\":\"rendering\",\"x-requires\":{\"allOf\":[\"mesh_ref\"]}},\"material_ref\":{\"description\":\"Reference to a material to use for rendering.\",\"properties\":{\"faceCulling\":{\"default\":0,\"description\":\"Face culling override: 0 = inherit from material, 1 = single-sided, 2 = double-sided.\",\"format\":\"int32\",\"oneOf\":[{\"const\":0,\"title\":\"Inherit from material\"},{\"const\":1,\"title\":\"Single Sided\"},{\"const\":2,\"title\":\"Double Sided\"}],\"title\":\"Face Culling\",\"type\":\"integer\",\"x-display-type\":\"Integer\"},\"value\":{\"description\":\"Referenced material (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Value\",\"type\":\"string\",\"x-asset-ref\":\"material\",\"x-display-type\":\"UUID\"}},\"title\":\"Material Reference\",\"type\":\"object\",\"x-category\":\"rendering\",\"x-requires\":{\"oneOf\":[\"mesh_ref\",\"decal_projector\"]}},\"measure\":{\"description\":\"Displays editor-only measurement annotations in the 3D view.\",\"properties\":{\"color\":{\"default\":[1,1,1],\"description\":\"Display color for the measurement.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Color\",\"type\":\"array\",\"x-display-type\":\"Vector3\"},\"type\":{\"default\":0,\"description\":\"Measurement type to display.\",\"format\":\"int32\",\"minimum\":0,\"oneOf\":[{\"const\":0,\"title\":\"Linear\"},{\"const\":1,\"title\":\"Angle\"},{\"const\":2,\"title\":\"Area\"},{\"const\":3,\"title\":\"Volume\"}],\"title\":\"Type\",\"type\":\"integer\",\"x-display-type\":\"Unsigned Integer\"}},\"title\":\"Measure\",\"type\":\"object\",\"x-category\":\"editor\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"mesh_ref\":{\"description\":\"Reference to a mesh to render (with submesh selection).\",\"properties\":{\"shadowCastingMode\":{\"default\":1,\"description\":\"Shadow casting mode for this mesh.\",\"format\":\"int8\",\"minimum\":0,\"oneOf\":[{\"const\":0,\"description\":\"Shadow casting is disabled for this entity.\",\"title\":\"Off\"},{\"const\":1,\"description\":\"Shadow casting is enabled for this entity.\",\"title\":\"On\"}],\"title\":\"Shadow Casting Mode\",\"type\":\"integer\",\"x-display-type\":\"Unsigned Byte\"},\"submeshIndex\":{\"default\":0,\"description\":\"Index of the submesh within the mesh's submesh array.\",\"format\":\"int32\",\"title\":\"Submesh Index\",\"type\":\"integer\",\"x-display-type\":\"Integer\"},\"value\":{\"description\":\"Referenced mesh (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Value\",\"type\":\"string\",\"x-asset-ref\":\"mesh\",\"x-display-type\":\"UUID\"}},\"title\":\"Mesh Reference\",\"type\":\"object\",\"x-category\":\"rendering\",\"x-requires\":{\"allOf\":[\"local_transform\"],\"oneOf\":[\"material\",\"material_ref\"]}},\"morph_targets\":{\"description\":\"Contains weights assigned to morph targets of the mesh referred to by the entity's mesh_ref.\",\"properties\":{\"weights\":{\"additionalProperties\":{\"format\":\"float\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"description\":\"Map from morph target name to weight (commonly 0..1).\",\"title\":\"Weights\",\"type\":\"object\"}},\"title\":\"Morph Targets\",\"type\":\"object\",\"x-category\":\"animation\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"orthographic_lens\":{\"description\":\"Orthographic projection lens with configurable zoom and depth range.\",\"properties\":{\"zFar\":{\"default\":100,\"description\":\"Far clipping plane distance (meters).\",\"format\":\"float\",\"title\":\"Z Far\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"zNear\":{\"default\":0,\"description\":\"Near clipping plane distance (meters).\",\"format\":\"float\",\"title\":\"Z Near\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"zoomFactor\":{\"default\":[1,1],\"description\":\"Zoom factor applied to the orthographic extents (X,Y). 1 = no zoom.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":2,\"minItems\":2,\"title\":\"Zoom Factor\",\"type\":\"array\",\"x-display-type\":\"Vector2\"}},\"title\":\"Orthographic Lens\",\"type\":\"object\",\"x-category\":\"camera\",\"x-requires\":{\"allOf\":[\"camera\"]}},\"overrider\":{\"description\":\"Overrides an entity from a subscene: mark for deletion, replace components, or detach specific components.\",\"properties\":{\"componentsToDetach\":{\"description\":\"Hashes of components to detach from the overridden entity.\",\"items\":{\"format\":\"int32\",\"type\":\"integer\",\"x-display-type\":\"Integer\"},\"title\":\"Components to Detach\",\"type\":\"array\"},\"deleter\":{\"default\":false,\"description\":\"Mark the overridden entity as deleted in the composed scene.\",\"title\":\"Deleter\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"entityRef\":{\"description\":\"Target entity to override.\",\"properties\":{\"linkage\":{\"default\":[],\"items\":{\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"},\"type\":\"array\"},\"originalEUID\":{\"default\":\"00000000-0000-0000-0000-000000000000\",\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"}},\"required\":[\"originalEUID\",\"linkage\"],\"title\":\"Entity Ref\",\"type\":\"object\",\"x-display-type\":\"Entity Reference\"}},\"title\":\"Overrider\",\"type\":\"object\",\"x-category\":\"linker\"},\"perspective_lens\":{\"description\":\"Perspective projection lens with vertical field of view and near/far clipping planes.\",\"properties\":{\"farPlane\":{\"default\":0,\"description\":\"Far clipping plane distance (meters). Set to 0 for an infinite far plane.\",\"format\":\"float\",\"title\":\"Far Plane\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"fovy\":{\"default\":60,\"description\":\"Vertical field of view angle in degrees.\",\"format\":\"float\",\"title\":\"Vertical Field of View\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"deg\"},\"nearPlane\":{\"default\":0.01,\"description\":\"Near clipping plane distance (meters).\",\"format\":\"float\",\"title\":\"Near Plane\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"offset\":{\"default\":[0,0],\"description\":\"Projection center offset for stereoscopic rendering (meters).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":2,\"minItems\":2,\"title\":\"Offset\",\"type\":\"array\",\"x-display-type\":\"Vector2\",\"x-unit\":\"m\"}},\"title\":\"Perspective Lens\",\"type\":\"object\",\"x-category\":\"camera\",\"x-requires\":{\"allOf\":[\"camera\"]}},\"physics_material\":{\"description\":\"Physical surface properties used for contact: friction, restitution, optional contact modification, and trigger mode.\",\"properties\":{\"contactVelocity\":{\"default\":[0,0,0],\"description\":\"Applied contact velocity offset when colliding (m/s). Only used if modifyContact is true.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Contact Velocity\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"m/s\"},\"dynamicFriction\":{\"default\":0.5,\"description\":\"Dynamic (kinetic) friction coefficient (typically 0..1). If greater than staticFriction, staticFriction is clamped up to match. Effective value is averaged with the other surface.\",\"format\":\"float\",\"title\":\"Dynamic Friction\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"isTrigger\":{\"default\":false,\"description\":\"Treat associated geometry as a trigger (generates events but no physical response).\",\"title\":\"Is Trigger\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"modifyContact\":{\"default\":false,\"description\":\"Enable contact modification (applies contactVelocity on collisions).\",\"title\":\"Modify Contact\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"restitution\":{\"default\":0,\"description\":\"Restitution (bounciness) in [0,1]. 0 = no bounce; 1 = perfectly elastic. Effective value is averaged with the other surface.\",\"format\":\"float\",\"title\":\"Restitution\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"staticFriction\":{\"default\":0.5,\"description\":\"Static friction coefficient (typically 0..1). 0 feels like ice; higher resists start of motion. Effective value is averaged with the other surface.\",\"format\":\"float\",\"title\":\"Static Friction\",\"type\":\"number\",\"x-display-type\":\"Float\"}},\"title\":\"Physics Material\",\"type\":\"object\",\"x-category\":\"physics\",\"x-requires\":{\"oneOf\":[\"box_geometry\",\"capsule_geometry\",\"cylinder_geometry\",\"plane_geometry\",\"sphere_geometry\",\"collision_geometry_ref\"]}},\"plane_geometry\":{\"description\":\"Infinite plane geometry.\",\"properties\":{\"distance\":{\"default\":0,\"description\":\"Signed distance from the origin along the plane normal (meters).\",\"format\":\"float\",\"title\":\"Distance\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"normal\":{\"default\":[0,1,0],\"description\":\"Unit normal vector of the plane (in local space).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Normal\",\"type\":\"array\",\"x-display-type\":\"Vector3\"}},\"title\":\"Plane Geometry\",\"type\":\"object\",\"x-category\":\"geometry\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"point_cloud_ref\":{\"description\":\"Reference to a point cloud.\",\"properties\":{\"value\":{\"description\":\"Referenced point cloud (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Value\",\"type\":\"string\",\"x-asset-ref\":\"point_cloud\",\"x-display-type\":\"UUID\"}},\"title\":\"Point Cloud Reference\",\"type\":\"object\",\"x-category\":\"point cloud\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"point_light\":{\"description\":\"Omnidirectional light source with physically based intensity and falloff. Acts as a point light by default; enable isDirectional to emit parallel rays. Attach a Spot Light component to add a cone cutoff. Can optionally drive the atmosphere sun direction.\",\"properties\":{\"color\":{\"default\":[1,1,1],\"description\":\"RGB light color in linear space [0\u20131]. Multiplies intensity.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Color\",\"type\":\"array\",\"x-display-type\":\"Vector3\"},\"intensity\":{\"default\":1,\"description\":\"Radiant intensity (W/sr). Controls brightness for physically based shading (inverse-square falloff).\",\"format\":\"float\",\"title\":\"Intensity\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"W/sr\"},\"isDirectional\":{\"default\":false,\"description\":\"Treat this as a directional light using the entity's orientation; position is ignored.\",\"title\":\"Is Directional\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"isSun\":{\"default\":false,\"description\":\"Use this light's direction to control the atmosphere sun direction. Only one light should be marked as the sun; multiple are undefined.\",\"title\":\"Is Sun\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"range\":{\"default\":0,\"description\":\"Hard cutoff distance for light influence and culling (meters). Set to 0 for no hard cutoff and physically correct inverse-square attenuation.\",\"format\":\"float\",\"title\":\"Range\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"}},\"title\":\"Light\",\"type\":\"object\",\"x-category\":\"lighting\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"reflection_probe\":{\"description\":\"Omnidirectional reflection probe that captures the local environment into a cubemap for specular reflections (IBL).\",\"properties\":{\"farDist\":{\"default\":100,\"description\":\"Capture far clip distance (meters).\",\"format\":\"float\",\"title\":\"Far Dist\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"nearDist\":{\"default\":0.1,\"description\":\"Capture near clip distance (meters).\",\"format\":\"float\",\"title\":\"Near Dist\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"offset\":{\"default\":[0,0,0],\"description\":\"Offset of the probe capture origin relative to the entity position (meters).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Offset\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"m\"},\"quality\":{\"default\":128,\"description\":\"Reflection cubemap resolution (pixels per face). Higher values increase detail and cost.\",\"format\":\"int32\",\"title\":\"Quality\",\"type\":\"integer\",\"x-display-type\":\"Integer\"}},\"title\":\"Reflection probe\",\"type\":\"object\",\"x-category\":\"lighting\",\"x-requires\":{\"allOf\":[\"local_transform\",\"box_geometry\"]}},\"rigid_body\":{\"description\":\"Rigid body parameters for dynamic simulation (mass, damping, limits, CCD, and kinematic/gravity behavior).\",\"properties\":{\"angularDamping\":{\"default\":0.05,\"description\":\"Angular damping coefficient (s^-1). 0 = no damping; must be non-negative.\",\"format\":\"float\",\"minimum\":0,\"title\":\"Angular Damping\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"s^-1\"},\"centerOfMass\":{\"default\":[0,0,0],\"description\":\"Center of mass relative to the entity's local transform (meters).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Center of Mass\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"m\"},\"collisionDetection\":{\"default\":0,\"description\":\"Collision detection mode (CCD). Kinematic bodies do not support Linear/Continuous CCD.\",\"format\":\"int8\",\"minimum\":0,\"oneOf\":[{\"const\":0,\"description\":\"Discrete collision detection.\",\"title\":\"Discrete\"},{\"const\":1,\"description\":\"Linear, or sweep-based, CCD. This prevents the affected rigid bodies from going through other physics bodies at high velocities (a problem also known as tunnelling). Not functional with kinematic rigid bodies.\",\"title\":\"LinearContinuous\"},{\"const\":2,\"description\":\"Angular, or speculative, CCD is better at catching missed contacts generated by fast angular motions but not as good with fast linear motions. Angular CCD is cheaper but less robust compared to linear CCD.\",\"title\":\"AngularContinuous\"},{\"const\":3,\"description\":\"Linear and angular CCD are enabled. This often results in best-of-both-worlds behavior. Not functional with kinematic rigid bodies.\",\"title\":\"Continuous\"}],\"title\":\"Collision Detection\",\"type\":\"integer\",\"x-display-type\":\"Unsigned Byte\"},\"isKinematic\":{\"default\":false,\"description\":\"Treat the rigid body as kinematic (unaffected by forces; driven by animation/app logic).\",\"title\":\"Is Kinematic\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"linearDamping\":{\"default\":0,\"description\":\"Linear damping coefficient (s^-1). 0 = no damping; must be non-negative.\",\"format\":\"float\",\"minimum\":0,\"title\":\"Linear Damping\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"s^-1\"},\"lockedAxis\":{\"default\":0,\"description\":\"Lock motion along/around the specified axes.\",\"format\":\"int8\",\"minimum\":0,\"title\":\"Locked Axis\",\"type\":\"integer\",\"x-bitFlags\":[{\"description\":\"Locks motion along the X axis.\",\"name\":\"Linear X\",\"value\":1},{\"description\":\"Locks motion along the Y axis.\",\"name\":\"Linear Y\",\"value\":2},{\"description\":\"Locks motion along the Z axis.\",\"name\":\"Linear Z\",\"value\":4},{\"description\":\"Locks motion around the X axis.\",\"name\":\"Angular X\",\"value\":8},{\"description\":\"Locks motion around the Y axis.\",\"name\":\"Angular Y\",\"value\":16},{\"description\":\"Locks motion around the Z axis.\",\"name\":\"Angular Z\",\"value\":32}],\"x-display-type\":\"Unsigned Byte\"},\"mass\":{\"default\":1,\"description\":\"Mass (kg). A value of 0 is treated as infinite mass (static).\",\"format\":\"float\",\"title\":\"Mass\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"kg\"},\"maxAngularVelocity\":{\"default\":100,\"description\":\"Maximum angular velocity (rad/s). Must be non-negative.\",\"format\":\"float\",\"minimum\":0,\"title\":\"Max Angular Velocity\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"rad/s\"},\"maxLinearVelocity\":{\"default\":10000000000000000,\"description\":\"Maximum linear velocity (m/s). Must be non-negative.\",\"format\":\"float\",\"minimum\":0,\"title\":\"Max Linear Velocity\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m/s\"},\"useGravity\":{\"default\":true,\"description\":\"Whether the rigid body is affected by gravity.\",\"title\":\"Use Gravity\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"}},\"title\":\"Rigid Body\",\"type\":\"object\",\"x-category\":\"physics\",\"x-requires\":{\"allOf\":[\"local_transform\",\"physics_material\"]}},\"scene_ref\":{\"description\":\"Reference to a subscene (linker); used to compose scenes.\",\"properties\":{\"maxRecursionCount\":{\"default\":1,\"description\":\"Maximum recursion depth when a scene references itself.\",\"format\":\"int32\",\"minimum\":0,\"title\":\"Max Recursion Count\",\"type\":\"integer\",\"x-display-type\":\"Unsigned Integer\"},\"value\":{\"description\":\"Referenced scene (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Value\",\"type\":\"string\",\"x-asset-ref\":\"scene\",\"x-display-type\":\"UUID\"}},\"title\":\"Scene Reference\",\"type\":\"object\",\"x-category\":\"linker\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"script_element\":{\"description\":\"References a script and supplies its input values.\",\"properties\":{\"dataJSON\":{\"description\":\"Script input values in JSON; schema defined by scriptRef.\",\"title\":\"Data Json\",\"type\":\"object\",\"x-display-type\":\"JSON\"},\"scriptRef\":{\"description\":\"Referenced script (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Script Ref\",\"type\":\"string\",\"x-asset-ref\":\"script\",\"x-display-type\":\"UUID\"}},\"title\":\"Script Element\",\"type\":\"object\",\"x-category\":\"scripting\"},\"script_map\":{\"description\":\"Holds a set of script elements keyed by UUID.\",\"properties\":{\"elements\":{\"additionalProperties\":{\"description\":\"References a script and supplies its input values.\",\"properties\":{\"dataJSON\":{\"description\":\"Script input values in JSON; schema defined by scriptRef.\",\"title\":\"Data Json\",\"type\":\"object\",\"x-display-type\":\"JSON\"},\"scriptRef\":{\"description\":\"Referenced script (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Script Ref\",\"type\":\"string\",\"x-asset-ref\":\"script\",\"x-display-type\":\"UUID\"}},\"title\":\"Script Element\",\"type\":\"object\",\"x-category\":\"scripting\"},\"description\":\"Map of script UUID to script element.\",\"title\":\"Elements\",\"type\":\"object\"}},\"title\":\"Script Map\",\"type\":\"object\",\"x-category\":\"scripting\"},\"shadow_caster\":{\"description\":\"Enables a light to cast real-time shadows with configurable map resolution, depth range, and (for directional lights) cascades.\",\"properties\":{\"accumulateShadowCascades\":{\"default\":true,\"description\":\"Directional lights only: blend/accumulate all cascades to reduce visible transitions between splits.\",\"title\":\"Accumulate Shadow Cascades\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"bias\":{\"default\":0.004,\"description\":\"Depth bias applied during shadow tests to reduce self-shadowing (acne). Increase to mitigate artifacts; too high causes peter-panning.\",\"format\":\"float\",\"title\":\"Bias\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"cascadeCount\":{\"default\":4,\"description\":\"Directional lights only: number of cascades for CSM. 0 = static shadow map, 1\u20134 = increasing cascade count.\",\"format\":\"int8\",\"oneOf\":[{\"const\":0,\"description\":\"A single, precomputed shadow map that does not depend on the camera's view. Provides consistent shadows across the scene but lacks adaptability for dynamic perspectives or varying levels of detail.\",\"title\":\"Static Shadow Map\"},{\"const\":1,\"description\":\"One shadow layer for the entire view. Provides consistent but basic coverage, suitable for simple scenes or performance-critical applications.\",\"title\":\"Single Cascade\"},{\"const\":2,\"description\":\"Two layers of shadow refinement enhance detail near the viewer while managing distant shadows more efficiently.\",\"title\":\"Dual Cascade\"},{\"const\":3,\"description\":\"Three shadow regions create a balanced depth, offering clarity across close and mid-range distances.\",\"title\":\"Triple Cascade\"},{\"const\":4,\"description\":\"Four layers provide precise and adaptive shadow detail, ensuring realistic depth and smooth transitions across a wide range of distances.\",\"title\":\"Quad Cascade\"}],\"title\":\"Cascade Count\",\"type\":\"integer\",\"x-display-type\":\"Byte\"},\"cascadeSplitLambda\":{\"default\":0.94,\"description\":\"Directional lights only: cascade split distribution for CSM. 0 = uniform (linear) splits; 1 = logarithmic (more resolution near the camera). Values in [0,1] blend between the two.\",\"format\":\"float\",\"title\":\"Cascade Split Lambda\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"farDist\":{\"default\":100,\"description\":\"Shadow camera far clip distance (meters). Use the smallest range that contains casters/receivers.\",\"format\":\"float\",\"title\":\"Far Dist\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"nearDist\":{\"default\":0.1,\"description\":\"Shadow camera near clip distance (meters). Tighten to improve depth precision.\",\"format\":\"float\",\"title\":\"Near Dist\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"quality\":{\"default\":1024,\"description\":\"Shadow map resolution (pixels per side). Higher values increase detail at the cost of memory and performance.\",\"format\":\"int32\",\"oneOf\":[{\"const\":256,\"description\":\"Shadows are vague and blocky, providing just enough to indicate their general presence.\",\"title\":\"Ultra-Low (256x256)\"},{\"const\":512,\"description\":\"Shadows appear soft and blurry, offering a basic sense of shape with little detail.\",\"title\":\"Very Low (512x512)\"},{\"const\":1024,\"description\":\"Shadows are smoother and moderately clear but lack sharpness, giving a gentle impression of depth.\",\"title\":\"Low (1024x1024)\"},{\"const\":2048,\"description\":\"Standard quality with adequate clarity for most scenes. Shadows are defined but not overly sharp.\",\"title\":\"Medium-Low (2048x2048)\"},{\"const\":3072,\"description\":\"*RECOMMENDED* Shadows have clean edges and are crisp enough to make fine details noticeable in most environments.\",\"title\":\"Medium (3072x3072)\"},{\"const\":4096,\"description\":\"High-quality shadows with detailed edges and accurate representation of shape and form.\",\"title\":\"Medium High (4096x4096)\"},{\"const\":6144,\"description\":\"Sharp and precise shadows that maintain clarity even for intricate details. Suitable for premium visual fidelity.\",\"title\":\"High (6144x6144)\"},{\"const\":8192,\"description\":\"Hyper-realistic shadows with razor-sharp detail and unparalleled depth, delivering cinematic-level quality.\",\"title\":\"Ultra High (8192x8192)\"}],\"title\":\"Quality\",\"type\":\"integer\",\"x-display-type\":\"Integer\"}},\"title\":\"Shadow caster\",\"type\":\"object\",\"x-category\":\"lighting\",\"x-requires\":{\"allOf\":[\"point_light\"]}},\"skeleton_ref\":{\"description\":\"Reference to a skeleton asset for skinning and animation.\",\"properties\":{\"value\":{\"description\":\"Referenced skeleton (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Value\",\"type\":\"string\",\"x-asset-ref\":\"skeleton\",\"x-display-type\":\"UUID\"}},\"title\":\"Skeleton Reference\",\"type\":\"object\",\"x-category\":\"animation\",\"x-requires\":{\"allOf\":[\"local_transform\"],\"oneOf\":[\"mesh_ref\",\"bone\"]}},\"sound_ref\":{\"description\":\"Reference to a sound asset with playback and spatialization controls.\",\"properties\":{\"attenuationModel\":{\"default\":0,\"description\":\"Distance attenuation model.\",\"format\":\"int8\",\"minimum\":0,\"oneOf\":[{\"const\":0,\"description\":\"No attenuation.\",\"title\":\"No Attenuation\"},{\"const\":1,\"description\":\"Inverse distance attenuation model.\",\"title\":\"Inverse Distance\"},{\"const\":2,\"description\":\"Linear distance attenuation model.\",\"title\":\"Linear Distance\"},{\"const\":3,\"description\":\"Exponential distance attenuation model.\",\"title\":\"Exponential Distance\"}],\"title\":\"Attenuation Model\",\"type\":\"integer\",\"x-display-type\":\"Unsigned Byte\"},\"attenuationRolloffFactor\":{\"default\":1,\"description\":\"Rolloff factor for distance attenuation.\",\"format\":\"float\",\"minimum\":0,\"title\":\"Attenuation Rolloff Factor\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"autoPlayOnStart\":{\"default\":false,\"description\":\"Autoplay when the simulation starts.\",\"title\":\"Auto Play on Start\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"dopplerFactor\":{\"default\":1,\"description\":\"Scale factor for the Doppler effect.\",\"format\":\"float\",\"minimum\":0,\"title\":\"Doppler Factor\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"inaudibleBehavior\":{\"default\":0,\"description\":\"Behavior when the sound becomes inaudible.\",\"format\":\"int8\",\"minimum\":0,\"oneOf\":[{\"const\":0,\"description\":\"Continue updating while inaudible.\",\"title\":\"Tick\"},{\"const\":1,\"description\":\"Suspend updates while inaudible.\",\"title\":\"Don't Tick\"},{\"const\":2,\"description\":\"Stop playback and release resources when inaudible.\",\"title\":\"Kill\"}],\"title\":\"Inaudible Behavior\",\"type\":\"integer\",\"x-display-type\":\"Unsigned Byte\"},\"looping\":{\"default\":false,\"description\":\"Whether the sound loops.\",\"title\":\"Looping\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"maxDistance\":{\"default\":50,\"description\":\"Distance beyond which the sound is inaudible (meters).\",\"format\":\"float\",\"minimum\":0,\"title\":\"Max Distance\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"minDistance\":{\"default\":5,\"description\":\"Distance at which the sound stays at max volume (meters).\",\"format\":\"float\",\"minimum\":0,\"title\":\"Min Distance\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"},\"pan\":{\"default\":0,\"description\":\"Stereo pan. \u22121 = left, 1 = right.\",\"format\":\"float\",\"maximum\":1,\"minimum\":-1,\"title\":\"Pan\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"playSpeed\":{\"default\":1,\"description\":\"Playback speed multiplier (1.0 = normal).\",\"format\":\"float\",\"title\":\"Play Speed\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"value\":{\"description\":\"Referenced sound (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Value\",\"type\":\"string\",\"x-asset-ref\":\"sound\",\"x-display-type\":\"UUID\"},\"volume\":{\"default\":1,\"description\":\"Playback volume [0..1].\",\"format\":\"float\",\"maximum\":1,\"minimum\":0,\"title\":\"Volume\",\"type\":\"number\",\"x-display-type\":\"Float\"}},\"title\":\"Sound Reference\",\"type\":\"object\",\"x-category\":\"sound\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"sphere_geometry\":{\"description\":\"Sphere geometry.\",\"properties\":{\"offset\":{\"default\":[0,0,0],\"description\":\"Local offset of the geometry origin (meters).\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Offset\",\"type\":\"array\",\"x-display-type\":\"Vector3\",\"x-unit\":\"m\"},\"radius\":{\"default\":0.5,\"description\":\"Radius of the sphere (meters).\",\"format\":\"float\",\"title\":\"Radius\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"m\"}},\"title\":\"Sphere Geometry\",\"type\":\"object\",\"x-category\":\"geometry\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"spline\":{\"description\":\"Displays an editor-only spline in the 3D view.\",\"properties\":{\"color\":{\"default\":[1,1,1],\"description\":\"Display color of the curve.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Color\",\"type\":\"array\",\"x-display-type\":\"Vector3\"},\"tension\":{\"default\":0.5,\"description\":\"Catmull-Rom tension (only when type is Catmull-Rom).\",\"format\":\"float\",\"title\":\"Tension\",\"type\":\"number\",\"x-display-type\":\"Float\"},\"type\":{\"default\":0,\"description\":\"Spline interpolation type.\",\"format\":\"int32\",\"minimum\":0,\"oneOf\":[{\"const\":0,\"title\":\"Centripetal\"},{\"const\":1,\"title\":\"Chordal \"},{\"const\":2,\"title\":\"Catmullrom\"}],\"title\":\"Type\",\"type\":\"integer\",\"x-display-type\":\"Unsigned Integer\"}},\"title\":\"Spline\",\"type\":\"object\",\"x-category\":\"editor\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"spot_light\":{\"description\":\"Adds a cone cutoff to a light, producing a spotlight. Requires a Point Light component for color/intensity and falloff.\",\"properties\":{\"IESProfile\":{\"description\":\"Optional IES photometric profile (2D texture). Modulates emitted intensity by direction; leave empty for uniform distribution.\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Ies Profile\",\"type\":\"string\",\"x-asset-ref\":\"texture\",\"x-display-type\":\"UUID\"},\"cutoff\":{\"default\":30,\"description\":\"Outer cone half-angle in degrees. Light intensity falls to zero outside this angle.\",\"format\":\"float\",\"title\":\"Cutoff\",\"type\":\"number\",\"x-display-type\":\"Float\",\"x-unit\":\"deg\"}},\"title\":\"Spot Light\",\"type\":\"object\",\"x-category\":\"lighting\",\"x-requires\":{\"allOf\":[\"point_light\"]}},\"tags\":{\"description\":\"Free-form tags used to group and filter entities.\",\"properties\":{\"value\":{\"description\":\"List of tags applied to this entity.\",\"items\":{\"type\":\"string\",\"x-display-type\":\"String\"},\"title\":\"Value\",\"type\":\"array\"}},\"title\":\"Tags\",\"type\":\"object\",\"x-category\":\"core\"},\"vehicle_controller\":{\"description\":\"Vehicle Controller parameters.\",\"properties\":{\"chassis\":{\"description\":\"The chassis.\",\"properties\":{\"linkage\":{\"default\":[],\"items\":{\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"},\"type\":\"array\"},\"originalEUID\":{\"default\":\"00000000-0000-0000-0000-000000000000\",\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"}},\"required\":[\"originalEUID\",\"linkage\"],\"title\":\"Chassis\",\"type\":\"object\",\"x-display-type\":\"Entity Reference\"},\"frontLeftWheel\":{\"description\":\"The front left wheel.\",\"properties\":{\"linkage\":{\"default\":[],\"items\":{\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"},\"type\":\"array\"},\"originalEUID\":{\"default\":\"00000000-0000-0000-0000-000000000000\",\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"}},\"required\":[\"originalEUID\",\"linkage\"],\"title\":\"Front Left Wheel\",\"type\":\"object\",\"x-display-type\":\"Entity Reference\"},\"frontRightWheel\":{\"description\":\"The front right wheel.\",\"properties\":{\"linkage\":{\"default\":[],\"items\":{\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"},\"type\":\"array\"},\"originalEUID\":{\"default\":\"00000000-0000-0000-0000-000000000000\",\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"}},\"required\":[\"originalEUID\",\"linkage\"],\"title\":\"Front Right Wheel\",\"type\":\"object\",\"x-display-type\":\"Entity Reference\"},\"rearLeftWheel\":{\"description\":\"The rear left wheel.\",\"properties\":{\"linkage\":{\"default\":[],\"items\":{\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"},\"type\":\"array\"},\"originalEUID\":{\"default\":\"00000000-0000-0000-0000-000000000000\",\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"}},\"required\":[\"originalEUID\",\"linkage\"],\"title\":\"Rear Left Wheel\",\"type\":\"object\",\"x-display-type\":\"Entity Reference\"},\"rearRightWheel\":{\"description\":\"The rear right wheel.\",\"properties\":{\"linkage\":{\"default\":[],\"items\":{\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"},\"type\":\"array\"},\"originalEUID\":{\"default\":\"00000000-0000-0000-0000-000000000000\",\"description\":\"A unique identifier for an entity. It should be unique across all entities in the scene, but it is not guaranteed to be unique across all scenes.\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\",\"type\":\"string\",\"x-display-type\":\"Entity Unique Identifier\"}},\"required\":[\"originalEUID\",\"linkage\"],\"title\":\"Rear Right Wheel\",\"type\":\"object\",\"x-display-type\":\"Entity Reference\"}},\"title\":\"Vehicle Controller\",\"type\":\"object\",\"x-category\":\"physics\",\"x-requires\":{\"allOf\":[\"local_transform\"]}},\"volume_filter\":{\"description\":\"View filtering and display controls applied to the referenced volume.\",\"properties\":{\"applyGaussianFiltering\":{\"default\":false,\"description\":\"Apply Gaussian smoothing when sampling voxels.\",\"title\":\"Apply Gaussian Filtering\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"enable3D\":{\"default\":true,\"description\":\"Whether this volume is visible in the 3D view.\",\"title\":\"Enable3 D\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"enableMPR\":{\"default\":true,\"description\":\"Whether this volume is visible in the MPR (multi-planar reconstruction) view.\",\"title\":\"Enable Mpr\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"},\"mprColor\":{\"default\":[1,1,1],\"description\":\"Tint applied to this volume's MPR/projection output.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":3,\"minItems\":3,\"title\":\"Mpr Color\",\"type\":\"array\",\"x-display-type\":\"Vector3\"},\"range\":{\"default\":[0,1],\"description\":\"Displayed voxel intensity range [min, max]. Values outside the material's valid range are clamped/ignored.\",\"items\":{\"format\":\"float\",\"type\":\"number\"},\"maxItems\":2,\"minItems\":2,\"title\":\"Range\",\"type\":\"array\",\"x-display-type\":\"Vector2\"},\"sampleUnfiltered\":{\"default\":false,\"description\":\"Sample texels without hardware filtering (nearest).\",\"title\":\"Sample Unfiltered\",\"type\":\"boolean\",\"x-display-type\":\"Boolean\"}},\"title\":\"Volume Filter\",\"type\":\"object\",\"x-category\":\"rendering\",\"x-requires\":{\"allOf\":[\"volume_ref\"]}},\"volume_material_ref\":{\"description\":\"Reference to the volume material used for shading and transfer functions.\",\"properties\":{\"value\":{\"description\":\"Referenced volume material (UUID).\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Value\",\"type\":\"string\",\"x-asset-ref\":\"volume_material\",\"x-display-type\":\"UUID\"}},\"title\":\"Volume Material Reference\",\"type\":\"object\",\"x-category\":\"rendering\",\"x-requires\":{\"allOf\":[\"volume_ref\"]}},\"volume_ref\":{\"description\":\"Reference to a volumetric dataset stored as a 3D texture (voxels).\",\"properties\":{\"texture3dRef\":{\"description\":\"Referenced 3D texture (UUID) containing the volume voxels.\",\"pattern\":\"^(00000000-0000-0000-0000-000000000000|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$\",\"title\":\"Texture3d Ref\",\"type\":\"string\",\"x-asset-ref\":\"texture_3d\",\"x-display-type\":\"UUID\"}},\"title\":\"Volume Reference\",\"type\":\"object\",\"x-category\":\"rendering\",\"x-requires\":{\"allOf\":[\"local_transform\",\"volume_material_ref\"]}}},\"required\":[\"euid\"],\"type\":\"object\"}", "import { entityComponents as entityComponentStyles } from \"@3dverse/design-tokens\";\nimport { EntityComponentBadge } from \"../EntityComponent/EntityComponentBadge\";\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport type EntityRecipeProps = {\n allOf?: string[];\n oneOf?: string[];\n withAttributes?: Record<string, any>;\n className?: string;\n};\n\n//------------------------------------------------------------------------------\nexport function EntityRecipe({ allOf, oneOf, withAttributes, className }: EntityRecipeProps) {\n return (\n <article\n className={cn(\n \"relative w-fit flex flex-col flex-wrap my-4 border border-primary-alpha rounded-[1.5rem]\",\n className,\n )}\n >\n <div className=\"absolute [writing-mode:vertical-rl] rotate-180 top-1/2 -left-3 -translate-x-1/2 -translate-y-1/2 text-[.6rem] font-medium text-tertiary tracking-wider opacity-60 uppercase\">\n Entity\n </div>\n <div className=\"flex flex-wrap gap-2 p-2\">\n {allOf?.map(component => (\n <EntityComponentBadgeEx key={component} name={component} withAttributes={withAttributes} />\n ))}\n </div>\n {oneOf && (\n <div className=\"flex gap-3 pl-4 p-2 border-t border-secondary-alpha\">\n <div className=\"shrink-0 mt-px text-3xs text-tertiary font-medium\">\n <i className=\"fal fa-plus mr-1\" /> One of\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {oneOf.map(component => (\n <EntityComponentBadge key={component} name={component} />\n ))}\n </div>\n </div>\n )}\n </article>\n );\n}\n\n//------------------------------------------------------------------------------\nconst EntityComponentBadgeEx = ({ name, withAttributes }: { name: string; withAttributes?: Record<string, any> }) => {\n if (withAttributes && Object.keys(withAttributes).includes(name)) {\n const { color } = entityComponentStyles[name as keyof typeof entityComponentStyles];\n return (\n <div\n className=\"flex flex-col bg-(--entity-component-color)/5 rounded-[14px]\"\n style={{ \"--entity-component-color\": color } as React.CSSProperties}\n >\n <EntityComponentBadge name={name} className=\"w-full\" />\n <ComponentAttributes attributes={withAttributes[name]} />\n </div>\n );\n }\n return <EntityComponentBadge name={name} />;\n};\n\n//------------------------------------------------------------------------------\nconst ComponentAttributes = ({ attributes }: { attributes: Record<string, any> }) => {\n return (\n <div className=\"flex flex-col flex-wrap gap-1 p-2 pr-4 text-xs text-tertiary\">\n {Object.entries(attributes).map(([key, value]) => (\n <div key={key} className=\"flex gap-1\">\n <span className=\"font-mono\">{key}:</span>\n <span className=\"font-mono\">{JSON.stringify(value)}</span>\n </div>\n ))}\n </div>\n );\n};\n", "//------------------------------------------------------------------------------\nimport { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n//------------------------------------------------------------------------------\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n", ".glowEffect {\n position: relative;\n /* --color: var(--glow-color, #565c7e); */\n --color: var(--color-informative);\n\n &:before {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 400%;\n max-width: 13rem;\n aspect-ratio: 1 / 1;\n\n background-color: var(--color);\n border-radius: 100%;\n filter: blur(60px);\n opacity: 0.2;\n pointer-events: none;\n }\n}\n\n.glowEffectWide {\n &:before {\n max-width: 20rem;\n aspect-ratio: 1 / 0.6;\n filter: blur(60px);\n }\n}\n", "//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nimport styles from \"./GlowEffect.module.css\";\n\n//------------------------------------------------------------------------------\nexport const GlowEffect = ({\n children,\n variant = \"default\",\n className,\n}: {\n children: React.ReactNode;\n variant?: \"default\" | \"wide\";\n className?: string;\n}) => {\n return (\n <div className={cn(styles.glowEffect, variant === \"wide\" && styles.glowEffectWide, className)}>{children}</div>\n );\n};\n", "import React from \"react\";\nimport { IsometricGridProps } from \"./IsometricSchemaTypes\";\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport const IsometricSchema: React.FC<IsometricGridProps> = ({\n items = [],\n connections = [],\n gridSize = 40,\n cellSize = 70,\n containerWidth = 800,\n containerHeight = 400,\n caption,\n animateOnScroll = true,\n className,\n}) => {\n //--------------------------------------------------------------------------\n // Appear animation of items and connections.\n // - Hidden by the animation's first keyframe (fill-mode \"both\") rather than an inline\n // opacity, so elements stay visible when the scroll timeline is inactive\n // (e.g. a page that doesn't scroll) or unsupported.\n // - The range is based on \"entry\": an element fully in view has completed its entry,\n // so it's always revealed, even if the page can't scroll.\n const appearStyle = (delay?: string): React.CSSProperties =>\n ({\n animationFillMode: \"both\",\n ...(animateOnScroll\n ? { animationTimeline: \"view(block)\", animationRange: \"entry 25% entry 100%\" }\n : { animationDelay: delay }),\n }) as React.CSSProperties;\n\n //--------------------------------------------------------------------------\n // Convert isometric coordinates to screen coordinates\n const isoToScreen = (x: number, y: number) => {\n const screenX = (x - y) * (cellSize / 2);\n const screenY = (x + y) * (cellSize / 4);\n return { x: screenX, y: screenY };\n };\n\n //--------------------------------------------------------------------------\n // Center point of the container\n const centerX = containerWidth / 2;\n const centerY = containerHeight / 2;\n\n //--------------------------------------------------------------------------\n // Generate grid lines\n const generateGrid = () => {\n const lines = [];\n const halfGrid = gridSize / 2;\n\n // Horizontal lines (parallel to x-axis)\n for (let y = -halfGrid; y <= halfGrid; y++) {\n const start = isoToScreen(-halfGrid, y);\n const end = isoToScreen(halfGrid, y);\n lines.push(\n <line\n key={`h-${y}`}\n x1={centerX + start.x}\n y1={centerY + start.y}\n x2={centerX + end.x}\n y2={centerY + end.y}\n stroke=\"rgba(100, 150, 200, 0.4)\"\n strokeWidth=\"1\"\n />,\n );\n }\n\n // Vertical lines (parallel to y-axis)\n for (let x = -halfGrid; x <= halfGrid; x++) {\n const start = isoToScreen(x, -halfGrid);\n const end = isoToScreen(x, halfGrid);\n lines.push(\n <line\n key={`v-${x}`}\n x1={centerX + start.x}\n y1={centerY + start.y}\n x2={centerX + end.x}\n y2={centerY + end.y}\n stroke=\"rgba(100, 150, 200, 0.4)\"\n strokeWidth=\"1\"\n />,\n );\n }\n\n return lines;\n };\n\n //--------------------------------------------------------------------------\n // Generate arrow marker\n const generateArrow = (direction: \"start\" | \"end\", color: string, index: number) => {\n const size = 10;\n const id = `arrow-${direction}-${index}`;\n\n return (\n <marker\n id={id}\n markerWidth={size}\n markerHeight={size}\n refX={direction === \"end\" ? size - 4 : 4}\n refY={size / 2}\n orient=\"auto\"\n markerUnits=\"userSpaceOnUse\"\n >\n <polygon\n points={\n direction === \"end\"\n ? `0,0 ${size},${size / 2} 0,${size}`\n : `${size},0 0,${size / 2} ${size},${size}`\n }\n fill={color}\n />\n </marker>\n );\n };\n\n //--------------------------------------------------------------------------\n // Generate connections that follow grid lines\n const generateConnections = () => {\n return connections.map((conn, index) => {\n const {\n from_x,\n from_y,\n to_x,\n to_y,\n via_x = from_x, // default via to straight line if not provided\n via_y = from_y,\n arrow_start,\n arrow_end,\n color = \"#fbbf24\",\n name,\n showDebug,\n isAnimated = false,\n animationDirection = \"end\",\n } = conn;\n\n // Build path that follows grid lines\n const points: { x: number; y: number }[] = [];\n const segments: { from: { x: number; y: number }; to: { x: number; y: number } }[] = [];\n let currentX = from_x;\n let currentY = from_y;\n\n points.push(isoToScreen(currentX, currentY));\n\n // Move to via point following grid lines\n if (currentX !== via_x) {\n const nextX = via_x;\n segments.push({ from: { x: currentX, y: currentY }, to: { x: nextX, y: currentY } });\n currentX = nextX;\n points.push(isoToScreen(currentX, currentY));\n }\n if (currentY !== via_y) {\n const nextY = via_y;\n segments.push({ from: { x: currentX, y: currentY }, to: { x: currentX, y: nextY } });\n currentY = nextY;\n points.push(isoToScreen(currentX, currentY));\n }\n\n // Move to destination following grid lines\n if (currentX !== to_x) {\n const nextX = to_x;\n segments.push({ from: { x: currentX, y: currentY }, to: { x: nextX, y: currentY } });\n currentX = nextX;\n points.push(isoToScreen(currentX, currentY));\n }\n if (currentY !== to_y) {\n const nextY = to_y;\n segments.push({ from: { x: currentX, y: currentY }, to: { x: currentX, y: nextY } });\n currentY = nextY;\n points.push(isoToScreen(currentX, currentY));\n }\n\n // Find the longest segment (for label orientation)\n let longestSegment = segments[0];\n let maxLength = 0;\n segments.forEach(seg => {\n const dx = seg.to.x - seg.from.x;\n const dy = seg.to.y - seg.from.y;\n const length = Math.hypot(dx, dy);\n if (length > maxLength) {\n maxLength = length;\n longestSegment = seg;\n }\n });\n\n const segStart = isoToScreen(longestSegment.from.x, longestSegment.from.y);\n const segEnd = isoToScreen(longestSegment.to.x, longestSegment.to.y);\n const segMidX = centerX + (segStart.x + segEnd.x) / 2;\n const segMidY = centerY + (segStart.y + segEnd.y) / 2;\n const rawAngle = Math.atan2(segEnd.y - segStart.y, segEnd.x - segStart.x) * (180 / Math.PI);\n\n // Keep any angle visually upright but aligned to the segment\n const normalizeAngleDeg = (deg: number) => {\n // wrap to (-180, 180]\n let a = ((deg + 180) % 360) - 180;\n // fold into [-90, 90]\n if (a > 90) a -= 180;\n if (a < -90) a += 180;\n return a;\n };\n const labelAngle = normalizeAngleDeg(rawAngle);\n\n // Convert points to path string\n const pathCommands = points\n .map((p, i) => {\n const x = centerX + p.x;\n const y = centerY + p.y;\n return i === 0 ? `M ${x},${y}` : `L ${x},${y}`;\n })\n .join(\" \");\n\n // Approx total path length in screen space (for speed/duration)\n let totalLen = 0;\n for (let i = 1; i < points.length; i++) {\n const a = points[i - 1];\n const b = points[i];\n const ax = centerX + a.x;\n const ay = centerY + a.y;\n const bx = centerX + b.x;\n const by = centerY + b.y;\n totalLen += Math.hypot(bx - ax, by - ay);\n }\n const dur = Math.max(1.2, totalLen / 150); // ~constant speed\n\n // Unique IDs for path & markers\n const pathId = `conn-path-${index}`;\n const startMarkerId = `arrow-start-${index * 2}`;\n const endMarkerId = `arrow-end-${index * 2 + 1}`;\n\n const ArrowDefs = () => (\n <defs>\n {arrow_start && generateArrow(\"start\", color, index * 2)}\n {arrow_end && generateArrow(\"end\", color, index * 2 + 1)}\n </defs>\n );\n\n // Helper to render a glowing dot that travels along the path\n const GlowDot = ({ reverse = false, begin = \"0s\" }: { reverse?: boolean; begin?: string }) => (\n <g filter=\"url(#conn-glow)\">\n <ellipse cx=\"5\" cy=\"0\" rx=\"4\" ry=\"2\" fill={color} opacity=\"0.8\" />\n <animateMotion\n dur={`${dur}s`}\n repeatCount=\"indefinite\"\n begin={begin}\n keyPoints={reverse ? \"1;0\" : \"0;1\"}\n keyTimes=\"0;1\"\n calcMode=\"linear\"\n rotate=\"auto\"\n >\n <mpath xlinkHref={`#${pathId}`} />\n </animateMotion>\n </g>\n );\n\n // Choose how many dots based on direction\n const renderDots = () => {\n if (!isAnimated) return null;\n if (animationDirection === \"both\") {\n return (\n <>\n <GlowDot reverse={false} begin=\"0s\" />\n <GlowDot reverse={true} begin={`${dur / 2}s`} />\n </>\n );\n }\n if (animationDirection === \"start\") {\n // move from end -> start\n return <GlowDot reverse={true} />;\n }\n // default \"end\": move from start -> end\n return <GlowDot reverse={false} />;\n };\n\n return (\n <g key={index} className=\"animate-appear-top cursor-default\" style={appearStyle(\".2s\")}>\n <ArrowDefs />\n {/* The actual connection path */}\n <path\n id={pathId}\n d={pathCommands}\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n fill=\"none\"\n markerStart={arrow_start ? `url(#${startMarkerId})` : undefined}\n markerEnd={arrow_end ? `url(#${endMarkerId})` : undefined}\n style={conn.style}\n />\n {/* Moving light(s) on top */}\n {renderDots()}\n\n {name && (\n <g transform={`translate(${segMidX}, ${segMidY}) rotate(${labelAngle})`}>\n <text\n x=\"12\"\n y=\"12\"\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n className=\"text-sm font-bold fill-accent\"\n >\n {name}\n </text>\n </g>\n )}\n {showDebug && (\n <>\n {points.map((p, i) => (\n <circle\n key={i}\n cx={centerX + p.x}\n cy={centerY + p.y}\n r=\"3\"\n fill={i === 0 ? \"red\" : i === points.length - 1 ? \"green\" : \"blue\"}\n />\n ))}\n </>\n )}\n </g>\n );\n });\n };\n\n //--------------------------------------------------------------------------\n // Generate isometric items\n const generateItems = () => {\n return items.map((item, index) => {\n const { x, y, width, height, color = \"#52548B\", name, showDebug, image } = item;\n\n // Calculate the four corners of the item\n const bottomLeft = isoToScreen(x, y);\n const bottomRight = isoToScreen(x + width, y);\n const topRight = isoToScreen(x + width, y - height);\n const topLeft = isoToScreen(x, y - height);\n\n // Create polygon points\n const points = [\n [centerX + bottomLeft.x, centerY + bottomLeft.y],\n [centerX + bottomRight.x, centerY + bottomRight.y],\n [centerX + topRight.x, centerY + topRight.y],\n [centerX + topLeft.x, centerY + topLeft.y],\n ]\n .map(([px, py]) => `${px},${py}`)\n .join(\" \");\n\n // Calculate center for label\n const centerPos = isoToScreen(x + width / 2, y - height / 2);\n\n return (\n <g key={index} className=\"group animate-appear-top cursor-default\" style={appearStyle()}>\n <g\n // transform={`translate(${bottomLeft.x}px, ${bottomLeft.y}px)`}\n className=\"drop-shadow-[0_9px_7px_var(--shadow-color)] hover:drop-shadow-[0_12px_10px_var(--shadow-color)] hover:[--translate:-8px] transition-transform duration-300\"\n style={\n {\n \"--shadow-color\": `color-mix(in srgb, ${color} 10%, var(--color-bg-ground))`,\n translate: \"0 var(--translate, -4px)\",\n } as React.CSSProperties\n }\n >\n <polygon\n points={points}\n fill={color}\n strokeLinejoin=\"round\"\n className=\"opacity-80 group-hover:opacity-100 transition-opacity duration-all duration-300\"\n />\n {image &&\n (() => {\n // Calculate image position at bottom-left corner\n const imageX = centerX + bottomLeft.x + 5;\n const imageY = centerY + bottomLeft.y - 80;\n return <image href={image} x={imageX} y={imageY} width=\"128px\" />;\n })()}\n\n {name && (\n <g transform={`translate(${centerX + centerPos.x}, ${centerY + centerPos.y})`}>\n {/* Background rectangle */}\n <rect\n x={-(name.length * 4 + 8)}\n y={-12}\n width={name.length * 8 + 16}\n height={24}\n fill=\"#181a59\"\n fillOpacity=\"0.8\"\n rx=\"4\"\n />\n <text\n x={0}\n y={0}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n className=\"text-base\"\n fill=\"white\"\n >\n {name}\n </text>\n </g>\n )}\n {showDebug && (\n <text\n x={centerX + centerPos.x}\n y={centerY + centerPos.y + 20}\n textAnchor=\"middle\"\n fill=\"white\"\n fontSize=\"10\"\n opacity=\"0.7\"\n >\n ({x}, {y})\n </text>\n )}\n </g>\n </g>\n );\n });\n };\n\n //--------------------------------------------------------------------------\n return (\n <figure className={cn(\"m-0 w-full\", className)} role=\"img\" aria-label={caption}>\n <svg\n viewBox={`0 0 ${containerWidth} ${containerHeight}`}\n preserveAspectRatio=\"xMidYMid meet\"\n className=\"w-full\"\n >\n <defs>\n <filter id=\"conn-glow\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"3\" result=\"blur\" />\n <feMerge>\n <feMergeNode in=\"blur\" />\n <feMergeNode in=\"SourceGraphic\" />\n </feMerge>\n </filter>\n <mask id=\"fadeMask\" maskUnits=\"objectBoundingBox\">\n <radialGradient id=\"fadeGradient\">\n <stop offset=\"40%\" stopColor=\"white\" />\n <stop offset=\"90%\" stopColor=\"black\" />\n </radialGradient>\n <rect width=\"100%\" height=\"100%\" fill=\"url(#fadeGradient)\" />\n </mask>\n <filter id=\"text-backdrop-blur\" x=\"-200%\" y=\"-200%\" width=\"500%\" height=\"500%\">\n <feGaussianBlur in=\"BackgroundImage\" stdDeviation=\"20\" result=\"blurredBg\" />\n <feFlood floodColor=\"black\" floodOpacity=\"0.8\" result=\"bgColor\" />\n <feComposite in=\"bgColor\" in2=\"blurredBg\" operator=\"in\" result=\"coloredBlur\" />\n <feComposite in=\"coloredBlur\" in2=\"SourceGraphic\" operator=\"over\" result=\"final\" />\n </filter>\n </defs>\n <rect width={containerWidth} height={containerHeight} fill=\"transparent\" />\n <g mask=\"url(#fadeMask)\">{generateGrid()}</g>\n {generateConnections()}\n {generateItems()}\n </svg>\n {caption && (\n <figcaption className=\"-translate-y-6 text-center text-sm text-tertiary text-balance\">\n {caption}\n </figcaption>\n )}\n </figure>\n );\n};\n", "//------------------------------------------------------------------------------\nexport const Logo3dverse = ({ style, className = \"\" }: { style?: React.CSSProperties; className?: string }) => {\n return (\n <svg viewBox=\"0 0 99 20\" xmlns=\"http://www.w3.org/2000/svg\" style={style} className={className}>\n <path\n fill=\"var(--color-wordmark-prefix, var(--color-brand))\"\n d=\"M6.059 19.351c-.92733 0-1.79833-.1733-2.613-.52-.81467-.3553-1.521-.858-2.119-1.508-.589333-.65-1.018333-1.417-1.2869999-2.301L2.666 14.294c.25133.806.689 1.4257 1.313 1.859.624.4247 1.31733.6327 2.08.624.68467-.0087 1.287-.169 1.807-.481.52-.312.92733-.7323 1.222-1.261.29467-.5373.442-1.1527.442-1.846 0-1.04-.325-1.898-.975-2.574-.64133-.676-1.482-1.014-2.522-1.014-.29467 0-.598.04333-.91.13-.30333.08667-.58933.19933-.858.338L2.991 7.924l6.604-5.837.286.78h-9.1V.279999h11.258V2.867L6.553 8.145l-.026-.884c1.17867 0 2.20133.26433 3.068.793.8667.52 1.534 1.23067 2.002 2.132.4767.8927.715 1.8937.715 3.003 0 1.196-.2817 2.2577-.845 3.185-.5547.9273-1.3043 1.6553-2.249 2.184-.936.5287-1.989.793-3.159.793Zm15.4769.039c-1.3087 0-2.4397-.325-3.393-.975-.9447-.65-1.677-1.534-2.197-2.652-.5113-1.1267-.767-2.392-.767-3.796 0-1.4127.26-2.67367.78-3.783.52-1.118 1.2567-1.99767 2.21-2.639.962-.65 2.1017-.975 3.419-.975 1.326 0 2.4397.325 3.341.975.91.64133 1.5947 1.521 2.054 2.639.468 1.118.702 2.379.702 3.783s-.234 2.665-.702 3.783c-.468 1.118-1.157 2.0063-2.067 2.665-.91.65-2.0367.975-3.38.975Zm.377-2.457c.8927 0 1.6207-.2123 2.184-.637.5633-.4247.975-1.0097 1.235-1.755.26-.7453.39-1.6033.39-2.574 0-.9707-.1343-1.8287-.403-2.574-.26-.74533-.6673-1.326-1.222-1.742-.546-.416-1.2437-.624-2.093-.624-.9013 0-1.6423.221-2.223.663-.5807.442-1.014 1.03567-1.3 1.781-.2773.7453-.416 1.5773-.416 2.496 0 .9273.1387 1.768.416 2.522.286.7453.7107 1.339 1.274 1.781.572.442 1.2913.663 2.158.663ZM25.7219 19V8.899h-.312V.279999h2.73V19h-2.418Z\"\n />\n <path\n fill=\"var(--color-wordmark, var(--color-content-secondary))\"\n d=\"m35.8333 19-5.096-14.04h2.743l3.731 10.634 3.731-10.634h2.743L38.5893 19h-2.756Zm16.1734.39c-1.3953 0-2.6217-.3033-3.679-.91-1.0487-.6153-1.8677-1.469-2.457-2.561-.5807-1.1007-.871-2.3747-.871-3.822 0-1.534.286-2.86433.858-3.991.5807-1.12667 1.3867-1.99767 2.418-2.613 1.0313-.61533 2.2317-.923 3.601-.923 1.43 0 2.6477.33367 3.653 1.001 1.0053.65867 1.755 1.599 2.249 2.821.5027 1.222.702 2.6737.598 4.355h-2.717v-.988c-.0173-1.6293-.3293-2.834-.936-3.614-.598-.78-1.5123-1.17-2.743-1.17-1.3607 0-2.3833.429-3.068 1.287-.6847.858-1.027 2.0973-1.027 3.718 0 1.5427.3423 2.7387 1.027 3.588.6847.8407 1.6727 1.261 2.964 1.261.8493 0 1.5817-.1907 2.197-.572.624-.39 1.1093-.9447 1.456-1.664l2.665.845c-.546 1.2567-1.3737 2.2317-2.483 2.925-1.1093.6847-2.3443 1.027-3.705 1.027Zm-5.005-6.643v-2.119h10.023v2.119h-10.023ZM61.5534 19V4.96h2.418v3.406l-.338-.442c.1733-.45067.3986-.86233.676-1.235.2773-.38133.598-.69333.962-.936.3553-.26.7496-.45933 1.183-.598.442-.14733.8926-.234 1.352-.26.4593-.03467.9013-.013 1.326.065v2.548c-.4594-.12133-.9707-.156-1.534-.104-.5547.052-1.066.22967-1.534.533-.442.286-.793.63267-1.053 1.04-.2514.40733-.4334.86233-.546 1.365-.1127.494-.169 1.0183-.169 1.573V19h-2.743Zm15.1758.377c-1.7073 0-3.0983-.377-4.173-1.131-1.0746-.754-1.7333-1.8157-1.976-3.185l2.782-.429c.1734.728.572 1.3043 1.196 1.729.6327.416 1.417.624 2.353.624.8494 0 1.5124-.1733 1.989-.52.4854-.3467.728-.8233.728-1.43 0-.3553-.0866-.6413-.26-.858-.1646-.2253-.5156-.4377-1.053-.637-.5373-.1993-1.3563-.4463-2.457-.741-1.2046-.312-2.1623-.6457-2.873-1.001-.702-.364-1.2046-.7843-1.508-1.261-.2946-.4853-.442-1.07033-.442-1.755 0-.84933.2254-1.59033.676-2.223.4507-.63267 1.0834-1.12233 1.898-1.469.8234-.34667 1.7854-.52 2.886-.52 1.0747 0 2.0324.169 2.873.507.8407.338 1.521.819 2.041 1.443.52.61533.832 1.339.936 2.171l-2.782.507c-.0953-.676-.4116-1.209-.949-1.599-.5373-.39-1.235-.60233-2.093-.637-.8233-.03467-1.4906.104-2.002.416-.5113.30333-.767.72367-.767 1.261 0 .312.0954.57633.286.793.1994.21667.5807.42467 1.144.624.5634.1993 1.3954.4377 2.496.715 1.1787.3033 2.1147.6413 2.808 1.014.6934.364 1.1874.8017 1.482 1.313.3034.5027.455 1.1137.455 1.833 0 1.3867-.507 2.4743-1.521 3.263-1.0053.7887-2.3963 1.183-4.173 1.183Zm15.0575.013c-1.3953 0-2.6217-.3033-3.679-.91-1.0487-.6153-1.8677-1.469-2.457-2.561-.5807-1.1007-.871-2.3747-.871-3.822 0-1.534.286-2.86433.858-3.991.5807-1.12667 1.3867-1.99767 2.418-2.613 1.0313-.61533 2.2317-.923 3.601-.923 1.43 0 2.6477.33367 3.653 1.001 1.0053.65867 1.755 1.599 2.249 2.821.5027 1.222.702 2.6737.598 4.355h-2.717v-.988c-.0173-1.6293-.3293-2.834-.936-3.614-.598-.78-1.5123-1.17-2.743-1.17-1.3607 0-2.3833.429-3.068 1.287-.6847.858-1.027 2.0973-1.027 3.718 0 1.5427.3423 2.7387 1.027 3.588.6847.8407 1.6727 1.261 2.964 1.261.8493 0 1.5817-.1907 2.197-.572.624-.39 1.1093-.9447 1.456-1.664l2.665.845c-.546 1.2567-1.3737 2.2317-2.483 2.925-1.1093.6847-2.3443 1.027-3.705 1.027Zm-5.005-6.643v-2.119h10.023v2.119h-10.023Z\"\n />\n </svg>\n );\n};\n\n//------------------------------------------------------------------------------\nexport const Logo3dverseRocket = ({ style, className = \"\" }: { style?: React.CSSProperties; className?: string }) => {\n return (\n <svg viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style={style} className={className}>\n <path\n d=\"M5.28808 19.7527L14.1837 28.4509L14.1837 39.9995L5.28302 31.294L5.28808 19.7527Z\"\n fill=\"var(--logo-color, #8d670b)\"\n />\n <path\n d=\"M33.9949 19.7527L25.0993 28.4509L25.0993 39.9995L34 31.294L33.9949 19.7527Z\"\n fill=\"var(--logo-color, #8d670b)\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M29.3294 13.2721L34.2049 19.747V31.294L24.9911 19.747V24.8481H24.9904V24.8488L14.4968 24.8488V19.7477H14.4968V19.747L5.28302 31.294L5.28302 19.7527L10.1585 13.28V9.17384C10.1585 3.05795 14.9512 0 19.744 0C22.106 0 24.468 0.742731 26.2563 2.22819C28.0966 3.75685 29.3294 6.07206 29.3294 9.17384L29.3294 13.2721L29.3294 13.2721ZM19.744 5.75545C21.2537 5.75545 22.7634 6.83514 22.7634 8.99452L22.7634 13.2748L16.7245 13.2773V8.99452C16.7245 7.40326 17.5444 6.3983 18.5799 5.97965C18.9496 5.83019 19.3468 5.75545 19.744 5.75545ZM16.7245 13.2773V13.28L22.7634 13.28L16.7245 13.28V13.2773H16.7245ZM19.7439 29.9788L14.4968 24.8488L24.9911 24.8488L19.7439 29.9788Z\"\n fill=\"url(#logo-rocket-gradient)\"\n />\n <defs>\n <linearGradient\n id=\"logo-rocket-gradient\"\n x1=\"12.0755\"\n y1=\"1.88679\"\n x2=\"31.3208\"\n y2=\"32.4528\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"var(--logo-top-color, #f0c732)\" />\n <stop offset=\"1\" stopColor=\"var(--logo-bottom-color, #ffc800)\" />\n </linearGradient>\n </defs>\n </svg>\n );\n};\n", ".spinnerLogo {\n position: relative;\n width: 40px;\n height: 40px;\n\n background-image: url(\"/app-launcher/images/3dverse-logo-shape.svg\");\n background-repeat: no-repeat;\n background-position: 0px 1px;\n color: var(--color-accent);\n filter: drop-shadow(0px 14px 5px color-mix(in srgb, var(--color-accent), black 90%));\n}\n\n.circle {\n position: absolute;\n top: -50%;\n left: -50%;\n width: 200%;\n height: 200%;\n\n border-radius: 47%;\n corner-shape: superellipse(0.65);\n border: 1px solid currentColor;\n border-right-color: color-mix(in srgb, currentColor, transparent 70%);\n border-top-color: color-mix(in srgb, currentColor, transparent 40%);\n border-bottom-color: color-mix(in srgb, currentColor, transparent 40%);\n\n animation: loaderRotate 3s infinite linear;\n transition-property: opacity, scale;\n transition-duration: 0.4s;\n transition-timing-function: ease-in-out;\n\n @starting-style {\n opacity: 0;\n scale: 0.8;\n }\n}\n\n.circle:before {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n\n border: inherit;\n border-radius: inherit;\n corner-shape: inherit;\n filter: blur(1px);\n\n rotate: 135deg;\n animation: loaderRotate 3s infinite ease-in-out;\n}\n.circle:after {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n\n border: inherit;\n border-radius: inherit;\n corner-shape: inherit;\n filter: blur(1px);\n\n rotate: 90deg;\n animation: loaderRotate 4s infinite ease-in-out;\n}\n\n@keyframes loaderRotate {\n from {\n transform: rotate(0);\n }\n to {\n transform: rotate(360deg);\n }\n}\n", "import { Logo3dverseRocket } from \"../Logo3dverse\";\nimport styles from \"./Spinner.module.css\";\n\n//------------------------------------------------------------------------------\nexport const Spinner = () => {\n return (\n <div className={styles.spinnerLogo}>\n <Logo3dverseRocket />\n <span className={styles.circle} />\n </div>\n );\n};\n", "import { assets } from \"@3dverse/design-tokens\";\nimport { Icon } from \"../ui/icon\";\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport const AssetIcon = ({\n assetId,\n variant,\n weight = \"light\",\n className = \"\",\n}: {\n assetId: keyof typeof assets;\n variant?: \"file\";\n weight?: \"solid\" | \"light\" | \"regular\";\n className?: string;\n}) => {\n const { color, fontAwesome } = assets[assetId];\n\n const _className =\n variant === \"file\"\n ? `\n fa-fw\n relative inline-block aspect-[1/1.15] px-[.9em] pt-[.3em] inline-flex justify-center items-center rounded-sm rounded-tr-[20%] [corner-top-right-shape:bevel] overflow-hidden\n bg-radial-[at_50%_65%] from-(--asset-color)/30 via-(--asset-color)/15 to-(--asset-color)/25 to-90%\n border border-(--asset-color)/15\n after:content-[''] after:absolute after:top-0 after:right-0 after:w-[20%] after:h-[20%] after:bg-(--asset-color) after:opacity-50\n ${className}\n `\n : className;\n\n if (!fontAwesome) {\n return <>{assetId}</>;\n }\n\n if (assetId === \"scene\") {\n return (\n <AssetScene\n variant={variant}\n className={_className}\n style={{ color: color, \"--asset-color\": color } as React.CSSProperties}\n />\n );\n }\n\n return (\n <Icon\n className={cn(\n fontAwesome,\n weight === \"solid\" ? \"fas\" : weight === \"regular\" ? \"far\" : \"fal\",\n \"text-(--asset-color)\",\n _className,\n )}\n style={{ \"--asset-color\": color } as React.CSSProperties}\n />\n );\n};\n\n//------------------------------------------------------------------------------\nexport const AssetScene = ({\n variant,\n className = \"\",\n style,\n}: {\n variant?: \"file\";\n className?: string;\n style?: React.CSSProperties;\n}) => {\n const _className = variant === \"file\" ? `w-[1em] px-[.4em]! h-[calc(1em*2.1)]` : \"w-[1em] h-[1em]\";\n return (\n <svg\n viewBox=\"0 0 16 16\"\n className={`inline-block self-center align-middle box-content ${_className} ${className}`}\n fill=\"currentColor\"\n style={style}\n aria-hidden=\"true\"\n focusable=\"false\"\n role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8 16C12.4183 16 16 12.4183 16 8C16 3.58172 12.4183 0 8 0C3.58172 0 0 3.58172 0 8C0 12.4183 3.58172 16 8 16ZM7.89258 3.68555C7.96094 3.66016 8.03711 3.66016 8.10742 3.68555L12.1387 5.16406L8 6.78906L3.86133 5.16211L7.89258 3.68555ZM12.1699 10.8262L8.3125 12.2402V12.2383V7.33594L12.375 5.74023V10.5332C12.375 10.6641 12.293 10.7812 12.1699 10.8262ZM8.32227 3.09766C8.11523 3.02148 7.88672 3.02148 7.67773 3.09766L3.61523 4.58789C3.24609 4.72461 3 5.07617 3 5.46875V10.5332C3 10.9258 3.24609 11.2773 3.61523 11.4121L7.67773 12.9023C7.88477 12.9785 8.11328 12.9785 8.32227 12.9023L12.3848 11.4141C12.7539 11.2773 13 10.9258 13 10.5332V5.46875C13 5.07422 12.7539 4.72266 12.3848 4.58789L8.32227 3.09766Z\"\n />\n </svg>\n );\n};\n", "//------------------------------------------------------------------------------\nimport type { CSSProperties } from \"react\";\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport interface IconProps {\n variant?: \"shadowCast\";\n // Draws a diagonal strike over the glyph (design-system `crossed`).\n crossed?: boolean;\n // The side of a Button or Badge label the icon sits on, which tightens the padding on that side.\n \"data-icon\"?: \"inline-start\" | \"inline-end\";\n // Either a full Font Awesome class string (e.g. \"fal fa-cog\") ...\n className?: string;\n style?: CSSProperties;\n}\n\n//------------------------------------------------------------------------------\n// Renders a Font Awesome `<i>`. FontAwesome Pro CSS is loaded globally.\n// When `crossed`, the strike is drawn by a wrapper span's `after:` pseudo-element\n// because duotone icons already use the <i>'s ::before and ::after pseudo-elements\n// for their two glyph layers.\nconst CROSSED_CLASS_NAME =\n \"relative inline-flex items-center justify-center \" +\n \"after:content-[''] after:absolute after:left-1/2 after:top-1/2 after:w-[125%] after:h-0.5 after:rounded-[1px] \" +\n \"after:bg-accent after:-translate-x-1/2 after:-translate-y-1/2 after:-rotate-45 after:origin-center after:pointer-events-none\";\n\n//------------------------------------------------------------------------------\nexport function Icon({ variant, crossed, className, style, \"data-icon\": dataIcon }: IconProps) {\n if (variant === \"shadowCast\") {\n return (\n <div role=\"img\" className=\"relative text-tertiary\" style={style} data-icon={dataIcon}>\n <Icon className={cn(\"relative z-10\", className)} />\n <Icon\n className={cn(\n \"absolute top-0 left-0 translate-x-[40%] translate-y-[15%] scale-94 text-underground/80\",\n className,\n )}\n style={{\n filter: \"drop-shadow(3px 6px 30px color-mix(in oklab, var(--color-content-tertiary) 80%, transparent))\",\n }}\n />\n </div>\n );\n }\n //--------------------------------------------------------------------------\n if (crossed) {\n return (\n <span className={CROSSED_CLASS_NAME} style={style} data-icon={dataIcon} aria-hidden>\n <i data-slot=\"icon\" className={className} />\n </span>\n );\n }\n\n //--------------------------------------------------------------------------\n return <i data-slot=\"icon\" data-icon={dataIcon} className={className} style={style} aria-hidden />;\n}\n", "//------------------------------------------------------------------------------\nexport const IconAssetScene = ({ size, className }: { size?: string; className?: string }) => {\n //--------------------------------------------------------------------------\n const _size = size ? `fa-${size}` : undefined;\n\n //--------------------------------------------------------------------------\n return (\n <svg\n viewBox=\"0 0 16 16\"\n height=\"1em\"\n className={`svg-inline--fa ${_size ?? \"\"} ${className ?? \"\"}`}\n fill=\"currentColor\"\n color=\"var(--asset-color-scene)\"\n aria-hidden=\"true\"\n focusable=\"false\"\n role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8 16C12.4183 16 16 12.4183 16 8C16 3.58172 12.4183 0 8 0C3.58172 0 0 3.58172 0 8C0 12.4183 3.58172 16 8 16ZM7.89258 3.68555C7.96094 3.66016 8.03711 3.66016 8.10742 3.68555L12.1387 5.16406L8 6.78906L3.86133 5.16211L7.89258 3.68555ZM12.1699 10.8262L8.3125 12.2402V12.2383V7.33594L12.375 5.74023V10.5332C12.375 10.6641 12.293 10.7812 12.1699 10.8262ZM8.32227 3.09766C8.11523 3.02148 7.88672 3.02148 7.67773 3.09766L3.61523 4.58789C3.24609 4.72461 3 5.07617 3 5.46875V10.5332C3 10.9258 3.24609 11.2773 3.61523 11.4121L7.67773 12.9023C7.88477 12.9785 8.11328 12.9785 8.32227 12.9023L12.3848 11.4141C12.7539 11.2773 13 10.9258 13 10.5332V5.46875C13 5.07422 12.7539 4.72266 12.3848 4.58789L8.32227 3.09766Z\"\n />\n </svg>\n );\n};\n", "//------------------------------------------------------------------------------\nimport type { ComponentProps } from \"react\";\nimport { Accordion as AccordionPrimitive } from \"@base-ui/react/accordion\";\n\n//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nfunction Accordion({ ...props }: AccordionPrimitive.Root.Props) {\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />;\n}\n\n//------------------------------------------------------------------------------\nfunction AccordionItem({ className, ...props }: AccordionPrimitive.Item.Props) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn(\"group/accordion-item\", className)}\n {...props}\n />\n );\n}\n\n//------------------------------------------------------------------------------\nfunction AccordionTrigger({ className, children, ...props }: AccordionPrimitive.Trigger.Props) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n \"flex flex-1 items-center justify-between gap-3 py-2 text-left text-sm outline-0 transition-colors cursor-pointer\",\n \"text-secondary hover:text-primary\",\n \"focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n {children}\n {/* <Icon className=\"fal fa-chevron-right text-3xs text-tertiary shrink-0 transition-transform duration-200 group-data-open/accordion-item:rotate-90\" /> */}\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n}\n\n//------------------------------------------------------------------------------\nfunction AccordionContent({ className, children, ...props }: AccordionPrimitive.Panel.Props) {\n return (\n <AccordionPrimitive.Panel\n data-slot=\"accordion-content\"\n className={cn(\n \"h-(--accordion-panel-height) overflow-hidden text-sm transition-[height] duration-200 ease-out\",\n \"data-starting-style:h-0 data-ending-style:h-0\",\n )}\n {...props}\n >\n <div className={cn(\"pb-3\", className)}>{children}</div>\n </AccordionPrimitive.Panel>\n );\n}\n\n//------------------------------------------------------------------------------\ntype AccordionProps = ComponentProps<typeof Accordion>;\ntype AccordionItemProps = ComponentProps<typeof AccordionItem>;\ntype AccordionTriggerProps = ComponentProps<typeof AccordionTrigger>;\ntype AccordionContentProps = ComponentProps<typeof AccordionContent>;\n\n//------------------------------------------------------------------------------\nexport {\n Accordion,\n AccordionItem,\n AccordionTrigger,\n AccordionContent,\n type AccordionProps,\n type AccordionItemProps,\n type AccordionTriggerProps,\n type AccordionContentProps,\n};\n", "import * as React from \"react\";\nimport { Drawer as DrawerPrimitive } from \"@base-ui/react/drawer\";\n\nimport { cn } from \"@/utils/css\";\nimport { Button } from \"./button\";\nimport { Icon } from \"./icon\";\n\n//------------------------------------------------------------------------------\nfunction BottomSheet({\n swipeDirection = \"down\",\n closeOnBlur = true,\n ...props\n}: Omit<DrawerPrimitive.Root.Props, \"disablePointerDismissal\"> & {\n /**\n * Whether the sheet closes when it loses focus (outside press or focus moving outside it).\n * @default true\n */\n closeOnBlur?: boolean;\n}) {\n return (\n <DrawerPrimitive.Root\n data-slot=\"bottom-sheet\"\n swipeDirection={swipeDirection}\n disablePointerDismissal={!closeOnBlur}\n {...props}\n />\n );\n}\n\nfunction BottomSheetTrigger({ ...props }: DrawerPrimitive.Trigger.Props) {\n return <DrawerPrimitive.Trigger data-slot=\"bottom-sheet-trigger\" {...props} />;\n}\n\nfunction BottomSheetPortal({ ...props }: DrawerPrimitive.Portal.Props) {\n return <DrawerPrimitive.Portal data-slot=\"bottom-sheet-portal\" {...props} />;\n}\n\nfunction BottomSheetClose({ ...props }: DrawerPrimitive.Close.Props) {\n return <DrawerPrimitive.Close data-slot=\"bottom-sheet-close\" {...props} />;\n}\n\nfunction BottomSheetOverlay({ className, ...props }: DrawerPrimitive.Backdrop.Props) {\n return (\n <DrawerPrimitive.Backdrop\n data-slot=\"bottom-sheet-overlay\"\n className={cn(\n \"fixed inset-0 isolate z-10100 bg-ground/40 backdrop-blur-xs transition-opacity duration-100 ease-out data-swiping:transition-none\",\n \"data-open:animate-in data-open:fade-in-0 data-open:duration-100\",\n // Swipe-to-dismiss animates the popup itself via JS, so skip the generic\n // keyframe exit here and just let the inline opacity (bound to the live\n // swipe progress below) carry the fade through \u2014 running both at once is\n // what caused the opacity to jump/flicker back to full before fading out.\n // fill-mode-forwards holds the animated opacity at 0 once the exit keyframe\n // ends instead of snapping back to the inline style's base opacity (1) for\n // the frame before the node actually unmounts.\n \"data-closed:not-data-swipe-dismiss:animate-out data-closed:not-data-swipe-dismiss:fade-out-0 data-closed:not-data-swipe-dismiss:duration-100 data-closed:not-data-swipe-dismiss:fill-mode-forwards\",\n className,\n )}\n {...props}\n style={{ opacity: \"calc(1 - var(--drawer-swipe-progress, 0))\" }}\n />\n );\n}\n\nfunction BottomSheetViewport({ className, ...props }: DrawerPrimitive.Viewport.Props) {\n return (\n <DrawerPrimitive.Viewport\n data-slot=\"bottom-sheet-viewport\"\n className={cn(\"fixed inset-x-0 bottom-0 z-10110 flex justify-center outline-0\", className)}\n {...props}\n />\n );\n}\n\nfunction BottomSheetContent({\n className,\n children,\n showHandle = true,\n showCloseButton = false,\n showOverlay = true,\n ...props\n}: DrawerPrimitive.Popup.Props & {\n showHandle?: boolean;\n showCloseButton?: boolean;\n showOverlay?: boolean;\n}) {\n return (\n <BottomSheetPortal>\n {showOverlay && <BottomSheetOverlay />}\n <BottomSheetViewport>\n <DrawerPrimitive.Popup\n data-slot=\"bottom-sheet-content\"\n className={cn(\n \"relative flex w-full flex-col rounded-t-2xl bg-ground/80 backdrop-blur-lg p-4 pt-2 pb-[calc(1rem+env(safe-area-inset-bottom))] text-sm text-popover-foreground ring-1 ring-foreground/10 outline-0\",\n // While dragging, the swipe offset lives in an inline transform that is removed\n // on release; only --drawer-swipe-movement-y keeps it. Binding the resting\n // transform to that variable makes the exit keyframe start from where the\n // sheet was released instead of jumping back to its fully open position.\n \"transform-[translateY(var(--drawer-swipe-movement-y,0px))]\",\n // fill-mode-forwards keeps the popup translated off-screen once the exit\n // keyframe ends instead of snapping back to its resting position (fully\n // visible) for a frame before the node actually unmounts.\n \"data-open:animate-in data-open:slide-in-from-bottom data-open:duration-200 data-closed:animate-out data-closed:slide-out-to-bottom data-closed:duration-150 data-closed:fill-mode-forwards\",\n className,\n )}\n {...props}\n >\n {showHandle && (\n <div\n data-slot=\"bottom-sheet-handle\"\n className=\"self-center h-px w-8 -translate-y-1 rounded-full bg-(--color-content-secondary)/50 touch-none select-none\"\n aria-hidden\n />\n )}\n {children}\n {showCloseButton && (\n <DrawerPrimitive.Close\n data-slot=\"bottom-sheet-close\"\n render={<Button variant=\"ghost\" className=\"absolute top-2 right-2\" size=\"icon-sm\" />}\n >\n <Icon className=\"fas fa-xmark\" />\n <span className=\"sr-only\">Close</span>\n </DrawerPrimitive.Close>\n )}\n {/* Out-of-flow: extends the sheet's background past its own bottom edge without\n growing the popup's layout box (which would otherwise enlarge the viewport's\n hit-testable area over the canvas). Only revealed by swiping/rubber-banding up. */}\n <div\n aria-hidden\n className=\"pointer-events-none absolute inset-x-0 top-full h-[30vh] bg-ground/50 backdrop-blur-lg\"\n />\n </DrawerPrimitive.Popup>\n </BottomSheetViewport>\n </BottomSheetPortal>\n );\n}\n\nfunction BottomSheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"bottom-sheet-header\" className={cn(\"flex flex-col gap-2\", className)} {...props} />;\n}\n\nfunction BottomSheetFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean;\n}) {\n return (\n <div\n data-slot=\"bottom-sheet-footer\"\n className={cn(\n \"-mx-4 -mb-4 flex flex-col-reverse sm:flex-row gap-2 rounded-b-xl border-t border-tertiary bg-muted/50 p-4 pb-[calc(1rem+env(safe-area-inset-bottom))] sm:justify-end\",\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DrawerPrimitive.Close render={<Button variant=\"outline\" />}>Close</DrawerPrimitive.Close>\n )}\n </div>\n );\n}\n\nfunction BottomSheetTitle({ className, ...props }: DrawerPrimitive.Title.Props) {\n return (\n <DrawerPrimitive.Title\n data-slot=\"bottom-sheet-title\"\n className={cn(\n \"font-heading uppercase text-4xs leading-none font-medium text-tertiary pl-3 mt-1\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction BottomSheetDescription({ className, ...props }: DrawerPrimitive.Description.Props) {\n return (\n <DrawerPrimitive.Description\n data-slot=\"bottom-sheet-description\"\n className={cn(\n \"text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground\",\n className,\n )}\n {...props}\n />\n );\n}\n\n//------------------------------------------------------------------------------\ntype BottomSheetProps = React.ComponentProps<typeof BottomSheet>;\ntype BottomSheetCloseProps = React.ComponentProps<typeof BottomSheetClose>;\ntype BottomSheetTriggerProps = React.ComponentProps<typeof BottomSheetTrigger>;\ntype BottomSheetContentProps = React.ComponentProps<typeof BottomSheetContent>;\ntype BottomSheetHeaderProps = React.ComponentProps<typeof BottomSheetHeader>;\ntype BottomSheetFooterProps = React.ComponentProps<typeof BottomSheetFooter>;\ntype BottomSheetTitleProps = React.ComponentProps<typeof BottomSheetTitle>;\ntype BottomSheetDescriptionProps = React.ComponentProps<typeof BottomSheetDescription>;\n\n//------------------------------------------------------------------------------\nexport {\n BottomSheet,\n BottomSheetClose,\n BottomSheetContent,\n BottomSheetDescription,\n BottomSheetFooter,\n BottomSheetHeader,\n BottomSheetOverlay,\n BottomSheetPortal,\n BottomSheetTitle,\n BottomSheetTrigger,\n BottomSheetViewport,\n type BottomSheetProps,\n type BottomSheetCloseProps,\n type BottomSheetTriggerProps,\n type BottomSheetContentProps,\n type BottomSheetHeaderProps,\n type BottomSheetFooterProps,\n type BottomSheetTitleProps,\n type BottomSheetDescriptionProps,\n};\n", "//------------------------------------------------------------------------------\nimport type { ComponentPropsWithoutRef, ElementType } from \"react\";\nimport { Button as ButtonPrimitive } from \"@base-ui/react/button\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\n//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nconst buttonVariants = cva(\n `\n group/button inline-flex shrink-0 items-center justify-center\n text-sm font-normal whitespace-nowrap select-none\n bg-clip-padding outline-0 transition-all\n disabled:pointer-events-none disabled:opacity-50\n aria-invalid:border-negative aria-invalid:ring-3 aria-invalid:ring-negative/20 dark:aria-invalid:border-negative/50 dark:aria-invalid:ring-negative/40\n [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 cursor-pointer\n \n `,\n {\n variants: {\n variant: {\n default: \"bg-primary text-(--color-bg-ground) hover:bg-primary/90\",\n accent: \"bg-accent text-black hover:text-black hover:bg-accent-400\",\n outline:\n \"text-primary border border-(--color-content-primary)/50 hover:border-(--color-content-primary)/80\",\n \"outline-accent\": \"text-accent border border-accent/50 hover:border-accent/80\",\n secondary: \"bg-secondary/10 text-secondary hover:bg-secondary/20\",\n ghost: \"text-secondary hover:text-primary focus:text-primary active:text-primary data-[active=true]:text-primary\",\n \"ghost-shadow\": cn(\n \"relative text-neutral-0/80 [text-shadow:0_0_1px_black/40]\",\n \"before:content-[''] before:absolute before:inset-0 before:scale-150 before:bg-neutral-1000 before:opacity-50 before:rounded-full before:blur-lg before:z-[-1]\",\n \"data-[active=true]:text-primary data-[active=true]:z-1 data-[active=true]:before:opacity-100\",\n ),\n destructive: cn(\n \"bg-negative/10 text-negative hover:bg-negative/20\",\n \"focus-visible:border-negative/40 focus-visible:ring-negative/20 dark:bg-negative/20 dark:hover:bg-negative/30 dark:focus-visible:ring-negative/40\",\n ),\n link: \"text-primary underline-offset-4 hover:underline\",\n overlay: cn(\n \"relative text-primary hover:text-primary/90 focus:text-primary/90 active:text-primary\",\n \"before:absolute before:inset-y-0.5 before:inset-x-0.5 before:rounded-full before:z-[-1]\",\n \"before:bg-neutral-1000/25 before:opacity-0 before:transition-opacity before:duration-500 before:ease-out\",\n \"data-[active=true]:z-1 data-[active=true]:before:opacity-100\",\n ),\n \"overlay-outline\": cn(\n \"border border-primary/40\",\n \"relative text-primary hover:text-primary/90 focus:text-primary/90 active:text-primary\",\n \"before:absolute before:inset-y-0.5 before:inset-x-0.5 before:rounded-[inherit] before:corner-shape-[inherit] before:z-[-1]\",\n \"before:bg-neutral-1000/25 before:opacity-0 before:transition-opacity before:duration-500 before:ease-out\",\n \"data-[active=true]:z-1 data-[active=true]:before:opacity-100\",\n ),\n },\n size: {\n \"3xs\": \"min-h-4 gap-1 px-1 text-4xs rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n \"2xs\": \"min-h-5 gap-1 px-1 text-3xs rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n xs: \"min-h-6 gap-1 px-2 text-2xs rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"min-h-7 gap-1 px-2.5 text-xs rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5\",\n md: \"min-h-8 gap-1.5 px-3 text-sm **:data-[slot=icon]:text-xs has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n lg: \"min-h-9 text-md gap-1.5 px-3 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n xl: \"min-h-12 text-lg gap-1.5 px-2.5 font-medium tracking-wide has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n \"icon-xs\":\n \"text-3xs size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg\",\n \"icon-sm\": \"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg\",\n \"icon-md\": \"text-base size-8\",\n \"icon-lg\": \"text-xl size-9\",\n \"icon-xl\": \"text-xl size-10\",\n },\n round: {\n true: \"rounded-full\",\n false: \"rounded-xl [corner-shape:squircle]\",\n },\n active: {\n true: \"\",\n false: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n },\n);\n\n//------------------------------------------------------------------------------\ntype ButtonOwnProps = VariantProps<typeof buttonVariants> & {\n active?: boolean;\n};\n\ntype ButtonProps<T extends ElementType = \"button\"> = ButtonOwnProps & {\n as?: T;\n} & Omit<T extends \"button\" ? ButtonPrimitive.Props : ComponentPropsWithoutRef<T>, keyof ButtonOwnProps | \"as\">;\n\n//------------------------------------------------------------------------------\nfunction Button<T extends ElementType = \"button\">({\n as,\n className,\n variant = \"default\",\n size = \"md\",\n round = false,\n active = false,\n children,\n ...props\n}: ButtonProps<T>) {\n //--------------------------------------------------------------------------\n const As = (!as || as === \"button\" ? ButtonPrimitive : as) as ElementType;\n\n //--------------------------------------------------------------------------\n return (\n <As\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, round, active }), className)}\n data-active={active}\n {...props}\n >\n {children}\n </As>\n );\n}\n\n//------------------------------------------------------------------------------\nexport { Button, buttonVariants, type ButtonProps };\n", "//------------------------------------------------------------------------------\nimport type { ComponentPropsWithoutRef, ElementType } from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\n//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\n// Variants share Button's colors, and sizes its heights (a \"xs\" badge is as tall as a \"xs\" button).\n// Hover styles only apply when the badge is rendered as a link (`as=\"a\"`).\n// An icon marked with data-icon=\"inline-start\" or \"inline-end\" tightens the padding on its side.\nconst badgeVariants = cva(\n [\n \"group/badge inline-flex shrink-0 items-center justify-center w-fit overflow-hidden\",\n \"font-medium whitespace-nowrap rounded-full border border-transparent outline-0 transition-all\",\n \"focus-visible:ring-[3px] focus-visible:ring-accent/50\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0\",\n ],\n {\n variants: {\n variant: {\n default: \"bg-primary text-(--color-bg-ground) [a]:hover:bg-primary/90\",\n accent: \"bg-accent text-black [a]:hover:bg-accent-400\",\n secondary: \"bg-secondary/10 text-secondary [a]:hover:bg-secondary/20\",\n destructive: cn(\n \"bg-negative/10 text-negative [a]:hover:bg-negative/20\",\n \"dark:bg-negative/20 dark:[a]:hover:bg-negative/30\",\n ),\n outline: \"border-primary text-primary [a]:hover:bg-secondary/10\",\n ghost: \"text-secondary [a]:hover:bg-secondary/10 [a]:hover:text-primary\",\n link: \"text-primary underline-offset-4 [a]:hover:underline\",\n },\n size: {\n \"3xs\": cn(\n \"h-4 gap-0.5 px-1.5 text-5xs [&_svg:not([class*='size-'])]:size-2.5\",\n \"has-data-[icon=inline-start]:pl-1 has-data-[icon=inline-end]:pr-1\",\n ),\n \"2xs\": cn(\n \"h-5 gap-1 px-2 text-4xs [&_svg:not([class*='size-'])]:size-3\",\n \"has-data-[icon=inline-start]:pl-1.5 has-data-[icon=inline-end]:pr-1.5\",\n ),\n xs: cn(\n \"h-6 gap-1 px-2.5 text-3xs [&_svg:not([class*='size-'])]:size-3\",\n \"has-data-[icon=inline-start]:pl-2 has-data-[icon=inline-end]:pr-2\",\n ),\n sm: cn(\n \"h-7 gap-1.5 px-3 text-2xs [&_svg:not([class*='size-'])]:size-3.5\",\n \"has-data-[icon=inline-start]:pl-2.5 has-data-[icon=inline-end]:pr-2.5\",\n ),\n md: cn(\n \"h-8 gap-1.5 px-3.5 text-xs [&_svg:not([class*='size-'])]:size-4\",\n \"has-data-[icon=inline-start]:pl-3 has-data-[icon=inline-end]:pr-3\",\n ),\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"2xs\",\n },\n },\n);\n\n//------------------------------------------------------------------------------\ntype BadgeOwnProps = VariantProps<typeof badgeVariants>;\n\ntype BadgeProps<T extends ElementType = \"span\"> = BadgeOwnProps & {\n as?: T;\n} & Omit<ComponentPropsWithoutRef<T>, keyof BadgeOwnProps | \"as\">;\n\n//------------------------------------------------------------------------------\n/**\n * A short label for a status, a count or a category. Renders a `span`: pass `as=\"a\"` (or any element or\n * component) to make it a link, which also turns on its variant's hover style.\n */\nfunction Badge<T extends ElementType = \"span\">({\n as,\n className,\n variant = \"default\",\n size = \"2xs\",\n ...props\n}: BadgeProps<T>) {\n //--------------------------------------------------------------------------\n const As = (as ?? \"span\") as ElementType;\n\n //--------------------------------------------------------------------------\n return (\n <As\n data-slot=\"badge\"\n data-variant={variant}\n data-size={size}\n className={cn(badgeVariants({ variant, size }), className)}\n {...props}\n />\n );\n}\n\n//------------------------------------------------------------------------------\nexport { Badge, badgeVariants, type BadgeProps };\n", "//------------------------------------------------------------------------------\nimport type { ElementType, ReactNode } from \"react\";\n\n//------------------------------------------------------------------------------\nimport { Button, type ButtonProps } from \"./button\";\nimport { Icon } from \"./icon\";\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\ntype ButtonTileProps<T extends ElementType = \"button\"> = ButtonProps<T> & {\n orientation?: \"vertical\" | \"inline\";\n // Font Awesome classes of the icon, crossed out while the tile isn't enabled.\n icon?: string;\n rightComponent?: ReactNode;\n isEnabled?: boolean;\n className?: string;\n children?: ReactNode;\n};\n\n//------------------------------------------------------------------------------\nfunction ButtonTile<T extends ElementType = \"button\">({\n as,\n className,\n variant = \"ghost\",\n size = \"md\",\n orientation = \"vertical\",\n round = false,\n icon,\n rightComponent,\n isEnabled = true,\n children,\n ...props\n}: ButtonTileProps<T>) {\n //--------------------------------------------------------------------------\n return (\n <Button<ElementType>\n {...props}\n as={as}\n variant={variant}\n size={size}\n round={round}\n className={cn(className, isEnabled ? \"\" : \"opacity-75\")}\n >\n <div\n className={cn(\n \"grow flex py-2\",\n orientation === \"inline\" ? \"items-center gap-2\" : \"gap-1.5 flex-col justify-between items-start\",\n )}\n >\n {icon && <Icon className={icon} crossed={!isEnabled} />}\n {children}\n </div>\n {rightComponent}\n </Button>\n );\n}\n\n//------------------------------------------------------------------------------\nexport { ButtonTile, type ButtonTileProps };\n", "//------------------------------------------------------------------------------\nimport type { ComponentProps } from \"react\";\nimport { Icon } from \"./icon\";\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport const DataItem = ({\n children,\n size = \"sm\",\n className,\n}: {\n children: React.ReactNode;\n size?: \"sm\" | \"2xs\" | \"3xs\";\n className?: string;\n}) => {\n //--------------------------------------------------------------------------\n const textSize = size === \"2xs\" ? \"text-2xs\" : size === \"3xs\" ? \"text-3xs\" : \"text-sm\";\n // Tighter sizes trim the label padding, and the icon follows so it stays aligned with the first line.\n const dataItemLabelPaddingY = [\"3xs\", \"2xs\"].includes(size) && \"**:data-[slot=data-item-label]:py-1.5\";\n\n //--------------------------------------------------------------------------\n return (\n <fieldset\n className={cn(\n \"flex gap-2 items-baseline justify-center w-full px-2.5\",\n textSize,\n dataItemLabelPaddingY,\n className,\n )}\n >\n {children}\n </fieldset>\n );\n};\n\n//------------------------------------------------------------------------------\nexport const DataItemLabel = ({\n children,\n icon,\n className,\n}: {\n children: React.ReactNode;\n icon?: string;\n className?: string;\n}) => {\n return (\n <div\n data-slot=\"data-item-label\"\n className={cn(\"relative grow flex py-2 items-baseline gap-3 text-balance\", className)}\n >\n {icon && <Icon className={cn(\"text-[88%] text-tertiary -translate-y-px\", icon)} />}\n {children}\n </div>\n );\n};\n\n//------------------------------------------------------------------------------\nexport const DataItemTitle = ({ children, className }: { children: React.ReactNode; className?: string }) => {\n return <p className={className}>{children}</p>;\n};\n\n//------------------------------------------------------------------------------\nexport const DataItemDescription = ({ children, className }: { children: React.ReactNode; className?: string }) => {\n return <p className={cn(\"my-px text-[88%] leading-tight text-tertiary\", className)}>{children}</p>;\n};\n\n//------------------------------------------------------------------------------\nexport const DataItemValue = ({ children, className }: { children: React.ReactNode; className?: string }) => {\n return <div className={cn(\"text-primary\", className)}>{children}</div>;\n};\n\n//------------------------------------------------------------------------------\nexport type DataItemProps = ComponentProps<typeof DataItem>;\nexport type DataItemLabelProps = ComponentProps<typeof DataItemLabel>;\nexport type DataItemTitleProps = ComponentProps<typeof DataItemTitle>;\nexport type DataItemDescriptionProps = ComponentProps<typeof DataItemDescription>;\nexport type DataItemValueProps = ComponentProps<typeof DataItemValue>;\n", "import * as React from \"react\";\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\";\n\nimport { cn } from \"@/utils/css\";\nimport { Button } from \"./button\";\nimport { Icon } from \"./icon\";\n\n//------------------------------------------------------------------------------\nfunction Dialog({ ...props }: DialogPrimitive.Root.Props) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\nfunction DialogTrigger({ ...props }: DialogPrimitive.Trigger.Props) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\nfunction DialogPortal({ ...props }: DialogPrimitive.Portal.Props) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n}\n\nfunction DialogClose({ ...props }: DialogPrimitive.Close.Props) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n}\n\nfunction DialogOverlay({ className, ...props }: DialogPrimitive.Backdrop.Props) {\n return (\n <DialogPrimitive.Backdrop\n data-slot=\"dialog-overlay\"\n className={cn(\n \"fixed inset-0 isolate z-10100 bg-ground/80 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = false,\n ...props\n}: DialogPrimitive.Popup.Props & {\n showCloseButton?: boolean;\n}) {\n return (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Popup\n data-slot=\"dialog-content\"\n className={cn(\n \"fixed top-1/2 left-1/2 z-10110 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-0 sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n render={<Button variant=\"ghost\" className=\"absolute top-2 right-2\" size=\"icon-sm\" />}\n >\n <Icon className=\"fal fa-xmark\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Popup>\n </DialogPortal>\n );\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"dialog-header\" className={cn(\"flex flex-col gap-2\", className)} {...props} />;\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean;\n}) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:justify-end\",\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close render={<Button variant=\"outline\" />}>Close</DialogPrimitive.Close>\n )}\n </div>\n );\n}\n\nfunction DialogTitle({ className, ...props }: DialogPrimitive.Title.Props) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"font-heading text-base leading-none font-medium\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogDescription({ className, ...props }: DialogPrimitive.Description.Props) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\n \"text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground\",\n className,\n )}\n {...props}\n />\n );\n}\n\n//------------------------------------------------------------------------------\ntype DialogProps = React.ComponentProps<typeof Dialog>;\ntype DialogTriggerProps = React.ComponentProps<typeof DialogTrigger>;\ntype DialogContentProps = React.ComponentProps<typeof DialogContent>;\ntype DialogHeaderProps = React.ComponentProps<typeof DialogHeader>;\ntype DialogFooterProps = React.ComponentProps<typeof DialogFooter>;\ntype DialogTitleProps = React.ComponentProps<typeof DialogTitle>;\ntype DialogDescriptionProps = React.ComponentProps<typeof DialogDescription>;\n\n//------------------------------------------------------------------------------\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n type DialogProps,\n type DialogTriggerProps,\n type DialogContentProps,\n type DialogHeaderProps,\n type DialogFooterProps,\n type DialogTitleProps,\n type DialogDescriptionProps,\n};\n", "//------------------------------------------------------------------------------\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport const DotPing = ({ className, isActive }: { className?: string; isActive?: boolean }) => {\n return (\n <span\n className={cn(\n \"relative block w-2 h-2 rounded-full bg-current z-1 pointer-events-none\",\n \"before:content-[''] before:block before:w-4 before:h-4 before:absolute before:-inset-1 before:rounded-full before:bg-inherit before:opacity-10\",\n isActive ? \"text-positive before:animate-pulse\" : \"text-primary/40 before:animate-none\",\n className,\n )}\n />\n );\n};\n\n//------------------------------------------------------------------------------\nexport type DotPingProps = ComponentProps<typeof DotPing>;\n", "//------------------------------------------------------------------------------\nimport type { ComponentProps } from \"react\";\nimport { Icon } from \"./icon\";\n\n//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport const EmptyState = ({\n icon,\n title,\n description,\n variant = \"default\",\n className,\n}: {\n icon: string;\n title: string;\n description: string;\n variant?: \"default\" | \"glow\";\n className?: string;\n}) => {\n return (\n <div\n className={cn(\n \"flex flex-col items-center gap-4 text-center px-3 py-7 text-balance\",\n variant === \"glow\" && \"glow-effect\",\n className,\n )}\n >\n {icon && (\n <div className=\"flex shrink-0 items-center justify-center\">\n <Icon\n className={cn(\n icon,\n \"text-2xl text-tertiary\",\n variant === \"glow\" && \"drop-shadow-[0_12px_6px_var(--color-bg-underground)]\",\n )}\n />\n </div>\n )}\n <div className=\"flex flex-col gap-0.5\">\n {title && <span className=\"text-md\">{title}</span>}\n {description && <span className=\"mt-px text-3xs text-tertiary font-normal\">{description}</span>}\n </div>\n </div>\n );\n};\n\n//------------------------------------------------------------------------------\nexport type EmptyStateProps = ComponentProps<typeof EmptyState>;\n", "//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport interface IslandPanelProps {\n children: React.ReactNode;\n className?: string;\n shadow?: \"lg\" | \"none\";\n as?: React.ElementType;\n}\n\n//------------------------------------------------------------------------------\nexport const IslandPanel = ({ children, shadow = \"none\", className, as, ...rest }: IslandPanelProps) => {\n const Component = as || \"div\";\n return (\n <Component\n className={cn(\n \"flex items-center bg-ground/50 backdrop-blur-sm border border-white/20 rounded-full [corner-shape:squircle]\",\n \"pointer-events-auto\",\n shadow === \"lg\" && \"shadow-[0_20px_15px_-12px_rgba(0,0,0,.35)]\",\n className,\n )}\n {...rest}\n >\n {children}\n </Component>\n );\n};\n", "//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport interface KbdProps {\n children: React.ReactNode;\n className?: string;\n}\n\n//------------------------------------------------------------------------------\nexport const Kbd = ({ children, className }: KbdProps) => (\n <kbd\n className={cn(\n \"inline-flex items-center justify-center min-w-4 h-4 px-1 rounded border border-current/30 text-[0.65rem] leading-none font-normal uppercase opacity-70\",\n className,\n )}\n >\n {children}\n </kbd>\n);\n", "//------------------------------------------------------------------------------\nimport type { ComponentPropsWithoutRef, ComponentProps } from \"react\";\nimport { Icon } from \"./icon\";\n\n//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport function Loader({ className, ...rest }: ComponentPropsWithoutRef<typeof Icon>) {\n return <Icon className={cn(\"fal fa-spinner size-6 animate-spin text-primary\", className)} {...rest} />;\n}\n\n//------------------------------------------------------------------------------\nexport type LoaderProps = ComponentProps<typeof Loader>;\n", "import { createContext, useContext, type ComponentProps } from \"react\";\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\n// The size is set on MenuContent: items follow Button heights (a \"sm\" item is as tall as a \"sm\" button),\n// and their icons scale with the text.\nconst menuContentVariants = cva(\n cn(\n \"origin-(--transform-origin) bg-ground/80 backdrop-blur-lg outline-0 [corner-shape:squircle]\",\n \"data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n ),\n {\n variants: {\n size: {\n \"2xs\": \"min-w-28 p-0.5 text-4xs rounded-lg\",\n xs: \"min-w-32 p-1 text-3xs rounded-lg\",\n sm: \"min-w-36 p-1 text-2xs rounded-xl\",\n md: \"min-w-40 p-1 text-xs rounded-xl\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n },\n);\n\n//------------------------------------------------------------------------------\nconst menuItemVariants = cva(\n cn(\n \"flex cursor-pointer items-center rounded-sm outline-0 select-none\",\n \"data-highlighted:bg-primary/10 data-highlighted:text-primary\",\n \"data-disabled:pointer-events-none data-disabled:opacity-50\",\n \"transition-colors duration-200 ease-in-out\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 **:data-[slot=icon]:text-[0.85em] **:data-[slot=icon]:w-[1em]\",\n ),\n {\n // Tight leading lets min-height set the height of single-line items. It comes after the text size,\n // which tailwind-merge would otherwise let override it.\n variants: {\n size: {\n \"2xs\": \"min-h-5 gap-1.5 px-1.5 py-0.5 text-3xs leading-tight\",\n xs: \"min-h-6 gap-2 px-2 py-0.5 text-2xs leading-tight\",\n sm: \"min-h-7 gap-2.5 px-2 py-1 text-xs leading-tight\",\n md: \"min-h-8 gap-3 px-2 py-1 text-sm leading-tight\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n },\n);\n\n//------------------------------------------------------------------------------\nconst menuGroupLabelVariants = cva(\"text-tertiary\", {\n variants: {\n size: {\n \"2xs\": \"px-1.5 py-1 text-5xs\",\n xs: \"px-2 py-1 text-4xs\",\n sm: \"px-2 py-1.5 text-3xs\",\n md: \"px-2.5 py-1.5 text-xs\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\n//------------------------------------------------------------------------------\n// Spans the content's padding, so it reaches both edges of the popup.\nconst menuSeparatorVariants = cva(\"h-px bg-foreground/10\", {\n variants: {\n size: {\n \"2xs\": \"-mx-0.5 my-0.5\",\n xs: \"-mx-1 my-1\",\n sm: \"-mx-1 my-1\",\n md: \"-mx-1 my-1\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\n//------------------------------------------------------------------------------\n// Hands the content's size down to the items, labels and separators rendered inside it.\nconst MenuSizeContext = createContext<VariantProps<typeof menuContentVariants>[\"size\"]>(\"md\");\n\n//------------------------------------------------------------------------------\nfunction Menu({ ...props }: MenuPrimitive.Root.Props) {\n return <MenuPrimitive.Root data-slot=\"menu\" {...props} />;\n}\n\nfunction MenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) {\n return <MenuPrimitive.Trigger data-slot=\"menu-trigger\" {...props} />;\n}\n\nfunction MenuPortal({ ...props }: MenuPrimitive.Portal.Props) {\n return <MenuPrimitive.Portal data-slot=\"menu-portal\" {...props} />;\n}\n\nfunction MenuPositioner({ className, sideOffset = 8, align = \"end\", ...props }: MenuPrimitive.Positioner.Props) {\n return (\n <MenuPrimitive.Positioner\n data-slot=\"menu-positioner\"\n sideOffset={sideOffset}\n align={align}\n className={cn(\"z-10110 outline-0\", className)}\n {...props}\n />\n );\n}\n\nfunction MenuContent({\n className,\n size = \"md\",\n children,\n ...props\n}: MenuPrimitive.Popup.Props & VariantProps<typeof menuContentVariants>) {\n return (\n <MenuPortal>\n <MenuPositioner>\n <MenuPrimitive.Popup\n data-slot=\"menu-content\"\n data-size={size}\n className={cn(menuContentVariants({ size }), className)}\n {...props}\n >\n <MenuSizeContext.Provider value={size}>{children}</MenuSizeContext.Provider>\n </MenuPrimitive.Popup>\n </MenuPositioner>\n </MenuPortal>\n );\n}\n\nfunction MenuItem({ className, ...props }: MenuPrimitive.Item.Props) {\n const size = useContext(MenuSizeContext);\n return (\n <MenuPrimitive.Item data-slot=\"menu-item\" className={cn(menuItemVariants({ size }), className)} {...props} />\n );\n}\n\nfunction MenuSeparator({ className, ...props }: MenuPrimitive.Separator.Props) {\n const size = useContext(MenuSizeContext);\n return (\n <MenuPrimitive.Separator\n data-slot=\"menu-separator\"\n className={cn(menuSeparatorVariants({ size }), className)}\n {...props}\n />\n );\n}\n\nfunction MenuGroup({ ...props }: MenuPrimitive.Group.Props) {\n return <MenuPrimitive.Group data-slot=\"menu-group\" {...props} />;\n}\n\nfunction MenuGroupLabel({ className, ...props }: MenuPrimitive.GroupLabel.Props) {\n const size = useContext(MenuSizeContext);\n return (\n <MenuPrimitive.GroupLabel\n data-slot=\"menu-group-label\"\n className={cn(menuGroupLabelVariants({ size }), className)}\n {...props}\n />\n );\n}\n\n//------------------------------------------------------------------------------\ntype MenuProps = ComponentProps<typeof Menu>;\ntype MenuTriggerProps = ComponentProps<typeof MenuTrigger>;\ntype MenuPortalProps = ComponentProps<typeof MenuPortal>;\ntype MenuPositionerProps = ComponentProps<typeof MenuPositioner>;\ntype MenuContentProps = ComponentProps<typeof MenuContent>;\ntype MenuItemProps = ComponentProps<typeof MenuItem>;\ntype MenuSeparatorProps = ComponentProps<typeof MenuSeparator>;\ntype MenuGroupProps = ComponentProps<typeof MenuGroup>;\ntype MenuGroupLabelProps = ComponentProps<typeof MenuGroupLabel>;\n\n//------------------------------------------------------------------------------\nexport {\n Menu,\n MenuTrigger,\n MenuPortal,\n MenuPositioner,\n MenuContent,\n MenuItem,\n MenuSeparator,\n MenuGroup,\n MenuGroupLabel,\n type MenuProps,\n type MenuTriggerProps,\n type MenuPortalProps,\n type MenuPositionerProps,\n type MenuContentProps,\n type MenuItemProps,\n type MenuSeparatorProps,\n type MenuGroupProps,\n type MenuGroupLabelProps,\n};\n", "//------------------------------------------------------------------------------\nimport type { CSSProperties, ReactNode } from \"react\";\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\";\n\n//------------------------------------------------------------------------------\nimport { Button } from \"./button\";\nimport { Icon } from \"./icon\";\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\n// Lightweight full-viewport modal built directly on Base UI's Dialog primitive.\n// Portalled into #app-container (see below) rather than <body> so it keeps its\n// explicit z-index context. A dark scrim is drawn by default; callers override\n// it via `backdropBg`.\nexport interface ModalProps {\n open: boolean;\n onClose?: () => void;\n closeIcon?: boolean;\n fullScreen?: boolean;\n disableBackdropClick?: boolean;\n disableEscapeKeyDown?: boolean;\n backdropBg?: string;\n className?: string;\n style?: CSSProperties;\n children?: ReactNode;\n \"aria-labelledby\"?: string;\n}\n\n//------------------------------------------------------------------------------\nexport function Modal({\n open,\n onClose,\n closeIcon,\n fullScreen,\n disableBackdropClick,\n disableEscapeKeyDown,\n backdropBg = \"var(--color-underground)\",\n className,\n style,\n children,\n ...rest\n}: ModalProps) {\n //--------------------------------------------------------------------------\n return (\n <DialogPrimitive.Root\n open={open}\n modal\n disablePointerDismissal={disableBackdropClick}\n onOpenChange={(isOpen, eventDetails) => {\n if (isOpen) {\n return;\n }\n if (disableEscapeKeyDown && eventDetails.reason === \"escape-key\") {\n return;\n }\n onClose?.();\n }}\n >\n {/* Portalled into #app-container (rather than the default <body>) so it\n stays inside that root's explicit z-index stacking context. See the\n comment on #app-container in index.html about the zIndex > 10000\n requirement. */}\n <DialogPrimitive.Portal container={document.getElementById(\"app-container\")}>\n {/* Match content's z-index: raised explicitly so `style.zIndex`\n (e.g. 10005) always wins over the HUD's 10003. */}\n <DialogPrimitive.Backdrop\n className=\"fixed inset-0\"\n style={{ background: backdropBg, opacity: 0.9, zIndex: style?.zIndex }}\n />\n <DialogPrimitive.Popup\n className={cn(\"fixed inset-0 flex items-center justify-center\", !fullScreen && \"p-4\", className)}\n style={{\n ...style,\n width: fullScreen ? \"100%\" : undefined,\n height: fullScreen ? \"100%\" : undefined,\n }}\n aria-labelledby={rest[\"aria-labelledby\"]}\n >\n {closeIcon && (\n <DialogPrimitive.Close\n render={\n <Button\n aria-label=\"Close\"\n variant=\"ghost\"\n size=\"icon-md\"\n className=\"absolute top-4 right-4\"\n />\n }\n >\n <Icon className=\"fal fa-xmark\" />\n </DialogPrimitive.Close>\n )}\n {children}\n </DialogPrimitive.Popup>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n}\n", "//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport interface PanelProps {\n startingTransiton?: boolean;\n children: React.ReactNode;\n className?: string;\n ref?: React.RefObject<HTMLDivElement>;\n}\n\nexport const Panel = ({ startingTransiton = false, children, className, ref, ...rest }: PanelProps) => {\n return (\n <aside\n ref={ref}\n data-slot=\"panel\"\n className={cn(\n \"border border-primary/50 bg-ground/80 backdrop-blur-sm shadow-[0_10px_20px_-8px_rgba(0,0,0,.6)]\",\n \"rounded-[1rem] [corner-shape:squircle]\",\n startingTransiton &&\n \"starting:opacity-0 starting:translate-y-4 starting:scale-95 transition-all duration-350 ease-in-out\",\n \"pointer-events-auto\",\n className,\n )}\n {...rest}\n >\n {children}\n </aside>\n );\n};\n\n//------------------------------------------------------------------------------\nexport interface PanelHeaderProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const PanelHeader = ({ children, className, ...rest }: PanelHeaderProps) => {\n return (\n <header className={cn(\"flex px-3 py-2\", className)} {...rest}>\n {children}\n </header>\n );\n};\n\n//------------------------------------------------------------------------------\nexport interface PanelTitleProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const PanelTitle = ({ children, className, ...rest }: PanelTitleProps) => {\n return (\n <h2 className={cn(\"text-[.7rem] text-secondary font-normal tracking-wider uppercase\", className)} {...rest}>\n {children}\n </h2>\n );\n};\n", "import * as React from \"react\";\nimport { Popover as PopoverPrimitive } from \"@base-ui/react/popover\";\n\nimport { cn } from \"@/utils/css\";\n\nfunction Popover({ ...props }: PopoverPrimitive.Root.Props) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\n}\n\nfunction PopoverTrigger({ ...props }: PopoverPrimitive.Trigger.Props) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n alignOffset = 0,\n side = \"bottom\",\n sideOffset = 4,\n shadow,\n anchor,\n ...props\n}: PopoverPrimitive.Popup.Props &\n Pick<PopoverPrimitive.Positioner.Props, \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"> & {\n shadow?: \"lg\";\n anchor?: HTMLElement | null | React.RefObject<HTMLElement | null>;\n }) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n anchor={anchor}\n className=\"z-10110\"\n >\n <PopoverPrimitive.Popup\n data-slot=\"popover-content\"\n className={cn(\n \"border border-primary/50 bg-ground/80 backdrop-blur-sm \",\n \"rounded-[1rem] [corner-shape:squircle]\",\n \"flex w-72 origin-(--transform-origin) flex-col gap-2.5 p-2.5 text-sm text-popover-foreground outline-hidden duration-100\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n shadow === \"lg\"\n ? \"shadow-[0_20px_15px_-12px_rgba(0,0,0,.35)]\"\n : \"shadow-[0_10px_20px_-8px_rgba(0,0,0,.6)]\",\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Positioner>\n </PopoverPrimitive.Portal>\n );\n}\n\nfunction PopoverHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"popover-header\" className={cn(\"flex flex-col gap-0.5 text-sm\", className)} {...props} />;\n}\n\nfunction PopoverTitle({ className, ...props }: PopoverPrimitive.Title.Props) {\n return <PopoverPrimitive.Title data-slot=\"popover-title\" className={cn(\"font-medium\", className)} {...props} />;\n}\n\nfunction PopoverDescription({ className, ...props }: PopoverPrimitive.Description.Props) {\n return (\n <PopoverPrimitive.Description\n data-slot=\"popover-description\"\n className={cn(\"text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\n//------------------------------------------------------------------------------\ntype PopoverProps = React.ComponentProps<typeof Popover>;\ntype PopoverTriggerProps = React.ComponentProps<typeof PopoverTrigger>;\ntype PopoverContentProps = React.ComponentProps<typeof PopoverContent>;\ntype PopoverHeaderProps = React.ComponentProps<typeof PopoverHeader>;\ntype PopoverTitleProps = React.ComponentProps<typeof PopoverTitle>;\ntype PopoverDescriptionProps = React.ComponentProps<typeof PopoverDescription>;\n\n//------------------------------------------------------------------------------\nexport {\n Popover,\n PopoverContent,\n PopoverDescription,\n PopoverHeader,\n PopoverTitle,\n PopoverTrigger,\n type PopoverProps,\n type PopoverTriggerProps,\n type PopoverContentProps,\n type PopoverHeaderProps,\n type PopoverTitleProps,\n type PopoverDescriptionProps,\n};\n", "//------------------------------------------------------------------------------\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport const ScrollableArea = ({\n direction = \"horizontal\",\n children,\n className,\n ref,\n}: {\n direction?: \"horizontal\" | \"vertical\";\n children: React.ReactNode;\n className?: string;\n ref?: React.Ref<HTMLDivElement>;\n}) => {\n return (\n <div\n ref={ref}\n className={cn(\n direction === \"horizontal\" ? \"overflow-x-auto\" : \"overflow-y-auto\",\n direction === \"horizontal\"\n ? \"[-webkit-mask-image:linear-gradient(to_right,transparent,black_16px,black_calc(100%-16px),transparent)]\"\n : \"[-webkit-mask-image:linear-gradient(to_bottom,transparent,black_16px,black_calc(100%-16px),transparent)]\",\n direction === \"horizontal\"\n ? \"mask-[linear-gradient(to_right,transparent,black_16px,black_calc(100%-16px),transparent)]\"\n : \"mask-[linear-gradient(to_bottom,transparent,black_16px,black_calc(100%-16px),transparent)]\",\n className,\n )}\n >\n {children}\n </div>\n );\n};\n\n//------------------------------------------------------------------------------\nexport type ScrollableAreaProps = ComponentProps<typeof ScrollableArea>;\n", "//------------------------------------------------------------------------------\nimport { Fragment, useMemo } from \"react\";\nimport { Slider as SliderPrimitive } from \"@base-ui/react/slider\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\n//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\n// Parts read their dimensions and color from variables set on the root:\n// --slider-bar cross size of the \"default\" bar (heights follow Button sizes)\n// --slider-thumb size of the \"classic\" thumb\n// --slider-accent fill/handle color, swapped for the tertiary content color when read-only\nconst sliderVariants = cva(\n [\n \"flex [--slider-accent:var(--color-accent)] data-readonly:[--slider-accent:var(--color-tertiary)]\",\n \"data-[orientation=horizontal]:w-full data-[orientation=horizontal]:flex-col data-[orientation=vertical]:h-full\",\n \"data-disabled:opacity-50 data-disabled:cursor-not-allowed\",\n ],\n {\n variants: {\n size: {\n \"2xs\": \"text-3xs [--slider-bar:--spacing(5)] [--slider-thumb:--spacing(2.5)]\",\n xs: \"text-2xs [--slider-bar:--spacing(6)] [--slider-thumb:--spacing(3)]\",\n sm: \"text-xs [--slider-bar:--spacing(7)] [--slider-thumb:--spacing(3.5)]\",\n md: \"text-sm [--slider-bar:--spacing(8)] [--slider-thumb:--spacing(4)]\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n },\n);\n\n//------------------------------------------------------------------------------\n// \"default\" is a bar tall enough to hold its value, marked by a 1px handle.\n// \"classic\" is a thin track with a round thumb.\nconst sliderControlVariants = cva(\n \"relative flex touch-none items-center select-none data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-32 data-[orientation=vertical]:flex-col\",\n {\n variants: {\n variant: {\n default: [\n \"data-[orientation=horizontal]:h-(--slider-bar) data-[orientation=vertical]:w-(--slider-bar)\",\n \"not-data-disabled:cursor-col-resize not-data-disabled:data-[orientation=vertical]:cursor-row-resize\",\n ],\n classic:\n \"data-[orientation=horizontal]:h-(--slider-thumb) data-[orientation=vertical]:w-(--slider-thumb)\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\n//------------------------------------------------------------------------------\nconst sliderTrackVariants = cva(\"relative data-[orientation=horizontal]:w-full data-[orientation=vertical]:grow\", {\n variants: {\n variant: {\n default: [\n \"overflow-hidden rounded-md bg-neutral-0/10\",\n \"data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full\",\n \"has-focus-visible:ring-[3px] has-focus-visible:ring-(--slider-accent)/50\",\n ],\n classic: \"rounded-full bg-neutral-0/20 data-[orientation=horizontal]:h-1 data-[orientation=vertical]:w-1\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\n//------------------------------------------------------------------------------\nconst sliderIndicatorVariants = cva(\"\", {\n variants: {\n variant: {\n default: \"bg-(--slider-accent)/50\",\n classic: \"rounded-full bg-(--slider-accent)\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\n//------------------------------------------------------------------------------\nconst sliderThumbVariants = cva(\"block outline-0\", {\n variants: {\n variant: {\n default:\n \"bg-(--slider-accent) data-[orientation=horizontal]:h-full data-[orientation=horizontal]:w-px data-[orientation=vertical]:h-px data-[orientation=vertical]:w-full\",\n classic: [\n \"size-(--slider-thumb) cursor-grab rounded-full bg-neutral-0 shadow-sm transition-shadow\",\n \"data-dragging:cursor-grabbing data-disabled:cursor-not-allowed\",\n \"has-focus-visible:ring-[3px] has-focus-visible:ring-(--slider-accent)/50\",\n ],\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\n//------------------------------------------------------------------------------\ntype SliderMarkersProps = {\n markers: readonly number[];\n min: number;\n max: number;\n orientation: SliderPrimitive.Root.State[\"orientation\"];\n variant: VariantProps<typeof sliderTrackVariants>[\"variant\"];\n format?: Intl.NumberFormatOptions;\n locale?: Intl.LocalesArgument;\n};\n\n//------------------------------------------------------------------------------\n// Ticks and labels each get one grid track (a row, or a column when vertical), all ticks sharing one cell\n// and all labels another, so the grid sizes to them; each is then offset to its value.\n// Offsets follow the thumb's edge alignment (inset by half the thumb at both ends) so ticks line up with it.\n// Horizontally, shifting a label by its own percentage keeps the first and last ones inside the slider's\n// bounds; vertically, labels are centered on their tick, like an axis.\nfunction SliderMarkers({ markers, min, max, orientation, variant, format, locale }: SliderMarkersProps) {\n const formatter = useMemo(() => new Intl.NumberFormat(locale, format), [locale, format]);\n const vertical = orientation === \"vertical\";\n const thumbSize = variant === \"classic\" ? \"var(--slider-thumb)\" : \"1px\";\n\n return (\n <div\n aria-hidden\n data-slot=\"slider-markers\"\n data-orientation={orientation}\n className={cn(\n \"grid text-[0.8em] leading-none text-tertiary tabular-nums select-none *:relative\",\n vertical ? \"grid-cols-[auto_auto] grid-rows-1 gap-x-1 pl-1\" : \"grid-rows-[auto_auto] gap-y-0.5 pt-1\",\n )}\n >\n {markers.map(marker => {\n const percent = ((marker - min) / (max - min)) * 100;\n const offset = `calc(${thumbSize} / 2 + ${percent / 100} * (100% - ${thumbSize}))`;\n return (\n <Fragment key={marker}>\n <span\n data-slot=\"slider-marker-tick\"\n className={cn(\n \"bg-current [grid-area:1/1]\",\n vertical ? \"h-px w-1 self-end\" : \"h-1 w-px justify-self-start\",\n )}\n style={\n vertical ? { bottom: offset, translate: \"0 50%\" } : { left: offset, translate: \"-50%\" }\n }\n />\n <span\n data-slot=\"slider-marker-label\"\n className={vertical ? \"[grid-area:1/2] self-end\" : \"[grid-area:2/1] justify-self-start\"}\n style={\n vertical\n ? { bottom: offset, translate: \"0 50%\" }\n : { left: offset, translate: `-${percent}%` }\n }\n >\n {formatter.format(marker)}\n </span>\n </Fragment>\n );\n })}\n </div>\n );\n}\n\n//------------------------------------------------------------------------------\ntype SliderProps<Value extends number | readonly number[] = number> = SliderPrimitive.Root.Props<Value> &\n Pick<SliderPrimitive.Thumb.Props, \"getAriaLabel\"> &\n VariantProps<typeof sliderVariants> &\n VariantProps<typeof sliderTrackVariants> & {\n /** Values ticked and labelled below the slider (beside it when vertical), formatted like the value itself. */\n markers?: readonly number[];\n /** Shows the value without letting it change; the accent color turns to the tertiary content color. */\n readOnly?: boolean;\n };\n\n//------------------------------------------------------------------------------\n/**\n * A single-value or range slider: pass an array as `value`/`defaultValue` to get one thumb per entry.\n * The default variant shows its value inside the bar, formatted with the `format` and `locale` props.\n * `aria-label` and `getAriaLabel` are forwarded to the thumbs, which hold the focusable inputs.\n */\nfunction Slider<Value extends number | readonly number[]>({\n className,\n variant = \"default\",\n size = \"md\",\n value,\n defaultValue,\n min = 0,\n max = 100,\n orientation = \"horizontal\",\n format,\n locale,\n markers,\n readOnly = false,\n onValueChange,\n \"aria-label\": ariaLabel,\n getAriaLabel,\n ...props\n}: SliderProps<Value>) {\n const values = value ?? defaultValue;\n const thumbCount = Array.isArray(values) ? values.length : 1;\n\n return (\n <SliderPrimitive.Root\n data-slot=\"slider\"\n data-variant={variant}\n data-size={size}\n data-readonly={readOnly || undefined}\n value={value}\n defaultValue={defaultValue}\n min={min}\n max={max}\n orientation={orientation}\n format={format}\n locale={locale}\n thumbAlignment=\"edge\"\n onValueChange={(newValue, eventDetails) => {\n // Base UI has no read-only mode: cancelling the change keeps the value as is.\n if (readOnly) {\n eventDetails.cancel();\n return;\n }\n onValueChange?.(newValue, eventDetails);\n }}\n className={cn(sliderVariants({ size }), className)}\n {...props}\n >\n <SliderPrimitive.Control\n data-slot=\"slider-control\"\n className={cn(sliderControlVariants({ variant }), readOnly && \"pointer-events-none\")}\n >\n <SliderPrimitive.Track data-slot=\"slider-track\" className={sliderTrackVariants({ variant })}>\n <SliderPrimitive.Indicator\n data-slot=\"slider-indicator\"\n className={sliderIndicatorVariants({ variant })}\n />\n {/* Drawn above the thumbs (which take z-index 1\u20132 while active) so the handle never hides the text. */}\n {variant === \"default\" && (\n <SliderPrimitive.Value\n data-slot=\"slider-value\"\n className={cn(\n \"pointer-events-none absolute inset-0 z-10 flex items-center px-2 text-primary tabular-nums\",\n \"data-[orientation=vertical]:items-end data-[orientation=vertical]:justify-center data-[orientation=vertical]:px-0 data-[orientation=vertical]:pb-1\",\n )}\n />\n )}\n {Array.from({ length: thumbCount }, (_, index) => (\n <SliderPrimitive.Thumb\n key={index}\n index={index}\n aria-label={ariaLabel}\n getAriaLabel={getAriaLabel}\n // The thumb doesn't forward aria-readonly to its input, so it's set here.\n inputRef={input => {\n if (readOnly) input?.setAttribute(\"aria-readonly\", \"true\");\n else input?.removeAttribute(\"aria-readonly\");\n }}\n data-slot=\"slider-thumb\"\n className={sliderThumbVariants({ variant })}\n />\n ))}\n </SliderPrimitive.Track>\n </SliderPrimitive.Control>\n {markers && (\n <SliderMarkers\n markers={markers}\n min={min}\n max={max}\n orientation={orientation}\n variant={variant}\n format={format}\n locale={locale}\n />\n )}\n </SliderPrimitive.Root>\n );\n}\n\n//------------------------------------------------------------------------------\nexport { Slider, type SliderProps };\n", "//------------------------------------------------------------------------------\nimport type { ComponentProps } from \"react\";\nimport { Switch as SwitchPrimitive } from \"@base-ui/react/switch\";\n\n//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nfunction Switch({ className, disabled, ...props }: SwitchPrimitive.Root.Props) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n \"inline-flex h-5 w-8 shrink-0 cursor-pointer items-center rounded-full border border-transparent bg-neutral-0/20 p-0.5 transition-colors outline-0\",\n \"focus-visible:ring-[3px] focus-visible:ring-ring/50\",\n \"data-disabled:opacity-50 data-disabled:cursor-not-allowed\",\n \"data-checked:bg-accent\",\n className,\n )}\n data-disabled={disabled}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className=\"block size-4 rounded-full bg-neutral-0 opacity-50 data-checked:opacity-100 shadow-sm transition-[translate,opacity] data-checked:translate-x-3\"\n />\n </SwitchPrimitive.Root>\n );\n}\n\n//------------------------------------------------------------------------------\ntype SwitchProps = ComponentProps<typeof Switch>;\n\n//------------------------------------------------------------------------------\nexport { Switch, type SwitchProps };\n", "//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport type OverlayContainerProps = {\n children: React.ReactNode;\n className?: string;\n as?: React.ElementType;\n};\n//------------------------------------------------------------------------------\nexport const OverlayContainer = ({ children, className, as }: OverlayContainerProps) => {\n const Component = as || \"div\";\n return (\n <Component\n className={cn(\n \"flex rounded-full bg-neutral-1000/10 light:bg-neutral-1000/30 backdrop-blur-sm filter-[drop-shadow(2px_4px_8px_rgb(0_0_0/0.6))] light:filter-[drop-shadow(2px_4px_8px_rgb(0_0_0/0.4))]\",\n className,\n )}\n >\n {children}\n </Component>\n );\n};\n", "//------------------------------------------------------------------------------\nimport { forwardRef, type ComponentPropsWithoutRef } from \"react\";\n\n//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\n// Layout primitive replacing the design-system `Stack`. Centering props are\n// direction-aware: `vCenter`/`hCenter` always mean vertical/horizontal centering\n// regardless of `vertical`, matching the original design-system semantics.\nexport interface StackProps extends ComponentPropsWithoutRef<\"div\"> {\n fullWidth?: boolean;\n fullHeight?: boolean;\n vertical?: boolean;\n vCenter?: boolean;\n hCenter?: boolean;\n opposite?: boolean;\n gapRight?: number;\n gapBottom?: number;\n}\n\n//------------------------------------------------------------------------------\nexport const Stack = forwardRef<HTMLDivElement, StackProps>(function Stack(\n { fullWidth, fullHeight, vertical, vCenter, hCenter, opposite, gapRight, gapBottom, className, style, ...rest },\n ref,\n) {\n const isColumn = Boolean(vertical);\n const gap = gapRight ?? gapBottom;\n\n const align = isColumn ? (hCenter ? \"center\" : undefined) : vCenter ? \"center\" : undefined;\n const justify = opposite\n ? \"space-between\"\n : isColumn\n ? vCenter\n ? \"center\"\n : undefined\n : hCenter\n ? \"center\"\n : undefined;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex\",\n isColumn ? \"flex-col\" : \"flex-row\",\n fullWidth && \"w-full\",\n fullHeight && \"h-full\",\n className,\n )}\n style={{\n alignItems: align,\n justifyContent: justify,\n gap: gap !== undefined ? `${gap}rem` : undefined,\n ...style,\n }}\n {...rest}\n />\n );\n});\n", "//------------------------------------------------------------------------------\nimport type { ComponentProps } from \"react\";\nimport { createContext, useContext, useRef, type PointerEvent as ReactPointerEvent } from \"react\";\nimport { Tabs as TabsPrimitive } from \"@base-ui/react/tabs\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\n//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nfunction Tabs({ className, orientation = \"horizontal\", ...props }: TabsPrimitive.Root.Props) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-orientation={orientation}\n className={cn(\"group/tabs flex gap-2 data-[orientation=horizontal]:flex-col\", className)}\n {...props}\n />\n );\n}\n\n//------------------------------------------------------------------------------\nconst tabsListVariants = cva(\n \"relative inline-flex w-fit items-center justify-center rounded-lg text-secondary group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col\",\n {\n variants: {\n variant: {\n default: \"bg-muted\",\n segment: \"text-white/85 border border-white/40 rounded-full\",\n line: \"gap-1 bg-transparent rounded-none\",\n },\n size: {\n \"2xs\": \"p-[2px] text-2xs group-data-[orientation=horizontal]/tabs:h-6\",\n xs: \"p-[2px] text-xs group-data-[orientation=horizontal]/tabs:h-6\",\n sm: \"p-[2px] text-sm group-data-[orientation=horizontal]/tabs:h-7\",\n md: \"p-[2px] text-md group-data-[orientation=horizontal]/tabs:h-8\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n },\n);\n\n//------------------------------------------------------------------------------\nconst tabsTriggerVariants = cva(\n cn(\n \"relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 px-1.5 py-0.5\",\n \"rounded-md border border-transparent whitespace-nowrap transition-all cursor-pointer\",\n \"group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start\",\n \"hover:text-primary focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring\",\n \"disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50\",\n \"has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n ),\n {\n variants: {\n variant: {\n default: \"text-quaternary data-active:text-primary data-active:bg-background\",\n segment: \"text-inherit data-active:text-black\",\n line: cn(\n \"text-inherit data-active:text-primary\",\n // Underline below (horizontal) or beside (vertical) the active tab.\n \"after:absolute after:bg-foreground after:opacity-0 after:transition-opacity data-active:after:opacity-100\",\n \"group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5\",\n \"group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5\",\n ),\n },\n size: {\n \"2xs\": \"\",\n xs: \"\",\n sm: \"gap-1 py-0 text-xs\",\n md: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n },\n);\n\n//------------------------------------------------------------------------------\n// Hands the list's variant/size down to its triggers, so each one only carries the classes of\n// the variant it's actually rendered in.\nconst TabsListContext = createContext<VariantProps<typeof tabsListVariants>>({ variant: \"default\", size: \"md\" });\n\n//------------------------------------------------------------------------------\n// Minimum finger movement, in pixels, before a touch is treated as a swipe rather than a tap.\nconst SWIPE_DRAG_THRESHOLD = 6;\n\n//------------------------------------------------------------------------------\ntype TriggerMetrics = { el: HTMLElement; left: number; width: number };\n\n//------------------------------------------------------------------------------\nfunction measureTriggers(list: HTMLElement): TriggerMetrics[] {\n const listRect = list.getBoundingClientRect();\n return Array.from(list.querySelectorAll<HTMLElement>('[data-slot=\"tabs-trigger\"]')).map(el => {\n const rect = el.getBoundingClientRect();\n return { el, left: rect.left - listRect.left, width: rect.width };\n });\n}\n\n//------------------------------------------------------------------------------\n// Interpolates the indicator's left/width between the two triggers surrounding `left`, so the\n// pill morphs smoothly as it tracks the finger instead of jumping between tab sizes.\nfunction interpolateIndicatorRect(left: number, triggers: TriggerMetrics[]) {\n const first = triggers[0];\n const last = triggers[triggers.length - 1];\n const clamped = Math.min(Math.max(left, first.left), last.left);\n\n for (let i = 0; i < triggers.length - 1; i++) {\n const from = triggers[i];\n const to = triggers[i + 1];\n if (clamped >= from.left && clamped <= to.left) {\n const progress = (clamped - from.left) / (to.left - from.left || 1);\n return { left: clamped, width: from.width + progress * (to.width - from.width) };\n }\n }\n return { left: clamped, width: clamped === first.left ? first.width : last.width };\n}\n\n//------------------------------------------------------------------------------\nfunction findNearestTrigger(centerX: number, triggers: TriggerMetrics[]) {\n return triggers.reduce((nearest, trigger) => {\n const triggerCenter = trigger.left + trigger.width / 2;\n const nearestCenter = nearest.left + nearest.width / 2;\n return Math.abs(centerX - triggerCenter) < Math.abs(centerX - nearestCenter) ? trigger : nearest;\n });\n}\n\n//------------------------------------------------------------------------------\n// Matches the \"text-white/85\" (inactive) / \"text-black\" (active, data-active) colors from\n// tabsListVariants/tabsTriggerVariants above, so the interpolated color lines up with the CSS-driven one\n// once a drag ends and inline styles are cleared.\nconst SEGMENT_INACTIVE_TEXT_COLOR: [number, number, number, number] = [255, 255, 255, 0.85];\nconst SEGMENT_ACTIVE_TEXT_COLOR: [number, number, number, number] = [0, 0, 0, 1];\n\n//------------------------------------------------------------------------------\nfunction mixSegmentTextColor(fraction: number): string {\n const clamped = Math.min(Math.max(fraction, 0), 1);\n const [r, g, b, a] = SEGMENT_INACTIVE_TEXT_COLOR.map(\n (channel, i) => channel + (SEGMENT_ACTIVE_TEXT_COLOR[i] - channel) * clamped,\n );\n return `rgba(${r}, ${g}, ${b}, ${a})`;\n}\n\n//------------------------------------------------------------------------------\n// How much of `trigger` the indicator rect [left, left + width] currently covers, from 0 (no\n// overlap) to 1 (indicator fully covers the trigger).\nfunction overlapFraction(left: number, width: number, trigger: TriggerMetrics): number {\n const overlap = Math.min(left + width, trigger.left + trigger.width) - Math.max(left, trigger.left);\n return Math.max(0, overlap) / trigger.width;\n}\n\n//------------------------------------------------------------------------------\n// Tints each trigger's label white-to-black by how much the indicator currently overlaps it, so\n// the text darkens as the pill slides under it instead of flipping color only once the drag ends.\nfunction applyTriggerColors(left: number, width: number, triggers: TriggerMetrics[]) {\n for (const trigger of triggers) {\n trigger.el.style.color = mixSegmentTextColor(overlapFraction(left, width, trigger));\n }\n}\n\n//------------------------------------------------------------------------------\nfunction resetTriggerColors(triggers: TriggerMetrics[]) {\n for (const trigger of triggers) {\n trigger.el.style.transition = \"\";\n trigger.el.style.color = \"\";\n }\n}\n\n//------------------------------------------------------------------------------\ntype DragState = {\n pointerId: number;\n startX: number;\n isDragging: boolean;\n activeLeft: number;\n activeEl: HTMLElement;\n triggers: TriggerMetrics[];\n};\n\n//------------------------------------------------------------------------------\ntype TabsListProps = TabsPrimitive.List.Props & VariantProps<typeof tabsListVariants> & { swipeable?: boolean };\n\n//------------------------------------------------------------------------------\n// Router: keeps the swipe-drag machinery (refs, pointer handlers) out of every TabsList that\n// doesn't ask for it \u2014 only `swipeable` segment tabs pay for it.\nfunction TabsList({ swipeable = false, variant = \"default\", ...props }: TabsListProps) {\n if (swipeable && variant === \"segment\") {\n return <SwipeableSegmentTabsList {...props} />;\n }\n return <PlainTabsList variant={variant} {...props} />;\n}\n\n//------------------------------------------------------------------------------\nfunction PlainTabsList({\n className,\n variant = \"default\",\n size = \"md\",\n children,\n ...props\n}: Omit<TabsListProps, \"swipeable\">) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n data-variant={variant}\n data-size={size}\n className={cn(tabsListVariants({ variant, size }), className)}\n {...props}\n >\n <TabsListContext.Provider value={{ variant, size }}>{children}</TabsListContext.Provider>\n {variant === \"segment\" && <TabsIndicator />}\n </TabsPrimitive.List>\n );\n}\n\n//------------------------------------------------------------------------------\nfunction SwipeableSegmentTabsList({\n className,\n size = \"md\",\n children,\n ...props\n}: Omit<TabsListProps, \"swipeable\" | \"variant\">) {\n const listRef = useRef<HTMLDivElement>(null);\n const dragRef = useRef<DragState | null>(null);\n // Pending cleanup (transitionend listener + fallback timeout) scheduled by the previous\n // release's landing animation \u2014 cancelled if a new drag starts before it runs, otherwise it\n // would clear the *new* drag's inline style mid-gesture.\n const releaseCleanupRef = useRef<{ indicator: HTMLElement; handler: () => void; timeoutId: number } | null>(null);\n\n //----------------------------------------------------------------------------\n const getIndicator = () => listRef.current?.querySelector<HTMLElement>('[data-slot=\"tabs-indicator\"]');\n\n //----------------------------------------------------------------------------\n const resetIndicatorStyle = () => {\n const indicator = getIndicator();\n if (indicator) {\n indicator.style.transition = \"\";\n indicator.style.translate = \"\";\n indicator.style.width = \"\";\n }\n };\n\n //----------------------------------------------------------------------------\n const cancelPendingReleaseCleanup = () => {\n const pending = releaseCleanupRef.current;\n if (!pending) {\n return;\n }\n pending.indicator.removeEventListener(\"transitionend\", pending.handler);\n clearTimeout(pending.timeoutId);\n releaseCleanupRef.current = null;\n };\n\n //----------------------------------------------------------------------------\n const handlePointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (event.pointerType !== \"touch\") {\n return;\n }\n\n cancelPendingReleaseCleanup();\n\n const list = listRef.current;\n const activeTrigger = list?.querySelector<HTMLElement>('[data-slot=\"tabs-trigger\"][data-active]');\n if (!list || !activeTrigger) {\n return;\n }\n\n const triggers = measureTriggers(list);\n const active = triggers.find(trigger => trigger.el === activeTrigger);\n if (!active) {\n return;\n }\n\n dragRef.current = {\n pointerId: event.pointerId,\n startX: event.clientX,\n isDragging: false,\n activeLeft: active.left,\n activeEl: activeTrigger,\n triggers,\n };\n };\n\n //----------------------------------------------------------------------------\n const handlePointerMove = (event: ReactPointerEvent<HTMLDivElement>) => {\n const drag = dragRef.current;\n if (!drag || event.pointerId !== drag.pointerId) {\n return;\n }\n\n const delta = event.clientX - drag.startX;\n if (!drag.isDragging) {\n if (Math.abs(delta) < SWIPE_DRAG_THRESHOLD) {\n return;\n }\n drag.isDragging = true;\n listRef.current?.setPointerCapture(event.pointerId);\n const indicator = getIndicator();\n if (indicator) {\n indicator.style.transition = \"none\";\n }\n for (const trigger of drag.triggers) {\n trigger.el.style.transition = \"none\";\n }\n }\n\n // Position via the `translate` longhand (not `transform`) because the indicator's resting\n // position is also set via `translate` (the `translate-x-(--active-tab-left)` class, driven\n // by base-ui's CSS var). `transform` and `translate` are separate CSS properties that stack\n // rather than override each other, so using `transform` here would add the drag offset on\n // top of the resting position instead of replacing it.\n\n event.preventDefault();\n const indicator = getIndicator();\n if (!indicator) {\n return;\n }\n\n const { left, width } = interpolateIndicatorRect(drag.activeLeft + delta, drag.triggers);\n indicator.style.translate = `${left}px`;\n indicator.style.width = `${width}px`;\n applyTriggerColors(left, width, drag.triggers);\n };\n\n //----------------------------------------------------------------------------\n const endDrag = (event: ReactPointerEvent<HTMLDivElement>, commit: boolean) => {\n const drag = dragRef.current;\n if (!drag || event.pointerId !== drag.pointerId) {\n return;\n }\n dragRef.current = null;\n if (!drag.isDragging) {\n return;\n }\n\n listRef.current?.releasePointerCapture(event.pointerId);\n\n const indicator = getIndicator();\n if (!commit || !indicator) {\n resetIndicatorStyle();\n resetTriggerColors(drag.triggers);\n return;\n }\n\n // Re-enable the transition and drive the indicator to the landing tab's rect ourselves\n // (rather than clearing the inline override right away) so it animates there directly.\n // Clicking the trigger updates base-ui's active-tab CSS vars asynchronously, so clearing\n // the override immediately would drop the indicator back to the *old* active tab's resting\n // position for a frame before base-ui's own transition kicks in \u2014 the \"jumps to the previous\n // position first\" glitch. Only once our own transition finishes (matching where the CSS\n // vars will have landed) is it safe to hand positioning back to the CSS class.\n const delta = event.clientX - drag.startX;\n const { left, width } = interpolateIndicatorRect(drag.activeLeft + delta, drag.triggers);\n const nearest = findNearestTrigger(left + width / 2, drag.triggers);\n\n indicator.style.transition = \"\";\n indicator.style.translate = `${nearest.left}px`;\n indicator.style.width = `${nearest.width}px`;\n\n for (const trigger of drag.triggers) {\n trigger.el.style.transition = \"\";\n }\n applyTriggerColors(nearest.left, nearest.width, drag.triggers);\n\n if (nearest.el !== drag.activeEl) {\n nearest.el.click();\n }\n\n // `transitionend` won't fire if the indicator was already sitting at `nearest`'s rect (e.g.\n // released right back on the active tab), so also clear on a timeout matching the\n // transition duration as a fallback \u2014 the reset functions are idempotent either way.\n // Both are tracked so a new drag starting before this fires can cancel it.\n const settle = () => {\n resetIndicatorStyle();\n resetTriggerColors(drag.triggers);\n };\n indicator.addEventListener(\"transitionend\", settle, { once: true });\n const timeoutId = window.setTimeout(() => {\n releaseCleanupRef.current = null;\n settle();\n }, 200);\n releaseCleanupRef.current = { indicator, handler: settle, timeoutId };\n };\n\n return (\n <TabsPrimitive.List\n ref={listRef}\n data-slot=\"tabs-list\"\n data-variant=\"segment\"\n data-size={size}\n className={cn(tabsListVariants({ variant: \"segment\", size }), \"touch-pan-y\", className)}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={event => endDrag(event, true)}\n onPointerCancel={event => endDrag(event, false)}\n {...props}\n >\n <TabsListContext.Provider value={{ variant: \"segment\", size }}>{children}</TabsListContext.Provider>\n <TabsIndicator />\n </TabsPrimitive.List>\n );\n}\n\n//------------------------------------------------------------------------------\n// Slides horizontally behind the selected tab of a `segment` TabsList.\nfunction TabsIndicator({ className, ...props }: TabsPrimitive.Indicator.Props) {\n return (\n <TabsPrimitive.Indicator\n data-slot=\"tabs-indicator\"\n className={cn(\n \"absolute z-[-1] h-[calc(100%-4px)]! rounded-full bg-white transition-[translate,width] duration-200 ease-in-out\",\n \"group-data-[orientation=horizontal]/tabs:top-0.5 group-data-[orientation=horizontal]/tabs:left-0 group-data-[orientation=horizontal]/tabs:h-full group-data-[orientation=horizontal]/tabs:w-(--active-tab-width) group-data-[orientation=horizontal]/tabs:translate-x-(--active-tab-left)\",\n \"group-data-[orientation=vertical]/tabs:top-0.5 group-data-[orientation=vertical]/tabs:left-0 group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:h-(--active-tab-height) group-data-[orientation=vertical]/tabs:translate-y-(--active-tab-top)\",\n className,\n )}\n {...props}\n />\n );\n}\n\n//------------------------------------------------------------------------------\nfunction TabsTrigger({ className, ...props }: TabsPrimitive.Tab.Props) {\n const { variant, size } = useContext(TabsListContext);\n return (\n <TabsPrimitive.Tab\n data-slot=\"tabs-trigger\"\n className={cn(tabsTriggerVariants({ variant, size }), className)}\n {...props}\n />\n );\n}\n\n//------------------------------------------------------------------------------\nfunction TabsContent({ className, ...props }: TabsPrimitive.Panel.Props) {\n return (\n <TabsPrimitive.Panel\n data-slot=\"tabs-content\"\n className={cn(\"flex-1 text-sm outline-0\", className)}\n {...props}\n />\n );\n}\n\n//------------------------------------------------------------------------------\ntype TabsProps = ComponentProps<typeof Tabs>;\ntype TabsTriggerProps = ComponentProps<typeof TabsTrigger>;\ntype TabsContentProps = ComponentProps<typeof TabsContent>;\ntype TabsIndicatorProps = ComponentProps<typeof TabsIndicator>;\n\n//------------------------------------------------------------------------------\nexport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n TabsIndicator,\n tabsListVariants,\n tabsTriggerVariants,\n type TabsProps,\n type TabsListProps,\n type TabsTriggerProps,\n type TabsContentProps,\n type TabsIndicatorProps,\n};\n", "//------------------------------------------------------------------------------\nimport type { ComponentPropsWithoutRef, ElementType } from \"react\";\n\n//------------------------------------------------------------------------------\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\ntype TextFormat = \"title1\" | \"title2\" | \"body1\" | \"body2\" | \"body3\";\ntype DSTextColor = \"primary\" | \"secondary\";\n\n//------------------------------------------------------------------------------\nconst FORMAT_MAP: Record<TextFormat, { className: string; as: \"h1\" | \"h2\" | \"p\" }> = {\n title1: { className: \"text-2xl font-semibold\", as: \"h1\" },\n title2: { className: \"text-xl font-semibold\", as: \"h2\" },\n body1: { className: \"text-base\", as: \"p\" },\n body2: { className: \"text-sm\", as: \"p\" },\n body3: { className: \"text-xs\", as: \"p\" },\n};\n\n//------------------------------------------------------------------------------\nexport interface TextProps extends Omit<ComponentPropsWithoutRef<\"p\">, \"color\"> {\n as?: ElementType;\n format?: TextFormat;\n color?: DSTextColor;\n align?: \"left\" | \"center\" | \"right\";\n}\n\n//------------------------------------------------------------------------------\nexport function Text({ as, format, color, align, className, ...rest }: TextProps) {\n const formatProps = format ? FORMAT_MAP[format] : undefined;\n const As = as ?? formatProps?.as ?? \"p\";\n return (\n <As\n className={cn(\n formatProps?.className,\n color === \"secondary\" && \"text-tertiary\",\n align === \"left\" && \"text-left\",\n align === \"center\" && \"text-center\",\n align === \"right\" && \"text-right\",\n className,\n )}\n {...rest}\n />\n );\n}\n", "//------------------------------------------------------------------------------\nimport { Button } from \"./button\";\nimport { Icon } from \"./icon\";\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nexport type ToggleButtonProps = {\n isOn: boolean;\n onToggle: () => void;\n size?: \"2xs\" | \"sm\";\n disabled?: boolean;\n className?: string;\n};\n\n//------------------------------------------------------------------------------\n/**\n * A compact ON/OFF toggle, meant to sit as the value of a settings row (e.g. inside a `DataItemValue`).\n * The `size` follows the panel it sits in: the desktop popover is tighter than the mobile sheet.\n */\nexport const ToggleButton = ({ isOn, onToggle, size = \"sm\", disabled, className }: ToggleButtonProps) => {\n return (\n <Button\n variant=\"ghost\"\n size={size}\n onClick={onToggle}\n disabled={disabled}\n aria-pressed={isOn}\n className={className}\n >\n {isOn && (\n <Icon className=\"fas fa-check starting:translate-x-4 starting:opacity-0 transition-all duration-150\" />\n )}\n <span className={cn(!isOn && \"text-tertiary\")}>{isOn ? \"ON\" : \"OFF\"}</span>\n </Button>\n );\n};\n", "import type { ComponentProps } from \"react\";\nimport { Tooltip as TooltipPrimitive } from \"@base-ui/react/tooltip\";\n\nimport { cn } from \"@/utils/css\";\n\n//------------------------------------------------------------------------------\nfunction TooltipProvider({ delay = 0, ...props }: TooltipPrimitive.Provider.Props) {\n return <TooltipPrimitive.Provider data-slot=\"tooltip-provider\" delay={delay} {...props} />;\n}\n\n//------------------------------------------------------------------------------\nfunction Tooltip({ ...props }: TooltipPrimitive.Root.Props) {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />;\n}\n\n//------------------------------------------------------------------------------\nfunction TooltipTrigger({ ...props }: TooltipPrimitive.Trigger.Props) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\n//------------------------------------------------------------------------------\nfunction TooltipContent({\n className,\n side = \"top\",\n sideOffset = 4,\n align = \"center\",\n alignOffset = 0,\n children,\n ...props\n}: TooltipPrimitive.Popup.Props &\n Pick<TooltipPrimitive.Positioner.Props, \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\">) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n className=\"isolate z-50\"\n >\n <TooltipPrimitive.Popup\n data-slot=\"tooltip-content\"\n className={cn(\n \"z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n className,\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5\" />\n </TooltipPrimitive.Popup>\n </TooltipPrimitive.Positioner>\n </TooltipPrimitive.Portal>\n );\n}\n\n//------------------------------------------------------------------------------\ntype TooltipProviderProps = ComponentProps<typeof TooltipProvider>;\ntype TooltipProps = ComponentProps<typeof Tooltip>;\ntype TooltipTriggerProps = ComponentProps<typeof TooltipTrigger>;\ntype TooltipContentProps = ComponentProps<typeof TooltipContent>;\n\n//------------------------------------------------------------------------------\nexport {\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n type TooltipProviderProps,\n type TooltipProps,\n type TooltipTriggerProps,\n type TooltipContentProps,\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["AppIcon_default", "container", "inner", "innerShape", "shape", "shapeAlt", "jsx", "jsxs", "appColorInventory", "appIconShapes", "SHAPE_COUNT", "COLOR_COUNT", "ROTATIONS", "RANDOM_1", "RANDOM_2", "RANDOM_3", "AppIcon", "id", "shape", "colors", "className", "style", "_id", "_colors", "_shape", "rotation", "AppIcon_default", "entityComponentStyles", "Icon", "cn", "entityComponentStyles", "Icon", "cn", "Fragment", "jsx", "EntityComponentIcon", "componentId", "variant", "style", "className", "color", "fontAwesome", "entity_components_schema_default", "jsx", "jsxs", "EntityComponentBadge", "name", "hasLinkToReference", "className", "schema", "entity_components_schema_default", "style", "entityComponentStyles", "htmlTitle", "color", "referenceUrl", "cn", "EntityComponentIcon", "Icon", "entityComponentStyles", "clsx", "twMerge", "cn", "inputs", "jsx", "jsxs", "EntityRecipe", "allOf", "oneOf", "withAttributes", "className", "cn", "component", "EntityComponentBadgeEx", "EntityComponentBadge", "name", "color", "entityComponentStyles", "ComponentAttributes", "attributes", "key", "value", "GlowEffect_default", "glowEffect", "glowEffectWide", "jsx", "GlowEffect", "children", "variant", "className", "cn", "GlowEffect_default", "Fragment", "jsx", "jsxs", "IsometricSchema", "items", "connections", "gridSize", "cellSize", "containerWidth", "containerHeight", "caption", "animateOnScroll", "className", "appearStyle", "delay", "isoToScreen", "x", "y", "screenX", "screenY", "centerX", "centerY", "generateGrid", "lines", "halfGrid", "start", "end", "generateArrow", "direction", "color", "index", "id", "generateConnections", "conn", "from_x", "from_y", "to_x", "to_y", "via_x", "via_y", "arrow_start", "arrow_end", "name", "showDebug", "isAnimated", "animationDirection", "points", "segments", "currentX", "currentY", "nextX", "nextY", "longestSegment", "maxLength", "seg", "dx", "dy", "length", "segStart", "segEnd", "segMidX", "segMidY", "rawAngle", "labelAngle", "deg", "a", "pathCommands", "p", "i", "totalLen", "b", "ax", "ay", "bx", "by", "dur", "pathId", "startMarkerId", "endMarkerId", "ArrowDefs", "GlowDot", "reverse", "begin", "renderDots", "generateItems", "item", "width", "height", "image", "bottomLeft", "bottomRight", "topRight", "topLeft", "px", "py", "centerPos", "imageX", "imageY", "cn", "jsx", "jsxs", "Logo3dverse", "style", "className", "Logo3dverseRocket", "Spinner_default", "spinnerLogo", "circle", "loaderRotate", "jsx", "jsxs", "Spinner", "Spinner_default", "Logo3dverseRocket", "assets", "jsx", "jsxs", "CROSSED_CLASS_NAME", "Icon", "variant", "crossed", "className", "style", "dataIcon", "cn", "Fragment", "jsx", "AssetIcon", "assetId", "variant", "weight", "className", "color", "fontAwesome", "assets", "_className", "AssetScene", "Icon", "cn", "style", "jsx", "IconAssetScene", "size", "className", "_size", "AccordionPrimitive", "jsx", "Accordion", "props", "AccordionPrimitive", "AccordionItem", "className", "cn", "AccordionTrigger", "children", "AccordionContent", "DrawerPrimitive", "ButtonPrimitive", "cva", "jsx", "buttonVariants", "cva", "cn", "Button", "as", "className", "variant", "size", "round", "active", "children", "props", "ButtonPrimitive", "jsx", "jsxs", "BottomSheet", "swipeDirection", "closeOnBlur", "props", "DrawerPrimitive", "BottomSheetTrigger", "BottomSheetPortal", "BottomSheetClose", "BottomSheetOverlay", "className", "cn", "BottomSheetViewport", "BottomSheetContent", "children", "showHandle", "showCloseButton", "showOverlay", "Button", "Icon", "BottomSheetHeader", "BottomSheetFooter", "BottomSheetTitle", "BottomSheetDescription", "cva", "jsx", "badgeVariants", "cva", "cn", "Badge", "as", "className", "variant", "size", "props", "jsx", "jsxs", "ButtonTile", "as", "className", "variant", "size", "orientation", "round", "icon", "rightComponent", "isEnabled", "children", "props", "Button", "cn", "Icon", "jsx", "jsxs", "DataItem", "children", "size", "className", "textSize", "dataItemLabelPaddingY", "cn", "DataItemLabel", "icon", "Icon", "DataItemTitle", "DataItemDescription", "DataItemValue", "DialogPrimitive", "jsx", "jsxs", "Dialog", "props", "DialogPrimitive", "DialogTrigger", "DialogPortal", "DialogOverlay", "className", "props", "jsx", "DialogPrimitive", "cn", "DialogContent", "children", "showCloseButton", "jsxs", "DialogPortal", "Button", "Icon", "DialogHeader", "DialogFooter", "DialogTitle", "DialogDescription", "jsx", "DotPing", "className", "isActive", "cn", "jsx", "jsxs", "EmptyState", "icon", "title", "description", "variant", "className", "cn", "Icon", "jsx", "IslandPanel", "children", "shadow", "className", "as", "rest", "cn", "jsx", "Kbd", "children", "className", "cn", "jsx", "Loader", "className", "rest", "Icon", "cn", "createContext", "useContext", "MenuPrimitive", "cva", "jsx", "menuContentVariants", "cva", "cn", "menuItemVariants", "menuGroupLabelVariants", "menuSeparatorVariants", "MenuSizeContext", "createContext", "Menu", "props", "MenuPrimitive", "MenuTrigger", "MenuPortal", "MenuPositioner", "className", "sideOffset", "align", "MenuContent", "size", "children", "MenuItem", "useContext", "MenuSeparator", "MenuGroup", "MenuGroupLabel", "DialogPrimitive", "jsx", "jsxs", "Modal", "open", "onClose", "closeIcon", "fullScreen", "disableBackdropClick", "disableEscapeKeyDown", "backdropBg", "className", "style", "children", "rest", "DialogPrimitive", "isOpen", "eventDetails", "cn", "Button", "Icon", "jsx", "Panel", "startingTransiton", "children", "className", "ref", "rest", "cn", "PanelHeader", "PanelTitle", "PopoverPrimitive", "jsx", "Popover", "props", "PopoverPrimitive", "PopoverTrigger", "PopoverContent", "className", "align", "alignOffset", "side", "sideOffset", "shadow", "anchor", "cn", "PopoverHeader", "PopoverTitle", "PopoverDescription", "jsx", "ScrollableArea", "direction", "children", "className", "ref", "cn", "Fragment", "useMemo", "SliderPrimitive", "cva", "jsx", "jsxs", "sliderVariants", "cva", "sliderControlVariants", "sliderTrackVariants", "sliderIndicatorVariants", "sliderThumbVariants", "SliderMarkers", "markers", "min", "max", "orientation", "variant", "format", "locale", "formatter", "useMemo", "vertical", "thumbSize", "cn", "marker", "percent", "offset", "Fragment", "Slider", "className", "size", "value", "defaultValue", "readOnly", "onValueChange", "ariaLabel", "getAriaLabel", "props", "values", "thumbCount", "SliderPrimitive", "newValue", "eventDetails", "_", "index", "input", "SwitchPrimitive", "jsx", "Switch", "className", "disabled", "props", "SwitchPrimitive", "cn", "jsx", "OverlayContainer", "children", "className", "as", "cn", "forwardRef", "jsx", "Stack", "forwardRef", "fullWidth", "fullHeight", "vertical", "vCenter", "hCenter", "opposite", "gapRight", "gapBottom", "className", "style", "rest", "ref", "isColumn", "gap", "align", "justify", "cn", "createContext", "useContext", "useRef", "TabsPrimitive", "cva", "jsx", "jsxs", "Tabs", "className", "orientation", "props", "TabsPrimitive", "cn", "tabsListVariants", "cva", "tabsTriggerVariants", "TabsListContext", "createContext", "SWIPE_DRAG_THRESHOLD", "measureTriggers", "list", "listRect", "el", "rect", "interpolateIndicatorRect", "left", "triggers", "first", "last", "clamped", "i", "from", "to", "progress", "findNearestTrigger", "centerX", "nearest", "trigger", "triggerCenter", "nearestCenter", "SEGMENT_INACTIVE_TEXT_COLOR", "SEGMENT_ACTIVE_TEXT_COLOR", "mixSegmentTextColor", "fraction", "r", "g", "b", "a", "channel", "overlapFraction", "width", "overlap", "applyTriggerColors", "resetTriggerColors", "TabsList", "swipeable", "variant", "SwipeableSegmentTabsList", "PlainTabsList", "size", "children", "TabsIndicator", "listRef", "useRef", "dragRef", "releaseCleanupRef", "getIndicator", "resetIndicatorStyle", "indicator", "cancelPendingReleaseCleanup", "pending", "handlePointerDown", "event", "activeTrigger", "active", "handlePointerMove", "drag", "delta", "endDrag", "commit", "settle", "timeoutId", "TabsTrigger", "useContext", "TabsContent", "jsx", "FORMAT_MAP", "Text", "as", "format", "color", "align", "className", "rest", "formatProps", "As", "cn", "jsx", "jsxs", "ToggleButton", "isOn", "onToggle", "size", "disabled", "className", "Button", "Icon", "cn", "TooltipPrimitive", "jsx", "jsxs", "TooltipProvider", "delay", "props", "TooltipPrimitive", "Tooltip", "TooltipTrigger", "TooltipContent", "className", "side", "sideOffset", "align", "alignOffset", "children", "cn"]
|
|
7
7
|
}
|