@oxy.so/bloom 7.1.4 → 7.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/character-runtime/README.md +19 -114
- package/assets/character-runtime/legacy-engine.mjs +54 -406
- package/assets/character-runtime/legacy-geometry.mjs +85 -242
- package/assets/character-runtime/legacy-worker.mjs +23 -82
- package/assets/character-runtime/managed-avatar.mjs +18 -12
- package/assets/character-runtime/render-budget.mjs +11 -6
- package/assets/character-runtime/runtime.mjs +295 -744
- package/docs/adoption-matrix.mdx +12 -11
- package/docs/agent-avatar.mdx +8 -45
- package/docs/agent-creator.mdx +3 -13
- package/docs/app-shell.mdx +26 -2
- package/docs/appearance.mdx +16 -1
- package/docs/content-panel.mdx +4 -0
- package/docs/mail-thread.mdx +8 -0
- package/docs/page-footer.mdx +60 -0
- package/docs/sidebar.mdx +1 -1
- package/lib/commonjs/agent-avatar/AgentAvatar.js +1 -1
- package/lib/commonjs/agent-avatar/AgentAvatar.js.map +1 -1
- package/lib/commonjs/agent-avatar/CharacterAvatar.js +1 -2
- package/lib/commonjs/agent-avatar/CharacterAvatar.js.map +1 -1
- package/lib/commonjs/agent-avatar/config-character.js +0 -4
- package/lib/commonjs/agent-avatar/config-character.js.map +1 -1
- package/lib/commonjs/agent-avatar/legacy-recipe.js +6 -19
- package/lib/commonjs/agent-avatar/legacy-recipe.js.map +1 -1
- package/lib/commonjs/agent-creator/AgentCreatorBase.js +107 -67
- package/lib/commonjs/agent-creator/AgentCreatorBase.js.map +1 -1
- package/lib/commonjs/agent-creator/CharacterControls.js +5 -23
- package/lib/commonjs/agent-creator/CharacterControls.js.map +1 -1
- package/lib/commonjs/agent-creator/EmotionPicker.js +1 -8
- package/lib/commonjs/agent-creator/EmotionPicker.js.map +1 -1
- package/lib/commonjs/agent-creator/ShapeSilhouette.js +1 -8
- package/lib/commonjs/agent-creator/ShapeSilhouette.js.map +1 -1
- package/lib/commonjs/agent-creator/constants.js +17 -16
- package/lib/commonjs/agent-creator/constants.js.map +1 -1
- package/lib/commonjs/agent-creator/messages.js +1 -1
- package/lib/commonjs/agent-creator/messages.js.map +1 -1
- package/lib/commonjs/app-shell/AppShell.js +3 -2
- package/lib/commonjs/app-shell/AppShell.js.map +1 -1
- package/lib/commonjs/app-shell/AppShellBars.js +8 -5
- package/lib/commonjs/app-shell/AppShellBars.js.map +1 -1
- package/lib/commonjs/app-shell/AppShellEngine.js +81 -36
- package/lib/commonjs/app-shell/AppShellEngine.js.map +1 -1
- package/lib/commonjs/appearance/BloomScope.js +8 -3
- package/lib/commonjs/appearance/BloomScope.js.map +1 -1
- package/lib/commonjs/appearance/context.js.map +1 -1
- package/lib/commonjs/content-panel/ContentPanel.js +34 -23
- package/lib/commonjs/content-panel/ContentPanel.js.map +1 -1
- package/lib/commonjs/content-panel/ContentPanel.web.js +39 -17
- package/lib/commonjs/content-panel/ContentPanel.web.js.map +1 -1
- package/lib/commonjs/design-tokens/shapes.js +2 -2
- package/lib/commonjs/design-tokens/shapes.js.map +1 -1
- package/lib/commonjs/design-tokens/tokens.json +2 -2
- package/lib/commonjs/index.js +939 -927
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.web.js +939 -927
- package/lib/commonjs/index.web.js.map +1 -1
- package/lib/commonjs/locale/translations/ar.js +1 -1
- package/lib/commonjs/locale/translations/ar.js.map +1 -1
- package/lib/commonjs/locale/translations/bn.js +1 -1
- package/lib/commonjs/locale/translations/bn.js.map +1 -1
- package/lib/commonjs/locale/translations/ca.js +1 -1
- package/lib/commonjs/locale/translations/ca.js.map +1 -1
- package/lib/commonjs/locale/translations/de.js +1 -1
- package/lib/commonjs/locale/translations/de.js.map +1 -1
- package/lib/commonjs/locale/translations/es.js +1 -1
- package/lib/commonjs/locale/translations/es.js.map +1 -1
- package/lib/commonjs/locale/translations/fr.js +1 -1
- package/lib/commonjs/locale/translations/fr.js.map +1 -1
- package/lib/commonjs/locale/translations/hi.js +1 -1
- package/lib/commonjs/locale/translations/hi.js.map +1 -1
- package/lib/commonjs/locale/translations/id.js +1 -1
- package/lib/commonjs/locale/translations/id.js.map +1 -1
- package/lib/commonjs/locale/translations/it.js +1 -1
- package/lib/commonjs/locale/translations/it.js.map +1 -1
- package/lib/commonjs/locale/translations/ja.js +1 -1
- package/lib/commonjs/locale/translations/ja.js.map +1 -1
- package/lib/commonjs/locale/translations/pt.js +1 -1
- package/lib/commonjs/locale/translations/pt.js.map +1 -1
- package/lib/commonjs/locale/translations/ru.js +1 -1
- package/lib/commonjs/locale/translations/ru.js.map +1 -1
- package/lib/commonjs/locale/translations/tr.js +1 -1
- package/lib/commonjs/locale/translations/tr.js.map +1 -1
- package/lib/commonjs/locale/translations/zh.js +1 -1
- package/lib/commonjs/locale/translations/zh.js.map +1 -1
- package/lib/commonjs/mail-thread/MailMessage.js +8 -14
- package/lib/commonjs/mail-thread/MailMessage.js.map +1 -1
- package/lib/commonjs/mail-thread/MailThread.js +6 -2
- package/lib/commonjs/mail-thread/MailThread.js.map +1 -1
- package/lib/commonjs/mail-thread/shared.js +2 -1
- package/lib/commonjs/mail-thread/shared.js.map +1 -1
- package/lib/commonjs/page-footer/PageFooter.js +137 -0
- package/lib/commonjs/page-footer/PageFooter.js.map +1 -0
- package/lib/commonjs/page-footer/PageFooterProvider.js +22 -0
- package/lib/commonjs/page-footer/PageFooterProvider.js.map +1 -0
- package/lib/commonjs/page-footer/context.js +11 -0
- package/lib/commonjs/page-footer/context.js.map +1 -0
- package/lib/commonjs/page-footer/index.js +27 -0
- package/lib/commonjs/page-footer/index.js.map +1 -0
- package/lib/commonjs/page-footer/types.js +6 -0
- package/lib/commonjs/page-footer/types.js.map +1 -0
- package/lib/commonjs/page-footer/use-page-footer-inset.js +19 -0
- package/lib/commonjs/page-footer/use-page-footer-inset.js.map +1 -0
- package/lib/commonjs/sidebar/Sidebar.js +6 -5
- package/lib/commonjs/sidebar/Sidebar.js.map +1 -1
- package/lib/commonjs/styles/panel-chrome.js +15 -1
- package/lib/commonjs/styles/panel-chrome.js.map +1 -1
- package/lib/module/agent-avatar/AgentAvatar.js +1 -1
- package/lib/module/agent-avatar/AgentAvatar.js.map +1 -1
- package/lib/module/agent-avatar/CharacterAvatar.js +1 -2
- package/lib/module/agent-avatar/CharacterAvatar.js.map +1 -1
- package/lib/module/agent-avatar/config-character.js +0 -4
- package/lib/module/agent-avatar/config-character.js.map +1 -1
- package/lib/module/agent-avatar/legacy-recipe.js +6 -19
- package/lib/module/agent-avatar/legacy-recipe.js.map +1 -1
- package/lib/module/agent-creator/AgentCreatorBase.js +109 -69
- package/lib/module/agent-creator/AgentCreatorBase.js.map +1 -1
- package/lib/module/agent-creator/CharacterControls.js +6 -24
- package/lib/module/agent-creator/CharacterControls.js.map +1 -1
- package/lib/module/agent-creator/EmotionPicker.js +1 -8
- package/lib/module/agent-creator/EmotionPicker.js.map +1 -1
- package/lib/module/agent-creator/ShapeSilhouette.js +1 -8
- package/lib/module/agent-creator/ShapeSilhouette.js.map +1 -1
- package/lib/module/agent-creator/constants.js +16 -8
- package/lib/module/agent-creator/constants.js.map +1 -1
- package/lib/module/agent-creator/messages.js +1 -1
- package/lib/module/agent-creator/messages.js.map +1 -1
- package/lib/module/app-shell/AppShell.js +3 -2
- package/lib/module/app-shell/AppShell.js.map +1 -1
- package/lib/module/app-shell/AppShellBars.js +8 -5
- package/lib/module/app-shell/AppShellBars.js.map +1 -1
- package/lib/module/app-shell/AppShellEngine.js +81 -36
- package/lib/module/app-shell/AppShellEngine.js.map +1 -1
- package/lib/module/appearance/BloomScope.js +8 -3
- package/lib/module/appearance/BloomScope.js.map +1 -1
- package/lib/module/appearance/context.js.map +1 -1
- package/lib/module/content-panel/ContentPanel.js +35 -24
- package/lib/module/content-panel/ContentPanel.js.map +1 -1
- package/lib/module/content-panel/ContentPanel.web.js +41 -19
- package/lib/module/content-panel/ContentPanel.web.js.map +1 -1
- package/lib/module/design-tokens/shapes.js +2 -2
- package/lib/module/design-tokens/shapes.js.map +1 -1
- package/lib/module/design-tokens/tokens.json +2 -2
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +1 -0
- package/lib/module/index.web.js.map +1 -1
- package/lib/module/locale/translations/ar.js +1 -1
- package/lib/module/locale/translations/ar.js.map +1 -1
- package/lib/module/locale/translations/bn.js +1 -1
- package/lib/module/locale/translations/bn.js.map +1 -1
- package/lib/module/locale/translations/ca.js +1 -1
- package/lib/module/locale/translations/ca.js.map +1 -1
- package/lib/module/locale/translations/de.js +1 -1
- package/lib/module/locale/translations/de.js.map +1 -1
- package/lib/module/locale/translations/es.js +1 -1
- package/lib/module/locale/translations/es.js.map +1 -1
- package/lib/module/locale/translations/fr.js +1 -1
- package/lib/module/locale/translations/fr.js.map +1 -1
- package/lib/module/locale/translations/hi.js +1 -1
- package/lib/module/locale/translations/hi.js.map +1 -1
- package/lib/module/locale/translations/id.js +1 -1
- package/lib/module/locale/translations/id.js.map +1 -1
- package/lib/module/locale/translations/it.js +1 -1
- package/lib/module/locale/translations/it.js.map +1 -1
- package/lib/module/locale/translations/ja.js +1 -1
- package/lib/module/locale/translations/ja.js.map +1 -1
- package/lib/module/locale/translations/pt.js +1 -1
- package/lib/module/locale/translations/pt.js.map +1 -1
- package/lib/module/locale/translations/ru.js +1 -1
- package/lib/module/locale/translations/ru.js.map +1 -1
- package/lib/module/locale/translations/tr.js +1 -1
- package/lib/module/locale/translations/tr.js.map +1 -1
- package/lib/module/locale/translations/zh.js +1 -1
- package/lib/module/locale/translations/zh.js.map +1 -1
- package/lib/module/mail-thread/MailMessage.js +8 -14
- package/lib/module/mail-thread/MailMessage.js.map +1 -1
- package/lib/module/mail-thread/MailThread.js +6 -2
- package/lib/module/mail-thread/MailThread.js.map +1 -1
- package/lib/module/mail-thread/shared.js +2 -1
- package/lib/module/mail-thread/shared.js.map +1 -1
- package/lib/module/page-footer/PageFooter.js +132 -0
- package/lib/module/page-footer/PageFooter.js.map +1 -0
- package/lib/module/page-footer/PageFooterProvider.js +18 -0
- package/lib/module/page-footer/PageFooterProvider.js.map +1 -0
- package/lib/module/page-footer/context.js +7 -0
- package/lib/module/page-footer/context.js.map +1 -0
- package/lib/module/page-footer/index.js +6 -0
- package/lib/module/page-footer/index.js.map +1 -0
- package/lib/module/page-footer/types.js +4 -0
- package/lib/module/page-footer/types.js.map +1 -0
- package/lib/module/page-footer/use-page-footer-inset.js +16 -0
- package/lib/module/page-footer/use-page-footer-inset.js.map +1 -0
- package/lib/module/sidebar/Sidebar.js +6 -5
- package/lib/module/sidebar/Sidebar.js.map +1 -1
- package/lib/module/styles/panel-chrome.js +14 -1
- package/lib/module/styles/panel-chrome.js.map +1 -1
- package/lib/typescript/commonjs/agent-avatar/CharacterAvatar.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-avatar/config-character.d.ts +0 -4
- package/lib/typescript/commonjs/agent-avatar/config-character.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-avatar/legacy-recipe.d.ts +10 -2
- package/lib/typescript/commonjs/agent-avatar/legacy-recipe.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-creator/AgentCreatorBase.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-creator/CharacterControls.d.ts +1 -2
- package/lib/typescript/commonjs/agent-creator/CharacterControls.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-creator/EmotionPicker.d.ts +0 -1
- package/lib/typescript/commonjs/agent-creator/EmotionPicker.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-creator/ShapeSilhouette.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-creator/constants.d.ts +15 -7
- package/lib/typescript/commonjs/agent-creator/constants.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-creator/messages.d.ts.map +1 -1
- package/lib/typescript/commonjs/app-shell/AppShellBars.d.ts +4 -0
- package/lib/typescript/commonjs/app-shell/AppShellBars.d.ts.map +1 -1
- package/lib/typescript/commonjs/app-shell/AppShellEngine.d.ts.map +1 -1
- package/lib/typescript/commonjs/app-shell/types.d.ts +11 -3
- package/lib/typescript/commonjs/app-shell/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/appearance/BloomScope.d.ts +1 -1
- package/lib/typescript/commonjs/appearance/BloomScope.d.ts.map +1 -1
- package/lib/typescript/commonjs/appearance/context.d.ts +2 -2
- package/lib/typescript/commonjs/appearance/context.d.ts.map +1 -1
- package/lib/typescript/commonjs/appearance/types.d.ts +4 -1
- package/lib/typescript/commonjs/appearance/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/content-panel/ContentPanel.d.ts +3 -4
- package/lib/typescript/commonjs/content-panel/ContentPanel.d.ts.map +1 -1
- package/lib/typescript/commonjs/content-panel/ContentPanel.web.d.ts +1 -1
- package/lib/typescript/commonjs/content-panel/ContentPanel.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/content-panel/types.d.ts +2 -2
- package/lib/typescript/commonjs/design-tokens/shapes.d.ts +2 -2
- package/lib/typescript/commonjs/index.d.ts +1 -0
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.web.d.ts +1 -0
- package/lib/typescript/commonjs/index.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/mail-thread/MailMessage.d.ts.map +1 -1
- package/lib/typescript/commonjs/mail-thread/MailThread.d.ts +1 -1
- package/lib/typescript/commonjs/mail-thread/MailThread.d.ts.map +1 -1
- package/lib/typescript/commonjs/mail-thread/shared.d.ts +1 -1
- package/lib/typescript/commonjs/mail-thread/shared.d.ts.map +1 -1
- package/lib/typescript/commonjs/mail-thread/types.d.ts +2 -0
- package/lib/typescript/commonjs/mail-thread/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/page-footer/PageFooter.d.ts +7 -0
- package/lib/typescript/commonjs/page-footer/PageFooter.d.ts.map +1 -0
- package/lib/typescript/commonjs/page-footer/PageFooterProvider.d.ts +4 -0
- package/lib/typescript/commonjs/page-footer/PageFooterProvider.d.ts.map +1 -0
- package/lib/typescript/commonjs/page-footer/context.d.ts +3 -0
- package/lib/typescript/commonjs/page-footer/context.d.ts.map +1 -0
- package/lib/typescript/commonjs/page-footer/index.d.ts +5 -0
- package/lib/typescript/commonjs/page-footer/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/page-footer/types.d.ts +26 -0
- package/lib/typescript/commonjs/page-footer/types.d.ts.map +1 -0
- package/lib/typescript/commonjs/page-footer/use-page-footer-inset.d.ts +7 -0
- package/lib/typescript/commonjs/page-footer/use-page-footer-inset.d.ts.map +1 -0
- package/lib/typescript/commonjs/sidebar/Sidebar.d.ts.map +1 -1
- package/lib/typescript/commonjs/sidebar/types.d.ts +1 -1
- package/lib/typescript/commonjs/styles/panel-chrome.d.ts +5 -0
- package/lib/typescript/commonjs/styles/panel-chrome.d.ts.map +1 -1
- package/lib/typescript/module/agent-avatar/CharacterAvatar.d.ts.map +1 -1
- package/lib/typescript/module/agent-avatar/config-character.d.ts +0 -4
- package/lib/typescript/module/agent-avatar/config-character.d.ts.map +1 -1
- package/lib/typescript/module/agent-avatar/legacy-recipe.d.ts +10 -2
- package/lib/typescript/module/agent-avatar/legacy-recipe.d.ts.map +1 -1
- package/lib/typescript/module/agent-creator/AgentCreatorBase.d.ts.map +1 -1
- package/lib/typescript/module/agent-creator/CharacterControls.d.ts +1 -2
- package/lib/typescript/module/agent-creator/CharacterControls.d.ts.map +1 -1
- package/lib/typescript/module/agent-creator/EmotionPicker.d.ts +0 -1
- package/lib/typescript/module/agent-creator/EmotionPicker.d.ts.map +1 -1
- package/lib/typescript/module/agent-creator/ShapeSilhouette.d.ts.map +1 -1
- package/lib/typescript/module/agent-creator/constants.d.ts +15 -7
- package/lib/typescript/module/agent-creator/constants.d.ts.map +1 -1
- package/lib/typescript/module/agent-creator/messages.d.ts.map +1 -1
- package/lib/typescript/module/app-shell/AppShellBars.d.ts +4 -0
- package/lib/typescript/module/app-shell/AppShellBars.d.ts.map +1 -1
- package/lib/typescript/module/app-shell/AppShellEngine.d.ts.map +1 -1
- package/lib/typescript/module/app-shell/types.d.ts +11 -3
- package/lib/typescript/module/app-shell/types.d.ts.map +1 -1
- package/lib/typescript/module/appearance/BloomScope.d.ts +1 -1
- package/lib/typescript/module/appearance/BloomScope.d.ts.map +1 -1
- package/lib/typescript/module/appearance/context.d.ts +2 -2
- package/lib/typescript/module/appearance/context.d.ts.map +1 -1
- package/lib/typescript/module/appearance/types.d.ts +4 -1
- package/lib/typescript/module/appearance/types.d.ts.map +1 -1
- package/lib/typescript/module/content-panel/ContentPanel.d.ts +3 -4
- package/lib/typescript/module/content-panel/ContentPanel.d.ts.map +1 -1
- package/lib/typescript/module/content-panel/ContentPanel.web.d.ts +1 -1
- package/lib/typescript/module/content-panel/ContentPanel.web.d.ts.map +1 -1
- package/lib/typescript/module/content-panel/types.d.ts +2 -2
- package/lib/typescript/module/design-tokens/shapes.d.ts +2 -2
- package/lib/typescript/module/index.d.ts +1 -0
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/index.web.d.ts +1 -0
- package/lib/typescript/module/index.web.d.ts.map +1 -1
- package/lib/typescript/module/mail-thread/MailMessage.d.ts.map +1 -1
- package/lib/typescript/module/mail-thread/MailThread.d.ts +1 -1
- package/lib/typescript/module/mail-thread/MailThread.d.ts.map +1 -1
- package/lib/typescript/module/mail-thread/shared.d.ts +1 -1
- package/lib/typescript/module/mail-thread/shared.d.ts.map +1 -1
- package/lib/typescript/module/mail-thread/types.d.ts +2 -0
- package/lib/typescript/module/mail-thread/types.d.ts.map +1 -1
- package/lib/typescript/module/page-footer/PageFooter.d.ts +7 -0
- package/lib/typescript/module/page-footer/PageFooter.d.ts.map +1 -0
- package/lib/typescript/module/page-footer/PageFooterProvider.d.ts +4 -0
- package/lib/typescript/module/page-footer/PageFooterProvider.d.ts.map +1 -0
- package/lib/typescript/module/page-footer/context.d.ts +3 -0
- package/lib/typescript/module/page-footer/context.d.ts.map +1 -0
- package/lib/typescript/module/page-footer/index.d.ts +5 -0
- package/lib/typescript/module/page-footer/index.d.ts.map +1 -0
- package/lib/typescript/module/page-footer/types.d.ts +26 -0
- package/lib/typescript/module/page-footer/types.d.ts.map +1 -0
- package/lib/typescript/module/page-footer/use-page-footer-inset.d.ts +7 -0
- package/lib/typescript/module/page-footer/use-page-footer-inset.d.ts.map +1 -0
- package/lib/typescript/module/sidebar/Sidebar.d.ts.map +1 -1
- package/lib/typescript/module/sidebar/types.d.ts +1 -1
- package/lib/typescript/module/styles/panel-chrome.d.ts +5 -0
- package/lib/typescript/module/styles/panel-chrome.d.ts.map +1 -1
- package/package.json +18 -1
- package/src/__tests__/support/adoption-matrix.ts +683 -0
- package/src/__tests__/support/card-surface.ts +25 -0
- package/src/__tests__/support/collision-fixture-barrel.ts +20 -0
- package/src/__tests__/support/commerce-harness.tsx +97 -0
- package/src/__tests__/support/composite.ts +68 -0
- package/src/__tests__/support/constructed-style-sheets.ts +68 -0
- package/src/__tests__/support/messages-in.ts +10 -0
- package/src/__tests__/support/press-host.ts +30 -0
- package/src/__tests__/support/rendered-style.ts +99 -0
- package/src/__tests__/support/unread-hook-fixture.ts +33 -0
- package/src/__tests__/support/worklet-capture-fixture.tsx +28 -0
- package/src/agent-avatar/AgentAvatar.tsx +1 -1
- package/src/agent-avatar/CharacterAvatar.tsx +1 -4
- package/src/agent-avatar/__tests__/artwork-golden.json +774 -0
- package/src/agent-avatar/config-character.ts +6 -39
- package/src/agent-avatar/legacy-recipe.ts +6 -34
- package/src/agent-creator/AgentCreatorBase.tsx +152 -121
- package/src/agent-creator/CharacterControls.tsx +14 -39
- package/src/agent-creator/EmotionPicker.tsx +16 -55
- package/src/agent-creator/ShapeSilhouette.tsx +1 -16
- package/src/agent-creator/__tests__/support/character-runtime-fixture.tsx +26 -0
- package/src/agent-creator/constants.ts +14 -47
- package/src/agent-creator/messages.ts +1 -2
- package/src/app-shell/AppShell.tsx +2 -2
- package/src/app-shell/AppShellBars.tsx +6 -4
- package/src/app-shell/AppShellEngine.tsx +51 -18
- package/src/app-shell/types.ts +11 -3
- package/src/appearance/BloomScope.tsx +5 -2
- package/src/appearance/context.ts +2 -2
- package/src/appearance/types.ts +4 -1
- package/src/content-panel/ContentPanel.tsx +32 -25
- package/src/content-panel/ContentPanel.web.tsx +32 -23
- package/src/content-panel/types.ts +2 -2
- package/src/design-tokens/shapes.ts +1 -1
- package/src/design-tokens/tokens.json +2 -2
- package/src/index.ts +1 -0
- package/src/index.web.ts +1 -0
- package/src/locale/translations/ar.ts +1 -1
- package/src/locale/translations/bn.ts +1 -1
- package/src/locale/translations/ca.ts +1 -1
- package/src/locale/translations/de.ts +1 -1
- package/src/locale/translations/es.ts +1 -1
- package/src/locale/translations/fr.ts +1 -1
- package/src/locale/translations/hi.ts +1 -1
- package/src/locale/translations/id.ts +1 -1
- package/src/locale/translations/it.ts +1 -1
- package/src/locale/translations/ja.ts +1 -1
- package/src/locale/translations/pt.ts +1 -1
- package/src/locale/translations/ru.ts +1 -1
- package/src/locale/translations/tr.ts +1 -1
- package/src/locale/translations/zh.ts +1 -1
- package/src/mail-thread/MailMessage.tsx +9 -11
- package/src/mail-thread/MailThread.tsx +3 -1
- package/src/mail-thread/shared.ts +2 -1
- package/src/mail-thread/types.ts +2 -0
- package/src/page-footer/PageFooter.tsx +96 -0
- package/src/page-footer/PageFooterProvider.tsx +9 -0
- package/src/page-footer/context.ts +6 -0
- package/src/page-footer/index.ts +4 -0
- package/src/page-footer/types.ts +26 -0
- package/src/page-footer/use-page-footer-inset.ts +17 -0
- package/src/sidebar/Sidebar.tsx +5 -4
- package/src/sidebar/types.ts +1 -1
- package/src/styles/panel-chrome.ts +9 -1
- package/src/theme/__tests__/__fixtures__/golden-resolved-tokens.json +9346 -0
- package/src/theme/__tests__/__fixtures__/tonal-glass-primary-failures.json +69 -0
- package/src/theme/__tests__/fixtures/color-engine-golden.json +1 -0
- package/assets/character-runtime/authored-parts.mjs +0 -754
- package/assets/character-runtime/catalog-parts.mjs +0 -362
- package/assets/character-runtime/character-recipe.mjs +0 -247
- package/assets/character-runtime/clippo-geometry.mjs +0 -679
- package/assets/character-runtime/controller-mode.mjs +0 -208
- package/assets/character-runtime/cyclops-geometry.mjs +0 -180
- package/assets/character-runtime/migrated-contours.mjs +0 -2067
- package/assets/character-runtime/migrated-faces.mjs +0 -59
- package/assets/character-runtime/pose-transition.mjs +0 -523
- package/assets/character-runtime/preparation-cache.mjs +0 -60
- package/assets/character-runtime/render-errors.mjs +0 -180
- package/assets/character-runtime/resolution.mjs +0 -10
- package/assets/character-runtime/sha256.mjs +0 -44
- package/assets/character-runtime/shared-programs.mjs +0 -534
- package/assets/character-runtime/shared-surface.mjs +0 -490
- package/assets/character-runtime/shared-textures.mjs +0 -420
- package/assets/character-runtime/thumbnails/eyes/todd.png +0 -0
- package/lib/commonjs/agent-avatar/character-colors.js +0 -19
- package/lib/commonjs/agent-avatar/character-colors.js.map +0 -1
- package/lib/commonjs/agent-avatar/character-shapes.js +0 -106
- package/lib/commonjs/agent-avatar/character-shapes.js.map +0 -1
- package/lib/commonjs/agent-creator/ClippoArtwork.js +0 -63
- package/lib/commonjs/agent-creator/ClippoArtwork.js.map +0 -1
- package/lib/commonjs/agent-creator/CyclopsArtwork.js +0 -45
- package/lib/commonjs/agent-creator/CyclopsArtwork.js.map +0 -1
- package/lib/commonjs/agent-creator/ToddArtwork.js +0 -29
- package/lib/commonjs/agent-creator/ToddArtwork.js.map +0 -1
- package/lib/module/agent-avatar/character-colors.js +0 -15
- package/lib/module/agent-avatar/character-colors.js.map +0 -1
- package/lib/module/agent-avatar/character-shapes.js +0 -97
- package/lib/module/agent-avatar/character-shapes.js.map +0 -1
- package/lib/module/agent-creator/ClippoArtwork.js +0 -59
- package/lib/module/agent-creator/ClippoArtwork.js.map +0 -1
- package/lib/module/agent-creator/CyclopsArtwork.js +0 -41
- package/lib/module/agent-creator/CyclopsArtwork.js.map +0 -1
- package/lib/module/agent-creator/ToddArtwork.js +0 -25
- package/lib/module/agent-creator/ToddArtwork.js.map +0 -1
- package/lib/typescript/commonjs/agent-avatar/character-colors.d.ts +0 -13
- package/lib/typescript/commonjs/agent-avatar/character-colors.d.ts.map +0 -1
- package/lib/typescript/commonjs/agent-avatar/character-shapes.d.ts +0 -19
- package/lib/typescript/commonjs/agent-avatar/character-shapes.d.ts.map +0 -1
- package/lib/typescript/commonjs/agent-creator/ClippoArtwork.d.ts +0 -6
- package/lib/typescript/commonjs/agent-creator/ClippoArtwork.d.ts.map +0 -1
- package/lib/typescript/commonjs/agent-creator/CyclopsArtwork.d.ts +0 -5
- package/lib/typescript/commonjs/agent-creator/CyclopsArtwork.d.ts.map +0 -1
- package/lib/typescript/commonjs/agent-creator/ToddArtwork.d.ts +0 -6
- package/lib/typescript/commonjs/agent-creator/ToddArtwork.d.ts.map +0 -1
- package/lib/typescript/module/agent-avatar/character-colors.d.ts +0 -13
- package/lib/typescript/module/agent-avatar/character-colors.d.ts.map +0 -1
- package/lib/typescript/module/agent-avatar/character-shapes.d.ts +0 -19
- package/lib/typescript/module/agent-avatar/character-shapes.d.ts.map +0 -1
- package/lib/typescript/module/agent-creator/ClippoArtwork.d.ts +0 -6
- package/lib/typescript/module/agent-creator/ClippoArtwork.d.ts.map +0 -1
- package/lib/typescript/module/agent-creator/CyclopsArtwork.d.ts +0 -5
- package/lib/typescript/module/agent-creator/CyclopsArtwork.d.ts.map +0 -1
- package/lib/typescript/module/agent-creator/ToddArtwork.d.ts +0 -6
- package/lib/typescript/module/agent-creator/ToddArtwork.d.ts.map +0 -1
- package/src/agent-avatar/character-colors.ts +0 -12
- package/src/agent-avatar/character-shapes.ts +0 -122
- package/src/agent-creator/ClippoArtwork.tsx +0 -49
- package/src/agent-creator/CyclopsArtwork.tsx +0 -27
- package/src/agent-creator/ToddArtwork.tsx +0 -24
package/docs/adoption-matrix.mdx
CHANGED
|
@@ -32,13 +32,13 @@ The classification is an EQUALITY in `src/__tests__/adoption-matrix.test.ts`, no
|
|
|
32
32
|
|
|
33
33
|
## Totals
|
|
34
34
|
|
|
35
|
-
- **
|
|
35
|
+
- **212 families** in `src/`, **210** published (a subpath, the root barrel, or both). **44** carry a web fork.
|
|
36
36
|
- Docs, stories and suites are gated as a standard by `src/__tests__/family-coverage.test.ts`; the per-family counts are in the table below.
|
|
37
37
|
|
|
38
38
|
| contract | applies to | reads | delegated | n/a¹ | adaptation |
|
|
39
39
|
| --- | --- | --- | --- | --- | --- |
|
|
40
40
|
| Field membership | 48 | 22 | 0 | 21 | 5 |
|
|
41
|
-
| Control presentation |
|
|
41
|
+
| Control presentation | 43 | 40 | 1 | 2 | 0 |
|
|
42
42
|
| Trigger composition | 10 | 8 | 0 | 2 | 0 |
|
|
43
43
|
| Controlled / uncontrolled state | 53 | 44 | 1 | 1 | 7 |
|
|
44
44
|
|
|
@@ -126,7 +126,7 @@ The classification is an EQUALITY in `src/__tests__/adoption-matrix.test.ts`, no
|
|
|
126
126
|
| `animated-check` | `@oxy.so/bloom/animated-check` + barrel | universal | `animated-check.mdx` | yes | 2 | | | | |
|
|
127
127
|
| `announcement` | `@oxy.so/bloom/announcement` + barrel | universal | `announcement.mdx` | yes | 2 | | | | |
|
|
128
128
|
| `app-shell` | `@oxy.so/bloom/app-shell` + barrel | web fork | `app-shell.mdx` | yes | 6 | | | | reads |
|
|
129
|
-
| `appearance` | `@oxy.so/bloom/appearance` + barrel | universal | `composition.mdx` | yes |
|
|
129
|
+
| `appearance` | `@oxy.so/bloom/appearance` + barrel | universal | `composition.mdx` | yes | 11 | | reads | | |
|
|
130
130
|
| `aspect-ratio` | `@oxy.so/bloom/aspect-ratio` + barrel | universal | `aspect-ratio.mdx` | yes | 1 | | | | |
|
|
131
131
|
| `auth-card` | `@oxy.so/bloom/auth-card` + barrel | universal | `auth-card.mdx` | yes | 2 | | | | |
|
|
132
132
|
| `avatar` | `@oxy.so/bloom/avatar` + barrel | universal | `avatar.mdx` | yes | 7 | | reads | | |
|
|
@@ -136,7 +136,7 @@ The classification is an EQUALITY in `src/__tests__/adoption-matrix.test.ts`, no
|
|
|
136
136
|
| `bottom-bar` | `@oxy.so/bloom/bottom-bar` + barrel | web fork | `bottom-bar.mdx` | yes | 2 | | | | |
|
|
137
137
|
| `bottom-sheet` | `@oxy.so/bloom/bottom-sheet` + barrel | web fork | `bottom-sheet.mdx` | yes | 8 | | | | |
|
|
138
138
|
| `breadcrumb` | `@oxy.so/bloom/breadcrumb` + barrel | universal | `breadcrumb.mdx` | yes | 2 | | | | |
|
|
139
|
-
| `button` | `@oxy.so/bloom/button` + barrel | web fork | `button.mdx` | yes |
|
|
139
|
+
| `button` | `@oxy.so/bloom/button` + barrel | web fork | `button.mdx` | yes | 41 | | reads | n/a¹ | |
|
|
140
140
|
| `button-group` | `@oxy.so/bloom/button-group` + barrel | web fork | `button-group.mdx` | yes | 8 | | reads | | |
|
|
141
141
|
| `calendar` | `@oxy.so/bloom/calendar` + barrel | universal | `calendar.mdx` | yes | 3 | | | | reads |
|
|
142
142
|
| `call-ui` | `@oxy.so/bloom/call-ui` + barrel | universal | `call-ui.mdx` | yes | 2 | | reads | | |
|
|
@@ -163,7 +163,7 @@ The classification is an EQUALITY in `src/__tests__/adoption-matrix.test.ts`, no
|
|
|
163
163
|
| `connection-dots` | `@oxy.so/bloom/connection-dots` + barrel | web fork | `connection-dots.mdx` | yes | 2 | | | | |
|
|
164
164
|
| `connection-status` | `@oxy.so/bloom/connection-status` + barrel | web fork | `connection-status.mdx` | yes | 1 | | | | |
|
|
165
165
|
| `contact-card` | `@oxy.so/bloom/contact-card` + barrel | universal | `contact-card.mdx` | yes | 2 | | | | |
|
|
166
|
-
| `content-panel` | `@oxy.so/bloom/content-panel` + barrel | web fork | `content-panel.mdx` | yes |
|
|
166
|
+
| `content-panel` | `@oxy.so/bloom/content-panel` + barrel | web fork | `content-panel.mdx` | yes | 9 | | | | |
|
|
167
167
|
| `context-menu` | `@oxy.so/bloom/context-menu` + barrel | web fork | `context-menu.mdx` | yes | 6 | | | reads | |
|
|
168
168
|
| `cover-header` | `@oxy.so/bloom/cover-header` + barrel | universal | `cover-header.mdx` | yes | 1 | | | | |
|
|
169
169
|
| `creator-studio` | `@oxy.so/bloom/creator-studio` + barrel | universal | `creator-studio.mdx` | yes | 4 | | n/a¹ | | **adaptation** |
|
|
@@ -202,7 +202,7 @@ The classification is an EQUALITY in `src/__tests__/adoption-matrix.test.ts`, no
|
|
|
202
202
|
| `job-board` | `@oxy.so/bloom/job-board` + barrel | universal | `job-board.mdx` | yes | 2 | n/a¹ | | | reads |
|
|
203
203
|
| `kbd` | `@oxy.so/bloom/kbd` + barrel | universal | `kbd.mdx` | yes | 1 | | reads | | |
|
|
204
204
|
| `label` | `@oxy.so/bloom/label` + barrel | universal | `label.mdx` | yes | 2 | | reads | | |
|
|
205
|
-
| `layout` | `@oxy.so/bloom/layout` + barrel | universal | `layout.mdx` | yes |
|
|
205
|
+
| `layout` | `@oxy.so/bloom/layout` + barrel | universal | `layout.mdx` | yes | 10 | | | | |
|
|
206
206
|
| `lead-score` | `@oxy.so/bloom/lead-score` + barrel | universal | `lead-score.mdx` | yes | 1 | | | | |
|
|
207
207
|
| `link-preview` | `@oxy.so/bloom/link-preview` + barrel | universal | `link-preview.mdx` | yes | 3 | | | | |
|
|
208
208
|
| `list` | `@oxy.so/bloom/list` + barrel | web fork | `list.mdx` | yes | 2 | | | | |
|
|
@@ -244,7 +244,8 @@ The classification is an EQUALITY in `src/__tests__/adoption-matrix.test.ts`, no
|
|
|
244
244
|
| `order-status` | `@oxy.so/bloom/order-status` + barrel | universal | `order-status.mdx` | yes | 1 | | | | |
|
|
245
245
|
| `outline-nav` | `@oxy.so/bloom/outline-nav` + barrel | universal | `outline-nav.mdx` | yes | 2 | | | | |
|
|
246
246
|
| `overlay` | `@oxy.so/bloom/overlay` + barrel | universal | `overlay.mdx` | yes | 17 | | | | |
|
|
247
|
-
| `page-
|
|
247
|
+
| `page-footer` | `@oxy.so/bloom/page-footer` + barrel | universal | `page-footer.mdx` | yes | 1 | | | | |
|
|
248
|
+
| `page-header` | `@oxy.so/bloom/page-header` + barrel | universal | `page-header.mdx` | yes | 6 | | | | |
|
|
248
249
|
| `pagination` | `@oxy.so/bloom/pagination` + barrel | universal | `pagination.mdx` | yes | 2 | | | | |
|
|
249
250
|
| `patient-info-card` | `@oxy.so/bloom/patient-info-card` + barrel | universal | `patient-info-card.mdx` | yes | 1 | | | | |
|
|
250
251
|
| `payment-method` | `@oxy.so/bloom/payment-method` + barrel | universal | `payment-method.mdx` | yes | 3 | reads | | | |
|
|
@@ -281,7 +282,7 @@ The classification is an EQUALITY in `src/__tests__/adoption-matrix.test.ts`, no
|
|
|
281
282
|
| `settings-modal` | `@oxy.so/bloom/settings-modal` + barrel | universal | `settings-modal.mdx` | yes | 10 | | | | reads |
|
|
282
283
|
| `shapes` | `@oxy.so/bloom/shapes` + barrel | universal | `shapes.mdx` | yes | 4 | | | | |
|
|
283
284
|
| `shipment-request` | `@oxy.so/bloom/shipment-request` + barrel | universal | `shipment-request.mdx` | yes | 1 | **adaptation** | | | |
|
|
284
|
-
| `sidebar` | `@oxy.so/bloom/sidebar` + barrel | universal | `sidebar.mdx` | yes |
|
|
285
|
+
| `sidebar` | `@oxy.so/bloom/sidebar` + barrel | universal | `sidebar.mdx` | yes | 12 | n/a¹ | reads | | reads |
|
|
285
286
|
| `skeleton` | `@oxy.so/bloom/skeleton` + barrel | universal | `skeleton.mdx` | yes | 1 | | | | |
|
|
286
287
|
| `slider` | `@oxy.so/bloom/slider` + barrel | universal | `slider.mdx` | yes | 5 | reads | reads | | |
|
|
287
288
|
| `social-button` | `@oxy.so/bloom/social-button` + barrel | web fork | `social-button.mdx` | yes | 2 | | reads | | |
|
|
@@ -292,9 +293,9 @@ The classification is an EQUALITY in `src/__tests__/adoption-matrix.test.ts`, no
|
|
|
292
293
|
| `stay-search` | `@oxy.so/bloom/stay-search` + barrel | universal | `stay-search.mdx` | yes | 5 | | | | |
|
|
293
294
|
| `stepper` | `@oxy.so/bloom/stepper` + barrel | universal | `stepper.mdx` | yes | 4 | reads | reads | | |
|
|
294
295
|
| `sticker` | `@oxy.so/bloom/sticker` + barrel | web fork | `sticker.mdx` | yes | 1 | | | | |
|
|
295
|
-
| `styles` | `@oxy.so/bloom/styles` + barrel | universal | `styles.mdx` | yes |
|
|
296
|
+
| `styles` | `@oxy.so/bloom/styles` + barrel | universal | `styles.mdx` | yes | 87 | n/a¹ | reads | | |
|
|
296
297
|
| `subtle-hover` | `@oxy.so/bloom/subtle-hover` + barrel | universal | `subtle-hover.mdx` | yes | 1 | | | | |
|
|
297
|
-
| `surface` | `@oxy.so/bloom/surface` + barrel | web fork | `surface.mdx` | yes |
|
|
298
|
+
| `surface` | `@oxy.so/bloom/surface` + barrel | web fork | `surface.mdx` | yes | 40 | | | | |
|
|
298
299
|
| `surfaces` | `@oxy.so/bloom/surfaces` + barrel | web fork | `alert.mdx` | yes | 3 | | | | |
|
|
299
300
|
| `swipe-row` | `@oxy.so/bloom/swipe-row` + barrel | universal | `swipe-row.mdx` | yes | 2 | | | | |
|
|
300
301
|
| `switch` | `@oxy.so/bloom/switch` + barrel | universal | `switch.mdx` | yes | 7 | reads | reads | | reads |
|
|
@@ -307,7 +308,7 @@ The classification is an EQUALITY in `src/__tests__/adoption-matrix.test.ts`, no
|
|
|
307
308
|
| `tenancy` | `@oxy.so/bloom/tenancy` + barrel | universal | `tenancy.mdx` | yes | 5 | | reads | | |
|
|
308
309
|
| `text-field` | `@oxy.so/bloom/text-field` + barrel | universal | `text-field.mdx` | yes | 17 | reads | reads | | |
|
|
309
310
|
| `textarea` | `@oxy.so/bloom/textarea` + barrel | universal | `textarea.mdx` | yes | 4 | reads | reads | | n/a¹ |
|
|
310
|
-
| `theme` | `@oxy.so/bloom/theme` + barrel | web fork | `theme.mdx` | yes |
|
|
311
|
+
| `theme` | `@oxy.so/bloom/theme` + barrel | web fork | `theme.mdx` | yes | 356 | | | n/a¹ | reads |
|
|
311
312
|
| `theme-toggle` | `@oxy.so/bloom/theme-toggle` + barrel | universal | `theme-toggle.mdx` | yes | 2 | n/a¹ | | | |
|
|
312
313
|
| `toast` | `@oxy.so/bloom/toast` + barrel | universal | `toast.mdx` | yes | 17 | | | | |
|
|
313
314
|
| `tooltip` | `@oxy.so/bloom/tooltip` + barrel | web fork | `tooltip.mdx` | yes | 1 | | | | |
|
package/docs/agent-avatar.mdx
CHANGED
|
@@ -26,70 +26,33 @@ Host the package's complete `assets/character-runtime/` directory. The provider
|
|
|
26
26
|
|
|
27
27
|
## Editing
|
|
28
28
|
|
|
29
|
-
The `character` recipe holds a `preset` and optional `selections` for shape, color, eyes, eyewear and accessory. Explicit selections override preset defaults. `none` removes eyewear or an accessory.
|
|
29
|
+
The `character` recipe holds a `preset` and optional `selections` for shape, color, eyes, eyewear and accessory. Explicit selections override preset defaults. `none` removes eyewear or an accessory. The editor reads the engine's actual selection and availability, including shape-dependent eye styles. Changing shape clears an explicit eye override so an unsupported pair is not restored.
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
The editor presents one shape catalog and one eye catalog through `ShapeArc` and `EmotionPicker`. The eye orbit offers the engine’s nine native styles for both original and migrated bodies, with unsupported combinations disabled. Migrated bodies default to the original oval eyes. Saved expression, eye-size, spacing and tilt fields no longer modify a migrated face; the engine owns its eye geometry and animation. The shared `GlossArt` palette and custom color picker edit either body source. Original presets keep their authored appearance until explicitly edited.
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
Each shape defines its own eye positions and size. Changing the eye style preserves that layout; changing shape adopts the new body's layout. Eye depth follows the actual body surface so shallow styles remain visible on bodies such as Todd. Eyewear fits the composed eyes, and a final rigid adjustment keeps crown accessories clear of eyes and frames. `selections.eyes: 'cyclops'` uses one large white eye with a teal iris, dark pupil and highlight at the shape's face center. There is no eye-placement control in AgentCreator. Historical `character.eyeSpacing` and `eyeGap` values remain readable but do not override the 3D layout. The **Universal Customization** and **Single Eye** stories exercise the shared editor and cross-body eye selections.
|
|
36
|
-
|
|
37
|
-
`selections.shape: 'todd'` selects Todd's original body independently of its eye style. Its selector silhouette is sampled from the original mesh; no avatar runs inside the shape wheel. Editing a named preset's face or accessories preserves its original body, while an explicit shape selection replaces that body and retains the selected parts.
|
|
38
|
-
|
|
39
|
-
`{ character: { preset: 'clippo' } }` selects Clippo’s grey open-wire body, large white eyes, dark pupils and asymmetric brows. `selections.shape: 'clippo'` and `selections.eyes: 'clippo'` are independent choices: other eyes can use the clip body, and other bodies can use Clippo’s face. Its tube is generated as a real hollow silhouette with rounded ends, without fur; it uses the same native character, lighting, interaction and work controller. Color, eyewear and headwear remain editable. The shape and eye wheels use static SVG thumbnails. Storybook’s **Clippo** story provides React/Work controls and cross-body examples.
|
|
40
|
-
|
|
41
|
-
Alien avatars have been removed from the available catalog. Saved aliens, mascots and hidden-face recipes retain compatibility rendering. The shape selector shows static silhouettes without eyes or accessories: original catalog PNGs and cached SVG contours for migrated bodies. Paper grain and material effects become the engine’s 3D surface. Migrated bodies accept the original eyewear and accessory catalog. Headwear, Bulb, bow and Tuft use rigid contour anchors; eyewear fits the final eye geometry and headphones use body anchors. Original meshes, materials and fur remain intact.
|
|
33
|
+
Alien avatars have been removed from the available catalog. Saved aliens, mascots and hidden-face recipes retain compatibility rendering. The shape selector shows static silhouettes without eyes or accessories: original catalog PNGs and cached SVG contours for migrated bodies. Paper grain and material effects become the engine’s 3D surface. Migrated bodies accept the original eyewear and accessory catalog. Headwear, Bulb, bow and Tuft use rigid contour anchors; eyewear and headphones retain their original placement. Original meshes, materials and fur remain intact.
|
|
42
34
|
|
|
43
35
|
## Interaction and lifecycle
|
|
44
36
|
|
|
45
|
-
`interactive` enables the original engine's pointer tracking and touch/drag interaction. Change `reactionKey` from an accessible button to
|
|
37
|
+
`interactive` enables the original engine's pointer tracking and touch/drag interaction. Change `reactionKey` from an accessible button to replay its authored signature reaction for an intact preset, or the original 3D wave for customized and migrated bodies. Shape changes retain the last painted frame while the new geometry prepares. Changing `workingKey` starts a working episode and then returns to the interactive mode; `workingCycles` controls its duration. The creator’s **React** and **Work** buttons preview these original animations for both original and migrated bodies.
|
|
46
38
|
|
|
47
39
|
`paused`, reduced motion and `motion: 0` stop animation after a complete appearance frame. `portrait` prepares a static thumbnail. The beta can report readiness while drawing transparency if initialized with its reduced-motion flag; the adapter waits for painted pixels and then freezes its clock instead.
|
|
48
40
|
|
|
49
|
-
Web
|
|
50
|
-
|
|
51
|
-
Shaders and linked programs are shared by exact source and attribute bindings. Logical program handles retain independent uniforms and Emscripten metadata; switching skips values already present on the physical program. Small avatars (up to 128 CSS pixels) use the original compact mesh. The drawing resolution uses DPR at most 1 up to 64 CSS pixels, 1.5 up to 128, and 2 above that, with a 64-pixel floor and 512-pixel ceiling. The original engine derives its fur draw count from that drawing size, so reducing prepared fur arrays would not reduce its draw calls. Original fur and materials remain in use. The two 512-pixel mipmapped RGBA8 images and the 576×960 RGBA8 atlas share storage only when bytes and parameters match exactly; mutation or framebuffer attachment creates an independent copy. Private render targets, mutable geometry buffers and other textures remain per-character.
|
|
52
|
-
|
|
53
|
-
The scheduler submits at most eight avatars per batch within an 8 ms CPU allowance, then waits asynchronously on a WebGL fence before checking driver errors and copying images. This releases the JavaScript thread while the GPU finishes; it does not make that GPU work free. Native setup/probing and Emscripten’s own `GL.lastError` checks retain their behavior. A graphics error discards every pending image in that batch and reports failure to its touched characters. Appearance edits, resize and disposal wait for the batch to finish. Pointer capture happens synchronously on pointer-down; native input is queued in order. A single native render remains non-interruptible. Diagnostics separate `renderMilliseconds` (submission plus presentation CPU time) from `renderWaitMilliseconds` (elapsed wait and task dispatch, not a GPU timer).
|
|
54
|
-
|
|
55
|
-
Original and migrated bodies share one rendering WASM module and one preparation worker (the worker owns its own WASM instance). Prepared geometry identities include the contour and attachment transform. Cold preparation is admitted serially, while already painted moving avatars remain resident. Its owner receives a render turn every batch until its first complete paint, preventing the resident crowd from delaying the next preparation. The most recent interaction receives priority on alternate batches; the remaining turns use round-robin scheduling. Exact contour preparations are cached with an 8 MiB/16-entry LRU bound, keyed by appearance bytes, quality, activity mode, contour and authored parts. Cache hits receive independent buffer copies; native delivery still waits for the GPU boundary. Offscreen/background characters release their lease and retain their last complete 2D image. Static portraits use a bounded 64-image cache and release rendering resources after painting. Storybook’s **Many Avatars** story exercises 48 original/migrated avatars with React/Work controls and scrolling. **Shared Parts** shows Todd’s eyes and Felipe’s beret on all 21 shapes, with default-part, pause and animation controls.
|
|
56
|
-
|
|
57
|
-
### Physical-device measurements
|
|
58
|
-
|
|
59
|
-
The [current controller/transition benchmark](./benchmarks/avatar-continuous-renderer.json) uses a Pixel 8a (Mali-G715, Android 16, Android WebView 148), with all avatars visible at 48 CSS pixels and 64 backing pixels. Original presets and migrated contours alternate. After every avatar is ready, a three-second warmup precedes a roughly five-second sample. Output pixel hashes confirm that every avatar moves; page RAF cadence is measured separately from each avatar's paint rate. The artifact records the exact tested asset hashes; it predates the authored Todd/Felipe part compositor.
|
|
60
|
-
|
|
61
|
-
| Visible avatars | Median paints per avatar per second | Page RAF interval, p95 | Time until all are ready | WebGL contexts |
|
|
62
|
-
| --- | --- | --- | --- | --- |
|
|
63
|
-
| 24 | 4.42 | 25.1 ms | 14.85 s | 1 |
|
|
64
|
-
| 48 | 2.29 | 25.1 ms | 24.80 s | 1 |
|
|
65
|
-
|
|
66
|
-
These results remove context loss, but **do not deliver fluid 30 fps animation**. The [previous baseline](./benchmarks/avatar-shared-renderer.json) took 24.6/74.1 seconds until all avatars were ready, with mean paint rates of 3.76/2.59 Hz. Startup improves substantially; drawing throughput does not improve uniformly. An [intermediate snapshot](./benchmarks/avatar-deferred-renderer.json) isolates deferred GPU waiting before eager activity preparation. These are individual runs, not controlled repeated trials or sustained thermal measurements. Readiness uses a new document/engine and warm HTTP caches. Pixel-hash sampling adds readback overhead.
|
|
41
|
+
Web shares the beta engine and one animation clock per document, with a shared budget of **four live renderers** across original and migrated avatars. Additional avatars retain real 3D pixels from their last completed frame while their GPU renderer is released. Pointer interaction and React/Work commands prioritize reclaiming a renderer; overflow images remain visible while that renderer prepares. A newly visible avatar without a cached frame waits for its first rendering slot; preparation is one avatar at a time, and an `interactive` avatar (the editor's live preview, whose capabilities enable the editor's eye and colour controls) is admitted before passive thumbnails mounted ahead of it. This bounds graphics resources; the recovered engine’s synchronous first preparation can still cause a long task, especially for uncached migrated contours. Leaving the viewport or hiding the document releases the renderer lease, and returning avatars can display their retained image before resuming animation.
|
|
67
42
|
|
|
68
|
-
|
|
43
|
+
Different migrated contours isolate their rendering modules because the recovered engine caches geometry by its original appearance key; they share one preparation worker. Unused contour modules are released. Use `portrait` for galleries and selectors. Static preparation is serialized and the image cache is bounded to 64 entries; unmount releases listeners and rendering resources. Storybook’s **Many Avatars** story exercises 48 original/migrated avatars with per-avatar React/Work controls and document scrolling.
|
|
69
44
|
|
|
70
45
|
In the repository, run the scheduler tests and the browser budget check (with Storybook running):
|
|
71
46
|
|
|
72
47
|
```bash
|
|
73
|
-
node --test scripts/test-avatar-render-budget.mjs
|
|
74
|
-
node scripts/verify-avatar-shared-surface.mjs
|
|
75
|
-
node scripts/verify-avatar-shared-programs.mjs
|
|
76
|
-
node scripts/verify-avatar-shared-textures.mjs
|
|
77
|
-
node scripts/verify-avatar-runtime-errors.mjs
|
|
78
|
-
node scripts/verify-avatar-preparation-scope.mjs
|
|
48
|
+
node --test scripts/test-avatar-render-budget.mjs
|
|
79
49
|
node scripts/verify-avatar-render-budget.mjs
|
|
80
|
-
node scripts/verify-avatar-shared-renderer.mjs
|
|
81
|
-
node scripts/verify-avatar-deferred-input.mjs
|
|
82
|
-
node scripts/verify-avatar-controller-continuity.mjs
|
|
83
|
-
node scripts/verify-avatar-pose-transition.mjs
|
|
84
|
-
node scripts/verify-avatar-authored-parts.mjs
|
|
85
|
-
node scripts/verify-avatar-clippo.mjs
|
|
86
|
-
node scripts/verify-avatar-editor.mjs
|
|
87
50
|
```
|
|
88
51
|
|
|
89
52
|
`className` and `style` apply to the outer layout node through Bloom's NativeWind wrapper. `label` defaults to the translated “Agent avatar”; `locale` overrides the scope and `accessibilityLabel` overrides the name. Prefer a meaningful name when the avatar identifies an agent.
|
|
90
53
|
|
|
91
54
|
## Native and fallback
|
|
92
55
|
|
|
93
|
-
The optional native bridge uses `react-native-webview` and requires an absolute runtime URL reachable by the device.
|
|
56
|
+
The optional native bridge uses `react-native-webview` and requires an absolute runtime URL reachable by the device. Web is verified in Chrome; physical-device validation remains pending. Each native WebView owns a separate document, so the four-renderer web budget is **not an application-wide native limit**. Separate WebViews cannot share engine memory, graphics contexts or the web document’s viewport reclamation.
|
|
94
57
|
|
|
95
58
|
An unavailable runtime or missing native peer displays the translated unavailable state. Consumers without a runtime provider retain the universal SVG renderer for procedural recipes. That renderer preserves the original contours, folds, expression springs and deterministic grain; it does not support the beta's new 3D parts.
|
package/docs/agent-creator.mdx
CHANGED
|
@@ -25,17 +25,9 @@ Mount under `BloomProvider` and give the editor a bounded height. Layout classes
|
|
|
25
25
|
|
|
26
26
|
## Appearance
|
|
27
27
|
|
|
28
|
-
The preview is 162px. With `AgentAvatarProvider`, one shape arc combines the eleven original engine shapes
|
|
28
|
+
The preview is 162px. With `AgentAvatarProvider`, one shape arc combines the eleven original engine shapes with eight distinct migrated bodies: pebble, squircle, slender, pocket, petal, star, cloud and shield. Equivalent circle, triangle, flower, diamond and heart recipes reuse the original geometry. Alien avatars have been removed from the available catalog and examples; saved alien recipes remain readable for compatibility.
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
The eye orbit offers nine original 3D eye styles plus Todd, Clippo and Single eye for both body sources. Changing shape preserves the selected eyes, eyewear and accessory. Named presets provide their original defaults; choosing another eye style retains the preset's body. Historical recipes without an explicit eye selection default to oval eyes. Historical expression, eye-size, `eyeGap` and tilt settings remain readable; the engine owns the 3D face geometry and animation.
|
|
33
|
-
|
|
34
|
-
Known eye, color, eyewear and accessory choices stay available while a new appearance prepares. A pending capability response does not disable the controls or replace the current recipe with provisional defaults. Shape-comparison stories use one shared appearance across all bodies, including the same color, rather than giving old contours a separate flesh-colored default.
|
|
35
|
-
|
|
36
|
-
**Eye placement belongs to the shape.** Each body defines eye positions and size; every interchangeable eye style uses that layout. Changing shape automatically adopts its face layout without introducing another editor control. Historical `character.eyeSpacing` values remain readable for saved-recipe compatibility and are ignored by the renderer. Storybook's **Universal Customization** story starts with Todd and shows the saved recipe beside the existing editor.
|
|
37
|
-
|
|
38
|
-
**Single eye** (`selections.eyes: 'cyclops'`) selects a large white eye with a teal iris, dark pupil and highlight on any body. Its orbit thumbnail is static SVG artwork. It uses the selected shape’s face center and size. Storybook's **Single Eye** story shows it on the original and migrated shapes.
|
|
30
|
+
The eye orbit offers nine original 3D eye styles for both body sources. Migrated bodies default to oval eyes; historical expression, eye-size, spacing and tilt settings no longer alter their faces. The engine owns eye geometry and animation, and its capabilities disable unsupported combinations. Changing shape clears an incompatible eye override. Original presets keep their authored eyes until explicitly edited.
|
|
39
31
|
|
|
40
32
|
Upright eye chips orbit at a 116px radius; dragging or a mouse wheel rotates the orbit. Hover, focus, backgrounding and reduced motion pause automatic movement. The shape selector uses a 210px circular track, an unbounded index, spring, drag and wheel geometry. Choose a silhouette by pressing it; keyboard arrows, Home and End select shapes on web. BloomProvider’s direction reverses horizontal movement in RTL.
|
|
41
33
|
|
|
@@ -43,9 +35,7 @@ Nine glossy color presets and the shared custom picker edit both original and mi
|
|
|
43
35
|
|
|
44
36
|
The preview accepts pointer and touch reactions. **React** and **Work** buttons also support keyboard activation and preview the original engine’s animations on either body source. Working returns to the interactive preview after its episode. Eye chips and original shape chips use catalog PNG thumbnails. Migrated shape chips use cached static SVG silhouettes from their actual contours, matching the catalog’s flat pink artwork. The shape wheel renders no avatars or 3D canvases.
|
|
45
37
|
|
|
46
|
-
The
|
|
47
|
-
|
|
48
|
-
The preset selector provides authored characters; eyewear and accessories use Bloom Select on both original and migrated bodies. Explicit selections survive switching between these bodies. Headwear, Bulb, bow and Tuft attach to migrated contour anchors; eyewear fits the final eye geometry and headphones use body anchors. Reactions follow the body's original native signature after customization; catalog shapes with an authored counterpart use its profile, while unmatched shapes, Clippo and distinct migrated contours use Todd's signature as the shared standard. Work keeps the chosen body and fitted parts. Catalog titles retain their original English names by default. Hosts can translate them through `labels.characterOption(category, id, title)`; control labels follow the editor locale. Consumers without a runtime provider retain compatibility rendering and controls for saved procedural recipes.
|
|
38
|
+
The preset selector provides authored characters; eyewear and accessories use Bloom Select on both original and migrated bodies. Explicit selections survive switching between these bodies. Headwear, Bulb, bow and Tuft attach to migrated contour anchors; eyewear and headphones keep their original placement. Intact presets retain their authored signature reaction; edited and migrated bodies use the original 3D wave. Catalog titles retain their original English names by default. Hosts can translate them through `labels.characterOption(category, id, title)`; control labels follow the editor locale. Consumers without a runtime provider retain compatibility rendering and controls for saved procedural recipes.
|
|
49
39
|
|
|
50
40
|
## Preferences and speech
|
|
51
41
|
|
package/docs/app-shell.mdx
CHANGED
|
@@ -219,14 +219,33 @@ phone, and a negative margin is wrong the moment the page's padding changes.
|
|
|
219
219
|
know its own width. It has no `compact`/`always` switch: a compose button is
|
|
220
220
|
not phone chrome, so it is drawn whenever it is given — pass `null` to drop it.
|
|
221
221
|
|
|
222
|
-
Both bars are MEASURED
|
|
223
|
-
the last row of a feed is never hidden behind them.
|
|
222
|
+
Both bars are MEASURED. By default the content column reserves their height, so
|
|
223
|
+
the last row of a feed is never hidden behind them. A dashboard with
|
|
224
|
+
`reserveBottomBarSpace={false}` keeps the bottom bar over the full-height content,
|
|
225
|
+
including with `scroll="fixed"`. Its scrollers should apply
|
|
226
|
+
`useBottomEdgeInset()` from `@oxy.so/bloom/layout` as bottom content padding, so
|
|
227
|
+
the final item can scroll clear while the page background continues underneath. Measured in Chrome at 390,
|
|
224
228
|
scrolled to the page end: last item bottom `768`, action top `784`, bar top `844`.
|
|
225
229
|
|
|
226
230
|
With a content panel, the reserved clearance stays inside its painted surface.
|
|
227
231
|
In the compact full-width layout, bottom chrome also inherits that panel fill,
|
|
228
232
|
so its fading backdrop does not introduce a strip of the outer page color.
|
|
229
233
|
|
|
234
|
+
|
|
235
|
+
**Native safe-area ownership.**
|
|
236
|
+
|
|
237
|
+
Use `<AppShell safeArea scroll="fixed" ...>` when the shell owns the whole
|
|
238
|
+
native screen. The frame protects its top and side edges, including landscape
|
|
239
|
+
notches, and keeps reveal navigation inside the same safe frame. Portaled
|
|
240
|
+
navigation drawers use the device's original insets. Web geometry is unchanged;
|
|
241
|
+
`safeArea` defaults to `false` for existing embedded shells.
|
|
242
|
+
|
|
243
|
+
When bottom chrome is visible, the bottom-bar slot or floating action retains
|
|
244
|
+
ownership of the bottom inset. Otherwise the frame reserves it. There is no
|
|
245
|
+
second bottom inset around a bar. Set `safeArea={false}` on descendant
|
|
246
|
+
`PageHeader` components because the shell already protects their top edge.
|
|
247
|
+
The real `SafeAreaInsetsContext` remains intact for fullscreen dialogs.
|
|
248
|
+
|
|
230
249
|
`topBarVisibility` / `bottomBarVisibility` are `compact` (the default — only
|
|
231
250
|
while the nav is a drawer, the phone case the slots exist for) or `always`, for
|
|
232
251
|
a bar that is part of the app at every width.
|
|
@@ -665,3 +684,8 @@ ProOfferCard retains its animated complementary host and decorative artwork, wit
|
|
|
665
684
|
The detail remains mounted while `showList` changes; hiding a pane explicitly unmounts that pane. Defaults match AppShell's split layout: list width 360 (range 280–520), info width 320, scrolling and resizing enabled. `showDetail` defaults to true; list/info visibility follows the supplied content. Set `paneScroll={false}` when routes or virtualized lists own their scrolling. The surrounding Bloom container must provide a bounded height.
|
|
666
685
|
|
|
667
686
|
Use `variant="separated"` when each pane supplies its own `AiChatContainer`. Bloom inserts 12px transparent gutters and centers the existing resize handle in the list gutter; there is no extra surface around the panels. A single visible pane has no gutter. The default `joined` variant retains hairline dividers for panes inside one shared surface.
|
|
687
|
+
|
|
688
|
+
To fill wide displays without a reading-column cap, set
|
|
689
|
+
`contentMaxWidth="none"`. The default remains 1300. Dashboard reveal layouts
|
|
690
|
+
honor an explicit `gutter`, including `gutter={0}` for edge-to-edge compact
|
|
691
|
+
content; omitting it preserves the existing 12px frame and wider-screen top gap.
|
package/docs/appearance.mdx
CHANGED
|
@@ -37,7 +37,22 @@ import { Button } from '@oxy.so/bloom/button';
|
|
|
37
37
|
</BloomScope>
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
-
Explicit props win over the nearest scope, which wins over the family's defaults. A nested scope inherits unspecified values. Scopes render no layout node and never carry actions, selection, disabled state, or screen
|
|
40
|
+
Explicit props win over the nearest scope, which wins over the family's defaults. A nested scope inherits unspecified values. Scopes render no layout node and never carry actions, selection, disabled state, or screen placement. `appearance` remains explicit so a scope cannot silently turn every control into a filled primary action.
|
|
41
|
+
|
|
42
|
+
### Panel corners
|
|
43
|
+
|
|
44
|
+
`BloomScope panelRadius={28}` sets the shared corner radius for `Sidebar surface="card"`
|
|
45
|
+
and framed `ContentPanel` surfaces. The default is 28; any finite non-negative number
|
|
46
|
+
is accepted, including zero. Nested scopes inherit it independently of size and tone.
|
|
47
|
+
The surface, its material, the content clip and web frame/mask all use that radius.
|
|
48
|
+
Plain/docked sidebars and unframed panels remain square. Control corners are unchanged.
|
|
49
|
+
|
|
50
|
+
```tsx
|
|
51
|
+
<BloomScope size="md" panelRadius={20}>
|
|
52
|
+
<Sidebar items={items} />
|
|
53
|
+
<ContentPanel framed>{children}</ContentPanel>
|
|
54
|
+
</BloomScope>
|
|
55
|
+
```
|
|
41
56
|
|
|
42
57
|
## Actions and icons
|
|
43
58
|
|
package/docs/content-panel.mdx
CHANGED
|
@@ -255,3 +255,7 @@ last content without nested vertical scroll containers.
|
|
|
255
255
|
### Shared surface paint
|
|
256
256
|
|
|
257
257
|
The painted host delegates its fill to Surface: a 90%-opacity body with a subtle refracted edge on web, plus the shared sheen and rim. The host itself stays transparent to avoid painting twice. Explicit alpha colours retain their alpha; descendants receive the corresponding composited fill. Plain or unframed content keeps its existing layout behavior.
|
|
258
|
+
|
|
259
|
+
Panel corners inherit `BloomScope panelRadius` (28 by default), matching card sidebars. Both preserve the circular corner shape of the content panel on web and native.
|
|
260
|
+
`chrome="none"` removes the border, shadow and material rim/sheen while retaining the
|
|
261
|
+
framed radius and content clipping. Use it for a reader pane that should have a plain fill.
|
package/docs/mail-thread.mdx
CHANGED
|
@@ -119,3 +119,11 @@ identically-named buttons is a thread a screen-reader user cannot navigate.
|
|
|
119
119
|
The star, the `menu` slot and the three replies are SIBLINGS of the disclosure,
|
|
120
120
|
never children. A button inside a button is invalid, and the press target would
|
|
121
121
|
be ambiguous.
|
|
122
|
+
|
|
123
|
+
## Message surfaces and spacing
|
|
124
|
+
|
|
125
|
+
Collapsed and expanded messages use the same solid `Card`, with radius-16,
|
|
126
|
+
no border and small elevation. Expanding changes the contents without replacing
|
|
127
|
+
the card host, so focus stays on the disclosure. `MailThread` separates the
|
|
128
|
+
cards and the earlier-messages control by `space.md` (12); `messageGap` can
|
|
129
|
+
adjust that spacing without wrapping or restyling individual messages.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# PageFooter
|
|
2
|
+
|
|
3
|
+
Page-local actions float over a bounded scroller, above the app's bottom
|
|
4
|
+
navigation. The background uses the same surface color and gradient as
|
|
5
|
+
`PageHeader`, mirrored upward. Content continues behind the footer; the measured
|
|
6
|
+
clearance lets the last item scroll fully above its controls.
|
|
7
|
+
|
|
8
|
+
```tsx
|
|
9
|
+
import { ScrollView, View } from 'react-native';
|
|
10
|
+
import { Button, PageFooter, PageFooterProvider, usePageFooterInset } from '@oxy.so/bloom';
|
|
11
|
+
|
|
12
|
+
function Message() {
|
|
13
|
+
const bottom = usePageFooterInset();
|
|
14
|
+
return (
|
|
15
|
+
<View style={{ flex: 1, minHeight: 0 }}>
|
|
16
|
+
<ScrollView contentContainerStyle={{ paddingBottom: bottom }}>
|
|
17
|
+
<MessageBody />
|
|
18
|
+
</ScrollView>
|
|
19
|
+
<PageFooter
|
|
20
|
+
actions={<><Button onPress={reply}>Reply</Button><Button onPress={forward}>Forward</Button></>}
|
|
21
|
+
/>
|
|
22
|
+
</View>
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function MessagePane() {
|
|
27
|
+
return <PageFooterProvider><Message /></PageFooterProvider>;
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
The provider adds no layout and belongs around one pane. `usePageFooterInset()`
|
|
32
|
+
returns the footer's measured row height, its safe-area padding, and its bottom
|
|
33
|
+
offset. Use it **instead of** adding the bottom navigation inset again. It
|
|
34
|
+
starts with a 56px row estimate and updates when controls wrap or text scales;
|
|
35
|
+
the decorative gradient tail does not reserve layout. Removing the footer
|
|
36
|
+
(for example while replying) releases its clearance. If navigation still
|
|
37
|
+
overlaps the scroller then, retain its `useBottomEdgeInset()` as a fallback.
|
|
38
|
+
|
|
39
|
+
`bottomInset` defaults to Bloom's occupied bottom edge. `AppShell bottomBar`
|
|
40
|
+
publishes that measurement, including the safe area. Pass `bottomInset={0}`
|
|
41
|
+
when the containing frame already ends above navigation, or in a desktop pane
|
|
42
|
+
whose bottom edge differs from the app's. When the shell owns safe-area
|
|
43
|
+
handling, pass `safeArea={false}`. Otherwise the footer adds the native bottom
|
|
44
|
+
safe area only when its bottom offset is zero; web requires `safeArea` opt-in.
|
|
45
|
+
|
|
46
|
+
The footer reads the global bottom-edge registry but publishes its footprint
|
|
47
|
+
only in its local provider. It never increases the inset it uses to position
|
|
48
|
+
itself. Two panes have independent providers and measurements.
|
|
49
|
+
|
|
50
|
+
`actions` inherits the surrounding `BloomScope` size and supports wrapping.
|
|
51
|
+
`children` is an optional flexible slot before the actions. Group related
|
|
52
|
+
controls with `ButtonGroup` when desired. The scrim and the space between
|
|
53
|
+
controls let pointer events pass through. The gradient has no motion, including
|
|
54
|
+
when reduced motion is enabled. `scrim="none"` removes it; `scrimColor` overrides
|
|
55
|
+
the inherited opaque surface color. `style` and `testID` address the outer host.
|
|
56
|
+
|
|
57
|
+
This is page chrome, always absolutely positioned inside a bounded parent.
|
|
58
|
+
Place it beside the scroller, never inside its scrolling content. A purchase
|
|
59
|
+
summary with price and booking controls belongs to `ActionBar`, which has a
|
|
60
|
+
different opaque, in-flow layout contract.
|
package/docs/sidebar.mdx
CHANGED
|
@@ -148,7 +148,7 @@ Two apps with the same rows should not look like the same app. That difference i
|
|
|
148
148
|
|
|
149
149
|
| surface | what it draws |
|
|
150
150
|
| -------- | ------------------------------------------------------------------ |
|
|
151
|
-
| `card` | radius
|
|
151
|
+
| `card` | shared panel radius (28 by default), a hairline and the panel shadow, on the panel fill |
|
|
152
152
|
| `plain` | no radius, no border, no shadow — the rows sit straight on the page |
|
|
153
153
|
| `docked` | the panel fill, square corners, ONE hairline on the inner edge, full height |
|
|
154
154
|
|
|
@@ -19,7 +19,7 @@ const AgentAvatar = exports.AgentAvatar = /*#__PURE__*/(0, _react.memo)(function
|
|
|
19
19
|
const legacy = runtimeUrl && !(0, _legacyRecipe.legacyRecipeUnsupported)(props.config);
|
|
20
20
|
return beta || legacy ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_CharacterAvatar.CharacterAvatar, {
|
|
21
21
|
...props
|
|
22
|
-
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_ProceduralAvatar.ProceduralAvatar, {
|
|
22
|
+
}, beta ? 'character' : 'legacy') : /*#__PURE__*/(0, _jsxRuntime.jsx)(_ProceduralAvatar.ProceduralAvatar, {
|
|
23
23
|
...props
|
|
24
24
|
});
|
|
25
25
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_CharacterAvatar","_ProceduralAvatar","_context","_legacyRecipe","_jsxRuntime","AgentAvatar","exports","memo","props","runtimeUrl","useContext","CharacterRuntimeContext","beta","config","character","preset","legacy","legacyRecipeUnsupported","jsx","CharacterAvatar","ProceduralAvatar"],"sourceRoot":"../../../src","sources":["agent-avatar/AgentAvatar.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AACA,IAAAE,iBAAA,GAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AACA,IAAAI,aAAA,GAAAJ,OAAA;AAA0D,IAAAK,WAAA,GAAAL,OAAA;AAG1D;AACO,MAAMM,WAAW,GAAAC,OAAA,CAAAD,WAAA,gBAAG,IAAAE,WAAI,EAAC,SAASF,WAAWA,CAACG,KAAuB,EAAE;EAC5E,MAAM;IAAEC;EAAW,CAAC,GAAG,IAAAC,iBAAU,EAACC,gCAAuB,CAAC;EAC1D,MAAMC,IAAI,GACRJ,KAAK,CAACK,MAAM,CAACC,SAAS,IAAIN,KAAK,CAACK,MAAM,CAACC,SAAS,CAACC,MAAM,KAAK,OAAO;EACrE,MAAMC,MAAM,GAAGP,UAAU,IAAI,CAAC,IAAAQ,qCAAuB,EAACT,KAAK,CAACK,MAAM,CAAC;EACnE,OAAOD,IAAI,IAAII,MAAM,gBACnB,IAAAZ,WAAA,CAAAc,GAAA,EAAClB,gBAAA,CAAAmB,eAAe;IAAA,
|
|
1
|
+
{"version":3,"names":["_react","require","_CharacterAvatar","_ProceduralAvatar","_context","_legacyRecipe","_jsxRuntime","AgentAvatar","exports","memo","props","runtimeUrl","useContext","CharacterRuntimeContext","beta","config","character","preset","legacy","legacyRecipeUnsupported","jsx","CharacterAvatar","ProceduralAvatar"],"sourceRoot":"../../../src","sources":["agent-avatar/AgentAvatar.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AACA,IAAAE,iBAAA,GAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AACA,IAAAI,aAAA,GAAAJ,OAAA;AAA0D,IAAAK,WAAA,GAAAL,OAAA;AAG1D;AACO,MAAMM,WAAW,GAAAC,OAAA,CAAAD,WAAA,gBAAG,IAAAE,WAAI,EAAC,SAASF,WAAWA,CAACG,KAAuB,EAAE;EAC5E,MAAM;IAAEC;EAAW,CAAC,GAAG,IAAAC,iBAAU,EAACC,gCAAuB,CAAC;EAC1D,MAAMC,IAAI,GACRJ,KAAK,CAACK,MAAM,CAACC,SAAS,IAAIN,KAAK,CAACK,MAAM,CAACC,SAAS,CAACC,MAAM,KAAK,OAAO;EACrE,MAAMC,MAAM,GAAGP,UAAU,IAAI,CAAC,IAAAQ,qCAAuB,EAACT,KAAK,CAACK,MAAM,CAAC;EACnE,OAAOD,IAAI,IAAII,MAAM,gBACnB,IAAAZ,WAAA,CAAAc,GAAA,EAAClB,gBAAA,CAAAmB,eAAe;IAAA,GAAyCX;EAAK,GAAxCI,IAAI,GAAG,WAAW,GAAG,QAAsB,CAAC,gBAElE,IAAAR,WAAA,CAAAc,GAAA,EAACjB,iBAAA,CAAAmB,gBAAgB;IAAA,GAAKZ;EAAK,CAAG,CAC/B;AACH,CAAC,CAAC","ignoreList":[]}
|
|
@@ -15,7 +15,6 @@ var _characterHtml = require("./character-html.js");
|
|
|
15
15
|
var _characterRuntimeModule = require("./character-runtime-module.js");
|
|
16
16
|
var _characterWebview = require("./character-webview.js");
|
|
17
17
|
var _legacyRecipe = require("./legacy-recipe.js");
|
|
18
|
-
var _characterShapes = require("./character-shapes.js");
|
|
19
18
|
var _messages2 = require("./messages.js");
|
|
20
19
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
21
20
|
function WebCharacter({
|
|
@@ -172,7 +171,7 @@ function CharacterAvatar(props) {
|
|
|
172
171
|
};
|
|
173
172
|
}, []);
|
|
174
173
|
(0, _react.useEffect)(() => setFailed(false), [runtimeUrl, config.character]);
|
|
175
|
-
const legacy = (0, _react.useMemo)(() => !config.character || config.character.preset === 'bloom'
|
|
174
|
+
const legacy = (0, _react.useMemo)(() => !config.character || config.character.preset === 'bloom' ? (0, _legacyRecipe.legacyRecipe)(config) : undefined, [config]);
|
|
176
175
|
const value = (0, _react.useMemo)(() => ({
|
|
177
176
|
config,
|
|
178
177
|
legacy,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_reactNative","_reactNativeReanimated","_messages","_styledPrimitives","_index","_context","_characterHtml","_characterRuntimeModule","_characterWebview","_legacyRecipe","
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNative","_reactNativeReanimated","_messages","_styledPrimitives","_index","_context","_characterHtml","_characterRuntimeModule","_characterWebview","_legacyRecipe","_messages2","_jsxRuntime","WebCharacter","runtimeUrl","value","onError","reportCapabilities","useContext","CharacterRuntimeContext","report","useRef","current","host","controller","latest","fail","useEffect","element","document","stopped","started","canvas","createElement","setAttribute","Object","assign","style","width","height","display","touchAction","appendChild","start","module","loadCharacterRuntime","instance","createAvatar","onCapabilities","info","dispose","update","observer","IntersectionObserver","entries","some","entry","isIntersecting","observe","disconnect","remove","jsx","StyledView","ref","flex","NativeCharacter","WebView","characterWebView","initial","source","useMemo","html","characterHtml","baseUrl","send","injectJavaScript","scriptJson","backgroundColor","scrollEnabled","javaScriptEnabled","originWhitelist","onMessage","event","nativeEvent","data","startsWith","JSON","parse","slice","CharacterAvatar","props","messages","useMessages","AGENT_AVATAR_MESSAGES","locale","initialReduced","useReducedMotion","reduced","setReduced","useState","active","setActive","AppState","currentState","failed","setFailed","config","paused","portrait","workingKey","reactionKey","entranceKey","workingCycles","interactive","size","motion","AccessibilityInfo","addEventListener","state","next","media","Platform","OS","window","matchMedia","undefined","change","matches","removeEventListener","character","legacy","preset","legacyRecipe","Renderer","className","accessible","accessibilityRole","accessibilityLabel","label","testID","children","Text","numberOfLines","fontSize","unavailable"],"sourceRoot":"../../../src","sources":["agent-avatar/CharacterAvatar.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -17,10 +17,6 @@ function parseCharacterConfig(value) {
|
|
|
17
17
|
const result = {
|
|
18
18
|
preset: candidate.preset
|
|
19
19
|
};
|
|
20
|
-
if (candidate.eyeSpacing !== undefined) {
|
|
21
|
-
if (typeof candidate.eyeSpacing !== 'number' || !Number.isFinite(candidate.eyeSpacing) || candidate.eyeSpacing < 0.5 || candidate.eyeSpacing > 1.5) throw new Error('Invalid character eye spacing.');
|
|
22
|
-
result.eyeSpacing = candidate.eyeSpacing;
|
|
23
|
-
}
|
|
24
20
|
if (candidate.bodyColor !== undefined) {
|
|
25
21
|
if (typeof candidate.bodyColor !== 'string' || candidate.bodyColor.length !== 7 || !/^#[0-9a-f]{6}$/i.test(candidate.bodyColor)) throw new Error('Invalid character body color.');
|
|
26
22
|
result.bodyColor = candidate.bodyColor.toLowerCase();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["categories","validId","value","length","parseCharacterConfig","Array","isArray","Error","candidate","preset","result","
|
|
1
|
+
{"version":3,"names":["categories","validId","value","length","parseCharacterConfig","Array","isArray","Error","candidate","preset","result","bodyColor","undefined","test","toLowerCase","selections","category","id","Object","entries","includes"],"sourceRoot":"../../../src","sources":["agent-avatar/config-character.ts"],"mappings":";;;;;;AAAA;;AAUA,MAAMA,UAA8C,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC;AACzG,MAAMC,OAAO,GAAIC,KAAc,IAC7B,OAAOA,KAAK,KAAK,QAAQ,IAAIA,KAAK,CAACC,MAAM,GAAG,CAAC,IAAID,KAAK,CAACC,MAAM,IAAI,EAAE;;AAErE;AACO,SAASC,oBAAoBA,CAACF,KAAc,EAAyB;EAC1E,IAAI,CAACA,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAIG,KAAK,CAACC,OAAO,CAACJ,KAAK,CAAC,EAC7D,MAAM,IAAIK,KAAK,CAAC,kCAAkC,CAAC;EACrD,MAAMC,SAAS,GAAGN,KAAgC;EAClD,IAAI,CAACD,OAAO,CAACO,SAAS,CAACC,MAAM,CAAC,EAAE,MAAM,IAAIF,KAAK,CAAC,2BAA2B,CAAC;EAC5E,MAAMG,MAA6B,GAAG;IAAED,MAAM,EAAED,SAAS,CAACC;EAAO,CAAC;EAClE,IAAID,SAAS,CAACG,SAAS,KAAKC,SAAS,EAAE;IACrC,IAAI,OAAOJ,SAAS,CAACG,SAAS,KAAK,QAAQ,IAAIH,SAAS,CAACG,SAAS,CAACR,MAAM,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAACU,IAAI,CAACL,SAAS,CAACG,SAAS,CAAC,EAC7H,MAAM,IAAIJ,KAAK,CAAC,+BAA+B,CAAC;IAClDG,MAAM,CAACC,SAAS,GAAGH,SAAS,CAACG,SAAS,CAACG,WAAW,CAAC,CAAC;EACtD;EACA,IAAIN,SAAS,CAACO,UAAU,KAAKH,SAAS,EAAE;IACtC,IAAI,CAACJ,SAAS,CAACO,UAAU,IAAI,OAAOP,SAAS,CAACO,UAAU,KAAK,QAAQ,IAAIV,KAAK,CAACC,OAAO,CAACE,SAAS,CAACO,UAAU,CAAC,EAC1G,MAAM,IAAIR,KAAK,CAAC,+BAA+B,CAAC;IAClD,MAAMQ,UAA4D,GAAG,CAAC,CAAC;IACvE,KAAK,MAAM,CAACC,QAAQ,EAAEC,EAAE,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACX,SAAS,CAACO,UAAU,CAAC,EAAE;MACjE,IAAI,CAACf,UAAU,CAACoB,QAAQ,CAACJ,QAAmC,CAAC,IAAI,CAACf,OAAO,CAACgB,EAAE,CAAC,EAC3E,MAAM,IAAIV,KAAK,CAAC,8BAA8B,CAAC;MACjDQ,UAAU,CAACC,QAAQ,CAA4B,GAAGC,EAAE;IACtD;IACAP,MAAM,CAACK,UAAU,GAAGA,UAAU;EAChC;EACA,IAAI,OAAO,IAAIP,SAAS,EAAE,MAAM,IAAID,KAAK,CAAC,0CAA0C,CAAC;EACrF,OAAOG,MAAM;AACf","ignoreList":[]}
|