refactor: consolidate acel utilities, fix floating positioning bug, normalize types
- Merge internal/ and shared/ into utilities/ with semantic subdirs:
floating/, focus/, keyboard/, datetime/, presence/, typeahead/
- Fix tooltip/popover positioning: wrapperProps.style was a plain object,
causing Svelte 5 spread to serialize it as "[object Object]" — wrapped
with styleToString() so CSS is applied correctly
- Fix WithChild<T,{},Ref> producing Snippet<[{}]> instead of Snippet:
use keyof check so empty SnippetProps yields plain Snippet (no args)
- Fix TooltipContentProps.children: switch to WithChildNoChildrenSnippetProps
so children is Snippet while child retains { open: boolean } props
- Fix field component: move field.svelte.ts to root dir, add exports.ts,
simplify index.ts, normalize import paths across all field components
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
7 months ago
|
|
|
{
|
|
|
|
|
"permissions": {
|
|
|
|
|
"allow": [
|
|
|
|
|
"Bash(grep -v \"$lib/internal\")",
|
|
|
|
|
"Bash(grep \"from.*label\" g:/dev/svelte/vicen/src/uix/acel/field/components/*.svelte)",
|
|
|
|
|
"Bash(grep -n \"from\" g:/dev/svelte/vicen/src/uix/acel/field/components/*.svelte)",
|
|
|
|
|
"Bash(sed -i 's|from \"\"\\\\./field\\\\.svelte\"\"|from \"\"../field.svelte\"\"|g' *.svelte)",
|
|
|
|
|
"Bash(sed -i 's|from \"\"\\\\.\\\\.\\\\/\\\\.\\\\.\\\\/utilities\"\"|from \"\"../../utilities/index\"\"|g' *.svelte)",
|
|
|
|
|
"Bash(sed -i 's|from \"\"\\\\.\\\\/\\\\.\\\\.\\\\/types\"\"|from \"\"../types\"\"|g' *.svelte)",
|
|
|
|
|
"Bash(grep -n \"new PresenceManager\" /g/dev/svelte/vicen/src/uix/terra/**/*.svelte.ts)",
|
|
|
|
|
"Bash(find /g/dev/svelte/vicen/src/uix/terra/base -name README* -o -name *.md)",
|
|
|
|
|
"Bash(grep -n \"import.*watch\" src/uix/terra/**/*.svelte.ts)",
|
|
|
|
|
"Bash(do)",
|
|
|
|
|
"Bash(sed -i 's/new Context</createTerraContext</g' \"$f\")",
|
|
|
|
|
"Bash(echo \"Done: $f\")",
|
|
|
|
|
"Bash(node:*)",
|
|
|
|
|
"Bash(ls -d \"/g/dev/svelte/vicen/src/uix/terra\"/*/)",
|
|
|
|
|
"Bash(head -20 /g/dev/svelte/vicen/src/uix/terra/button/*.svelte)",
|
|
|
|
|
"Bash(head -30 /g/dev/svelte/vicen/src/uix/terra/accordion/*.svelte.ts)",
|
|
|
|
|
"Bash(grep -v '^\\\\.$')",
|
|
|
|
|
"Bash(grep -v '^\\\\.\\\\.$')",
|
|
|
|
|
"Bash(grep -r \"$terra\" \"G:/dev/svelte/vicen\" --include=\"*.js\" --include=\"*.ts\" --include=\"*.json\")",
|
|
|
|
|
"Bash(grep:*)",
|
|
|
|
|
"Bash(cp:*)",
|
|
|
|
|
"Bash(sed -i \"s|from ''\\\\.\\\\./config/terra-config\\\\.ts''|from ''../../config/terra-config.ts''|g\" \"G:/dev/svelte/vicen/src/uix/terra/base/direction/direction.svelte.ts\")",
|
|
|
|
|
"Bash(sed -i 's|from \"\"\\\\.\\\\./config/prop-resolvers\\\\.ts\"\"|from \"\"../../config/prop-resolvers.ts\"\"|g' \"G:/dev/svelte/vicen/src/uix/terra/base/portal/portal.svelte\")",
|
|
|
|
|
"Bash(__NEW_LINE_9f9527b2dc89162d__ LAYERS=\"G:/dev/svelte/vicen/src/uix/terra/layers\")",
|
|
|
|
|
"Bash(__NEW_LINE_9f9527b2dc89162d__ mv:*)",
|
|
|
|
|
"Bash(mv \"$LAYERS/escape-layer\" \"$LAYERS/escape\")",
|
|
|
|
|
"Bash(mv \"$LAYERS/presence-layer\" \"$LAYERS/presence\")",
|
|
|
|
|
"Bash(mv \"$LAYERS/text-selection-layer\" \"$LAYERS/text-selection\")",
|
|
|
|
|
"Bash(__NEW_LINE_a65563a60047bfcf__ LAYERS=\"G:/dev/svelte/vicen/src/uix/terra/layers\")",
|
|
|
|
|
"Bash(cp -r \"$LAYERS/floating-layer\" \"$LAYERS/floating\")",
|
|
|
|
|
"Bash(rm -rf \"$LAYERS/floating-layer\")",
|
|
|
|
|
"Bash(__NEW_LINE_bf7543f9714a9de4__ FS=\"G:/dev/svelte/vicen/src/uix/terra/layers/focus-scope\")",
|
|
|
|
|
"Bash(PR=\"G:/dev/svelte/vicen/src/uix/terra/layers/presence\")",
|
|
|
|
|
"Bash(__NEW_LINE_bf7543f9714a9de4__ mv:*)",
|
|
|
|
|
"Bash(mv \"$PR/presence.svelte.ts\" \"$PR/use-presence.svelte.ts\")",
|
|
|
|
|
"Bash(sed -i \"s|''./focus-scope\\\\.svelte\\\\.js''|''./use-focus-scope.svelte.js''|g\" \"G:/dev/svelte/vicen/src/uix/terra/layers/focus-scope/focus-scope-manager.ts\" \"G:/dev/svelte/vicen/src/uix/terra/layers/focus-scope/focus-scope.svelte\")",
|
|
|
|
|
"Bash(__NEW_LINE_543cbdcf7d13aeac__ sed:*)",
|
|
|
|
|
"Bash(__NEW_LINE_95e83c596e19d973__ LAYERS=\"G:/dev/svelte/vicen/src/uix/terra/layers\" __NEW_LINE_95e83c596e19d973__ find \"$LAYERS\" \\\\\\( -name \"*.ts\" -o -name \"*.svelte\" \\\\\\))",
|
|
|
|
|
"Bash(xargs sed:*)",
|
|
|
|
|
"Bash(__NEW_LINE_9aa46f2d17c41a3d__ PRES_UTILS=\"G:/dev/svelte/vicen/src/uix/terra/utils/presence\")",
|
|
|
|
|
"Bash(PRES_LAYER=\"G:/dev/svelte/vicen/src/uix/terra/layers/presence\")",
|
|
|
|
|
"Bash(__NEW_LINE_9aa46f2d17c41a3d__ cp:*)",
|
|
|
|
|
"Bash(cp \"$PRES_UTILS/presence-manager.svelte.ts\" \"$PRES_LAYER/\")",
|
|
|
|
|
"Bash(rm -rf \"$PRES_UTILS\")",
|
|
|
|
|
"Bash(pnpm check:*)",
|
|
|
|
|
"Bash(__NEW_LINE_ec548c10481f74d5__ TERRA=\"G:/dev/svelte/vicen/src/uix/terra\" __NEW_LINE_ec548c10481f74d5__ find \"$TERRA\" \\\\\\( -name \"*.ts\" -o -name \"*.svelte.ts\" -o -name \"*.svelte\" \\\\\\))",
|
|
|
|
|
"Bash(pnpm svelte-kit:*)",
|
|
|
|
|
"Bash(__NEW_LINE_9a92beff9c90538f__ TERRA=\"G:/dev/svelte/vicen/src/uix/terra\" __NEW_LINE_9a92beff9c90538f__ find \"$TERRA\" \\\\\\( -name \"*.ts\" -o -name \"*.svelte.ts\" -o -name \"*.svelte\" \\\\\\))",
|
|
|
|
|
"Bash(git -C G:/dev/svelte/vicen status --short)",
|
|
|
|
|
"Bash(git:*)",
|
|
|
|
|
"Bash(ls:*)",
|
|
|
|
|
"Bash(npm install:*)",
|
Add remaining air components, semantics, motion, and layout system
- Add Accordion and Checkbox air components with tokens and contracts
- Add full Layout system: Box, Flex, Grid, Group, Stack, HStack, VStack, Wrap, AutoGrid, AspectRatio, Container, Section, Separator, ScrollArea, Splitter, Float
- Add audio semantics facade: attention, completion, emphasis, feedback, persistence, selection
- Add motion semantics system
- Add dom, interaction, lib, runtime, resources directories
- Add component tokens and contracts for all new layout components
- Add icon CSS, audio barrel exports, tokens/motion.css
- Update test pages: accordion, animations, checkbox, layout
- Update existing components: button, dialog, drawer, field, input, select, switch, tabs, toast, spinner, typography
- Update base/earth themes (static tokens, motion, sound)
- Remove deprecated internal/context.ts, internal/style.ts, earth/motion.ts
- Update terra accordion and scroll-area exports
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
6 months ago
|
|
|
"Bash(xargs wc:*)",
|
|
|
|
|
"Bash(wc:*)",
|
|
|
|
|
"Bash(sed:*)",
|
|
|
|
|
"Bash(find:*)",
|
|
|
|
|
"Bash(cat)",
|
|
|
|
|
"Bash(chmod +x /tmp/audit.sh)",
|
|
|
|
|
"Bash(bash /tmp/audit.sh)",
|
|
|
|
|
"Bash(chmod +x /tmp/final_check.sh)",
|
|
|
|
|
"Bash(bash /tmp/final_check.sh)",
|
|
|
|
|
"Bash(awk '{print $NF}')",
|
|
|
|
|
"Bash(cp -r G:/dev/svelte/vicen/src/uix/terra/config G:/dev/svelte/vicen/src/uix/terra/system)",
|
|
|
|
|
"Bash(cp -r G:/dev/svelte/vicen/src/uix/air/config G:/dev/svelte/vicen/src/uix/air/system)",
|
|
|
|
|
"WebFetch(domain:www.radix-ui.com)",
|
|
|
|
|
"WebSearch",
|
|
|
|
|
"WebFetch(domain:ui.shadcn.com)",
|
|
|
|
|
"WebFetch(domain:github.com)",
|
|
|
|
|
"WebFetch(domain:bits-ui.com)",
|
|
|
|
|
"WebFetch(domain:www.shadcn.io)",
|
|
|
|
|
"WebFetch(domain:chakra-ui.com)",
|
Add air components (toggle-group, toolbar, avatar, meter, collapsible), fix CSS audit issues, fix combobox scroll, rebuild documentation
Components:
- Add ToggleGroup air wrapper (surface/outline/ghost variants, 6 colors, sound)
- Add Toolbar air wrapper (Provider, Group, GroupItem, Button, Link + semantics)
- Add Avatar air wrapper (6 sizes, solid/soft/outline, 6 colors, 4 radii)
- Add Meter air wrapper (3 sizes, 6 colors, animated fill bar)
- Add Collapsible air wrapper (trigger, animated content, expansion semantics)
CSS audit fixes:
- Rename 65 public resolver vars to private (--_air-*) in checkbox, switch
- Fix button radius privatization and warning solid-fg
- Fix slider circular reference in default tokens
- Add disabled-opacity tokens to button, toggle, tabs, toggle-group
- Tokenize combobox chip styles (12 direct semantic refs → component tokens)
- Fix tabs stack-gap public override → private resolver
Bug fix:
- Fix combobox scroll-on-open: replace scrollIntoView() with viewport-scoped
scroll in select.svelte.ts to prevent page scroll when opening dropdown
Documentation rebuild (19 → 9 normative + 5 archived):
- Consolidate 15 air docs into 6 (README, ARCHITECTURE, TOKENS, VISUAL_LANGUAGE, SEMANTICS, IMPLEMENTATION_GUIDE)
- Archive 5 historical docs to _archive/
- Fix config/ → system/ references across terra and air docs
- Update component inventory (13 → 30 components)
- Fix font documentation (add Lora serif, update 12-step scale)
- Absorb SVELTE5_BINDABLE_PATTERN into terra README
- Update air hub page with all new component entries
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 months ago
|
|
|
"WebFetch(domain:ark-ui.com)",
|
Add AlertDialog, DropdownMenu, ContextMenu air components; fix terra menu concurrent open
Components:
- AlertDialog: Provider, Content (context transition), Action, Cancel + demo
- DropdownMenu: Provider (revelation sound), Content (floating), Item, Separator,
GroupHeading + checkbox/radio indicators via CSS pseudo-elements + demo
- ContextMenu: Provider, Content sharing dropdown-menu visual language + demo
Terra fix — menu variant registry:
- Add menuRegistryByVariant in menu.svelte.ts to track open menus per variant
- MenuMenuState.onOpen() closes all other menus of same variant before opening
- Prevents concurrent context-menus (or dropdown-menus) from being open simultaneously
- Registry lives in terra infrastructure, not air — clean architectural boundary
- Cleanup via onDestroyEffect when component unmounts
CSS fixes:
- DropdownMenu content: z-index: 50 for proper stacking
- Checkbox/radio items: visual indicators via ::before pseudo-elements
- Selectors duplicated for both dropdown-menu and context-menu data-attr prefixes
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 months ago
|
|
|
"Bash(xargs -I{} basename {})",
|
Add soma foundation + air components (Pagination, Editable, PinInput, RatingGroup, Stepper, FileUpload)
soma — new headless component system replacing terra:
- Provider base class with opt-in context injection
- Reactive system (state, readableActive, writableActive)
- Attrs system (createAttrs, contracts, helpers)
- Props system (mergeProps with on-prefix detection, no hardcoded event list)
- DOM utils (consolidated core, focus/, env)
- Keyboard, events, CSS, ID, config modules
- Layers: scroll, observers, visually-hidden, arrow, portal, text-selection,
dismissal (merged escape+dismissible), presence, focus-scope
- Collapsible component as first soma validation
air components:
- Pagination, Editable, PinInput (air-native), RatingGroup (air-native),
Stepper, FileUpload wrappers over terra
- Terra defaultContent refactor for children snippet pattern
- Avatar, Meter, Progress, Separator migrated to air-native
- Reactive utilities extracted to $lib/util/reactive (shared)
- $soma and $reactive aliases added
Architecture:
- soma is independent: no imports from terra or $lib/util/reactive
- Terra exports deprecated for migrated components
- README fundacional documenting all design decisions
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 months ago
|
|
|
"Bash(xargs -I {} sh -c 'echo \"=== {} ===\" && grep \"air\\\\.interaction\\\\.play\" {}')",
|
|
|
|
|
"WebFetch(domain:www.shadcn-svelte.com)",
|
|
|
|
|
"WebFetch(domain:next.shadcn-svelte.com)",
|
|
|
|
|
"WebFetch(domain:www.bits-ui.com)",
|
|
|
|
|
"WebFetch(domain:shadcn-svelte.com)",
|
|
|
|
|
"WebFetch(domain:raw.githubusercontent.com)",
|
|
|
|
|
"Bash(curl -sL \"https://api.github.com/search/code?q=pagination-link+repo:huntabyte/shadcn-svelte+extension:svelte\")",
|
|
|
|
|
"Bash(timeout 10 npx vite dev --port 5173)",
|
|
|
|
|
"Bash(curl -s http://localhost:5175/test/air/color-picker)",
|
|
|
|
|
"Bash(curl -s http://localhost:5173/test/air/color-picker)",
|
|
|
|
|
"Bash(curl -s http://localhost:5174/test/air/color-picker)",
|
|
|
|
|
"Bash(npx vite:*)",
|
|
|
|
|
"Bash(bash /tmp/layer_stats.sh)",
|
soma: 12 components, architecture docs, naming fixes, form tier complete
Components (12):
- Accordion (keyboard nav, single/multiple, collapsible, loop)
- Checkbox (indeterminate, group, readonly)
- Collapsible
- Combobox (input + floating listbox, consumer-side filtering)
- Dialog (variant dialog/alertdialog, modal, nested, animations, forceMount)
- DropdownMenu (15 parts, submenus, typeahead, checkbox/radio items)
- Popover (floating, openOnHover, modal, custom anchor)
- RadioGroup (roving tabindex, orientation, readonly)
- Select (single/multiple, typeahead, scroll-into-view, hidden select)
- Slider (drag, keyboard, single/range, ticks, vertical)
- Switch (hidden input, data-checked)
- Tooltip (skip-delay group, 3-state, hover/focus)
Architecture:
- State class files renamed: {name}.svelte.ts → {name}-provider.svelte.ts
(avoids Vite module resolution ambiguity with .svelte wrappers)
- Export name standardized: always Provider, never Root
- COMPONENT_GUIDE.md: step-by-step implementation guide with checklist
- SOMA_ARCHITECTURE.md: updated structure, anti-patterns, improvements table
- README.md: updated naming, file structure, inventory
- context.ts: error message uses Provider not Root
- Demo index page at /test/soma/
Bug fixes:
- DropdownMenu trigger missing onclick/onkeydown in props
- DropdownMenu interactOutsideBehavior always 'close' (not modal-dependent)
- Checkbox getContext in event handler → captured in constructor
- Select context not found → was Vite cache issue (not naming)
- ScrollLock unlock path
- Floating wrapper z-index: auto override
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6 months ago
|
|
|
"Bash(cat:*)",
|
|
|
|
|
"Bash(curl -s \"https://www.radix-ui.com/primitives/docs/components/dialog\")",
|
|
|
|
|
"Bash(curl -s \"https://ark-ui.com/docs/components/dialog\")",
|
|
|
|
|
"Bash(curl -s \"https://bits-ui.com/docs/components/dialog\")",
|
|
|
|
|
"Bash(curl -s \"https://www.radix-ui.com/primitives/docs/components/popover\")",
|
|
|
|
|
"Bash(curl -s \"https://ark-ui.com/docs/components/popover\")",
|
|
|
|
|
"Bash(curl -s \"https://bits-ui.com/docs/components/popover\")",
|
|
|
|
|
"Bash(curl -s \"https://www.radix-ui.com/primitives/docs/components/accordion\")",
|
|
|
|
|
"Bash(curl -s \"https://ark-ui.com/docs/components/accordion\")",
|
|
|
|
|
"Bash(curl -s \"https://bits-ui.com/docs/components/accordion\")",
|
|
|
|
|
"Bash(curl -s \"https://www.radix-ui.com/primitives/docs/components/tooltip\")",
|
|
|
|
|
"Bash(curl -s \"https://ark-ui.com/docs/components/tooltip\")",
|
|
|
|
|
"Bash(curl -s \"https://bits-ui.com/docs/components/tooltip\")",
|
|
|
|
|
"Bash(curl -s \"https://www.radix-ui.com/primitives/docs/components/dropdown-menu\")",
|
|
|
|
|
"Bash(curl -s \"https://ark-ui.com/docs/components/menu\")",
|
|
|
|
|
"Bash(curl -s \"https://bits-ui.com/docs/components/dropdown-menu\")",
|
|
|
|
|
"Bash(curl -s \"https://www.radix-ui.com/primitives/docs/overview/introduction\")",
|
|
|
|
|
"Bash(curl -s \"https://ark-ui.com/docs/overview/introduction\")",
|
|
|
|
|
"Bash(curl -s \"https://bits-ui.com/docs\")",
|
|
|
|
|
"Bash(curl -s \"https://www.radix-ui.com/primitives/docs/components/switch\")",
|
|
|
|
|
"Bash(curl -s \"https://www.radix-ui.com/primitives/docs/components/checkbox\")",
|
|
|
|
|
"Bash(curl -s \"https://www.radix-ui.com/primitives/docs/components/radio-group\")",
|
|
|
|
|
"Bash(curl -s \"https://www.radix-ui.com/primitives/docs/components/select\")",
|
|
|
|
|
"Bash(curl -s \"https://ark-ui.com/docs/components/select\")",
|
|
|
|
|
"Bash(curl -s \"https://next.bits-ui.com/docs/components/select\")",
|
|
|
|
|
"WebFetch(domain:next.bits-ui.com)",
|
|
|
|
|
"Bash(curl -s \"https://ark-ui.com/docs/components/combobox\")",
|
|
|
|
|
"Bash(curl -s \"https://next.bits-ui.com/docs/components/combobox\")",
|
|
|
|
|
"Bash(curl -s http://localhost:5173/test/soma/tabs)",
|
|
|
|
|
"WebFetch(domain:sonner.emilkowal.ski)",
|
|
|
|
|
"WebFetch(domain:www.radix-vue.com)",
|
|
|
|
|
"WebFetch(domain:react-resizable-panels.vercel.app)",
|
|
|
|
|
"WebFetch(domain:mantine.dev)",
|
|
|
|
|
"WebFetch(domain:react-aria.adobe.com)",
|
|
|
|
|
"WebFetch(domain:reka-ui.com)",
|
|
|
|
|
"WebFetch(domain:www.w3.org)",
|
|
|
|
|
"WebFetch(domain:zagjs.com)",
|
|
|
|
|
"WebFetch(domain:react-spectrum.adobe.com)",
|
|
|
|
|
"WebFetch(domain:headless-tree.lukasbach.com)",
|
|
|
|
|
"WebFetch(domain:mui.com)",
|
|
|
|
|
"WebFetch(domain:primereact.org)",
|
|
|
|
|
"WebFetch(domain:a11ymatters.com)",
|
|
|
|
|
"WebFetch(domain:base-ui.com)",
|
|
|
|
|
"WebFetch(domain:tanstack.com)",
|
|
|
|
|
"WebFetch(domain:icflorescu.github.io)",
|
|
|
|
|
"WebFetch(domain:www.ag-grid.com)",
|
|
|
|
|
"Bash(sort -t'\"' -k2)",
|
|
|
|
|
"Bash(uniq -f1)",
|
|
|
|
|
"Bash(netstat -tlnp)",
|
|
|
|
|
"Bash(xargs -I {} basename {})"
|
refactor: consolidate acel utilities, fix floating positioning bug, normalize types
- Merge internal/ and shared/ into utilities/ with semantic subdirs:
floating/, focus/, keyboard/, datetime/, presence/, typeahead/
- Fix tooltip/popover positioning: wrapperProps.style was a plain object,
causing Svelte 5 spread to serialize it as "[object Object]" — wrapped
with styleToString() so CSS is applied correctly
- Fix WithChild<T,{},Ref> producing Snippet<[{}]> instead of Snippet:
use keyof check so empty SnippetProps yields plain Snippet (no args)
- Fix TooltipContentProps.children: switch to WithChildNoChildrenSnippetProps
so children is Snippet while child retains { open: boolean } props
- Fix field component: move field.svelte.ts to root dir, add exports.ts,
simplify index.ts, normalize import paths across all field components
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
7 months ago
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
}
|