@leverege/imaginarium-ui 1.0.0 → 1.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.
Files changed (64) hide show
  1. package/lib/Card-CHVaz_7u.cjs +2 -0
  2. package/lib/Card-CHVaz_7u.cjs.map +1 -0
  3. package/lib/{Card-JFmpTzpz.js → Card-D2LdIJwJ.js} +45 -45
  4. package/lib/Card-D2LdIJwJ.js.map +1 -0
  5. package/lib/ImaginariumApp-DEMR2myC.js +454 -0
  6. package/lib/ImaginariumApp-DEMR2myC.js.map +1 -0
  7. package/lib/ImaginariumApp-QhW4atF3.cjs +2 -0
  8. package/lib/ImaginariumApp-QhW4atF3.cjs.map +1 -0
  9. package/lib/{Label-BgvLHORr.cjs → Label-BhnvyUcc.cjs} +2 -2
  10. package/lib/{Label-BgvLHORr.cjs.map → Label-BhnvyUcc.cjs.map} +1 -1
  11. package/lib/{Label-CewJarON.js → Label-v0wUXs4O.js} +2 -2
  12. package/lib/{Label-CewJarON.js.map → Label-v0wUXs4O.js.map} +1 -1
  13. package/lib/{PluginSetup-dlG3KzZ8.js → PluginSetup-4wfp3och.js} +6 -4
  14. package/lib/{PluginSetup-dlG3KzZ8.js.map → PluginSetup-4wfp3och.js.map} +1 -1
  15. package/lib/{PluginSetup-DAgVBMVL.cjs → PluginSetup-C__oYc79.cjs} +2 -2
  16. package/lib/{PluginSetup-DAgVBMVL.cjs.map → PluginSetup-C__oYc79.cjs.map} +1 -1
  17. package/lib/{PluginSetup-JtjqdS0W.js → PluginSetup-Co-WnS3V.js} +6 -4
  18. package/lib/{PluginSetup-JtjqdS0W.js.map → PluginSetup-Co-WnS3V.js.map} +1 -1
  19. package/lib/{PluginSetup-DADMV3GR.cjs → PluginSetup-DeyrRyw0.cjs} +2 -2
  20. package/lib/{PluginSetup-DADMV3GR.cjs.map → PluginSetup-DeyrRyw0.cjs.map} +1 -1
  21. package/lib/components/ui/Button.d.ts +1 -1
  22. package/lib/index.cjs +1 -1
  23. package/lib/index.js +10 -10
  24. package/lib/plugins/types.d.ts +2 -0
  25. package/lib/plugins/types.d.ts.map +1 -1
  26. package/lib/secret/SecretNavItem.d.ts +2 -0
  27. package/lib/secret/SecretNavItem.d.ts.map +1 -1
  28. package/lib/secret.cjs +1 -1
  29. package/lib/secret.js +1 -1
  30. package/lib/shell/{AppNav.d.ts → AppSidebar.d.ts} +3 -3
  31. package/lib/shell/AppSidebar.d.ts.map +1 -0
  32. package/lib/shell/ImaginariumApp.d.ts +2 -2
  33. package/lib/shell/ImaginariumApp.d.ts.map +1 -1
  34. package/lib/shell/groupNavItems.d.ts +12 -0
  35. package/lib/shell/groupNavItems.d.ts.map +1 -0
  36. package/lib/shell/groupNavItems.test.d.ts +2 -0
  37. package/lib/shell/groupNavItems.test.d.ts.map +1 -0
  38. package/lib/shell/index.d.ts +2 -1
  39. package/lib/shell/index.d.ts.map +1 -1
  40. package/lib/shell.cjs +1 -1
  41. package/lib/shell.js +4 -4
  42. package/lib/system/ImagineSystemNavItem.d.ts +2 -0
  43. package/lib/system/ImagineSystemNavItem.d.ts.map +1 -1
  44. package/lib/system.cjs +1 -1
  45. package/lib/system.js +1 -1
  46. package/package.json +2 -2
  47. package/src/plugins/types.ts +2 -0
  48. package/src/secret/SecretNavItem.ts +2 -0
  49. package/src/shell/AppSidebar.tsx +204 -0
  50. package/src/shell/ImaginariumApp.tsx +5 -5
  51. package/src/shell/Shell.tsx +1 -1
  52. package/src/shell/groupNavItems.test.ts +71 -0
  53. package/src/shell/groupNavItems.ts +45 -0
  54. package/src/shell/index.ts +2 -1
  55. package/src/system/ImagineSystemNavItem.ts +2 -0
  56. package/lib/Card-JFmpTzpz.js.map +0 -1
  57. package/lib/Card-Z-6q-k3a.cjs +0 -2
  58. package/lib/Card-Z-6q-k3a.cjs.map +0 -1
  59. package/lib/ImaginariumApp-Cn4t2Ozo.cjs +0 -2
  60. package/lib/ImaginariumApp-Cn4t2Ozo.cjs.map +0 -1
  61. package/lib/ImaginariumApp-CwOYW6Jp.js +0 -290
  62. package/lib/ImaginariumApp-CwOYW6Jp.js.map +0 -1
  63. package/lib/shell/AppNav.d.ts.map +0 -1
  64. package/src/shell/AppNav.tsx +0 -73
@@ -0,0 +1,2 @@
1
+ "use strict";const g=require("react"),a=require("react/jsx-runtime"),R=require("@radix-ui/react-slot"),M=require("class-variance-authority"),P=require("clsx"),V=require("tailwind-merge");function q(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const s=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,s.get?s:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const o=q(g);function i(...e){return V.twMerge(P.clsx(e))}const k=1,z=1e6;let v=0;function F(){return v=(v+1)%Number.MAX_SAFE_INTEGER,v.toString()}const x=new Map,h=e=>{if(x.has(e))return;const t=setTimeout(()=>{x.delete(e),f({type:"REMOVE_TOAST",toastId:e})},z);x.set(e,t)},H=(e,t)=>{switch(t.type){case"ADD_TOAST":return{...e,toasts:[t.toast,...e.toasts].slice(0,k)};case"UPDATE_TOAST":return{...e,toasts:e.toasts.map(r=>r.id===t.toast.id?{...r,...t.toast}:r)};case"DISMISS_TOAST":{const{toastId:r}=t;return r?h(r):e.toasts.forEach(s=>h(s.id)),{...e,toasts:e.toasts.map(s=>s.id===r||r===void 0?{...s,open:!1}:s)}}case"REMOVE_TOAST":return t.toastId===void 0?{...e,toasts:[]}:{...e,toasts:e.toasts.filter(r=>r.id!==t.toastId)}}},m=[];let p={toasts:[]};function f(e){p=H(p,e),m.forEach(t=>t(p))}function S({...e}){const t=F(),r=n=>f({type:"UPDATE_TOAST",toast:{...n,id:t}}),s=()=>f({type:"DISMISS_TOAST",toastId:t});return f({type:"ADD_TOAST",toast:{...e,id:t,open:!0,onOpenChange:n=>{n||s()}}}),{id:t,dismiss:s,update:r}}function J(){const[e,t]=o.useState(p);return o.useEffect(()=>(m.push(t),()=>{const r=m.indexOf(t);r>-1&&m.splice(r,1)}),[e]),{...e,toast:S,dismiss:r=>f({type:"DISMISS_TOAST",toastId:r})}}const C=g.createContext(null);function $({apiBaseUrl:e="/api",children:t}){const r=g.useMemo(()=>{const s=e.replace(/\/$/,""),n=d=>`${s}${d.startsWith("/")?d:`/${d}`}`;return{apiBaseUrl:s,buildUrl:n,fetchJson:async(d,c)=>{var y;const b=new Headers(c==null?void 0:c.headers);c!=null&&c.body&&!b.has("Content-Type")&&b.set("Content-Type","application/json");const l=await fetch(n(d),{credentials:"include",...c,headers:b}),u=((y=l.headers.get("content-type"))==null?void 0:y.includes("application/json"))&&l.status!==204?await l.json():void 0;if(!l.ok){const D=(u==null?void 0:u.error)||(u==null?void 0:u.message)||l.statusText;throw new Error(D)}return u}}},[e]);return a.jsx(C.Provider,{value:r,children:t})}function B(){const e=g.useContext(C);if(!e)throw new Error("useImaginariumApi must be used within an ImaginariumApiProvider");return e}const w=M.cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover-elevate active-elevate-2",{variants:{variant:{default:"bg-primary text-primary-foreground border border-primary-border",destructive:"bg-destructive text-destructive-foreground border border-destructive-border",outline:"border [border-color:var(--button-outline)] shadow-xs active:shadow-none",secondary:"border bg-secondary text-secondary-foreground border-secondary-border",ghost:"border border-transparent"},size:{default:"min-h-9 px-4 py-2",sm:"min-h-8 rounded-md px-3 text-xs",lg:"min-h-10 rounded-md px-8",icon:"h-9 w-9"}},defaultVariants:{variant:"default",size:"default"}}),A=o.forwardRef(({className:e,variant:t,size:r,asChild:s=!1,...n},T)=>{const d=s?R.Slot:"button";return a.jsx(d,{className:i(w({variant:t,size:r,className:e})),ref:T,...n})});A.displayName="Button";const O=o.forwardRef(({className:e,...t},r)=>a.jsx("div",{ref:r,className:i("shadcn-card rounded-xl border bg-card border-card-border text-card-foreground shadow-sm",e),...t}));O.displayName="Card";const _=o.forwardRef(({className:e,...t},r)=>a.jsx("div",{ref:r,className:i("flex flex-col space-y-1.5 p-6",e),...t}));_.displayName="CardHeader";const j=o.forwardRef(({className:e,...t},r)=>a.jsx("div",{ref:r,className:i("text-2xl font-semibold leading-none tracking-tight",e),...t}));j.displayName="CardTitle";const E=o.forwardRef(({className:e,...t},r)=>a.jsx("div",{ref:r,className:i("text-sm text-muted-foreground",e),...t}));E.displayName="CardDescription";const I=o.forwardRef(({className:e,...t},r)=>a.jsx("div",{ref:r,className:i("p-6 pt-0",e),...t}));I.displayName="CardContent";const N=o.forwardRef(({className:e,...t},r)=>a.jsx("div",{ref:r,className:i("flex items-center p-6 pt-0",e),...t}));N.displayName="CardFooter";exports.Button=A;exports.Card=O;exports.CardContent=I;exports.CardDescription=E;exports.CardFooter=N;exports.CardHeader=_;exports.CardTitle=j;exports.ImaginariumApiProvider=$;exports.buttonVariants=w;exports.cn=i;exports.toast=S;exports.useImaginariumApi=B;exports.useToast=J;
2
+ //# sourceMappingURL=Card-CHVaz_7u.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card-CHVaz_7u.cjs","sources":["../src/lib/utils.ts","../src/hooks/useToast.ts","../src/api/ImaginariumApiContext.tsx","../src/components/ui/Button.tsx","../src/components/ui/Card.tsx"],"sourcesContent":["import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn( ...inputs: ClassValue[] ) {\n return twMerge( clsx( inputs ) )\n}\n","import * as React from 'react'\n\nimport type { ToastActionElement, ToastProps } from '../components/ui/Toast'\n\nconst TOAST_LIMIT = 1\nconst TOAST_REMOVE_DELAY = 1_000_000\n\ntype ToasterToast = ToastProps & {\n id: string\n title?: React.ReactNode\n description?: React.ReactNode\n action?: ToastActionElement\n}\n\nconst actionTypes = {\n ADD_TOAST: 'ADD_TOAST',\n UPDATE_TOAST: 'UPDATE_TOAST',\n DISMISS_TOAST: 'DISMISS_TOAST',\n REMOVE_TOAST: 'REMOVE_TOAST',\n} as const\n\nlet count = 0\nfunction genId() {\n count = ( count + 1 ) % Number.MAX_SAFE_INTEGER\n return count.toString()\n}\n\ntype ActionType = typeof actionTypes\ntype Action =\n | { type: ActionType['ADD_TOAST']; toast: ToasterToast }\n | { type: ActionType['UPDATE_TOAST']; toast: Partial<ToasterToast> }\n | { type: ActionType['DISMISS_TOAST']; toastId?: ToasterToast['id'] }\n | { type: ActionType['REMOVE_TOAST']; toastId?: ToasterToast['id'] }\n\ninterface State {\n toasts: ToasterToast[]\n}\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>()\n\nconst addToRemoveQueue = ( toastId: string ) => {\n if ( toastTimeouts.has( toastId ) ) { return }\n const timeout = setTimeout( () => {\n toastTimeouts.delete( toastId )\n dispatch( { type: 'REMOVE_TOAST', toastId } )\n }, TOAST_REMOVE_DELAY )\n toastTimeouts.set( toastId, timeout )\n}\n\nexport const reducer = ( state: State, action: Action ): State => {\n switch ( action.type ) {\n case 'ADD_TOAST':\n return {\n ...state,\n toasts: [ action.toast, ...state.toasts ].slice( 0, TOAST_LIMIT ),\n }\n case 'UPDATE_TOAST':\n return {\n ...state,\n toasts: state.toasts.map( t => ( t.id === action.toast.id ? { ...t, ...action.toast } : t ) ),\n }\n case 'DISMISS_TOAST': {\n const { toastId } = action\n if ( toastId ) {\n addToRemoveQueue( toastId )\n } else {\n state.toasts.forEach( t => addToRemoveQueue( t.id ) )\n }\n return {\n ...state,\n toasts: state.toasts.map( t =>\n t.id === toastId || toastId === undefined ? { ...t, open: false } : t,\n ),\n }\n }\n case 'REMOVE_TOAST':\n if ( action.toastId === undefined ) {\n return { ...state, toasts: [] }\n }\n return { ...state, toasts: state.toasts.filter( t => t.id !== action.toastId ) }\n }\n}\n\nconst listeners: Array<( state: State ) => void> = []\nlet memoryState: State = { toasts: [] }\n\nfunction dispatch( action: Action ) {\n memoryState = reducer( memoryState, action )\n listeners.forEach( l => l( memoryState ) )\n}\n\ntype Toast = Omit<ToasterToast, 'id'>\n\nfunction toast( { ...props }: Toast ) {\n const id = genId()\n const update = ( p: ToasterToast ) =>\n dispatch( { type: 'UPDATE_TOAST', toast: { ...p, id } } )\n const dismiss = () => dispatch( { type: 'DISMISS_TOAST', toastId: id } )\n\n dispatch( {\n type: 'ADD_TOAST',\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: ( open ) => {\n if ( !open ) { dismiss() }\n },\n },\n } )\n return { id, dismiss, update }\n}\n\nfunction useToast() {\n const [ state, setState ] = React.useState<State>( memoryState )\n React.useEffect( () => {\n listeners.push( setState )\n return () => {\n const index = listeners.indexOf( setState )\n if ( index > -1 ) { listeners.splice( index, 1 ) }\n }\n }, [ state ] )\n return {\n ...state,\n toast,\n dismiss: ( toastId?: string ) => dispatch( { type: 'DISMISS_TOAST', toastId } ),\n }\n}\n\nexport { useToast, toast }\n","import { createContext, useContext, useMemo, type ReactNode } from 'react'\n\nexport interface ImaginariumApiContextValue {\n apiBaseUrl: string\n fetchJson: <T = unknown>( path: string, init?: RequestInit ) => Promise<T>\n buildUrl: ( path: string ) => string\n}\n\nconst Context = createContext<ImaginariumApiContextValue | null>( null )\n\nexport interface ImaginariumApiProviderProps {\n apiBaseUrl?: string\n children: ReactNode\n}\n\nexport function ImaginariumApiProvider( { apiBaseUrl = '/api', children }: ImaginariumApiProviderProps ) {\n const value = useMemo<ImaginariumApiContextValue>( () => {\n const base = apiBaseUrl.replace( /\\/$/, '' )\n const buildUrl = ( path: string ) => `${base}${path.startsWith( '/' ) ? path : `/${path}`}`\n\n const fetchJson = async <T = unknown>( path: string, init?: RequestInit ): Promise<T> => {\n const headers = new Headers( init?.headers )\n if ( init?.body && !headers.has( 'Content-Type' ) ) {\n headers.set( 'Content-Type', 'application/json' )\n }\n const res = await fetch( buildUrl( path ), {\n credentials: 'include',\n ...init,\n headers,\n } )\n const isJson = res.headers.get( 'content-type' )?.includes( 'application/json' )\n const body = isJson && res.status !== 204 ? await res.json() : undefined\n if ( !res.ok ) {\n const msg = ( body as { error?: string; message?: string } | undefined )?.error\n || ( body as { message?: string } | undefined )?.message\n || res.statusText\n throw new Error( msg )\n }\n return body as T\n }\n\n return { apiBaseUrl: base, buildUrl, fetchJson }\n }, [ apiBaseUrl ] )\n\n return <Context.Provider value={value}>{children}</Context.Provider>\n}\n\nexport function useImaginariumApi() {\n const ctx = useContext( Context )\n if ( !ctx ) {\n throw new Error( 'useImaginariumApi must be used within an ImaginariumApiProvider' )\n }\n return ctx\n}\n","import * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '../../lib/utils'\n\nconst buttonVariants = cva(\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover-elevate active-elevate-2',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground border border-primary-border',\n destructive: 'bg-destructive text-destructive-foreground border border-destructive-border',\n outline: 'border [border-color:var(--button-outline)] shadow-xs active:shadow-none',\n secondary: 'border bg-secondary text-secondary-foreground border-secondary-border',\n ghost: 'border border-transparent',\n },\n size: {\n default: 'min-h-9 px-4 py-2',\n sm: 'min-h-8 rounded-md px-3 text-xs',\n lg: 'min-h-10 rounded-md px-8',\n icon: 'h-9 w-9',\n },\n },\n defaultVariants: { variant: 'default', size: 'default' },\n },\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ( { className, variant, size, asChild = false, ...props }, ref ) => {\n const Comp = asChild ? Slot : 'button'\n return (\n <Comp\n className={cn( buttonVariants( { variant, size, className } ) )}\n ref={ref}\n {...props}\n />\n )\n },\n)\nButton.displayName = 'Button'\n\nexport { Button, buttonVariants }\n","import * as React from 'react'\n\nimport { cn } from '../../lib/utils'\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ( { className, ...props }, ref ) => (\n <div\n ref={ref}\n className={cn(\n 'shadcn-card rounded-xl border bg-card border-card-border text-card-foreground shadow-sm',\n className,\n )}\n {...props}\n />\n ),\n)\nCard.displayName = 'Card'\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ( { className, ...props }, ref ) => (\n <div ref={ref} className={cn( 'flex flex-col space-y-1.5 p-6', className )} {...props} />\n ),\n)\nCardHeader.displayName = 'CardHeader'\n\nconst CardTitle = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ( { className, ...props }, ref ) => (\n <div\n ref={ref}\n className={cn( 'text-2xl font-semibold leading-none tracking-tight', className )}\n {...props}\n />\n ),\n)\nCardTitle.displayName = 'CardTitle'\n\nconst CardDescription = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ( { className, ...props }, ref ) => (\n <div ref={ref} className={cn( 'text-sm text-muted-foreground', className )} {...props} />\n ),\n)\nCardDescription.displayName = 'CardDescription'\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ( { className, ...props }, ref ) => (\n <div ref={ref} className={cn( 'p-6 pt-0', className )} {...props} />\n ),\n)\nCardContent.displayName = 'CardContent'\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ( { className, ...props }, ref ) => (\n <div ref={ref} className={cn( 'flex items-center p-6 pt-0', className )} {...props} />\n ),\n)\nCardFooter.displayName = 'CardFooter'\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n"],"names":["cn","inputs","twMerge","clsx","TOAST_LIMIT","TOAST_REMOVE_DELAY","count","genId","toastTimeouts","addToRemoveQueue","toastId","timeout","dispatch","reducer","state","action","t","listeners","memoryState","l","toast","props","id","update","p","dismiss","open","useToast","setState","React","index","Context","createContext","ImaginariumApiProvider","apiBaseUrl","children","value","useMemo","base","buildUrl","path","init","headers","res","body","_a","msg","jsx","useImaginariumApi","ctx","useContext","buttonVariants","cva","Button","className","variant","size","asChild","ref","Comp","Slot","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { jsx as n } from "react/jsx-runtime";
2
1
  import * as o from "react";
3
2
  import { createContext as w, useMemo as C, useContext as A } from "react";
3
+ import { jsx as n } from "react/jsx-runtime";
4
4
  import { Slot as E } from "@radix-ui/react-slot";
5
5
  import { cva as _ } from "class-variance-authority";
6
6
  import { clsx as I } from "clsx";
@@ -8,40 +8,9 @@ import { twMerge as N } from "tailwind-merge";
8
8
  function c(...e) {
9
9
  return N(I(e));
10
10
  }
11
- const O = _(
12
- "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover-elevate active-elevate-2",
13
- {
14
- variants: {
15
- variant: {
16
- default: "bg-primary text-primary-foreground border border-primary-border",
17
- destructive: "bg-destructive text-destructive-foreground border border-destructive-border",
18
- outline: "border [border-color:var(--button-outline)] shadow-xs active:shadow-none",
19
- secondary: "border bg-secondary text-secondary-foreground border-secondary-border",
20
- ghost: "border border-transparent"
21
- },
22
- size: {
23
- default: "min-h-9 px-4 py-2",
24
- sm: "min-h-8 rounded-md px-3 text-xs",
25
- lg: "min-h-10 rounded-md px-8",
26
- icon: "h-9 w-9"
27
- }
28
- },
29
- defaultVariants: { variant: "default", size: "default" }
30
- }
31
- ), R = o.forwardRef(
32
- ({ className: e, variant: t, size: r, asChild: s = !1, ...a }, b) => /* @__PURE__ */ n(
33
- s ? E : "button",
34
- {
35
- className: c(O({ variant: t, size: r, className: e })),
36
- ref: b,
37
- ...a
38
- }
39
- )
40
- );
41
- R.displayName = "Button";
42
- const D = 1, M = 1e6;
11
+ const O = 1, R = 1e6;
43
12
  let T = 0;
44
- function j() {
13
+ function D() {
45
14
  return T = (T + 1) % Number.MAX_SAFE_INTEGER, T.toString();
46
15
  }
47
16
  const g = /* @__PURE__ */ new Map(), x = (e) => {
@@ -49,14 +18,14 @@ const g = /* @__PURE__ */ new Map(), x = (e) => {
49
18
  return;
50
19
  const t = setTimeout(() => {
51
20
  g.delete(e), f({ type: "REMOVE_TOAST", toastId: e });
52
- }, M);
21
+ }, R);
53
22
  g.set(e, t);
54
- }, P = (e, t) => {
23
+ }, M = (e, t) => {
55
24
  switch (t.type) {
56
25
  case "ADD_TOAST":
57
26
  return {
58
27
  ...e,
59
- toasts: [t.toast, ...e.toasts].slice(0, D)
28
+ toasts: [t.toast, ...e.toasts].slice(0, O)
60
29
  };
61
30
  case "UPDATE_TOAST":
62
31
  return {
@@ -78,10 +47,10 @@ const g = /* @__PURE__ */ new Map(), x = (e) => {
78
47
  }, l = [];
79
48
  let p = { toasts: [] };
80
49
  function f(e) {
81
- p = P(p, e), l.forEach((t) => t(p));
50
+ p = M(p, e), l.forEach((t) => t(p));
82
51
  }
83
- function V({ ...e }) {
84
- const t = j(), r = (a) => f({ type: "UPDATE_TOAST", toast: { ...a, id: t } }), s = () => f({ type: "DISMISS_TOAST", toastId: t });
52
+ function j({ ...e }) {
53
+ const t = D(), r = (a) => f({ type: "UPDATE_TOAST", toast: { ...a, id: t } }), s = () => f({ type: "DISMISS_TOAST", toastId: t });
85
54
  return f({
86
55
  type: "ADD_TOAST",
87
56
  toast: {
@@ -101,7 +70,7 @@ function Y() {
101
70
  r > -1 && l.splice(r, 1);
102
71
  }), [e]), {
103
72
  ...e,
104
- toast: V,
73
+ toast: j,
105
74
  dismiss: (r) => f({ type: "DISMISS_TOAST", toastId: r })
106
75
  };
107
76
  }
@@ -133,6 +102,37 @@ function K() {
133
102
  throw new Error("useImaginariumApi must be used within an ImaginariumApiProvider");
134
103
  return e;
135
104
  }
105
+ const P = _(
106
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover-elevate active-elevate-2",
107
+ {
108
+ variants: {
109
+ variant: {
110
+ default: "bg-primary text-primary-foreground border border-primary-border",
111
+ destructive: "bg-destructive text-destructive-foreground border border-destructive-border",
112
+ outline: "border [border-color:var(--button-outline)] shadow-xs active:shadow-none",
113
+ secondary: "border bg-secondary text-secondary-foreground border-secondary-border",
114
+ ghost: "border border-transparent"
115
+ },
116
+ size: {
117
+ default: "min-h-9 px-4 py-2",
118
+ sm: "min-h-8 rounded-md px-3 text-xs",
119
+ lg: "min-h-10 rounded-md px-8",
120
+ icon: "h-9 w-9"
121
+ }
122
+ },
123
+ defaultVariants: { variant: "default", size: "default" }
124
+ }
125
+ ), V = o.forwardRef(
126
+ ({ className: e, variant: t, size: r, asChild: s = !1, ...a }, b) => /* @__PURE__ */ n(
127
+ s ? E : "button",
128
+ {
129
+ className: c(P({ variant: t, size: r, className: e })),
130
+ ref: b,
131
+ ...a
132
+ }
133
+ )
134
+ );
135
+ V.displayName = "Button";
136
136
  const J = o.forwardRef(
137
137
  ({ className: e, ...t }, r) => /* @__PURE__ */ n(
138
138
  "div",
@@ -175,7 +175,7 @@ const F = o.forwardRef(
175
175
  );
176
176
  F.displayName = "CardFooter";
177
177
  export {
178
- R as B,
178
+ V as B,
179
179
  J as C,
180
180
  q as I,
181
181
  K as a,
@@ -185,8 +185,8 @@ export {
185
185
  z as e,
186
186
  B as f,
187
187
  F as g,
188
- O as h,
189
- V as t,
188
+ P as h,
189
+ j as t,
190
190
  Y as u
191
191
  };
192
- //# sourceMappingURL=Card-JFmpTzpz.js.map
192
+ //# sourceMappingURL=Card-D2LdIJwJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card-D2LdIJwJ.js","sources":["../src/lib/utils.ts","../src/hooks/useToast.ts","../src/api/ImaginariumApiContext.tsx","../src/components/ui/Button.tsx","../src/components/ui/Card.tsx"],"sourcesContent":["import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn( ...inputs: ClassValue[] ) {\n return twMerge( clsx( inputs ) )\n}\n","import * as React from 'react'\n\nimport type { ToastActionElement, ToastProps } from '../components/ui/Toast'\n\nconst TOAST_LIMIT = 1\nconst TOAST_REMOVE_DELAY = 1_000_000\n\ntype ToasterToast = ToastProps & {\n id: string\n title?: React.ReactNode\n description?: React.ReactNode\n action?: ToastActionElement\n}\n\nconst actionTypes = {\n ADD_TOAST: 'ADD_TOAST',\n UPDATE_TOAST: 'UPDATE_TOAST',\n DISMISS_TOAST: 'DISMISS_TOAST',\n REMOVE_TOAST: 'REMOVE_TOAST',\n} as const\n\nlet count = 0\nfunction genId() {\n count = ( count + 1 ) % Number.MAX_SAFE_INTEGER\n return count.toString()\n}\n\ntype ActionType = typeof actionTypes\ntype Action =\n | { type: ActionType['ADD_TOAST']; toast: ToasterToast }\n | { type: ActionType['UPDATE_TOAST']; toast: Partial<ToasterToast> }\n | { type: ActionType['DISMISS_TOAST']; toastId?: ToasterToast['id'] }\n | { type: ActionType['REMOVE_TOAST']; toastId?: ToasterToast['id'] }\n\ninterface State {\n toasts: ToasterToast[]\n}\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>()\n\nconst addToRemoveQueue = ( toastId: string ) => {\n if ( toastTimeouts.has( toastId ) ) { return }\n const timeout = setTimeout( () => {\n toastTimeouts.delete( toastId )\n dispatch( { type: 'REMOVE_TOAST', toastId } )\n }, TOAST_REMOVE_DELAY )\n toastTimeouts.set( toastId, timeout )\n}\n\nexport const reducer = ( state: State, action: Action ): State => {\n switch ( action.type ) {\n case 'ADD_TOAST':\n return {\n ...state,\n toasts: [ action.toast, ...state.toasts ].slice( 0, TOAST_LIMIT ),\n }\n case 'UPDATE_TOAST':\n return {\n ...state,\n toasts: state.toasts.map( t => ( t.id === action.toast.id ? { ...t, ...action.toast } : t ) ),\n }\n case 'DISMISS_TOAST': {\n const { toastId } = action\n if ( toastId ) {\n addToRemoveQueue( toastId )\n } else {\n state.toasts.forEach( t => addToRemoveQueue( t.id ) )\n }\n return {\n ...state,\n toasts: state.toasts.map( t =>\n t.id === toastId || toastId === undefined ? { ...t, open: false } : t,\n ),\n }\n }\n case 'REMOVE_TOAST':\n if ( action.toastId === undefined ) {\n return { ...state, toasts: [] }\n }\n return { ...state, toasts: state.toasts.filter( t => t.id !== action.toastId ) }\n }\n}\n\nconst listeners: Array<( state: State ) => void> = []\nlet memoryState: State = { toasts: [] }\n\nfunction dispatch( action: Action ) {\n memoryState = reducer( memoryState, action )\n listeners.forEach( l => l( memoryState ) )\n}\n\ntype Toast = Omit<ToasterToast, 'id'>\n\nfunction toast( { ...props }: Toast ) {\n const id = genId()\n const update = ( p: ToasterToast ) =>\n dispatch( { type: 'UPDATE_TOAST', toast: { ...p, id } } )\n const dismiss = () => dispatch( { type: 'DISMISS_TOAST', toastId: id } )\n\n dispatch( {\n type: 'ADD_TOAST',\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: ( open ) => {\n if ( !open ) { dismiss() }\n },\n },\n } )\n return { id, dismiss, update }\n}\n\nfunction useToast() {\n const [ state, setState ] = React.useState<State>( memoryState )\n React.useEffect( () => {\n listeners.push( setState )\n return () => {\n const index = listeners.indexOf( setState )\n if ( index > -1 ) { listeners.splice( index, 1 ) }\n }\n }, [ state ] )\n return {\n ...state,\n toast,\n dismiss: ( toastId?: string ) => dispatch( { type: 'DISMISS_TOAST', toastId } ),\n }\n}\n\nexport { useToast, toast }\n","import { createContext, useContext, useMemo, type ReactNode } from 'react'\n\nexport interface ImaginariumApiContextValue {\n apiBaseUrl: string\n fetchJson: <T = unknown>( path: string, init?: RequestInit ) => Promise<T>\n buildUrl: ( path: string ) => string\n}\n\nconst Context = createContext<ImaginariumApiContextValue | null>( null )\n\nexport interface ImaginariumApiProviderProps {\n apiBaseUrl?: string\n children: ReactNode\n}\n\nexport function ImaginariumApiProvider( { apiBaseUrl = '/api', children }: ImaginariumApiProviderProps ) {\n const value = useMemo<ImaginariumApiContextValue>( () => {\n const base = apiBaseUrl.replace( /\\/$/, '' )\n const buildUrl = ( path: string ) => `${base}${path.startsWith( '/' ) ? path : `/${path}`}`\n\n const fetchJson = async <T = unknown>( path: string, init?: RequestInit ): Promise<T> => {\n const headers = new Headers( init?.headers )\n if ( init?.body && !headers.has( 'Content-Type' ) ) {\n headers.set( 'Content-Type', 'application/json' )\n }\n const res = await fetch( buildUrl( path ), {\n credentials: 'include',\n ...init,\n headers,\n } )\n const isJson = res.headers.get( 'content-type' )?.includes( 'application/json' )\n const body = isJson && res.status !== 204 ? await res.json() : undefined\n if ( !res.ok ) {\n const msg = ( body as { error?: string; message?: string } | undefined )?.error\n || ( body as { message?: string } | undefined )?.message\n || res.statusText\n throw new Error( msg )\n }\n return body as T\n }\n\n return { apiBaseUrl: base, buildUrl, fetchJson }\n }, [ apiBaseUrl ] )\n\n return <Context.Provider value={value}>{children}</Context.Provider>\n}\n\nexport function useImaginariumApi() {\n const ctx = useContext( Context )\n if ( !ctx ) {\n throw new Error( 'useImaginariumApi must be used within an ImaginariumApiProvider' )\n }\n return ctx\n}\n","import * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '../../lib/utils'\n\nconst buttonVariants = cva(\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover-elevate active-elevate-2',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground border border-primary-border',\n destructive: 'bg-destructive text-destructive-foreground border border-destructive-border',\n outline: 'border [border-color:var(--button-outline)] shadow-xs active:shadow-none',\n secondary: 'border bg-secondary text-secondary-foreground border-secondary-border',\n ghost: 'border border-transparent',\n },\n size: {\n default: 'min-h-9 px-4 py-2',\n sm: 'min-h-8 rounded-md px-3 text-xs',\n lg: 'min-h-10 rounded-md px-8',\n icon: 'h-9 w-9',\n },\n },\n defaultVariants: { variant: 'default', size: 'default' },\n },\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ( { className, variant, size, asChild = false, ...props }, ref ) => {\n const Comp = asChild ? Slot : 'button'\n return (\n <Comp\n className={cn( buttonVariants( { variant, size, className } ) )}\n ref={ref}\n {...props}\n />\n )\n },\n)\nButton.displayName = 'Button'\n\nexport { Button, buttonVariants }\n","import * as React from 'react'\n\nimport { cn } from '../../lib/utils'\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ( { className, ...props }, ref ) => (\n <div\n ref={ref}\n className={cn(\n 'shadcn-card rounded-xl border bg-card border-card-border text-card-foreground shadow-sm',\n className,\n )}\n {...props}\n />\n ),\n)\nCard.displayName = 'Card'\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ( { className, ...props }, ref ) => (\n <div ref={ref} className={cn( 'flex flex-col space-y-1.5 p-6', className )} {...props} />\n ),\n)\nCardHeader.displayName = 'CardHeader'\n\nconst CardTitle = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ( { className, ...props }, ref ) => (\n <div\n ref={ref}\n className={cn( 'text-2xl font-semibold leading-none tracking-tight', className )}\n {...props}\n />\n ),\n)\nCardTitle.displayName = 'CardTitle'\n\nconst CardDescription = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ( { className, ...props }, ref ) => (\n <div ref={ref} className={cn( 'text-sm text-muted-foreground', className )} {...props} />\n ),\n)\nCardDescription.displayName = 'CardDescription'\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ( { className, ...props }, ref ) => (\n <div ref={ref} className={cn( 'p-6 pt-0', className )} {...props} />\n ),\n)\nCardContent.displayName = 'CardContent'\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ( { className, ...props }, ref ) => (\n <div ref={ref} className={cn( 'flex items-center p-6 pt-0', className )} {...props} />\n ),\n)\nCardFooter.displayName = 'CardFooter'\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n"],"names":["cn","inputs","twMerge","clsx","TOAST_LIMIT","TOAST_REMOVE_DELAY","count","genId","toastTimeouts","addToRemoveQueue","toastId","timeout","dispatch","reducer","state","action","t","listeners","memoryState","l","toast","props","id","update","p","dismiss","open","useToast","setState","React","index","Context","createContext","ImaginariumApiProvider","apiBaseUrl","children","value","useMemo","base","buildUrl","path","init","headers","res","body","_a","msg","jsx","useImaginariumApi","ctx","useContext","buttonVariants","cva","Button","className","variant","size","asChild","ref","Slot","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter"],"mappings":"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"}