@astryxdesign/core 0.6.2 → 0.6.3-canary.039a67e
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/CHANGELOG.md +81 -0
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +33 -12
- package/dist/BottomSheet/BottomSheet.d.ts +1 -1
- package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheet.js +3 -1
- package/dist/BottomSheet/BottomSheetPanel.d.ts +7 -5
- package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetPanel.js +56 -19
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +13 -28
- package/dist/Chat/ChatComposer.d.ts.map +1 -1
- package/dist/Chat/ChatComposer.js +10 -5
- package/dist/Chat/ChatComposerDrawer.d.ts +19 -5
- package/dist/Chat/ChatComposerDrawer.d.ts.map +1 -1
- package/dist/Chat/ChatComposerDrawer.js +48 -23
- package/dist/Chat/ChatComposerInput.d.ts +11 -3
- package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
- package/dist/Chat/ChatComposerInput.js +63 -16
- package/dist/Chat/ChatDictationButton.d.ts +3 -2
- package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
- package/dist/Chat/ChatDictationButton.js +6 -4
- package/dist/Chat/ChatLayout.d.ts +19 -0
- package/dist/Chat/ChatLayout.d.ts.map +1 -1
- package/dist/Chat/ChatLayout.js +19 -0
- package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
- package/dist/Chat/ChatLayoutScrollButton.js +44 -34
- package/dist/Chat/ChatMessageBubble.d.ts +2 -0
- package/dist/Chat/ChatMessageBubble.d.ts.map +1 -1
- package/dist/Chat/ChatMessageBubble.js +5 -3
- package/dist/Chat/ChatMessageList.d.ts +2 -1
- package/dist/Chat/ChatMessageList.d.ts.map +1 -1
- package/dist/Chat/ChatMessageList.js +4 -3
- package/dist/Chat/ChatMessageMetadata.d.ts +5 -4
- package/dist/Chat/ChatMessageMetadata.d.ts.map +1 -1
- package/dist/Chat/ChatMessageMetadata.js +12 -9
- package/dist/Chat/ChatSendButton.d.ts +2 -1
- package/dist/Chat/ChatSendButton.d.ts.map +1 -1
- package/dist/Chat/ChatSendButton.js +6 -4
- package/dist/Chat/ChatSystemMessage.d.ts +3 -3
- package/dist/Chat/ChatSystemMessage.d.ts.map +1 -1
- package/dist/Chat/ChatSystemMessage.js +2 -2
- package/dist/Chat/ChatTokenizedText.d.ts +6 -6
- package/dist/Chat/ChatTokenizedText.js +10 -6
- package/dist/Chat/ChatToolCalls.d.ts +7 -9
- package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
- package/dist/Chat/ChatToolCalls.js +43 -26
- package/dist/Chat/index.d.ts +1 -1
- package/dist/Chat/index.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +12 -2
- package/dist/Citation/Citation.d.ts +1 -1
- package/dist/Citation/Citation.d.ts.map +1 -1
- package/dist/Citation/Citation.js +3 -2
- package/dist/CodeBlock/highlightRanges.d.ts.map +1 -1
- package/dist/CodeBlock/highlightRanges.js +14 -3
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +6 -1
- package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteInput.js +1 -1
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +1 -1
- package/dist/DateInput/DateInput.d.ts +25 -5
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +29 -17
- package/dist/DateInput/NativeDateField.d.ts.map +1 -1
- package/dist/DateInput/NativeDateField.js +16 -16
- package/dist/DateInput/TouchDateField.d.ts.map +1 -1
- package/dist/DateInput/TouchDateField.js +2 -2
- package/dist/DateInput/index.d.ts +1 -1
- package/dist/DateInput/index.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +4 -4
- package/dist/DateTimeInput/DateTimeInput.d.ts +32 -15
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +55 -30
- package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
- package/dist/DateTimeInput/TouchDateTimeField.js +4 -4
- package/dist/DateTimeInput/index.d.ts +1 -1
- package/dist/DateTimeInput/index.d.ts.map +1 -1
- package/dist/DateTimeInput/nativePickerSegmentStyles.d.ts +9 -3
- package/dist/DateTimeInput/nativePickerSegmentStyles.d.ts.map +1 -1
- package/dist/DateTimeInput/nativePickerSegmentStyles.js +3 -3
- package/dist/Dialog/DialogHeader.d.ts +8 -1
- package/dist/Dialog/DialogHeader.d.ts.map +1 -1
- package/dist/Dialog/DialogHeader.js +13 -4
- package/dist/Field/InputClearButton.d.ts +4 -2
- package/dist/Field/InputClearButton.d.ts.map +1 -1
- package/dist/Field/InputClearButton.js +4 -2
- package/dist/Field/PanelSearchInput.d.ts.map +1 -1
- package/dist/Field/PanelSearchInput.js +1 -1
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +7 -7
- package/dist/Icon/Icon.d.ts +6 -31
- package/dist/Icon/Icon.d.ts.map +1 -1
- package/dist/Icon/Icon.js +8 -71
- package/dist/Icon/IconDefaultSizeContext.d.ts +4 -0
- package/dist/Icon/IconDefaultSizeContext.d.ts.map +1 -0
- package/dist/Icon/IconDefaultSizeContext.js +18 -0
- package/dist/Icon/IconSize.stylex.d.ts +65 -0
- package/dist/Icon/IconSize.stylex.d.ts.map +1 -0
- package/dist/Icon/IconSize.stylex.js +75 -0
- package/dist/Item/Item.d.ts +1 -1
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +4 -3
- package/dist/Kbd/Kbd.d.ts +5 -3
- package/dist/Kbd/Kbd.d.ts.map +1 -1
- package/dist/Kbd/Kbd.js +36 -42
- package/dist/Link/Link.d.ts.map +1 -1
- package/dist/Link/Link.js +6 -2
- package/dist/Link/useLinkComponent.d.ts +5 -15
- package/dist/Link/useLinkComponent.d.ts.map +1 -1
- package/dist/Link/useLinkComponent.js +34 -51
- package/dist/List/List.d.ts +19 -1
- package/dist/List/List.d.ts.map +1 -1
- package/dist/List/List.js +9 -2
- package/dist/List/ListContext.d.ts +1 -0
- package/dist/List/ListContext.d.ts.map +1 -1
- package/dist/List/ListContext.js +2 -1
- package/dist/List/ListItem.d.ts +1 -1
- package/dist/List/ListItem.d.ts.map +1 -1
- package/dist/List/ListItem.js +9 -2
- package/dist/Markdown/Markdown.d.ts +8 -2
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.fr23.bench.d.ts +2 -0
- package/dist/Markdown/Markdown.fr23.bench.d.ts.map +1 -0
- package/dist/Markdown/Markdown.fr23.bench.js +150 -0
- package/dist/Markdown/Markdown.fr23.sampling.d.ts +2 -0
- package/dist/Markdown/Markdown.fr23.sampling.d.ts.map +1 -0
- package/dist/Markdown/Markdown.fr23.sampling.js +43 -0
- package/dist/Markdown/Markdown.js +262 -109
- package/dist/Markdown/ast.d.ts +162 -0
- package/dist/Markdown/ast.d.ts.map +1 -0
- package/dist/Markdown/ast.js +74 -0
- package/dist/Markdown/index.d.ts +5 -3
- package/dist/Markdown/index.d.ts.map +1 -1
- package/dist/Markdown/index.js +3 -2
- package/dist/Markdown/parser/index.d.ts +10 -0
- package/dist/Markdown/parser/index.d.ts.map +1 -0
- package/dist/Markdown/parser/index.js +10 -0
- package/dist/Markdown/parser.d.ts +126 -58
- package/dist/Markdown/parser.d.ts.map +1 -1
- package/dist/Markdown/parser.js +726 -177
- package/dist/Markdown/plugins/frontmatter.d.ts +32 -0
- package/dist/Markdown/plugins/frontmatter.d.ts.map +1 -0
- package/dist/Markdown/plugins/frontmatter.js +132 -0
- package/dist/Markdown/plugins/index.d.ts +17 -0
- package/dist/Markdown/plugins/index.d.ts.map +1 -0
- package/dist/Markdown/plugins/index.js +14 -0
- package/dist/Markdown/plugins/protocol.d.ts +191 -0
- package/dist/Markdown/plugins/protocol.d.ts.map +1 -0
- package/dist/Markdown/plugins/protocol.js +957 -0
- package/dist/Markdown/plugins/semanticFence.d.ts +36 -0
- package/dist/Markdown/plugins/semanticFence.d.ts.map +1 -0
- package/dist/Markdown/plugins/semanticFence.js +213 -0
- package/dist/Markdown/plugins/softBreaks.d.ts +3 -0
- package/dist/Markdown/plugins/softBreaks.d.ts.map +1 -0
- package/dist/Markdown/plugins/softBreaks.js +172 -0
- package/dist/Markdown/plugins/sourceDecoration.d.ts +76 -0
- package/dist/Markdown/plugins/sourceDecoration.d.ts.map +1 -0
- package/dist/Markdown/plugins/sourceDecoration.js +393 -0
- package/dist/Markdown/plugins/textTransform.d.ts +30 -0
- package/dist/Markdown/plugins/textTransform.d.ts.map +1 -0
- package/dist/Markdown/plugins/textTransform.js +374 -0
- package/dist/Markdown/remark.d.ts +196 -0
- package/dist/Markdown/remark.d.ts.map +1 -0
- package/dist/Markdown/remark.js +1062 -0
- package/dist/Markdown/url.d.ts +6 -0
- package/dist/Markdown/url.d.ts.map +1 -0
- package/dist/Markdown/url.js +31 -0
- package/dist/Markdown/utils.d.ts +4 -2
- package/dist/Markdown/utils.d.ts.map +1 -1
- package/dist/Markdown/utils.js +2 -1
- package/dist/MetadataList/MetadataList.js +3 -3
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +4 -4
- package/dist/Outline/index.d.ts +1 -0
- package/dist/Outline/index.d.ts.map +1 -1
- package/dist/Outline/parseOutlineFromMarkdown.d.ts +7 -1
- package/dist/Outline/parseOutlineFromMarkdown.d.ts.map +1 -1
- package/dist/Outline/parseOutlineFromMarkdown.js +14 -8
- package/dist/Outline/useOutlineFromMarkdown.d.ts +3 -1
- package/dist/Outline/useOutlineFromMarkdown.d.ts.map +1 -1
- package/dist/Outline/useOutlineFromMarkdown.js +8 -3
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchEditPopover.js +46 -30
- package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchValueEditor.js +5 -0
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +36 -31
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +13 -1
- package/dist/ScrollableArea/ScrollableArea.d.ts +1 -0
- package/dist/ScrollableArea/ScrollableArea.d.ts.map +1 -1
- package/dist/ScrollableArea/ScrollableArea.js +1 -0
- package/dist/SegmentedControl/SegmentedControl.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControl.js +1 -0
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +5 -5
- package/dist/Selector/Selector.d.ts +9 -7
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +16 -7
- package/dist/SideNav/SideNav.d.ts +2 -1
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +9 -3
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +28 -12
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +23 -7
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +11 -0
- package/dist/TabList/Tab.d.ts +1 -1
- package/dist/TabList/Tab.d.ts.map +1 -1
- package/dist/TabList/Tab.js +20 -7
- package/dist/Table/Table.d.ts +1 -0
- package/dist/Table/Table.d.ts.map +1 -1
- package/dist/Table/Table.js +29 -13
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +1 -1
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +2 -2
- package/dist/TimeInput/TimeInput.d.ts +30 -14
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +61 -13
- package/dist/TimeInput/TouchTimeField.d.ts +11 -0
- package/dist/TimeInput/TouchTimeField.d.ts.map +1 -0
- package/dist/TimeInput/TouchTimeField.js +417 -0
- package/dist/TimeInput/index.d.ts +1 -1
- package/dist/TimeInput/index.d.ts.map +1 -1
- package/dist/Timer/Timer.d.ts +49 -0
- package/dist/Timer/Timer.d.ts.map +1 -0
- package/dist/Timer/Timer.js +158 -0
- package/dist/Timer/index.d.ts +9 -0
- package/dist/Timer/index.d.ts.map +1 -0
- package/dist/Timer/index.js +10 -0
- package/dist/ToggleButton/ToggleButton.d.ts +9 -6
- package/dist/ToggleButton/ToggleButton.d.ts.map +1 -1
- package/dist/ToggleButton/ToggleButton.js +15 -27
- package/dist/TopNav/TopNavMenu.d.ts +1 -1
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +3 -2
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +3 -0
- package/dist/TreeList/TreeListItem.d.ts +6 -1
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +12 -2
- package/dist/TreeList/TreeListTypes.d.ts +8 -1
- package/dist/TreeList/TreeListTypes.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +16 -7
- package/dist/astryx.css +27 -11
- package/dist/hooks/scrollKeyboardDelegation.d.ts +3 -0
- package/dist/hooks/scrollKeyboardDelegation.d.ts.map +1 -0
- package/dist/hooks/scrollKeyboardDelegation.js +146 -0
- package/dist/hooks/useClickableContainer.d.ts +10 -1
- package/dist/hooks/useClickableContainer.d.ts.map +1 -1
- package/dist/hooks/useClickableContainer.js +15 -4
- package/dist/hooks/useScrollableArea.d.ts +6 -2
- package/dist/hooks/useScrollableArea.d.ts.map +1 -1
- package/dist/hooks/useScrollableArea.js +17 -5
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/theme/declarationBoundary.d.ts +17 -0
- package/dist/theme/declarationBoundary.d.ts.map +1 -0
- package/dist/theme/declarationBoundary.js +343 -0
- package/dist/theme/defineTheme.d.ts +3 -0
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/defineTheme.js +4 -1
- package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
- package/dist/theme/derivedVarRegistry.js +4 -0
- package/dist/theme/generateThemeRules.d.ts +15 -7
- package/dist/theme/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +143 -35
- package/dist/theme/themeAdaptations.d.ts +5 -3
- package/dist/theme/themeAdaptations.d.ts.map +1 -1
- package/dist/theme/themeAdaptations.js +33 -5
- package/dist/utils/inputPresentation.d.ts +55 -0
- package/dist/utils/inputPresentation.d.ts.map +1 -0
- package/dist/utils/inputPresentation.js +108 -0
- package/dist/utils/interactionOverlay.stylex.d.ts +8 -0
- package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
- package/dist/utils/interactionOverlay.stylex.js +9 -0
- package/dist/utils/safeUrl.d.ts +11 -0
- package/dist/utils/safeUrl.d.ts.map +1 -0
- package/dist/utils/safeUrl.js +78 -0
- package/locales/af-ZA.json +530 -1
- package/locales/ar-SA.json +490 -1
- package/locales/ca-ES.json +514 -1
- package/locales/cs-CZ.json +498 -1
- package/locales/da-DK.json +522 -1
- package/locales/de-DE.json +522 -1
- package/locales/el-GR.json +498 -1
- package/locales/es-ES.json +510 -1
- package/locales/fi-FI.json +498 -1
- package/locales/fr-FR.json +534 -1
- package/locales/he-IL.json +498 -1
- package/locales/hu-HU.json +498 -1
- package/locales/it-IT.json +510 -1
- package/locales/ja-JP.json +490 -1
- package/locales/ko-KR.json +498 -1
- package/locales/nl-NL.json +534 -1
- package/locales/no-NO.json +510 -1
- package/locales/pl-PL.json +506 -1
- package/locales/pt-BR.json +506 -1
- package/locales/pt-PT.json +506 -1
- package/locales/ro-RO.json +506 -1
- package/locales/ru-RU.json +498 -1
- package/locales/sr-SP.json +498 -1
- package/locales/sv-SE.json +502 -1
- package/locales/tr-TR.json +498 -1
- package/locales/uk-UA.json +498 -1
- package/locales/vi-VN.json +502 -1
- package/locales/zh-CN.json +490 -1
- package/locales/zh-TW.json +490 -1
- package/package.json +24 -4
- package/src/Avatar/Avatar.doc.mjs +1 -1
- package/src/Avatar/Avatar.test.tsx +30 -0
- package/src/Avatar/Avatar.tsx +38 -14
- package/src/BottomSheet/BottomSheet.doc.mjs +8 -1
- package/src/BottomSheet/BottomSheet.spec.md +46 -20
- package/src/BottomSheet/BottomSheet.test.tsx +6 -3
- package/src/BottomSheet/BottomSheet.tsx +3 -1
- package/src/BottomSheet/BottomSheetKeyboard.test.tsx +195 -0
- package/src/BottomSheet/BottomSheetPanel.test.tsx +11 -1
- package/src/BottomSheet/BottomSheetPanel.tsx +49 -16
- package/src/BottomSheet/__tests__/BottomSheetKeyboard.a11y.browser.spec.ts +344 -0
- package/src/Button/Button.doc.mjs +5 -5
- package/src/Button/Button.tsx +15 -13
- package/src/Button/__tests__/Button.a11y.chromium.spec.ts +17 -1
- package/src/Button/__tests__/Button.a11y.known-failures.ts +0 -29
- package/src/Button/__tests__/Button.a11y.renders.tsx +9 -2
- package/src/Button/__tests__/Button.a11y.states.ts +9 -0
- package/src/Chat/ChatComposer.doc.mjs +14 -0
- package/src/Chat/ChatComposer.spec.md +230 -0
- package/src/Chat/ChatComposer.test.tsx +57 -0
- package/src/Chat/ChatComposer.tsx +21 -9
- package/src/Chat/ChatComposerDrawer.doc.mjs +63 -5
- package/src/Chat/ChatComposerDrawer.spec.md +267 -0
- package/src/Chat/ChatComposerDrawer.test.tsx +81 -12
- package/src/Chat/ChatComposerDrawer.tsx +38 -9
- package/src/Chat/ChatComposerInput.doc.mjs +114 -26
- package/src/Chat/ChatComposerInput.spec.md +185 -0
- package/src/Chat/ChatComposerInput.test.tsx +113 -3
- package/src/Chat/ChatComposerInput.tsx +78 -13
- package/src/Chat/ChatComposerTokenElement.spec.md +152 -0
- package/src/Chat/ChatComposerTokenElement.test.tsx +85 -0
- package/src/Chat/ChatDictationButton.doc.mjs +3 -3
- package/src/Chat/ChatDictationButton.spec.md +160 -0
- package/src/Chat/ChatDictationButton.test.tsx +92 -27
- package/src/Chat/ChatDictationButton.tsx +8 -6
- package/src/Chat/ChatLayout.doc.mjs +12 -4
- package/src/Chat/ChatLayout.spec.md +271 -0
- package/src/Chat/ChatLayout.test.tsx +28 -0
- package/src/Chat/ChatLayout.tsx +19 -0
- package/src/Chat/ChatLayoutScrollButton.spec.md +338 -0
- package/src/Chat/ChatLayoutScrollButton.test.tsx +31 -0
- package/src/Chat/ChatLayoutScrollButton.tsx +31 -14
- package/src/Chat/ChatMessageBubble.doc.mjs +28 -15
- package/src/Chat/ChatMessageBubble.spec.md +263 -0
- package/src/Chat/ChatMessageBubble.test.tsx +93 -0
- package/src/Chat/ChatMessageBubble.tsx +8 -3
- package/src/Chat/ChatMessageList.spec.md +222 -0
- package/src/Chat/ChatMessageList.test.tsx +64 -2
- package/src/Chat/ChatMessageList.tsx +4 -3
- package/src/Chat/ChatMessageMetadata.doc.mjs +57 -3
- package/src/Chat/ChatMessageMetadata.spec.md +220 -0
- package/src/Chat/ChatMessageMetadata.test.tsx +34 -0
- package/src/Chat/ChatMessageMetadata.tsx +13 -13
- package/src/Chat/ChatSendButton.doc.mjs +32 -0
- package/src/Chat/ChatSendButton.spec.md +227 -0
- package/src/Chat/ChatSendButton.test.tsx +128 -8
- package/src/Chat/ChatSendButton.tsx +6 -4
- package/src/Chat/ChatSystemMessage.doc.mjs +115 -12
- package/src/Chat/ChatSystemMessage.spec.md +225 -0
- package/src/Chat/ChatSystemMessage.test.tsx +112 -20
- package/src/Chat/ChatSystemMessage.tsx +4 -6
- package/src/Chat/ChatTokenizedText.doc.mjs +96 -9
- package/src/Chat/ChatTokenizedText.spec.md +190 -0
- package/src/Chat/ChatTokenizedText.test.tsx +60 -1
- package/src/Chat/ChatTokenizedText.tsx +14 -8
- package/src/Chat/ChatToolCalls.doc.mjs +4 -1
- package/src/Chat/ChatToolCalls.spec.md +194 -0
- package/src/Chat/ChatToolCalls.test.tsx +83 -0
- package/src/Chat/ChatToolCalls.tsx +46 -21
- package/src/Chat/__tests__/ChatLayoutScrollButton.a11y.chromium.spec.ts +514 -0
- package/src/Chat/__tests__/ChatLayoutScrollButtonSurface.a11y.chromium.spec.ts +740 -0
- package/src/Chat/__tests__/ChatMessageBubble.a11y.chromium.spec.ts +457 -0
- package/src/Chat/__tests__/ChatMessageBubble.auditProvenance.test.ts +91 -0
- package/src/Chat/__tests__/ChatMessageBubble.auditProvenance.ts +91 -0
- package/src/Chat/__tests__/ChatMessageList.a11y.chromium.spec.ts +456 -0
- package/src/Chat/__tests__/ChatMessageMetadata.a11y.chromium.spec.ts +413 -0
- package/src/Chat/__tests__/ChatSendButton.a11y.chromium.spec.ts +1522 -0
- package/src/Chat/__tests__/ChatSystemMessage.a11y.chromium.spec.ts +1004 -0
- package/src/Chat/__tests__/ChatTokenizedText.a11y.chromium.spec.ts +573 -0
- package/src/Chat/index.ts +1 -0
- package/src/CheckboxInput/CheckboxInput.doc.mjs +11 -0
- package/src/CheckboxInput/CheckboxInput.test.tsx +34 -0
- package/src/CheckboxInput/CheckboxInput.tsx +21 -1
- package/src/Citation/Citation.doc.mjs +2 -2
- package/src/Citation/Citation.test.tsx +17 -0
- package/src/Citation/Citation.tsx +4 -2
- package/src/ClickableCard/ClickableCard.doc.mjs +2 -2
- package/src/ClickableCard/ClickableCard.test.tsx +102 -5
- package/src/CodeBlock/highlightRanges.test.ts +143 -1
- package/src/CodeBlock/highlightRanges.ts +15 -5
- package/src/Collapsible/Collapsible.doc.mjs +11 -0
- package/src/Collapsible/Collapsible.test.tsx +21 -0
- package/src/Collapsible/Collapsible.tsx +5 -0
- package/src/CommandPalette/CommandPaletteInput.tsx +6 -1
- package/src/ComplexSelector/ComplexSelector.tsx +6 -1
- package/src/DateInput/DateInput.doc.mjs +38 -9
- package/src/DateInput/DateInput.tsx +59 -17
- package/src/DateInput/NativeDateField.tsx +24 -8
- package/src/DateInput/Presentation.test.tsx +121 -0
- package/src/DateInput/TouchDateField.tsx +6 -2
- package/src/DateInput/index.ts +1 -0
- package/src/DateRangeInput/DateRangeInput.tsx +6 -1
- package/src/DateTimeInput/DateTimeInput.doc.mjs +28 -12
- package/src/DateTimeInput/DateTimeInput.tsx +93 -37
- package/src/DateTimeInput/Presentation.test.tsx +89 -0
- package/src/DateTimeInput/TouchDateTimeField.tsx +6 -1
- package/src/DateTimeInput/index.ts +1 -0
- package/src/DateTimeInput/nativePickerSegmentStyles.ts +24 -8
- package/src/Dialog/Dialog.doc.mjs +2 -0
- package/src/Dialog/DialogHeader.doc.mjs +22 -0
- package/src/Dialog/DialogHeader.test.tsx +167 -3
- package/src/Dialog/DialogHeader.tsx +37 -6
- package/src/Dialog/modules/DialogHeader.spec.md +101 -42
- package/src/DropdownMenu/DropdownMenu.test.tsx +5 -2
- package/src/Field/InputClearButton.test.tsx +17 -3
- package/src/Field/InputClearButton.tsx +5 -2
- package/src/Field/PanelSearchInput.tsx +5 -2
- package/src/FieldStatus/__tests__/StatusMessage.a11y.states.ts +1 -1
- package/src/FileInput/FileInput.tsx +11 -2
- package/src/Icon/Icon.doc.mjs +7 -5
- package/src/Icon/Icon.spec.md +81 -40
- package/src/Icon/Icon.test.tsx +6 -3
- package/src/Icon/Icon.tsx +20 -68
- package/src/Icon/IconDefaultSizeContext.ts +23 -0
- package/src/Icon/IconSize.stylex.ts +70 -0
- package/src/IconButton/IconButton.doc.mjs +3 -3
- package/src/IconButton/IconButton.test.tsx +40 -0
- package/src/Item/Item.doc.mjs +6 -2
- package/src/Item/Item.tsx +9 -3
- package/src/Kbd/Kbd.doc.mjs +3 -3
- package/src/Kbd/Kbd.test.tsx +57 -1
- package/src/Kbd/Kbd.tsx +57 -37
- package/src/Layout/LayoutFooter.doc.mjs +17 -0
- package/src/Link/Link.doc.mjs +17 -4
- package/src/Link/Link.test.tsx +24 -0
- package/src/Link/Link.tsx +5 -0
- package/src/Link/LinkProvider.doc.mjs +2 -2
- package/src/Link/__tests__/Link.navigation.a11y.chromium.spec.ts +261 -0
- package/src/Link/useLinkComponent.test.tsx +333 -0
- package/src/Link/useLinkComponent.ts +29 -57
- package/src/List/List.doc.mjs +6 -0
- package/src/List/List.spec.md +200 -0
- package/src/List/List.test.tsx +117 -1
- package/src/List/List.tsx +22 -2
- package/src/List/ListContext.tsx +3 -1
- package/src/List/ListItem.doc.mjs +2 -2
- package/src/List/ListItem.source-build.test.mjs +41 -0
- package/src/List/ListItem.tsx +26 -2
- package/src/Markdown/Markdown.doc.mjs +300 -2
- package/src/Markdown/Markdown.fr23.bench.ts +174 -0
- package/src/Markdown/Markdown.fr23.perf.test.ts +249 -0
- package/src/Markdown/Markdown.fr23.sampling.ts +49 -0
- package/src/Markdown/Markdown.helpers.perf.test.ts +489 -0
- package/src/Markdown/Markdown.public.test.ts +130 -3
- package/src/Markdown/Markdown.renderBoundary.test.tsx +72 -0
- package/src/Markdown/Markdown.spec.md +210 -45
- package/src/Markdown/Markdown.test.tsx +87 -3
- package/src/Markdown/Markdown.tsx +414 -135
- package/src/Markdown/ast.test.ts +307 -0
- package/src/Markdown/ast.ts +337 -0
- package/src/Markdown/incremental.test.ts +43 -0
- package/src/Markdown/index.ts +37 -1
- package/src/Markdown/modules/remark.spec.md +269 -0
- package/src/Markdown/modules/softBreaks.spec.md +137 -0
- package/src/Markdown/parser/index.ts +64 -0
- package/src/Markdown/parser.public.test.ts +103 -0
- package/src/Markdown/parser.test.ts +38 -6
- package/src/Markdown/parser.ts +1221 -242
- package/src/Markdown/plugins/frontmatter.test.tsx +125 -0
- package/src/Markdown/plugins/frontmatter.ts +198 -0
- package/src/Markdown/plugins/index.ts +54 -0
- package/src/Markdown/plugins/protocol.test.tsx +1022 -0
- package/src/Markdown/plugins/protocol.ts +1618 -0
- package/src/Markdown/plugins/semanticFence.test.tsx +546 -0
- package/src/Markdown/plugins/semanticFence.ts +424 -0
- package/src/Markdown/plugins/softBreaks.test.tsx +172 -0
- package/src/Markdown/plugins/softBreaks.ts +169 -0
- package/src/Markdown/plugins/sourceDecoration.test.tsx +799 -0
- package/src/Markdown/plugins/sourceDecoration.ts +539 -0
- package/src/Markdown/plugins/textTransform.test.ts +467 -0
- package/src/Markdown/plugins/textTransform.ts +554 -0
- package/src/Markdown/remark.test.tsx +1877 -0
- package/src/Markdown/remark.ts +1574 -0
- package/src/Markdown/url.ts +36 -0
- package/src/Markdown/utils.ts +13 -1
- package/src/MetadataList/MetadataList.test.tsx +4 -2
- package/src/MetadataList/MetadataList.tsx +3 -3
- package/src/MultiSelector/MultiSelector.test.tsx +1 -35
- package/src/MultiSelector/__tests__/MultiSelector.listbox.a11y.test.tsx +128 -0
- package/src/NumberInput/NumberInput.tsx +6 -1
- package/src/Outline/Outline.doc.mjs +7 -5
- package/src/Outline/Outline.spec.md +1 -1
- package/src/Outline/index.ts +1 -0
- package/src/Outline/modules/parseOutlineFromMarkdown.spec.md +142 -0
- package/src/Outline/parseOutlineFromMarkdown.ts +40 -10
- package/src/Outline/useOutlineFromMarkdown.ts +15 -3
- package/src/PowerSearch/PowerSearch.doc.mjs +2 -2
- package/src/PowerSearch/PowerSearchEditPopover.test.tsx +150 -1
- package/src/PowerSearch/PowerSearchEditPopover.tsx +51 -28
- package/src/PowerSearch/PowerSearchValueEditor.test.tsx +51 -0
- package/src/PowerSearch/PowerSearchValueEditor.tsx +4 -0
- package/src/ProgressBar/ProgressBar.test.tsx +29 -11
- package/src/ProgressBar/ProgressBar.tsx +59 -72
- package/src/RadioList/RadioList.doc.mjs +11 -0
- package/src/RadioList/RadioList.test.tsx +32 -0
- package/src/RadioList/RadioListItem.tsx +25 -1
- package/src/ScrollableArea/ScrollableArea.tsx +1 -0
- package/src/ScrollableArea/modules/useScrollableArea.spec.md +50 -22
- package/src/SegmentedControl/SegmentedControl.doc.mjs +2 -2
- package/src/SegmentedControl/SegmentedControl.test.tsx +61 -0
- package/src/SegmentedControl/SegmentedControl.tsx +2 -1
- package/src/SegmentedControl/SegmentedControlItem.tsx +6 -9
- package/src/Selector/Selector.doc.mjs +3 -3
- package/src/Selector/Selector.spec.md +51 -49
- package/src/Selector/Selector.test.tsx +61 -55
- package/src/Selector/Selector.tsx +34 -15
- package/src/Selector/__tests__/Listbox.a11y.chromium.spec.ts +130 -0
- package/src/Selector/__tests__/Listbox.a11y.dom.ts +38 -0
- package/src/Selector/__tests__/Listbox.a11y.inventory.test.ts +63 -0
- package/src/Selector/__tests__/Listbox.a11y.known-failures.ts +37 -0
- package/src/Selector/__tests__/Listbox.a11y.states.ts +232 -0
- package/src/Selector/__tests__/Selector.a11y.chromium.spec.ts +45 -0
- package/src/Selector/__tests__/Selector.listbox.a11y.test.tsx +121 -0
- package/src/SideNav/SideNav.doc.mjs +1 -1
- package/src/SideNav/SideNav.test.tsx +10 -0
- package/src/SideNav/SideNav.tsx +14 -2
- package/src/Slider/Slider.doc.mjs +17 -3
- package/src/Slider/Slider.test.tsx +221 -0
- package/src/Slider/Slider.tsx +40 -9
- package/src/Spinner/Spinner.test.tsx +4 -0
- package/src/Spinner/Spinner.tsx +31 -18
- package/src/Switch/Switch.doc.mjs +11 -0
- package/src/Switch/Switch.test.tsx +16 -0
- package/src/Switch/Switch.tsx +28 -0
- package/src/TabList/Tab.tsx +35 -7
- package/src/TabList/TabList.doc.mjs +11 -0
- package/src/TabList/TabList.spec.md +204 -0
- package/src/TabList/TabList.test.tsx +66 -0
- package/src/TabList/__tests__/Tabs.a11y.known-failures.ts +1 -34
- package/src/Table/Table.doc.mjs +1 -1
- package/src/Table/Table.spec.md +54 -40
- package/src/Table/Table.test.tsx +83 -10
- package/src/Table/Table.tsx +30 -22
- package/src/Table/__tests__/TableScroll.a11y.chromium.spec.ts +137 -0
- package/src/TextArea/TextArea.tsx +6 -1
- package/src/TextInput/TextInput.test.tsx +20 -1
- package/src/TextInput/TextInput.tsx +6 -1
- package/src/TimeInput/NativeTimeInput.test.tsx +36 -3
- package/src/TimeInput/Presentation.test.tsx +148 -0
- package/src/TimeInput/TimeInput.doc.mjs +21 -5
- package/src/TimeInput/TimeInput.tsx +102 -11
- package/src/TimeInput/TouchTimeField.tsx +572 -0
- package/src/TimeInput/index.ts +1 -0
- package/src/Timer/Timer.doc.mjs +183 -0
- package/src/Timer/Timer.spec.md +215 -0
- package/src/Timer/Timer.test.tsx +302 -0
- package/src/Timer/Timer.tsx +258 -0
- package/src/Timer/index.ts +11 -0
- package/src/ToggleButton/ToggleButton.doc.mjs +3 -3
- package/src/ToggleButton/ToggleButton.test.tsx +299 -4
- package/src/ToggleButton/ToggleButton.tsx +26 -33
- package/src/ToggleButton/ToggleButtonGroup.doc.mjs +3 -3
- package/src/ToggleButton/__tests__/ToggleButton.a11y.chromium.spec.ts +209 -0
- package/src/Token/Token.doc.mjs +2 -2
- package/src/Tokenizer/Tokenizer.spec.md +142 -75
- package/src/TopNav/TopNavMenu.doc.mjs +2 -2
- package/src/TopNav/TopNavMenu.test.tsx +30 -0
- package/src/TopNav/TopNavMenu.tsx +7 -2
- package/src/TreeList/TreeList.doc.mjs +3 -3
- package/src/TreeList/TreeList.spec.md +123 -75
- package/src/TreeList/TreeList.test.tsx +29 -0
- package/src/TreeList/TreeList.tsx +3 -0
- package/src/TreeList/TreeListItem.tsx +15 -1
- package/src/TreeList/TreeListTypes.ts +11 -1
- package/src/Typeahead/BaseTypeahead.spec.md +4 -3
- package/src/Typeahead/BaseTypeahead.tsx +21 -7
- package/src/Typeahead/Typeahead.test.tsx +53 -0
- package/src/__tests__/PressedState.a11y.chromium.spec.ts +813 -0
- package/src/__tests__/pressState.ts +93 -0
- package/src/hooks/scrollKeyboardDelegation.test.ts +155 -0
- package/src/hooks/scrollKeyboardDelegation.ts +233 -0
- package/src/hooks/useClickableContainer.test.tsx +236 -0
- package/src/hooks/useClickableContainer.ts +20 -4
- package/src/hooks/useScrollableArea.doc.mjs +15 -3
- package/src/hooks/useScrollableArea.test.tsx +59 -1
- package/src/hooks/useScrollableArea.ts +34 -10
- package/src/index.ts +3 -0
- package/src/inputFontFloor.test.ts +106 -0
- package/src/tailwind-theme.css +0 -6
- package/src/theme/Theme.test.tsx +32 -0
- package/src/theme/declarationBoundary.test.ts +126 -0
- package/src/theme/declarationBoundary.ts +347 -0
- package/src/theme/defineTheme.ts +4 -0
- package/src/theme/derivedVarRegistry.test.ts +7 -0
- package/src/theme/derivedVarRegistry.ts +1 -0
- package/src/theme/generateThemeRules.test.ts +526 -1
- package/src/theme/generateThemeRules.ts +231 -50
- package/src/theme/themeAdaptations.test.ts +211 -1
- package/src/theme/themeAdaptations.ts +50 -4
- package/src/theme/tokenValueCompat.test.ts +4 -1
- package/src/utils/inputPresentation.ts +143 -0
- package/src/utils/interactionOverlay.stylex.ts +20 -0
- package/src/utils/safeUrl.test.ts +88 -0
- package/src/utils/safeUrl.ts +85 -0
|
@@ -6,14 +6,22 @@
|
|
|
6
6
|
* Shared logic for generating CSS rules from a resolved theme definition,
|
|
7
7
|
* including one component-leaf lowering path for root, adaptation, and
|
|
8
8
|
* media-surface values plus condition-correct Heading weight precedence guards.
|
|
9
|
+
* Built adaptation metadata resolves against the same root component defaults
|
|
10
|
+
* as defineTheme, so scale-only rules do not reset authored component styles.
|
|
9
11
|
* Used by both the runtime path (Theme injects <style>) and the build
|
|
10
12
|
* path (`astryx theme build` pre-compiles to CSS files).
|
|
11
13
|
*
|
|
14
|
+
* Every consumer-supplied declaration is checked by declarationBoundary.ts
|
|
15
|
+
* before it is emitted, so a value can never end its declaration or rule
|
|
16
|
+
* early. A refused declaration is dropped and reported in the supplied
|
|
17
|
+
* warnings array (build receipts), or through `console.warn` (runtime).
|
|
18
|
+
*
|
|
12
19
|
* Extracted from defineTheme.ts to reduce cyclomatic complexity and provide
|
|
13
20
|
* a clear single-responsibility module for CSS generation.
|
|
14
21
|
*
|
|
15
|
-
* @input DefinedTheme (resolved theme object from defineTheme)
|
|
16
|
-
* @output CSS rule strings, split by layer (component vs prose)
|
|
22
|
+
* @input DefinedTheme (resolved theme object from defineTheme), optional warnings array
|
|
23
|
+
* @output CSS rule strings, split by layer (component vs prose), and warning text
|
|
24
|
+
* for each dropped declaration
|
|
17
25
|
* @position packages/core/src/theme/generateThemeRules.ts
|
|
18
26
|
*/
|
|
19
27
|
|
|
@@ -22,6 +30,7 @@ import { parseStyleKey } from "../utils/parseStyleKey.js";
|
|
|
22
30
|
import { getDerivedVars } from "./derivedVarRegistry.js";
|
|
23
31
|
import { dataTokenDefaults } from "./domainTokens/dataTokens.js";
|
|
24
32
|
import { cssVar, classPrefix, dataAttrNamespace } from "../naming.js";
|
|
33
|
+
import { checkDeclarationName, checkDeclarationValue } from "./declarationBoundary.js";
|
|
25
34
|
|
|
26
35
|
/**
|
|
27
36
|
* Theme @scope selectors.
|
|
@@ -284,6 +293,77 @@ function expandContainerPadding(component, parsed, resetInheritedSpecificity = f
|
|
|
284
293
|
return tokens;
|
|
285
294
|
}
|
|
286
295
|
|
|
296
|
+
// =============================================================================
|
|
297
|
+
// Declaration assembly: a declaration always stays one declaration
|
|
298
|
+
// =============================================================================
|
|
299
|
+
|
|
300
|
+
const warnToConsole = message => {
|
|
301
|
+
console.warn(`[astryx theme] ${message}`);
|
|
302
|
+
};
|
|
303
|
+
|
|
304
|
+
/** Build receipts collect warning text; runtime callers warn by default. */
|
|
305
|
+
function diagnosticSink(warnings) {
|
|
306
|
+
return warnings ? message => warnings.push(message) : warnToConsole;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/** Shorten an authored value for a one-line message. */
|
|
310
|
+
function previewValue(value) {
|
|
311
|
+
const oneLine = JSON.stringify(value);
|
|
312
|
+
return oneLine.length > 80 ? `${oneLine.slice(0, 77)}..."` : oneLine;
|
|
313
|
+
}
|
|
314
|
+
function reportDrop(sink, property, value, location, reason) {
|
|
315
|
+
sink(`dropped "${property}" in ${location}: ${reason} (value: ${previewValue(value)})`);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* True when `name: value;` stays exactly one declaration; otherwise reports
|
|
320
|
+
* the drop and returns false. Both checks follow CSS syntax, so valid CSS a
|
|
321
|
+
* browser keeps inside one declaration (a `data:` URI, `Gill\ Sans`, a closed
|
|
322
|
+
* comment, a vendor-prefixed property) is never refused; see
|
|
323
|
+
* declarationBoundary.ts for the rules.
|
|
324
|
+
*/
|
|
325
|
+
function acceptDeclaration(property, value, location, sink) {
|
|
326
|
+
const reason = checkDeclarationName(property) ?? checkDeclarationValue(value);
|
|
327
|
+
if (reason === null) {
|
|
328
|
+
return true;
|
|
329
|
+
}
|
|
330
|
+
reportDrop(sink, property, value, location, reason);
|
|
331
|
+
return false;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
* Assemble `prop: value;` lines, dropping (and reporting) any entry whose
|
|
336
|
+
* property or value could not stay a single declaration. Theme definitions
|
|
337
|
+
* are code, but apps do assemble them from stored input (brand colors,
|
|
338
|
+
* white-labeling), so the generated stylesheet must never extend beyond the
|
|
339
|
+
* declarations it means to emit.
|
|
340
|
+
*/
|
|
341
|
+
function joinDeclarations(entries, location, sink, mapProp = p => p) {
|
|
342
|
+
const lines = [];
|
|
343
|
+
for (const [rawProp, rawValue] of entries) {
|
|
344
|
+
// Legacy unenrolled tokens retain non-string values. Scan the same text
|
|
345
|
+
// interpolation has always emitted, without changing the normalized theme.
|
|
346
|
+
const value = `${rawValue}`;
|
|
347
|
+
const prop = mapProp(rawProp);
|
|
348
|
+
if (acceptDeclaration(prop, value, location, sink)) {
|
|
349
|
+
lines.push(` ${prop}: ${value};`);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return lines.join('\n');
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
/** The `:scope` token block for portable and theme-local token values. */
|
|
356
|
+
function tokenBlock(source, location, sink) {
|
|
357
|
+
const declarations = [joinDeclarations(Object.entries(source.tokens), `${location}tokens`, sink), joinDeclarations(Object.entries(source.localTokens ?? {}), `${location}localTokens`, sink)].filter(block => block.length > 0).join('\n');
|
|
358
|
+
const hasEntries = Object.keys(source.tokens).length > 0 || Object.keys(source.localTokens ?? {}).length > 0;
|
|
359
|
+
return hasEntries ? ` :scope {\n${declarations}\n }` : null;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/** `components.button["variant:secondary"]`-style location for a rule. */
|
|
363
|
+
function componentLocation(prefix, component, key) {
|
|
364
|
+
return `${prefix}components.${component}[${JSON.stringify(key)}]`;
|
|
365
|
+
}
|
|
366
|
+
|
|
287
367
|
// =============================================================================
|
|
288
368
|
// Public API
|
|
289
369
|
// =============================================================================
|
|
@@ -303,9 +383,9 @@ function expandContainerPadding(component, parsed, resetInheritedSpecificity = f
|
|
|
303
383
|
* lost for every conditional rule, with no type error to catch it.
|
|
304
384
|
*/
|
|
305
385
|
|
|
306
|
-
export function generateThemeRules(theme) {
|
|
386
|
+
export function generateThemeRules(theme, warnings) {
|
|
307
387
|
const parts = [];
|
|
308
|
-
const
|
|
388
|
+
const sink = diagnosticSink(warnings);
|
|
309
389
|
|
|
310
390
|
// Bare prose rules reference semantic variables instead of baking the root
|
|
311
391
|
// value. That lets adaptation token writes take effect through CSS alone
|
|
@@ -313,16 +393,27 @@ export function generateThemeRules(theme) {
|
|
|
313
393
|
const val = key => `var(${key})`;
|
|
314
394
|
|
|
315
395
|
// 1. Token block — CSS custom properties on :scope
|
|
316
|
-
const
|
|
317
|
-
if (
|
|
318
|
-
|
|
319
|
-
|
|
396
|
+
const tokenRules = tokenBlock(theme, '', sink);
|
|
397
|
+
if (tokenRules !== null) {
|
|
398
|
+
parts.push(tokenRules);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
// 1b. Base font — apply the theme's declared body font to the scope root.
|
|
402
|
+
// Components styled with `font-family: inherit` (SideNav items, Buttons)
|
|
403
|
+
// otherwise resolve against the browser default serif, since nothing else
|
|
404
|
+
// sets a page font. `font-family` inherits, so one rule on :scope covers
|
|
405
|
+
// the tree. Only emitted when the theme declares a body font, so a bare
|
|
406
|
+
// theme still contributes no scope rules of its own.
|
|
407
|
+
if (theme.tokens['--font-family-body']) {
|
|
408
|
+
parts.push(` :scope {\n font-family: var(--font-family-body);\n }`);
|
|
320
409
|
}
|
|
321
410
|
|
|
322
411
|
// 2. Component overrides: stable .astryx-* target classes combined with
|
|
323
412
|
// reflected data-* selectors for visual props and runtime states.
|
|
324
413
|
if (theme.components) {
|
|
325
|
-
generateComponentRules(theme.components, parts
|
|
414
|
+
generateComponentRules(theme.components, parts, {
|
|
415
|
+
sink
|
|
416
|
+
});
|
|
326
417
|
}
|
|
327
418
|
|
|
328
419
|
// 3. Prose HTML element rules (h1-h6, p, small, code, hr)
|
|
@@ -386,13 +477,21 @@ function generateHeadingWeightOverrides(components, parts, {
|
|
|
386
477
|
parts.push(` ${selector} { font-weight: ${effectiveWeight}; }`);
|
|
387
478
|
}
|
|
388
479
|
}
|
|
480
|
+
|
|
481
|
+
/**
|
|
482
|
+
* The `fontWeight` a heading rule authors for `styleKey`, or undefined when
|
|
483
|
+
* it has none. A value that cannot stay one declaration is treated as not
|
|
484
|
+
* authored, so the override falls back to the inherited or token weight
|
|
485
|
+
* instead of interpolating it; the drop itself is reported where that same
|
|
486
|
+
* rule's declarations are emitted, so it is not reported twice here.
|
|
487
|
+
*/
|
|
389
488
|
function getAuthoredHeadingWeight(headingRuleMap, styleKey) {
|
|
390
489
|
const rule = headingRuleMap[styleKey];
|
|
391
490
|
if (rule == null || typeof rule !== 'object' || Array.isArray(rule)) {
|
|
392
491
|
return undefined;
|
|
393
492
|
}
|
|
394
493
|
const fontWeight = rule.fontWeight;
|
|
395
|
-
return typeof fontWeight === 'string' ? fontWeight : undefined;
|
|
494
|
+
return typeof fontWeight === 'string' && checkDeclarationValue(fontWeight) === null ? fontWeight : undefined;
|
|
396
495
|
}
|
|
397
496
|
|
|
398
497
|
/** Options shared by root, adaptation, and media-surface component lowering. */
|
|
@@ -404,7 +503,9 @@ function getAuthoredHeadingWeight(headingRuleMap, styleKey) {
|
|
|
404
503
|
*/
|
|
405
504
|
function generateComponentRules(components, parts, {
|
|
406
505
|
resetInheritedPaddingSpecificity = false,
|
|
407
|
-
surface
|
|
506
|
+
surface,
|
|
507
|
+
sink = warnToConsole,
|
|
508
|
+
location: locationPrefix = ''
|
|
408
509
|
} = {}) {
|
|
409
510
|
for (const [component, rules] of Object.entries(components)) {
|
|
410
511
|
for (const [key, styles] of Object.entries(rules)) {
|
|
@@ -414,6 +515,7 @@ function generateComponentRules(components, parts, {
|
|
|
414
515
|
}
|
|
415
516
|
const suffix = parseStyleKey(key);
|
|
416
517
|
const baseSelector = componentSelector(component, suffix, surface);
|
|
518
|
+
const location = componentLocation(locationPrefix, component, key);
|
|
417
519
|
|
|
418
520
|
// Separate regular properties from pseudo-class overrides
|
|
419
521
|
const props = [];
|
|
@@ -421,7 +523,7 @@ function generateComponentRules(components, parts, {
|
|
|
421
523
|
for (const [prop, value] of entries) {
|
|
422
524
|
if (prop.startsWith(':') && typeof value === 'object') {
|
|
423
525
|
pseudos.push([prop, value]);
|
|
424
|
-
} else {
|
|
526
|
+
} else if (acceptDeclaration(toKebabCase(prop), `${value}`, location, sink)) {
|
|
425
527
|
props.push([prop, value]);
|
|
426
528
|
}
|
|
427
529
|
}
|
|
@@ -483,7 +585,7 @@ function generateComponentRules(components, parts, {
|
|
|
483
585
|
|
|
484
586
|
// Emit base rule
|
|
485
587
|
if (finalProps.length > 0) {
|
|
486
|
-
const declarations = finalProps
|
|
588
|
+
const declarations = joinDeclarations(finalProps, location, sink, toKebabCase);
|
|
487
589
|
parts.push(` ${baseSelector} {\n${declarations}\n }`);
|
|
488
590
|
}
|
|
489
591
|
|
|
@@ -491,7 +593,7 @@ function generateComponentRules(components, parts, {
|
|
|
491
593
|
for (const [pseudo, pseudoStyles] of pseudos) {
|
|
492
594
|
const pseudoEntries = Object.entries(pseudoStyles);
|
|
493
595
|
if (pseudoEntries.length > 0) {
|
|
494
|
-
const declarations = pseudoEntries
|
|
596
|
+
const declarations = joinDeclarations(pseudoEntries, `${location}[${JSON.stringify(pseudo)}]`, sink, toKebabCase);
|
|
495
597
|
parts.push(` ${appendPseudoToSelectorList(baseSelector, pseudo)} {\n${declarations}\n }`);
|
|
496
598
|
}
|
|
497
599
|
}
|
|
@@ -629,8 +731,8 @@ function generateSizeOverrides(components, parts, surface) {
|
|
|
629
731
|
* Component rules (tokens, stable .astryx-* targets plus data-* selectors) are
|
|
630
732
|
* that need to beat StyleX — they stay in astryx-theme (above StyleX layers).
|
|
631
733
|
*/
|
|
632
|
-
export function generateThemeRulesSplit(theme) {
|
|
633
|
-
const allRules = generateThemeRules(theme);
|
|
734
|
+
export function generateThemeRulesSplit(theme, warnings) {
|
|
735
|
+
const allRules = generateThemeRules(theme, warnings);
|
|
634
736
|
const prose = [];
|
|
635
737
|
const component = [];
|
|
636
738
|
for (const rule of allRules) {
|
|
@@ -654,19 +756,21 @@ export function generateThemeRulesSplit(theme) {
|
|
|
654
756
|
* to media contexts — only tokens change. Themes can further customize
|
|
655
757
|
* via onDark.components / onLight.components.
|
|
656
758
|
*/
|
|
657
|
-
export function generateOnMediaCSS(theme) {
|
|
759
|
+
export function generateOnMediaCSS(theme, warnings) {
|
|
658
760
|
const parts = [];
|
|
659
761
|
const scopeSelector = themeScopeStart(theme.name);
|
|
762
|
+
const sink = diagnosticSink(warnings);
|
|
660
763
|
for (const surface of ['dark', 'light']) {
|
|
661
764
|
const onMedia = surface === 'dark' ? theme.__onDark : theme.__onLight;
|
|
662
765
|
if (!onMedia) {
|
|
663
766
|
continue;
|
|
664
767
|
}
|
|
768
|
+
const location = surface === 'dark' ? 'onDark.' : 'onLight.';
|
|
665
769
|
|
|
666
770
|
// Token overrides
|
|
667
771
|
const tokenEntries = Object.entries(onMedia.tokens);
|
|
668
772
|
if (tokenEntries.length > 0) {
|
|
669
|
-
const declarations = tokenEntries
|
|
773
|
+
const declarations = joinDeclarations(tokenEntries, `${location}tokens`, sink);
|
|
670
774
|
parts.push(` ${mediaSelector(surface)} {\n${declarations}\n }`);
|
|
671
775
|
}
|
|
672
776
|
|
|
@@ -675,7 +779,9 @@ export function generateOnMediaCSS(theme) {
|
|
|
675
779
|
if (onMedia.components) {
|
|
676
780
|
generateComponentRules(onMedia.components, parts, {
|
|
677
781
|
resetInheritedPaddingSpecificity: true,
|
|
678
|
-
surface
|
|
782
|
+
surface,
|
|
783
|
+
sink,
|
|
784
|
+
location
|
|
679
785
|
});
|
|
680
786
|
generateColorOverrides(onMedia.components, parts, surface);
|
|
681
787
|
generateSizeOverrides(onMedia.components, parts, surface);
|
|
@@ -697,16 +803,17 @@ export function generateOnMediaCSS(theme) {
|
|
|
697
803
|
}
|
|
698
804
|
|
|
699
805
|
/** Generate only the declarations one adaptation rule writes. */
|
|
700
|
-
function generateAdaptationRuleRules(rule) {
|
|
806
|
+
function generateAdaptationRuleRules(rule, location, sink) {
|
|
701
807
|
const parts = [];
|
|
702
|
-
const
|
|
703
|
-
if (
|
|
704
|
-
|
|
705
|
-
parts.push(` :scope {\n${declarations}\n }`);
|
|
808
|
+
const tokens = tokenBlock(rule, location, sink);
|
|
809
|
+
if (tokens !== null) {
|
|
810
|
+
parts.push(tokens);
|
|
706
811
|
}
|
|
707
812
|
if (rule.components) {
|
|
708
813
|
generateComponentRules(rule.components, parts, {
|
|
709
|
-
resetInheritedPaddingSpecificity: true
|
|
814
|
+
resetInheritedPaddingSpecificity: true,
|
|
815
|
+
sink,
|
|
816
|
+
location
|
|
710
817
|
});
|
|
711
818
|
generateColorOverrides(rule.components, parts);
|
|
712
819
|
generateSizeOverrides(rule.components, parts);
|
|
@@ -730,12 +837,13 @@ function generateAdaptationMediaBlock(query, parts, scopeSelector) {
|
|
|
730
837
|
* rule. Bare prose follows semantic variables, so token writes need no duplicate
|
|
731
838
|
* prose selectors here.
|
|
732
839
|
*/
|
|
733
|
-
export function generateAdaptationCSS(theme) {
|
|
840
|
+
export function generateAdaptationCSS(theme, warnings) {
|
|
841
|
+
const sink = diagnosticSink(warnings);
|
|
734
842
|
// Built themes can reach this compiler without passing through defineTheme.
|
|
735
843
|
// Validate retained metadata even when it has no rules (and therefore emits
|
|
736
844
|
// no CSS): width points remain observable through AppShell and inheritance.
|
|
737
845
|
const normalizedAdaptations = theme.__adaptations === undefined ? undefined : normalizeThemeAdaptations(theme.name, theme.__adaptations, undefined);
|
|
738
|
-
const rules = theme.__adaptationRules ?? (normalizedAdaptations ? resolveThemeAdaptationRules(theme.name, normalizedAdaptations, theme.__axes ?? {}, theme.tokens, theme.localTokens) : undefined);
|
|
846
|
+
const rules = theme.__adaptationRules ?? (normalizedAdaptations ? resolveThemeAdaptationRules(theme.name, normalizedAdaptations, theme.__axes ?? {}, theme.tokens, theme.localTokens, theme.components) : undefined);
|
|
739
847
|
if (!rules || rules.length === 0) {
|
|
740
848
|
return {
|
|
741
849
|
prose: '',
|
|
@@ -751,8 +859,8 @@ export function generateAdaptationCSS(theme) {
|
|
|
751
859
|
// active whenever the later condition matches, even if the earlier condition
|
|
752
860
|
// does not. Pairwise merging cannot repair that: multiple mutually exclusive
|
|
753
861
|
// earlier rules can each overlap one broad later rule.
|
|
754
|
-
for (const rule of rules) {
|
|
755
|
-
const parts = generateAdaptationRuleRules(rule);
|
|
862
|
+
for (const [index, rule] of rules.entries()) {
|
|
863
|
+
const parts = generateAdaptationRuleRules(rule, `adaptations[${index}].`, sink);
|
|
756
864
|
if (parts.length === 0) {
|
|
757
865
|
continue;
|
|
758
866
|
}
|
|
@@ -787,9 +895,9 @@ export function generateAdaptationCSS(theme) {
|
|
|
787
895
|
};
|
|
788
896
|
}
|
|
789
897
|
|
|
790
|
-
/** Indent
|
|
898
|
+
/** Indent the rule start without rewriting newlines inside authored values. */
|
|
791
899
|
function indentRule(rule) {
|
|
792
|
-
return
|
|
900
|
+
return ` ${rule}`;
|
|
793
901
|
}
|
|
794
902
|
|
|
795
903
|
/**
|
|
@@ -828,11 +936,11 @@ export function generateDataTokenDefaultsCSS() {
|
|
|
828
936
|
* The theme-independent `--color-data-*` defaults are not part of this output:
|
|
829
937
|
* see `generateDataTokenDefaultsCSS`.
|
|
830
938
|
*/
|
|
831
|
-
export function generateThemeCSS(theme) {
|
|
939
|
+
export function generateThemeCSS(theme, warnings) {
|
|
832
940
|
const {
|
|
833
941
|
component,
|
|
834
942
|
prose
|
|
835
|
-
} = generateThemeRulesSplit(theme);
|
|
943
|
+
} = generateThemeRulesSplit(theme, warnings);
|
|
836
944
|
const scopeSelector = themeScopeStart(theme.name);
|
|
837
945
|
const scopeTo = THEME_SCOPE_TO;
|
|
838
946
|
let proseCss = '';
|
|
@@ -851,11 +959,11 @@ export function generateThemeCSS(theme) {
|
|
|
851
959
|
|
|
852
960
|
// Adaptations follow the root theme in authored order. Media-surface rules
|
|
853
961
|
// follow adaptations so onDark/onLight keep their specified precedence.
|
|
854
|
-
const adaptationCss = generateAdaptationCSS(theme);
|
|
962
|
+
const adaptationCss = generateAdaptationCSS(theme, warnings);
|
|
855
963
|
if (adaptationCss.component) {
|
|
856
964
|
componentCss = componentCss ? `${componentCss}\n\n${adaptationCss.component}` : adaptationCss.component;
|
|
857
965
|
}
|
|
858
|
-
const onMediaCss = generateOnMediaCSS(theme);
|
|
966
|
+
const onMediaCss = generateOnMediaCSS(theme, warnings);
|
|
859
967
|
if (onMediaCss) {
|
|
860
968
|
componentCss = componentCss ? `${componentCss}\n\n${onMediaCss}` : onMediaCss;
|
|
861
969
|
}
|
|
@@ -7,8 +7,10 @@
|
|
|
7
7
|
* Adaptations are deliberately closed and ordered. Width points are fixed names,
|
|
8
8
|
* sparse rules and reserved token routing are rejected during normalization,
|
|
9
9
|
* condition fields are ANDed, and rule order is the precedence model: every
|
|
10
|
-
* matching rule writes after the root theme and later matching writes win.
|
|
11
|
-
*
|
|
10
|
+
* matching rule writes after the root theme and later matching writes win.
|
|
11
|
+
* Invariant type-scale component defaults already declared at root are omitted;
|
|
12
|
+
* authored rule leaves and generated token writes retain their cascade order.
|
|
13
|
+
* Token cycles are judged after each reachable ordered cascade is complete.
|
|
12
14
|
*
|
|
13
15
|
* SYNC: When modified, update:
|
|
14
16
|
* - /packages/core/src/theme/defineTheme.ts (`DefineThemeInput.adaptations`)
|
|
@@ -123,5 +125,5 @@ export declare function normalizeThemeAdaptations(themeName: string, inherited:
|
|
|
123
125
|
*/
|
|
124
126
|
export declare function resolveThemeGenerativeAxes(inherited: ThemeGenerativeAxes | undefined, own: ThemeGenerativeAxes): ThemeGenerativeAxes;
|
|
125
127
|
/** Lower ordered normalized rules to concrete CSS writes. */
|
|
126
|
-
export declare function resolveThemeAdaptationRules(themeName: string, adaptations: NormalizedThemeAdaptations, axes: ThemeGenerativeAxes, rootTokens: Record<string, string>, rootLocalTokens: Record<string, string> | undefined): ResolvedThemeAdaptationRule[] | undefined;
|
|
128
|
+
export declare function resolveThemeAdaptationRules(themeName: string, adaptations: NormalizedThemeAdaptations, axes: ThemeGenerativeAxes, rootTokens: Record<string, string>, rootLocalTokens: Record<string, string> | undefined, rootComponents?: ComponentStyleMap): ResolvedThemeAdaptationRule[] | undefined;
|
|
127
129
|
//# sourceMappingURL=themeAdaptations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"themeAdaptations.d.ts","sourceRoot":"","sources":["../../src/theme/themeAdaptations.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"themeAdaptations.d.ts","sourceRoot":"","sources":["../../src/theme/themeAdaptations.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAC,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAC,MAAM,eAAe,CAAC;AAC5E,OAAO,KAAK,EAAC,gBAAgB,EAAiB,MAAM,SAAS,CAAC;AAC9D,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AAQzD,wDAAwD;AACxD,eAAO,MAAM,sBAAsB,0CAA2C,CAAC;AAE/E,gDAAgD;AAChD,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1E,+EAA+E;AAC/E,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;AAEnE,qEAAqE;AACrE,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,gBAAgB,CAO7D,CAAC;AAEL,yEAAyE;AACzE,MAAM,WAAW,6BAA6B;IAC5C,2CAA2C;IAC3C,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,6CAA6C;IAC7C,KAAK,CAAC,EAAE,mBAAmB,CAAC;CAC7B;AAED,mEAAmE;AACnE,MAAM,WAAW,wBAAwB;IACvC,sDAAsD;IACtD,KAAK,CAAC,EAAE,6BAA6B,CAAC;IACtC,yCAAyC;IACzC,OAAO,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC5B,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,eAAe,CAAC;IAC7C,sCAAsC;IACtC,MAAM,CAAC,EAAE,QAAQ,GAAG,eAAe,CAAC;CACrC;AAED,sDAAsD;AACtD,MAAM,WAAW,+BAAgC,SAAQ,IAAI,CAC3D,gBAAgB,EAChB,OAAO,CACR;IACC,kEAAkE;IAClE,KAAK,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;CACzD;AAED,iDAAiD;AACjD,MAAM,WAAW,oBAAoB;IACnC,+DAA+D;IAC/D,UAAU,CAAC,EAAE,+BAA+B,CAAC;IAC7C,0DAA0D;IAC1D,KAAK,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAClC,2DAA2D;IAC3D,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACpC,2DAA2D;IAC3D,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACpC,sCAAsC;IACtC,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IAChD,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACzC,yCAAyC;IACzC,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED,sDAAsD;AACtD,MAAM,WAAW,mBAAmB;IAClC,gDAAgD;IAChD,IAAI,EAAE,wBAAwB,CAAC;IAC/B,wDAAwD;IACxD,KAAK,EAAE,oBAAoB,CAAC;CAC7B;AAED,0DAA0D;AAC1D,MAAM,WAAW,gBAAgB;IAC/B,mFAAmF;IACnF,gBAAgB,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC7C,wCAAwC;IACxC,KAAK,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAC/B;AAMD,+EAA+E;AAC/E,MAAM,WAAW,0BAA0B;IACzC,gFAAgF;IAChF,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,0EAA0E;IAC1E,KAAK,EAAE,mBAAmB,EAAE,CAAC;CAC9B;AAED,6EAA6E;AAC7E,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED,+CAA+C;AAC/C,MAAM,WAAW,2BAA2B;IAC1C,qDAAqD;IACrD,IAAI,EAAE,wBAAwB,CAAC;IAC/B,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,uDAAuD;IACvD,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAuOD;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,0BAA0B,GAAG,SAAS,EACjD,KAAK,EAAE,gBAAgB,GAAG,SAAS,GAClC,0BAA0B,CAmD5B;AAqWD;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,mBAAmB,GAAG,SAAS,EAC1C,GAAG,EAAE,mBAAmB,GACvB,mBAAmB,CAqFrB;AAsCD,6DAA6D;AAC7D,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,0BAA0B,EACvC,IAAI,EAAE,mBAAmB,EACzB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EACnD,cAAc,CAAC,EAAE,iBAAiB,GACjC,2BAA2B,EAAE,GAAG,SAAS,CA2E3C"}
|
|
@@ -9,8 +9,10 @@
|
|
|
9
9
|
* Adaptations are deliberately closed and ordered. Width points are fixed names,
|
|
10
10
|
* sparse rules and reserved token routing are rejected during normalization,
|
|
11
11
|
* condition fields are ANDed, and rule order is the precedence model: every
|
|
12
|
-
* matching rule writes after the root theme and later matching writes win.
|
|
13
|
-
*
|
|
12
|
+
* matching rule writes after the root theme and later matching writes win.
|
|
13
|
+
* Invariant type-scale component defaults already declared at root are omitted;
|
|
14
|
+
* authored rule leaves and generated token writes retain their cascade order.
|
|
15
|
+
* Token cycles are judged after each reachable ordered cascade is complete.
|
|
14
16
|
*
|
|
15
17
|
* SYNC: When modified, update:
|
|
16
18
|
* - /packages/core/src/theme/defineTheme.ts (`DefineThemeInput.adaptations`)
|
|
@@ -572,13 +574,39 @@ export function resolveThemeGenerativeAxes(inherited, own) {
|
|
|
572
574
|
};
|
|
573
575
|
}
|
|
574
576
|
|
|
577
|
+
/**
|
|
578
|
+
* Type-scale component generation is invariant var() wiring, not scale values.
|
|
579
|
+
* Keep root declarations (including authored pins) in the root cascade instead
|
|
580
|
+
* of resetting them in a rule that only changes tokens. Fill missing root paths
|
|
581
|
+
* for rule-only scales, and retain every authored rule leaf, even when it equals
|
|
582
|
+
* the root: that write may intentionally undo an earlier matching rule.
|
|
583
|
+
*
|
|
584
|
+
* SYNC: expandTypeScale.ts (generateTypeScaleComponents)
|
|
585
|
+
*/
|
|
586
|
+
function omitRootTypeScaleDefaults(resolved, root, authored) {
|
|
587
|
+
if (!resolved || !root) {
|
|
588
|
+
return resolved;
|
|
589
|
+
}
|
|
590
|
+
const components = {};
|
|
591
|
+
for (const [component, rules] of Object.entries(resolved)) {
|
|
592
|
+
for (const [key, styles] of Object.entries(rules)) {
|
|
593
|
+
const writes = Object.fromEntries(Object.entries(styles).filter(([property]) => root[component]?.[key]?.[property] === undefined || Object.hasOwn(authored?.[component]?.[key] ?? {}, property)));
|
|
594
|
+
if (Object.keys(writes).length > 0) {
|
|
595
|
+
(components[component] ??= {})[key] = writes;
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
return Object.keys(components).length > 0 ? components : undefined;
|
|
600
|
+
}
|
|
601
|
+
|
|
575
602
|
/** Lower ordered normalized rules to concrete CSS writes. */
|
|
576
|
-
export function resolveThemeAdaptationRules(themeName, adaptations, axes, rootTokens, rootLocalTokens) {
|
|
603
|
+
export function resolveThemeAdaptationRules(themeName, adaptations, axes, rootTokens, rootLocalTokens, rootComponents) {
|
|
577
604
|
if (adaptations.rules.length === 0) {
|
|
578
605
|
return undefined;
|
|
579
606
|
}
|
|
580
607
|
const resolvedRules = adaptations.rules.map((rule, index) => {
|
|
581
|
-
const
|
|
608
|
+
const input = valueToThemeInput(themeName, index, rule.value, axes);
|
|
609
|
+
const resolved = resolveThemeValues(input, undefined,
|
|
582
610
|
// Authored adaptation values are a new surface with no legacy
|
|
583
611
|
// acceptance to preserve, so a malformed token is rejected here rather
|
|
584
612
|
// than emitted. The root path stays lenient for compatibility.
|
|
@@ -603,7 +631,7 @@ export function resolveThemeAdaptationRules(themeName, adaptations, axes, rootTo
|
|
|
603
631
|
query: mediaQueryForCondition(themeName, index, rule.when, adaptations.widthBreakpoints),
|
|
604
632
|
tokens: resolved.tokens,
|
|
605
633
|
localTokens,
|
|
606
|
-
components: resolved.components
|
|
634
|
+
components: input.typography?.scale ? omitRootTypeScaleDefaults(resolved.components, rootComponents, rule.value.components) : resolved.components
|
|
607
635
|
};
|
|
608
636
|
});
|
|
609
637
|
assertNoReachableTokenCycles(themeName, adaptations.widthBreakpoints, rootTokens, rootLocalTokens, resolvedRules);
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file inputPresentation.ts
|
|
3
|
+
* @input A presentation policy, the deprecated nativePicker value, and pointer type
|
|
4
|
+
* @output The resolved picker surface for DateInput, DateTimeInput, and TimeInput
|
|
5
|
+
* @position Shared presentation vocabulary owned by spec:AST-043
|
|
6
|
+
*
|
|
7
|
+
* SYNC: When modified, update these files to stay in sync:
|
|
8
|
+
* - /docs/specs/AST-043-input-presentation/spec.md (FR1–FR3 tables)
|
|
9
|
+
* - /packages/core/src/DateInput/DateInput.tsx
|
|
10
|
+
* - /packages/core/src/DateTimeInput/DateTimeInput.tsx
|
|
11
|
+
* - /packages/core/src/TimeInput/TimeInput.tsx
|
|
12
|
+
*/
|
|
13
|
+
/** Picker-surface policy for date/time inputs (`spec:AST-043` FR1). */
|
|
14
|
+
export type InputPresentation = 'text-input' | 'popover' | 'bottom-sheet' | 'native' | 'adaptive-bottom-sheet' | 'adaptive-native';
|
|
15
|
+
/** `presentation` for components without a text-only surface: all except `TimeInput` exclude `text-input` (AST-043). */
|
|
16
|
+
export type PickerPresentation = Exclude<InputPresentation, 'text-input'>;
|
|
17
|
+
/** The surface a resolved `InputPresentation` actually renders. */
|
|
18
|
+
export type InputPresentationSurface = 'text-input' | 'desktop' | 'sheet' | 'native';
|
|
19
|
+
/** The surface a resolved `PickerPresentation` renders: one where a picker opens. */
|
|
20
|
+
export type PickerPresentationSurface = Exclude<InputPresentationSurface, 'text-input'>;
|
|
21
|
+
/** Deprecated picker policy (`spec:AST-043` FR3). */
|
|
22
|
+
export type LegacyNativePicker = 'touch' | 'always' | 'never';
|
|
23
|
+
/**
|
|
24
|
+
* Typed as the narrower policy because the default opens a picker for every
|
|
25
|
+
* component; it is still a valid `InputPresentation`.
|
|
26
|
+
*/
|
|
27
|
+
export declare const DEFAULT_INPUT_PRESENTATION: PickerPresentation;
|
|
28
|
+
/**
|
|
29
|
+
* Map a deprecated `nativePicker` value to its `presentation` equivalent for
|
|
30
|
+
* a component whose every surface opens a picker (`DateInput`,
|
|
31
|
+
* `DateTimeInput`). Their released `never` was Astryx's own pickers on every
|
|
32
|
+
* pointer, so no value maps to `text-input` — which is what lets the return
|
|
33
|
+
* type exclude it.
|
|
34
|
+
*/
|
|
35
|
+
export declare function pickerPresentationFromNativePicker(nativePicker: LegacyNativePicker): PickerPresentation;
|
|
36
|
+
/**
|
|
37
|
+
* Map a deprecated `nativePicker` value to its `presentation` equivalent.
|
|
38
|
+
* `TimeInput` differs: its released `never` is the typed field on every
|
|
39
|
+
* pointer, so it maps to `text-input`, not a sheet policy.
|
|
40
|
+
*/
|
|
41
|
+
export declare function presentationFromNativePicker(nativePicker: LegacyNativePicker, component: 'date' | 'time'): InputPresentation;
|
|
42
|
+
/**
|
|
43
|
+
* The effective picker-only policy: explicit `presentation` wins over the
|
|
44
|
+
* deprecated prop. The narrow twin of {@link effectiveInputPresentation} for
|
|
45
|
+
* `DateInput` and `DateTimeInput`, whose `presentation` cannot be
|
|
46
|
+
* `text-input`.
|
|
47
|
+
*/
|
|
48
|
+
export declare function effectivePickerPresentation(presentation: PickerPresentation | undefined, nativePicker: LegacyNativePicker | undefined): PickerPresentation;
|
|
49
|
+
/** The effective policy: explicit `presentation` wins over the deprecated prop. */
|
|
50
|
+
export declare function effectiveInputPresentation(presentation: InputPresentation | undefined, nativePicker: LegacyNativePicker | undefined, component: 'date' | 'time'): InputPresentation;
|
|
51
|
+
/** Resolve a picker-only policy to the surface rendered for the current pointer. */
|
|
52
|
+
export declare function resolvePickerPresentation(presentation: PickerPresentation, isCoarsePointer: boolean): PickerPresentationSurface;
|
|
53
|
+
/** Resolve a policy to the surface rendered for the current pointer. */
|
|
54
|
+
export declare function resolveInputPresentation(presentation: InputPresentation, isCoarsePointer: boolean): InputPresentationSurface;
|
|
55
|
+
//# sourceMappingURL=inputPresentation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputPresentation.d.ts","sourceRoot":"","sources":["../../src/utils/inputPresentation.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,uEAAuE;AACvE,MAAM,MAAM,iBAAiB,GACzB,YAAY,GACZ,SAAS,GACT,cAAc,GACd,QAAQ,GACR,uBAAuB,GACvB,iBAAiB,CAAC;AAEtB,wHAAwH;AACxH,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;AAE1E,mEAAmE;AACnE,MAAM,MAAM,wBAAwB,GAClC,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEhD,qFAAqF;AACrF,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAC7C,wBAAwB,EACxB,YAAY,CACb,CAAC;AAEF,qDAAqD;AACrD,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE9D;;;GAGG;AACH,eAAO,MAAM,0BAA0B,EAAE,kBAAsC,CAAC;AAEhF;;;;;;GAMG;AACH,wBAAgB,kCAAkC,CAChD,YAAY,EAAE,kBAAkB,GAC/B,kBAAkB,CASpB;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,YAAY,EAAE,kBAAkB,EAChC,SAAS,EAAE,MAAM,GAAG,MAAM,GACzB,iBAAiB,CAKnB;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,kBAAkB,GAAG,SAAS,EAC5C,YAAY,EAAE,kBAAkB,GAAG,SAAS,GAC3C,kBAAkB,CAQpB;AAED,mFAAmF;AACnF,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,iBAAiB,GAAG,SAAS,EAC3C,YAAY,EAAE,kBAAkB,GAAG,SAAS,EAC5C,SAAS,EAAE,MAAM,GAAG,MAAM,GACzB,iBAAiB,CAQnB;AAED,oFAAoF;AACpF,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,kBAAkB,EAChC,eAAe,EAAE,OAAO,GACvB,yBAAyB,CAa3B;AAED,wEAAwE;AACxE,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,iBAAiB,EAC/B,eAAe,EAAE,OAAO,GACvB,wBAAwB,CAI1B"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file inputPresentation.ts
|
|
5
|
+
* @input A presentation policy, the deprecated nativePicker value, and pointer type
|
|
6
|
+
* @output The resolved picker surface for DateInput, DateTimeInput, and TimeInput
|
|
7
|
+
* @position Shared presentation vocabulary owned by spec:AST-043
|
|
8
|
+
*
|
|
9
|
+
* SYNC: When modified, update these files to stay in sync:
|
|
10
|
+
* - /docs/specs/AST-043-input-presentation/spec.md (FR1–FR3 tables)
|
|
11
|
+
* - /packages/core/src/DateInput/DateInput.tsx
|
|
12
|
+
* - /packages/core/src/DateTimeInput/DateTimeInput.tsx
|
|
13
|
+
* - /packages/core/src/TimeInput/TimeInput.tsx
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/** Picker-surface policy for date/time inputs (`spec:AST-043` FR1). */
|
|
17
|
+
|
|
18
|
+
/** `presentation` for components without a text-only surface: all except `TimeInput` exclude `text-input` (AST-043). */
|
|
19
|
+
|
|
20
|
+
/** The surface a resolved `InputPresentation` actually renders. */
|
|
21
|
+
|
|
22
|
+
/** The surface a resolved `PickerPresentation` renders: one where a picker opens. */
|
|
23
|
+
|
|
24
|
+
/** Deprecated picker policy (`spec:AST-043` FR3). */
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Typed as the narrower policy because the default opens a picker for every
|
|
28
|
+
* component; it is still a valid `InputPresentation`.
|
|
29
|
+
*/
|
|
30
|
+
export const DEFAULT_INPUT_PRESENTATION = 'adaptive-native';
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Map a deprecated `nativePicker` value to its `presentation` equivalent for
|
|
34
|
+
* a component whose every surface opens a picker (`DateInput`,
|
|
35
|
+
* `DateTimeInput`). Their released `never` was Astryx's own pickers on every
|
|
36
|
+
* pointer, so no value maps to `text-input` — which is what lets the return
|
|
37
|
+
* type exclude it.
|
|
38
|
+
*/
|
|
39
|
+
export function pickerPresentationFromNativePicker(nativePicker) {
|
|
40
|
+
switch (nativePicker) {
|
|
41
|
+
case 'touch':
|
|
42
|
+
return 'adaptive-native';
|
|
43
|
+
case 'always':
|
|
44
|
+
return 'native';
|
|
45
|
+
case 'never':
|
|
46
|
+
return 'adaptive-bottom-sheet';
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Map a deprecated `nativePicker` value to its `presentation` equivalent.
|
|
52
|
+
* `TimeInput` differs: its released `never` is the typed field on every
|
|
53
|
+
* pointer, so it maps to `text-input`, not a sheet policy.
|
|
54
|
+
*/
|
|
55
|
+
export function presentationFromNativePicker(nativePicker, component) {
|
|
56
|
+
if (component === 'time' && nativePicker === 'never') {
|
|
57
|
+
return 'text-input';
|
|
58
|
+
}
|
|
59
|
+
return pickerPresentationFromNativePicker(nativePicker);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* The effective picker-only policy: explicit `presentation` wins over the
|
|
64
|
+
* deprecated prop. The narrow twin of {@link effectiveInputPresentation} for
|
|
65
|
+
* `DateInput` and `DateTimeInput`, whose `presentation` cannot be
|
|
66
|
+
* `text-input`.
|
|
67
|
+
*/
|
|
68
|
+
export function effectivePickerPresentation(presentation, nativePicker) {
|
|
69
|
+
if (presentation !== undefined) {
|
|
70
|
+
return presentation;
|
|
71
|
+
}
|
|
72
|
+
if (nativePicker !== undefined) {
|
|
73
|
+
return pickerPresentationFromNativePicker(nativePicker);
|
|
74
|
+
}
|
|
75
|
+
return DEFAULT_INPUT_PRESENTATION;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** The effective policy: explicit `presentation` wins over the deprecated prop. */
|
|
79
|
+
export function effectiveInputPresentation(presentation, nativePicker, component) {
|
|
80
|
+
if (presentation !== undefined) {
|
|
81
|
+
return presentation;
|
|
82
|
+
}
|
|
83
|
+
if (nativePicker !== undefined) {
|
|
84
|
+
return presentationFromNativePicker(nativePicker, component);
|
|
85
|
+
}
|
|
86
|
+
return DEFAULT_INPUT_PRESENTATION;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** Resolve a picker-only policy to the surface rendered for the current pointer. */
|
|
90
|
+
export function resolvePickerPresentation(presentation, isCoarsePointer) {
|
|
91
|
+
switch (presentation) {
|
|
92
|
+
case 'popover':
|
|
93
|
+
return 'desktop';
|
|
94
|
+
case 'bottom-sheet':
|
|
95
|
+
return 'sheet';
|
|
96
|
+
case 'native':
|
|
97
|
+
return 'native';
|
|
98
|
+
case 'adaptive-bottom-sheet':
|
|
99
|
+
return isCoarsePointer ? 'sheet' : 'desktop';
|
|
100
|
+
case 'adaptive-native':
|
|
101
|
+
return isCoarsePointer ? 'native' : 'desktop';
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/** Resolve a policy to the surface rendered for the current pointer. */
|
|
106
|
+
export function resolveInputPresentation(presentation, isCoarsePointer) {
|
|
107
|
+
return presentation === 'text-input' ? 'text-input' : resolvePickerPresentation(presentation, isCoarsePointer);
|
|
108
|
+
}
|
|
@@ -4,6 +4,11 @@
|
|
|
4
4
|
* @output Exports reusable background-color and background-image state styles
|
|
5
5
|
* @position Internal styling utility for interactive core surfaces
|
|
6
6
|
*
|
|
7
|
+
* Every surface that paints a press composes one of these (or carries its own
|
|
8
|
+
* `:active` rule), so a change to how the system answers a press is made here
|
|
9
|
+
* once. `pressedBackgroundColor` is the press without the hover, for controls
|
|
10
|
+
* whose hover is a colour or nothing.
|
|
11
|
+
*
|
|
7
12
|
* Keep the enabled guard outside the individual states. StyleX assigns an
|
|
8
13
|
* extra priority bucket (and generated selector specificity) to media-nested
|
|
9
14
|
* rules. Repeating `:active` inside the hover-capable branch gives hover and
|
|
@@ -22,5 +27,8 @@ export declare const interactionOverlayStyles: Readonly<{
|
|
|
22
27
|
readonly backgroundImageOnNeutral: Readonly<{
|
|
23
28
|
readonly backgroundImage: stylex.StyleXClassNameFor<"backgroundImage", string | null>;
|
|
24
29
|
}>;
|
|
30
|
+
readonly pressedBackgroundColor: Readonly<{
|
|
31
|
+
readonly backgroundColor: stylex.StyleXClassNameFor<"backgroundColor", "light-dark(#05365919, #FFFFFF19)" | null>;
|
|
32
|
+
}>;
|
|
25
33
|
}>;
|
|
26
34
|
//# sourceMappingURL=interactionOverlay.stylex.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactionOverlay.stylex.d.ts","sourceRoot":"","sources":["../../src/utils/interactionOverlay.stylex.ts"],"names":[],"mappings":"AAMA
|
|
1
|
+
{"version":3,"file":"interactionOverlay.stylex.d.ts","sourceRoot":"","sources":["../../src/utils/interactionOverlay.stylex.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAU3C,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;EA0DnC,CAAC"}
|