mirror of
https://github.com/hanzoai/gui.git
synced 2026-10-25 02:31:41 +00:00
Match the layout convention used elsewhere in the Hanzo / Liquidity stack
(pkgs/* for libraries, apps/* for consumer apps, templates/* for starters).
Layout changes:
pkgs/ ← code/{compiler,core,packages,ui,ui-admin}/
apps/ ← code/{admin-base,admin-tasks,demos,gui.hanzo.ai,
kitchen-sink*,sandbox,tests}/
templates/ ← code/starters/* (flattened — no more starters/ subdir)
Updated:
- package.json workspaces glob.
- All scripts/* path references (postinstall, format, repair, release,
sync-gui-versions, ci-serve, check-references, etc).
- ../../tasks/scripts/sync-admin-ui.sh — DEFAULT_SRC now points at
../gui/apps/admin-tasks (and scrubbed Tamagui mentions in comments).
- ~/work/hanzo/HANZO_BINARY.md doctrine doc.
- ~/work/hanzo/ui/pkg/ui/BASES.md framework-bases doc.
- gui CLAUDE.md, CONTRIBUTING.md.
- Memory entries.
Side-effect fix: ui-admin/src/primitives/index.ts now re-exports
PageShell from ../shell/PageShell. Several IAM identity pages
(GroupEdit, OrgEdit, GroupTree, UserEdit, RoleEdit) imported PageShell
from ./primitives — pre-existing barrel mismatch the test suite missed
because the smoke tests don't full-render. The rename surfaced it via
production build; back-compat re-export keeps both barrels working.
Verification:
- bun install: clean.
- ui-admin tests: 127/127 green.
- admin-tasks vite build: 721 KB JS / 213 KB gzip + 10 KB CSS, clean.
50 lines
1.4 KiB
TypeScript
50 lines
1.4 KiB
TypeScript
import { animations } from '@hanzogui/dev-config'
|
|
import type { AnimationDriver } from '@hanzogui/web'
|
|
import { createContext, useContext, useMemo, useState } from 'react'
|
|
|
|
const ANIMATION_DRIVERS = ['css', 'motion'] as const
|
|
|
|
export const useAnimationDriverToggler = () => {
|
|
const contextValue = useContext(AnimationDriverTogglerContext)
|
|
if (!contextValue)
|
|
throw new Error('Should be used within the AnimationDriverTogglerContext provider')
|
|
return contextValue
|
|
}
|
|
|
|
const AnimationDriverTogglerContext = createContext<{
|
|
driverName: (typeof ANIMATION_DRIVERS)[number]
|
|
driver: AnimationDriver<any>
|
|
nextDriver: () => void
|
|
setDriverName: (driverName: (typeof ANIMATION_DRIVERS)[number]) => void
|
|
} | null>(null)
|
|
|
|
export const AnimationDriverTogglerContextProvider = ({
|
|
children,
|
|
}: {
|
|
children: React.ReactNode
|
|
}) => {
|
|
const [driverName, setDriverName] =
|
|
useState<(typeof ANIMATION_DRIVERS)[number]>('motion')
|
|
|
|
const nextDriver = () => {
|
|
setDriverName(
|
|
(prev) =>
|
|
ANIMATION_DRIVERS[
|
|
(ANIMATION_DRIVERS.indexOf(prev) + 1) % ANIMATION_DRIVERS.length
|
|
]
|
|
)
|
|
}
|
|
|
|
const driver = driverName === 'css' ? animations.css : animations.default
|
|
|
|
const value = useMemo(() => {
|
|
return { driverName, nextDriver, setDriverName, driver }
|
|
}, [driver, driverName])
|
|
|
|
return (
|
|
<AnimationDriverTogglerContext.Provider value={value}>
|
|
{children}
|
|
</AnimationDriverTogglerContext.Provider>
|
|
)
|
|
}
|