@mmmmzxe/react-360-viewer 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +604 -60
- package/dist/index.d.ts +4 -3
- package/dist/index.js +137 -164
- package/dist/index.js.map +1 -1
- package/dist/styles.css +2 -0
- package/package.json +13 -3
- package/src/constants/viewer360ClassNames.ts +2 -1
- package/src/feature/Viewer360HotspotOverlay.tsx +16 -29
- package/src/feature/Viewer360MarkerPin.tsx +41 -40
- package/src/generated/injectStyles.ts +18 -0
- package/src/generated/viewer360.min.css +2 -0
- package/src/index.ts +2 -0
- package/src/styles.css +77 -0
- package/src/types/Viewer360Marker.ts +2 -1
package/dist/index.js
CHANGED
|
@@ -1,7 +1,21 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
+
// src/generated/injectStyles.ts
|
|
4
|
+
var VIEWER_360_STYLE_ID = "mmmmzxe-react-360-viewer-styles";
|
|
5
|
+
var viewer360Styles = `/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */
|
|
6
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-duration:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-800:oklch(47.3% .137 46.201);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--leading-snug:1.375;--leading-normal:1.5;--radius-md:calc(var(--radius) - 2px);--radius-4xl:2rem;--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.\\@container\\/card-header{container:card-header/inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:calc(var(--spacing) * 0)}.start-1{inset-inline-start:calc(var(--spacing) * 1)}.start-1\\/2{inset-inline-start:50%}.start-4{inset-inline-start:calc(var(--spacing) * 4)}.top-4{top:calc(var(--spacing) * 4)}.bottom-4{bottom:calc(var(--spacing) * 4)}.bottom-6{bottom:calc(var(--spacing) * 6)}.left-1{left:calc(var(--spacing) * 1)}.left-1\\/2{left:50%}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-1{margin-inline:calc(var(--spacing) * 1)}.my-2{margin-block:calc(var(--spacing) * 2)}.ms-auto{margin-inline-start:auto}.me-1{margin-inline-end:calc(var(--spacing) * 1)}.me-1\\.5{margin-inline-end:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.table{display:table}.aspect-\\[16\\/10\\]{aspect-ratio:16/10}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.size-full{width:100%;height:100%}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.min-h-4{min-height:calc(var(--spacing) * 4)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-4{min-width:calc(var(--spacing) * 4)}.min-w-\\[3rem\\]{min-width:3rem}.flex-1{flex:1}.shrink-0{flex-shrink:0}.basis-full{flex-basis:100%}.origin-\\(--radix-popover-content-transform-origin\\){transform-origin:var(--radix-popover-content-transform-origin)}.-translate-x-1{--tw-translate-x:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-x-1\\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-x-1\\/4{--tw-translate-x:calc(calc(1 / 4 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1{--tw-translate-y:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\\/4{--tw-translate-y:calc(calc(1 / 4 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.animate-ping{animation:var(--animate-ping)}.animate-spin{animation:var(--animate-spin)}.cursor-crosshair{cursor:crosshair}.cursor-ew-resize{cursor:ew-resize}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.touch-none{touch-action:none}.resize{resize:both}.auto-rows-min{grid-auto-rows:min-content}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0{gap:calc(var(--spacing) * 0)}.gap-0\\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-3\\.5{gap:calc(var(--spacing) * 3.5)}.gap-4{gap:calc(var(--spacing) * 4)}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.overflow-hidden{overflow:hidden}.rounded-4xl{border-radius:var(--radius-4xl)}.rounded-\\[min\\(var\\(--radius-md\\)\\,8px\\)\\]{border-radius:min(var(--radius-md), 8px)}.rounded-\\[min\\(var\\(--radius-md\\)\\,10px\\)\\]{border-radius:min(var(--radius-md), 10px)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-t-xl{border-top-left-radius:calc(var(--radius) + 4px);border-top-right-radius:calc(var(--radius) + 4px)}.rounded-b-xl{border-bottom-right-radius:calc(var(--radius) + 4px);border-bottom-left-radius:calc(var(--radius) + 4px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-amber-200{border-color:var(--color-amber-200)}.border-background{border-color:var(--background)}.border-border{border-color:var(--border)}.border-transparent{border-color:#0000}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-background{background-color:var(--background)}.bg-black{background-color:var(--color-black)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-border{background-color:var(--border)}.bg-card{background-color:var(--card)}.bg-destructive,.bg-destructive\\/10{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.bg-destructive\\/10{background-color:color-mix(in oklab, var(--destructive) 10%, transparent)}}.bg-green-600{background-color:var(--color-green-600)}.bg-muted,.bg-muted\\/50{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\/50{background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}.bg-muted\\/80{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\/80{background-color:color-mix(in oklab, var(--muted) 80%, transparent)}}.bg-popover{background-color:var(--popover)}.bg-primary{background-color:var(--primary)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-600{background-color:var(--color-red-600)}.bg-secondary{background-color:var(--secondary)}.bg-transparent{background-color:#0000}.bg-clip-padding{background-clip:padding-box}.p-0{padding:calc(var(--spacing) * 0)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0{padding-block:calc(var(--spacing) * 0)}.py-0\\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\\.5{padding-block:calc(var(--spacing) * 3.5)}.py-6{padding-block:calc(var(--spacing) * 6)}.pt-3{padding-top:calc(var(--spacing) * 3)}.text-left{text-align:left}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.whitespace-nowrap{white-space:nowrap}.text-amber-800{color:var(--color-amber-800)}.text-card-foreground{color:var(--card-foreground)}.text-destructive{color:var(--destructive)}.text-foreground{color:var(--foreground)}.text-muted-foreground{color:var(--muted-foreground)}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-white{color:var(--color-white)}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-60{opacity:.6}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-foreground,.ring-foreground\\/10{--tw-ring-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.ring-foreground\\/10{--tw-ring-color:color-mix(in oklab, var(--foreground) 10%, transparent)}}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.group-focus-within\\/marker\\:pointer-events-auto:is(:where(.group\\/marker):focus-within *){pointer-events:auto}.group-focus-within\\/marker\\:opacity-100:is(:where(.group\\/marker):focus-within *){opacity:1}@media (hover:hover){.group-hover\\/marker\\:pointer-events-auto:is(:where(.group\\/marker):hover *){pointer-events:auto}.group-hover\\/marker\\:opacity-100:is(:where(.group\\/marker):hover *){opacity:1}}.group-has-\\[\\[data-slot\\=item-description\\]\\]\\/item\\:translate-y-0\\.5:is(:where(.group\\/item):has([data-slot=item-description]) *){--tw-translate-y:calc(var(--spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.group-has-\\[\\[data-slot\\=item-description\\]\\]\\/item\\:self-start:is(:where(.group\\/item):has([data-slot=item-description]) *){align-self:flex-start}.group-data-\\[disabled\\=true\\]\\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\\[disabled\\=true\\]\\:opacity-50:is(:where(.group)[data-disabled=true] *){opacity:.5}.group-data-\\[size\\=sm\\]\\/card\\:px-4:is(:where(.group\\/card)[data-size=sm] *){padding-inline:calc(var(--spacing) * 4)}.group-data-\\[size\\=sm\\]\\/card\\:text-sm:is(:where(.group\\/card)[data-size=sm] *){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.group-data-\\[size\\=sm\\]\\/item\\:size-8:is(:where(.group\\/item)[data-size=sm] *){width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.group-data-\\[size\\=xs\\]\\/item\\:size-6:is(:where(.group\\/item)[data-size=xs] *){width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.group-data-\\[size\\=xs\\]\\/item\\:gap-0:is(:where(.group\\/item)[data-size=xs] *){gap:calc(var(--spacing) * 0)}.group-data-\\[size\\=xs\\]\\/item\\:text-xs:is(:where(.group\\/item)[data-size=xs] *){font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.peer-disabled\\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}@media (hover:hover){.hover\\:scale-125:hover{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\\:bg-amber-600:hover{background-color:var(--color-amber-600)}.hover\\:bg-blue-600:hover{background-color:var(--color-blue-600)}.hover\\:bg-destructive:hover,.hover\\:bg-destructive\\/20:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/20:hover{background-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.hover\\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\\:bg-muted:hover{background-color:var(--muted)}.hover\\:bg-primary\\/80:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-primary\\/80:hover{background-color:color-mix(in oklab, var(--primary) 80%, transparent)}}.hover\\:bg-secondary\\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-secondary\\/80:hover{background-color:color-mix(in oklab, var(--secondary) 80%, transparent)}}.hover\\:text-foreground:hover{color:var(--foreground)}.hover\\:text-muted-foreground:hover{color:var(--muted-foreground)}.hover\\:underline:hover{text-decoration-line:underline}}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:border-destructive\\/40:focus-visible{border-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:border-destructive\\/40:focus-visible{border-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.focus-visible\\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\\:ring-\\[3px\\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\\:ring-destructive\\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-destructive\\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.focus-visible\\:ring-ring\\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-ring\\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.disabled\\:pointer-events-none:disabled{pointer-events:none}.disabled\\:opacity-50:disabled{opacity:.5}:where([data-slot=button-group]) .in-data-\\[slot\\=button-group\\]\\:rounded-md{border-radius:calc(var(--radius) - 2px)}.has-data-\\[icon\\=inline-end\\]\\:pe-1\\.5:has([data-icon=inline-end]){padding-inline-end:calc(var(--spacing) * 1.5)}.has-data-\\[icon\\=inline-end\\]\\:pe-2:has([data-icon=inline-end]){padding-inline-end:calc(var(--spacing) * 2)}.has-data-\\[icon\\=inline-end\\]\\:pe-3:has([data-icon=inline-end]){padding-inline-end:calc(var(--spacing) * 3)}.has-data-\\[icon\\=inline-start\\]\\:ps-1\\.5:has([data-icon=inline-start]){padding-inline-start:calc(var(--spacing) * 1.5)}.has-data-\\[icon\\=inline-start\\]\\:ps-2:has([data-icon=inline-start]){padding-inline-start:calc(var(--spacing) * 2)}.has-data-\\[icon\\=inline-start\\]\\:ps-3:has([data-icon=inline-start]){padding-inline-start:calc(var(--spacing) * 3)}.has-data-\\[slot\\=card-action\\]\\:grid-cols-\\[1fr_auto\\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-data-\\[slot\\=card-description\\]\\:grid-rows-\\[auto_auto\\]:has([data-slot=card-description]){grid-template-rows:auto auto}.has-\\[\\[data-size\\=sm\\]\\]\\:gap-2\\.5:has([data-size=sm]){gap:calc(var(--spacing) * 2.5)}.has-\\[\\[data-size\\=xs\\]\\]\\:gap-2:has([data-size=xs]){gap:calc(var(--spacing) * 2)}.has-\\[\\>img\\:first-child\\]\\:pt-0:has(>img:first-child){padding-top:calc(var(--spacing) * 0)}.aria-expanded\\:bg-muted[aria-expanded=true]{background-color:var(--muted)}.aria-expanded\\:bg-secondary[aria-expanded=true]{background-color:var(--secondary)}.aria-expanded\\:text-foreground[aria-expanded=true]{color:var(--foreground)}.aria-expanded\\:text-secondary-foreground[aria-expanded=true]{color:var(--secondary-foreground)}.aria-invalid\\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\\:ring-\\[3px\\][aria-invalid=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.aria-invalid\\:ring-destructive\\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\\:ring-destructive\\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.data-\\[orientation\\=horizontal\\]\\:h-px[data-orientation=horizontal]{height:1px}.data-\\[orientation\\=horizontal\\]\\:w-full[data-orientation=horizontal]{width:100%}.data-\\[orientation\\=vertical\\]\\:w-px[data-orientation=vertical]{width:1px}.data-\\[orientation\\=vertical\\]\\:self-stretch[data-orientation=vertical]{align-self:stretch}.data-\\[size\\=sm\\]\\:gap-4[data-size=sm]{gap:calc(var(--spacing) * 4)}.data-\\[size\\=sm\\]\\:py-4[data-size=sm]{padding-block:calc(var(--spacing) * 4)}@media (min-width:40rem){.sm\\:block{display:block}}.dark\\:border-amber-500\\/30:is(.dark *){border-color:#f99c004d}@supports (color:color-mix(in lab, red, red)){.dark\\:border-amber-500\\/30:is(.dark *){border-color:color-mix(in oklab, var(--color-amber-500) 30%, transparent)}}.dark\\:border-input:is(.dark *){border-color:var(--input)}.dark\\:bg-amber-500\\/10:is(.dark *){background-color:#f99c001a}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-amber-500\\/10:is(.dark *){background-color:color-mix(in oklab, var(--color-amber-500) 10%, transparent)}}.dark\\:bg-destructive\\/20:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-destructive\\/20:is(.dark *){background-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.dark\\:bg-input\\/30:is(.dark *){background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-input\\/30:is(.dark *){background-color:color-mix(in oklab, var(--input) 30%, transparent)}}.dark\\:text-amber-400:is(.dark *){color:var(--color-amber-400)}@media (hover:hover){.dark\\:hover\\:bg-destructive\\/30:is(.dark *):hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-destructive\\/30:is(.dark *):hover{background-color:color-mix(in oklab, var(--destructive) 30%, transparent)}}.dark\\:hover\\:bg-input\\/50:is(.dark *):hover{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-input\\/50:is(.dark *):hover{background-color:color-mix(in oklab, var(--input) 50%, transparent)}}.dark\\:hover\\:bg-muted\\/50:is(.dark *):hover{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-muted\\/50:is(.dark *):hover{background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}}.dark\\:focus-visible\\:ring-destructive\\/40:is(.dark *):focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:focus-visible\\:ring-destructive\\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.dark\\:aria-invalid\\:border-destructive\\/50:is(.dark *)[aria-invalid=true]{border-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:aria-invalid\\:border-destructive\\/50:is(.dark *)[aria-invalid=true]{border-color:color-mix(in oklab, var(--destructive) 50%, transparent)}}.dark\\:aria-invalid\\:ring-destructive\\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:aria-invalid\\:ring-destructive\\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.\\[\\&_img\\]\\:size-full img{width:100%;height:100%}.\\[\\&_img\\]\\:object-cover img{object-fit:cover}.\\[\\&_svg\\]\\:pointer-events-none svg{pointer-events:none}.\\[\\&_svg\\]\\:size-4 svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\\[\\&_svg\\]\\:shrink-0 svg{flex-shrink:0}.\\[\\&\\+\\[data-slot\\=item-content\\]\\]\\:flex-none+[data-slot=item-content]{flex:none}.\\[\\.border-b\\]\\:pb-6.border-b{padding-bottom:calc(var(--spacing) * 6)}.group-data-\\[size\\=sm\\]\\/card\\:\\[\\.border-b\\]\\:pb-4:is(:where(.group\\/card)[data-size=sm] *).border-b{padding-bottom:calc(var(--spacing) * 4)}.\\[\\.border-t\\]\\:pt-6.border-t{padding-top:calc(var(--spacing) * 6)}.group-data-\\[size\\=sm\\]\\/card\\:\\[\\.border-t\\]\\:pt-4:is(:where(.group\\/card)[data-size=sm] *).border-t{padding-top:calc(var(--spacing) * 4)}.\\[a\\]\\:transition-colors:is(a){transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.\\[a\\]\\:hover\\:bg-destructive\\/20:is(a):hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.\\[a\\]\\:hover\\:bg-destructive\\/20:is(a):hover{background-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.\\[a\\]\\:hover\\:bg-muted:is(a):hover{background-color:var(--muted)}.\\[a\\]\\:hover\\:bg-primary\\/80:is(a):hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.\\[a\\]\\:hover\\:bg-primary\\/80:is(a):hover{background-color:color-mix(in oklab, var(--primary) 80%, transparent)}}.\\[a\\]\\:hover\\:bg-secondary\\/80:is(a):hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.\\[a\\]\\:hover\\:bg-secondary\\/80:is(a):hover{background-color:color-mix(in oklab, var(--secondary) 80%, transparent)}}.\\[a\\]\\:hover\\:text-muted-foreground:is(a):hover{color:var(--muted-foreground)}}:is(.\\*\\:\\[img\\:first-child\\]\\:rounded-t-xl>*):is(img:first-child){border-top-left-radius:calc(var(--radius) + 4px);border-top-right-radius:calc(var(--radius) + 4px)}:is(.\\*\\:\\[img\\:last-child\\]\\:rounded-b-xl>*):is(img:last-child){border-bottom-right-radius:calc(var(--radius) + 4px);border-bottom-left-radius:calc(var(--radius) + 4px)}.\\[\\&\\>a\\]\\:underline>a{text-decoration-line:underline}.\\[\\&\\>a\\]\\:underline-offset-4>a{text-underline-offset:4px}.\\[\\&\\>a\\:hover\\]\\:text-primary>a:hover{color:var(--primary)}.\\[\\&\\>svg\\]\\:pointer-events-none>svg{pointer-events:none}.\\[\\&\\>svg\\]\\:size-3\\!>svg{width:calc(var(--spacing) * 3)!important;height:calc(var(--spacing) * 3)!important}[data-slot=dropdown-menu-content] .\\[\\[data-slot\\=dropdown-menu-content\\]_\\&\\]\\:p-0{padding:calc(var(--spacing) * 0)}}:root{--radius:.625rem;--background:oklch(100% 0 0);--foreground:oklch(14.5% 0 0);--card:oklch(100% 0 0);--card-foreground:oklch(14.5% 0 0);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.5% 0 0);--primary:oklch(20.5% 0 0);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(97% 0 0);--secondary-foreground:oklch(20.5% 0 0);--muted:oklch(97% 0 0);--muted-foreground:oklch(55.6% 0 0);--accent:oklch(97% 0 0);--accent-foreground:oklch(20.5% 0 0);--destructive:oklch(57.7% .245 27.325);--border:oklch(92.2% 0 0);--input:oklch(92.2% 0 0);--ring:oklch(70.8% 0 0)}.dark{--background:oklch(14.5% 0 0);--foreground:oklch(98.5% 0 0);--card:oklch(20.5% 0 0);--card-foreground:oklch(98.5% 0 0);--popover:oklch(20.5% 0 0);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(92.2% 0 0);--primary-foreground:oklch(20.5% 0 0);--secondary:oklch(26.9% 0 0);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(26.9% 0 0);--muted-foreground:oklch(70.8% 0 0);--accent:oklch(26.9% 0 0);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.6% 0 0)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-duration{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}`;
|
|
7
|
+
function injectViewer360Styles() {
|
|
8
|
+
if (typeof document === "undefined") return;
|
|
9
|
+
if (document.getElementById(VIEWER_360_STYLE_ID)) return;
|
|
10
|
+
const style = document.createElement("style");
|
|
11
|
+
style.id = VIEWER_360_STYLE_ID;
|
|
12
|
+
style.textContent = viewer360Styles;
|
|
13
|
+
document.head.appendChild(style);
|
|
14
|
+
}
|
|
15
|
+
injectViewer360Styles();
|
|
16
|
+
|
|
3
17
|
// src/feature/Viewer360.tsx
|
|
4
|
-
import { useEffect as useEffect2, useMemo as useMemo2, useState as
|
|
18
|
+
import { useEffect as useEffect2, useMemo as useMemo2, useState as useState2 } from "react";
|
|
5
19
|
|
|
6
20
|
// src/constants/viewer360Labels.ts
|
|
7
21
|
var defaultViewer360Labels = {
|
|
@@ -577,73 +591,20 @@ function toViewer360Hotspots(markers, mapData) {
|
|
|
577
591
|
}));
|
|
578
592
|
}
|
|
579
593
|
|
|
580
|
-
// src/components/ui/
|
|
594
|
+
// src/components/ui/Item/index.tsx
|
|
581
595
|
import { cva as cva2 } from "class-variance-authority";
|
|
582
596
|
import { Slot as Slot2 } from "radix-ui";
|
|
583
|
-
import { jsx as jsx5 } from "react/jsx-runtime";
|
|
584
|
-
var buttonVariants = cva2(
|
|
585
|
-
"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-md border border-transparent bg-clip-padding text-sm font-medium focus-visible:ring-[3px] aria-invalid:ring-[3px] inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none",
|
|
586
|
-
{
|
|
587
|
-
variants: {
|
|
588
|
-
variant: {
|
|
589
|
-
default: "bg-primary text-primary-foreground hover:bg-primary/80",
|
|
590
|
-
outline: "border-border bg-background hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground shadow-xs",
|
|
591
|
-
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
|
|
592
|
-
ghost: "hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground",
|
|
593
|
-
destructive: "bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30",
|
|
594
|
-
link: "text-primary underline-offset-4 hover:underline"
|
|
595
|
-
},
|
|
596
|
-
size: {
|
|
597
|
-
default: "h-9 gap-1.5 px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pe-2 has-data-[icon=inline-start]:ps-2",
|
|
598
|
-
xs: "h-6 gap-1 rounded-[min(var(--radius-md),8px)] px-2 text-xs in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pe-1.5 has-data-[icon=inline-start]:ps-1.5",
|
|
599
|
-
sm: "h-8 gap-1 rounded-[min(var(--radius-md),10px)] px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pe-1.5 has-data-[icon=inline-start]:ps-1.5",
|
|
600
|
-
lg: "h-10 gap-1.5 px-2.5 has-data-[icon=inline-end]:pe-3 has-data-[icon=inline-start]:ps-3",
|
|
601
|
-
icon: "size-9",
|
|
602
|
-
"icon-xs": "size-6 rounded-[min(var(--radius-md),8px)] in-data-[slot=button-group]:rounded-md",
|
|
603
|
-
"icon-sm": "size-8 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-md",
|
|
604
|
-
"icon-lg": "size-10"
|
|
605
|
-
}
|
|
606
|
-
},
|
|
607
|
-
defaultVariants: {
|
|
608
|
-
variant: "default",
|
|
609
|
-
size: "default"
|
|
610
|
-
}
|
|
611
|
-
}
|
|
612
|
-
);
|
|
613
|
-
function Button({
|
|
614
|
-
className,
|
|
615
|
-
variant = "default",
|
|
616
|
-
size = "default",
|
|
617
|
-
asChild = false,
|
|
618
|
-
...props
|
|
619
|
-
}) {
|
|
620
|
-
const Comp = asChild ? Slot2.Root : "button";
|
|
621
|
-
return /* @__PURE__ */ jsx5(
|
|
622
|
-
Comp,
|
|
623
|
-
{
|
|
624
|
-
"data-slot": "button",
|
|
625
|
-
"data-variant": variant,
|
|
626
|
-
"data-size": size,
|
|
627
|
-
className: cn(buttonVariants({ variant, size, className })),
|
|
628
|
-
...props
|
|
629
|
-
}
|
|
630
|
-
);
|
|
631
|
-
}
|
|
632
|
-
|
|
633
|
-
// src/components/ui/Item/index.tsx
|
|
634
|
-
import { cva as cva3 } from "class-variance-authority";
|
|
635
|
-
import { Slot as Slot3 } from "radix-ui";
|
|
636
597
|
|
|
637
598
|
// src/components/ui/Separator/index.tsx
|
|
638
599
|
import { Separator as SeparatorPrimitive } from "radix-ui";
|
|
639
|
-
import { jsx as
|
|
600
|
+
import { jsx as jsx5 } from "react/jsx-runtime";
|
|
640
601
|
function Separator({
|
|
641
602
|
className,
|
|
642
603
|
orientation = "horizontal",
|
|
643
604
|
decorative = true,
|
|
644
605
|
...props
|
|
645
606
|
}) {
|
|
646
|
-
return /* @__PURE__ */
|
|
607
|
+
return /* @__PURE__ */ jsx5(
|
|
647
608
|
SeparatorPrimitive.Root,
|
|
648
609
|
{
|
|
649
610
|
"data-slot": "separator",
|
|
@@ -659,8 +620,8 @@ function Separator({
|
|
|
659
620
|
}
|
|
660
621
|
|
|
661
622
|
// src/components/ui/Item/index.tsx
|
|
662
|
-
import { jsx as
|
|
663
|
-
var itemVariants =
|
|
623
|
+
import { jsx as jsx6 } from "react/jsx-runtime";
|
|
624
|
+
var itemVariants = cva2(
|
|
664
625
|
"[a]:hover:bg-muted rounded-md border text-sm w-full group/item focus-visible:border-ring focus-visible:ring-ring/50 flex items-center flex-wrap outline-none transition-colors duration-100 focus-visible:ring-[3px] [a]:transition-colors",
|
|
665
626
|
{
|
|
666
627
|
variants: {
|
|
@@ -688,8 +649,8 @@ function Item({
|
|
|
688
649
|
asChild = false,
|
|
689
650
|
...props
|
|
690
651
|
}) {
|
|
691
|
-
const Comp = asChild ?
|
|
692
|
-
return /* @__PURE__ */
|
|
652
|
+
const Comp = asChild ? Slot2.Root : "div";
|
|
653
|
+
return /* @__PURE__ */ jsx6(
|
|
693
654
|
Comp,
|
|
694
655
|
{
|
|
695
656
|
"data-slot": "item",
|
|
@@ -700,7 +661,7 @@ function Item({
|
|
|
700
661
|
}
|
|
701
662
|
);
|
|
702
663
|
}
|
|
703
|
-
var itemMediaVariants =
|
|
664
|
+
var itemMediaVariants = cva2(
|
|
704
665
|
"gap-2 group-has-[[data-slot=item-description]]/item:translate-y-0.5 group-has-[[data-slot=item-description]]/item:self-start flex shrink-0 items-center justify-center [&_svg]:pointer-events-none",
|
|
705
666
|
{
|
|
706
667
|
variants: {
|
|
@@ -716,7 +677,7 @@ var itemMediaVariants = cva3(
|
|
|
716
677
|
}
|
|
717
678
|
);
|
|
718
679
|
function ItemContent({ className, ...props }) {
|
|
719
|
-
return /* @__PURE__ */
|
|
680
|
+
return /* @__PURE__ */ jsx6(
|
|
720
681
|
"div",
|
|
721
682
|
{
|
|
722
683
|
"data-slot": "item-content",
|
|
@@ -726,7 +687,7 @@ function ItemContent({ className, ...props }) {
|
|
|
726
687
|
);
|
|
727
688
|
}
|
|
728
689
|
function ItemTitle({ className, ...props }) {
|
|
729
|
-
return /* @__PURE__ */
|
|
690
|
+
return /* @__PURE__ */ jsx6(
|
|
730
691
|
"div",
|
|
731
692
|
{
|
|
732
693
|
"data-slot": "item-title",
|
|
@@ -736,7 +697,7 @@ function ItemTitle({ className, ...props }) {
|
|
|
736
697
|
);
|
|
737
698
|
}
|
|
738
699
|
function ItemDescription({ className, ...props }) {
|
|
739
|
-
return /* @__PURE__ */
|
|
700
|
+
return /* @__PURE__ */ jsx6(
|
|
740
701
|
"p",
|
|
741
702
|
{
|
|
742
703
|
"data-slot": "item-description",
|
|
@@ -749,11 +710,10 @@ function ItemDescription({ className, ...props }) {
|
|
|
749
710
|
);
|
|
750
711
|
}
|
|
751
712
|
function ItemActions({ className, ...props }) {
|
|
752
|
-
return /* @__PURE__ */
|
|
713
|
+
return /* @__PURE__ */ jsx6("div", { "data-slot": "item-actions", className: cn("gap-2 flex items-center", className), ...props });
|
|
753
714
|
}
|
|
754
715
|
|
|
755
716
|
// src/feature/Viewer360MarkerPin.tsx
|
|
756
|
-
import { useState as useState2 } from "react";
|
|
757
717
|
import { Trash2 } from "lucide-react";
|
|
758
718
|
|
|
759
719
|
// src/constants/viewer360MarkerLabels.ts
|
|
@@ -761,38 +721,61 @@ var defaultViewer360MarkerPinLabels = {
|
|
|
761
721
|
delete: "Remove marker"
|
|
762
722
|
};
|
|
763
723
|
|
|
764
|
-
// src/components/ui/
|
|
765
|
-
import {
|
|
766
|
-
import {
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
724
|
+
// src/components/ui/Button/index.tsx
|
|
725
|
+
import { cva as cva3 } from "class-variance-authority";
|
|
726
|
+
import { Slot as Slot3 } from "radix-ui";
|
|
727
|
+
import { jsx as jsx7 } from "react/jsx-runtime";
|
|
728
|
+
var buttonVariants = cva3(
|
|
729
|
+
"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-md border border-transparent bg-clip-padding text-sm font-medium focus-visible:ring-[3px] aria-invalid:ring-[3px] inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none",
|
|
730
|
+
{
|
|
731
|
+
variants: {
|
|
732
|
+
variant: {
|
|
733
|
+
default: "bg-primary text-primary-foreground hover:bg-primary/80",
|
|
734
|
+
outline: "border-border bg-background hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground shadow-xs",
|
|
735
|
+
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
|
|
736
|
+
ghost: "hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground",
|
|
737
|
+
destructive: "bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30",
|
|
738
|
+
link: "text-primary underline-offset-4 hover:underline"
|
|
739
|
+
},
|
|
740
|
+
size: {
|
|
741
|
+
default: "h-9 gap-1.5 px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pe-2 has-data-[icon=inline-start]:ps-2",
|
|
742
|
+
xs: "h-6 gap-1 rounded-[min(var(--radius-md),8px)] px-2 text-xs in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pe-1.5 has-data-[icon=inline-start]:ps-1.5",
|
|
743
|
+
sm: "h-8 gap-1 rounded-[min(var(--radius-md),10px)] px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pe-1.5 has-data-[icon=inline-start]:ps-1.5",
|
|
744
|
+
lg: "h-10 gap-1.5 px-2.5 has-data-[icon=inline-end]:pe-3 has-data-[icon=inline-start]:ps-3",
|
|
745
|
+
icon: "size-9",
|
|
746
|
+
"icon-xs": "size-6 rounded-[min(var(--radius-md),8px)] in-data-[slot=button-group]:rounded-md",
|
|
747
|
+
"icon-sm": "size-8 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-md",
|
|
748
|
+
"icon-lg": "size-10"
|
|
749
|
+
}
|
|
750
|
+
},
|
|
751
|
+
defaultVariants: {
|
|
752
|
+
variant: "default",
|
|
753
|
+
size: "default"
|
|
754
|
+
}
|
|
755
|
+
}
|
|
756
|
+
);
|
|
757
|
+
function Button({
|
|
774
758
|
className,
|
|
775
|
-
|
|
776
|
-
|
|
759
|
+
variant = "default",
|
|
760
|
+
size = "default",
|
|
761
|
+
asChild = false,
|
|
777
762
|
...props
|
|
778
763
|
}) {
|
|
779
|
-
|
|
780
|
-
|
|
764
|
+
const Comp = asChild ? Slot3.Root : "button";
|
|
765
|
+
return /* @__PURE__ */ jsx7(
|
|
766
|
+
Comp,
|
|
781
767
|
{
|
|
782
|
-
"data-slot": "
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
className: cn(
|
|
786
|
-
"bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=start]:slide-in-from-end-2 data-[side=end]:slide-in-from-start-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 flex flex-col gap-4 rounded-md p-4 text-sm shadow-md ring-1 duration-100 z-50 w-72 origin-(--radix-popover-content-transform-origin) outline-hidden",
|
|
787
|
-
className
|
|
788
|
-
),
|
|
768
|
+
"data-slot": "button",
|
|
769
|
+
"data-variant": variant,
|
|
770
|
+
"data-size": size,
|
|
771
|
+
className: cn(buttonVariants({ variant, size, className })),
|
|
789
772
|
...props
|
|
790
773
|
}
|
|
791
|
-
)
|
|
774
|
+
);
|
|
792
775
|
}
|
|
793
776
|
|
|
794
777
|
// src/feature/Viewer360MarkerPin.tsx
|
|
795
|
-
import { jsx as
|
|
778
|
+
import { jsx as jsx8, jsxs } from "react/jsx-runtime";
|
|
796
779
|
function Viewer360MarkerPin({
|
|
797
780
|
marker,
|
|
798
781
|
hotspot,
|
|
@@ -800,23 +783,26 @@ function Viewer360MarkerPin({
|
|
|
800
783
|
topPercent,
|
|
801
784
|
onDelete,
|
|
802
785
|
isDeletePending = false,
|
|
786
|
+
onClick,
|
|
803
787
|
renderTag,
|
|
804
788
|
classNames,
|
|
805
789
|
labels
|
|
806
790
|
}) {
|
|
807
|
-
const [isOpen, setIsOpen] = useState2(false);
|
|
808
791
|
const deleteLabel = labels?.delete ?? defaultViewer360MarkerPinLabels.delete;
|
|
809
|
-
|
|
792
|
+
const showTooltip = Boolean(marker.title || marker.description || onDelete || renderTag);
|
|
793
|
+
return /* @__PURE__ */ jsxs(
|
|
810
794
|
Item,
|
|
811
795
|
{
|
|
812
796
|
size: "xs",
|
|
813
797
|
variant: "default",
|
|
814
|
-
className: cn(
|
|
798
|
+
className: cn(
|
|
799
|
+
viewer360MarkerPinClassNames.root,
|
|
800
|
+
classNames?.root,
|
|
801
|
+
"group/marker w-auto border-transparent p-0"
|
|
802
|
+
),
|
|
815
803
|
style: { left: `${leftPercent}%`, top: `${topPercent}%` },
|
|
816
|
-
onMouseEnter: () => setIsOpen(true),
|
|
817
|
-
onMouseLeave: () => setIsOpen(false),
|
|
818
804
|
children: [
|
|
819
|
-
/* @__PURE__ */
|
|
805
|
+
/* @__PURE__ */ jsx8(
|
|
820
806
|
Badge,
|
|
821
807
|
{
|
|
822
808
|
variant: "destructive",
|
|
@@ -824,7 +810,7 @@ function Viewer360MarkerPin({
|
|
|
824
810
|
"aria-hidden": "true"
|
|
825
811
|
}
|
|
826
812
|
),
|
|
827
|
-
/* @__PURE__ */
|
|
813
|
+
/* @__PURE__ */ jsx8(
|
|
828
814
|
Button,
|
|
829
815
|
{
|
|
830
816
|
type: "button",
|
|
@@ -835,16 +821,18 @@ function Viewer360MarkerPin({
|
|
|
835
821
|
classNames?.dot,
|
|
836
822
|
"size-4 min-h-4 min-w-4 rounded-full border-2 border-background bg-destructive p-0 shadow-md hover:scale-125 hover:bg-destructive"
|
|
837
823
|
),
|
|
838
|
-
"aria-label": marker.title
|
|
824
|
+
"aria-label": marker.title,
|
|
825
|
+
onClick
|
|
839
826
|
}
|
|
840
|
-
)
|
|
841
|
-
/* @__PURE__ */
|
|
842
|
-
|
|
827
|
+
),
|
|
828
|
+
showTooltip && /* @__PURE__ */ jsx8(
|
|
829
|
+
"div",
|
|
843
830
|
{
|
|
844
|
-
className: cn(
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
831
|
+
className: cn(
|
|
832
|
+
viewer360MarkerPinClassNames.tooltip,
|
|
833
|
+
classNames?.tooltip,
|
|
834
|
+
"pointer-events-none opacity-0 transition-opacity duration-150 group-hover/marker:pointer-events-auto group-hover/marker:opacity-100 group-focus-within/marker:pointer-events-auto group-focus-within/marker:opacity-100"
|
|
835
|
+
),
|
|
848
836
|
children: /* @__PURE__ */ jsxs(
|
|
849
837
|
Item,
|
|
850
838
|
{
|
|
@@ -853,11 +841,11 @@ function Viewer360MarkerPin({
|
|
|
853
841
|
className: cn(viewer360MarkerPinClassNames.tooltipHeader, classNames?.tooltipHeader, "w-full border-transparent"),
|
|
854
842
|
children: [
|
|
855
843
|
/* @__PURE__ */ jsxs(ItemContent, { className: cn(viewer360MarkerPinClassNames.tooltipBody, classNames?.tooltipBody), children: [
|
|
856
|
-
/* @__PURE__ */
|
|
844
|
+
/* @__PURE__ */ jsx8(ItemTitle, { className: cn(viewer360MarkerPinClassNames.tooltipTitle, classNames?.tooltipTitle), children: marker.title }),
|
|
857
845
|
renderTag?.({ marker, hotspot }),
|
|
858
|
-
marker.description && /* @__PURE__ */
|
|
846
|
+
marker.description && /* @__PURE__ */ jsx8(ItemDescription, { className: cn(viewer360MarkerPinClassNames.tooltipDescription, classNames?.tooltipDescription), children: marker.description })
|
|
859
847
|
] }),
|
|
860
|
-
onDelete && /* @__PURE__ */
|
|
848
|
+
onDelete && /* @__PURE__ */ jsx8(ItemActions, { children: /* @__PURE__ */ jsx8(
|
|
861
849
|
Button,
|
|
862
850
|
{
|
|
863
851
|
variant: "ghost",
|
|
@@ -869,7 +857,7 @@ function Viewer360MarkerPin({
|
|
|
869
857
|
event.stopPropagation();
|
|
870
858
|
onDelete(marker.id);
|
|
871
859
|
},
|
|
872
|
-
children: /* @__PURE__ */
|
|
860
|
+
children: /* @__PURE__ */ jsx8(Trash2, { className: "size-4" })
|
|
873
861
|
}
|
|
874
862
|
) })
|
|
875
863
|
]
|
|
@@ -879,11 +867,11 @@ function Viewer360MarkerPin({
|
|
|
879
867
|
)
|
|
880
868
|
]
|
|
881
869
|
}
|
|
882
|
-
)
|
|
870
|
+
);
|
|
883
871
|
}
|
|
884
872
|
|
|
885
873
|
// src/feature/Viewer360HotspotOverlay.tsx
|
|
886
|
-
import { jsx as
|
|
874
|
+
import { jsx as jsx9 } from "react/jsx-runtime";
|
|
887
875
|
function Viewer360HotspotOverlay({
|
|
888
876
|
hotspot,
|
|
889
877
|
leftPercent,
|
|
@@ -893,45 +881,30 @@ function Viewer360HotspotOverlay({
|
|
|
893
881
|
onHotspotClick
|
|
894
882
|
}) {
|
|
895
883
|
if (renderHotspot) {
|
|
896
|
-
return /* @__PURE__ */
|
|
897
|
-
}
|
|
898
|
-
if (hotspotPin) {
|
|
899
|
-
const marker = hotspotPin.getMarker?.(hotspot) ?? hotspotToViewer360Marker(hotspot);
|
|
900
|
-
return /* @__PURE__ */ jsx10(
|
|
901
|
-
Viewer360MarkerPin,
|
|
902
|
-
{
|
|
903
|
-
marker,
|
|
904
|
-
hotspot,
|
|
905
|
-
leftPercent,
|
|
906
|
-
topPercent,
|
|
907
|
-
onDelete: hotspotPin.onDelete,
|
|
908
|
-
isDeletePending: hotspotPin.deletingMarkerId === hotspot.id,
|
|
909
|
-
renderTag: hotspotPin.renderTag,
|
|
910
|
-
classNames: hotspotPin.classNames,
|
|
911
|
-
labels: hotspotPin.labels
|
|
912
|
-
}
|
|
913
|
-
);
|
|
884
|
+
return /* @__PURE__ */ jsx9(Item, { size: "xs", variant: "default", className: "pointer-events-auto w-auto border-transparent p-0", children: renderHotspot({ hotspot, leftPercent, topPercent }) });
|
|
914
885
|
}
|
|
915
|
-
|
|
916
|
-
|
|
886
|
+
const marker = hotspotPin?.getMarker?.(hotspot) ?? hotspotToViewer360Marker(hotspot);
|
|
887
|
+
return /* @__PURE__ */ jsx9(
|
|
888
|
+
Viewer360MarkerPin,
|
|
917
889
|
{
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
890
|
+
marker,
|
|
891
|
+
hotspot,
|
|
892
|
+
leftPercent,
|
|
893
|
+
topPercent,
|
|
894
|
+
onDelete: hotspotPin?.onDelete,
|
|
895
|
+
isDeletePending: hotspotPin?.deletingMarkerId === hotspot.id,
|
|
896
|
+
renderTag: hotspotPin?.renderTag,
|
|
897
|
+
classNames: hotspotPin?.classNames,
|
|
898
|
+
labels: hotspotPin?.labels,
|
|
899
|
+
onClick: onHotspotClick ? (event) => onHotspotClick(hotspot, event) : void 0
|
|
927
900
|
}
|
|
928
901
|
);
|
|
929
902
|
}
|
|
930
903
|
|
|
931
904
|
// src/components/ui/Label/index.tsx
|
|
932
|
-
import { jsx as
|
|
905
|
+
import { jsx as jsx10 } from "react/jsx-runtime";
|
|
933
906
|
function Label({ className, ...props }) {
|
|
934
|
-
return /* @__PURE__ */
|
|
907
|
+
return /* @__PURE__ */ jsx10(
|
|
935
908
|
"label",
|
|
936
909
|
{
|
|
937
910
|
"data-slot": "label",
|
|
@@ -946,13 +919,13 @@ function Label({ className, ...props }) {
|
|
|
946
919
|
|
|
947
920
|
// src/components/ui/Spinner/index.tsx
|
|
948
921
|
import { Loader2Icon } from "lucide-react";
|
|
949
|
-
import { jsx as
|
|
922
|
+
import { jsx as jsx11 } from "react/jsx-runtime";
|
|
950
923
|
function Spinner({ className, ...props }) {
|
|
951
|
-
return /* @__PURE__ */
|
|
924
|
+
return /* @__PURE__ */ jsx11(Loader2Icon, { role: "status", "aria-label": "Loading", className: cn("size-4 animate-spin", className), ...props });
|
|
952
925
|
}
|
|
953
926
|
|
|
954
927
|
// src/feature/Viewer360LoadingOverlay.tsx
|
|
955
|
-
import { jsx as
|
|
928
|
+
import { jsx as jsx12, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
956
929
|
function Viewer360LoadingOverlay({ className, textClassName, label }) {
|
|
957
930
|
return /* @__PURE__ */ jsxs2(
|
|
958
931
|
Item,
|
|
@@ -961,8 +934,8 @@ function Viewer360LoadingOverlay({ className, textClassName, label }) {
|
|
|
961
934
|
variant: "muted",
|
|
962
935
|
className: cn("pointer-events-none w-auto justify-center border-transparent bg-muted/80", className),
|
|
963
936
|
children: [
|
|
964
|
-
/* @__PURE__ */
|
|
965
|
-
/* @__PURE__ */
|
|
937
|
+
/* @__PURE__ */ jsx12(Spinner, { className: "size-5 text-muted-foreground" }),
|
|
938
|
+
/* @__PURE__ */ jsx12(Label, { className: cn("font-normal text-muted-foreground", textClassName), children: label })
|
|
966
939
|
]
|
|
967
940
|
}
|
|
968
941
|
);
|
|
@@ -970,7 +943,7 @@ function Viewer360LoadingOverlay({ className, textClassName, label }) {
|
|
|
970
943
|
|
|
971
944
|
// src/feature/Viewer360Toolbar.tsx
|
|
972
945
|
import { Crosshair, Minus, Plus, RotateCcw, ZoomIn } from "lucide-react";
|
|
973
|
-
import { Fragment, jsx as
|
|
946
|
+
import { Fragment, jsx as jsx13, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
974
947
|
function Viewer360Toolbar({
|
|
975
948
|
showDragHint,
|
|
976
949
|
showHotspotModeControl,
|
|
@@ -988,30 +961,30 @@ function Viewer360Toolbar({
|
|
|
988
961
|
onResetView
|
|
989
962
|
}) {
|
|
990
963
|
return /* @__PURE__ */ jsxs3(CardFooter, { className: cn(viewer360ClassNames.toolbar, "gap-2 border-t px-4 py-3 pt-3"), children: [
|
|
991
|
-
showDragHint && /* @__PURE__ */
|
|
964
|
+
showDragHint && /* @__PURE__ */ jsx13(Label, { className: cn(viewer360ClassNames.dragHint, "font-normal text-muted-foreground"), children: labels.dragHint }),
|
|
992
965
|
/* @__PURE__ */ jsxs3("div", { className: viewer360ClassNames.controls, children: [
|
|
993
966
|
showHotspotModeControl && /* @__PURE__ */ jsxs3(Fragment, { children: [
|
|
994
967
|
/* @__PURE__ */ jsxs3(Button, { variant: isHotspotMode ? "default" : "outline", size: "sm", onClick: () => onHotspotModeChange(!isHotspotMode), children: [
|
|
995
|
-
/* @__PURE__ */
|
|
968
|
+
/* @__PURE__ */ jsx13(Crosshair, { className: "me-1.5 size-4" }),
|
|
996
969
|
labels.addHotspot
|
|
997
970
|
] }),
|
|
998
|
-
/* @__PURE__ */
|
|
971
|
+
/* @__PURE__ */ jsx13(Separator, { orientation: "vertical", className: cn(viewer360ClassNames.divider, "h-6") })
|
|
999
972
|
] }),
|
|
1000
973
|
showZoomControls && /* @__PURE__ */ jsxs3(Fragment, { children: [
|
|
1001
|
-
/* @__PURE__ */
|
|
974
|
+
/* @__PURE__ */ jsx13(Button, { variant: "outline", size: "icon-sm", disabled: zoom <= minZoom, "aria-label": labels.zoomOut, onClick: onZoomOut, children: /* @__PURE__ */ jsx13(Minus, { className: "size-4" }) }),
|
|
1002
975
|
/* @__PURE__ */ jsxs3(Badge, { variant: "outline", className: cn(viewer360ClassNames.zoomDisplay, "h-8 gap-1 px-2 py-1"), children: [
|
|
1003
|
-
/* @__PURE__ */
|
|
976
|
+
/* @__PURE__ */ jsx13(ZoomIn, { className: "size-3 text-muted-foreground" }),
|
|
1004
977
|
labels.zoom(Math.round(zoom * 100))
|
|
1005
978
|
] }),
|
|
1006
|
-
/* @__PURE__ */
|
|
979
|
+
/* @__PURE__ */ jsx13(Button, { variant: "outline", size: "icon-sm", disabled: zoom >= maxZoom, "aria-label": labels.zoomIn, onClick: onZoomIn, children: /* @__PURE__ */ jsx13(Plus, { className: "size-4" }) })
|
|
1007
980
|
] }),
|
|
1008
|
-
showResetControl && /* @__PURE__ */
|
|
981
|
+
showResetControl && /* @__PURE__ */ jsx13(Button, { variant: "outline", size: "icon-sm", disabled: isResetDisabled2, "aria-label": labels.resetView, onClick: onResetView, children: /* @__PURE__ */ jsx13(RotateCcw, { className: "size-4" }) })
|
|
1009
982
|
] })
|
|
1010
983
|
] });
|
|
1011
984
|
}
|
|
1012
985
|
|
|
1013
986
|
// src/feature/Viewer360.tsx
|
|
1014
|
-
import { jsx as
|
|
987
|
+
import { jsx as jsx14, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
1015
988
|
function Viewer360({
|
|
1016
989
|
frames,
|
|
1017
990
|
currentFrameIndex: controlledFrameIndex,
|
|
@@ -1046,8 +1019,8 @@ function Viewer360({
|
|
|
1046
1019
|
const mergedLabels = useMemo2(() => mergeViewer360Labels(labels), [labels]);
|
|
1047
1020
|
const mergedClassNames = useMemo2(() => mergeViewer360ClassNames(classNames), [classNames]);
|
|
1048
1021
|
const themeStyle = useMemo2(() => buildViewer360ThemeStyle(theme), [theme]);
|
|
1049
|
-
const [internalFrameIndex, setInternalFrameIndex] =
|
|
1050
|
-
const [internalHotspotMode, setInternalHotspotMode] =
|
|
1022
|
+
const [internalFrameIndex, setInternalFrameIndex] = useState2(defaultFrameIndex);
|
|
1023
|
+
const [internalHotspotMode, setInternalHotspotMode] = useState2(defaultHotspotMode);
|
|
1051
1024
|
const currentFrameIndex = controlledFrameIndex ?? internalFrameIndex;
|
|
1052
1025
|
const hotspotMode = controlledHotspotMode ?? internalHotspotMode;
|
|
1053
1026
|
function handleFrameChange(index) {
|
|
@@ -1137,11 +1110,11 @@ function Viewer360({
|
|
|
1137
1110
|
onWheel: handleWheel,
|
|
1138
1111
|
onClick: handleCanvasClick,
|
|
1139
1112
|
children: [
|
|
1140
|
-
/* @__PURE__ */
|
|
1113
|
+
/* @__PURE__ */ jsx14("canvas", { ref: canvasRef, className: mergedClassNames.canvas }),
|
|
1141
1114
|
/* @__PURE__ */ jsxs4("div", { className: mergedClassNames.overlay, children: [
|
|
1142
1115
|
currentFrameHotspots.map((hotspot) => {
|
|
1143
1116
|
const position = getHotspotScreenPosition(hotspot);
|
|
1144
|
-
return /* @__PURE__ */
|
|
1117
|
+
return /* @__PURE__ */ jsx14(
|
|
1145
1118
|
Viewer360HotspotOverlay,
|
|
1146
1119
|
{
|
|
1147
1120
|
hotspot,
|
|
@@ -1156,7 +1129,7 @@ function Viewer360({
|
|
|
1156
1129
|
}),
|
|
1157
1130
|
children
|
|
1158
1131
|
] }),
|
|
1159
|
-
!imagesLoaded && (renderLoading ? renderLoading() : /* @__PURE__ */
|
|
1132
|
+
!imagesLoaded && (renderLoading ? renderLoading() : /* @__PURE__ */ jsx14(
|
|
1160
1133
|
Viewer360LoadingOverlay,
|
|
1161
1134
|
{
|
|
1162
1135
|
className: mergedClassNames.loading,
|
|
@@ -1164,7 +1137,7 @@ function Viewer360({
|
|
|
1164
1137
|
label: mergedLabels.loading
|
|
1165
1138
|
}
|
|
1166
1139
|
)),
|
|
1167
|
-
showFrameIndicator && frames.length > 0 && (renderFrameIndicator ? renderFrameIndicator(overlayProps) : /* @__PURE__ */
|
|
1140
|
+
showFrameIndicator && frames.length > 0 && (renderFrameIndicator ? renderFrameIndicator(overlayProps) : /* @__PURE__ */ jsx14(
|
|
1168
1141
|
Viewer360FrameIndicator,
|
|
1169
1142
|
{
|
|
1170
1143
|
className: mergedClassNames.frameIndicator,
|
|
@@ -1175,11 +1148,11 @@ function Viewer360({
|
|
|
1175
1148
|
})
|
|
1176
1149
|
}
|
|
1177
1150
|
)),
|
|
1178
|
-
isHotspotMode && onHotspotAdd && (renderHotspotModeBanner ? renderHotspotModeBanner({ labels: mergedLabels }) : /* @__PURE__ */
|
|
1151
|
+
isHotspotMode && onHotspotAdd && (renderHotspotModeBanner ? renderHotspotModeBanner({ labels: mergedLabels }) : /* @__PURE__ */ jsx14(Viewer360AddModeBanner, { className: mergedClassNames.hotspotModeBanner, label: mergedLabels.hotspotModeActive }))
|
|
1179
1152
|
]
|
|
1180
1153
|
}
|
|
1181
1154
|
),
|
|
1182
|
-
renderToolbar ? renderToolbar(toolbarProps) : showDefaultToolbar ? /* @__PURE__ */
|
|
1155
|
+
renderToolbar ? renderToolbar(toolbarProps) : showDefaultToolbar ? /* @__PURE__ */ jsx14(Viewer360Toolbar, { ...toolbarProps }) : null
|
|
1183
1156
|
] });
|
|
1184
1157
|
}
|
|
1185
1158
|
|