@appforgeapps/uiforge 0.1.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/LICENSE +21 -0
- package/README.md +1241 -0
- package/dist/index.d.ts +847 -0
- package/dist/uiforge.cjs +6 -0
- package/dist/uiforge.css +1 -0
- package/dist/uiforge.js +1882 -0
- package/package.json +94 -0
package/dist/uiforge.cjs
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),i=require("react"),ht=({variant:t="primary",size:r="medium",children:s,className:n="",...h})=>{const m="uiforge-button",u=`${m}--${t}`,f=`${m}--${r}`,k=`${m} ${u} ${f} ${n}`.trim();return e.jsx("button",{className:k,...h,children:s})},ut=({columns:t,data:r,selectable:s=!1,selectedRows:n,getRowKey:h=(ee,J)=>J,onSelectionChange:m,onCellEdit:u,actionButtons:f=[],searchable:k=!1,searchPlaceholder:O="Search...",onSearch:D,customFilter:W,pagination:d,onPageChange:L,onPageSizeChange:S,pageSizeOptions:F=[10,25,50,100],className:V="",loading:C=!1,emptyMessage:E="No data available"})=>{const[ee,J]=i.useState(new Set),[w,K]=i.useState(""),[M,P]=i.useState(null),[A,a]=i.useState(""),v=n??ee,x=i.useMemo(()=>!k||!w?r:r.filter(l=>W?W(l,w):Object.values(l).some(_=>_==null?!1:String(_).toLowerCase().includes(w.toLowerCase()))),[r,w,k,W]),j=i.useMemo(()=>{if(!d||d.serverSide)return x;const l=d.currentPage*d.pageSize,_=l+d.pageSize;return x.slice(l,_)},[x,d]),q=i.useMemo(()=>d?d.serverSide&&d.totalItems!==void 0?Math.ceil(d.totalItems/d.pageSize):Math.ceil(x.length/d.pageSize):1,[d,x.length]),R=i.useCallback(()=>r.filter((l,_)=>{const y=h(l,_);return v.has(y)}),[r,v,h]),te=i.useCallback(l=>{const _=new Set;l&&j.forEach(y=>{const I=r.indexOf(y),re=h(y,I);_.add(re)}),n===void 0&&J(_),m?.(_,l?j:[])},[j,r,h,m,n]),Q=i.useCallback((l,_,y)=>{const I=new Set(v);y?I.add(l):I.delete(l),n===void 0&&J(I);const re=r.filter((N,ie)=>{const ce=h(N,ie);return I.has(ce)});m?.(I,re)},[v,r,h,m,n]),G=i.useCallback(l=>{K(l),D?.(l)},[D]),se=i.useCallback((l,_,y)=>{P({rowKey:l,columnKey:_}),a(y)},[]),X=i.useCallback((l,_,y)=>{u?.(l,_,A,y),P(null),a("")},[A,u]),c=i.useCallback(()=>{P(null),a("")},[]),H=i.useCallback(l=>{d&&L?.(l,d.pageSize)},[d,L]),b=i.useCallback(l=>{S?.(l),d&&L?.(0,l)},[S,L,d]),$=i.useMemo(()=>j.length===0?!1:j.every(l=>{const _=r.indexOf(l),y=h(l,_);return v.has(y)}),[j,v,r,h]),z=i.useMemo(()=>j.length===0?!1:j.some(_=>{const y=r.indexOf(_),I=h(_,y);return v.has(I)})&&!$,[j,v,$,r,h]),g="uiforge-grid";return e.jsxs("div",{className:`${g} ${V}`.trim(),children:[(k||f.length>0)&&e.jsxs("div",{className:`${g}__toolbar`,children:[k&&e.jsx("div",{className:`${g}__search`,children:e.jsx("input",{type:"text",className:`${g}__search-input`,placeholder:O,value:w,onChange:l=>G(l.target.value),"aria-label":"Search"})}),f.length>0&&e.jsx("div",{className:`${g}__actions`,children:f.map((l,_)=>{const y=l.disabled||l.requiresSelection&&v.size===0;return e.jsx("button",{className:`${g}__action-button ${g}__action-button--${l.variant||"primary"}`,onClick:()=>l.onClick(R()),disabled:y,children:l.label},_)})})]}),e.jsx("div",{className:`${g}__table-container`,children:e.jsxs("table",{className:`${g}__table`,role:"table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[s&&e.jsx("th",{className:`${g}__header-cell ${g}__header-cell--checkbox`,children:e.jsx("input",{type:"checkbox",checked:$,ref:l=>{l&&(l.indeterminate=z)},onChange:l=>te(l.target.checked),"aria-label":"Select all rows"})}),t.map(l=>e.jsx("th",{className:`${g}__header-cell`,style:{width:l.width},children:l.header},l.key))]})}),e.jsx("tbody",{children:C?e.jsx("tr",{children:e.jsx("td",{colSpan:t.length+(s?1:0),className:`${g}__loading-cell`,children:"Loading..."})}):j.length===0?e.jsx("tr",{children:e.jsx("td",{colSpan:t.length+(s?1:0),className:`${g}__empty-cell`,children:E})}):j.map((l,_)=>{const y=r.indexOf(l),I=h(l,y),re=v.has(I);return e.jsxs("tr",{className:`${g}__row ${re?`${g}__row--selected`:""}`,children:[s&&e.jsx("td",{className:`${g}__cell ${g}__cell--checkbox`,children:e.jsx("input",{type:"checkbox",checked:re,onChange:N=>Q(I,l,N.target.checked),"aria-label":`Select row ${_+1}`})}),t.map(N=>{const ie=N.field?l[N.field]:void 0,ce=M?.rowKey===I&&M?.columnKey===N.key;return e.jsx("td",{className:`${g}__cell`,children:ce?e.jsxs("div",{className:`${g}__edit-cell`,children:[e.jsx("input",{type:"text",className:`${g}__edit-input`,value:String(A??""),onChange:ne=>a(ne.target.value),onKeyDown:ne=>{ne.key==="Enter"?X(I,N.key,l):ne.key==="Escape"&&c()},autoFocus:!0,"aria-label":`Edit ${N.header}`}),e.jsx("button",{className:`${g}__edit-button ${g}__edit-button--save`,onClick:()=>X(I,N.key,l),"aria-label":"Save",children:"✓"}),e.jsx("button",{className:`${g}__edit-button ${g}__edit-button--cancel`,onClick:c,"aria-label":"Cancel",children:"✕"})]}):e.jsx("div",{className:`${g}__cell-content ${N.editable?`${g}__cell-content--editable`:""}`,onClick:()=>{N.editable&&se(I,N.key,ie)},onKeyDown:ne=>{N.editable&&(ne.key==="Enter"||ne.key===" ")&&se(I,N.key,ie)},tabIndex:N.editable?0:void 0,role:N.editable?"button":void 0,"aria-label":N.editable?`Edit ${N.header}`:void 0,children:N.render?N.render(ie,l,y):String(ie??"")})},N.key)})]},I)})})]})}),d&&q>1&&e.jsxs("div",{className:`${g}__pagination`,children:[e.jsx("div",{className:`${g}__pagination-info`,children:d.serverSide&&d.totalItems!==void 0?e.jsxs(e.Fragment,{children:["Showing ",d.currentPage*d.pageSize+1," to"," ",Math.min((d.currentPage+1)*d.pageSize,d.totalItems)," ","of ",d.totalItems," items"]}):e.jsxs(e.Fragment,{children:["Showing ",d.currentPage*d.pageSize+1," to"," ",Math.min((d.currentPage+1)*d.pageSize,x.length)," ","of ",x.length," items"]})}),e.jsxs("div",{className:`${g}__pagination-controls`,children:[e.jsx("button",{className:`${g}__pagination-button`,onClick:()=>H(d.currentPage-1),disabled:d.currentPage===0,"aria-label":"Previous page",children:"‹"}),Array.from({length:q},(l,_)=>_).map(l=>l===0||l===q-1||Math.abs(l-d.currentPage)<=1?e.jsx("button",{className:`${g}__pagination-button ${l===d.currentPage?`${g}__pagination-button--active`:""}`,onClick:()=>H(l),"aria-label":`Page ${l+1}`,"aria-current":l===d.currentPage?"page":void 0,children:l+1},l):l===d.currentPage-2||l===d.currentPage+2?e.jsx("span",{className:`${g}__pagination-ellipsis`,children:"..."},l):null),e.jsx("button",{className:`${g}__pagination-button`,onClick:()=>H(d.currentPage+1),disabled:d.currentPage>=q-1,"aria-label":"Next page",children:"›"})]}),e.jsxs("div",{className:`${g}__page-size`,children:[e.jsx("label",{htmlFor:"page-size-select",children:"Items per page:"}),e.jsx("select",{id:"page-size-select",className:`${g}__page-size-select`,value:d.pageSize,onChange:l=>b(Number(l.target.value)),children:F.map(l=>e.jsx("option",{value:l,children:l},l))})]})]})]})},ft=()=>`block-${Date.now()}-${Math.random().toString(36).substring(2,11)}`,de=(t="paragraph")=>({id:ft(),type:t,content:"",format:{}}),xt=({initialBlocks:t=[],onChange:r,placeholder:s="Start typing...",readOnly:n=!1,className:h="",maxHeight:m})=>{const[u,f]=i.useState(t.length>0?t:[de()]),[k,O]=i.useState(null),[D,W]=i.useState(null),[d,L]=i.useState(!1),S=i.useRef(null);i.useEffect(()=>{r&&r(u)},[u,r]);const F=i.useCallback((a,v)=>{f(x=>x.map(j=>j.id===a?{...j,...v}:j))},[]),V=i.useCallback((a="paragraph",v)=>{const x=de(a);f(j=>{if(!v)return[...j,x];const q=j.findIndex(te=>te.id===v),R=[...j];return R.splice(q+1,0,x),R}),O(x.id)},[]),C=i.useCallback(a=>{f(v=>{const x=v.filter(j=>j.id!==a);return x.length>0?x:[de()]})},[]),E=i.useCallback((a,v)=>{f(x=>{const j=x.findIndex(Q=>Q.id===a),q=x.findIndex(Q=>Q.id===v);if(j===-1||q===-1)return x;const R=[...x],[te]=R.splice(j,1);return R.splice(q,0,te),R})},[]),ee=i.useCallback((a,v)=>{n||(W(v),a.dataTransfer.effectAllowed="move")},[n]),J=i.useCallback(a=>{a.preventDefault(),a.dataTransfer.dropEffect="move"},[]),w=i.useCallback((a,v)=>{a.preventDefault(),D&&D!==v&&E(D,v),W(null)},[D,E]),K=i.useCallback(()=>{W(null)},[]),M=i.useCallback(a=>{k&&f(v=>v.map(x=>{if(x.id===k){const j=x.format||{};return{...x,format:{...j,[a]:!j[a]}}}return x}))},[k]),P=i.useCallback((a,v)=>{F(a,{type:v})},[F]),A=i.useCallback((a,v)=>{if(!n){if((a.metaKey||a.ctrlKey)&&a.key==="b")a.preventDefault(),M("bold");else if((a.metaKey||a.ctrlKey)&&a.key==="i")a.preventDefault(),M("italic");else if((a.metaKey||a.ctrlKey)&&a.key==="u")a.preventDefault(),M("underline");else if(a.key==="Enter"&&!a.shiftKey){const x=u.find(j=>j.id===v);x&&x.type!=="code"&&(a.preventDefault(),V("paragraph",v))}else if(a.key==="Backspace"){const x=u.find(j=>j.id===v);x&&!x.content&&u.length>1&&(a.preventDefault(),C(v))}}},[n,u,M,V,C]);return e.jsxs("div",{className:`uiforge-blocks-editor ${h}`,ref:S,style:{maxHeight:m},children:[!n&&d&&k&&e.jsx(gt,{selectedBlock:u.find(a=>a.id===k),onFormatToggle:M,onBlockTypeChange:a=>P(k,a)}),e.jsx("div",{className:"uiforge-blocks-editor__content",children:u.map((a,v)=>e.jsx(mt,{block:a,isSelected:k===a.id,isDragging:D===a.id,readOnly:n,placeholder:v===0&&u.length===1?s:void 0,onSelect:()=>{O(a.id),L(!0)},onChange:x=>F(a.id,x),onDelete:()=>C(a.id),onDragStart:x=>ee(x,a.id),onDragOver:J,onDrop:x=>w(x,a.id),onDragEnd:K,onKeyDown:x=>A(x,a.id)},a.id))}),!n&&e.jsx(vt,{onAddBlock:V})]})},gt=({selectedBlock:t,onFormatToggle:r,onBlockTypeChange:s})=>{if(!t)return null;const n=t.format||{};return e.jsxs("div",{className:"uiforge-blocks-editor__toolbar",role:"toolbar","aria-label":"Text formatting",children:[e.jsx("div",{className:"uiforge-blocks-editor__toolbar-group",children:e.jsxs("select",{value:t.type,onChange:h=>s(h.target.value),className:"uiforge-blocks-editor__toolbar-select","aria-label":"Block type",children:[e.jsx("option",{value:"paragraph",children:"Paragraph"}),e.jsx("option",{value:"heading1",children:"Heading 1"}),e.jsx("option",{value:"heading2",children:"Heading 2"}),e.jsx("option",{value:"heading3",children:"Heading 3"}),e.jsx("option",{value:"list",children:"List"}),e.jsx("option",{value:"quote",children:"Quote"}),e.jsx("option",{value:"code",children:"Code"}),e.jsx("option",{value:"image",children:"Image"})]})}),e.jsx("div",{className:"uiforge-blocks-editor__toolbar-divider"}),e.jsxs("div",{className:"uiforge-blocks-editor__toolbar-group",children:[e.jsx("button",{type:"button",className:`uiforge-blocks-editor__toolbar-button ${n.bold?"active":""}`,onClick:()=>r("bold"),title:"Bold (Ctrl+B)","aria-label":"Bold","aria-pressed":n.bold,children:e.jsx("strong",{children:"B"})}),e.jsx("button",{type:"button",className:`uiforge-blocks-editor__toolbar-button ${n.italic?"active":""}`,onClick:()=>r("italic"),title:"Italic (Ctrl+I)","aria-label":"Italic","aria-pressed":n.italic,children:e.jsx("em",{children:"I"})}),e.jsx("button",{type:"button",className:`uiforge-blocks-editor__toolbar-button ${n.underline?"active":""}`,onClick:()=>r("underline"),title:"Underline (Ctrl+U)","aria-label":"Underline","aria-pressed":n.underline,children:e.jsx("u",{children:"U"})}),e.jsx("button",{type:"button",className:`uiforge-blocks-editor__toolbar-button ${n.code?"active":""}`,onClick:()=>r("code"),title:"Inline Code","aria-label":"Code","aria-pressed":n.code,children:"</>"})]})]})},mt=({block:t,isSelected:r,isDragging:s,readOnly:n,placeholder:h,onSelect:m,onChange:u,onDelete:f,onDragStart:k,onDragOver:O,onDrop:D,onDragEnd:W,onKeyDown:d})=>{const L=["uiforge-blocks-editor__block",`uiforge-blocks-editor__block--${t.type}`,r?"uiforge-blocks-editor__block--selected":"",s?"uiforge-blocks-editor__block--dragging":""].filter(Boolean).join(" "),S=["uiforge-blocks-editor__block-text",t.format?.bold?"uiforge-blocks-editor__block-text--bold":"",t.format?.italic?"uiforge-blocks-editor__block-text--italic":"",t.format?.underline?"uiforge-blocks-editor__block-text--underline":"",t.format?.code?"uiforge-blocks-editor__block-text--code":""].filter(Boolean).join(" "),F=C=>{u({content:C.target.value})},V=()=>{const C={value:t.content,onChange:F,onFocus:m,onKeyDown:d,placeholder:h,readOnly:n,className:S};switch(t.type){case"heading1":return e.jsx("input",{...C,type:"text",className:`${S} uiforge-blocks-editor__heading1`,placeholder:h||"Heading 1"});case"heading2":return e.jsx("input",{...C,type:"text",className:`${S} uiforge-blocks-editor__heading2`,placeholder:h||"Heading 2"});case"heading3":return e.jsx("input",{...C,type:"text",className:`${S} uiforge-blocks-editor__heading3`,placeholder:h||"Heading 3"});case"code":return e.jsx("textarea",{...C,className:`${S} uiforge-blocks-editor__code`,placeholder:h||"Code block",rows:4});case"quote":return e.jsx("textarea",{...C,className:`${S} uiforge-blocks-editor__quote`,placeholder:h||"Quote",rows:2});case"image":return e.jsxs("div",{className:"uiforge-blocks-editor__image-block",children:[e.jsx("input",{type:"text",value:t.imageUrl||"",onChange:E=>u({imageUrl:E.target.value}),placeholder:"Image URL",className:"uiforge-blocks-editor__image-url",readOnly:n}),e.jsx("input",{type:"text",value:t.imageAlt||"",onChange:E=>u({imageAlt:E.target.value}),placeholder:"Alt text",className:"uiforge-blocks-editor__image-alt",readOnly:n}),t.imageUrl&&e.jsx("img",{src:t.imageUrl,alt:t.imageAlt||"Block image",className:"uiforge-blocks-editor__image-preview"})]});default:return e.jsx("textarea",{...C,className:`${S} uiforge-blocks-editor__paragraph`,placeholder:h||"Start typing...",rows:1,style:{minHeight:"1.5em"}})}};return e.jsxs("div",{className:L,draggable:!n,onDragStart:k,onDragOver:O,onDrop:D,onDragEnd:W,"data-block-id":t.id,children:[!n&&e.jsxs("div",{className:"uiforge-blocks-editor__block-controls",children:[e.jsx("button",{type:"button",className:"uiforge-blocks-editor__drag-handle",title:"Drag to reorder","aria-label":"Drag to reorder",children:"⋮⋮"}),e.jsx("button",{type:"button",className:"uiforge-blocks-editor__delete-button",onClick:f,title:"Delete block","aria-label":"Delete block",children:"×"})]}),e.jsx("div",{className:"uiforge-blocks-editor__block-content",children:V()})]})},vt=({onAddBlock:t})=>{const[r,s]=i.useState(!1),n=[{type:"paragraph",label:"Paragraph",icon:"¶"},{type:"heading1",label:"Heading 1",icon:"H1"},{type:"heading2",label:"Heading 2",icon:"H2"},{type:"heading3",label:"Heading 3",icon:"H3"},{type:"list",label:"List",icon:"≡"},{type:"quote",label:"Quote",icon:'"'},{type:"code",label:"Code",icon:"</>"},{type:"image",label:"Image",icon:"🖼"}];return e.jsxs("div",{className:"uiforge-blocks-editor__block-menu",children:[e.jsx("button",{type:"button",className:"uiforge-blocks-editor__add-button",onClick:()=>s(!r),"aria-label":"Add block","aria-expanded":r,children:"+ Add Block"}),r&&e.jsx("div",{className:"uiforge-blocks-editor__block-menu-dropdown",children:n.map(({type:h,label:m,icon:u})=>e.jsxs("button",{type:"button",className:"uiforge-blocks-editor__block-menu-item",onClick:()=>{t(h),s(!1)},children:[e.jsx("span",{className:"uiforge-blocks-editor__block-menu-icon",children:u}),e.jsx("span",{children:m})]},h))})]})};function he(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function pt(t){const r=t.trim(),s=["javascript:","data:","vbscript:","file:"],n=r.toLowerCase();for(const h of s)if(n.startsWith(h))return"";return r}function jt(t){return t.map(r=>{let s=he(r.content);switch(r.format?.bold&&(s=`<strong>${s}</strong>`),r.format?.italic&&(s=`<em>${s}</em>`),r.format?.underline&&(s=`<u>${s}</u>`),r.format?.code&&(s=`<code>${s}</code>`),r.type){case"heading1":return`<h1>${s}</h1>`;case"heading2":return`<h2>${s}</h2>`;case"heading3":return`<h3>${s}</h3>`;case"quote":return`<blockquote>${s}</blockquote>`;case"code":return`<pre><code>${he(r.content)}</code></pre>`;case"image":{const n=pt(r.imageUrl||""),h=he(r.imageAlt||"");return n?`<img src="${n}" alt="${h}" />`:""}case"list":return`<ul><li>${s}</li></ul>`;default:return`<p>${s}</p>`}}).join(`
|
|
2
|
+
`)}function bt(t){return t.map(r=>{let s=r.content;switch(r.format?.bold&&(s=`**${s}**`),r.format?.italic&&(s=`*${s}*`),r.format?.code&&(s=`\`${s}\``),r.type){case"heading1":return`# ${s}`;case"heading2":return`## ${s}`;case"heading3":return`### ${s}`;case"quote":return`> ${s}`;case"code":return`\`\`\`
|
|
3
|
+
${r.content}
|
|
4
|
+
\`\`\``;case"image":return``;case"list":return`- ${s}`;default:return s}}).join(`
|
|
5
|
+
|
|
6
|
+
`)}function yt(t){return JSON.stringify(t,null,2)}const _t=({options:t=[],value:r,onChange:s,onSearch:n,placeholder:h="Select an option...",disabled:m=!1,clearable:u=!1,className:f="",renderOption:k,renderValue:O,loading:D=!1,maxHeight:W="300px",debounceMs:d=300,searchable:L=!0,noOptionsMessage:S="No options found",ariaLabel:F,enableCache:V=!1,cacheTTL:C,refreshOnOpen:E=!1,onClearCache:ee,onForceRefresh:J})=>{const[w,K]=i.useState(!1),[M,P]=i.useState(""),[A,a]=i.useState([]),[v,x]=i.useState(0),[j,q]=i.useState(!1),R=i.useRef(null),te=i.useRef(null),Q=i.useRef(null),G=i.useRef(null),se=i.useRef(null),X=i.useRef(n),c=i.useRef(null),H=i.useRef(!1),b=i.useRef(new Map),$=i.useRef(V),z=i.useRef(C),g=i.useCallback((o,p=0)=>o.reduce((Z,B)=>{const U={...B,level:p};return Z.push(U),B.children&&B.children.length>0&&Z.push(...g(B.children,p+1)),Z},[]),[]),l=o=>typeof o=="string"&&(o.startsWith("http://")||o.startsWith("https://")||o.startsWith("data:")||o.startsWith("/")),_=i.useMemo(()=>g(A.length>0?A:t).find(p=>p.value===r)||null,[r,t,A,g]),y=i.useCallback((o,p)=>{if(!p.trim())return o;const Z=p.toLowerCase(),B=U=>U.reduce((Y,le)=>{const oe=le.label.toLowerCase().includes(Z),ae=le.children?B(le.children):[];return(oe||ae.length>0)&&Y.push({...le,children:ae.length>0?ae:le.children}),Y},[]);return B(o)},[]);i.useEffect(()=>{X.current=n,se.current=null},[n]),i.useEffect(()=>{$.current=V},[V]),i.useEffect(()=>{z.current=C},[C]),i.useEffect(()=>{ee&&ee(()=>{b.current.clear()}),J&&J(()=>{if(!X.current)return;c.current&&c.current.abort(),c.current=new AbortController;const o=c.current.signal;q(!0),(async()=>{try{const p=Date.now(),Z=M,B=b.current.get(Z),U=B&&(!z.current||p-B.timestamp<z.current);let Y;$.current&&U?Y=B.data:(Y=await(X.current?X.current(M,o):n?.(M,o)??[]),!o.aborted&&$.current&&b.current.set(Z,{data:Y,timestamp:p})),o.aborted||(a(Y),se.current=M)}catch(p){console.error(p),a([])}finally{q(!1)}})()})},[ee,J,M]),i.useEffect(()=>{if(n&&w){const o=se.current===M,p=!H.current&&w;return o&&!(E&&p)?void 0:(G.current&&clearTimeout(G.current),G.current=setTimeout(async()=>{c.current&&c.current.abort(),c.current=new AbortController;const B=c.current.signal;q(!0);try{let U;const Y=M,le=b.current.get(Y),oe=Date.now(),ae=le&&(!z.current||oe-le.timestamp<z.current);if($.current&&ae?U=le.data:(U=await(X.current?X.current(M,B):n(M,B)),!B.aborted&&$.current&&b.current.set(Y,{data:U,timestamp:oe})),B.aborted)return;a(U),se.current=M}catch(U){console.error("Error fetching options:",U),a([])}finally{q(!1)}},d),()=>{G.current&&clearTimeout(G.current),c.current&&(c.current.abort(),c.current=null)})}else n||a(y(t,M));H.current=w},[M,w,t,d,y,E]),i.useEffect(()=>{n||a(t)},[t,n]),i.useEffect(()=>{const o=p=>{R.current&&!R.current.contains(p.target)&&(K(!1),P(""))};return document.addEventListener("mousedown",o),()=>document.removeEventListener("mousedown",o)},[]);const I=i.useMemo(()=>g(A.length>0?A:t).filter(p=>!p.disabled),[A,t,g]),re=i.useMemo(()=>g(A.length>0?A:t),[A,t,g]),N=i.useMemo(()=>{const o=new Map;return re.forEach(p=>{const Z=JSON.stringify({value:p.value,label:p.label}),B=I.findIndex(U=>U.value===p.value&&U.label===p.label);o.set(Z,B)}),o},[re,I]),ie=o=>{if(!m)switch(o.key){case"ArrowDown":o.preventDefault(),w?x(p=>p<I.length-1?p+1:0):K(!0);break;case"ArrowUp":o.preventDefault(),w&&x(p=>p>0?p-1:I.length-1);break;case"Enter":o.preventDefault(),w&&I[v]?ce(I[v]):K(!w);break;case"Escape":o.preventDefault(),K(!1),P("");break;case"Tab":w&&(K(!1),P(""));break}};i.useEffect(()=>{if(w&&Q.current){const o=Q.current.querySelector(`[data-index="${v}"]`);o&&typeof o.scrollIntoView=="function"&&o.scrollIntoView({block:"nearest"})}},[v,w]);const ce=o=>{o.disabled||(s?.(o.value,o),K(!1),P(""),x(0))},ne=o=>{o.stopPropagation(),s?.(null,null),P("")},it=()=>{m||K(o=>{const p=!o;return p&&setTimeout(()=>te.current?.focus(),0),p})};i.useEffect(()=>{w||(se.current=null)},[w]);const ct=o=>{P(o.target.value),w||K(!0),x(0)},at=o=>{const p=(o.level||0)*20;return e.jsxs("div",{className:"uiforge-combobox-option-content",style:{paddingLeft:`${p}px`},children:[o.icon&&e.jsx("span",{className:"uiforge-combobox-option-icon",children:l(o.icon)?e.jsx("img",{src:o.icon,alt:"",className:"uiforge-combobox-option-icon-img"}):o.icon}),e.jsx("span",{className:"uiforge-combobox-option-label",children:o.label})]})},ot=o=>o?e.jsxs("div",{className:"uiforge-combobox-value-content",children:[o.icon&&e.jsx("span",{className:"uiforge-combobox-value-icon",children:l(o.icon)?e.jsx("img",{src:o.icon,alt:"",className:"uiforge-combobox-value-icon-img"}):o.icon}),e.jsx("span",{className:"uiforge-combobox-value-label",children:o.label})]}):h,T="uiforge-combobox",dt=[T,w&&`${T}--open`,m&&`${T}--disabled`,f].filter(Boolean).join(" ");return e.jsxs("div",{ref:R,className:dt,onKeyDown:ie,role:"combobox","aria-expanded":w,"aria-haspopup":"listbox","aria-label":F,"aria-disabled":m,tabIndex:m?-1:0,children:[e.jsxs("div",{className:`${T}-control`,onClick:it,children:[L&&w?e.jsx("input",{ref:te,type:"text",className:`${T}-input`,value:M,onChange:ct,placeholder:h,disabled:m,"aria-autocomplete":"list","aria-controls":`${T}-listbox`}):e.jsx("div",{className:`${T}-value`,children:O?O(_):ot(_)}),e.jsxs("div",{className:`${T}-indicators`,children:[u&&r!==null&&r!==void 0&&!m&&e.jsx("button",{type:"button",className:`${T}-clear`,onClick:ne,"aria-label":"Clear selection",tabIndex:-1,children:"×"}),e.jsx("span",{className:`${T}-arrow`,children:"▼"})]})]}),w&&e.jsx("div",{ref:Q,className:`${T}-dropdown`,style:{maxHeight:W},role:"listbox",id:`${T}-listbox`,children:D||j?e.jsx("div",{className:`${T}-loading`,children:"Loading..."}):I.length===0?e.jsx("div",{className:`${T}-no-options`,children:S}):re.map(o=>{const p=JSON.stringify({value:o.value,label:o.label}),Z=N.get(p)??-1,B=o.value===r,U=Z===v,Y=[`${T}-option`,B&&`${T}-option--selected`,U&&`${T}-option--highlighted`,o.disabled&&`${T}-option--disabled`].filter(Boolean).join(" ");return e.jsx("div",{className:Y,onClick:()=>ce(o),role:"option","aria-selected":B,"aria-disabled":o.disabled,"data-index":Z,children:k?k(o):at(o)},p)})})]})},pe=({size:t=16,className:r="",color:s="currentColor"})=>e.jsx("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:e.jsx("path",{d:"M11.93 8.5a4.002 4.002 0 01-7.86 0H.75a.75.75 0 010-1.5h3.32a4.002 4.002 0 017.86 0h3.32a.75.75 0 010 1.5h-3.32zM8 5a3 3 0 100 6 3 3 0 000-6z"})}),je=({size:t=16,className:r="",color:s="currentColor"})=>e.jsx("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:e.jsx("path",{d:"M7.177 3.073L9.573.677A.25.25 0 0110 .854v4.792a.25.25 0 01-.427.177L7.177 3.427a.25.25 0 010-.354zM3.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122v5.256a2.251 2.251 0 11-1.5 0V5.372A2.25 2.25 0 011.5 3.25zM11 2.5h-1V4h1a1 1 0 011 1v5.628a2.251 2.251 0 101.5 0V5A2.5 2.5 0 0011 2.5zm1 10.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0zM3.75 12a.75.75 0 100 1.5.75.75 0 000-1.5z"})}),be=({size:t=16,className:r="",color:s="currentColor"})=>e.jsxs("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:[e.jsx("path",{d:"M8 9.5a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"}),e.jsx("path",{d:"M8 0a8 8 0 100 16A8 8 0 008 0zM1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0z"})]}),ye=({size:t=16,className:r="",color:s="currentColor"})=>e.jsx("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:e.jsx("path",{d:"M0 2.75C0 1.784.784 1 1.75 1h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0114.25 13H8.06l-2.573 2.573A1.458 1.458 0 013 14.543V13H1.75A1.75 1.75 0 010 11.25v-8.5zM1.75 2.5a.25.25 0 00-.25.25v8.5c0 .138.112.25.25.25h2a.75.75 0 01.75.75v2.19l2.72-2.72a.75.75 0 01.53-.22h6.5a.25.25 0 00.25-.25v-8.5a.25.25 0 00-.25-.25H1.75z"})}),_e=({size:t=16,className:r="",color:s="currentColor"})=>e.jsx("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:e.jsx("path",{d:"M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25z"})}),ke=({size:t=16,className:r="",color:s="currentColor"})=>e.jsx("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:e.jsx("path",{d:"M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.251 2.251 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878zm3.75 7.378a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm3-8.75a.75.75 0 100-1.5.75.75 0 000 1.5z"})}),Ce=({size:t=16,className:r="",color:s="currentColor"})=>e.jsx("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:e.jsx("path",{d:"M5 3.254V3.25v.005a.75.75 0 110-.005v.004zm.45 1.9a2.25 2.25 0 10-1.95.218v5.256a2.25 2.25 0 101.5 0V7.123A5.735 5.735 0 009.25 9h1.378a2.251 2.251 0 100-1.5H9.25a4.25 4.25 0 01-3.8-2.346zM12.75 9a.75.75 0 100-1.5.75.75 0 000 1.5zm-8.5 4.5a.75.75 0 100-1.5.75.75 0 000 1.5z"})}),we=({size:t=16,className:r="",color:s="currentColor"})=>e.jsx("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:e.jsx("path",{d:"M7.47 10.78a.75.75 0 001.06 0l3.75-3.75a.75.75 0 00-1.06-1.06L8.75 8.44V1.75a.75.75 0 00-1.5 0v6.69L4.78 5.97a.75.75 0 00-1.06 1.06l3.75 3.75zM3.75 13a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5z"})}),Ie=({size:t=16,className:r="",color:s="currentColor"})=>e.jsx("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:e.jsx("path",{d:"M4.53 4.75A.75.75 0 015 6.25h6a.75.75 0 00.53-1.28l-3-3a.75.75 0 00-1.06 0l-3 3zm.47 6.47a.75.75 0 01.53-.22h6a.75.75 0 01.53 1.28l-3 3a.75.75 0 01-1.06 0l-3-3a.75.75 0 01-.01-1.06h.01z"})}),$e=({size:t=20,className:r="",color:s="currentColor"})=>e.jsxs("svg",{width:t,height:t,viewBox:"0 0 20 20",fill:"none",className:r,children:[e.jsx("path",{d:"M10 2L6 6M10 2L14 6M10 2V7.5",stroke:s,strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round"}),e.jsx("path",{d:"M3 10H17",stroke:s,strokeWidth:"1.5",strokeLinecap:"round",strokeDasharray:"1 2"}),e.jsx("path",{d:"M10 18L6 14M10 18L14 14M10 18V12.5",stroke:s,strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round"})]}),Me=({size:t=20,className:r="",color:s="currentColor"})=>e.jsxs("svg",{width:t,height:t,viewBox:"0 0 20 20",fill:"none",className:r,children:[e.jsx("path",{d:"M10 7.5L6 4M10 7.5L14 4M10 7.5V2",stroke:s,strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round"}),e.jsx("path",{d:"M3 10H17",stroke:s,strokeWidth:"1.5",strokeLinecap:"round",strokeDasharray:"1 2"}),e.jsx("path",{d:"M10 12.5L6 16M10 12.5L14 16M10 12.5V18",stroke:s,strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round"})]}),Ne=({size:t=16,className:r="",color:s="currentColor"})=>e.jsx("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:e.jsx("path",{d:"M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"})}),Le=({size:t=16,className:r="",color:s="currentColor"})=>e.jsx("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:e.jsx("path",{d:"M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"})}),Se=({size:t=16,className:r="",color:s="currentColor"})=>e.jsxs("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:"none",className:r,children:[e.jsx("circle",{cx:"8",cy:"8",r:"7",stroke:s,strokeWidth:"1.5"}),e.jsx("path",{d:"M8 1C11.866 1 15 4.134 15 8C15 11.866 11.866 15 8 15",fill:s}),e.jsx("circle",{cx:"8",cy:"5",r:"2",fill:s==="currentColor"?"white":"#fff"}),e.jsx("circle",{cx:"8",cy:"11",r:"2",fill:s}),e.jsx("circle",{cx:"8",cy:"5",r:"0.5",fill:s}),e.jsx("circle",{cx:"8",cy:"11",r:"0.5",fill:s==="currentColor"?"white":"#fff"})]}),Be=({size:t=16,className:r="",color:s="currentColor"})=>e.jsxs("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:[e.jsx("circle",{cx:"8",cy:"3",r:"1.5"}),e.jsx("path",{d:"M8 5C6.5 5 5 6 5 7.5V9C5 9 5.5 10 6 10.5L5 14H7L8 11L9 14H11L10 10.5C10.5 10 11 9 11 9V7.5C11 6 9.5 5 8 5Z"}),e.jsx("path",{d:"M4 9L2 10M12 9L14 10",strokeWidth:"1",stroke:s,fill:"none"})]}),De=({size:t=16,className:r="",color:s="currentColor"})=>e.jsxs("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:[e.jsx("circle",{cx:"8",cy:"2.5",r:"1.5"}),e.jsx("path",{d:"M8 4.5L6 8L4 14H6L7 10H9L10 14H12L10 8L8 4.5Z"}),e.jsx("path",{d:"M6 8L3 6M10 8L13 6",strokeWidth:"1.5",stroke:s,fill:"none"})]}),Ve=({size:t=16,className:r="",color:s="currentColor"})=>e.jsxs("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:[e.jsx("rect",{x:"1",y:"6",width:"2",height:"4",rx:"0.5"}),e.jsx("rect",{x:"13",y:"6",width:"2",height:"4",rx:"0.5"}),e.jsx("rect",{x:"3",y:"5.5",width:"1",height:"5"}),e.jsx("rect",{x:"12",y:"5.5",width:"1",height:"5"}),e.jsx("rect",{x:"4",y:"7",width:"8",height:"2",rx:"0.5"})]}),He=({size:t=16,className:r="",color:s="currentColor"})=>e.jsxs("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:[e.jsx("circle",{cx:"10",cy:"2.5",r:"1.5"}),e.jsx("path",{d:"M9 4.5L8 6L6 7L4 8L6 9L8 8L10 7L11 9L10 12L9 14H11L12 11L13 9L12 6L10 4.5H9Z"}),e.jsx("path",{d:"M6 14H4L5 11"})]}),Ee=({size:t=16,className:r="",color:s="currentColor"})=>e.jsx("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:"none",className:r,children:e.jsx("path",{d:"M2 8H5L6.5 5L8 11L9.5 8H14",stroke:s,strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),Ae=({size:t=16,className:r="",color:s="currentColor"})=>e.jsxs("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:[e.jsx("path",{d:"M4 8C4 6 5 4 7 4C8 4 8.5 4.5 8.5 5.5C8.5 6 8.8 6.5 9.5 6.5C10.5 6.5 11 7 11 8C11 9.5 10 11 8 12C6 13 4 12 4 10V8Z"}),e.jsx("circle",{cx:"7",cy:"3",r:"1.5"})]}),Re=({size:t=16,className:r="",color:s="currentColor"})=>e.jsxs("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:[e.jsx("rect",{x:"2",y:"2",width:"12",height:"3",rx:"0.5"}),e.jsx("rect",{x:"2",y:"6.5",width:"12",height:"3",rx:"0.5"}),e.jsx("rect",{x:"2",y:"11",width:"12",height:"3",rx:"0.5"}),e.jsx("circle",{cx:"4",cy:"3.5",r:"0.5"}),e.jsx("circle",{cx:"4",cy:"8",r:"0.5"}),e.jsx("circle",{cx:"4",cy:"12.5",r:"0.5"})]}),Te=({size:t=16,className:r="",color:s="currentColor"})=>e.jsxs("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:[e.jsx("ellipse",{cx:"8",cy:"3",rx:"5",ry:"2"}),e.jsx("path",{d:"M3 3V13C3 14.1 5.2 15 8 15C10.8 15 13 14.1 13 13V3"}),e.jsx("path",{d:"M3 8C3 9.1 5.2 10 8 10C10.8 10 13 9.1 13 8"})]}),Pe=({size:t=16,className:r="",color:s="currentColor"})=>e.jsx("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:e.jsx("path",{d:"M4.5 10C2.5 10 1 8.5 1 6.5C1 4.5 2.5 3 4.5 3C4.6 3 4.7 3 4.8 3.05C5.3 1.8 6.5 1 8 1C10 1 11.5 2.5 11.5 4.5C11.5 4.6 11.5 4.7 11.5 4.8C12.9 5.1 14 6.3 14 7.75C14 9.5 12.5 11 10.75 11H4.5Z"})}),ze=({size:t=16,className:r="",color:s="currentColor"})=>e.jsxs("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:[e.jsx("path",{d:"M0 2.75C0 1.784.784 1 1.75 1h12.5c.966 0 1.75.784 1.75 1.75v10.5A1.75 1.75 0 0114.25 15H1.75A1.75 1.75 0 010 13.25V2.75z"}),e.jsx("path",{d:"M3 5.5L6 8L3 10.5",stroke:"white",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",fill:"none"}),e.jsx("line",{x1:"8",y1:"10.5",x2:"12",y2:"10.5",stroke:"white",strokeWidth:"1.5",strokeLinecap:"round"})]}),Ue=({size:t=16,className:r="",color:s="currentColor"})=>e.jsxs("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:[e.jsx("path",{d:"M4.75 7.5a3.25 3.25 0 116.5 0v3.75a3.25 3.25 0 01-6.5 0V7.5z"}),e.jsx("path",{d:"M5.75 7.5c0-.69.56-1.25 1.25-1.25h2c.69 0 1.25.56 1.25 1.25M4 5.5L2 4M12 5.5L14 4M4 9H1M15 9H12M4 12L2 13.5M12 12L14 13.5",stroke:s,strokeWidth:"1.5",fill:"none"}),e.jsx("ellipse",{cx:"8",cy:"4",rx:"2.5",ry:"1.5"})]}),Oe=({size:t=16,className:r="",color:s="currentColor"})=>e.jsx("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:e.jsx("path",{d:"M5.28 3.72a.75.75 0 00-1.06 1.06L7.44 8l-3.22 3.22a.75.75 0 101.06 1.06l3.75-3.75a.75.75 0 000-1.06L5.28 3.72zM8.5 11.5a.75.75 0 000 1.5h5a.75.75 0 000-1.5h-5z"})}),We=({size:t=16,className:r="",color:s="currentColor"})=>e.jsxs("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:[e.jsx("path",{d:"M8 0C6 0 4.5 2 3.5 5L1 7L4 8L5 11L7 8.5C9 7.5 11 6 13 3C14 2 15 0 16 0C16 0 14 2 13 3C11 5 9.5 6.5 8 7.5M10 4C10.552 4 11 3.552 11 3C11 2.448 10.552 2 10 2C9.448 2 9 2.448 9 3C9 3.552 9.448 4 10 4Z"}),e.jsx("path",{d:"M2 12C2 12 0 14 0 16C2 16 4 14 4 14"})]}),Fe=({size:t=16,className:r="",color:s="currentColor"})=>e.jsxs("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:[e.jsx("rect",{x:"6",y:"6",width:"4",height:"4",rx:"0.5"}),e.jsx("path",{d:"M4 4L2 2M4 12L2 14M12 4L14 2M12 12L14 14",strokeWidth:"1.5",stroke:s,strokeLinecap:"round"}),e.jsx("rect",{x:"1",y:"1",width:"1.5",height:"1.5"}),e.jsx("rect",{x:"13.5",y:"1",width:"1.5",height:"1.5"}),e.jsx("rect",{x:"1",y:"13.5",width:"1.5",height:"1.5"}),e.jsx("rect",{x:"13.5",y:"13.5",width:"1.5",height:"1.5"}),e.jsx("circle",{cx:"8",cy:"8",r:"1"})]}),qe=({size:t=16,className:r="",color:s="currentColor"})=>e.jsxs("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:[e.jsx("path",{d:"M8 1C4 1 2 3 2 6C2 8 2 10 3 11C3.5 11.5 4 12 5 12C5.5 12 6 11.5 6.5 10.5C7 9.5 7.5 9 8 9C8.5 9 9 9.5 9.5 10.5C10 11.5 10.5 12 11 12C12 12 12.5 11.5 13 11C14 10 14 8 14 6C14 3 12 1 8 1Z"}),e.jsx("ellipse",{cx:"6",cy:"5.5",rx:"1.5",ry:"2",fill:"white"}),e.jsx("ellipse",{cx:"10",cy:"5.5",rx:"1.5",ry:"2",fill:"white"}),e.jsx("circle",{cx:"6",cy:"5.5",r:"0.75",fill:s}),e.jsx("circle",{cx:"10",cy:"5.5",r:"0.75",fill:s})]}),Ke=({size:t=16,className:r="",color:s="currentColor"})=>e.jsxs("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:[e.jsx("circle",{cx:"8",cy:"8",r:"5"}),e.jsx("ellipse",{cx:"8",cy:"8",rx:"8",ry:"2.5",fill:"none",stroke:s,strokeWidth:"1",opacity:"0.6"}),e.jsx("circle",{cx:"6",cy:"6",r:"1",opacity:"0.4",fill:s==="currentColor"?"white":"#fff"})]}),Ze=({size:t=16,className:r="",color:s="currentColor"})=>e.jsxs("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:[e.jsx("path",{d:"M1 8L6 6L14 2L12 10L10 8L8 14H6L8 8L1 8Z"}),e.jsx("path",{d:"M10 8L12 10",strokeWidth:"1.5",stroke:s})]}),Ge=({size:t=16,className:r="",color:s="currentColor"})=>e.jsx("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:e.jsx("path",{d:"M1.5 13.5V2.5a.5.5 0 01.5-.5h.5a.5.5 0 01.5.5v11a.5.5 0 01-.5.5H2a.5.5 0 01-.5-.5zM5 13.5V5.5a.5.5 0 01.5-.5H6a.5.5 0 01.5.5v8a.5.5 0 01-.5.5h-.5a.5.5 0 01-.5-.5zM8.5 13.5V7.5a.5.5 0 01.5-.5h.5a.5.5 0 01.5.5v6a.5.5 0 01-.5.5H9a.5.5 0 01-.5-.5zM12 13.5V3.5a.5.5 0 01.5-.5h.5a.5.5 0 01.5.5v10a.5.5 0 01-.5.5h-.5a.5.5 0 01-.5-.5z"})}),Je=({size:t=16,className:r="",color:s="currentColor"})=>e.jsxs("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:[e.jsx("circle",{cx:"5",cy:"4",r:"2"}),e.jsx("circle",{cx:"11",cy:"4",r:"2"}),e.jsx("path",{d:"M1 14V12C1 10.5 2.5 9 5 9C7.5 9 9 10.5 9 12V14H1Z"}),e.jsx("path",{d:"M7 14V12C7 10.5 8.5 9 11 9C13.5 9 15 10.5 15 12V14H7Z"})]}),Ye=({size:t=16,className:r="",color:s="currentColor"})=>e.jsxs("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:[e.jsx("path",{d:"M3 1.75C3 .784 3.784 0 4.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0113.25 16h-8.5A1.75 1.75 0 013 14.25V1.75z"}),e.jsx("path",{d:"M10 0v3.5c0 .275.225.5.5.5H14",fill:s==="currentColor"?"white":"#fff"})]}),Qe=({size:t=16,className:r="",color:s="currentColor"})=>e.jsx("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:e.jsx("path",{d:"M4.75 0a.75.75 0 01.75.75V2h5V.75a.75.75 0 011.5 0V2h1.25c.966 0 1.75.784 1.75 1.75v10.5A1.75 1.75 0 0113.25 16H2.75A1.75 1.75 0 011 14.25V3.75C1 2.784 1.784 2 2.75 2H4V.75A.75.75 0 014.75 0zM2.5 7.5v6.75c0 .138.112.25.25.25h10.5a.25.25 0 00.25-.25V7.5h-11z"})}),Xe=({size:t=16,className:r="",color:s="currentColor"})=>e.jsx("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:e.jsx("path",{d:"M6.75 0A1.75 1.75 0 005 1.75V3H1.75C.784 3 0 3.784 0 4.75v8.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0016 13.25v-8.5A1.75 1.75 0 0014.25 3H11V1.75A1.75 1.75 0 009.25 0h-2.5zM9.5 3V1.75a.25.25 0 00-.25-.25h-2.5a.25.25 0 00-.25.25V3h3z"})}),et=({size:t=16,className:r="",color:s="currentColor"})=>e.jsx("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:e.jsx("path",{d:"M11.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122V6A2.5 2.5 0 0110 8.5H6a1 1 0 00-1 1v1.128a2.251 2.251 0 11-1.5 0V5.372a2.25 2.25 0 111.5 0v1.836A2.492 2.492 0 016 7h4a1 1 0 001-1v-.628A2.25 2.25 0 019.5 3.25zM4.25 12a.75.75 0 100 1.5.75.75 0 000-1.5zM3.5 3.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0z"})}),tt=({size:t=16,className:r="",color:s="currentColor"})=>e.jsxs("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:[e.jsx("path",{d:"M3.25 1A2.25 2.25 0 011 3.25v9.5A2.25 2.25 0 013.25 15h9.5A2.25 2.25 0 0115 12.75v-9.5A2.25 2.25 0 0012.75 1h-9.5zM2.5 3.25a.75.75 0 01.75-.75h9.5a.75.75 0 01.75.75v9.5a.75.75 0 01-.75.75h-9.5a.75.75 0 01-.75-.75v-9.5z"}),e.jsx("path",{d:"M8 4a.75.75 0 01.75.75v2.5h2.5a.75.75 0 010 1.5h-2.5v2.5a.75.75 0 01-1.5 0v-2.5h-2.5a.75.75 0 010-1.5h2.5v-2.5A.75.75 0 018 4z"})]}),st=({size:t=16,className:r="",color:s="currentColor"})=>e.jsxs("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:[e.jsx("path",{d:"M6 1h4v1H6V1zM5.5 3h5L13 13c0 1.1-.9 2-2 2H5c-1.1 0-2-.9-2-2L5.5 3z"}),e.jsx("circle",{cx:"7",cy:"8",r:"1",fill:s==="currentColor"?"white":"#fff",opacity:"0.5"}),e.jsx("circle",{cx:"9",cy:"10",r:"0.75",fill:s==="currentColor"?"white":"#fff",opacity:"0.5"})]}),rt=({size:t=16,className:r="",color:s="currentColor"})=>e.jsxs("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:[e.jsx("path",{d:"M8 0L0 3v5c0 5 3 7.5 8 8 5-.5 8-3 8-8V3L8 0z"}),e.jsx("path",{d:"M7 10L4.5 7.5l1-1L7 8l3.5-3.5 1 1L7 10z",fill:s==="currentColor"?"white":"#fff"})]}),nt=({size:t=16,className:r="",color:s="currentColor"})=>e.jsxs("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:[e.jsx("rect",{x:"1",y:"1",width:"9",height:"11",rx:"1"}),e.jsx("line",{x1:"3",y1:"4",x2:"7",y2:"4",stroke:s==="currentColor"?"white":"#fff",strokeWidth:"1"}),e.jsx("line",{x1:"3",y1:"6.5",x2:"7",y2:"6.5",stroke:s==="currentColor"?"white":"#fff",strokeWidth:"1"}),e.jsx("circle",{cx:"11",cy:"11",r:"3",fill:"none",stroke:s,strokeWidth:"1.5"}),e.jsx("line",{x1:"13",y1:"13",x2:"15.5",y2:"15.5",stroke:s,strokeWidth:"1.5",strokeLinecap:"round"})]}),lt=({size:t=16,className:r="",color:s="currentColor"})=>e.jsx("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:s,className:r,children:e.jsx("path",{d:"M4.48 7.27c.26.26 1.28 1.33 1.28 1.33l.56-.58-.88-.91 1.69-1.8s-.76-.74-.43-.45c.32-1.19.03-2.51-.87-3.44C4.93.5 3.66.2 2.52.51l1.93 2-.51 1.96-1.89.52-1.93-2C-.19 4.17.1 5.48 1 6.4c.94.98 2.29 1.26 3.48.87zm6.44 1.94l-2.33 2.3 3.84 3.98c.31.33.73.49 1.14.49.41 0 .82-.16 1.14-.49.63-.65.63-1.7 0-2.35l-3.79-3.93zM16 2.53L13.55 0 6.33 7.46l.88.91-4.31 4.46-.99.53-1.39 2.27.35.37 2.2-1.44.51-1.02L7.9 9.08l.88.91L16 2.53z"})}),ge={commit:pe,pr:je,issue:be,comment:ye,star:_e,fork:ke,merge:Ce,release:we,deploy:Ie},me={unfold:$e,fold:Me,close:Ne,check:Le},kt={taichi:Se,meditation:Be,yoga:De},Ct={dumbbell:Ve,running:He,heartrate:Ee,strength:Ae},wt={server:Re,database:Te,cloud:Pe,terminal:ze,bug:Ue,code:Oe},It={rocket:We,satellite:Fe,alien:qe,planet:Ke,telescope:Ze},$t={chart:Ge,meeting:Je,document:Ye,calendar:Qe,briefcase:Xe},Mt={gitbranch:et,prdraft:tt,testing:st,deployment:rt,review:nt,build:lt},Nt=t=>{const r=ge[t]||ge.commit;return e.jsx(r,{size:16})},ue=(t,r=2)=>{if(t.length===0)return[];const s=[];let n=[],h=null;return t.forEach((m,u)=>{h===m.type?n.push(m):(n.length>=r&&h?s.push(ve(n,h)):n.forEach(f=>{s.push({id:f.id.toString(),type:f.type,count:1,title:f.title,timestamp:new Date(f.timestamp),icon:f.icon,events:[f]})}),n=[m],h=m.type),u===t.length-1&&(n.length>=r&&h?s.push(ve(n,h)):n.forEach(f=>{s.push({id:f.id.toString(),type:f.type,count:1,title:f.title,timestamp:new Date(f.timestamp),icon:f.icon,events:[f]})}))}),s},ve=(t,r)=>{const s=t.reduce((u,f)=>{const k=f.metadata?.repository||"unknown";return u[k]||(u[k]=[]),u[k].push(f),u},{}),n=Object.entries(s),h=n.length>1;let m="";if(h)m=`Created ${t.length} ${fe(r)} in ${n.length} repositories`;else{const u=n[0][0];m=`Created ${t.length} ${fe(r)}${u!=="unknown"?` in ${u}`:""}`}return{id:`group-${r}-${t[0].id}`,type:r,count:t.length,title:m,timestamp:new Date(t[0].timestamp),icon:t[0].icon,events:t,children:h?n.map(([u,f])=>({id:`group-${r}-${u}`,type:r,count:f.length,title:`Created ${f.length} ${fe(r)} in ${u}`,timestamp:new Date(f[0].timestamp),icon:f[0].icon,events:f})):void 0}},fe=t=>({pr:"pull requests",issue:"issues",commit:"commits",comment:"comments",star:"stars",fork:"forks",merge:"merges",release:"releases",deploy:"deployments"})[t]||`${t}s`,xe=t=>{if(t.length===0)return[];const r=[];let s=null;return t.forEach((n,h)=>{if("type"in n&&n.type==="date-separator"){r.push(n);return}const u=n.timestamp,f=`${u.getFullYear()}-${u.getMonth()}`;if(f!==s){const k={id:`sep-${h}`,type:"date-separator",date:u,label:Lt(u)};r.push(k),s=f}r.push(n)}),r},Lt=t=>t.toLocaleDateString("en-US",{month:"long",year:"numeric"}),St=t=>{const r=typeof t=="string"?new Date(t):t,n=new Date().getTime()-r.getTime(),h=Math.floor(n/1e3),m=Math.floor(h/60),u=Math.floor(m/60),f=Math.floor(u/24);return h<60?"just now":m<60?`${m}m ago`:u<24?`${u}h ago`:f<30?`${f}d ago`:r.toLocaleDateString()},Bt=({events:t,theme:r="light",className:s="",showLoadMore:n=!0,loading:h=!1,onLoadMore:m,pagination:u,maxHeight:f,showMoreThreshold:k=100,initiallyExpandedAll:O=!1,emptyMessage:D="No activity to display",onToggleExpand:W,enableGrouping:d=!0,groupingThreshold:L=2,showDateSeparators:S=!0,showTimeline:F=!0,scale:V=1,renderIcon:C,renderEvent:E})=>{const[ee,J]=i.useState(()=>{const c=new Set;return(d?S?xe(ue(t,L)):ue(t,L):t.map(b=>({id:b.id.toString(),type:b.type,count:1,title:b.title,timestamp:new Date(b.timestamp),icon:b.icon,events:[b]}))).forEach(b=>{if("events"in b&&b.type!=="date-separator"){const $=b;(O||$.events.some(z=>z.initiallyExpanded))&&c.add($.id),$.children&&$.children.forEach(z=>{(O||z.events.some(g=>g.initiallyExpanded))&&c.add(z.id)})}}),c}),[w,K]=i.useState(!1),M=i.useRef(null),P=i.useRef(null),A=i.useMemo(()=>{if(!d){const H=t.map(b=>({id:b.id.toString(),type:b.type,count:1,title:b.title,timestamp:new Date(b.timestamp),icon:b.icon,events:[b]}));return S?xe(H):H}const c=ue(t,L);return S?xe(c):c},[t,d,L,S]),a=i.useCallback(()=>{if(!P.current||!n||!m)return;const{scrollTop:c,scrollHeight:H,clientHeight:b}=P.current,$=H-c-b;K($<=k)},[n,m,k]);i.useEffect(()=>{const c=P.current;if(c)return c.addEventListener("scroll",a),a(),()=>{c.removeEventListener("scroll",a)}},[a]);const v=i.useCallback((c,H)=>{J(b=>{const $=new Set(b),z=$.has(c);return z?$.delete(c):$.add(c),W?.(H,!z),$})},[W]),x=(c,H=!1)=>{const b=ee.has(c.id),$=c.children&&c.children.length>0,z=c.count>1,g=c.count===1&&c.events[0]?.description,l=z||$||g,_=c.count===1&&c.events.length===1?c.events[0].id:c.id;return E&&c.count===1&&c.events.length===1?e.jsxs("div",{className:`activity-stream__item ${H?"activity-stream__item--child":""}`,"data-event-id":c.id,children:[F&&!H&&e.jsx("div",{className:"activity-stream__timeline-marker"}),E(c.events[0])]},c.id):e.jsxs("div",{className:`activity-stream__item ${H?"activity-stream__item--child":""}`,"data-event-id":c.id,children:[F&&!H&&e.jsx("div",{className:"activity-stream__timeline-marker"}),e.jsx("div",{className:"activity-stream__icon",children:C&&c.events.length===1?C(c.events[0]):c.icon||Nt(c.type)}),e.jsxs("div",{className:"activity-stream__content",children:[e.jsxs("div",{className:`activity-stream__header ${l?"activity-stream__header--clickable":""}`,onClick:()=>l&&v(c.id,_),onKeyDown:y=>{l&&(y.key==="Enter"||y.key===" ")&&(y.preventDefault(),v(c.id,_))},role:l?"button":void 0,tabIndex:l?0:void 0,"aria-expanded":l?b:void 0,children:[e.jsx("div",{className:"activity-stream__title",children:c.title}),e.jsx("div",{className:"activity-stream__timestamp",children:St(c.timestamp)}),l&&e.jsx("div",{className:"activity-stream__toggle",children:b?e.jsx(me.fold,{size:16}):e.jsx(me.unfold,{size:16})})]}),b&&$&&c.children&&e.jsx("div",{className:"activity-stream__children",children:c.children.map(y=>x(y,!0))}),b&&!$&&c.events.length>1&&e.jsx("div",{className:"activity-stream__events-list",children:c.events.map(y=>E?e.jsx("div",{className:"activity-stream__event-item",children:E(y)},y.id):e.jsxs("div",{className:"activity-stream__event-item",children:[e.jsx("div",{className:"activity-stream__event-title",children:y.title}),y.description&&e.jsx("div",{className:"activity-stream__event-description",children:y.description})]},y.id))}),b&&c.count===1&&c.events[0].description&&e.jsx("div",{className:"activity-stream__description",children:c.events[0].description})]})]},c.id)},j=c=>e.jsxs("div",{className:"activity-stream__date-separator",children:[e.jsx("div",{className:"activity-stream__date-label",children:c.label}),e.jsx("div",{className:"activity-stream__date-line"})]},c.id),q=u?.hasMore!==void 0?u.hasMore:u?.totalItems!==void 0?t.length<u.totalItems:!0,R="activity-stream",te=`${R}--${r}`,Q=F?`${R}--with-timeline`:"";let G=`${R} ${te} ${Q} ${s}`.trim();V&&V<1&&(G=`${G} ${R}--compact`),V&&V>1&&(G=`${G} ${R}--spacious`);const se=f?{maxHeight:f}:void 0,X={"--activity-stream-scale":V};return e.jsx("div",{ref:M,className:G,"data-theme":r,children:e.jsxs("div",{ref:P,className:"activity-stream__container",style:{...se,...X},children:[A.length===0?e.jsx("div",{className:"activity-stream__empty",children:D}):e.jsx("div",{className:"activity-stream__items",children:A.map(c=>"type"in c&&c.type==="date-separator"?j(c):x(c))}),h&&e.jsxs("div",{className:"activity-stream__loading",children:[e.jsx("div",{className:"activity-stream__spinner"}),e.jsx("span",{children:"Loading..."})]}),n&&!h&&q&&m&&e.jsx("div",{className:`activity-stream__load-more ${w?"activity-stream__load-more--visible":""}`,onClick:m,onKeyDown:c=>{(c.key==="Enter"||c.key===" ")&&(c.preventDefault(),m())},role:"button",tabIndex:0,"aria-label":"Load more activities",children:"Show more"})]})})},Dt=()=>e.jsxs("svg",{width:"64",height:"64",viewBox:"0 0 64 64",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"uiforge-video__play-icon",children:[e.jsx("circle",{cx:"32",cy:"32",r:"32",fill:"white",fillOpacity:"0.9"}),e.jsx("path",{d:"M26 20L46 32L26 44V20Z",fill:"currentColor",style:{color:"#3b82f6"}})]}),Vt=()=>e.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",className:"uiforge-video-preview__icon",children:[e.jsx("path",{d:"M2 5a2 2 0 012-2h12a2 2 0 012 2v10a2 2 0 01-2 2H4a2 2 0 01-2-2V5zm2-1a1 1 0 00-1 1v10a1 1 0 001 1h12a1 1 0 001-1V5a1 1 0 00-1-1H4z"}),e.jsx("path",{d:"M8 7l5 3-5 3V7z"})]}),Ht=({title:t,description:r,youtubeId:s,vimeoId:n,thumbnailUrl:h,onPlay:m,className:u="",overlayIcon:f,aspectRatio:k="16/9"})=>{const[O,D]=i.useState(!1),W=i.useRef(null),d=s?"youtube":n?"vimeo":null,L=s||n||"",S=i.useMemo(()=>!d||!L?"":d==="youtube"?`https://www.youtube.com/embed/${L}?autoplay=1&rel=0`:d==="vimeo"?`https://player.vimeo.com/video/${L}?autoplay=1`:"",[d,L]),F=i.useMemo(()=>{if(h)return h;if(d==="youtube"&&s)return`https://img.youtube.com/vi/${s}/maxresdefault.jpg`;if(d==="vimeo"&&n)return},[h,d,s,n]),V=i.useCallback(()=>{!d||!L||(D(!0),m&&m(L,d))},[d,L,m]);if(!s&&!n)return console.warn("UIForgeVideo: Either youtubeId or vimeoId must be provided"),null;const C="uiforge-video",E=`${C} ${u}`.trim();return e.jsxs("div",{className:E,children:[e.jsxs("div",{className:`${C}__header`,children:[e.jsx("h3",{className:`${C}__title`,children:t}),r&&e.jsx("p",{className:`${C}__description`,children:r})]}),e.jsx("div",{className:`${C}__player-container`,style:{aspectRatio:k},children:O?e.jsx("iframe",{ref:W,src:S,title:t,className:`${C}__iframe`,allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowFullScreen:!0}):e.jsxs(e.Fragment,{children:[F&&e.jsx("img",{src:F,alt:t,className:`${C}__thumbnail`}),e.jsx("button",{className:`${C}__overlay`,onClick:V,"aria-label":`Play video: ${t}`,type:"button",children:f||e.jsx(Dt,{})})]})})]})},Et=({title:t,icon:r,className:s="",onClick:n})=>{const h="uiforge-video-preview",m=`${h} ${s}`.trim(),u=()=>{n&&n()},f=D=>{n&&(D.key==="Enter"||D.key===" ")&&(D.preventDefault(),n())},k=n?"button":"div",O=n?{type:"button",onClick:u,onKeyDown:f}:{};return e.jsxs(k,{className:m,...O,children:[e.jsx("div",{className:`${h}__icon-container`,children:r||e.jsx(Vt,{})}),e.jsx("span",{className:`${h}__title`,children:t})]})};exports.ActivityIcons=ge;exports.AlienIcon=qe;exports.BriefcaseIcon=Xe;exports.BugIcon=Ue;exports.BuildIcon=lt;exports.BusinessIcons=$t;exports.Button=ht;exports.CalendarIcon=Qe;exports.ChartIcon=Ge;exports.CheckIcon=Le;exports.CloseIcon=Ne;exports.CloudIcon=Pe;exports.CodeIcon=Oe;exports.CommentIcon=ye;exports.CommitIcon=pe;exports.DatabaseIcon=Te;exports.DeployIcon=Ie;exports.DeploymentIcon=rt;exports.DevProcessIcons=Mt;exports.DocumentIcon=Ye;exports.DumbbellIcon=Ve;exports.FitnessIcons=Ct;exports.FoldIcon=Me;exports.ForkIcon=ke;exports.GitBranchIcon=et;exports.HeartRateIcon=Ee;exports.IssueIcon=be;exports.MeditationIcon=Be;exports.MeetingIcon=Je;exports.MergeIcon=Ce;exports.PlanetIcon=Ke;exports.PullRequestDraftIcon=tt;exports.PullRequestIcon=je;exports.ReleaseIcon=we;exports.ReviewIcon=nt;exports.RocketIcon=We;exports.RunningIcon=He;exports.SatelliteIcon=Fe;exports.ServerIcon=Re;exports.SpaceIcons=It;exports.StarIcon=_e;exports.StrengthIcon=Ae;exports.TaiChiIcon=Se;exports.TechIcons=wt;exports.TelescopeIcon=Ze;exports.TerminalIcon=ze;exports.TestingIcon=st;exports.UIForgeActivityStream=Bt;exports.UIForgeBlocksEditor=xt;exports.UIForgeComboBox=_t;exports.UIForgeGrid=ut;exports.UIForgeVideo=Ht;exports.UIForgeVideoPreview=Et;exports.UIIcons=me;exports.UnfoldIcon=$e;exports.WellnessIcons=kt;exports.YogaIcon=De;exports.blocksToHTML=jt;exports.blocksToJSON=yt;exports.blocksToMarkdown=bt;
|
package/dist/uiforge.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.uiforge-button{font-family:system-ui,-apple-system,sans-serif;font-weight:500;border:none;border-radius:4px;cursor:pointer;transition:all .2s ease-in-out;display:inline-flex;align-items:center;justify-content:center;gap:.5rem}.uiforge-button:disabled{opacity:.5;cursor:not-allowed}.uiforge-button--small{padding:.375rem .75rem;font-size:.875rem}.uiforge-button--medium{padding:.5rem 1rem;font-size:1rem}.uiforge-button--large{padding:.75rem 1.5rem;font-size:1.125rem}.uiforge-button--primary{background-color:#3b82f6;color:#fff}.uiforge-button--primary:hover:not(:disabled){background-color:#2563eb}.uiforge-button--primary:active:not(:disabled){background-color:#1d4ed8}.uiforge-button--secondary{background-color:#6b7280;color:#fff}.uiforge-button--secondary:hover:not(:disabled){background-color:#4b5563}.uiforge-button--secondary:active:not(:disabled){background-color:#374151}.uiforge-button--outline{background-color:transparent;color:#3b82f6;border:2px solid #3b82f6}.uiforge-button--outline:hover:not(:disabled){background-color:#eff6ff}.uiforge-button--outline:active:not(:disabled){background-color:#dbeafe}.uiforge-grid{font-family:system-ui,-apple-system,sans-serif;width:100%;display:flex;flex-direction:column;gap:1rem}.uiforge-grid__toolbar{display:flex;gap:1rem;align-items:center;justify-content:space-between;flex-wrap:wrap}.uiforge-grid__search{flex:1;min-width:200px;max-width:400px}.uiforge-grid__search-input{width:100%;padding:.5rem .75rem;border:1px solid #d1d5db;border-radius:4px;font-size:.875rem;transition:border-color .2s}.uiforge-grid__search-input:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.uiforge-grid__actions{display:flex;gap:.5rem;flex-wrap:wrap}.uiforge-grid__action-button{padding:.5rem 1rem;border:none;border-radius:4px;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s ease-in-out;white-space:nowrap}.uiforge-grid__action-button:disabled{opacity:.5;cursor:not-allowed}.uiforge-grid__action-button--primary{background-color:#3b82f6;color:#fff}.uiforge-grid__action-button--primary:hover:not(:disabled){background-color:#2563eb}.uiforge-grid__action-button--secondary{background-color:#6b7280;color:#fff}.uiforge-grid__action-button--secondary:hover:not(:disabled){background-color:#4b5563}.uiforge-grid__action-button--outline{background-color:transparent;color:#3b82f6;border:2px solid #3b82f6}.uiforge-grid__action-button--outline:hover:not(:disabled){background-color:#eff6ff}.uiforge-grid__table-container{overflow-x:auto;border:1px solid #e5e7eb;border-radius:4px}.uiforge-grid__table{width:100%;border-collapse:collapse;background-color:#fff}.uiforge-grid__header-cell{padding:.75rem 1rem;text-align:left;font-weight:600;font-size:.875rem;color:#374151;background-color:#f9fafb;border-bottom:2px solid #e5e7eb;white-space:nowrap}.uiforge-grid__header-cell--checkbox{width:40px;text-align:center}.uiforge-grid__row{transition:background-color .15s}.uiforge-grid__row:hover{background-color:#f9fafb}.uiforge-grid__row--selected{background-color:#eff6ff}.uiforge-grid__row--selected:hover{background-color:#dbeafe}.uiforge-grid__cell{padding:.75rem 1rem;font-size:.875rem;color:#1f2937;border-bottom:1px solid #e5e7eb;vertical-align:middle}.uiforge-grid__cell--checkbox{width:40px;text-align:center}.uiforge-grid__cell-content{min-height:1.25rem}.uiforge-grid__cell-content--editable{cursor:pointer;padding:.25rem;border-radius:2px;transition:background-color .15s}.uiforge-grid__cell-content--editable:hover{background-color:#f3f4f6}.uiforge-grid__cell-content--editable:focus{outline:2px solid #3b82f6;outline-offset:-2px}.uiforge-grid__edit-cell{display:flex;gap:.25rem;align-items:center}.uiforge-grid__edit-input{flex:1;padding:.25rem .5rem;border:1px solid #3b82f6;border-radius:2px;font-size:.875rem;min-width:100px}.uiforge-grid__edit-input:focus{outline:none;box-shadow:0 0 0 2px #3b82f633}.uiforge-grid__edit-button{padding:.25rem .5rem;border:none;border-radius:2px;font-size:.875rem;font-weight:600;cursor:pointer;transition:background-color .15s;line-height:1}.uiforge-grid__edit-button--save{background-color:#10b981;color:#fff}.uiforge-grid__edit-button--save:hover{background-color:#059669}.uiforge-grid__edit-button--cancel{background-color:#ef4444;color:#fff}.uiforge-grid__edit-button--cancel:hover{background-color:#dc2626}.uiforge-grid__loading-cell,.uiforge-grid__empty-cell{padding:2rem 1rem;text-align:center;color:#6b7280;font-size:.875rem}.uiforge-grid__pagination{display:flex;gap:1rem;align-items:center;justify-content:space-between;flex-wrap:wrap;padding:.5rem 0}.uiforge-grid__pagination-info{font-size:.875rem;color:#6b7280;white-space:nowrap}.uiforge-grid__pagination-controls{display:flex;gap:.25rem;align-items:center}.uiforge-grid__pagination-button{min-width:2rem;height:2rem;padding:0 .5rem;border:1px solid #d1d5db;border-radius:4px;background-color:#fff;color:#374151;font-size:.875rem;cursor:pointer;transition:all .15s}.uiforge-grid__pagination-button:hover:not(:disabled){background-color:#f9fafb;border-color:#9ca3af}.uiforge-grid__pagination-button:disabled{opacity:.5;cursor:not-allowed}.uiforge-grid__pagination-button--active{background-color:#3b82f6;color:#fff;border-color:#3b82f6}.uiforge-grid__pagination-button--active:hover{background-color:#2563eb;border-color:#2563eb}.uiforge-grid__pagination-ellipsis{padding:0 .5rem;color:#9ca3af}.uiforge-grid__page-size{display:flex;gap:.5rem;align-items:center;font-size:.875rem;color:#6b7280;white-space:nowrap}.uiforge-grid__page-size-select{padding:.25rem .5rem;border:1px solid #d1d5db;border-radius:4px;background-color:#fff;font-size:.875rem;cursor:pointer}.uiforge-grid__page-size-select:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}input[type=checkbox]{width:1rem;height:1rem;cursor:pointer;accent-color:#3b82f6}@media(max-width:768px){.uiforge-grid__toolbar{flex-direction:column;align-items:stretch}.uiforge-grid__search{max-width:100%}.uiforge-grid__actions{justify-content:flex-end}.uiforge-grid__pagination{flex-direction:column;align-items:stretch}.uiforge-grid__pagination-controls{justify-content:center}.uiforge-grid__pagination-info,.uiforge-grid__page-size{text-align:center;justify-content:center}.uiforge-grid__cell,.uiforge-grid__header-cell{padding:.5rem .75rem;font-size:.8125rem}}@media(prefers-reduced-motion:reduce){.uiforge-grid__row,.uiforge-grid__cell-content--editable,.uiforge-grid__search-input,.uiforge-grid__pagination-button,.uiforge-grid__action-button,.uiforge-grid__edit-button{transition:none}}.uiforge-grid__search-input:focus-visible,.uiforge-grid__page-size-select:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.uiforge-grid__pagination-button:focus-visible,.uiforge-grid__action-button:focus-visible,.uiforge-grid__edit-button:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}input[type=checkbox]:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}.uiforge-blocks-editor{position:relative;width:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:#fff;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden}.uiforge-blocks-editor__toolbar{display:flex;align-items:center;gap:8px;padding:12px 16px;background-color:#f9fafb;border-bottom:1px solid #e5e7eb;position:sticky;top:0;z-index:10}.uiforge-blocks-editor__toolbar-group{display:flex;align-items:center;gap:4px}.uiforge-blocks-editor__toolbar-divider{width:1px;height:24px;background-color:#d1d5db}.uiforge-blocks-editor__toolbar-select{padding:6px 12px;border:1px solid #d1d5db;border-radius:6px;background-color:#fff;font-size:14px;color:#374151;cursor:pointer;transition:border-color .2s}.uiforge-blocks-editor__toolbar-select:hover{border-color:#9ca3af}.uiforge-blocks-editor__toolbar-select:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.uiforge-blocks-editor__toolbar-button{display:flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:1px solid transparent;border-radius:6px;background-color:transparent;color:#374151;font-size:14px;cursor:pointer;transition:all .2s}.uiforge-blocks-editor__toolbar-button:hover{background-color:#e5e7eb}.uiforge-blocks-editor__toolbar-button:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.uiforge-blocks-editor__toolbar-button.active{background-color:#dbeafe;color:#1e40af;border-color:#93c5fd}.uiforge-blocks-editor__content{padding:24px;min-height:200px;max-height:inherit;overflow-y:auto}.uiforge-blocks-editor__block{position:relative;margin-bottom:12px;padding:8px 8px 8px 48px;border-radius:6px;transition:all .2s}.uiforge-blocks-editor__block:hover{background-color:#f9fafb}.uiforge-blocks-editor__block--selected{background-color:#eff6ff;box-shadow:0 0 0 2px #3b82f6}.uiforge-blocks-editor__block--dragging{opacity:.5;cursor:move}.uiforge-blocks-editor__block-controls{position:absolute;left:8px;top:50%;transform:translateY(-50%);display:flex;flex-direction:column;gap:4px;opacity:0;transition:opacity .2s}.uiforge-blocks-editor__block:hover .uiforge-blocks-editor__block-controls{opacity:1}.uiforge-blocks-editor__drag-handle{display:flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;background-color:transparent;color:#9ca3af;font-size:16px;cursor:grab;transition:color .2s}.uiforge-blocks-editor__drag-handle:hover{color:#4b5563}.uiforge-blocks-editor__drag-handle:active{cursor:grabbing}.uiforge-blocks-editor__delete-button{display:flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;background-color:transparent;color:#9ca3af;font-size:20px;cursor:pointer;transition:color .2s}.uiforge-blocks-editor__delete-button:hover{color:#ef4444}.uiforge-blocks-editor__block-content{width:100%}.uiforge-blocks-editor__block-text{width:100%;padding:8px;border:1px solid transparent;border-radius:4px;background-color:transparent;font-family:inherit;font-size:16px;line-height:1.6;color:#1f2937;resize:vertical;transition:all .2s}.uiforge-blocks-editor__block-text:focus{outline:none;border-color:#3b82f6;background-color:#fff;box-shadow:0 0 0 3px #3b82f61a}.uiforge-blocks-editor__block-text::placeholder{color:#9ca3af}.uiforge-blocks-editor__block-text--bold{font-weight:700}.uiforge-blocks-editor__block-text--italic{font-style:italic}.uiforge-blocks-editor__block-text--underline{text-decoration:underline}.uiforge-blocks-editor__block-text--code{font-family:Monaco,Courier New,monospace;background-color:#f3f4f6;padding:2px 6px;border-radius:3px;font-size:14px}.uiforge-blocks-editor__heading1{font-size:32px;font-weight:700;line-height:1.2}.uiforge-blocks-editor__heading2{font-size:24px;font-weight:700;line-height:1.3}.uiforge-blocks-editor__heading3{font-size:20px;font-weight:600;line-height:1.4}.uiforge-blocks-editor__quote{font-style:italic;color:#6b7280;border-left:4px solid #d1d5db;padding-left:16px;background-color:#f9fafb}.uiforge-blocks-editor__code{font-family:Monaco,Courier New,monospace;font-size:14px;line-height:1.5;background-color:#1f2937;color:#f9fafb;padding:16px;border-radius:6px}.uiforge-blocks-editor__code::placeholder{color:#9ca3af}.uiforge-blocks-editor__image-block{display:flex;flex-direction:column;gap:8px}.uiforge-blocks-editor__image-url,.uiforge-blocks-editor__image-alt{width:100%;padding:8px;border:1px solid #d1d5db;border-radius:4px;font-size:14px}.uiforge-blocks-editor__image-url:focus,.uiforge-blocks-editor__image-alt:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.uiforge-blocks-editor__image-preview{max-width:100%;max-height:400px;border-radius:8px;object-fit:contain}.uiforge-blocks-editor__block-menu{position:relative;padding:16px;border-top:1px solid #e5e7eb}.uiforge-blocks-editor__add-button{padding:10px 20px;border:1px solid #d1d5db;border-radius:6px;background-color:#fff;color:#374151;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}.uiforge-blocks-editor__add-button:hover{background-color:#f9fafb;border-color:#9ca3af}.uiforge-blocks-editor__add-button:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.uiforge-blocks-editor__block-menu-dropdown{position:absolute;bottom:100%;left:16px;margin-bottom:8px;padding:8px;background-color:#fff;border:1px solid #e5e7eb;border-radius:8px;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;z-index:20;min-width:200px}.uiforge-blocks-editor__block-menu-item{display:flex;align-items:center;gap:12px;width:100%;padding:10px 12px;border:none;border-radius:6px;background-color:transparent;text-align:left;font-size:14px;color:#374151;cursor:pointer;transition:background-color .2s}.uiforge-blocks-editor__block-menu-item:hover{background-color:#f3f4f6}.uiforge-blocks-editor__block-menu-icon{display:flex;align-items:center;justify-content:center;width:24px;height:24px;font-size:16px;color:#6b7280}.uiforge-blocks-editor__paragraph{min-height:1.5em}@media(max-width:768px){.uiforge-blocks-editor__toolbar{flex-wrap:wrap;padding:8px}.uiforge-blocks-editor__content{padding:16px}.uiforge-blocks-editor__block{padding-left:40px}.uiforge-blocks-editor__heading1{font-size:24px}.uiforge-blocks-editor__heading2{font-size:20px}.uiforge-blocks-editor__heading3{font-size:18px}}.uiforge-blocks-editor__toolbar-button:focus-visible,.uiforge-blocks-editor__add-button:focus-visible,.uiforge-blocks-editor__block-menu-item:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}@media(prefers-color-scheme:dark){.uiforge-blocks-editor{background-color:#1f2937;border-color:#374151}.uiforge-blocks-editor__toolbar{background-color:#111827;border-color:#374151}.uiforge-blocks-editor__toolbar-select,.uiforge-blocks-editor__add-button{background-color:#374151;border-color:#4b5563;color:#f9fafb}.uiforge-blocks-editor__toolbar-button{color:#f9fafb}.uiforge-blocks-editor__toolbar-button:hover{background-color:#374151}.uiforge-blocks-editor__toolbar-button.active{background-color:#1e40af;color:#dbeafe}.uiforge-blocks-editor__block:hover{background-color:#111827}.uiforge-blocks-editor__block--selected{background-color:#1e3a5f}.uiforge-blocks-editor__block-text{color:#f9fafb}.uiforge-blocks-editor__block-text:focus{background-color:#374151}.uiforge-blocks-editor__quote{color:#d1d5db;background-color:#111827}.uiforge-blocks-editor__code{background-color:#0f172a}.uiforge-blocks-editor__block-menu{border-color:#374151}.uiforge-blocks-editor__block-menu-dropdown{background-color:#1f2937;border-color:#374151}.uiforge-blocks-editor__block-menu-item{color:#f9fafb}.uiforge-blocks-editor__block-menu-item:hover{background-color:#374151}}.uiforge-combobox{position:relative;display:inline-block;width:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:14px;line-height:1.5}.uiforge-combobox-control{display:flex;align-items:center;min-height:38px;padding:6px 12px;background-color:#fff;border:1px solid #d1d5db;border-radius:6px;cursor:pointer;transition:all .2s ease}.uiforge-combobox-control:hover{border-color:#9ca3af}.uiforge-combobox--open .uiforge-combobox-control{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.uiforge-combobox--disabled .uiforge-combobox-control{background-color:#f3f4f6;cursor:not-allowed;opacity:.6}.uiforge-combobox-value{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#1f2937}.uiforge-combobox-value:empty:before{content:attr(placeholder);color:#9ca3af}.uiforge-combobox-value-content{display:flex;align-items:center;gap:8px}.uiforge-combobox-value-icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:20px;height:20px}.uiforge-combobox-value-icon-img{width:100%;height:100%;object-fit:contain}.uiforge-combobox-value-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.uiforge-combobox-input{flex:1;border:none;outline:none;background:transparent;font-size:inherit;font-family:inherit;color:#1f2937;padding:0;min-width:0}.uiforge-combobox-input::placeholder{color:#9ca3af}.uiforge-combobox-indicators{display:flex;align-items:center;gap:4px;flex-shrink:0;margin-left:8px}.uiforge-combobox-clear{display:flex;align-items:center;justify-content:center;width:20px;height:20px;padding:0;border:none;background:none;cursor:pointer;color:#6b7280;font-size:20px;line-height:1;transition:color .2s ease}.uiforge-combobox-clear:hover{color:#1f2937}.uiforge-combobox-arrow{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;color:#6b7280;font-size:10px;transition:transform .2s ease;pointer-events:none}.uiforge-combobox--open .uiforge-combobox-arrow{transform:rotate(180deg)}.uiforge-combobox-dropdown{position:absolute;top:100%;left:0;right:0;margin-top:4px;background-color:#fff;border:1px solid #d1d5db;border-radius:6px;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow-y:auto;z-index:1000;animation:slideDown .15s ease-out}@keyframes slideDown{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.uiforge-combobox-option{padding:8px 12px;cursor:pointer;transition:background-color .15s ease;color:#1f2937}.uiforge-combobox-option:hover:not(.uiforge-combobox-option--disabled){background-color:#f3f4f6}.uiforge-combobox-option--highlighted{background-color:#eff6ff}.uiforge-combobox-option--selected{background-color:#dbeafe;color:#1e40af;font-weight:500}.uiforge-combobox-option--disabled{color:#9ca3af;cursor:default;font-weight:600;background-color:#f9fafb}.uiforge-combobox-option-content{display:flex;align-items:center;gap:8px}.uiforge-combobox-option-icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:20px;height:20px}.uiforge-combobox-option-icon-img{width:100%;height:100%;object-fit:contain}.uiforge-combobox-option-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.uiforge-combobox-loading,.uiforge-combobox-no-options{padding:12px;text-align:center;color:#6b7280;font-style:italic}.uiforge-combobox-loading:after{content:"";display:inline-block;width:12px;height:12px;margin-left:8px;border:2px solid #3b82f6;border-radius:50%;border-top-color:transparent;animation:spin .6s linear infinite}.uiforge-combobox:focus-within .uiforge-combobox-control{outline:2px solid #3b82f6;outline-offset:2px}.uiforge-combobox--disabled:focus-within .uiforge-combobox-control{outline:none}.activity-stream{--activity-stream-scale: 1;--activity-stream-item-padding-y-base: 6px;--activity-stream-item-padding-x-base: 14px;--activity-stream-item-gap-base: 8px;--activity-stream-content-gap-base: 4px;--activity-stream-header-gap-base: 6px;--activity-stream-title-line-height-base: 1.4;--activity-stream-timestamp-margin-top-base: 2px;--activity-stream-toggle-margin-left-base: 2px;--activity-stream-description-padding-y-base: 6px;--activity-stream-description-padding-x-base: 10px;--activity-stream-child-gap-base: 6px;--activity-stream-child-margin-top-base: 6px;--activity-stream-child-padding-left-base: 12px;--activity-stream-events-gap-base: 8px;--activity-stream-event-item-padding-y-base: 6px;--activity-stream-event-title-margin-bottom-base: 4px;--activity-stream-date-separator-gap-base: 10px;--activity-stream-date-separator-padding-top-base: 16px;--activity-stream-date-separator-padding-right-base: 16px;--activity-stream-date-separator-padding-bottom-base: 12px;--activity-stream-date-label-padding-right-base: 8px;--activity-stream-icon-size-base: 24px;--activity-stream-icon-svg-size-base: 12px;--activity-stream-timeline-left-base: 23px;--activity-stream-timeline-top-base: 28px;--activity-stream-timeline-marker-left-base: 15px;--activity-stream-timeline-marker-top-base: 14px;--activity-stream-timeline-marker-size-base: 10px;--activity-stream-item-padding-y: calc( var(--activity-stream-item-padding-y-base) * var(--activity-stream-scale) );--activity-stream-item-padding-x: calc( var(--activity-stream-item-padding-x-base) * var(--activity-stream-scale) );--activity-stream-item-gap: calc( var(--activity-stream-item-gap-base) * var(--activity-stream-scale) );--activity-stream-content-gap: calc( var(--activity-stream-content-gap-base) * var(--activity-stream-scale) );--activity-stream-header-gap: calc( var(--activity-stream-header-gap-base) * var(--activity-stream-scale) );--activity-stream-title-line-height: calc( var(--activity-stream-title-line-height-base) * var(--activity-stream-scale) );--activity-stream-timestamp-margin-top: calc( var(--activity-stream-timestamp-margin-top-base) * var(--activity-stream-scale) );--activity-stream-toggle-margin-left: calc( var(--activity-stream-toggle-margin-left-base) * var(--activity-stream-scale) );--activity-stream-description-padding-y: calc( var(--activity-stream-description-padding-y-base) * var(--activity-stream-scale) );--activity-stream-description-padding-x: calc( var(--activity-stream-description-padding-x-base) * var(--activity-stream-scale) );--activity-stream-child-gap: calc( var(--activity-stream-child-gap-base) * var(--activity-stream-scale) );--activity-stream-child-margin-top: calc( var(--activity-stream-child-margin-top-base) * var(--activity-stream-scale) );--activity-stream-child-padding-left: calc( var(--activity-stream-child-padding-left-base) * var(--activity-stream-scale) );--activity-stream-events-gap: calc( var(--activity-stream-events-gap-base) * var(--activity-stream-scale) );--activity-stream-event-item-padding-y: calc( var(--activity-stream-event-item-padding-y-base) * var(--activity-stream-scale) );--activity-stream-event-title-margin-bottom: calc( var(--activity-stream-event-title-margin-bottom-base) * var(--activity-stream-scale) );--activity-stream-date-separator-gap: calc( var(--activity-stream-date-separator-gap-base) * var(--activity-stream-scale) );--activity-stream-date-separator-padding-top: calc( var(--activity-stream-date-separator-padding-top-base) * var(--activity-stream-scale) );--activity-stream-date-separator-padding-right: calc( var(--activity-stream-date-separator-padding-right-base) * var(--activity-stream-scale) );--activity-stream-date-separator-padding-bottom: calc( var(--activity-stream-date-separator-padding-bottom-base) * var(--activity-stream-scale) );--activity-stream-date-label-padding-right: calc( var(--activity-stream-date-label-padding-right-base) * var(--activity-stream-scale) );--activity-stream-icon-size: calc( var(--activity-stream-icon-size-base) * var(--activity-stream-scale) );--activity-stream-icon-svg-size: calc( var(--activity-stream-icon-svg-size-base) * var(--activity-stream-scale) );--activity-stream-timeline-left: calc( var(--activity-stream-timeline-left-base) * var(--activity-stream-scale) );--activity-stream-timeline-top: calc( var(--activity-stream-timeline-top-base) * var(--activity-stream-scale) );--activity-stream-timeline-marker-left: calc( var(--activity-stream-timeline-marker-left-base) * var(--activity-stream-scale) );--activity-stream-timeline-marker-top: calc( var(--activity-stream-timeline-marker-top-base) * var(--activity-stream-scale) );--activity-stream-timeline-marker-size: calc( var(--activity-stream-timeline-marker-size-base) * var(--activity-stream-scale) );--activity-stream-mobile-item-padding-y: 8px;--activity-stream-mobile-item-padding-x: 10px;--activity-stream-mobile-item-gap: 8px;--activity-stream-mobile-icon-size: 24px;--activity-stream-mobile-icon-svg-size: 12px;--activity-stream-mobile-timeline-left: 14px;--activity-stream-mobile-timeline-marker-left: 10px;--activity-stream-mobile-timeline-marker-size: 12px;--activity-stream-mobile-item-padding-y-base: 8px;--activity-stream-mobile-item-padding-x-base: 10px;--activity-stream-mobile-item-gap-base: 8px;--activity-stream-mobile-icon-size-base: 24px;--activity-stream-mobile-icon-svg-size-base: 12px;--activity-stream-mobile-timeline-left-base: 14px;--activity-stream-mobile-timeline-marker-left-base: 10px;--activity-stream-mobile-timeline-marker-size-base: 12px;--activity-stream-mobile-item-padding-y: calc( var(--activity-stream-mobile-item-padding-y-base) * var(--activity-stream-scale) );--activity-stream-mobile-item-padding-x: calc( var(--activity-stream-mobile-item-padding-x-base) * var(--activity-stream-scale) );--activity-stream-mobile-item-gap: calc( var(--activity-stream-mobile-item-gap-base) * var(--activity-stream-scale) );--activity-stream-mobile-icon-size: calc( var(--activity-stream-mobile-icon-size-base) * var(--activity-stream-scale) );--activity-stream-mobile-icon-svg-size: calc( var(--activity-stream-mobile-icon-svg-size-base) * var(--activity-stream-scale) );--activity-stream-mobile-timeline-left: calc( var(--activity-stream-mobile-timeline-left-base) * var(--activity-stream-scale) );--activity-stream-mobile-timeline-marker-left: calc( var(--activity-stream-mobile-timeline-marker-left-base) * var(--activity-stream-scale) );--activity-stream-mobile-timeline-marker-size: calc( var(--activity-stream-mobile-timeline-marker-size-base) * var(--activity-stream-scale) );--activity-stream-bg: #ffffff;--activity-stream-text: #24292f;--activity-stream-text-secondary: #57606a;--activity-stream-border: #d0d7de;--activity-stream-hover-bg: #f6f8fa;--activity-stream-icon-bg: #f6f8fa;--activity-stream-icon-color: #57606a;--activity-stream-timeline-color: #d0d7de;--activity-stream-link-color: #0969da;--activity-stream-shadow: rgba(0, 0, 0, .1);--activity-stream-load-more-bg: #f6f8fa;--activity-stream-load-more-text: #57606a;--activity-stream-load-more-hover: #d0d7de;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Noto Sans,Helvetica,Arial,sans-serif;position:relative;width:100%}.activity-stream--dark{--activity-stream-bg: #0d1117;--activity-stream-text: #e6edf3;--activity-stream-text-secondary: #8b949e;--activity-stream-border: #30363d;--activity-stream-hover-bg: #161b22;--activity-stream-icon-bg: #161b22;--activity-stream-icon-color: #8b949e;--activity-stream-timeline-color: #30363d;--activity-stream-link-color: #2f81f7;--activity-stream-shadow: rgba(0, 0, 0, .3);--activity-stream-load-more-bg: #21262d;--activity-stream-load-more-text: #8b949e;--activity-stream-load-more-hover: #30363d}.activity-stream--spacious{--activity-stream-item-padding-y: 10px;--activity-stream-item-padding-x: 16px;--activity-stream-item-gap: 12px;--activity-stream-content-gap: 6px;--activity-stream-header-gap: 10px;--activity-stream-title-line-height: 1.6;--activity-stream-timestamp-margin-top: 0px;--activity-stream-toggle-margin-left: 6px;--activity-stream-description-padding-y: 8px;--activity-stream-description-padding-x: 12px;--activity-stream-child-gap: 10px;--activity-stream-child-margin-top: 10px;--activity-stream-child-padding-left: 16px;--activity-stream-events-gap: 12px;--activity-stream-event-item-padding-y: 8px;--activity-stream-event-title-margin-bottom: 6px;--activity-stream-date-separator-gap: 12px;--activity-stream-date-separator-padding-top: 20px;--activity-stream-date-separator-padding-bottom: 14px;--activity-stream-date-label-padding-right: 12px;--activity-stream-icon-size: 28px;--activity-stream-icon-svg-size: 14px;--activity-stream-timeline-left: 26px;--activity-stream-timeline-top: 36px;--activity-stream-timeline-marker-left: 19px;--activity-stream-timeline-marker-top: 18px;--activity-stream-timeline-marker-size: 12px}.activity-stream--compact{--activity-stream-scale: .8}.activity-stream__container{background-color:var(--activity-stream-bg);color:var(--activity-stream-text);overflow-y:auto;overflow-x:hidden;position:relative;border-radius:6px}.activity-stream__container::-webkit-scrollbar{width:8px}.activity-stream__container::-webkit-scrollbar-track{background:var(--activity-stream-bg);border-radius:4px}.activity-stream__container::-webkit-scrollbar-thumb{background:var(--activity-stream-border);border-radius:4px}.activity-stream__container::-webkit-scrollbar-thumb:hover{background:var(--activity-stream-text-secondary)}.activity-stream__items{display:flex;flex-direction:column;position:relative}.activity-stream--with-timeline .activity-stream__items{padding-left:var(--activity-stream-timeline-left, 20px)}.activity-stream--with-timeline .activity-stream__items:before{content:"";position:absolute;left:var(--activity-stream-timeline-left, 23px);top:var(--activity-stream-timeline-top, 28px);bottom:0;width:2px;background-color:var(--activity-stream-timeline-color)}.activity-stream__item{display:flex;gap:var(--activity-stream-item-gap, 8px);padding:var(--activity-stream-item-padding-y, 6px) var(--activity-stream-item-padding-x, 14px);position:relative;transition:background-color .2s ease}.activity-stream__item:hover{background-color:var(--activity-stream-hover-bg)}.activity-stream__item--child{padding-left:var(--activity-stream-child-padding-left, 22px);margin-top:var(--activity-stream-child-margin-top, 6px)}.activity-stream__timeline-marker{position:absolute;left:var(--activity-stream-timeline-marker-left, 15px);top:var(--activity-stream-timeline-marker-top, 14px);width:var(--activity-stream-timeline-marker-size, 10px);height:var(--activity-stream-timeline-marker-size, 10px);border-radius:50%;background-color:var(--activity-stream-bg);border:2px solid var(--activity-stream-timeline-color);z-index:1}.activity-stream__icon{flex-shrink:0;width:var(--activity-stream-icon-size, 24px);height:var(--activity-stream-icon-size, 24px);display:flex;align-items:center;justify-content:center;background-color:var(--activity-stream-icon-bg);border-radius:50%;color:var(--activity-stream-icon-color);border:1px solid var(--activity-stream-border);position:relative;z-index:2}.activity-stream__icon svg{width:var(--activity-stream-icon-svg-size, 12px);height:var(--activity-stream-icon-svg-size, 12px)}.activity-stream__content{flex:1;min-width:0;display:flex;flex-direction:column;gap:var( --activity-stream-content-gap, 4px )}.activity-stream__header{display:flex;align-items:flex-start;gap:var(--activity-stream-header-gap, 6px);cursor:default;position:relative}.activity-stream__header--clickable{cursor:pointer;-webkit-user-select:none;user-select:none}.activity-stream__header--clickable:focus{outline:2px solid var(--activity-stream-link-color);outline-offset:2px;border-radius:3px}.activity-stream__title{flex:1;font-size:14px;line-height:var(--activity-stream-title-line-height, 1.4);font-weight:400;color:var(--activity-stream-text);word-wrap:break-word;overflow-wrap:break-word}.activity-stream__timestamp{flex-shrink:0;font-size:12px;color:var(--activity-stream-text-secondary);white-space:nowrap;margin-left:auto;margin-top:var(--activity-stream-timestamp-margin-top, 2px)}.activity-stream__toggle{flex-shrink:0;font-size:10px;color:var(--activity-stream-text-secondary);transition:transform .2s ease;margin-left:var(--activity-stream-toggle-margin-left, 2px)}.activity-stream__description{font-size:13px;line-height:1.4;color:var(--activity-stream-text-secondary);padding:var(--activity-stream-description-padding-y, 6px) var(--activity-stream-description-padding-x, 10px);background-color:var(--activity-stream-hover-bg);border-radius:6px;border:1px solid var(--activity-stream-border);animation:slideDown .2s ease}.activity-stream__children{display:flex;flex-direction:column;gap:var(--activity-stream-child-gap, 6px);margin-top:var(--activity-stream-child-margin-top, 6px);padding-left:var(--activity-stream-child-padding-left, 12px);border-left:2px solid var(--activity-stream-border)}.activity-stream__events-list{display:flex;flex-direction:column;gap:var(--activity-stream-events-gap, 8px);margin-top:var(--activity-stream-child-margin-top, 6px);padding-left:var(--activity-stream-child-padding-left, 12px);border-left:2px solid var(--activity-stream-border)}.activity-stream__event-item{padding:var(--activity-stream-event-item-padding-y, 6px) 0}.activity-stream__event-title{font-size:13px;line-height:1.5;color:var(--activity-stream-text);font-weight:500;margin-bottom:var(--activity-stream-event-title-margin-bottom, 4px)}.activity-stream__event-description{font-size:12px;line-height:1.5;color:var(--activity-stream-text-secondary)}.activity-stream__date-separator{display:flex;align-items:center;gap:var(--activity-stream-date-separator-gap, 10px);padding:var(--activity-stream-date-separator-padding-top, 16px) var(--activity-stream-date-separator-padding-right, 16px) var(--activity-stream-date-separator-padding-bottom, 12px);position:relative;z-index:3}.activity-stream__date-line{flex:1;height:1px;background-color:var(--activity-stream-border)}.activity-stream__date-label{font-size:13px;font-weight:600;color:var(--activity-stream-text);white-space:nowrap;padding-right:var( --activity-stream-date-label-padding-right, 8px );order:-1}@keyframes slideDown{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.activity-stream__empty{padding:48px 16px;text-align:center;color:var(--activity-stream-text-secondary);font-size:14px}.activity-stream__loading{display:flex;align-items:center;justify-content:center;gap:12px;padding:24px 16px;color:var(--activity-stream-text-secondary);font-size:14px}.activity-stream__spinner{width:20px;height:20px;border:2px solid var(--activity-stream-border);border-top-color:var(--activity-stream-link-color);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.activity-stream__load-more{position:sticky;bottom:0;left:0;right:0;padding:8px 16px;background-color:var(--activity-stream-load-more-bg);color:var(--activity-stream-load-more-text);text-align:center;font-size:13px;font-weight:500;cursor:pointer;-webkit-user-select:none;user-select:none;transition:all .3s ease;opacity:0;transform:translateY(100%);pointer-events:none;border-radius:0 0 6px 6px;box-shadow:0 -2px 8px var(--activity-stream-shadow);border-top:1px solid var(--activity-stream-border)}.activity-stream__load-more--visible{opacity:1;transform:translateY(0);pointer-events:auto}.activity-stream__load-more:hover{background-color:var(--activity-stream-load-more-hover)}.activity-stream__load-more:focus{outline:2px solid var(--activity-stream-link-color);outline-offset:-2px}.activity-stream__load-more:active{transform:translateY(1px)}@media(max-width:640px){.activity-stream__item{padding:var(--activity-stream-mobile-item-padding-y, 8px) var(--activity-stream-mobile-item-padding-x, 10px);gap:var(--activity-stream-mobile-item-gap, 8px)}.activity-stream__icon{width:var(--activity-stream-mobile-icon-size, 24px);height:var(--activity-stream-mobile-icon-size, 24px)}.activity-stream__icon svg{width:var(--activity-stream-mobile-icon-svg-size, 12px);height:var(--activity-stream-mobile-icon-svg-size, 12px)}.activity-stream__title{font-size:13px}.activity-stream__timestamp{font-size:11px}.activity-stream__description{font-size:12px;padding:6px 8px}.activity-stream--with-timeline .activity-stream__items{padding-left:var( --activity-stream-mobile-timeline-left, 14px )}.activity-stream--with-timeline .activity-stream__items:before{left:var(--activity-stream-mobile-timeline-left, 19px)}.activity-stream__timeline-marker{left:var(--activity-stream-mobile-timeline-marker-left, 10px);width:var(--activity-stream-mobile-timeline-marker-size, 12px);height:var(--activity-stream-mobile-timeline-marker-size, 12px)}}@media(prefers-reduced-motion:reduce){.activity-stream__item,.activity-stream__toggle,.activity-stream__load-more,.activity-stream__spinner{animation:none;transition:none}.activity-stream__description{animation:none}}.activity-stream__header:focus-visible{outline:2px solid var(--activity-stream-link-color);outline-offset:2px;border-radius:3px}.activity-stream__load-more:focus-visible{outline:2px solid var(--activity-stream-link-color);outline-offset:-2px}.uiforge-video{width:100%;font-family:system-ui,-apple-system,sans-serif}.uiforge-video__header{margin-bottom:1rem}.uiforge-video__title{font-size:1.5rem;font-weight:600;margin:0 0 .5rem;color:#1f2937}.uiforge-video__description{font-size:1rem;color:#6b7280;margin:0;line-height:1.5}.uiforge-video__player-container{position:relative;width:100%;background-color:#000;border-radius:8px;overflow:hidden;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.uiforge-video__thumbnail{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover}.uiforge-video__overlay{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:#0000004d;border:none;cursor:pointer;transition:background .2s ease-in-out;z-index:1}.uiforge-video__overlay:hover{background:#00000080}.uiforge-video__overlay:focus{outline:2px solid #3b82f6;outline-offset:-2px}.uiforge-video__play-icon{transition:transform .2s ease-in-out;filter:drop-shadow(0 4px 6px rgba(0,0,0,.3))}.uiforge-video__overlay:hover .uiforge-video__play-icon{transform:scale(1.1)}.uiforge-video__iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:none}.uiforge-video-preview{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem .75rem;border-radius:6px;font-family:system-ui,-apple-system,sans-serif;transition:background-color .2s ease-in-out;text-decoration:none;color:inherit}button.uiforge-video-preview{background:none;border:1px solid #e5e7eb;cursor:pointer}button.uiforge-video-preview:hover{background-color:#f3f4f6}button.uiforge-video-preview:focus{outline:2px solid #3b82f6;outline-offset:2px}button.uiforge-video-preview:active{background-color:#e5e7eb}div.uiforge-video-preview{border:1px solid #e5e7eb;background-color:#f9fafb}.uiforge-video-preview__icon-container{display:flex;align-items:center;justify-content:center;color:#3b82f6;flex-shrink:0}.uiforge-video-preview__title{font-size:.875rem;font-weight:500;color:#1f2937;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media(prefers-color-scheme:dark){.uiforge-video__title{color:#f9fafb}.uiforge-video__description{color:#9ca3af}button.uiforge-video-preview{border-color:#374151}button.uiforge-video-preview:hover{background-color:#1f2937}button.uiforge-video-preview:active{background-color:#111827}div.uiforge-video-preview{border-color:#374151;background-color:#1f2937}.uiforge-video-preview__title{color:#f9fafb}}@media(max-width:640px){.uiforge-video__title{font-size:1.25rem}.uiforge-video__description{font-size:.875rem}.uiforge-video__play-icon{width:48px;height:48px}}
|