@astryxdesign/core 0.6.2 → 0.6.3-canary.0788c49
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/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/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.map +1 -1
- package/dist/DateInput/DateInput.js +4 -4
- 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/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +4 -4
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +8 -8
- package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
- package/dist/DateTimeInput/TouchDateTimeField.js +4 -4
- 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.map +1 -1
- package/dist/TimeInput/TimeInput.js +4 -4
- 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/derivedVarRegistry.d.ts.map +1 -1
- package/dist/theme/derivedVarRegistry.js +4 -0
- package/dist/theme/generateThemeRules.d.ts +13 -7
- package/dist/theme/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +140 -34
- 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/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/__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/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.tsx +6 -1
- package/src/DateInput/NativeDateField.tsx +24 -8
- package/src/DateInput/TouchDateField.tsx +6 -2
- package/src/DateRangeInput/DateRangeInput.tsx +6 -1
- package/src/DateTimeInput/DateTimeInput.tsx +6 -1
- package/src/DateTimeInput/TouchDateTimeField.tsx +6 -1
- 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/TimeInput.tsx +6 -1
- 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/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 +228 -50
- package/src/theme/tokenValueCompat.test.ts +4 -1
- package/src/utils/interactionOverlay.stylex.ts +20 -0
- package/src/utils/safeUrl.test.ts +88 -0
- package/src/utils/safeUrl.ts +85 -0
|
@@ -9,11 +9,17 @@
|
|
|
9
9
|
* Used by both the runtime path (Theme injects <style>) and the build
|
|
10
10
|
* path (`astryx theme build` pre-compiles to CSS files).
|
|
11
11
|
*
|
|
12
|
+
* Every consumer-supplied declaration is checked by declarationBoundary.ts
|
|
13
|
+
* before it is emitted, so a value can never end its declaration or rule
|
|
14
|
+
* early. A refused declaration is dropped and reported in the supplied
|
|
15
|
+
* warnings array (build receipts), or through `console.warn` (runtime).
|
|
16
|
+
*
|
|
12
17
|
* Extracted from defineTheme.ts to reduce cyclomatic complexity and provide
|
|
13
18
|
* a clear single-responsibility module for CSS generation.
|
|
14
19
|
*
|
|
15
|
-
* @input DefinedTheme (resolved theme object from defineTheme)
|
|
16
|
-
* @output CSS rule strings, split by layer (component vs prose)
|
|
20
|
+
* @input DefinedTheme (resolved theme object from defineTheme), optional warnings array
|
|
21
|
+
* @output CSS rule strings, split by layer (component vs prose), and warning text
|
|
22
|
+
* for each dropped declaration
|
|
17
23
|
* @position packages/core/src/theme/generateThemeRules.ts
|
|
18
24
|
*/
|
|
19
25
|
|
|
@@ -22,6 +28,7 @@ import { parseStyleKey } from "../utils/parseStyleKey.js";
|
|
|
22
28
|
import { getDerivedVars } from "./derivedVarRegistry.js";
|
|
23
29
|
import { dataTokenDefaults } from "./domainTokens/dataTokens.js";
|
|
24
30
|
import { cssVar, classPrefix, dataAttrNamespace } from "../naming.js";
|
|
31
|
+
import { checkDeclarationName, checkDeclarationValue } from "./declarationBoundary.js";
|
|
25
32
|
|
|
26
33
|
/**
|
|
27
34
|
* Theme @scope selectors.
|
|
@@ -284,6 +291,77 @@ function expandContainerPadding(component, parsed, resetInheritedSpecificity = f
|
|
|
284
291
|
return tokens;
|
|
285
292
|
}
|
|
286
293
|
|
|
294
|
+
// =============================================================================
|
|
295
|
+
// Declaration assembly: a declaration always stays one declaration
|
|
296
|
+
// =============================================================================
|
|
297
|
+
|
|
298
|
+
const warnToConsole = message => {
|
|
299
|
+
console.warn(`[astryx theme] ${message}`);
|
|
300
|
+
};
|
|
301
|
+
|
|
302
|
+
/** Build receipts collect warning text; runtime callers warn by default. */
|
|
303
|
+
function diagnosticSink(warnings) {
|
|
304
|
+
return warnings ? message => warnings.push(message) : warnToConsole;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/** Shorten an authored value for a one-line message. */
|
|
308
|
+
function previewValue(value) {
|
|
309
|
+
const oneLine = JSON.stringify(value);
|
|
310
|
+
return oneLine.length > 80 ? `${oneLine.slice(0, 77)}..."` : oneLine;
|
|
311
|
+
}
|
|
312
|
+
function reportDrop(sink, property, value, location, reason) {
|
|
313
|
+
sink(`dropped "${property}" in ${location}: ${reason} (value: ${previewValue(value)})`);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* True when `name: value;` stays exactly one declaration; otherwise reports
|
|
318
|
+
* the drop and returns false. Both checks follow CSS syntax, so valid CSS a
|
|
319
|
+
* browser keeps inside one declaration (a `data:` URI, `Gill\ Sans`, a closed
|
|
320
|
+
* comment, a vendor-prefixed property) is never refused; see
|
|
321
|
+
* declarationBoundary.ts for the rules.
|
|
322
|
+
*/
|
|
323
|
+
function acceptDeclaration(property, value, location, sink) {
|
|
324
|
+
const reason = checkDeclarationName(property) ?? checkDeclarationValue(value);
|
|
325
|
+
if (reason === null) {
|
|
326
|
+
return true;
|
|
327
|
+
}
|
|
328
|
+
reportDrop(sink, property, value, location, reason);
|
|
329
|
+
return false;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* Assemble `prop: value;` lines, dropping (and reporting) any entry whose
|
|
334
|
+
* property or value could not stay a single declaration. Theme definitions
|
|
335
|
+
* are code, but apps do assemble them from stored input (brand colors,
|
|
336
|
+
* white-labeling), so the generated stylesheet must never extend beyond the
|
|
337
|
+
* declarations it means to emit.
|
|
338
|
+
*/
|
|
339
|
+
function joinDeclarations(entries, location, sink, mapProp = p => p) {
|
|
340
|
+
const lines = [];
|
|
341
|
+
for (const [rawProp, rawValue] of entries) {
|
|
342
|
+
// Legacy unenrolled tokens retain non-string values. Scan the same text
|
|
343
|
+
// interpolation has always emitted, without changing the normalized theme.
|
|
344
|
+
const value = `${rawValue}`;
|
|
345
|
+
const prop = mapProp(rawProp);
|
|
346
|
+
if (acceptDeclaration(prop, value, location, sink)) {
|
|
347
|
+
lines.push(` ${prop}: ${value};`);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
return lines.join('\n');
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/** The `:scope` token block for portable and theme-local token values. */
|
|
354
|
+
function tokenBlock(source, location, sink) {
|
|
355
|
+
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');
|
|
356
|
+
const hasEntries = Object.keys(source.tokens).length > 0 || Object.keys(source.localTokens ?? {}).length > 0;
|
|
357
|
+
return hasEntries ? ` :scope {\n${declarations}\n }` : null;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/** `components.button["variant:secondary"]`-style location for a rule. */
|
|
361
|
+
function componentLocation(prefix, component, key) {
|
|
362
|
+
return `${prefix}components.${component}[${JSON.stringify(key)}]`;
|
|
363
|
+
}
|
|
364
|
+
|
|
287
365
|
// =============================================================================
|
|
288
366
|
// Public API
|
|
289
367
|
// =============================================================================
|
|
@@ -303,9 +381,9 @@ function expandContainerPadding(component, parsed, resetInheritedSpecificity = f
|
|
|
303
381
|
* lost for every conditional rule, with no type error to catch it.
|
|
304
382
|
*/
|
|
305
383
|
|
|
306
|
-
export function generateThemeRules(theme) {
|
|
384
|
+
export function generateThemeRules(theme, warnings) {
|
|
307
385
|
const parts = [];
|
|
308
|
-
const
|
|
386
|
+
const sink = diagnosticSink(warnings);
|
|
309
387
|
|
|
310
388
|
// Bare prose rules reference semantic variables instead of baking the root
|
|
311
389
|
// value. That lets adaptation token writes take effect through CSS alone
|
|
@@ -313,16 +391,27 @@ export function generateThemeRules(theme) {
|
|
|
313
391
|
const val = key => `var(${key})`;
|
|
314
392
|
|
|
315
393
|
// 1. Token block — CSS custom properties on :scope
|
|
316
|
-
const
|
|
317
|
-
if (
|
|
318
|
-
|
|
319
|
-
|
|
394
|
+
const tokenRules = tokenBlock(theme, '', sink);
|
|
395
|
+
if (tokenRules !== null) {
|
|
396
|
+
parts.push(tokenRules);
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
// 1b. Base font — apply the theme's declared body font to the scope root.
|
|
400
|
+
// Components styled with `font-family: inherit` (SideNav items, Buttons)
|
|
401
|
+
// otherwise resolve against the browser default serif, since nothing else
|
|
402
|
+
// sets a page font. `font-family` inherits, so one rule on :scope covers
|
|
403
|
+
// the tree. Only emitted when the theme declares a body font, so a bare
|
|
404
|
+
// theme still contributes no scope rules of its own.
|
|
405
|
+
if (theme.tokens['--font-family-body']) {
|
|
406
|
+
parts.push(` :scope {\n font-family: var(--font-family-body);\n }`);
|
|
320
407
|
}
|
|
321
408
|
|
|
322
409
|
// 2. Component overrides: stable .astryx-* target classes combined with
|
|
323
410
|
// reflected data-* selectors for visual props and runtime states.
|
|
324
411
|
if (theme.components) {
|
|
325
|
-
generateComponentRules(theme.components, parts
|
|
412
|
+
generateComponentRules(theme.components, parts, {
|
|
413
|
+
sink
|
|
414
|
+
});
|
|
326
415
|
}
|
|
327
416
|
|
|
328
417
|
// 3. Prose HTML element rules (h1-h6, p, small, code, hr)
|
|
@@ -386,13 +475,21 @@ function generateHeadingWeightOverrides(components, parts, {
|
|
|
386
475
|
parts.push(` ${selector} { font-weight: ${effectiveWeight}; }`);
|
|
387
476
|
}
|
|
388
477
|
}
|
|
478
|
+
|
|
479
|
+
/**
|
|
480
|
+
* The `fontWeight` a heading rule authors for `styleKey`, or undefined when
|
|
481
|
+
* it has none. A value that cannot stay one declaration is treated as not
|
|
482
|
+
* authored, so the override falls back to the inherited or token weight
|
|
483
|
+
* instead of interpolating it; the drop itself is reported where that same
|
|
484
|
+
* rule's declarations are emitted, so it is not reported twice here.
|
|
485
|
+
*/
|
|
389
486
|
function getAuthoredHeadingWeight(headingRuleMap, styleKey) {
|
|
390
487
|
const rule = headingRuleMap[styleKey];
|
|
391
488
|
if (rule == null || typeof rule !== 'object' || Array.isArray(rule)) {
|
|
392
489
|
return undefined;
|
|
393
490
|
}
|
|
394
491
|
const fontWeight = rule.fontWeight;
|
|
395
|
-
return typeof fontWeight === 'string' ? fontWeight : undefined;
|
|
492
|
+
return typeof fontWeight === 'string' && checkDeclarationValue(fontWeight) === null ? fontWeight : undefined;
|
|
396
493
|
}
|
|
397
494
|
|
|
398
495
|
/** Options shared by root, adaptation, and media-surface component lowering. */
|
|
@@ -404,7 +501,9 @@ function getAuthoredHeadingWeight(headingRuleMap, styleKey) {
|
|
|
404
501
|
*/
|
|
405
502
|
function generateComponentRules(components, parts, {
|
|
406
503
|
resetInheritedPaddingSpecificity = false,
|
|
407
|
-
surface
|
|
504
|
+
surface,
|
|
505
|
+
sink = warnToConsole,
|
|
506
|
+
location: locationPrefix = ''
|
|
408
507
|
} = {}) {
|
|
409
508
|
for (const [component, rules] of Object.entries(components)) {
|
|
410
509
|
for (const [key, styles] of Object.entries(rules)) {
|
|
@@ -414,6 +513,7 @@ function generateComponentRules(components, parts, {
|
|
|
414
513
|
}
|
|
415
514
|
const suffix = parseStyleKey(key);
|
|
416
515
|
const baseSelector = componentSelector(component, suffix, surface);
|
|
516
|
+
const location = componentLocation(locationPrefix, component, key);
|
|
417
517
|
|
|
418
518
|
// Separate regular properties from pseudo-class overrides
|
|
419
519
|
const props = [];
|
|
@@ -421,7 +521,7 @@ function generateComponentRules(components, parts, {
|
|
|
421
521
|
for (const [prop, value] of entries) {
|
|
422
522
|
if (prop.startsWith(':') && typeof value === 'object') {
|
|
423
523
|
pseudos.push([prop, value]);
|
|
424
|
-
} else {
|
|
524
|
+
} else if (acceptDeclaration(toKebabCase(prop), `${value}`, location, sink)) {
|
|
425
525
|
props.push([prop, value]);
|
|
426
526
|
}
|
|
427
527
|
}
|
|
@@ -483,7 +583,7 @@ function generateComponentRules(components, parts, {
|
|
|
483
583
|
|
|
484
584
|
// Emit base rule
|
|
485
585
|
if (finalProps.length > 0) {
|
|
486
|
-
const declarations = finalProps
|
|
586
|
+
const declarations = joinDeclarations(finalProps, location, sink, toKebabCase);
|
|
487
587
|
parts.push(` ${baseSelector} {\n${declarations}\n }`);
|
|
488
588
|
}
|
|
489
589
|
|
|
@@ -491,7 +591,7 @@ function generateComponentRules(components, parts, {
|
|
|
491
591
|
for (const [pseudo, pseudoStyles] of pseudos) {
|
|
492
592
|
const pseudoEntries = Object.entries(pseudoStyles);
|
|
493
593
|
if (pseudoEntries.length > 0) {
|
|
494
|
-
const declarations = pseudoEntries
|
|
594
|
+
const declarations = joinDeclarations(pseudoEntries, `${location}[${JSON.stringify(pseudo)}]`, sink, toKebabCase);
|
|
495
595
|
parts.push(` ${appendPseudoToSelectorList(baseSelector, pseudo)} {\n${declarations}\n }`);
|
|
496
596
|
}
|
|
497
597
|
}
|
|
@@ -629,8 +729,8 @@ function generateSizeOverrides(components, parts, surface) {
|
|
|
629
729
|
* Component rules (tokens, stable .astryx-* targets plus data-* selectors) are
|
|
630
730
|
* that need to beat StyleX — they stay in astryx-theme (above StyleX layers).
|
|
631
731
|
*/
|
|
632
|
-
export function generateThemeRulesSplit(theme) {
|
|
633
|
-
const allRules = generateThemeRules(theme);
|
|
732
|
+
export function generateThemeRulesSplit(theme, warnings) {
|
|
733
|
+
const allRules = generateThemeRules(theme, warnings);
|
|
634
734
|
const prose = [];
|
|
635
735
|
const component = [];
|
|
636
736
|
for (const rule of allRules) {
|
|
@@ -654,19 +754,21 @@ export function generateThemeRulesSplit(theme) {
|
|
|
654
754
|
* to media contexts — only tokens change. Themes can further customize
|
|
655
755
|
* via onDark.components / onLight.components.
|
|
656
756
|
*/
|
|
657
|
-
export function generateOnMediaCSS(theme) {
|
|
757
|
+
export function generateOnMediaCSS(theme, warnings) {
|
|
658
758
|
const parts = [];
|
|
659
759
|
const scopeSelector = themeScopeStart(theme.name);
|
|
760
|
+
const sink = diagnosticSink(warnings);
|
|
660
761
|
for (const surface of ['dark', 'light']) {
|
|
661
762
|
const onMedia = surface === 'dark' ? theme.__onDark : theme.__onLight;
|
|
662
763
|
if (!onMedia) {
|
|
663
764
|
continue;
|
|
664
765
|
}
|
|
766
|
+
const location = surface === 'dark' ? 'onDark.' : 'onLight.';
|
|
665
767
|
|
|
666
768
|
// Token overrides
|
|
667
769
|
const tokenEntries = Object.entries(onMedia.tokens);
|
|
668
770
|
if (tokenEntries.length > 0) {
|
|
669
|
-
const declarations = tokenEntries
|
|
771
|
+
const declarations = joinDeclarations(tokenEntries, `${location}tokens`, sink);
|
|
670
772
|
parts.push(` ${mediaSelector(surface)} {\n${declarations}\n }`);
|
|
671
773
|
}
|
|
672
774
|
|
|
@@ -675,7 +777,9 @@ export function generateOnMediaCSS(theme) {
|
|
|
675
777
|
if (onMedia.components) {
|
|
676
778
|
generateComponentRules(onMedia.components, parts, {
|
|
677
779
|
resetInheritedPaddingSpecificity: true,
|
|
678
|
-
surface
|
|
780
|
+
surface,
|
|
781
|
+
sink,
|
|
782
|
+
location
|
|
679
783
|
});
|
|
680
784
|
generateColorOverrides(onMedia.components, parts, surface);
|
|
681
785
|
generateSizeOverrides(onMedia.components, parts, surface);
|
|
@@ -697,16 +801,17 @@ export function generateOnMediaCSS(theme) {
|
|
|
697
801
|
}
|
|
698
802
|
|
|
699
803
|
/** Generate only the declarations one adaptation rule writes. */
|
|
700
|
-
function generateAdaptationRuleRules(rule) {
|
|
804
|
+
function generateAdaptationRuleRules(rule, location, sink) {
|
|
701
805
|
const parts = [];
|
|
702
|
-
const
|
|
703
|
-
if (
|
|
704
|
-
|
|
705
|
-
parts.push(` :scope {\n${declarations}\n }`);
|
|
806
|
+
const tokens = tokenBlock(rule, location, sink);
|
|
807
|
+
if (tokens !== null) {
|
|
808
|
+
parts.push(tokens);
|
|
706
809
|
}
|
|
707
810
|
if (rule.components) {
|
|
708
811
|
generateComponentRules(rule.components, parts, {
|
|
709
|
-
resetInheritedPaddingSpecificity: true
|
|
812
|
+
resetInheritedPaddingSpecificity: true,
|
|
813
|
+
sink,
|
|
814
|
+
location
|
|
710
815
|
});
|
|
711
816
|
generateColorOverrides(rule.components, parts);
|
|
712
817
|
generateSizeOverrides(rule.components, parts);
|
|
@@ -730,7 +835,8 @@ function generateAdaptationMediaBlock(query, parts, scopeSelector) {
|
|
|
730
835
|
* rule. Bare prose follows semantic variables, so token writes need no duplicate
|
|
731
836
|
* prose selectors here.
|
|
732
837
|
*/
|
|
733
|
-
export function generateAdaptationCSS(theme) {
|
|
838
|
+
export function generateAdaptationCSS(theme, warnings) {
|
|
839
|
+
const sink = diagnosticSink(warnings);
|
|
734
840
|
// Built themes can reach this compiler without passing through defineTheme.
|
|
735
841
|
// Validate retained metadata even when it has no rules (and therefore emits
|
|
736
842
|
// no CSS): width points remain observable through AppShell and inheritance.
|
|
@@ -751,8 +857,8 @@ export function generateAdaptationCSS(theme) {
|
|
|
751
857
|
// active whenever the later condition matches, even if the earlier condition
|
|
752
858
|
// does not. Pairwise merging cannot repair that: multiple mutually exclusive
|
|
753
859
|
// earlier rules can each overlap one broad later rule.
|
|
754
|
-
for (const rule of rules) {
|
|
755
|
-
const parts = generateAdaptationRuleRules(rule);
|
|
860
|
+
for (const [index, rule] of rules.entries()) {
|
|
861
|
+
const parts = generateAdaptationRuleRules(rule, `adaptations[${index}].`, sink);
|
|
756
862
|
if (parts.length === 0) {
|
|
757
863
|
continue;
|
|
758
864
|
}
|
|
@@ -787,9 +893,9 @@ export function generateAdaptationCSS(theme) {
|
|
|
787
893
|
};
|
|
788
894
|
}
|
|
789
895
|
|
|
790
|
-
/** Indent
|
|
896
|
+
/** Indent the rule start without rewriting newlines inside authored values. */
|
|
791
897
|
function indentRule(rule) {
|
|
792
|
-
return
|
|
898
|
+
return ` ${rule}`;
|
|
793
899
|
}
|
|
794
900
|
|
|
795
901
|
/**
|
|
@@ -828,11 +934,11 @@ export function generateDataTokenDefaultsCSS() {
|
|
|
828
934
|
* The theme-independent `--color-data-*` defaults are not part of this output:
|
|
829
935
|
* see `generateDataTokenDefaultsCSS`.
|
|
830
936
|
*/
|
|
831
|
-
export function generateThemeCSS(theme) {
|
|
937
|
+
export function generateThemeCSS(theme, warnings) {
|
|
832
938
|
const {
|
|
833
939
|
component,
|
|
834
940
|
prose
|
|
835
|
-
} = generateThemeRulesSplit(theme);
|
|
941
|
+
} = generateThemeRulesSplit(theme, warnings);
|
|
836
942
|
const scopeSelector = themeScopeStart(theme.name);
|
|
837
943
|
const scopeTo = THEME_SCOPE_TO;
|
|
838
944
|
let proseCss = '';
|
|
@@ -851,11 +957,11 @@ export function generateThemeCSS(theme) {
|
|
|
851
957
|
|
|
852
958
|
// Adaptations follow the root theme in authored order. Media-surface rules
|
|
853
959
|
// follow adaptations so onDark/onLight keep their specified precedence.
|
|
854
|
-
const adaptationCss = generateAdaptationCSS(theme);
|
|
960
|
+
const adaptationCss = generateAdaptationCSS(theme, warnings);
|
|
855
961
|
if (adaptationCss.component) {
|
|
856
962
|
componentCss = componentCss ? `${componentCss}\n\n${adaptationCss.component}` : adaptationCss.component;
|
|
857
963
|
}
|
|
858
|
-
const onMediaCss = generateOnMediaCSS(theme);
|
|
964
|
+
const onMediaCss = generateOnMediaCSS(theme, warnings);
|
|
859
965
|
if (onMediaCss) {
|
|
860
966
|
componentCss = componentCss ? `${componentCss}\n\n${onMediaCss}` : onMediaCss;
|
|
861
967
|
}
|
|
@@ -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"}
|
|
@@ -10,6 +10,11 @@
|
|
|
10
10
|
* @output Exports reusable background-color and background-image state styles
|
|
11
11
|
* @position Internal styling utility for interactive core surfaces
|
|
12
12
|
*
|
|
13
|
+
* Every surface that paints a press composes one of these (or carries its own
|
|
14
|
+
* `:active` rule), so a change to how the system answers a press is made here
|
|
15
|
+
* once. `pressedBackgroundColor` is the press without the hover, for controls
|
|
16
|
+
* whose hover is a colour or nothing.
|
|
17
|
+
*
|
|
13
18
|
* Keep the enabled guard outside the individual states. StyleX assigns an
|
|
14
19
|
* extra priority bucket (and generated selector specificity) to media-nested
|
|
15
20
|
* rules. Repeating `:active` inside the hover-capable branch gives hover and
|
|
@@ -38,5 +43,9 @@ export const interactionOverlayStyles = {
|
|
|
38
43
|
backgroundImageOnNeutral: {
|
|
39
44
|
kKwaWg: "x14bno8m xzmimnh x1otsd3y xo3fi6e",
|
|
40
45
|
$$css: true
|
|
46
|
+
},
|
|
47
|
+
pressedBackgroundColor: {
|
|
48
|
+
kWkggS: "x1anq1lc",
|
|
49
|
+
$$css: true
|
|
41
50
|
}
|
|
42
51
|
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Return a normalized navigation URL, or null for a blocked scheme. */
|
|
2
|
+
export declare function sanitizeUrl(url: string): string | null;
|
|
3
|
+
/** Inspect a navigation string without changing the value used by its sink. */
|
|
4
|
+
export declare function isSafeUrl(url: string): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Inspect React Router paths, Next.js URL objects, and URL instances without
|
|
7
|
+
* serializing or replacing the object handed to the router. Search/query/hash
|
|
8
|
+
* are route-relative data, not schemes. Absent destinations remain absent.
|
|
9
|
+
*/
|
|
10
|
+
export declare function isSafeDestination(destination: unknown): boolean;
|
|
11
|
+
//# sourceMappingURL=safeUrl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safeUrl.d.ts","sourceRoot":"","sources":["../../src/utils/safeUrl.ts"],"names":[],"mappings":"AAcA,wEAAwE;AACxE,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWtD;AAED,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CA8C/D"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file safeUrl.ts
|
|
5
|
+
* @input Navigation strings or supported structured router destinations
|
|
6
|
+
* @output The shared blocked-scheme decision, without rewriting accepted inputs
|
|
7
|
+
* @position Core navigation policy; embedded-resource policy is separate
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
function normalizeUrl(url) {
|
|
11
|
+
// eslint-disable-next-line no-control-regex -- inspect schemes without browser-ignored controls
|
|
12
|
+
return url.replace(/[\x00-\x1f\x7f]/g, '').trim();
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/** Return a normalized navigation URL, or null for a blocked scheme. */
|
|
16
|
+
export function sanitizeUrl(url) {
|
|
17
|
+
const normalized = normalizeUrl(url);
|
|
18
|
+
const lower = normalized.toLowerCase();
|
|
19
|
+
if (lower.startsWith('javascript:') || lower.startsWith('vbscript:') || lower.startsWith('data:text/html')) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
return normalized;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Inspect a navigation string without changing the value used by its sink. */
|
|
26
|
+
export function isSafeUrl(url) {
|
|
27
|
+
return sanitizeUrl(url) !== null;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Inspect React Router paths, Next.js URL objects, and URL instances without
|
|
32
|
+
* serializing or replacing the object handed to the router. Search/query/hash
|
|
33
|
+
* are route-relative data, not schemes. Absent destinations remain absent.
|
|
34
|
+
*/
|
|
35
|
+
export function isSafeDestination(destination) {
|
|
36
|
+
if (destination == null) {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
if (typeof destination === 'string') {
|
|
40
|
+
return isSafeUrl(destination);
|
|
41
|
+
}
|
|
42
|
+
if (typeof destination !== 'object') {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
const {
|
|
46
|
+
pathname,
|
|
47
|
+
href,
|
|
48
|
+
protocol,
|
|
49
|
+
host,
|
|
50
|
+
hostname
|
|
51
|
+
} = destination;
|
|
52
|
+
for (const field of [pathname, href, protocol, host, hostname]) {
|
|
53
|
+
if (field != null && typeof field !== 'string') {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (typeof pathname === 'string' && !isSafeUrl(pathname)) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
if (typeof href === 'string' && !isSafeUrl(href)) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
if (typeof protocol === 'string' && protocol !== '') {
|
|
64
|
+
// URL-object formatters accept a protocol with or without its colon and
|
|
65
|
+
// can assemble a data media type from the host and pathname fields.
|
|
66
|
+
const normalizedProtocol = normalizeUrl(protocol);
|
|
67
|
+
const prefix = normalizedProtocol.endsWith(':') ? normalizedProtocol : `${normalizedProtocol}:`;
|
|
68
|
+
if (!isSafeUrl(prefix)) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
const body = host || hostname || '';
|
|
72
|
+
const path = typeof pathname === 'string' ? pathname : '';
|
|
73
|
+
if (!isSafeUrl(`${prefix}${body}${path}`)) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return true;
|
|
78
|
+
}
|