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)",
|
soma: tier 1/2 components, Field/NumberField integration, codex_audit fixes
New components: context-menu, field, file-upload, link-preview, menubar.
Codex audit fixes (2026-04-17):
- Wrappers thinned: table, scroll-area scrollbar, calendar, range-calendar
- Toast Root → Item refactor (data-toast-item, resolves part collision)
- TreeView tab-stop fallback, Table right-pinned offset, Toolbar O(N) registry
- Combobox label registry, Pagination count=0, Splitter feasible-range clamp
- TagsInput relatedTarget, Toast compound hotkey, RadioGroup closest filter
- Accessible-name props (aria-label/-labelledby) tipados en RadioGroup/Slider/
Switch/Toolbar; Slider thumbLabels per-index
- NumberField startValue saneado, Table getIsSomeSelected filtra visibles
- Docs: DropdownMenu CheckboxGroup, NumberField terra-free, Pagination
First/Last snippet
Supporting changes:
- App layer + ling/logr/glob/util consolidation, tests updates
- Terra/scripts mechanical reformat (quotes, imports)
- Test pages updated to match new APIs
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6 months ago
|
|
|
"Bash(xargs -I {} basename {})",
|
|
|
|
|
"Bash(curl:*)",
|
|
|
|
|
"Bash(gh api:*)",
|
|
|
|
|
"Bash(python -c \"import sys,json; [print\\(f['name']\\) for f in json.loads\\(sys.stdin.read\\(\\)\\)]\")",
|
|
|
|
|
"Bash(npx vitest:*)",
|
|
|
|
|
"WebFetch(domain:vaul.emilkowal.ski)",
|
|
|
|
|
"Bash(npm ls *)",
|
|
|
|
|
"Bash(npx -y degit chakra-ui/ark/packages/react/src/components/dialog ark-dialog)",
|
|
|
|
|
"Bash(ls ark-dialog/)",
|
|
|
|
|
"Bash(npx -y degit emilkowalski/vaul vaul-source --force)",
|
|
|
|
|
"Bash(npx -y degit chakra-ui/ark/packages/react/src/components/drawer ark-drawer)",
|
|
|
|
|
"Bash(ls ark-drawer/)",
|
|
|
|
|
"Bash(npx -y degit radix-ui/primitives/packages/react/dialog/src radix-dialog-source --force)",
|
|
|
|
|
"Bash(npx -y degit chakra-ui/zag/packages/machines/drawer/src zag-drawer)",
|
|
|
|
|
"Bash(ls zag-drawer/)",
|
|
|
|
|
"Bash(npx -y degit chakra-ui/zag/packages/machines/drawer zag-drawer-pkg)",
|
|
|
|
|
"Bash(ls zag-drawer-pkg/)",
|
|
|
|
|
"Bash(ls zag-drawer-pkg/src/)",
|
|
|
|
|
"WebFetch(domain:deepwiki.com)",
|
|
|
|
|
"WebFetch(domain:www.vaul-svelte.com)",
|
|
|
|
|
"WebFetch(domain:emilkowal.ski)",
|
|
|
|
|
"WebFetch(domain:www.npmjs.com)",
|
feat(eidos): TSC v2.2 (parts + composition) + universal theming coverage
Token Scope Contract universal — no más excepciones arquitectónicas.
Los 3 componentes que vivían fuera de TSC v2.1 (select, avatar,
toggle-group) ahora están dentro del contrato via dos extensiones nuevas.
TSC v2.2 extensiones (lib/config-types.ts + render-css.ts + config.ts):
- `parts: readonly string[]` en RecipeTokenMultiDeclaration — emite
selectores comma-separados (`[data-{c}-x], [data-{c}-y]`) para
componentes con data-color cascadeado per-part. Consumer: select.
- `composition: { foreignRecipe: { targetSelector, tokens } }` sibling
key — overrides cross-recipe scoped a la cascade del host. Consumer:
toggle-group modifica `--toggle-palette-*` en sus items.
Migraciones:
- select: 3 private `_accent-{track,border,text}` con parts: ['trigger',
'content'] + 7 cascades color:X each. Removed orphan `_accent-solid`
(CSS no consumía).
- avatar: 6 tokens via composite scopes `['variant:X', 'color:Y']` con
matrix helper inline. Badge usa parts: ['badge']. Reemplaza 24 bloques
CSS × 2 partes.
- toggle-group: composition block con 8 palette tokens × 4 colors.
Reemplaza 4 bloques CSS per-color.
Bug toggle-group post-composition (encontrado y arreglado):
Tras la composition migration, el cascade del toggle-group seguía roto
porque los tokens derivados (`--toggle-solid-on-bg`, `--toggle-outline-fg`,
etc.) viven en scope `[data-toggle]`. El `[data-toggle-group-item]` es
sibling (no descendant), así que `var(--toggle-solid-on-bg)` resolvía
undefined. Fix: inlined derivation expressions directamente en
`[data-toggle-group-item]` y sus variant cascades (solid/outline/ghost),
referenciando palette tokens en su propio scope local.
Validador + emisor + contract:
- `validateRecipeComposition` valida el shape `{ targetSelector, tokens }`
y rechaza composition entries con scope='root'.
- `stripCompositionKey` + `emitComposition` separan el pipeline.
- `appendRecipeContractTokens` skip-list para `composition` (no aparece
como fake `--{c}-composition` knob).
- `tokenKeys`/`tokenEntries` helpers en recipe-css-contract.test.ts
filtran composition en todos los iteradores.
Documentación:
- THEMING.md §18 reescrito como "Cobertura universal de TSC". §7
extendido con subsecciones "Multi-part scope" y "Cross-recipe
composition" + ejemplos completos. TOC actualizado.
- eidos/README.md tabla de referencia ampliada con TSC v2.2 + §18.
- CLAUDE.md gana hand-off "2026-05-27 #5" (TSC v2.2 + cobertura universal).
- CONTINUE.md reescrito al estado actual de la sesión.
Working tree también incluye sprint Words en paralelo (multiple authors):
slash menu, find/replace regex, code language picker, table audit,
toolbar family menu, code highlight engine.
Tests: 786/786 pass en src/uix/{eidos,morfo,soma,sema}. `npm run check`:
6 errores pre-existentes (lib/_demo, soma/components/internal,
web/routes/active) no relacionados.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4 months ago
|
|
|
"Bash(awk NR==507||NR==635||NR==723||NR==866 { print NR\": \"$0 } *)",
|
|
|
|
|
"Bash(awk '$4 > 0 {print}')",
|
|
|
|
|
"Bash(awk '/FAIL/{flag=1; print; next} /PASS/{flag=0} flag')",
|
|
|
|
|
"Bash(awk 'BEGIN{cur=\"\"} /^FAIL/{cur=$2; print \"--- \"$2\" ---\"; next} /^PASS/{cur=\"\"; next} cur && /\\\\[/{print \" \"$0}')",
|
|
|
|
|
"Bash(BASE_URL=http://localhost:5173 node --import tsx/esm scripts/probe-toggle-pressed-intents.ts)",
|
|
|
|
|
"Bash(BASE_URL=http://localhost:5173 node --import tsx/esm scripts/probe-toggle-fresh.ts)",
|
|
|
|
|
"Bash(awk '{print length, $0}')",
|
|
|
|
|
"Bash(gzip -c src/uix/eidos/generated/base.css)",
|
|
|
|
|
"Bash(awk -F'-' '{print $3}')",
|
|
|
|
|
"Bash(sort -k2 -rn)",
|
|
|
|
|
"Bash(awk '/^\tcheckbox: \\\\{/,/^\t\\\\},$/' src/uix/eidos/lib/recipes/base.ts)",
|
|
|
|
|
"Bash(grep -c data-color= src/uix/eidos/components/__TRACKED_VAR__/__TRACKED_VAR__.css)",
|
|
|
|
|
"Bash(grep -c data-variant.*data-color src/uix/eidos/components/__TRACKED_VAR__/__TRACKED_VAR__.css)",
|
|
|
|
|
"Bash(awk '/^\tbutton: \\\\{/,/^\t\\\\},$/' src/uix/eidos/lib/recipes/base.ts)",
|
|
|
|
|
"Bash(awk '/^\tswitch: \\\\{/,/^\t\\\\},$/' src/uix/eidos/lib/recipes/base.ts)",
|
|
|
|
|
"Bash(awk '/^\tswitch: \\\\{/{flag=1} flag{print NR\": \"$0} /^\t\\\\},$/{if\\(flag\\){flag=0}}' src/uix/eidos/lib/recipes/base.ts)",
|
|
|
|
|
"Bash(awk '/^\twords: \\\\{/,/^\t\\\\},$/' src/uix/eidos/lib/recipes/base.ts)",
|
|
|
|
|
"Bash(awk '/^\tstepper: \\\\{/,/^\t\\\\},$/' src/uix/eidos/lib/recipes/base.ts)",
|
|
|
|
|
"Bash(awk \"/^\t'tags-input': \\\\{/,/^\t\\\\},$/\" src/uix/eidos/lib/recipes/base.ts)",
|
|
|
|
|
"Bash(awk 'BEGIN{p=0} /^\t.tags-input.: \\\\{/{p=1} p{print NR\": \"$0} /^\t\\\\},$/{if\\(p\\){p=0; exit}}' src/uix/eidos/lib/recipes/base.ts)",
|
|
|
|
|
"Bash(awk 'BEGIN{p=0} /^\twords: \\\\{/{p=1} p{print NR\": \"$0} /^\t\\\\},$/{if\\(p\\){p=0; exit}}' src/uix/eidos/lib/recipes/base.ts)",
|
|
|
|
|
"Bash(awk \"BEGIN{p=0} /^\t'file-upload': \\\\{/{p=1} p{print NR\\\\\": \\\\\"\\\\$0} /^\t\\\\},\\\\$/{if\\(p\\){p=0; exit}}\" src/uix/eidos/lib/recipes/base.ts)",
|
|
|
|
|
"Bash(awk \"BEGIN{p=0} /^\t'tag-group': \\\\{/{p=1} p{print NR\\\\\": \\\\\"\\\\$0} /^\t\\\\},\\\\$/{if\\(p\\){p=0; exit}}\" src/uix/eidos/lib/recipes/base.ts)",
|
|
|
|
|
"Bash(awk \"BEGIN{p=0} /^\tbadge: \\\\{/{p=1} p{print NR\\\\\": \\\\\"\\\\$0} /^\t\\\\},\\\\$/{if\\(p\\){p=0; exit}}\" src/uix/eidos/lib/recipes/base.ts)",
|
|
|
|
|
"Bash(awk \"BEGIN{p=0} /^\tcard: \\\\{/{p=1} p{print NR\\\\\": \\\\\"\\\\$0} /^\t\\\\},\\\\$/{if\\(p\\){p=0; exit}}\" src/uix/eidos/lib/recipes/base.ts)",
|
|
|
|
|
"Bash(awk \"BEGIN{p=0} /^\teditable: \\\\{/{p=1} p{print NR\\\\\": \\\\\"\\\\$0} /^\t\\\\},\\\\$/{if\\(p\\){p=0; exit}}\" src/uix/eidos/lib/recipes/base.ts)",
|
|
|
|
|
"Bash(awk 'NR>=2800 && NR<=2870 && /^\\\\[|^:root|^}/')",
|
|
|
|
|
"Bash(git show *)",
|
|
|
|
|
"Bash(awk 'NR>=2800 && NR<=2870 && /^\\\\[|^:root|^}/' /tmp/old-base.css)",
|
|
|
|
|
"Bash(awk 'NR>=2800 && NR<=2870 {print NR\": \"$0}' /tmp/old-base.css)",
|
refactor(words)!: remove V1 engine — V2 is now the sole engine
Deletes the V1 rich-text engine and the extensions/ tree. The public
document model flips from WordsDocument to WordsDocumentV2 (D1: V2 puro,
sin legacy — no backward-compat importer, V1-persisted docs no longer
load). Per D2, table striped/compact/cell-tone are dropped entirely
(props, commands, morfo attrs).
- Delete engine/{document,operations,commands,history,input,render,
find-replace,serialize-{html,json,markdown,text},dom-selection,index}
and the whole extensions/ tree (registry + image + table).
- Complete the V2 ops under operations-v2/: port commands, history,
input, find-replace, render-dom, serialize-text, extra-ops,
insert-block-types, markdown shortcuts, factories, dom-selection;
land R4A.2-R4A.8 (text/delete/marks-ops/paragraph-ops/delete-ops/
block-format/list-ops/link-ops/table-ops/selection-walkers).
- Rewire provider, exports, types, morfo/words.ts, eidos word
components, soma words.svelte, the content-test harness, and the
/uix/components/words demo to V2.
- Import accepts JSON (JSON.parse + validateWordsDocument gate) and
plain text only; HTML and Markdown remain export-only (lossy, no
faithful inverse parser).
Verify: npm run check 0 errors; words scope 455/456 (lone failure is the
sema-parity 5s timeout flake under parallel load — 6/6 isolated);
morfo:vocabulary exit 0; browser smoke of /uix/components/words green
(sample renders, text + JSON import round-trip, invalid JSON rejected
without mutating the doc).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
4 months ago
|
|
|
"Bash(awk 'NR>=2700 && NR<=2870 && \\(/^\\\\[/ || /^:root/ || /^}/\\)' /tmp/old-base.css)",
|
|
|
|
|
"mcp__Claude_Preview__preview_start",
|
|
|
|
|
"Bash(awk '/^\ttoggle: \\\\{/,/^\t\\\\},/' G:/dev/svelte/vicen/src/uix/eidos/lib/recipes/base.ts)",
|
|
|
|
|
"mcp__Claude_in_Chrome__tabs_context_mcp",
|
|
|
|
|
"mcp__Claude_in_Chrome__browser_batch",
|
|
|
|
|
"mcp__Claude_in_Chrome__navigate",
|
|
|
|
|
"mcp__Claude_in_Chrome__javascript_tool",
|
|
|
|
|
"mcp__Claude_in_Chrome__read_console_messages",
|
|
|
|
|
"mcp__Claude_in_Chrome__computer",
|
|
|
|
|
"Bash(kill %1)",
|
|
|
|
|
"Bash(wait)",
|
|
|
|
|
"Bash(Select-Object -Last 60)",
|
feat(words): inspector UX overhaul — id-based active block, controls, chrome
Active-block addressing by materialized-path id (words-activate.svelte +
engine/block-tree.ts): click sets the active block explicitly; inspector
follows it, immune to selection churn. Breadcrumb navigates ancestry.
Inspector controls:
- ToggleGroups (font / weight / align / border) always keep one option
selected; the default value stores as undefined to keep the model clean.
- Border gains a `none` chip that clears the border (BorderChipValue).
- Image full-width is a Switch; image src + column width/gap validate on
commit (sanitizeWordsUrl, CSS-length/flex checks) with a [data-invalid] ring.
- Corner-radius + border-width are slider-only (WordsNumRow `sliderOnly`):
the paired numeric stepper was redundant.
- Numeric fields clamp to their range (line-height ≤ 2.5, font-size 12-40).
Inspector chrome:
- Unified field frame + single accent focus ring (no inset outline over text,
no ghost/black-border mix).
- Section dividers + uppercase accordion headers; styled breadcrumb row.
- Depth-tied accent (primary/affirm/loss/risk) shared by header mark and the
canvas active-block ring.
- Selection ring is an ::after pseudo-element with a fixed radius, so a block
the user rounded no longer rounds its selection indicator.
- Raw hex/rgba replaced by --color-*-solid tokens (theme-aware, portal-safe).
Columns: empty on insert, gap control, per-column width; Add-block removed
from the Columns BLOCK panel (lives in the column inspector). Shift+Enter
soft break renders via white-space: pre-wrap.
npm run check: 1 pre-existing baseline error (visual.ts:147). Words soma
452/452. Verified end-to-end in the browser.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4 months ago
|
|
|
"Bash(Select-Object -Last 70)",
|
|
|
|
|
"mcp__Claude_in_Chrome__list_connected_browsers",
|
|
|
|
|
"mcp__Claude_in_Chrome__select_browser",
|
|
|
|
|
"mcp__Claude_in_Chrome__find",
|
|
|
|
|
"mcp__Claude_in_Chrome__read_page",
|
|
|
|
|
"Bash(stat -c '%Y %n' \"G:/dev/svelte/vicen/src/uix/soma/components/dropdown-menu/dropdown-menu-provider.svelte.ts\" 2>/dev/null && date +%s)",
|
|
|
|
|
"WebFetch(domain:discuss.prosemirror.net)",
|
|
|
|
|
"mcp__Claude_in_Chrome__tabs_create_mcp",
|
|
|
|
|
"WebFetch(domain:www.reactbricks.com)",
|
|
|
|
|
"Bash(awk 'NR>=370 && NR<=400 {printf \"%d| %s\\\\n\", NR, $0}' src/uix/soma/components/words/words-provider.svelte.ts)",
|
|
|
|
|
"Bash(awk 'NR>=20 && NR<=36 {printf \"%d| %s\\\\n\",NR,$0}' src/uix/eidos/components/words/words-inspector.svelte)",
|
|
|
|
|
"Bash(awk 'NR<=22 {printf \"%d| %s\\\\n\",NR,$0}' src/uix/soma/components/words/types.ts)",
|
|
|
|
|
"Bash(awk '/function blockTitle/{f=1} f{printf \"%d| %s\\\\n\",NR,$0} f&&/^\\\\t\\\\}/{exit}' src/uix/eidos/components/words/words-inspector.svelte)",
|
|
|
|
|
"Bash(awk '/function walkPath/{f=1} f{printf \"%d| %s\\\\n\",NR,$0} f&&/^\\\\t\\\\}/{exit}' src/uix/eidos/components/words/words-inspector.svelte)",
|
|
|
|
|
"Bash(npm run *)",
|
|
|
|
|
"Bash(echo \"started dev, pid $!\")",
|
|
|
|
|
"Bash(awk 'NR==284{printf \"L284: [%s]\\\\n\",$0}' src/uix/eidos/components/words/words-inspector.svelte)",
|
|
|
|
|
"Bash(awk 'NR>=283 && NR<=286 {printf \"%d|%s\\\\n\",NR,$0}' src/uix/eidos/components/words/words-inspector.svelte)",
|
|
|
|
|
"Bash(awk 'NR>=35 && NR<=39' src/uix/soma/components/words/words-provider.svelte.ts)",
|
|
|
|
|
"Bash(awk 'NR>=216 && NR<=232 {printf \"%d| %s\\\\n\",NR,$0}' src/uix/soma/components/words/words-provider.svelte.ts)",
|
|
|
|
|
"Bash(npx svelte-kit *)",
|
|
|
|
|
"Bash(xargs -I {} basename {} .ts)",
|
|
|
|
|
"Bash(awk 'NR>=118 && NR<=135' src/uix/soma/components/words/engine/operations/text.ts)",
|
|
|
|
|
"PowerShell($f = 'src/uix/soma/components/words/engine/operations/text.ts'; Get-Content $f | Select-Object -Skip 108 -First 22 | ForEach-Object -Begin {$n=109} -Process { \"{0}: {1}\" -f $n, $_; $n++ })",
|
|
|
|
|
"Bash(awk '/insertBlockInColumn/{f=1} f{print NR\": \"$0} f&&/^}/{c++; if\\(c>=1\\)exit}' src/uix/soma/components/words/engine/operations/insert-block-types.ts)",
|
|
|
|
|
"Bash(awk 'NR>=795 && NR<=820 {printf \"%d| %s\\\\n\",NR,$0}' src/uix/eidos/components/words/words-block-panel.svelte)",
|
|
|
|
|
"Bash(awk 'NR>=996 && NR<=1064 {print NR\": \"$0}' src/uix/soma/components/words/engine/blocks/built-ins.ts)",
|
|
|
|
|
"Bash(pkill -f \"vite\")",
|
|
|
|
|
"Bash(pkill -f \"node.*svelte\")",
|
|
|
|
|
"Bash(netstat -ano)",
|
|
|
|
|
"Bash(tee /tmp/chk.txt)",
|
|
|
|
|
"Bash(echo \"EXIT=$?\")",
|
|
|
|
|
"PowerShell($f='src/uix/soma/components/words/engine/operations/commands.ts'; $lines = Get-Content $f; for\\($i=0; $i -lt $lines.Count; $i++\\){ if\\($lines[$i] -match 'insertBlockInColumn'\\){ \"{0}: {1}\" -f \\($i+1\\), $lines[$i].Trim\\(\\) } })",
|
|
|
|
|
"Bash(awk '/insertBlockInColumn/{print NR\": \"$0}' src/uix/soma/components/words/engine/operations/commands.ts)",
|
|
|
|
|
"Bash(awk '{print $5}')",
|
|
|
|
|
"PowerShell(Set-Location G:\\\\dev\\\\svelte\\\\vicen; $conn = Get-NetTCPConnection -LocalPort 5173 -State Listen -ErrorAction SilentlyContinue; if \\($conn\\) { $procId = $conn.OwningProcess | Select-Object -First 1; Write-Output \"Killing PID $procId on 5173\"; Stop-Process -Id $procId -Force -ErrorAction SilentlyContinue; Start-Sleep -Seconds 2; Write-Output \"killed\" } else { Write-Output \"no listener on 5173\" })",
|
|
|
|
|
"Bash(echo \"dev restarting, pid $!\")",
|
|
|
|
|
"Bash(awk '/function validateColumnFields/{f=1} f{print NR\": \"$0} f&&/^}/{exit}' src/uix/soma/components/words/engine/blocks/built-ins.ts)",
|
|
|
|
|
"Bash(awk '/export function getNodeAtPath/{f=1} f{print NR\": \"$0} f&&/^}/{exit}' src/uix/soma/components/words/engine/operations/helpers.ts)",
|
|
|
|
|
"Bash(awk '/export function updateNodeAtPath/{f=1} f{print NR\": \"$0} f&&/^}/{exit}' src/uix/soma/components/words/engine/operations/helpers.ts)",
|
|
|
|
|
"Bash(awk 'NR>430 && /block\\\\./ {printf \"%d| %s\\\\n\",NR,$0}' src/uix/eidos/components/words/words-inspector.svelte)",
|
|
|
|
|
"Bash(echo \"restarting pid $!\")",
|
|
|
|
|
"Bash(npx prettier *)",
|
|
|
|
|
"Bash(echo \"restart pid $!\")",
|
|
|
|
|
"Bash(echo \"=== how is a soft break represented? \\\\\\\\n in text? <br>? ===\")",
|
|
|
|
|
"Bash(echo \"=== how does renderer emit text with \\\\\\\\n? does it split on newline? ===\")",
|
|
|
|
|
"Bash(cd /g/dev/svelte/vicen; npm run dev > /tmp/words-dev5.log 2>&1 & *)",
|
Theming: add `scaling` zoom axis (Radix parity), separate from density
Introduce a global zoom axis independent of density, in parity with Radix
Themes' `scaling` (90/95/100/105/110%). Scaling zooms px metrics INCLUDING
typography (font-size, icon-size, space, control-height); density only moves
layout rhythm + control height and leaves text fixed. The two axes compose
multiplicatively.
- config-types: SCALING_KEYS / ScalingKey / DEFAULT_SCALING; DensityPrimitiveSet
drops the dead `scale` + `contentScale` (kept spaceScale, controlScale).
- primitives/static: STATIC_SCALING (0.9..1.1).
- render-css: appendScaledMetricDeclarations wraps metrics in
calc(<raw>[ * var(--density-x-scale)] * var(--scaling)); appendScalingDeclarations
emits --scaling-{key} + --scaling default; renderScalingBlocks emits
[data-scaling] blocks. line-height/radius/border/shadow excluded.
- config + contract: prune the removed density scalars.
- active-eidos: `scaling` / `scalingSource` options, getScaling() on the
preference source, data-scaling projection + dispose cleanup.
- docs: THEMING.md section 23 + 20.1 reconcile; README density/scaling; SCALING_RFC.md.
Verified: npm run check (0 new errors), vitest eidos (0 new regressions),
browser cascade at 90/100/110 scales font/space/control x0.9/x1.1 and leaves
radius/border fixed.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4 months ago
|
|
|
"Bash(awk '/export function insertInlinesAtRange/{f=1} f{print NR\": \"$0} f&&/^}/{c++; if\\(c>=1\\)exit}' src/uix/soma/components/words/engine/operations/text.ts)",
|
|
|
|
|
"WebFetch(domain:www.untitledui.com)",
|
|
|
|
|
"WebFetch(domain:untitled-ui-webflow-library.webflow.io)",
|
|
|
|
|
"WebFetch(domain:www.colorsandfonts.com)",
|
|
|
|
|
"Bash(echo \"exit:$?\")",
|
Theming: on-solid contrast by luminance (P2-2) + translucent role surfaces (P2-4)
Two audit P2 quality defects, fixed at engine level.
P2-2 - on-solid text illegible on light solids:
The `contrast` slot defaulted to `--color-content-on-solid` (white) for every
role. On light solids (amber/yellow, risk=orange ~2.3:1) white is sub-AA. The
engine now picks by WCAG contrast (gamma-linearized) of the role step-9: when
white fails (<3:1) it uses `--color-content-on-solid-contrast` (a dark, new
OPTIONAL `content.onSolidContrast` semantic, #1c1917 in base). Only risk flips
to dark in base (5.89:1); purple/red/teal/green keep white (convention, >=3:1).
An explicit `slots.contrast` override is still honored verbatim.
P2-4 - opaque tinted soft surfaces:
The soft variant tint (Button + Badge `{role}-soft-bg`) was opaque (step-1 track
+ opaque color-mix hover) so it did not composite over non-uniform backgrounds.
New derived tokens `--color-{role}-surface` (= a2) + `--color-{role}-surface-hover`
(= a3) are translucent by construction (compositing-inverse alpha). Button/Badge
soft consume them. Toast/Tabs untouched - they are cards, opacity is correct.
- config-types: optional onSolidContrast + CONTENT_COLOR_OPTIONAL_KEYS.
- config: content keySet allows the optional key; validator value-checks it.
- render-css: wcagContrastRatio/wcagRelativeLuminance; luminance pick; emit
on-solid-contrast + surface/surface-hover.
- contract: on-solid-contrast + surface tokens per role.
- themes/base: onSolidContrast #1c1917 (light + dark).
- recipes/base: Button + Badge soft-bg -> surface, soft-bg-hover -> surface-hover.
- docs: THEMING.md section 24 + section 22 item 2; audit P2-2/P2-4 resolved.
Verified: npm run check (0 new errors), vitest eidos (0 new regressions),
browser runtime (risk 5.89:1 dark text, surfaces translucent rgba).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4 months ago
|
|
|
"PowerShell(npm run generate:eidos-css 2>&1)",
|
|
|
|
|
"PowerShell(Get-ChildItem -Recurse G:\\\\dev\\\\svelte\\\\vicen\\\\web\\\\routes\\\\temas -File | ForEach-Object { \"{0,6} {1}\" -f \\(Get-Content $_.FullName | Measure-Object -Line\\).Lines, $_.FullName.Replace\\('G:\\\\dev\\\\svelte\\\\vicen\\\\web\\\\routes\\\\temas\\\\',''\\) })",
|
|
|
|
|
"Bash(Get-ChildItem -Path \"G:\\\\dev\\\\svelte\\\\vicen\\\\src\\\\uix\\\\eidos\\\\components\" -Directory)",
|
feat(motion): motion engine as arts/motion service + F6 tokens + F7 typegen
Relocate the motion runtime out of eidos into a runtime art (src/arts/motion,
$motion), exposed as uix.motion and consumed by BOTH soma (Presence.motion ->
motion.run) and eidos (delegates + registers presets) -- dissolving the
soma->eidos coupling. Remove DialogProps.runMotion / eidos.motionRunner; the
bridge is now EngineMotion.run (reads data-animation-style). Delete the 4
relocated dead files (lib/motion/{types,runtime,runner,presets/js}.ts); the
preset DATA (presets/css.ts) stays in eidos. Regenerate generated/base.css.
F6 - token rigor (Carbon): tokenize the raw firma durations (slower/deliberate/
emphatic/sustained holds, escalating by announce intent severity), add
--motion-distance-xl (30px shared-axis), --motion-scale-through (0.92), the
emphasized easing, and productive/expressive sets ([data-motion-set=expressive]).
F7 - extensibility + typegen: app-extensible, type-safe preset-name registry
(EidosMotionPresets, mirroring SemaChannelSignatures); MotionPresetName =
keyof EidosMotionPresets | none | (string & {}).
Also sweeps other in-progress working-tree edits (web/routes/temas/grafito).
Verify: npm run check -> 1 pre-existing error (grafito), 0 new; motion 22/22,
active-uix 25/25, Presence 2/2, Dialog 3/3. Pre-existing words-track failures
unchanged.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4 months ago
|
|
|
"Bash(Select-Object -ExpandProperty Name)",
|
|
|
|
|
"Bash(echo \"CHECK_DONE exit=$?\")",
|
|
|
|
|
"Bash(echo \"SOMA_TESTS_DONE exit=$?\")",
|
|
|
|
|
"Bash(echo \"vocab exit=$?\")",
|
|
|
|
|
"Bash(echo \"morfo exit=$?\")",
|
|
|
|
|
"Bash(npx tsx *)",
|
|
|
|
|
"Bash(echo \"eidoslint exit=$?\")",
|
|
|
|
|
"Bash(Get-ChildItem -Path \"G:\\\\dev\\\\svelte\\\\vicen\\\\src\\\\uix\\\\soma\\\\components\\\\words\" -Recurse -File)",
|
|
|
|
|
"Bash(Select-Object FullName)",
|
|
|
|
|
"Bash(Sort-Object FullName)",
|
|
|
|
|
"Bash(grep -E \"\\\\[data-words\" G:/dev/svelte/vicen/src/uix/eidos/components/words/words.css | sed 's/.*\\\\\\(\\\\[data-words[^]]*\\\\]\\\\\\).*/\\\\1/' | sort | uniq > /tmp/eidos_attrs.txt && wc -l /tmp/eidos_attrs.txt)",
|
|
|
|
|
"Bash(echo \"exit=$? \\(0=found→agent WRONG, 1=missing→agent RIGHT\\)\")",
|
|
|
|
|
"Bash(awk '/const columnsSpec|type: .columns./{print NR\": \"$0}' src/uix/soma/components/words/engine/blocks/built-ins.ts)",
|
|
|
|
|
"Bash(awk 'NR>=400 && NR<=440' src/uix/eidos/components/words/words.css)",
|
|
|
|
|
"Bash(awk '/export function toggleMarkSet/,/^}/' src/uix/soma/components/words/engine/operations/marks.ts)",
|
|
|
|
|
"Bash(awk '/export function actionFromPaste/,/^}/' src/uix/soma/components/words/engine/operations/input.ts)",
|
|
|
|
|
"Bash(perl -ne 'print \"$.: \", $_ if /\\\\x00/' src/uix/soma/components/words/engine/operations/input.ts)",
|
|
|
|
|
"Bash(perl -i -pe 's/\\\\x00/\\\\\\\\0/g' src/uix/soma/components/words/engine/operations/input.ts)",
|
|
|
|
|
"Bash(echo \"check started in background \\(pid $!\\)\")",
|
|
|
|
|
"Bash(break)",
|
|
|
|
|
"Bash(echo \"check started \\(pid $!\\)\")",
|
|
|
|
|
"Bash(rg -n 'bind:api|api\\\\s*=\\\\s*$bindable|getContext|setContext|WordsProvider.ctx|export.*getWords|getWordsApi|context<' src/uix/soma/components/words/components/words.svelte src/uix/soma/components/words/exports.ts)",
|
|
|
|
|
"Bash(echo \"words tests started \\(pid $!\\)\")",
|
|
|
|
|
"Bash(rg -n \"\\\\-\\\\-words-block-gap\" src/uix/eidos/components/words/*.ts src/uix/eidos/components/words/recipe* src/uix/eidos/**/recipes/*.ts)",
|
|
|
|
|
"Bash(rg -rn \"block-gap\" src/uix/eidos/components/words/)",
|
|
|
|
|
"Bash(rg -rn \"block-gap|content-py|content-px\" src/uix/eidos --glob '*.ts')",
|
|
|
|
|
"Bash(rg -rn \"block-gap\" src/uix/eidos --glob '*.ts')",
|
|
|
|
|
"Bash(rg -rn \"data-words-node\" src/uix/soma/components/words/engine/)",
|
|
|
|
|
"Bash(rg -n 'import \\\\{ Button|from '\\\\''\\\\$uix/eidos/components/button'\\\\''' src/uix/eidos/components/words/words-inspector.svelte)",
|
|
|
|
|
"Bash(rg --files src/uix/soma/components/words/engine/extensions)",
|
|
|
|
|
"Bash(xargs -I{} sh -c \"rg -n 'function slashInsertionCommand' {} && sed -n '/function slashInsertionCommand/,/^}/p' {}\")",
|
|
|
|
|
"Bash(rg -n \"insertIntoActiveColumn\" src/uix/eidos/components/words/*.svelte)",
|
|
|
|
|
"Bash(Get-ChildItem -Path \"G:\\\\dev\\\\svelte\\\\vicen\\\\src\\\\uix\\\\\" -Directory | Select-Object -ExpandProperty Name)",
|
|
|
|
|
"WebFetch(domain:www.chakra-ui.com)",
|
|
|
|
|
"Bash(echo \"---EXIT: $?---\")",
|
|
|
|
|
"PowerShell($ProgressPreference='SilentlyContinue'; \\(Get-Command gh -ErrorAction SilentlyContinue\\).Source; gh --version 2>&1 | Select-Object -First 1)",
|
|
|
|
|
"WebFetch(domain:api.github.com)",
|
|
|
|
|
"WebFetch(domain:cdn.jsdelivr.net)",
|
|
|
|
|
"Bash(tee /tmp/eidos-check.log)",
|
|
|
|
|
"Bash(grep -iE \"ERROR \" /tmp/eidos-check.log | grep -iv \"WARNING\" | head; echo \"=== any of my new files mentioned at all? ===\"; grep -icE \"lib.motion|presets.css|runtime\\\\.ts\" /tmp/eidos-check.log)",
|
|
|
|
|
"Bash(Select-Object Name)",
|
|
|
|
|
"Bash(for dir *)",
|
|
|
|
|
"WebFetch(domain:m3.material.io)",
|
|
|
|
|
"WebFetch(domain:carbondesignsystem.com)",
|
|
|
|
|
"WebFetch(domain:motion.dev)",
|
|
|
|
|
"WebFetch(domain:spectrum.adobe.com)",
|
|
|
|
|
"WebFetch(domain:fluent2.microsoft.design)",
|
|
|
|
|
"WebFetch(domain:www.hackingwithswift.com)",
|
|
|
|
|
"WebFetch(domain:www.useyourloaf.com)",
|
|
|
|
|
"WebFetch(domain:swiftwithmajid.com)",
|
|
|
|
|
"WebFetch(domain:design.google)",
|
|
|
|
|
"WebFetch(domain:swiftui-lab.com)",
|
|
|
|
|
"WebFetch(domain:nerdyak.tech)",
|
|
|
|
|
"Bash(tee /tmp/f1-check.log)",
|
|
|
|
|
"Bash(tee /tmp/f1-check2.log)",
|
fix: address architectural audit findings + sync ecosystem docs
Audit: src/audit-opus-4-6-26.md. All non-words findings remediated.
Code:
- E1: navigation-menu indicator data-state visible -> open (render bug; the
active underline was permanently invisible). Clears the only invalid lint selector.
- SO1 + E2: raw `new ResizeObserver` -> ActiveDom.observeResize in carousel-provider
and the canvas-text useContainerWidth hook (+ s-text / s-text-virtual-list pass
eidos.dom). iframe/popup-safe, lifecycle-tracked.
- A1: defineUixServices now registers `motion`, so attach-mode app.motion is real
and the active-uix fallback becomes the true edge case (test guard updated).
- A2/A4: contracts.ts pins `motion` + `announce` in ActiveUixServiceContract +
publicSurface; dispose() comment corrected.
- SO2: carousel drops the hardcoded `transform 300ms ease-out` (the recipe already
handles it via [data-dragging]); also fixed the recipe's undefined `--duration-base`
token -> `--duration-slow` (it was masked by the inline).
- S1: HapticChannel reduced-motion via an injected ActiveDom port (mirrors
SoundChannelDom) instead of global matchMedia.
- T1: 10 sites repointed `$libs/dom` -> `$adom` (sema x5 + its tests x3, active-uix
value import, arts/prefs).
- M2 / S2 / S3: dead code removed (button `states:['idle','loading']`,
SemaRuntimeChannelId, SEMA_VALENCED_FAMILY_LIST).
Docs:
- Motion-as-service reflected across the ecosystem: CLAUDE.md (aliases + arch +
service note), arts/README, active_architecture, soma SOMA_ARCHITECTURE, eidos
README, eidos-motion.md.
- X1: CLAUDE.md "5 canonical channels" (false) -> the single canonical narrative
(8 book channels; Sema runs 2 + visual meta-channel, Eidos materializes 5).
- X2/X3/X4: sema/README (8 families + intentRequirement/intentGuidance split),
types.ts JSDoc (SEMA_INTENT_POLICY -> SEMA_FAMILY_POLICY), engine.ts cascade 6->5,
alias table ($frontend out, $lang->$langs, +$clipboard).
- E4: codex_audit.md HISTORICO banner.
Deferred: SU2 (test-only layering, not a build violation); Words M1/T5/E3 (WIP).
Verify: npm run check -> 1 pre-existing error (grafito), 0 new; sema 152/152,
contracts 31/32 (1 pre-existing words), carousel 4/4, motion 22/22.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4 months ago
|
|
|
"Bash(tee /tmp/f2-check.log)",
|
|
|
|
|
"Read(//g/g/dev/svelte/vicen/src/uix/**)",
|
|
|
|
|
"Read(//g/g/dev/svelte/vicen/src/uix/sema/**)",
|
|
|
|
|
"Bash(python -c \"import json,sys; d=json.load\\(sys.stdin\\); print\\('\\\\n'.join\\(f'{k} = {v}' for k,v in d['scripts'].items\\(\\)\\)\\)\")",
|
|
|
|
|
"Bash(echo \"dev started pid $!\")",
|
|
|
|
|
"Bash(echo \"vocabulary exit: $?\")",
|
|
|
|
|
"Bash(echo \"EXIT: $?\")",
|
|
|
|
|
"Bash(kill 319)",
|
|
|
|
|
"Bash(which pandoc *)",
|
|
|
|
|
"Bash(which python *)",
|
|
|
|
|
"Bash(which python3 *)",
|
|
|
|
|
"Bash(jobs)",
|
|
|
|
|
"Bash([ -f \"build/temas/$d/index.html\" ])",
|
|
|
|
|
"Bash(awk '/^\\\\twords: \\\\{/,/^\\\\t\\\\},?$/' src/uix/eidos/lib/recipes/base.ts)",
|
|
|
|
|
"Bash(awk -F: '{sum += $NF} END {print \"Total it\\(\\) blocks:\", sum}')",
|
|
|
|
|
"Bash(awk -F: '{s+=$NF} END {print \"Total it\\(\\) test cases: \" s}')",
|
|
|
|
|
"Bash(awk -F: '{s+=$NF} END {print \"Total describe\\(\\) blocks: \" s}')",
|
|
|
|
|
"Read(//tmp/**)",
|
|
|
|
|
"Bash(sleep 3; echo \"=== b0gpqhsd4 ===\"; cat \"C:/Users/dev/AppData/Local/Temp/claude/G--dev-svelte-vicen/a680a4dc-e38b-4376-a8bc-ef77e61a50c1/tasks/b0gpqhsd4.output\" 2>/dev/null; echo \"=== /tmp ===\"; cat /tmp/pcheck2.txt 2>/dev/null | head)",
|
|
|
|
|
"Bash(cat \"C:/Users/dev/AppData/Local/Temp/claude/G--dev-svelte-vicen/a680a4dc-e38b-4376-a8bc-ef77e61a50c1/tasks/bmftg72nm.output\" 2>/dev/null; echo \"---tmp---\"; cat /tmp/pcheck4.txt 2>/dev/null | head)",
|
|
|
|
|
"Read(//dev/**)",
|
|
|
|
|
"Bash(:)",
|
|
|
|
|
"Bash(Get-ChildItem -Path \"G:\\\\dev\\\\svelte\\\\vicen\\\\src\\\\uix\\\\soma\\\\components\\\\words\" -Recurse)",
|
palabras: menú de inserción (tipos+iconos), columnas visibles y "+" por columna
Insertar bloque -> rejilla de tipos:
- palabras-block-types.ts (nuevo): lista curada de 10 (Párrafo/Encabezado/Imagen/
Lista/Separador/Cita/Código/Callout/Columnas/Tabla; headings y listas
colapsados; imagen incluida) con icono explícito por tipo (los definió el
usuario). Sale del registro del motor por id, sin duplicar create().
blockToInsert rellena placeholder en heading/list; imagen via pickImageFile.
- Iconos en el menú de acciones (Settings2/LayersPlus/ArrowBigUp/ArrowBigDown/
Trash2).
- Menú PORTALIZADO (DropdownMenu.Portal): el slot del grip tiene transform, que
lo hace bloque contenedor de los position:fixed -> la colisión de floating-ui
se desajustaba y el submenú se volteaba a la izquierda. Portalizar lo saca del
slot transformado.
Columnas (palabras.css, espejo de Words words.css):
- Un bloque de columnas vacío se renderizaba con ALTURA 0 (palabras no carga
words.css), y de ahí salían 4 bugs de la MISMA raíz: invisible, grip "se
vuelve loco" (las bandas Voronoi-on-Y de blockAtY se degeneran con altura 0),
no se podía seleccionar (0px sin área clicable) y el insert caía off-by-one.
Fix: flex-row + min-block-size 3em + borde dashed por columna (Words ya lo
documentaba: "without this, an empty columns block collapses to 0 height").
"+" por columna (palabras-column-inserter.svelte nuevo):
- Overlay "+" sobre cada columna VACÍA -> la misma rejilla (sin Columnas) ->
insertBlockInColumn(columnsIdx, colIdx, block) (comando del motor, como el
inspector de Words). Posicionado frame-relative, menú portalizado,
data-words-external-tool. El "+" desaparece al llenarse la columna.
Deuda anotada en continuar-palabras.md (decisión del usuario: al cerrar el
componente): labels -> langs, morfo de palabras. Pendiente abierto: grip "fuera
de la card" (el offsetParent del slot cae al marco exterior).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4 months ago
|
|
|
"PowerShell(\"---\")",
|
|
|
|
|
"mcp__Claude_in_Chrome__switch_browser",
|
|
|
|
|
"Bash(sort -u -t: -k2)",
|
|
|
|
|
"PowerShell(try { $r = Invoke-WebRequest -Uri \"http://localhost:5173/\" -UseBasicParsing -TimeoutSec 5; \"DEV SERVER UP: $\\($r.StatusCode\\)\" } catch { \"DEV SERVER DOWN: $\\($_.Exception.Message\\)\" })",
|
|
|
|
|
"WebFetch(domain:docs.slatejs.org)",
|
|
|
|
|
"WebFetch(domain:www.blocknotejs.org)",
|
|
|
|
|
"mcp__Claude_in_Chrome__resize_window",
|
|
|
|
|
"Bash(rm -f \"G:/dev/svelte/vicen/src/uix/soma/components/words/engine/operations/_adv_nested_cols.test.ts\" \"/tmp/nested-cols.test.ts\" && echo \"cleaned\")",
|
|
|
|
|
"Bash(awk 'NR>=247 && NR<=254' src/uix/eidos/components/palabras/palabras-handle.svelte)",
|
|
|
|
|
"Bash(python -)",
|
|
|
|
|
"Bash(awk '/data-palabras-panel-card \\\\{/,/^\\\\}/' src/uix/eidos/components/palabras/palabras.css)",
|
|
|
|
|
"Bash(awk '/data-palabras-panel-foot \\\\{/,/^\\\\}/' src/uix/eidos/components/palabras/palabras.css)",
|
|
|
|
|
"Bash(awk 'NR>=300 && NR<=345' src/uix/eidos/components/palabras/palabras.css)",
|
feat(uix): cropper, image-picker, image-adjustments + reusable zoom-pan layer
Three new components across all 4 layers (morfo/soma/sema/eidos) + demos + langs + READMEs:
- ImageAdjustments — reusable image-filter sliders subcomponent.
- ImagePicker — composes file-upload + image + image-adjustments (fill modes, rotation).
- Cropper — Ark image-cropper anatomy: normalized 0-1 crop rect, rect + round shapes,
8 resize handles, fixedSize move-only (avatar), canvas Blob output (5-arg drawImage
for SVG safety), wheel/pan zoom, two-zone gesture (selection moves the area, the
background pans to set focus; img draggable=false guards native DnD per zag).
New reusable soma/layers/zoom-pan: cursor-centered zoom, clamped pan, transform +
viewport-frac-to-content-frac mapping. Image-viewer / diagram-pan / map can reuse it.
sema: add 'zoom' verb to the handle family (direct manipulation, documented extension).
slider: track visible at zero (gray, not white), thumb lifts on drag.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4 months ago
|
|
|
"Bash(awk '/\\\\[data-palabras-panel-card\\\\] \\\\{/{f=1} f{print NR\": \"$0} /^\\\\}/{if\\(f\\){f=0}}' src/uix/eidos/components/palabras/palabras.css)",
|
refactor(soma): de-dup attrs in 16 providers via renderProps (batch 1)
Workflow-driven rollout of the morfo↔soma attr de-duplication. 16 providers
(textarea, pagination, pin-input, slider, tag-group, scroll-area, form,
search-field, drag-drop, stepper, tags-input, color-field, password-field,
link-preview, menubar, navigation-menu) now source role/aria/data from the
morfo via renderProps() instead of re-declaring them. 3 morfos gained
`ariaBoolean` on propRef-valued aria booleans (color-field, form, password-field).
Audit: 559 → 468 hits (−91). Provider tests updated to the renderProps shape:
ARIA booleans assert the string "true"/"false" (the correct ARIA shape, was a JS
boolean), and the few DOM-read assertions for parts that moved off `syncAttrs`
now read the props object (pagination). Parts still on `syncAttrs:true` keep
their imperative DOM application + tests. Each component's residue (legit value
overrides the morfo can't express) is pinned in the audit guard.
Verified centrally: 112 tests green, check clean, pagination spot-checked in the
browser (type/role/aria-label/data render correctly via props-spread).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4 months ago
|
|
|
"mcp__Claude_in_Chrome__get_page_text",
|
|
|
|
|
"Bash(Select-Object -Last 30)",
|
|
|
|
|
"Bash(awk 'NR>=1960 && NR<=2009 && /^\\\\t[a-z][a-z-]*: \\\\{/ {name=$0} END{print name}' src/uix/eidos/lib/recipes/base.ts)",
|
|
|
|
|
"Bash(awk 'NR>=1980 && NR<=2009 && /^\\\\t[a-zA-Z][a-zA-Z-]*: \\\\{/ {print NR\": \"$0}' src/uix/eidos/lib/recipes/base.ts)",
|
|
|
|
|
"Bash(awk -F: '$1>=1700 && $1<=2100 {print}')",
|
|
|
|
|
"Bash(awk -F: '$1>=1850 && $1<=2009')",
|
|
|
|
|
"Bash(awk 'NR>=300 && NR<=340 && /: \\\\{/ {k=$0} /iconSize: .xxl./ {print NR\": owned by → \"k}' src/uix/eidos/lib/primitives/static.ts)",
|
|
|
|
|
"Bash(awk 'NR>=315 && NR<=335 && /: \\\\{/ {k=$0} /iconSize: .\\(xl|xxl\\)./ {print NR\": \"k\" → \"$0}' src/uix/eidos/lib/primitives/static.ts)",
|
|
|
|
|
"Bash(rg 'from '\\\\''\\\\$lib'\\\\''|from \"\\\\$lib\"|from '\\\\''\\\\$lib/' src/ -n --glob !**/node_modules/**)",
|
|
|
|
|
"Bash(awk -F: '$1 < 427')",
|
|
|
|
|
"Bash(awk -F: '$1 < 848')",
|
|
|
|
|
"Bash(rg -n --no-messages \"data-radio-cards-icon|<Icon|radio-cards.*Icon\" web/routes)",
|
|
|
|
|
"Bash(rg -ln --no-messages \"RadioCards\" web/routes)",
|
|
|
|
|
"Bash(rg -n --no-messages \"Icon|svg|<RadioCards.Icon\" web/routes/uix/components/radio-cards/+page.svelte)",
|
|
|
|
|
"Bash(rg -ln --no-messages \"color-surface-subtle|leading-body|font-family-body|segment-focus-shadow\" src/uix/eidos --glob \"*.test.ts\")",
|
|
|
|
|
"Bash(echo \"exit: $?\")",
|
|
|
|
|
"Bash(rg -ln --no-messages \"consumed.*defined|undefined.*token|orphan\" src/uix/eidos --glob \"*.test.ts\")",
|
|
|
|
|
"Bash(echo \"exit-grep=$?\")",
|
|
|
|
|
"Bash(awk 'NR>=1100 && NR<=1160 && /^\\\\t[a-z-]+:|recipe|component:|name:/' src/uix/eidos/lib/recipes/base.ts)",
|
|
|
|
|
"Bash(awk -F/ '{print $1\"/\"$2}')",
|
|
|
|
|
"Bash(awk -F/ '{ if \\($1==\"src\"\\) print \"src/\"$2\"/\"$3; else print $1 }')",
|
|
|
|
|
"Bash(grep -nE 'validateMorfo|export \\(async \\)?function loadMorfos|testTimeout|import' src/uix/eidos/../../../scripts/soma-attr-audit.ts 2>/dev/null | head; echo '--- direct run audit loadMorfos timing ---'; timeout 60 node --import tsx/esm -e \"import\\('./scripts/soma-attr-audit.ts'\\).then\\(async m=>{const t=Date.now\\(\\);const ms=await m.loadMorfos\\(\\);console.log\\('loaded',ms.length,'in',Date.now\\(\\)-t,'ms'\\)}\\).catch\\(e=>console.log\\('ERR',e.message\\)\\)\" 2>&1 | tail -5)",
|
|
|
|
|
"PowerShell(npm run check 2>&1)",
|
|
|
|
|
"PowerShell(1..3 | ForEach-Object { Write-Output \"=== Run $_ ===\"; npx vitest run src/uix/soma/soma-attr-audit.test.ts 2>&1 | Select-String -Pattern \"passed|failed|timed out|Duration\" })",
|
|
|
|
|
"Bash(cd /g/dev/svelte/vicen)",
|
|
|
|
|
"Bash(ls src/libs/timer/)",
|
|
|
|
|
"Bash(ls src/arts/timer/*.md)",
|
|
|
|
|
"Bash(find src/arts/timer src/libs/timer -name '*.test.ts')",
|
|
|
|
|
"Bash(npx rg *)",
|
|
|
|
|
"PowerShell(npx prettier --write \"src/uix/eidos/MOTION_SERVICE_RFC.md\")",
|
|
|
|
|
"PowerShell(npx prettier --check \"src/uix/eidos/MOTION_SERVICE_RFC.md\")",
|
|
|
|
|
"Bash(node_modules/.bin/prettier --write src/arts/sium)",
|
|
|
|
|
"Bash(node_modules/.bin/prettier --check src/arts/sium)",
|
|
|
|
|
"Bash(rg -ln 'from '\\\\''\\\\$uix/eidos'\\\\''' web/routes)",
|
|
|
|
|
"Bash(rg -oN \"var\\\\\\(--\\(space|radius|color|font-size|line-height|shadow|duration\\)-[a-z0-9-]+\\\\\\)\" src/uix/eidos/components/date-picker/*.css src/uix/eidos/components/button/*.css)",
|
|
|
|
|
"Bash(rg -oN \"var\\\\\\(--\\(space|radius|font-size|line-height|shadow|color-neutral|color-surface|color-text|focus|duration\\)-[a-z0-9-]+\\\\\\)\" src/uix/eidos/components/**/*.css)",
|
|
|
|
|
"Bash(ls web/routes/uix/components/demos/)",
|
|
|
|
|
"Bash(cat \"C:/Users/dev/AppData/Local/Temp/claude/G--dev-svelte-vicen/80e4dfad-c7bf-4627-b0ea-9337414354c7/tasks/b8u5eude9.output\")",
|
|
|
|
|
"Bash(echo \"exit morfo:check: $?\")",
|
|
|
|
|
"Bash(rg -i \"chronos|components\\\\\\\\\\\\\\\\demos\")",
|
|
|
|
|
"Bash(cd \"G:/dev/svelte/vicen\" && npm run morfo:check > /tmp/mc.txt 2>&1; ec=$?; echo \"morfo:check EXIT=$ec\"; echo \"=== linea qr-code ===\" && grep -iE \"qr-code|invariant|fail|FAIL|✗\" /tmp/mc.txt | head)",
|
|
|
|
|
"Bash(rg -rln \"RecipeTokens|defineRecipe|recipe\" src/uix/eidos/components/calendar/)",
|
|
|
|
|
"Bash(rg -i \"chronos|recipes\\\\\\\\\\\\\\\\base|sema\\\\\\\\\\\\\\\\components\\\\\\\\\\\\\\\\index\")",
|
|
|
|
|
"Bash(node_modules/.bin/prettier --write src/arts/connection/index.ts src/arts/http/consts.ts src/arts/http/diagnostics.ts src/arts/color/index.ts)",
|
|
|
|
|
"Bash(node_modules/.bin/prettier --check src/arts/connection src/arts/http src/arts/color)",
|
|
|
|
|
"Bash(node_modules/.bin/prettier --check src/arts/connection/index.ts src/arts/http/consts.ts src/arts/http/diagnostics.ts src/arts/color/index.ts)",
|
|
|
|
|
"Bash(node_modules/.bin/prettier --write docs/process/arts-audit-2026-06.md docs/process/README.md)",
|
|
|
|
|
"Bash(node_modules/.bin/prettier --check src/arts/connection/index.ts src/arts/http/consts.ts src/arts/http/diagnostics.ts src/arts/color/index.ts docs/process/arts-audit-2026-06.md docs/process/README.md)",
|
|
|
|
|
"Bash(rg -ln 'from '\\\\''\\\\$uix/eidos/components/button'\\\\''' src/uix/eidos/components/)",
|
|
|
|
|
"Bash(rg -n \"Button|child\" src/uix/eidos/components/date-picker/*.svelte)",
|
|
|
|
|
"Bash(rg -n \"Soma|getActiveUix|ActiveEidos\" src/uix/eidos/components/icon/*.svelte)",
|
|
|
|
|
"Bash(node_modules/.bin/prettier --write src/arts/connection/types.ts src/arts/connection/engine-connections.ts)",
|
|
|
|
|
"Bash(node_modules/.bin/prettier --check src/arts/connection/types.ts src/arts/connection/engine-connections.ts)",
|
|
|
|
|
"Bash(rg -rn \"toCalendarDateTime|export .*\\\\bTime\\\\b|toCalendarDate\" src/libs/days/)",
|
|
|
|
|
"Bash(sed -n '1,50p' src/uix/eidos/components/drag-drop/index.ts)",
|
|
|
|
|
"Bash(sed -n '1,40p' src/uix/soma/components/drag-drop/exports.ts)",
|
|
|
|
|
"Bash(rg -i \"chronos-view|chronos\\\\\\\\\\\\\\\\chronos|components.chronos|components.demos|drag-drop\")",
|
|
|
|
|
"Bash(echo \"=== ad-hoc opacity \\(non 0/1\\) with their selector context ===\")",
|
|
|
|
|
"Bash(awk ' *)"
|
morfo: cross-layer contract + 14 new WAI-ARIA components + Dialog wired
Morfo (src/uix/morfo/): machine-readable contract of a component's public
DOM surface, shared between soma/sema/eidos. Shape v5 consolidated across
three independent AI reviews (Gemini, Grok, ChatGPT) plus Sema alignment.
Types, sium-based validator with cross-field invariants, dialog.ts as the
first canonical morfo with data-last-action for Sema-causal exits, 7 passing
unit tests.
createAttrs(morfo) and registerContract(morfo) now consume a Morfo — legacy
inline signature removed. Dialog provider refactored to derive parts +
data contract from dialogMorfo. The other 65 soma components need porting
(svelte-check lists them) — tracked work.
Tooling:
scripts/smoke-check.mjs — Playwright smoke over 65 soma demo routes
scripts/morfo-check.ts — validates emitted DOM vs morfo
scripts/morfo-vocabulary-check.ts — canonical vocabulary consistency
npm run smoke / morfo:check / morfo:vocabulary
WAI-ARIA APG components added (100% APG coverage now):
Announce, Avatar, Clipboard, DragDrop, Feed, GridList, Meter, Progress,
SearchField, TagGroup, TreeGrid + Table.RowDetail/Trigger (detail panel
pattern; hierarchical Table rows deprecated — use TreeGrid instead).
air: Link, Banner.
Sema prep:
src/uix/sema/sema_pre.md documents the semantic layer's DOM requirements.
Morfo already provides everything Sema needs (data-last-action patterns,
transition markers, enumerable state values, cross-component consistency).
Sema implementation deferred.
COMPONENT_GUIDE updated: items 37-39 (translation namespace grep, DOM
topology vs .require() audit, npm run smoke is part of done) + A34 rule
with incident log. WAI-ARIA pattern listed as soma membership criterion.
Pagination translation bug fixed (soma.pagination.page -> idlangref
PAGINATION_LANGS.PAGE). Table demo namespace fix (soma.table.*
-> components.table.*). Avatar demo now offline-safe (SVG data URL).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6 months ago
|
|
|
],
|
|
|
|
|
"additionalDirectories": [
|
|
|
|
|
"\\tmp"
|
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
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
}
|