@aiquants/menu-bar 1.17.9 → 1.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.umd.js CHANGED
@@ -1,6 +1,6 @@
1
- (function(C,s){typeof exports=="object"&&typeof module<"u"?s(exports,require("react"),require("react-router-dom")):typeof define=="function"&&define.amd?define(["exports","react","react-router-dom"],s):(C=typeof globalThis<"u"?globalThis:C||self,s(C["@aiquants/menu-bar"]={},C.React,C.ReactRouterDOM))})(this,(function(C,s,Y){"use strict";var L={exports:{}},A={};var Q;function pe(){if(Q)return A;Q=1;var n=Symbol.for("react.transitional.element"),r=Symbol.for("react.fragment");function o(l,u,i){var d=null;if(i!==void 0&&(d=""+i),u.key!==void 0&&(d=""+u.key),"key"in u){i={};for(var p in u)p!=="key"&&(i[p]=u[p])}else i=u;return u=i.ref,{$$typeof:n,type:l,key:d,ref:u!==void 0?u:null,props:i}}return A.Fragment=r,A.jsx=o,A.jsxs=o,A}var I={};var X;function be(){return X||(X=1,process.env.NODE_ENV!=="production"&&(function(){function n(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===w?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case h:return"Fragment";case _:return"Profiler";case E:return"StrictMode";case P:return"Suspense";case U:return"SuspenseList";case D:return"Activity"}if(typeof e=="object")switch(typeof e.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),e.$$typeof){case a:return"Portal";case H:return e.displayName||"Context";case V:return(e._context.displayName||"Context")+".Consumer";case W:var c=e.render;return e=e.displayName,e||(e=c.displayName||c.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Z:return c=e.displayName||null,c!==null?c:n(e.type)||"Memo";case T:c=e._payload,e=e._init;try{return n(e(c))}catch{}}return null}function r(e){return""+e}function o(e){try{r(e);var c=!1}catch{c=!0}if(c){c=console;var b=c.error,v=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return b.call(c,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",v),r(e)}}function l(e){if(e===h)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===T)return"<...>";try{var c=n(e);return c?"<"+c+">":"<...>"}catch{return"<...>"}}function u(){var e=N.A;return e===null?null:e.getOwner()}function i(){return Error("react-stack-top-frame")}function d(e){if(M.call(e,"key")){var c=Object.getOwnPropertyDescriptor(e,"key").get;if(c&&c.isReactWarning)return!1}return e.key!==void 0}function p(e,c){function b(){ue||(ue=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",c))}b.isReactWarning=!0,Object.defineProperty(e,"key",{get:b,configurable:!0})}function x(){var e=n(this.type);return de[e]||(de[e]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),e=this.props.ref,e!==void 0?e:null}function f(e,c,b,v,z,q){var g=b.ref;return e={$$typeof:S,type:e,key:c,props:b,_owner:v},(g!==void 0?g:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:x}):Object.defineProperty(e,"ref",{enumerable:!1,value:null}),e._store={},Object.defineProperty(e._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(e,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(e,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:z}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:q}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function m(e,c,b,v,z,q){var g=c.children;if(g!==void 0)if(v)if(J(g)){for(v=0;v<g.length;v++)k(g[v]);Object.freeze&&Object.freeze(g)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else k(g);if(M.call(c,"key")){g=n(e);var O=Object.keys(c).filter(function(Ye){return Ye!=="key"});v=0<O.length?"{key: someKey, "+O.join(": ..., ")+": ...}":"{key: someKey}",he[g+v]||(O=0<O.length?"{"+O.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
1
+ (function(N,a){typeof exports=="object"&&typeof module<"u"?a(exports,require("react"),require("react-router-dom")):typeof define=="function"&&define.amd?define(["exports","react","react-router-dom"],a):(N=typeof globalThis<"u"?globalThis:N||self,a(N["@aiquants/menu-bar"]={},N.React,N.ReactRouterDOM))})(this,(function(N,a,Q){"use strict";var U={exports:{}},D={};var oe;function ge(){if(oe)return D;oe=1;var n=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function s(o,c,l){var u=null;if(l!==void 0&&(u=""+l),c.key!==void 0&&(u=""+c.key),"key"in c){l={};for(var m in c)m!=="key"&&(l[m]=c[m])}else l=c;return c=l.ref,{$$typeof:n,type:o,key:u,ref:c!==void 0?c:null,props:l}}return D.Fragment=t,D.jsx=s,D.jsxs=s,D}var Y={};var le;function ve(){return le||(le=1,process.env.NODE_ENV!=="production"&&(function(){function n(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===ne?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case p:return"Fragment";case j:return"Profiler";case R:return"StrictMode";case H:return"Suspense";case ee:return"SuspenseList";case W:return"Activity"}if(typeof e=="object")switch(typeof e.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),e.$$typeof){case i:return"Portal";case I:return e.displayName||"Context";case _:return(e._context.displayName||"Context")+".Consumer";case L:var d=e.render;return e=e.displayName,e||(e=d.displayName||d.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case te:return d=e.displayName||null,d!==null?d:n(e.type)||"Memo";case V:d=e._payload,e=e._init;try{return n(e(d))}catch{}}return null}function t(e){return""+e}function s(e){try{t(e);var d=!1}catch{d=!0}if(d){d=console;var x=d.error,y=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return x.call(d,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",y),t(e)}}function o(e){if(e===p)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===V)return"<...>";try{var d=n(e);return d?"<"+d+">":"<...>"}catch{return"<...>"}}function c(){var e=T.A;return e===null?null:e.getOwner()}function l(){return Error("react-stack-top-frame")}function u(e){if(Z.call(e,"key")){var d=Object.getOwnPropertyDescriptor(e,"key").get;if(d&&d.isReactWarning)return!1}return e.key!==void 0}function m(e,d){function x(){F||(F=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",d))}x.isReactWarning=!0,Object.defineProperty(e,"key",{get:x,configurable:!0})}function b(){var e=n(this.type);return k[e]||(k[e]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),e=this.props.ref,e!==void 0?e:null}function h(e,d,x,y,B,se){var g=x.ref;return e={$$typeof:P,type:e,key:d,props:x,_owner:y},(g!==void 0?g:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:b}):Object.defineProperty(e,"ref",{enumerable:!1,value:null}),e._store={},Object.defineProperty(e._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(e,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(e,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:B}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:se}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function f(e,d,x,y,B,se){var g=d.children;if(g!==void 0)if(y)if(re(g)){for(y=0;y<g.length;y++)w(g[y]);Object.freeze&&Object.freeze(g)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else w(g);if(Z.call(d,"key")){g=n(e);var z=Object.keys(d).filter(function(Be){return Be!=="key"});y=0<z.length?"{key: someKey, "+z.join(": ..., ")+": ...}":"{key: someKey}",J[g+y]||(z=0<z.length?"{"+z.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
2
2
  let props = %s;
3
3
  <%s {...props} />
4
4
  React keys must be passed directly to JSX without using spread:
5
5
  let props = %s;
6
- <%s key={someKey} {...props} />`,v,g,O,g),he[g+v]=!0)}if(g=null,b!==void 0&&(o(b),g=""+b),d(c)&&(o(c.key),g=""+c.key),"key"in c){b={};for(var B in c)B!=="key"&&(b[B]=c[B])}else b=c;return g&&p(b,typeof e=="function"?e.displayName||e.name||"Unknown":e),f(e,g,b,u(),z,q)}function k(e){j(e)?e._store&&(e._store.validated=1):typeof e=="object"&&e!==null&&e.$$typeof===T&&(e._payload.status==="fulfilled"?j(e._payload.value)&&e._payload.value._store&&(e._payload.value._store.validated=1):e._store&&(e._store.validated=1))}function j(e){return typeof e=="object"&&e!==null&&e.$$typeof===S}var y=s,S=Symbol.for("react.transitional.element"),a=Symbol.for("react.portal"),h=Symbol.for("react.fragment"),E=Symbol.for("react.strict_mode"),_=Symbol.for("react.profiler"),V=Symbol.for("react.consumer"),H=Symbol.for("react.context"),W=Symbol.for("react.forward_ref"),P=Symbol.for("react.suspense"),U=Symbol.for("react.suspense_list"),Z=Symbol.for("react.memo"),T=Symbol.for("react.lazy"),D=Symbol.for("react.activity"),w=Symbol.for("react.client.reference"),N=y.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,M=Object.prototype.hasOwnProperty,J=Array.isArray,G=console.createTask?console.createTask:function(){return null};y={react_stack_bottom_frame:function(e){return e()}};var ue,de={},fe=y.react_stack_bottom_frame.bind(y,i)(),me=G(l(i)),he={};I.Fragment=h,I.jsx=function(e,c,b){var v=1e4>N.recentlyCreatedOwnerStacks++;return m(e,c,b,!1,v?Error("react-stack-top-frame"):fe,v?G(l(e)):me)},I.jsxs=function(e,c,b){var v=1e4>N.recentlyCreatedOwnerStacks++;return m(e,c,b,!0,v?Error("react-stack-top-frame"):fe,v?G(l(e)):me)}})()),I}var K;function xe(){return K||(K=1,process.env.NODE_ENV==="production"?L.exports=pe():L.exports=be()),L.exports}var t=xe();const ye="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iI2NiZDVlMSI+PHBhdGggZD0iTTEyIDEyYzIuMjEgMCA0LTEuNzkgNC00cy0xLjc5LTQtNC00LTQgMS43OS00IDQgMS43OSA0IDQgNHptMCAyYy0yLjY3IDAtOCAxLjM0LTggNHYyaDE2di0yYzAtMi42Ni01LjMzLTQtOC00eiIvPjwvc3ZnPg==",$=({to:n,className:r,children:o})=>t.jsx("a",{href:n,className:r,children:o}),ve=n=>{const{user:r,LinkComponent:o=$}=n;return t.jsx("div",{className:"max-h-20 max-w-52",children:t.jsx("div",{className:"flex grow flex-col",children:r?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"flex flex-row",children:[t.jsx("div",{className:"aiquants-session-photo m-1 h-14 w-14 p-0.5",children:t.jsx("img",{className:"object-contain",src:r.photo||ye,"aria-label":"profile photo"})}),t.jsxs("div",{className:"mx-1 flex flex-col",children:[t.jsx(o,{className:"aiquants-session-link my-1 rounded-lg px-2 text-center text-xs",to:"/",children:"プロフィールを編集"}),t.jsx(o,{className:"aiquants-session-link rounded-lg px-2 text-center text-xs",to:"/",children:"プロフィール"}),t.jsx(o,{className:"aiquants-session-link my-1 rounded-lg px-2 text-center text-xs",to:"https://myaccount.google.com/",children:"Google Account"})]})]}),t.jsx("div",{className:"aiquants-session-info mb-1 min-h-[1em] w-full rounded-r-lg px-2 py-0.5 text-xs",children:r.displayName})]}):t.jsx("div",{className:"aiquants-session-info mb-1 min-h-[1em] w-9/12 rounded-r-lg py-0.5 pl-1 text-xs",children:"ログインはこちら"})})})};const ge=n=>n.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),ke=n=>n.replace(/^([A-Z])|[\s-_]+(\w)/g,(r,o,l)=>l?l.toUpperCase():o.toLowerCase()),ee=n=>{const r=ke(n);return r.charAt(0).toUpperCase()+r.slice(1)},te=(...n)=>n.filter((r,o,l)=>!!r&&r.trim()!==""&&l.indexOf(r)===o).join(" ").trim(),we=n=>{for(const r in n)if(r.startsWith("aria-")||r==="role"||r==="title")return!0};var je={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};const _e=s.forwardRef(({color:n="currentColor",size:r=24,strokeWidth:o=2,absoluteStrokeWidth:l,className:u="",children:i,iconNode:d,...p},x)=>s.createElement("svg",{ref:x,...je,width:r,height:r,stroke:n,strokeWidth:l?Number(o)*24/Number(r):o,className:te("lucide",u),...!i&&!we(p)&&{"aria-hidden":"true"},...p},[...d.map(([f,m])=>s.createElement(f,m)),...Array.isArray(i)?i:[i]]));const R=(n,r)=>{const o=s.forwardRef(({className:l,...u},i)=>s.createElement(_e,{ref:i,iconNode:r,className:te(`lucide-${ge(ee(n))}`,`lucide-${n}`,l),...u}));return o.displayName=ee(n),o};const ne=R("pin",[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z",key:"1nkz8b"}]]);const re=R("pin-off",[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M15 9.34V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H7.89",key:"znwnzq"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h11",key:"c9qhm2"}]]);const Ne=R("chart-no-axes-column-increasing",[["path",{d:"M5 21v-6",key:"1hz6c0"}],["path",{d:"M12 21V9",key:"uvy0l4"}],["path",{d:"M19 21V3",key:"11j9sm"}]]);const Ee=R("download",[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]]);const se=R("file-text",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);const Ce=R("link",[["path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71",key:"1cjeqo"}],["path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71",key:"19qd67"}]]);const Se=R("lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);const Re=R("table",[["path",{d:"M12 3v18",key:"108xh3"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"M3 15h18",key:"5xshup"}]]),Te=typeof window<"u"?s.useLayoutEffect:s.useEffect,oe="aiquants-menu-scroll",ae=new RegExp(/(^https?:\/\/)|(\.(html|htm)?$)/),Me={report:se,slip:se,table:Re,chart:Ne,download:Ee,lock:Se,href:Ce},Pe=({mark:n,children:r})=>{const o=n?Me[n]:void 0;return o?t.jsxs("div",{className:"flex flex-nowrap items-center",children:[t.jsx(o,{className:"h-4 w-4"}),t.jsx("div",{className:"aiquants-menu-link mx-1 hover:underline",children:r})]}):t.jsx("span",{className:"mx-1 text-sky-600 hover:underline dark:text-sky-400",children:r})},F=(n,r)=>r?{menu:{id:n.id,title:n.title,href:n.href},submenu:{subid:r.subid,title:r.title,href:r.href,mark:r.mark,new:r.new}}:{menu:{id:n.id,title:n.title,href:n.href}},Oe=({item:n,parentMenu:r,onMenuSelected:o})=>{if(n.href==="separator")return t.jsx("hr",{className:"aiquants-menu-separator mx-2 my-1 h-px"});const l=t.jsx(Pe,{mark:n.mark,children:n.title}),u={onClick:()=>{o&&o(F(r,n))}};return n.new?t.jsx("a",{href:n.href,rel:"noopener noreferrer",target:"_blank",...u,children:l}):ae.test(n.href)?t.jsx("a",{href:n.href,...u,children:l}):t.jsx(Y.Link,{to:n.href,...u,children:l})},le=n=>n?n.split(/[?#]/)[0].replace(/(?!^\/)\/$/,""):"",ce=(n,r)=>{const o=r!=="/"&&r.endsWith("/")?r.slice(0,-1):r;for(const l of n){if(le(l.href)===o)return l.id;if(l.submenu){for(const u of l.submenu)if(le(u.href)===o)return l.id}}return null},Ae=n=>{const{menuList:r,onMenuSelected:o,pinnedSubmenuIds:l=[],onToggleSubmenuPin:u}=n;let i="";try{i=Y.useLocation().pathname}catch{typeof window<"u"&&(i=window.location.pathname)}const d=s.useMemo(()=>ce(r,i),[r,i]),[p,x]=s.useState(d),f=s.useRef(i),m=s.useRef(d!==null);s.useEffect(()=>{if(f.current!==i&&(f.current=i,m.current=!1),!m.current){const a=ce(r,i);a!==null&&(x(a),m.current=!0)}},[i,r]);const k=s.useCallback(a=>{l.includes(a)||x(E=>E===a?null:a)},[l]),j=s.useRef(null);Te(()=>{const a=j.current;if(a)try{const h=sessionStorage.getItem(oe);if(h!==null){const E=Number.parseFloat(h);Number.isNaN(E)||(a.scrollTop=E)}}catch{}},[]);const y=s.useCallback(()=>{const a=j.current;if(a)try{sessionStorage.setItem(oe,String(a.scrollTop))}catch{}},[]),S=s.useMemo(()=>t.jsx(t.Fragment,{children:r.map(a=>t.jsx("div",{children:a.href?t.jsx("div",{className:"aiquants-menu-list-item relative mb-1 ml-1 h-full rounded-l-2xl p-2 align-middle text-sm before:-mt-1 before:mr-2 before:inline-block before:h-4 before:w-4 before:rounded-full before:align-middle before:content-['']",children:ae.test(a.href)?t.jsx("a",{href:a.href,onClick:()=>{o&&o(F(a))},children:t.jsx("span",{className:"aiquants-menu-link hover:underline",children:a.title})}):t.jsx(Y.Link,{to:a.href,onClick:()=>{o&&o(F(a))},children:t.jsx("span",{className:"aiquants-menu-link hover:underline",children:a.title})})}):t.jsxs("details",{className:"aiquants-menu-accordion-details",open:a.id===p||l.includes(a.id),children:[t.jsxs("summary",{className:"aiquants-menu-list-item aiquants-menu-accordion-summary relative mb-1 ml-1 h-full list-none rounded-l-2xl p-2 text-sm outline-none before:mr-2 before:inline-block before:h-4 before:w-4 before:rounded-full before:content-['']",onClick:h=>{h.preventDefault(),k(a.id)},onKeyDown:h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),k(a.id))},children:[t.jsx("span",{children:a.title}),t.jsx("button",{type:"button",onClick:h=>{h.stopPropagation(),h.preventDefault(),u&&u(a.id)},className:`aiquants-submenu-pin-button ${l.includes(a.id)?"pinned":""}`,title:l.includes(a.id)?"ピン留め解除":"ピン留め",children:l.includes(a.id)?t.jsx(ne,{size:14}):t.jsx(re,{size:14})})]}),t.jsx("div",{className:"aiquants-menu-submenu pointer-events-auto my-1 mr-1 ml-4 rounded p-2 shadow-md",children:a.submenu.map(h=>t.jsx("div",{className:"aiquants-menu-accordion-container block w-full whitespace-nowrap text-sm",children:t.jsx(Oe,{item:h,parentMenu:a,onMenuSelected:o})},h.subid))})]})},a.id))}),[r,o,p,k,l]);return t.jsx("div",{ref:j,onScroll:y,className:"hidden-scrollbar h-0 grow overflow-y-scroll",children:S})},Ie=n=>{const{menuList:r,menuHeader:o,open:l,onMenuSelected:u,onClickSignout:i,theme:d,toggleTheme:p,isPinned:x,onTogglePin:f,pinnedSubmenuIds:m,onToggleSubmenuPin:k}=n;return t.jsxs("div",{className:`aiquants-menu-content fixed top-0 right-0 z-2147483642 flex min-h-dvh w-[250px] select-none flex-col transition-transform duration-500 ${l?"aiquants-menu-translate-x-0":"aiquants-menu-translate-x-250"}`,children:[t.jsx("div",{className:"flex h-[100px] flex-col",children:o}),t.jsx("div",{className:"flex grow flex-col",children:t.jsx(Ae,{menuList:r,onMenuSelected:u,pinnedSubmenuIds:m,onToggleSubmenuPin:k})}),t.jsx("div",{className:"px-4 pt-2 pb-4",children:t.jsxs("div",{className:"flex items-center justify-between gap-2",children:[t.jsx("button",{type:"button",onClick:f,"data-aqmb-pin-button":!0,className:`flex items-center justify-center rounded-md px-3 py-2 text-white text-xs shadow-sm transition-colors duration-300 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-amber-300/60 ${x?"bg-amber-500/90 hover:bg-amber-600":"border border-white/15 bg-white/10 hover:bg-white/20"}`,title:x?"ピン留め解除":"ピン留め","aria-label":x?"ピン留め解除":"ピン留め",children:x?t.jsx(ne,{size:14}):t.jsx(re,{size:14})}),t.jsx("button",{type:"button",onClick:p,"data-aqmb-theme-button":!0,className:"group relative flex items-center justify-center rounded-md border border-white/15 bg-white/10 px-3 py-2 text-white text-xs shadow-sm backdrop-blur-sm transition-all duration-300 hover:border-white/25 hover:bg-white/20 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/40 focus-visible:ring-offset-0 dark:border-gray-600/40 dark:bg-gray-800/80 dark:hover:border-gray-500/60 dark:hover:bg-gray-700",title:d==="dark"?"ライトモードに切り替え":"ダークモードに切り替え","aria-label":d==="dark"?"ライトモードに切り替え":"ダークモードに切り替え",children:t.jsx("span",{className:"text-sm transition-transform duration-300 group-hover:scale-110",children:d==="dark"?"🌞":"🌙"})}),t.jsx("button",{type:"button","data-aqmb-signout-button":!0,className:"aiquants-signout-button flex flex-1 items-center justify-center whitespace-nowrap rounded-md bg-red-500/90 px-3 py-2 font-medium text-white text-xs shadow-sm transition-colors duration-300 hover:bg-red-500 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-red-300/60",onClick:i,children:t.jsx("span",{children:"サインアウト"})})]})})]})},Le=n=>{const{isOverlay:r,onOverlayClick:o}=n;return t.jsx("button",{type:"button",className:`fixed inset-0 z-2147483640 cursor-default bg-black/50 transition-opacity duration-500 ${r?"opacity-100":"pointer-events-none opacity-0"}`,onClick:o})},De=n=>{const{open:r,onMenuOpen:o,onMenuClose:l,theme:u}=n,i=s.useRef(r),d=s.useRef(null),p=s.useRef(null),x=s.useRef(null),f=s.useRef(null),m=s.useRef(null),k=s.useCallback(()=>{if(d.current&&p.current&&x.current&&f.current&&m.current){const _=u==="dark"?"#fff":"#000";d.current.style.backgroundColor=_,d.current.style.width="100%",d.current.style.height="3px",d.current.style.transform="",p.current.style.opacity="1",p.current.style.backgroundColor=_,x.current.style.opacity="1",x.current.style.backgroundColor=_,f.current.style.backgroundColor=_,f.current.style.width="100%",f.current.style.height="3px",f.current.style.transform="",m.current.style.color=_,m.current.classList.remove("after:content-['close']"),m.current.classList.remove("after:ml-0.5"),m.current.classList.add("after:content-['menu']"),m.current.classList.add("after:-ml-0.5"),i.current=!0}},[u]),j=s.useCallback(()=>{d.current&&p.current&&x.current&&f.current&&m.current&&(d.current.style.backgroundColor="#fff",d.current.style.width="32px",d.current.style.height="4px",d.current.style.transform="translateY(9px) rotate(-45deg)",p.current.style.opacity="0",x.current.style.opacity="0",f.current.style.backgroundColor="#fff",f.current.style.width="32px",f.current.style.height="4px",f.current.style.transform="translateY(-9px) rotate(45deg)",m.current.style.color="#fff",m.current.classList.remove("after:content-['menu']"),m.current.classList.remove("after:-ml-0.5"),m.current.classList.add("after:content-['close']"),m.current.classList.add("after:ml-0.5"),i.current=!1)},[]),y=s.useCallback(()=>{k(),l&&l()},[k,l]),S=s.useCallback(()=>{j(),o&&o()},[j,o]),a=s.useCallback(()=>{i.current?S():y()},[y,S]),h=s.useCallback(_=>{_.currentTarget.blur()},[]),E=s.useCallback(_=>{_.preventDefault()},[]);return s.useEffect(()=>{r?k():j()},[r,k,j]),t.jsxs("button",{type:"button","data-aqmb-menu-switch":!0,className:"aiquants-menu-switch fixed z-2147483647 inline-block h-[27px] w-[27px] cursor-pointer align-middle outline-hidden",onClick:a,onFocus:h,onMouseDown:E,tabIndex:-1,children:[t.jsx("span",{className:"absolute top-0 left-0 box-border inline-block h-[3px] w-full select-none",ref:d}),t.jsx("span",{className:"absolute top-1.5 left-0 box-border inline-block h-[3px] w-full select-none",ref:p}),t.jsx("span",{className:"absolute top-3 left-0 box-border inline-block h-[3px] w-full select-none",ref:x}),t.jsx("span",{className:"absolute top-[18px] left-0 box-border inline-block h-[3px] w-full select-none",ref:f}),t.jsx("div",{className:"absolute w-full text-xs after:mt-2 after:block",ref:m})]})},ie=typeof window<"u"?s.useLayoutEffect:s.useEffect,ze=n=>{const{menuList:r,menuHeader:o,onClickSignout:l,isMenuhide:u,theme:i,toggleTheme:d,onMenuNavigate:p,onPinChange:x,pinnedSubmenuIds:f,initialPinnedSubmenuIds:m,onSubmenuPinChange:k,closeOnEscape:j="auto"}=n,[y,S]=s.useState(()=>{try{return localStorage.getItem("aiquants-menu-pinned")==="true"}catch{return!1}}),[a,h]=s.useState(y),[E,_]=s.useState(()=>{if(m)return m;try{const w=localStorage.getItem("aiquants-submenu-pinned");if(w){const N=JSON.parse(w);if(Array.isArray(N))return N.filter(M=>typeof M=="number")}}catch{}return[]}),V=f!==void 0?f:E,H=s.useCallback(w=>{const N=f!==void 0?f:E,M=N.includes(w)?N.filter(J=>J!==w):[...N,w];if(f===void 0){_(M);try{localStorage.setItem("aiquants-submenu-pinned",JSON.stringify(M))}catch{}}k&&k(M)},[f,E,k]);ie(()=>{const w=y?"250px":"0px";document.documentElement.style.setProperty("--aiquants-menu-pinned-width",w),x?.(y)},[y,x]),ie(()=>()=>{document.documentElement.style.setProperty("--aiquants-menu-pinned-width","0px")},[]);const W=s.useCallback(()=>{h(!0)},[]),P=s.useCallback(()=>{h(!1),S(!1);try{localStorage.removeItem("aiquants-menu-pinned")}catch{}},[]),U=s.useCallback(()=>{S(w=>{const N=!w;if(N)try{localStorage.setItem("aiquants-menu-pinned","true")}catch{}else try{localStorage.removeItem("aiquants-menu-pinned")}catch{}return N})},[]),Z=s.useCallback(w=>{p&&p(w),y||h(!1)},[p,y]),T=s.useCallback(w=>{w.key==="Escape"&&P()},[P]),D=j===!0||j==="auto"&&!y;return s.useEffect(()=>(a&&D?window.addEventListener("keydown",T,{passive:!0}):window.removeEventListener("keydown",T),()=>{window.removeEventListener("keydown",T)}),[a,D,T]),u?null:t.jsxs("div",{className:`aiquants-menu-bar ${i}`,children:[t.jsx(De,{onMenuClose:P,onMenuOpen:W,open:!a,theme:i}),t.jsx(Ie,{menuList:r,menuHeader:o,onClickSignout:l,onMenuSelected:Z,open:a,theme:i,toggleTheme:d,isPinned:y,onTogglePin:U,pinnedSubmenuIds:V,onToggleSubmenuPin:H}),t.jsx(Le,{isOverlay:a&&!y,onOverlayClick:P})]})};C.DefaultLink=$,C.MenuBar=ze,C.SessionInfo=ve,Object.defineProperty(C,Symbol.toStringTag,{value:"Module"})}));
6
+ <%s key={someKey} {...props} />`,y,g,z,g),J[g+y]=!0)}if(g=null,x!==void 0&&(s(x),g=""+x),u(d)&&(s(d.key),g=""+d.key),"key"in d){x={};for(var ae in d)ae!=="key"&&(x[ae]=d[ae])}else x=d;return g&&m(x,typeof e=="function"?e.displayName||e.name||"Unknown":e),h(e,g,x,c(),B,se)}function w(e){v(e)?e._store&&(e._store.validated=1):typeof e=="object"&&e!==null&&e.$$typeof===V&&(e._payload.status==="fulfilled"?v(e._payload.value)&&e._payload.value._store&&(e._payload.value._store.validated=1):e._store&&(e._store.validated=1))}function v(e){return typeof e=="object"&&e!==null&&e.$$typeof===P}var S=a,P=Symbol.for("react.transitional.element"),i=Symbol.for("react.portal"),p=Symbol.for("react.fragment"),R=Symbol.for("react.strict_mode"),j=Symbol.for("react.profiler"),_=Symbol.for("react.consumer"),I=Symbol.for("react.context"),L=Symbol.for("react.forward_ref"),H=Symbol.for("react.suspense"),ee=Symbol.for("react.suspense_list"),te=Symbol.for("react.memo"),V=Symbol.for("react.lazy"),W=Symbol.for("react.activity"),ne=Symbol.for("react.client.reference"),T=S.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,Z=Object.prototype.hasOwnProperty,re=Array.isArray,O=console.createTask?console.createTask:function(){return null};S={react_stack_bottom_frame:function(e){return e()}};var F,k={},C=S.react_stack_bottom_frame.bind(S,l)(),A=O(o(l)),J={};Y.Fragment=p,Y.jsx=function(e,d,x){var y=1e4>T.recentlyCreatedOwnerStacks++;return f(e,d,x,!1,y?Error("react-stack-top-frame"):C,y?O(o(e)):A)},Y.jsxs=function(e,d,x){var y=1e4>T.recentlyCreatedOwnerStacks++;return f(e,d,x,!0,y?Error("react-stack-top-frame"):C,y?O(o(e)):A)}})()),Y}var ie;function we(){return ie||(ie=1,process.env.NODE_ENV==="production"?U.exports=ge():U.exports=ve()),U.exports}var r=we();const Ne=n=>n.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),_e=n=>n.replace(/^([A-Z])|[\s-_]+(\w)/g,(t,s,o)=>o?o.toUpperCase():s.toLowerCase()),ce=n=>{const t=_e(n);return t.charAt(0).toUpperCase()+t.slice(1)},ue=(...n)=>n.filter((t,s,o)=>!!t&&t.trim()!==""&&o.indexOf(t)===s).join(" ").trim(),je=n=>{for(const t in n)if(t.startsWith("aria-")||t==="role"||t==="title")return!0};var Ee={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};const Ce=a.forwardRef(({color:n="currentColor",size:t=24,strokeWidth:s=2,absoluteStrokeWidth:o,className:c="",children:l,iconNode:u,...m},b)=>a.createElement("svg",{ref:b,...Ee,width:t,height:t,stroke:n,strokeWidth:o?Number(s)*24/Number(t):s,className:ue("lucide",c),...!l&&!je(m)&&{"aria-hidden":"true"},...m},[...u.map(([h,f])=>a.createElement(h,f)),...Array.isArray(l)?l:[l]]));const M=(n,t)=>{const s=a.forwardRef(({className:o,...c},l)=>a.createElement(Ce,{ref:l,iconNode:t,className:ue(`lucide-${Ne(ce(n))}`,`lucide-${n}`,o),...c}));return s.displayName=ce(n),s};const Se=M("external-link",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);const Me=M("user",[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]]),Pe="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iI2NiZDVlMSI+PHBhdGggZD0iTTEyIDEyYzIuMjEgMCA0LTEuNzkgNC00cy0xLjc5LTQtNC00LTQgMS43OS00IDQgMS43OSA0IDQgNHptMCAyYy0yLjY3IDAtOCAxLjM0LTggNHYyaDE2di0yYzAtMi42Ni01LjMzLTQtOC00eiIvPjwvc3ZnPg==",de=({to:n,className:t,children:s})=>r.jsx("a",{href:n,className:t,children:s}),Re=n=>{const{user:t,LinkComponent:s=de}=n;return r.jsx("div",{className:"w-full",children:t?r.jsxs("div",{className:"aiquants-session-card group relative flex flex-col gap-1.5 rounded-lg border border-white/20 bg-white/10 p-2 shadow-sm transition-all duration-200 hover:border-white/30 hover:bg-white/15 dark:border-slate-700/60 dark:bg-slate-800/60 dark:hover:border-slate-600/80 dark:hover:bg-slate-800/90",children:[r.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[r.jsxs("div",{className:"relative shrink-0",children:[r.jsx("div",{className:"h-7 w-7 overflow-hidden rounded-full border border-white/40 shadow-xs dark:border-slate-500",children:r.jsx("img",{className:"h-full w-full rounded-full object-cover",src:t.photo||Pe,alt:t.displayName||"user profile"})}),r.jsx("span",{className:"absolute -right-0.5 -bottom-0.5 h-2 w-2 rounded-full border border-slate-900 bg-emerald-400",title:"Online"})]}),r.jsxs("div",{className:"min-w-0 flex-1 leading-tight",children:[r.jsx("div",{className:"truncate font-semibold text-[11px] text-white tracking-tight dark:text-slate-100",title:t.displayName,children:t.displayName}),r.jsx("div",{className:"mt-0.5 text-[9px] text-white/70 tracking-tight dark:text-slate-400",children:"Google Account"})]})]}),r.jsxs("div",{className:"grid grid-cols-2 gap-1 border-white/15 border-t pt-1 dark:border-slate-700/50",children:[r.jsxs(s,{className:"flex items-center justify-center gap-1 rounded border border-white/15 bg-white/10 px-1.5 py-0.5 font-medium text-[10px] text-white transition-all duration-150 hover:bg-white/25 active:scale-95 dark:border-slate-600/50 dark:bg-slate-700/50 dark:text-slate-200 dark:hover:bg-slate-600/80",to:"/",children:[r.jsx(Me,{size:10,className:"shrink-0 opacity-80"}),r.jsx("span",{className:"truncate",children:"プロフィール"})]}),r.jsxs(s,{className:"flex items-center justify-center gap-1 rounded border border-white/15 bg-white/10 px-1.5 py-0.5 font-medium text-[10px] text-white transition-all duration-150 hover:bg-white/25 active:scale-95 dark:border-slate-600/50 dark:bg-slate-700/50 dark:text-slate-200 dark:hover:bg-slate-600/80",to:"https://myaccount.google.com/",children:[r.jsx(Se,{size:10,className:"shrink-0 opacity-80"}),r.jsx("span",{className:"truncate",children:"Google"})]})]})]}):r.jsx("div",{className:"aiquants-session-card flex items-center justify-between rounded-lg border border-white/20 bg-white/10 p-2 shadow-xs dark:border-slate-700/60 dark:bg-slate-800/60",children:r.jsx("span",{className:"font-medium text-white/90 text-xs dark:text-slate-200",children:"ログインしてください"})})})},G="aiquants-menu-pin-change";let E={pinned:!1,width:0};const X=(n=240)=>{if(typeof window>"u"||typeof document>"u")return{pinned:!1,width:0};try{const t=getComputedStyle(document.documentElement).getPropertyValue("--aiquants-menu-pinned-width").trim();if(t){const l=Number.parseInt(t,10);if(!Number.isNaN(l)){const u=l>0,m=u?l||n:0;return E.pinned===u&&E.width===m||(E={pinned:u,width:m}),E}}const o=localStorage.getItem("aiquants-menu-pinned")==="true",c=o?n:0;return E.pinned===o&&E.width===c||(E={pinned:o,width:c}),E}catch{return{pinned:!1,width:0}}},q=(n,t)=>{if(typeof window>"u")return;const s={pinned:n,width:t};(E.pinned!==n||E.width!==t)&&(E=s);const o=new CustomEvent(G,{detail:s,bubbles:!0,cancelable:!1});window.dispatchEvent(o)},fe=(n,t)=>{if(typeof window>"u")return()=>{};const{immediate:s=!0,defaultPinnedWidth:o=240}=t??{};if(s){const l=X(o);n(l)}const c=l=>{const u=l;u.detail&&n(u.detail)};return window.addEventListener(G,c,{passive:!0}),()=>{window.removeEventListener(G,c)}},Te=n=>{const t=n?.defaultPinnedWidth??240,s=n?.initialPinned??!1,o=a.useCallback(u=>fe(()=>{u()},{immediate:!1,defaultPinnedWidth:t}),[t]),c=a.useCallback(()=>X(t),[t]),l=a.useCallback(()=>({pinned:s,width:s?t:0}),[s,t]);return a.useSyncExternalStore(o,c,l)};const Oe=M("log-out",[["path",{d:"m16 17 5-5-5-5",key:"1bji2h"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}]]);const he=M("pin",[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z",key:"1nkz8b"}]]);const me=M("pin-off",[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M15 9.34V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H7.89",key:"znwnzq"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h11",key:"c9qhm2"}]]);const Ae=M("chart-no-axes-column-increasing",[["path",{d:"M5 21v-6",key:"1hz6c0"}],["path",{d:"M12 21V9",key:"uvy0l4"}],["path",{d:"M19 21V3",key:"11j9sm"}]]);const Ie=M("download",[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]]);const pe=M("file-text",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);const Le=M("link",[["path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71",key:"1cjeqo"}],["path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71",key:"19qd67"}]]);const ze=M("lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);const De=M("table",[["path",{d:"M12 3v18",key:"108xh3"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"M3 15h18",key:"5xshup"}]]),Ye=typeof window<"u"?a.useLayoutEffect:a.useEffect,be="aiquants-menu-scroll",xe=new RegExp(/(^https?:\/\/)|(\.(html|htm)?$)/),He={report:pe,slip:pe,table:De,chart:Ae,download:Ie,lock:ze,href:Le},Ve=({mark:n,children:t})=>{const s=n?He[n]:void 0;return s?r.jsxs("div",{className:"flex flex-nowrap items-center",children:[r.jsx(s,{className:"h-3.5 w-3.5 shrink-0"}),r.jsx("div",{className:"aiquants-menu-link mx-1 hover:underline",children:t})]}):r.jsx("span",{className:"mx-1 text-sky-600 hover:underline dark:text-sky-400",children:t})},K=(n,t)=>t?{menu:{id:n.id,title:n.title,href:n.href},submenu:{subid:t.subid,title:t.title,href:t.href,mark:t.mark,new:t.new}}:{menu:{id:n.id,title:n.title,href:n.href}},We=({item:n,parentMenu:t,onMenuSelected:s})=>{if(n.href==="separator")return r.jsx("hr",{className:"aiquants-menu-separator mx-2 my-1 h-px"});const o=r.jsx(Ve,{mark:n.mark,children:n.title}),c={onClick:()=>{s&&s(K(t,n))}};return n.new?r.jsx("a",{href:n.href,rel:"noopener noreferrer",target:"_blank",...c,children:o}):xe.test(n.href)?r.jsx("a",{href:n.href,...c,children:o}):r.jsx(Q.Link,{to:n.href,...c,children:o})},ke=n=>n?n.split(/[?#]/)[0].replace(/(?!^\/)\/$/,""):"",ye=(n,t)=>{const s=t!=="/"&&t.endsWith("/")?t.slice(0,-1):t;for(const o of n){if(ke(o.href)===s)return o.id;if(o.submenu){for(const c of o.submenu)if(ke(c.href)===s)return o.id}}return null},Fe=n=>{const{menuList:t,onMenuSelected:s,pinnedSubmenuIds:o=[],onToggleSubmenuPin:c}=n;let l="";try{l=Q.useLocation().pathname}catch{typeof window<"u"&&(l=window.location.pathname)}const u=a.useMemo(()=>ye(t,l),[t,l]),[m,b]=a.useState(u),h=a.useRef(l),f=a.useRef(u!==null);a.useEffect(()=>{if(h.current!==l&&(h.current=l,f.current=!1),!f.current){const i=ye(t,l);i!==null&&(b(i),f.current=!0)}},[l,t]);const w=a.useCallback(i=>{o.includes(i)||b(R=>R===i?null:i)},[o]),v=a.useRef(null);Ye(()=>{const i=v.current;if(i)try{const p=sessionStorage.getItem(be);if(p!==null){const R=Number.parseFloat(p);Number.isNaN(R)||(i.scrollTop=R)}}catch{}},[]);const S=a.useCallback(()=>{const i=v.current;if(i)try{sessionStorage.setItem(be,String(i.scrollTop))}catch{}},[]),P=a.useMemo(()=>r.jsx(r.Fragment,{children:t.map(i=>r.jsx("div",{children:i.href?r.jsx("div",{className:"aiquants-menu-list-item relative mb-0.5 ml-1 flex items-center rounded-l-xl px-2.5 py-1 text-xs before:mr-2 before:inline-block before:h-2 before:w-2 before:shrink-0 before:rounded-full before:content-[''] sm:text-sm",children:xe.test(i.href)?r.jsx("a",{href:i.href,onClick:()=>{s&&s(K(i))},children:r.jsx("span",{className:"aiquants-menu-link hover:underline",children:i.title})}):r.jsx(Q.Link,{to:i.href,onClick:()=>{s&&s(K(i))},children:r.jsx("span",{className:"aiquants-menu-link hover:underline",children:i.title})})}):r.jsxs("details",{className:"aiquants-menu-accordion-details",open:i.id===m||o.includes(i.id),children:[r.jsxs("summary",{className:"aiquants-menu-list-item aiquants-menu-accordion-summary relative mb-0.5 ml-1 list-none rounded-l-xl px-2.5 py-1 text-xs outline-none before:mr-2 before:inline-block before:h-2 before:w-2 before:shrink-0 before:rounded-full before:content-[''] sm:text-sm",onClick:p=>{p.preventDefault(),w(i.id)},onKeyDown:p=>{(p.key==="Enter"||p.key===" ")&&(p.preventDefault(),w(i.id))},children:[r.jsx("span",{children:i.title}),r.jsx("button",{type:"button",onClick:p=>{p.stopPropagation(),p.preventDefault(),c&&c(i.id)},className:`aiquants-submenu-pin-button ${o.includes(i.id)?"pinned":""}`,title:o.includes(i.id)?"ピン留め解除":"ピン留め",children:o.includes(i.id)?r.jsx(he,{size:13}):r.jsx(me,{size:13})})]}),r.jsx("div",{className:"aiquants-menu-submenu pointer-events-auto my-0.5 mr-1 ml-3.5 rounded-lg px-2 py-1 shadow-sm",children:i.submenu.map(p=>r.jsx("div",{className:"aiquants-menu-accordion-container block w-full whitespace-nowrap py-0.5 text-xs",children:r.jsx(We,{item:p,parentMenu:i,onMenuSelected:s})},p.subid))})]})},i.id))}),[t,s,m,w,o]);return r.jsx("div",{ref:v,onScroll:S,className:"hidden-scrollbar h-0 grow overflow-y-scroll",children:P})},Ue=n=>{const{menuList:t,menuHeader:s,open:o,onMenuSelected:c,onClickSignout:l,theme:u,toggleTheme:m,isPinned:b,onTogglePin:h,pinnedSubmenuIds:f,onToggleSubmenuPin:w}=n;return r.jsxs("div",{className:`aiquants-menu-content fixed top-0 right-0 z-2147483642 flex min-h-dvh w-[240px] select-none flex-col transition-transform duration-500 ${o?"aiquants-menu-translate-x-0":"aiquants-menu-translate-x-250"}`,children:[r.jsx("div",{className:"flex shrink-0 flex-col justify-center border-white/15 border-b px-2.5 py-2 dark:border-slate-700/60",children:s}),r.jsx("div",{className:"flex grow flex-col overflow-y-auto",children:r.jsx(Fe,{menuList:t,onMenuSelected:c,pinnedSubmenuIds:f,onToggleSubmenuPin:w})}),r.jsx("div",{className:"border-white/15 border-t px-2.5 py-1.5 dark:border-slate-700/60",children:r.jsxs("div",{className:"flex items-center justify-between gap-1.5",children:[r.jsx("button",{type:"button",onClick:h,"data-aqmb-pin-button":!0,className:`flex h-7 items-center justify-center rounded-md px-2 text-[11px] text-white shadow-2xs transition-colors duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-amber-300/60 ${b?"bg-amber-500 hover:bg-amber-600 dark:bg-amber-600 dark:hover:bg-amber-500":"border border-white/20 bg-white/10 hover:bg-white/20 dark:border-slate-600/60 dark:bg-slate-700/60 dark:hover:bg-slate-600"}`,title:b?"ピン留め解除":"ピン留め","aria-label":b?"ピン留め解除":"ピン留め",children:b?r.jsx(he,{size:12}):r.jsx(me,{size:12})}),r.jsx("button",{type:"button",onClick:m,"data-aqmb-theme-button":!0,className:"group relative flex h-7 items-center justify-center rounded-md border border-white/20 bg-white/10 px-2 text-[11px] text-white shadow-2xs backdrop-blur-xs transition-all duration-200 hover:bg-white/20 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/40 dark:border-slate-600/60 dark:bg-slate-700/60 dark:hover:bg-slate-600",title:u==="dark"?"ライトモードに切り替え":"ダークモードに切り替え","aria-label":u==="dark"?"ライトモードに切り替え":"ダークモードに切り替え",children:r.jsx("span",{className:"text-xs transition-transform duration-200 group-hover:scale-110",children:u==="dark"?"🌞":"🌙"})}),r.jsxs("button",{type:"button","data-aqmb-signout-button":!0,className:"aiquants-signout-button flex h-7 flex-1 items-center justify-center gap-1.5 whitespace-nowrap rounded-md bg-red-500/90 px-2.5 font-medium text-[11px] text-white shadow-2xs transition-colors duration-200 hover:bg-red-600 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-red-300/60 dark:bg-red-600/90 dark:hover:bg-red-500",onClick:l,children:[r.jsx(Oe,{size:11,className:"shrink-0"}),r.jsx("span",{children:"サインアウト"})]})]})})]})},Ge=n=>{const{isOverlay:t,onOverlayClick:s}=n;return r.jsx("button",{type:"button",className:`fixed inset-0 z-2147483640 cursor-default bg-black/50 transition-opacity duration-500 ${t?"opacity-100":"pointer-events-none opacity-0"}`,onClick:s})},Ze=n=>{const{open:t,onMenuOpen:s,onMenuClose:o,theme:c}=n,l=a.useRef(t),u=a.useRef(null),m=a.useRef(null),b=a.useRef(null),h=a.useRef(null),f=a.useRef(null),w=a.useCallback(()=>{if(u.current&&m.current&&b.current&&h.current&&f.current){const j=c==="dark"?"#fff":"#000";u.current.style.backgroundColor=j,u.current.style.width="100%",u.current.style.height="3px",u.current.style.transform="",m.current.style.opacity="1",m.current.style.backgroundColor=j,b.current.style.opacity="1",b.current.style.backgroundColor=j,h.current.style.backgroundColor=j,h.current.style.width="100%",h.current.style.height="3px",h.current.style.transform="",f.current.style.color=j,f.current.classList.remove("after:content-['close']"),f.current.classList.remove("after:ml-0.5"),f.current.classList.add("after:content-['menu']"),f.current.classList.add("after:-ml-0.5"),l.current=!0}},[c]),v=a.useCallback(()=>{u.current&&m.current&&b.current&&h.current&&f.current&&(u.current.style.backgroundColor="#fff",u.current.style.width="32px",u.current.style.height="4px",u.current.style.transform="translateY(9px) rotate(-45deg)",m.current.style.opacity="0",b.current.style.opacity="0",h.current.style.backgroundColor="#fff",h.current.style.width="32px",h.current.style.height="4px",h.current.style.transform="translateY(-9px) rotate(45deg)",f.current.style.color="#fff",f.current.classList.remove("after:content-['menu']"),f.current.classList.remove("after:-ml-0.5"),f.current.classList.add("after:content-['close']"),f.current.classList.add("after:ml-0.5"),l.current=!1)},[]),S=a.useCallback(()=>{w(),o&&o()},[w,o]),P=a.useCallback(()=>{v(),s&&s()},[v,s]),i=a.useCallback(()=>{l.current?P():S()},[S,P]),p=a.useCallback(j=>{j.currentTarget.blur()},[]),R=a.useCallback(j=>{j.preventDefault()},[]);return a.useEffect(()=>{t?w():v()},[t,w,v]),r.jsxs("button",{type:"button","data-aqmb-menu-switch":!0,className:"aiquants-menu-switch inline-block h-[27px] w-[27px] cursor-pointer align-middle outline-hidden",onClick:i,onFocus:p,onMouseDown:R,tabIndex:-1,children:[r.jsx("span",{className:"absolute top-0 left-0 box-border inline-block h-[3px] w-full select-none",ref:u}),r.jsx("span",{className:"absolute top-1.5 left-0 box-border inline-block h-[3px] w-full select-none",ref:m}),r.jsx("span",{className:"absolute top-3 left-0 box-border inline-block h-[3px] w-full select-none",ref:b}),r.jsx("span",{className:"absolute top-[18px] left-0 box-border inline-block h-[3px] w-full select-none",ref:h}),r.jsx("div",{className:"absolute w-full text-xs after:mt-2 after:block",ref:f})]})},$=typeof window<"u"?a.useLayoutEffect:a.useEffect,Je=n=>{const{menuList:t,menuHeader:s,onClickSignout:o,isMenuhide:c,isMenuHide:l,theme:u,toggleTheme:m,onMenuNavigate:b,isPinned:h,pinnedWidth:f=240,onPinChange:w,pinnedSubmenuIds:v,initialPinnedSubmenuIds:S,onSubmenuPinChange:P,closeOnEscape:i="auto"}=n,p=l??c??!1,[R,j]=a.useState(()=>{try{return localStorage.getItem("aiquants-menu-pinned")==="true"}catch{return!1}}),_=h!==void 0?h:R,[I,L]=a.useState(_);a.useEffect(()=>{_&&L(!0)},[_]);const[H,ee]=a.useState(()=>{if(S)return S;try{const k=localStorage.getItem("aiquants-submenu-pinned");if(k){const C=JSON.parse(k);if(Array.isArray(C))return C.filter(A=>typeof A=="number")}}catch{}return[]}),te=v!==void 0?v:H,V=a.useCallback(k=>{const C=v!==void 0?v:H,A=C.includes(k)?C.filter(J=>J!==k):[...C,k];if(v===void 0){ee(A);try{localStorage.setItem("aiquants-submenu-pinned",JSON.stringify(A))}catch{}}P&&P(A)},[v,H,P]),W=a.useRef(w);$(()=>{W.current=w},[w]),$(()=>{const k=_?f:0,C=`${k}px`;document.documentElement.style.setProperty("--aiquants-menu-pinned-width",C),q(_,k)},[_,f]),$(()=>()=>{document.documentElement.style.setProperty("--aiquants-menu-pinned-width","0px"),q(!1,0)},[]);const ne=a.useCallback(()=>{L(!0)},[]),T=a.useCallback(()=>{if(L(!1),h===void 0){j(!1);try{localStorage.removeItem("aiquants-menu-pinned")}catch{}}W.current?.(!1,0)},[h]),Z=a.useCallback(()=>{const k=!_,C=k?f:0;if(h===void 0){j(k);try{k?localStorage.setItem("aiquants-menu-pinned","true"):localStorage.removeItem("aiquants-menu-pinned")}catch{}}W.current?.(k,C)},[_,h,f]),re=a.useCallback(k=>{b&&b(k),_||L(!1)},[b,_]),O=a.useCallback(k=>{k.key==="Escape"&&T()},[T]),F=i===!0||i==="auto"&&!_;return a.useEffect(()=>(I&&F?window.addEventListener("keydown",O):window.removeEventListener("keydown",O),()=>{window.removeEventListener("keydown",O)}),[I,F,O]),p?null:r.jsxs("div",{className:`aiquants-menu-bar ${u}`,children:[r.jsx(Ze,{onMenuClose:T,onMenuOpen:ne,open:!I,theme:u}),r.jsx(Ue,{menuList:t,menuHeader:s,onClickSignout:o,onMenuSelected:re,open:I,theme:u,toggleTheme:m,isPinned:_,onTogglePin:Z,pinnedSubmenuIds:te,onToggleSubmenuPin:V}),r.jsx(Ge,{isOverlay:I&&!_,onOverlayClick:T})]})};N.DefaultLink=de,N.MENU_PIN_CHANGE_EVENT=G,N.MenuBar=Je,N.SessionInfo=Re,N.dispatchMenuPinChange=q,N.getInitialPinState=X,N.subscribeMenuPinChange=fe,N.useMenuPinState=Te,Object.defineProperty(N,Symbol.toStringTag,{value:"Module"})}));
@@ -1,2 +1,2 @@
1
1
  /*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */
2
- @layer components{:root{--aiquants-menu-pinned-width:0px}.aiquants-menu-bar{font-size:1rem;line-height:1.5}.aiquants-menu-bar *{box-sizing:border-box}.aiquants-menu-bar a,.aiquants-menu-bar button{cursor:pointer;background:0 0;border:none;text-decoration:none}.aiquants-menu-bar.dark{color-scheme:dark}.aiquants-menu-bar.dark .aiquants-menu-content{background-color:#0f172a}.aiquants-menu-bar.light .aiquants-menu-content,.aiquants-menu-bar .aiquants-menu-content{background-color:#0369a1}.aiquants-menu-bar.dark .aiquants-signout-button{background-color:#334155}.aiquants-menu-bar.dark .aiquants-signout-button:hover{background-color:#475569}.aiquants-menu-bar.light .aiquants-signout-button,.aiquants-menu-bar .aiquants-signout-button{white-space:nowrap;background-color:#2563eb;min-width:0}.aiquants-menu-bar.light .aiquants-signout-button:hover,.aiquants-menu-bar .aiquants-signout-button:hover{background-color:#1e40af}.aiquants-menu-bar.dark .aiquants-menu-list-item{color:#d1d5db;background-color:#334155}.aiquants-menu-bar.dark .aiquants-menu-list-item:before{background-color:#94a3b8}.aiquants-menu-bar.dark .aiquants-menu-submenu{background-color:#1e293b}.aiquants-menu-bar.dark .aiquants-menu-link{color:#38bdf8}.aiquants-menu-bar.dark .aiquants-menu-separator{border-color:#4b5563}.aiquants-menu-bar.light .aiquants-menu-list-item,.aiquants-menu-bar .aiquants-menu-list-item{color:#4b5563;background-color:#bae6fd}.aiquants-menu-bar.light .aiquants-menu-list-item:before,.aiquants-menu-bar .aiquants-menu-list-item:before{background-color:#fff}.aiquants-menu-bar.light .aiquants-menu-submenu,.aiquants-menu-bar .aiquants-menu-submenu{background-color:#fafafa}.aiquants-menu-bar.light .aiquants-menu-link,.aiquants-menu-bar .aiquants-menu-link{color:#0284c7}.aiquants-menu-bar.light .aiquants-menu-separator,.aiquants-menu-bar .aiquants-menu-separator{border-color:#4b5563}.aiquants-menu-bar .aiquants-menu-separator{border-top:1px solid;height:0}.aiquants-menu-bar.dark .aiquants-session-photo{background-color:#27272a}.aiquants-menu-bar.dark .aiquants-session-link,.aiquants-menu-bar.dark .aiquants-session-info{color:#e2e8f0;background-color:#334155}.aiquants-menu-bar.light .aiquants-session-photo,.aiquants-menu-bar .aiquants-session-photo{background-color:#fafafa}.aiquants-menu-bar.light .aiquants-session-link,.aiquants-menu-bar .aiquants-session-link,.aiquants-menu-bar.light .aiquants-session-info,.aiquants-menu-bar .aiquants-session-info{color:#000;background-color:#dcfce7}.aiquants-menu-accordion-summary{cursor:pointer;justify-content:space-between;align-items:center;display:flex}.aiquants-menu-accordion-summary::-webkit-details-marker{display:none}.aiquants-menu-accordion-summary span{text-align:left;flex-grow:1}.aiquants-submenu-pin-button{border-radius:.375rem;justify-content:center;align-items:center;padding:.25rem;transition:all .3s;display:inline-flex}.aiquants-menu-bar.light .aiquants-submenu-pin-button{color:#4b556366}.aiquants-menu-bar.light .aiquants-submenu-pin-button:hover{color:#4b5563cc;background-color:#4b55631a}.aiquants-menu-bar.light .aiquants-submenu-pin-button.pinned{color:#d97706}.aiquants-menu-bar.light .aiquants-submenu-pin-button.pinned:hover{color:#b45309;background-color:#d977061a}.aiquants-menu-bar.dark .aiquants-submenu-pin-button{color:#fff6}.aiquants-menu-bar.dark .aiquants-submenu-pin-button:hover{color:#fffc;background-color:#ffffff1a}.aiquants-menu-bar.dark .aiquants-submenu-pin-button.pinned{color:#f59e0b}.aiquants-menu-bar.dark .aiquants-submenu-pin-button.pinned:hover{color:#fbbf24;background-color:#f59e0b26}.aiquants-menu-accordion-container{contain:content;transition:block-size .5s}.aiquants-menu-translate-x-0{transform:translate(0)}.aiquants-menu-translate-x-250{transform:translate(250px)}.aiquants-menu-switch{top:calc(var(--spacing) * 2);right:calc(var(--spacing) * 2)}@media (min-width:40rem){.aiquants-menu-switch{top:calc(var(--spacing) * 3);right:calc(var(--spacing) * 3)}}}
2
+ @layer components{:root{--aiquants-menu-pinned-width:0px;--aqmb-switch-position:fixed;--aqmb-switch-top:calc(var(--spacing,.25rem) * 2);--aqmb-switch-right:calc(var(--spacing,.25rem) * 2);--aqmb-switch-left:auto;--aqmb-switch-bottom:auto;--aqmb-switch-z-index:2147480000}.aiquants-menu-bar{font-size:1rem;line-height:1.5;position:relative}.aiquants-menu-bar *{box-sizing:border-box}.aiquants-menu-bar a,.aiquants-menu-bar button{cursor:pointer;background:0 0;border:none;text-decoration:none}.aiquants-menu-bar.dark{color-scheme:dark}.aiquants-menu-bar.dark .aiquants-menu-content{background-color:#0f172a}.aiquants-menu-bar.light .aiquants-menu-content,.aiquants-menu-bar .aiquants-menu-content{background-color:#0369a1}.aiquants-menu-bar.dark .aiquants-signout-button{background-color:#334155}.aiquants-menu-bar.dark .aiquants-signout-button:hover{background-color:#475569}.aiquants-menu-bar.light .aiquants-signout-button,.aiquants-menu-bar .aiquants-signout-button{white-space:nowrap;background-color:#2563eb;min-width:0}.aiquants-menu-bar.light .aiquants-signout-button:hover,.aiquants-menu-bar .aiquants-signout-button:hover{background-color:#1e40af}.aiquants-menu-bar.dark .aiquants-menu-list-item{color:#d1d5db;background-color:#334155}.aiquants-menu-bar.dark .aiquants-menu-list-item:before{background-color:#94a3b8}.aiquants-menu-bar.dark .aiquants-menu-submenu{background-color:#1e293b}.aiquants-menu-bar.dark .aiquants-menu-link{color:#38bdf8}.aiquants-menu-bar.dark .aiquants-menu-separator{border-color:#4b5563}.aiquants-menu-bar.light .aiquants-menu-list-item,.aiquants-menu-bar .aiquants-menu-list-item{color:#4b5563;background-color:#bae6fd}.aiquants-menu-bar.light .aiquants-menu-list-item:before,.aiquants-menu-bar .aiquants-menu-list-item:before{background-color:#fff}.aiquants-menu-bar.light .aiquants-menu-submenu,.aiquants-menu-bar .aiquants-menu-submenu{background-color:#fafafa}.aiquants-menu-bar.light .aiquants-menu-link,.aiquants-menu-bar .aiquants-menu-link{color:#0284c7}.aiquants-menu-bar.light .aiquants-menu-separator,.aiquants-menu-bar .aiquants-menu-separator{border-color:#4b5563}.aiquants-menu-bar .aiquants-menu-separator{border-top:1px solid;height:0}.aiquants-menu-bar .aiquants-session-card{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.aiquants-menu-accordion-summary{cursor:pointer;justify-content:space-between;align-items:center;display:flex}.aiquants-menu-accordion-summary::-webkit-details-marker{display:none}.aiquants-menu-accordion-summary span{text-align:left;flex-grow:1}.aiquants-submenu-pin-button{border-radius:.25rem;justify-content:center;align-items:center;padding:.15rem;transition:all .3s;display:inline-flex}.aiquants-menu-bar.light .aiquants-submenu-pin-button{color:#4b556366}.aiquants-menu-bar.light .aiquants-submenu-pin-button:hover{color:#4b5563cc;background-color:#4b55631a}.aiquants-menu-bar.light .aiquants-submenu-pin-button.pinned{color:#d97706}.aiquants-menu-bar.light .aiquants-submenu-pin-button.pinned:hover{color:#b45309;background-color:#d977061a}.aiquants-menu-bar.dark .aiquants-submenu-pin-button{color:#fff6}.aiquants-menu-bar.dark .aiquants-submenu-pin-button:hover{color:#fffc;background-color:#ffffff1a}.aiquants-menu-bar.dark .aiquants-submenu-pin-button.pinned{color:#f59e0b}.aiquants-menu-bar.dark .aiquants-submenu-pin-button.pinned:hover{color:#fbbf24;background-color:#f59e0b26}.aiquants-menu-accordion-container{contain:content;transition:block-size .5s}.aiquants-menu-translate-x-0{transform:translate(0)}.aiquants-menu-translate-x-250{transform:translate(250px)}.aiquants-menu-switch{position:var(--aqmb-switch-position,fixed);top:var(--aqmb-switch-top,calc(var(--spacing,.25rem) * 2));right:var(--aqmb-switch-right,calc(var(--spacing,.25rem) * 2));left:var(--aqmb-switch-left,auto);bottom:var(--aqmb-switch-bottom,auto);z-index:var(--aqmb-switch-z-index,2147480000)}@media (min-width:40rem){.aiquants-menu-switch{top:var(--aqmb-switch-top,calc(var(--spacing,.25rem) * 3));right:var(--aqmb-switch-right,calc(var(--spacing,.25rem) * 3))}}}
@@ -1,3 +1,3 @@
1
1
  /*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */
2
2
  /*! @aiquants/menu-bar standalone CSS — 非 Tailwind ホスト専用。ホストの Tailwind ビルドと混在させないこと (同名ユーティリティ重複でカスケード反転が起きる) */
3
- @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-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--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-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-content:""}}}@layer theme{:root,:host{--color-red-300:oklch(80.8% .114 19.571);--color-red-500:oklch(63.7% .237 25.331);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-sky-400:oklch(74.6% .16 232.661);--color-sky-600:oklch(58.8% .158 241.966);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--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);--font-weight-medium:500;--radius-md:.375rem;--radius-lg:.5rem;--radius-2xl:1rem;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}}@layer base;@layer components{:root{--aiquants-menu-pinned-width:0px}.aiquants-menu-bar{font-size:1rem;line-height:1.5}.aiquants-menu-bar *{box-sizing:border-box}.aiquants-menu-bar a,.aiquants-menu-bar button{cursor:pointer;background:0 0;border:none;text-decoration:none}.aiquants-menu-bar.dark{color-scheme:dark}.aiquants-menu-bar.dark .aiquants-menu-content{background-color:#0f172a}.aiquants-menu-bar.light .aiquants-menu-content,.aiquants-menu-bar .aiquants-menu-content{background-color:#0369a1}.aiquants-menu-bar.dark .aiquants-signout-button{background-color:#334155}.aiquants-menu-bar.dark .aiquants-signout-button:hover{background-color:#475569}.aiquants-menu-bar.light .aiquants-signout-button,.aiquants-menu-bar .aiquants-signout-button{white-space:nowrap;background-color:#2563eb;min-width:0}.aiquants-menu-bar.light .aiquants-signout-button:hover,.aiquants-menu-bar .aiquants-signout-button:hover{background-color:#1e40af}.aiquants-menu-bar.dark .aiquants-menu-list-item{color:#d1d5db;background-color:#334155}.aiquants-menu-bar.dark .aiquants-menu-list-item:before{background-color:#94a3b8}.aiquants-menu-bar.dark .aiquants-menu-submenu{background-color:#1e293b}.aiquants-menu-bar.dark .aiquants-menu-link{color:#38bdf8}.aiquants-menu-bar.dark .aiquants-menu-separator{border-color:#4b5563}.aiquants-menu-bar.light .aiquants-menu-list-item,.aiquants-menu-bar .aiquants-menu-list-item{color:#4b5563;background-color:#bae6fd}.aiquants-menu-bar.light .aiquants-menu-list-item:before,.aiquants-menu-bar .aiquants-menu-list-item:before{background-color:#fff}.aiquants-menu-bar.light .aiquants-menu-submenu,.aiquants-menu-bar .aiquants-menu-submenu{background-color:#fafafa}.aiquants-menu-bar.light .aiquants-menu-link,.aiquants-menu-bar .aiquants-menu-link{color:#0284c7}.aiquants-menu-bar.light .aiquants-menu-separator,.aiquants-menu-bar .aiquants-menu-separator{border-color:#4b5563}.aiquants-menu-bar .aiquants-menu-separator{border-top:1px solid;height:0}.aiquants-menu-bar.dark .aiquants-session-photo{background-color:#27272a}.aiquants-menu-bar.dark .aiquants-session-link,.aiquants-menu-bar.dark .aiquants-session-info{color:#e2e8f0;background-color:#334155}.aiquants-menu-bar.light .aiquants-session-photo,.aiquants-menu-bar .aiquants-session-photo{background-color:#fafafa}.aiquants-menu-bar.light .aiquants-session-link,.aiquants-menu-bar .aiquants-session-link,.aiquants-menu-bar.light .aiquants-session-info,.aiquants-menu-bar .aiquants-session-info{color:#000;background-color:#dcfce7}.aiquants-menu-accordion-summary{cursor:pointer;justify-content:space-between;align-items:center;display:flex}.aiquants-menu-accordion-summary::-webkit-details-marker{display:none}.aiquants-menu-accordion-summary span{text-align:left;flex-grow:1}.aiquants-submenu-pin-button{border-radius:.375rem;justify-content:center;align-items:center;padding:.25rem;transition:all .3s;display:inline-flex}.aiquants-menu-bar.light .aiquants-submenu-pin-button{color:#4b556366}.aiquants-menu-bar.light .aiquants-submenu-pin-button:hover{color:#4b5563cc;background-color:#4b55631a}.aiquants-menu-bar.light .aiquants-submenu-pin-button.pinned{color:#d97706}.aiquants-menu-bar.light .aiquants-submenu-pin-button.pinned:hover{color:#b45309;background-color:#d977061a}.aiquants-menu-bar.dark .aiquants-submenu-pin-button{color:#fff6}.aiquants-menu-bar.dark .aiquants-submenu-pin-button:hover{color:#fffc;background-color:#ffffff1a}.aiquants-menu-bar.dark .aiquants-submenu-pin-button.pinned{color:#f59e0b}.aiquants-menu-bar.dark .aiquants-submenu-pin-button.pinned:hover{color:#fbbf24;background-color:#f59e0b26}.aiquants-menu-accordion-container{contain:content;transition:block-size .5s}.aiquants-menu-translate-x-0{transform:translate(0)}.aiquants-menu-translate-x-250{transform:translate(250px)}.aiquants-menu-switch{top:calc(var(--spacing) * 2);right:calc(var(--spacing) * 2)}@media (min-width:40rem){.aiquants-menu-switch{top:calc(var(--spacing) * 3);right:calc(var(--spacing) * 3)}}}@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing) * 0)}.top-0{top:calc(var(--spacing) * 0)}.top-1\.5{top:calc(var(--spacing) * 1.5)}.top-3{top:calc(var(--spacing) * 3)}.top-\[18px\]{top:18px}.right-0{right:calc(var(--spacing) * 0)}.left-0{left:calc(var(--spacing) * 0)}.z-2147483640{z-index:2147483640}.z-2147483642{z-index:2147483642}.z-2147483647{z-index:2147483647}.m-1{margin:calc(var(--spacing) * 1)}.mx-1{margin-inline:calc(var(--spacing) * 1)}.mx-2{margin-inline:calc(var(--spacing) * 2)}.my-1{margin-block:calc(var(--spacing) * 1)}.mr-1{margin-right:calc(var(--spacing) * 1)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-4{margin-left:calc(var(--spacing) * 4)}.box-border{box-sizing:border-box}.block{display:block}.flex{display:flex}.inline-block{display:inline-block}.table{display:table}.h-0{height:calc(var(--spacing) * 0)}.h-4{height:calc(var(--spacing) * 4)}.h-14{height:calc(var(--spacing) * 14)}.h-\[3px\]{height:3px}.h-\[27px\]{height:27px}.h-\[100px\]{height:100px}.h-full{height:100%}.h-px{height:1px}.max-h-20{max-height:calc(var(--spacing) * 20)}.min-h-\[1em\]{min-height:1em}.min-h-dvh{min-height:100dvh}.w-4{width:calc(var(--spacing) * 4)}.w-9\/12{width:75%}.w-14{width:calc(var(--spacing) * 14)}.w-\[27px\]{width:27px}.w-\[250px\]{width:250px}.w-full{width:100%}.max-w-52{max-width:calc(var(--spacing) * 52)}.flex-1{flex:1}.grow{flex-grow:1}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.list-none{list-style-type:none}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-nowrap{flex-wrap:nowrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing) * 2)}.overflow-y-scroll{overflow-y:scroll}.rounded{border-radius:.25rem}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-l-2xl{border-top-left-radius:var(--radius-2xl);border-bottom-left-radius:var(--radius-2xl)}.rounded-r-lg{border-top-right-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-white\/15{border-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.border-white\/15{border-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.bg-amber-500\/90{background-color:#f99c00e6}@supports (color:color-mix(in lab, red, red)){.bg-amber-500\/90{background-color:color-mix(in oklab, var(--color-amber-500) 90%, transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-red-500\/90{background-color:#fb2c36e6}@supports (color:color-mix(in lab, red, red)){.bg-red-500\/90{background-color:color-mix(in oklab, var(--color-red-500) 90%, transparent)}}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.bg-white\/10{background-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.object-contain{object-fit:contain}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-2{padding:calc(var(--spacing) * 2)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-2{padding-block:calc(var(--spacing) * 2)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pl-1{padding-left:calc(var(--spacing) * 1)}.text-center{text-align:center}.align-middle{vertical-align:middle}.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))}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.whitespace-nowrap{white-space:nowrap}.text-sky-600{color:var(--color-sky-600)}.text-white{color:var(--color-white)}.opacity-0{opacity:0}.opacity-100{opacity:1}.shadow{--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-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-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)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.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-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}}.before\:-mt-1:before{content:var(--tw-content);margin-top:calc(var(--spacing) * -1)}.before\:mr-2:before{content:var(--tw-content);margin-right:calc(var(--spacing) * 2)}.before\:inline-block:before{content:var(--tw-content);display:inline-block}.before\:h-4:before{content:var(--tw-content);height:calc(var(--spacing) * 4)}.before\:w-4:before{content:var(--tw-content);width:calc(var(--spacing) * 4)}.before\:rounded-full:before{content:var(--tw-content);border-radius:3.40282e38px}.before\:align-middle:before{content:var(--tw-content);vertical-align:middle}.before\:content-\[\'\'\]:before{--tw-content:"";content:var(--tw-content)}.after\:mt-2:after{content:var(--tw-content);margin-top:calc(var(--spacing) * 2)}.after\:-ml-0\.5:after{content:var(--tw-content);margin-left:calc(var(--spacing) * -.5)}.after\:ml-0\.5:after{content:var(--tw-content);margin-left:calc(var(--spacing) * .5)}.after\:block:after{content:var(--tw-content);display:block}.after\:content-\[\'close\'\]:after{--tw-content:"close";content:var(--tw-content)}.after\:content-\[\'menu\'\]:after{--tw-content:"menu";content:var(--tw-content)}@media (hover:hover){.hover\:border-white\/25:hover{border-color:#ffffff40}@supports (color:color-mix(in lab, red, red)){.hover\:border-white\/25:hover{border-color:color-mix(in oklab, var(--color-white) 25%, transparent)}}.hover\:bg-amber-600:hover{background-color:var(--color-amber-600)}.hover\:bg-red-500:hover{background-color:var(--color-red-500)}.hover\:bg-white\/20:hover{background-color:#fff3}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/20:hover{background-color:color-mix(in oklab, var(--color-white) 20%, transparent)}}.hover\:underline:hover{text-decoration-line:underline}}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-amber-300\/60:focus-visible{--tw-ring-color:#ffd23699}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-amber-300\/60:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-amber-300) 60%, transparent)}}.focus-visible\:ring-red-300\/60:focus-visible{--tw-ring-color:#ffa3a399}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-red-300\/60:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-red-300) 60%, transparent)}}.focus-visible\:ring-white\/40:focus-visible{--tw-ring-color:#fff6}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-white\/40:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-white) 40%, transparent)}}.focus-visible\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.dark\:border-gray-600\/40:where(.dark,.dark *){border-color:#4a556566}@supports (color:color-mix(in lab, red, red)){.dark\:border-gray-600\/40:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-gray-600) 40%, transparent)}}.dark\:bg-gray-800\/80:where(.dark,.dark *){background-color:#1e2939cc}@supports (color:color-mix(in lab, red, red)){.dark\:bg-gray-800\/80:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-gray-800) 80%, transparent)}}.dark\:text-sky-400:where(.dark,.dark *){color:var(--color-sky-400)}@media (hover:hover){.dark\:hover\:border-gray-500\/60:where(.dark,.dark *):hover{border-color:#6a728299}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:border-gray-500\/60:where(.dark,.dark *):hover{border-color:color-mix(in oklab, var(--color-gray-500) 60%, transparent)}}.dark\:hover\:bg-gray-700:where(.dark,.dark *):hover{background-color:var(--color-gray-700)}}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@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-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-content{syntax:"*";inherits:false;initial-value:""}
3
+ @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-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-content:""}}}@layer theme{:root,:host{--color-red-300:oklch(80.8% .114 19.571);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-emerald-400:oklch(76.5% .177 163.223);--color-sky-400:oklch(74.6% .16 232.661);--color-sky-600:oklch(58.8% .158 241.966);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--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);--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--leading-tight:1.25;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--blur-xs:4px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}}@layer base;@layer components{:root{--aiquants-menu-pinned-width:0px;--aqmb-switch-position:fixed;--aqmb-switch-top:calc(var(--spacing,.25rem) * 2);--aqmb-switch-right:calc(var(--spacing,.25rem) * 2);--aqmb-switch-left:auto;--aqmb-switch-bottom:auto;--aqmb-switch-z-index:2147480000}.aiquants-menu-bar{font-size:1rem;line-height:1.5;position:relative}.aiquants-menu-bar *{box-sizing:border-box}.aiquants-menu-bar a,.aiquants-menu-bar button{cursor:pointer;background:0 0;border:none;text-decoration:none}.aiquants-menu-bar.dark{color-scheme:dark}.aiquants-menu-bar.dark .aiquants-menu-content{background-color:#0f172a}.aiquants-menu-bar.light .aiquants-menu-content,.aiquants-menu-bar .aiquants-menu-content{background-color:#0369a1}.aiquants-menu-bar.dark .aiquants-signout-button{background-color:#334155}.aiquants-menu-bar.dark .aiquants-signout-button:hover{background-color:#475569}.aiquants-menu-bar.light .aiquants-signout-button,.aiquants-menu-bar .aiquants-signout-button{white-space:nowrap;background-color:#2563eb;min-width:0}.aiquants-menu-bar.light .aiquants-signout-button:hover,.aiquants-menu-bar .aiquants-signout-button:hover{background-color:#1e40af}.aiquants-menu-bar.dark .aiquants-menu-list-item{color:#d1d5db;background-color:#334155}.aiquants-menu-bar.dark .aiquants-menu-list-item:before{background-color:#94a3b8}.aiquants-menu-bar.dark .aiquants-menu-submenu{background-color:#1e293b}.aiquants-menu-bar.dark .aiquants-menu-link{color:#38bdf8}.aiquants-menu-bar.dark .aiquants-menu-separator{border-color:#4b5563}.aiquants-menu-bar.light .aiquants-menu-list-item,.aiquants-menu-bar .aiquants-menu-list-item{color:#4b5563;background-color:#bae6fd}.aiquants-menu-bar.light .aiquants-menu-list-item:before,.aiquants-menu-bar .aiquants-menu-list-item:before{background-color:#fff}.aiquants-menu-bar.light .aiquants-menu-submenu,.aiquants-menu-bar .aiquants-menu-submenu{background-color:#fafafa}.aiquants-menu-bar.light .aiquants-menu-link,.aiquants-menu-bar .aiquants-menu-link{color:#0284c7}.aiquants-menu-bar.light .aiquants-menu-separator,.aiquants-menu-bar .aiquants-menu-separator{border-color:#4b5563}.aiquants-menu-bar .aiquants-menu-separator{border-top:1px solid;height:0}.aiquants-menu-bar .aiquants-session-card{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.aiquants-menu-accordion-summary{cursor:pointer;justify-content:space-between;align-items:center;display:flex}.aiquants-menu-accordion-summary::-webkit-details-marker{display:none}.aiquants-menu-accordion-summary span{text-align:left;flex-grow:1}.aiquants-submenu-pin-button{border-radius:.25rem;justify-content:center;align-items:center;padding:.15rem;transition:all .3s;display:inline-flex}.aiquants-menu-bar.light .aiquants-submenu-pin-button{color:#4b556366}.aiquants-menu-bar.light .aiquants-submenu-pin-button:hover{color:#4b5563cc;background-color:#4b55631a}.aiquants-menu-bar.light .aiquants-submenu-pin-button.pinned{color:#d97706}.aiquants-menu-bar.light .aiquants-submenu-pin-button.pinned:hover{color:#b45309;background-color:#d977061a}.aiquants-menu-bar.dark .aiquants-submenu-pin-button{color:#fff6}.aiquants-menu-bar.dark .aiquants-submenu-pin-button:hover{color:#fffc;background-color:#ffffff1a}.aiquants-menu-bar.dark .aiquants-submenu-pin-button.pinned{color:#f59e0b}.aiquants-menu-bar.dark .aiquants-submenu-pin-button.pinned:hover{color:#fbbf24;background-color:#f59e0b26}.aiquants-menu-accordion-container{contain:content;transition:block-size .5s}.aiquants-menu-translate-x-0{transform:translate(0)}.aiquants-menu-translate-x-250{transform:translate(250px)}.aiquants-menu-switch{position:var(--aqmb-switch-position,fixed);top:var(--aqmb-switch-top,calc(var(--spacing,.25rem) * 2));right:var(--aqmb-switch-right,calc(var(--spacing,.25rem) * 2));left:var(--aqmb-switch-left,auto);bottom:var(--aqmb-switch-bottom,auto);z-index:var(--aqmb-switch-z-index,2147480000)}@media (min-width:40rem){.aiquants-menu-switch{top:var(--aqmb-switch-top,calc(var(--spacing,.25rem) * 3));right:var(--aqmb-switch-right,calc(var(--spacing,.25rem) * 3))}}}@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing) * 0)}.top-0{top:calc(var(--spacing) * 0)}.top-1\.5{top:calc(var(--spacing) * 1.5)}.top-3{top:calc(var(--spacing) * 3)}.top-\[18px\]{top:18px}.-right-0\.5{right:calc(var(--spacing) * -.5)}.right-0{right:calc(var(--spacing) * 0)}.-bottom-0\.5{bottom:calc(var(--spacing) * -.5)}.left-0{left:calc(var(--spacing) * 0)}.z-2147483640{z-index:2147483640}.z-2147483642{z-index:2147483642}.mx-1{margin-inline:calc(var(--spacing) * 1)}.mx-2{margin-inline:calc(var(--spacing) * 2)}.my-0\.5{margin-block:calc(var(--spacing) * .5)}.my-1{margin-block:calc(var(--spacing) * 1)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mr-1{margin-right:calc(var(--spacing) * 1)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-3\.5{margin-left:calc(var(--spacing) * 3.5)}.box-border{box-sizing:border-box}.block{display:block}.flex{display:flex}.grid{display:grid}.inline-block{display:inline-block}.table{display:table}.h-0{height:calc(var(--spacing) * 0)}.h-2{height:calc(var(--spacing) * 2)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-7{height:calc(var(--spacing) * 7)}.h-\[3px\]{height:3px}.h-\[27px\]{height:27px}.h-full{height:100%}.h-px{height:1px}.min-h-dvh{min-height:100dvh}.w-2{width:calc(var(--spacing) * 2)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-7{width:calc(var(--spacing) * 7)}.w-\[27px\]{width:27px}.w-\[240px\]{width:240px}.w-full{width:100%}.min-w-0{min-width:calc(var(--spacing) * 0)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.list-none{list-style-type:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-nowrap{flex-wrap:nowrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overflow-y-scroll{overflow-y:scroll}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-l-xl{border-top-left-radius:var(--radius-xl);border-bottom-left-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.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-slate-900{border-color:var(--color-slate-900)}.border-white\/15{border-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.border-white\/15{border-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.border-white\/20{border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.border-white\/20{border-color:color-mix(in oklab, var(--color-white) 20%, transparent)}}.border-white\/40{border-color:#fff6}@supports (color:color-mix(in lab, red, red)){.border-white\/40{border-color:color-mix(in oklab, var(--color-white) 40%, transparent)}}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-red-500\/90{background-color:#fb2c36e6}@supports (color:color-mix(in lab, red, red)){.bg-red-500\/90{background-color:color-mix(in oklab, var(--color-red-500) 90%, transparent)}}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.bg-white\/10{background-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.object-cover{object-fit:cover}.p-2{padding:calc(var(--spacing) * 2)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.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)}.pt-1{padding-top:calc(var(--spacing) * 1)}.align-middle{vertical-align:middle}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.whitespace-nowrap{white-space:nowrap}.text-sky-600{color:var(--color-sky-600)}.text-white{color:var(--color-white)}.text-white\/70{color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.text-white\/70{color:color-mix(in oklab, var(--color-white) 70%, transparent)}}.text-white\/90{color:#ffffffe6}@supports (color:color-mix(in lab, red, red)){.text-white\/90{color:color-mix(in oklab, var(--color-white) 90%, transparent)}}.opacity-0{opacity:0}.opacity-80{opacity:.8}.opacity-100{opacity:1}.shadow{--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-2xs{--tw-shadow:0 1px 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)}.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)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.backdrop-blur-xs{--tw-backdrop-blur:blur(var(--blur-xs));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.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-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}}.before\:mr-2:before{content:var(--tw-content);margin-right:calc(var(--spacing) * 2)}.before\:inline-block:before{content:var(--tw-content);display:inline-block}.before\:h-2:before{content:var(--tw-content);height:calc(var(--spacing) * 2)}.before\:w-2:before{content:var(--tw-content);width:calc(var(--spacing) * 2)}.before\:shrink-0:before{content:var(--tw-content);flex-shrink:0}.before\:rounded-full:before{content:var(--tw-content);border-radius:3.40282e38px}.before\:content-\[\'\'\]:before{--tw-content:"";content:var(--tw-content)}.after\:mt-2:after{content:var(--tw-content);margin-top:calc(var(--spacing) * 2)}.after\:-ml-0\.5:after{content:var(--tw-content);margin-left:calc(var(--spacing) * -.5)}.after\:ml-0\.5:after{content:var(--tw-content);margin-left:calc(var(--spacing) * .5)}.after\:block:after{content:var(--tw-content);display:block}.after\:content-\[\'close\'\]:after{--tw-content:"close";content:var(--tw-content)}.after\:content-\[\'menu\'\]:after{--tw-content:"menu";content:var(--tw-content)}@media (hover:hover){.hover\:border-white\/30:hover{border-color:#ffffff4d}@supports (color:color-mix(in lab, red, red)){.hover\:border-white\/30:hover{border-color:color-mix(in oklab, var(--color-white) 30%, transparent)}}.hover\:bg-amber-600:hover{background-color:var(--color-amber-600)}.hover\:bg-red-600:hover{background-color:var(--color-red-600)}.hover\:bg-white\/15:hover{background-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/15:hover{background-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.hover\:bg-white\/20:hover{background-color:#fff3}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/20:hover{background-color:color-mix(in oklab, var(--color-white) 20%, transparent)}}.hover\:bg-white\/25:hover{background-color:#ffffff40}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/25:hover{background-color:color-mix(in oklab, var(--color-white) 25%, transparent)}}.hover\:underline:hover{text-decoration-line:underline}}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-amber-300\/60:focus-visible{--tw-ring-color:#ffd23699}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-amber-300\/60:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-amber-300) 60%, transparent)}}.focus-visible\:ring-red-300\/60:focus-visible{--tw-ring-color:#ffa3a399}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-red-300\/60:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-red-300) 60%, transparent)}}.focus-visible\:ring-white\/40:focus-visible{--tw-ring-color:#fff6}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-white\/40:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-white) 40%, transparent)}}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}@media (min-width:40rem){.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.dark\:border-slate-500:where(.dark,.dark *){border-color:var(--color-slate-500)}.dark\:border-slate-600\/50:where(.dark,.dark *){border-color:#45556c80}@supports (color:color-mix(in lab, red, red)){.dark\:border-slate-600\/50:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-slate-600) 50%, transparent)}}.dark\:border-slate-600\/60:where(.dark,.dark *){border-color:#45556c99}@supports (color:color-mix(in lab, red, red)){.dark\:border-slate-600\/60:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-slate-600) 60%, transparent)}}.dark\:border-slate-700\/50:where(.dark,.dark *){border-color:#31415880}@supports (color:color-mix(in lab, red, red)){.dark\:border-slate-700\/50:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-slate-700) 50%, transparent)}}.dark\:border-slate-700\/60:where(.dark,.dark *){border-color:#31415899}@supports (color:color-mix(in lab, red, red)){.dark\:border-slate-700\/60:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-slate-700) 60%, transparent)}}.dark\:bg-amber-600:where(.dark,.dark *){background-color:var(--color-amber-600)}.dark\:bg-red-600\/90:where(.dark,.dark *){background-color:#e40014e6}@supports (color:color-mix(in lab, red, red)){.dark\:bg-red-600\/90:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-red-600) 90%, transparent)}}.dark\:bg-slate-700\/50:where(.dark,.dark *){background-color:#31415880}@supports (color:color-mix(in lab, red, red)){.dark\:bg-slate-700\/50:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-slate-700) 50%, transparent)}}.dark\:bg-slate-700\/60:where(.dark,.dark *){background-color:#31415899}@supports (color:color-mix(in lab, red, red)){.dark\:bg-slate-700\/60:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-slate-700) 60%, transparent)}}.dark\:bg-slate-800\/60:where(.dark,.dark *){background-color:#1d293d99}@supports (color:color-mix(in lab, red, red)){.dark\:bg-slate-800\/60:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-slate-800) 60%, transparent)}}.dark\:text-sky-400:where(.dark,.dark *){color:var(--color-sky-400)}.dark\:text-slate-100:where(.dark,.dark *){color:var(--color-slate-100)}.dark\:text-slate-200:where(.dark,.dark *){color:var(--color-slate-200)}.dark\:text-slate-400:where(.dark,.dark *){color:var(--color-slate-400)}@media (hover:hover){.dark\:hover\:border-slate-600\/80:where(.dark,.dark *):hover{border-color:#45556ccc}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:border-slate-600\/80:where(.dark,.dark *):hover{border-color:color-mix(in oklab, var(--color-slate-600) 80%, transparent)}}.dark\:hover\:bg-amber-500:where(.dark,.dark *):hover{background-color:var(--color-amber-500)}.dark\:hover\:bg-red-500:where(.dark,.dark *):hover{background-color:var(--color-red-500)}.dark\:hover\:bg-slate-600:where(.dark,.dark *):hover{background-color:var(--color-slate-600)}.dark\:hover\:bg-slate-600\/80:where(.dark,.dark *):hover{background-color:#45556ccc}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-slate-600\/80:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-slate-600) 80%, transparent)}}.dark\:hover\:bg-slate-800\/90:where(.dark,.dark *):hover{background-color:#1d293de6}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-slate-800\/90:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-slate-800) 90%, transparent)}}}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value: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-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-content{syntax:"*";inherits:false;initial-value:""}
package/dist/types.d.ts CHANGED
@@ -1 +1,21 @@
1
+ /**
2
+ * @module types
3
+ * @description Common type definitions for @aiquants/menu-bar.
4
+ * @description @aiquants/menu-bar の共通型定義。
5
+ */
1
6
  export type Theme = "light" | "dark";
7
+ /**
8
+ * Menu pin change event payload detail interface.
9
+ * メニューピン留め状態変更イベントの詳細ペイロード。
10
+ */
11
+ export interface MenuPinChangeDetail {
12
+ /** Whether the menu is currently pinned open. メニューが現在ピン留めされているかどうか。 */
13
+ pinned: boolean;
14
+ /** Pinned width in pixels (e.g. 240 or 0). ピン留め時の幅 (ピクセル単位)。 */
15
+ width: number;
16
+ }
17
+ /**
18
+ * Custom Event type for menu pin change events.
19
+ * メニューピン留め状態変更カスタムイベントの型。
20
+ */
21
+ export type MenuPinCustomEvent = CustomEvent<MenuPinChangeDetail>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aiquants/menu-bar",
3
- "version": "1.17.9",
3
+ "version": "1.18.0",
4
4
  "private": false,
5
5
  "description": "A React menu bar component with authentication support and theming",
6
6
  "keywords": [
package/src/MenuBar.tsx CHANGED
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * @module MenuBar
3
- * @description This module provides the main menu bar component.
4
- * @description このモジュールは、メインメニューバーコンポーネントを提供します。
3
+ * @description Main menu bar component for @aiquants/menu-bar.
4
+ * @description @aiquants/menu-bar のメインメニューバーコンポーネント。
5
5
  */
6
- import { useCallback, useEffect, useLayoutEffect, useState } from "react"
6
+ import { useCallback, useEffect, useLayoutEffect, useRef, useState } from "react"
7
7
 
8
8
  const useSafeLayoutEffect = typeof window !== "undefined" ? useLayoutEffect : useEffect
9
9
 
@@ -11,57 +11,92 @@ import { MenuContent } from "./contents/MenuContent"
11
11
  import type { IMenu, MenuNavigationPayload } from "./contents/MenuList"
12
12
  import { OverlayShadow } from "./contents/OverlayShadow"
13
13
  import { MenuSwitch } from "./elements/MenuSwitch"
14
+ import { dispatchMenuPinChange } from "./events/pinEvent"
14
15
  import type { Theme } from "./types"
15
16
 
16
17
  /**
17
- * @interface IMenuBarProps
18
- * @description Props for the MenuBar component.
19
- * @description MenuBar コンポーネントの Props。
20
- * @property {IMenu[]} menuList - The list of menu items. メニュー項目のリスト。
21
- * @property {React.ReactNode} [menuHeader] - The header content of the menu. メニューのヘッダーコンテンツ。
22
- * @property {() => void} onClickSignout - Function to handle sign out. サインアウトを処理する関数。
23
- * @property {boolean} [isMenuhide] - Whether to hide the menu. メニューを非表示にするかどうか。
24
- * @property {Theme} theme - The current theme.
25
- * @property {() => void} toggleTheme - Function to toggle the theme.
26
- * @property {(payload: MenuNavigationPayload) => void} [onMenuNavigate] - Function to receive menu navigation events. メニュー遷移イベントを受け取る関数。
27
- * @property {boolean | "auto"} [closeOnEscape] - Controls whether the Escape key closes the menu.
28
- * - "auto" (default): closes when NOT pinned, stays open when pinned. ピン留めなしでは閉じ、ピン留め中は閉じない。
29
- * - true: always closes on Escape (resets pin if pinned). 常に閉じる。
30
- * - false: never closes on Escape. 常に閉じない。
18
+ * Props interface for the MenuBar component.
19
+ * MenuBar コンポーネントのプロップスインターフェース。
31
20
  */
32
- interface IMenuBarProps {
21
+ export interface IMenuBarProps {
22
+ /** List of menu items. メニュー項目のリスト。 */
33
23
  menuList: IMenu[]
24
+ /** Optional header content rendered at top of menu drawer. メニューヘッダー要素。 */
34
25
  menuHeader?: React.ReactNode
26
+ /** Callback handler for sign out button click. サインアウト処理ハンドラー。 */
35
27
  onClickSignout(): void
28
+ /** Whether to hide the menu bar (legacy camelCase). メニュー非表示フラグ(旧表記)。 */
36
29
  isMenuhide?: boolean
30
+ /** Whether to hide the menu bar. メニュー非表示フラグ。 */
31
+ isMenuHide?: boolean
32
+ /** Current active color theme. 現在のテーマ。 */
37
33
  theme: Theme
34
+ /** Toggle handler for switching color theme. テーマ切り替えハンドラー。 */
38
35
  toggleTheme: () => void
36
+ /** Navigation callback when a menu item is selected. メニュー遷移ハンドラー。 */
39
37
  onMenuNavigate?(payload: MenuNavigationPayload): void
40
- onPinChange?(pinned: boolean): void
38
+ /** Controlled pinning state (optional). ピン留め状態制御プロップ。 */
39
+ isPinned?: boolean
40
+ /** Custom width in pixels when menu is pinned (default: 240). ピン留め時の幅(px)。 */
41
+ pinnedWidth?: number
42
+ /** Callback invoked when menu pin state changes. ピン留め状態変更時のコールバック。 */
43
+ onPinChange?(pinned: boolean, widthPx: number): void
44
+ /** Controlled list of pinned submenu IDs. ピン留めサブメニューIDリスト(制御)。 */
41
45
  pinnedSubmenuIds?: number[]
46
+ /** Initial list of pinned submenu IDs for uncontrolled mode. ピン留めサブメニューID初期リスト。 */
42
47
  initialPinnedSubmenuIds?: number[]
48
+ /** Callback invoked when submenu pin state changes. サブメニューピン留め変更時コールバック。 */
43
49
  onSubmenuPinChange?(pinnedIds: number[]): void
50
+ /** Controls whether the Escape key closes the menu drawer. Escape キーによるメニュー閉鎖制御。 */
44
51
  closeOnEscape?: boolean | "auto"
45
52
  }
46
53
 
47
54
  /**
48
- * @function MenuBar
49
- * @description A component that renders the main menu bar.
50
- * @description メインメニューバーを描画するコンポーネント。
51
- * @param {IMenuBarProps} props - The props for the component.
52
- * @returns {React.JSX.Element | null} The rendered menu bar.
55
+ * Renders the primary collapsible and pinnable menu bar with drawer navigation.
56
+ * 折りたたみ・ピン留め対応のプライマリメニューバーコンポーネント。
57
+ *
58
+ * @param props - MenuBarProps configuration.
59
+ * @returns Rendered JSX element or null.
53
60
  */
54
61
  export const MenuBar = (props: IMenuBarProps): React.JSX.Element | null => {
55
- const { menuList, menuHeader, onClickSignout, isMenuhide, theme, toggleTheme, onMenuNavigate, onPinChange, pinnedSubmenuIds: propPinnedSubmenuIds, initialPinnedSubmenuIds, onSubmenuPinChange, closeOnEscape = "auto" } = props
56
- const [isPinned, setIsPinned] = useState(() => {
62
+ const {
63
+ menuList,
64
+ menuHeader,
65
+ onClickSignout,
66
+ isMenuhide,
67
+ isMenuHide,
68
+ theme,
69
+ toggleTheme,
70
+ onMenuNavigate,
71
+ isPinned: propIsPinned,
72
+ pinnedWidth = 240,
73
+ onPinChange,
74
+ pinnedSubmenuIds: propPinnedSubmenuIds,
75
+ initialPinnedSubmenuIds,
76
+ onSubmenuPinChange,
77
+ closeOnEscape = "auto",
78
+ } = props
79
+
80
+ const shouldHideMenu = isMenuHide ?? isMenuhide ?? false
81
+
82
+ const [internalIsPinned, setInternalIsPinned] = useState(() => {
57
83
  try {
58
84
  return localStorage.getItem("aiquants-menu-pinned") === "true"
59
85
  } catch {
60
86
  return false
61
87
  }
62
88
  })
89
+
90
+ const isPinned = propIsPinned !== undefined ? propIsPinned : internalIsPinned
63
91
  const [isMenuOpen, setIsMenuOpen] = useState(isPinned)
64
92
 
93
+ // isPinned が true に変化した場合は自動的にメニューを開いた状態にする
94
+ useEffect(() => {
95
+ if (isPinned) {
96
+ setIsMenuOpen(true)
97
+ }
98
+ }, [isPinned])
99
+
65
100
  const [pinnedSubmenuIds, setPinnedSubmenuIds] = useState<number[]>(() => {
66
101
  if (initialPinnedSubmenuIds) {
67
102
  return initialPinnedSubmenuIds
@@ -99,17 +134,27 @@ export const MenuBar = (props: IMenuBarProps): React.JSX.Element | null => {
99
134
  [propPinnedSubmenuIds, pinnedSubmenuIds, onSubmenuPinChange],
100
135
  )
101
136
 
102
- // ピン状態変化時に CSS 変数をセットしコールバックで通知
137
+ // コールバック関数参照を useRef で最新保持し、エフェクト再実行のインライン関数連鎖を遮断
138
+ const onPinChangeRef = useRef(onPinChange)
103
139
  useSafeLayoutEffect(() => {
104
- const width = isPinned ? "250px" : "0px"
105
- document.documentElement.style.setProperty("--aiquants-menu-pinned-width", width)
106
- onPinChange?.(isPinned)
107
- }, [isPinned, onPinChange])
140
+ onPinChangeRef.current = onPinChange
141
+ }, [onPinChange])
108
142
 
109
- // アンマウント時に CSS 変数をリセット
143
+ // ピン状態変化時に CSS 変数をセットし、CustomEvent を自動発行
144
+ useSafeLayoutEffect(() => {
145
+ const effectiveWidth = isPinned ? pinnedWidth : 0
146
+ const widthCss = `${effectiveWidth}px`
147
+ document.documentElement.style.setProperty("--aiquants-menu-pinned-width", widthCss)
148
+
149
+ // CustomEvent 発行
150
+ dispatchMenuPinChange(isPinned, effectiveWidth)
151
+ }, [isPinned, pinnedWidth])
152
+
153
+ // アンマウント時に CSS 変数をリセットしピン解除通知を発行
110
154
  useSafeLayoutEffect(() => {
111
155
  return () => {
112
156
  document.documentElement.style.setProperty("--aiquants-menu-pinned-width", "0px")
157
+ dispatchMenuPinChange(false, 0)
113
158
  }
114
159
  }, [])
115
160
 
@@ -119,27 +164,32 @@ export const MenuBar = (props: IMenuBarProps): React.JSX.Element | null => {
119
164
 
120
165
  const handleMenuClose = useCallback(() => {
121
166
  setIsMenuOpen(false)
122
- setIsPinned(false)
123
- try {
124
- localStorage.removeItem("aiquants-menu-pinned")
125
- } catch {}
126
- }, [])
167
+ if (propIsPinned === undefined) {
168
+ setInternalIsPinned(false)
169
+ try {
170
+ localStorage.removeItem("aiquants-menu-pinned")
171
+ } catch {}
172
+ }
173
+ onPinChangeRef.current?.(false, 0)
174
+ }, [propIsPinned])
127
175
 
128
176
  const handleTogglePin = useCallback(() => {
129
- setIsPinned((prev) => {
130
- const next = !prev
131
- if (next) {
132
- try {
177
+ const nextPinned = !isPinned
178
+ const nextWidth = nextPinned ? pinnedWidth : 0
179
+
180
+ if (propIsPinned === undefined) {
181
+ setInternalIsPinned(nextPinned)
182
+ try {
183
+ if (nextPinned) {
133
184
  localStorage.setItem("aiquants-menu-pinned", "true")
134
- } catch {}
135
- } else {
136
- try {
185
+ } else {
137
186
  localStorage.removeItem("aiquants-menu-pinned")
138
- } catch {}
139
- }
140
- return next
141
- })
142
- }, [])
187
+ }
188
+ } catch {}
189
+ }
190
+
191
+ onPinChangeRef.current?.(nextPinned, nextWidth)
192
+ }, [isPinned, propIsPinned, pinnedWidth])
143
193
 
144
194
  const handleMenuSelected = useCallback(
145
195
  (payload: MenuNavigationPayload) => {
@@ -162,15 +212,11 @@ export const MenuBar = (props: IMenuBarProps): React.JSX.Element | null => {
162
212
  [handleMenuClose],
163
213
  )
164
214
 
165
- // Esc キーで閉じるかの実効値。
166
- // "auto" (デフォルト): ピン留めなしでは閉じ、ピン留め中は閉じない。true/false で強制。
167
- // 想定外の値が渡された場合は安全側 (閉じない) に倒す。
168
215
  const escapeCloses = closeOnEscape === true || (closeOnEscape === "auto" && !isPinned)
169
216
 
170
- // Escキーでメニューを閉じる処理 (escapeCloses が true のときのみリスナーを登録)
171
217
  useEffect(() => {
172
218
  if (isMenuOpen && escapeCloses) {
173
- window.addEventListener("keydown", handleEscKey, { passive: true })
219
+ window.addEventListener("keydown", handleEscKey)
174
220
  } else {
175
221
  window.removeEventListener("keydown", handleEscKey)
176
222
  }
@@ -180,7 +226,7 @@ export const MenuBar = (props: IMenuBarProps): React.JSX.Element | null => {
180
226
  }
181
227
  }, [isMenuOpen, escapeCloses, handleEscKey])
182
228
 
183
- return isMenuhide ? null : (
229
+ return shouldHideMenu ? null : (
184
230
  <div className={`aiquants-menu-bar ${theme}`}>
185
231
  <MenuSwitch onMenuClose={handleMenuClose} onMenuOpen={handleMenuOpen} open={!isMenuOpen} theme={theme} />
186
232
  <MenuContent
@@ -0,0 +1,68 @@
1
+ import { act, render, renderHook } from "@testing-library/react"
2
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"
3
+ import { dispatchMenuPinChange, getInitialPinState, subscribeMenuPinChange } from "../events/pinEvent"
4
+ import { useMenuPinState } from "../hooks/useMenuPinState"
5
+ import { MenuBar } from "../MenuBar"
6
+
7
+ describe("pinEvent module & useMenuPinState hook", () => {
8
+ beforeEach(() => {
9
+ localStorage.clear()
10
+ document.documentElement.style.removeProperty("--aiquants-menu-pinned-width")
11
+ })
12
+
13
+ afterEach(() => {
14
+ vi.restoreAllMocks()
15
+ })
16
+
17
+ it("getInitialPinState reads document style or localStorage safely", () => {
18
+ expect(getInitialPinState(240)).toEqual({ pinned: false, width: 0 })
19
+
20
+ localStorage.setItem("aiquants-menu-pinned", "true")
21
+ expect(getInitialPinState(240)).toEqual({ pinned: true, width: 240 })
22
+
23
+ document.documentElement.style.setProperty("--aiquants-menu-pinned-width", "280px")
24
+ expect(getInitialPinState(240)).toEqual({ pinned: true, width: 280 })
25
+ })
26
+
27
+ it("subscribeMenuPinChange fires immediately when immediate: true", () => {
28
+ localStorage.setItem("aiquants-menu-pinned", "true")
29
+ const listener = vi.fn()
30
+
31
+ const unsubscribe = subscribeMenuPinChange(listener, { immediate: true })
32
+ expect(listener).toHaveBeenCalledWith({ pinned: true, width: 240 })
33
+
34
+ dispatchMenuPinChange(false, 0)
35
+ expect(listener).toHaveBeenCalledWith({ pinned: false, width: 0 })
36
+
37
+ unsubscribe()
38
+ })
39
+
40
+ it("useMenuPinState hook syncs state correctly and avoids hydration mismatch", () => {
41
+ localStorage.setItem("aiquants-menu-pinned", "true")
42
+ const { result } = renderHook(() => useMenuPinState({ defaultPinnedWidth: 240 }))
43
+
44
+ expect(result.current).toEqual({ pinned: true, width: 240 })
45
+
46
+ act(() => {
47
+ dispatchMenuPinChange(false, 0)
48
+ })
49
+
50
+ expect(result.current).toEqual({ pinned: false, width: 0 })
51
+ })
52
+
53
+ it("MenuBar triggers onPinChange on toggle and dispatches CustomEvent", () => {
54
+ const onPinChange = vi.fn()
55
+ const eventListener = vi.fn()
56
+ const unsubscribe = subscribeMenuPinChange(eventListener, { immediate: false })
57
+
58
+ const { unmount } = render(<MenuBar menuList={[]} onClickSignout={() => {}} theme="light" toggleTheme={() => {}} isPinned={true} pinnedWidth={240} onPinChange={onPinChange} />)
59
+
60
+ expect(eventListener).toHaveBeenCalledWith({ pinned: true, width: 240 })
61
+ expect(document.documentElement.style.getPropertyValue("--aiquants-menu-pinned-width")).toBe("240px")
62
+
63
+ unmount()
64
+ expect(document.documentElement.style.getPropertyValue("--aiquants-menu-pinned-width")).toBe("0px")
65
+
66
+ unsubscribe()
67
+ })
68
+ })