@astryxdesign/core 0.7.6-canary.eecd9c1 → 0.7.6-canary.f73623d
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/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +28 -19
- package/dist/Outline/Outline.d.ts.map +1 -1
- package/dist/Outline/Outline.js +27 -0
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +10 -3
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +5 -2
- package/dist/Table/Table.d.ts.map +1 -1
- package/dist/Table/Table.js +36 -10
- package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
- package/dist/Table/plugins/sortable/useTableSortable.js +46 -58
- package/dist/ToggleButton/ToggleButtonGroup.d.ts +7 -1
- package/dist/ToggleButton/ToggleButtonGroup.d.ts.map +1 -1
- package/dist/ToggleButton/ToggleButtonGroup.js +16 -2
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +37 -5
- package/dist/Token/TokenLink.d.ts.map +1 -1
- package/dist/Token/TokenLink.js +14 -2
- package/dist/i18n/generated-locales/af-ZA.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/af-ZA.generated.js +0 -5
- package/dist/i18n/generated-locales/ar-SA.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/ar-SA.generated.js +0 -5
- package/dist/i18n/generated-locales/ca-ES.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/ca-ES.generated.js +0 -5
- package/dist/i18n/generated-locales/cs-CZ.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/cs-CZ.generated.js +0 -5
- package/dist/i18n/generated-locales/da-DK.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/da-DK.generated.js +0 -5
- package/dist/i18n/generated-locales/de-DE.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/de-DE.generated.js +0 -5
- package/dist/i18n/generated-locales/el-GR.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/el-GR.generated.js +0 -5
- package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/en.generated.js +1 -5
- package/dist/i18n/generated-locales/es-ES.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/es-ES.generated.js +0 -5
- package/dist/i18n/generated-locales/fi-FI.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/fi-FI.generated.js +0 -5
- package/dist/i18n/generated-locales/fr-FR.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/fr-FR.generated.js +0 -5
- package/dist/i18n/generated-locales/he-IL.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/he-IL.generated.js +0 -5
- package/dist/i18n/generated-locales/hu-HU.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/hu-HU.generated.js +0 -5
- package/dist/i18n/generated-locales/it-IT.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/it-IT.generated.js +0 -5
- package/dist/i18n/generated-locales/ja-JP.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/ja-JP.generated.js +0 -5
- package/dist/i18n/generated-locales/ko-KR.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/ko-KR.generated.js +0 -5
- package/dist/i18n/generated-locales/nl-NL.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/nl-NL.generated.js +0 -5
- package/dist/i18n/generated-locales/no-NO.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/no-NO.generated.js +0 -5
- package/dist/i18n/generated-locales/pl-PL.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pl-PL.generated.js +0 -5
- package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pseudo.generated.js +1 -5
- package/dist/i18n/generated-locales/pt-BR.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pt-BR.generated.js +0 -5
- package/dist/i18n/generated-locales/pt-PT.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pt-PT.generated.js +0 -5
- package/dist/i18n/generated-locales/ro-RO.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/ro-RO.generated.js +0 -5
- package/dist/i18n/generated-locales/ru-RU.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/ru-RU.generated.js +0 -5
- package/dist/i18n/generated-locales/sr-SP.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/sr-SP.generated.js +0 -5
- package/dist/i18n/generated-locales/sv-SE.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/sv-SE.generated.js +0 -5
- package/dist/i18n/generated-locales/tr-TR.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/tr-TR.generated.js +0 -5
- package/dist/i18n/generated-locales/uk-UA.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/uk-UA.generated.js +0 -5
- package/dist/i18n/generated-locales/vi-VN.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/vi-VN.generated.js +0 -5
- package/dist/i18n/generated-locales/zh-CN.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/zh-CN.generated.js +0 -5
- package/dist/i18n/generated-locales/zh-TW.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/zh-TW.generated.js +0 -5
- package/locales/af-ZA.json +0 -21
- package/locales/ar-SA.json +0 -21
- package/locales/ca-ES.json +0 -21
- package/locales/cs-CZ.json +0 -21
- package/locales/da-DK.json +0 -21
- package/locales/de-DE.json +0 -21
- package/locales/el-GR.json +0 -21
- package/locales/en.json +3 -19
- package/locales/es-ES.json +0 -21
- package/locales/fi-FI.json +0 -21
- package/locales/fr-FR.json +0 -21
- package/locales/he-IL.json +0 -21
- package/locales/hu-HU.json +0 -21
- package/locales/it-IT.json +0 -21
- package/locales/ja-JP.json +0 -21
- package/locales/ko-KR.json +0 -21
- package/locales/nl-NL.json +0 -21
- package/locales/no-NO.json +0 -21
- package/locales/pl-PL.json +0 -21
- package/locales/pseudo.json +2 -14
- package/locales/pt-BR.json +0 -21
- package/locales/pt-PT.json +0 -21
- package/locales/ro-RO.json +0 -21
- package/locales/ru-RU.json +0 -21
- package/locales/sr-SP.json +0 -21
- package/locales/sv-SE.json +0 -21
- package/locales/tr-TR.json +0 -21
- package/locales/uk-UA.json +0 -21
- package/locales/vi-VN.json +0 -21
- package/locales/zh-CN.json +0 -21
- package/locales/zh-TW.json +0 -21
- package/package.json +4 -4
- package/src/Chat/ChatLayout.spec.md +41 -36
- package/src/Chat/ChatLayoutScrollButton.spec.md +87 -103
- package/src/Chat/ChatSendButton.spec.md +78 -67
- package/src/ContextMenu/ContextMenu.spec.md +84 -56
- package/src/ContextMenu/ContextMenuItem.spec.md +132 -0
- package/src/DropdownMenu/DropdownMenu.spec.md +198 -218
- package/src/DropdownMenu/DropdownMenu.test.tsx +117 -0
- package/src/DropdownMenu/DropdownMenu.tsx +33 -18
- package/src/DropdownMenu/DropdownMenuCheckboxItem.spec.md +192 -0
- package/src/DropdownMenu/DropdownMenuDivider.spec.md +25 -31
- package/src/DropdownMenu/DropdownMenuGroup.spec.md +145 -0
- package/src/DropdownMenu/DropdownMenuItem.spec.md +48 -42
- package/src/DropdownMenu/DropdownMenuRadioGroup.spec.md +34 -37
- package/src/DropdownMenu/DropdownMenuRadioItem.spec.md +54 -53
- package/src/DropdownMenu/DropdownMenuSubMenu.spec.md +47 -41
- package/src/EmptyState/EmptyState.spec.md +35 -29
- package/src/Outline/Outline.spec.md +165 -69
- package/src/Outline/Outline.test.tsx +67 -2
- package/src/Outline/Outline.tsx +23 -0
- package/src/Outline/modules/parseOutlineFromMarkdown.spec.md +3 -4
- package/src/Popover/Popover.test.tsx +44 -0
- package/src/Popover/usePopover.tsx +10 -3
- package/src/RadioList/RadioList.test.tsx +56 -0
- package/src/RadioList/RadioListItem.tsx +5 -2
- package/src/Table/Table.spec.md +1 -1
- package/src/Table/Table.test.tsx +32 -0
- package/src/Table/Table.tsx +43 -11
- package/src/Table/__tests__/Table.a11y.states.ts +1 -5
- package/src/Table/plugins/sortable/useTableSortable.test.tsx +73 -144
- package/src/Table/plugins/sortable/useTableSortable.tsx +44 -73
- package/src/Table/plugins/sortable/useTableSortableState.test.tsx +9 -21
- package/src/ToggleButton/ToggleButton.test.tsx +27 -0
- package/src/ToggleButton/ToggleButtonGroup.tsx +20 -1
- package/src/Token/Token.doc.mjs +2 -2
- package/src/Token/Token.spec.md +41 -51
- package/src/Token/Token.test.tsx +67 -0
- package/src/Token/Token.tsx +60 -5
- package/src/Token/TokenLink.tsx +21 -7
- package/src/i18n/generated-locales/af-ZA.generated.ts +0 -7
- package/src/i18n/generated-locales/ar-SA.generated.ts +0 -6
- package/src/i18n/generated-locales/ca-ES.generated.ts +0 -7
- package/src/i18n/generated-locales/cs-CZ.generated.ts +0 -6
- package/src/i18n/generated-locales/da-DK.generated.ts +0 -6
- package/src/i18n/generated-locales/de-DE.generated.ts +0 -6
- package/src/i18n/generated-locales/el-GR.generated.ts +0 -7
- package/src/i18n/generated-locales/en.generated.ts +1 -6
- package/src/i18n/generated-locales/es-ES.generated.ts +0 -7
- package/src/i18n/generated-locales/fi-FI.generated.ts +0 -6
- package/src/i18n/generated-locales/fr-FR.generated.ts +0 -7
- package/src/i18n/generated-locales/he-IL.generated.ts +0 -6
- package/src/i18n/generated-locales/hu-HU.generated.ts +0 -6
- package/src/i18n/generated-locales/it-IT.generated.ts +0 -7
- package/src/i18n/generated-locales/ja-JP.generated.ts +0 -6
- package/src/i18n/generated-locales/ko-KR.generated.ts +0 -6
- package/src/i18n/generated-locales/nl-NL.generated.ts +0 -6
- package/src/i18n/generated-locales/no-NO.generated.ts +0 -6
- package/src/i18n/generated-locales/pl-PL.generated.ts +0 -7
- package/src/i18n/generated-locales/pseudo.generated.ts +1 -6
- package/src/i18n/generated-locales/pt-BR.generated.ts +0 -7
- package/src/i18n/generated-locales/pt-PT.generated.ts +0 -7
- package/src/i18n/generated-locales/ro-RO.generated.ts +0 -6
- package/src/i18n/generated-locales/ru-RU.generated.ts +0 -7
- package/src/i18n/generated-locales/sr-SP.generated.ts +0 -6
- package/src/i18n/generated-locales/sv-SE.generated.ts +0 -6
- package/src/i18n/generated-locales/tr-TR.generated.ts +0 -7
- package/src/i18n/generated-locales/uk-UA.generated.ts +0 -7
- package/src/i18n/generated-locales/vi-VN.generated.ts +0 -6
- package/src/i18n/generated-locales/zh-CN.generated.ts +0 -6
- package/src/i18n/generated-locales/zh-TW.generated.ts +0 -6
package/locales/pseudo.json
CHANGED
|
@@ -650,20 +650,8 @@
|
|
|
650
650
|
"@astryx.table.sort.clear": {
|
|
651
651
|
"defaultMessage": "⟦Çłéàř šóřţ⟧"
|
|
652
652
|
},
|
|
653
|
-
"@astryx.table.sort.
|
|
654
|
-
"defaultMessage": "
|
|
655
|
-
},
|
|
656
|
-
"@astryx.table.sort.direction.descending": {
|
|
657
|
-
"defaultMessage": "⟦ðéšçéñðíñĝ⟧"
|
|
658
|
-
},
|
|
659
|
-
"@astryx.table.sort.sortBy": {
|
|
660
|
-
"defaultMessage": "⟦Šóřţ ƀý {label}⟧"
|
|
661
|
-
},
|
|
662
|
-
"@astryx.table.sort.sortedBy": {
|
|
663
|
-
"defaultMessage": "⟦Šóřţ ƀý {label}, šóřţéð {direction}⟧"
|
|
664
|
-
},
|
|
665
|
-
"@astryx.table.sort.sortedByWithPriority": {
|
|
666
|
-
"defaultMessage": "⟦Šóřţ ƀý {label}, šóřţéð {direction}, þříóříţý {rank, number} óƒ {total, number}⟧"
|
|
653
|
+
"@astryx.table.sort.priority": {
|
|
654
|
+
"defaultMessage": "⟦Þříóříţý {rank, number} óƒ {total, number}⟧"
|
|
667
655
|
},
|
|
668
656
|
"@astryx.toast.dismiss": {
|
|
669
657
|
"defaultMessage": "⟦Ðíšɱíšš ñóţíƒíçàţíóñ⟧"
|
package/locales/pt-BR.json
CHANGED
|
@@ -635,26 +635,6 @@
|
|
|
635
635
|
"defaultMessage": "Limpar ordenação",
|
|
636
636
|
"description": "Screen-reader-only label on a column header button that will remove the current sort. \"Clear\" here means remove, not transparent. Part of the sort set."
|
|
637
637
|
},
|
|
638
|
-
"@astryx.table.sort.direction.ascending": {
|
|
639
|
-
"defaultMessage": "crescente",
|
|
640
|
-
"description": "Localized direction word interpolated as `direction` into @astryx.table.sort.sortedBy and @astryx.table.sort.sortedByWithPriority."
|
|
641
|
-
},
|
|
642
|
-
"@astryx.table.sort.direction.descending": {
|
|
643
|
-
"defaultMessage": "decrescente",
|
|
644
|
-
"description": "Localized direction word interpolated as `direction` into @astryx.table.sort.sortedBy and @astryx.table.sort.sortedByWithPriority."
|
|
645
|
-
},
|
|
646
|
-
"@astryx.table.sort.sortBy": {
|
|
647
|
-
"defaultMessage": "Ordenar por {label}",
|
|
648
|
-
"description": "Aria label for a sortable Table header button when the column is unsorted. `label` is the column header text."
|
|
649
|
-
},
|
|
650
|
-
"@astryx.table.sort.sortedBy": {
|
|
651
|
-
"defaultMessage": "Ordenar por {label}, ordenado de forma {direction}",
|
|
652
|
-
"description": "Aria label for a sorted Table header button. `direction` is the localized direction word from @astryx.table.sort.direction.*."
|
|
653
|
-
},
|
|
654
|
-
"@astryx.table.sort.sortedByWithPriority": {
|
|
655
|
-
"defaultMessage": "Ordenar por {label}, ordenado de forma {direction}, prioridade {rank, number} de {total, number}",
|
|
656
|
-
"description": "Aria label for a sorted Table header button in multi-sort. `rank` is the 1-based position of this column in the sort order; `total` is the number of sorted columns."
|
|
657
|
-
},
|
|
658
638
|
"@astryx.toast.dismiss": {
|
|
659
639
|
"defaultMessage": "Dispensar notificação",
|
|
660
640
|
"description": "Screen-reader-only label on the X button of a Toast (transient notification popup). Distinct from `banner.dismiss` (persistent banner)."
|
|
@@ -1480,4 +1460,3 @@
|
|
|
1480
1460
|
"description": "Default summary on the closed trigger of a lab TransferListSelector, stating how many options are currently chosen. Consumers usually override this with a domain phrase (e.g. \"7 columns\")."
|
|
1481
1461
|
}
|
|
1482
1462
|
}
|
|
1483
|
-
|
package/locales/pt-PT.json
CHANGED
|
@@ -635,26 +635,6 @@
|
|
|
635
635
|
"defaultMessage": "Limpar ordenação",
|
|
636
636
|
"description": "Screen-reader-only label on a column header button that will remove the current sort. \"Clear\" here means remove, not transparent. Part of the sort set."
|
|
637
637
|
},
|
|
638
|
-
"@astryx.table.sort.direction.ascending": {
|
|
639
|
-
"defaultMessage": "ascendente",
|
|
640
|
-
"description": "Localized direction word interpolated as `direction` into @astryx.table.sort.sortedBy and @astryx.table.sort.sortedByWithPriority."
|
|
641
|
-
},
|
|
642
|
-
"@astryx.table.sort.direction.descending": {
|
|
643
|
-
"defaultMessage": "descendente",
|
|
644
|
-
"description": "Localized direction word interpolated as `direction` into @astryx.table.sort.sortedBy and @astryx.table.sort.sortedByWithPriority."
|
|
645
|
-
},
|
|
646
|
-
"@astryx.table.sort.sortBy": {
|
|
647
|
-
"defaultMessage": "Ordenar por {label}",
|
|
648
|
-
"description": "Aria label for a sortable Table header button when the column is unsorted. `label` is the column header text."
|
|
649
|
-
},
|
|
650
|
-
"@astryx.table.sort.sortedBy": {
|
|
651
|
-
"defaultMessage": "Ordenar por {label}, ordenado de forma {direction}",
|
|
652
|
-
"description": "Aria label for a sorted Table header button. `direction` is the localized direction word from @astryx.table.sort.direction.*."
|
|
653
|
-
},
|
|
654
|
-
"@astryx.table.sort.sortedByWithPriority": {
|
|
655
|
-
"defaultMessage": "Ordenar por {label}, ordenado de forma {direction}, prioridade {rank, number} de {total, number}",
|
|
656
|
-
"description": "Aria label for a sorted Table header button in multi-sort. `rank` is the 1-based position of this column in the sort order; `total` is the number of sorted columns."
|
|
657
|
-
},
|
|
658
638
|
"@astryx.toast.dismiss": {
|
|
659
639
|
"defaultMessage": "Dispensar notificação",
|
|
660
640
|
"description": "Screen-reader-only label on the X button of a Toast (transient notification popup). Distinct from `banner.dismiss` (persistent banner)."
|
|
@@ -1480,4 +1460,3 @@
|
|
|
1480
1460
|
"description": "Default summary on the closed trigger of a lab TransferListSelector, stating how many options are currently chosen. Consumers usually override this with a domain phrase (e.g. \"7 columns\")."
|
|
1481
1461
|
}
|
|
1482
1462
|
}
|
|
1483
|
-
|
package/locales/ro-RO.json
CHANGED
|
@@ -635,26 +635,6 @@
|
|
|
635
635
|
"defaultMessage": "Șterge sortarea",
|
|
636
636
|
"description": "Screen-reader-only label on a column header button that will remove the current sort. \"Clear\" here means remove, not transparent. Part of the sort set."
|
|
637
637
|
},
|
|
638
|
-
"@astryx.table.sort.direction.ascending": {
|
|
639
|
-
"defaultMessage": "crescător",
|
|
640
|
-
"description": "Localized direction word interpolated as `direction` into @astryx.table.sort.sortedBy and @astryx.table.sort.sortedByWithPriority."
|
|
641
|
-
},
|
|
642
|
-
"@astryx.table.sort.direction.descending": {
|
|
643
|
-
"defaultMessage": "descrescător",
|
|
644
|
-
"description": "Localized direction word interpolated as `direction` into @astryx.table.sort.sortedBy and @astryx.table.sort.sortedByWithPriority."
|
|
645
|
-
},
|
|
646
|
-
"@astryx.table.sort.sortBy": {
|
|
647
|
-
"defaultMessage": "Sortează după {label}",
|
|
648
|
-
"description": "Aria label for a sortable Table header button when the column is unsorted. `label` is the column header text."
|
|
649
|
-
},
|
|
650
|
-
"@astryx.table.sort.sortedBy": {
|
|
651
|
-
"defaultMessage": "Sortează după {label}, sortat {direction}",
|
|
652
|
-
"description": "Aria label for a sorted Table header button. `direction` is the localized direction word from @astryx.table.sort.direction.*."
|
|
653
|
-
},
|
|
654
|
-
"@astryx.table.sort.sortedByWithPriority": {
|
|
655
|
-
"defaultMessage": "Sortează după {label}, sortat {direction}, prioritatea {rank, number} din {total, number}",
|
|
656
|
-
"description": "Aria label for a sorted Table header button in multi-sort. `rank` is the 1-based position of this column in the sort order; `total` is the number of sorted columns."
|
|
657
|
-
},
|
|
658
638
|
"@astryx.toast.dismiss": {
|
|
659
639
|
"defaultMessage": "Închide notificarea",
|
|
660
640
|
"description": "Screen-reader-only label on the X button of a Toast (transient notification popup). Distinct from `banner.dismiss` (persistent banner)."
|
|
@@ -1480,4 +1460,3 @@
|
|
|
1480
1460
|
"description": "Default summary on the closed trigger of a lab TransferListSelector, stating how many options are currently chosen. Consumers usually override this with a domain phrase (e.g. \"7 columns\")."
|
|
1481
1461
|
}
|
|
1482
1462
|
}
|
|
1483
|
-
|
package/locales/ru-RU.json
CHANGED
|
@@ -635,26 +635,6 @@
|
|
|
635
635
|
"defaultMessage": "Сбросить сортировку",
|
|
636
636
|
"description": "Screen-reader-only label on a column header button that will remove the current sort. \"Clear\" here means remove, not transparent. Part of the sort set."
|
|
637
637
|
},
|
|
638
|
-
"@astryx.table.sort.direction.ascending": {
|
|
639
|
-
"defaultMessage": "по возрастанию",
|
|
640
|
-
"description": "Localized direction word interpolated as `direction` into @astryx.table.sort.sortedBy and @astryx.table.sort.sortedByWithPriority."
|
|
641
|
-
},
|
|
642
|
-
"@astryx.table.sort.direction.descending": {
|
|
643
|
-
"defaultMessage": "по убыванию",
|
|
644
|
-
"description": "Localized direction word interpolated as `direction` into @astryx.table.sort.sortedBy and @astryx.table.sort.sortedByWithPriority."
|
|
645
|
-
},
|
|
646
|
-
"@astryx.table.sort.sortBy": {
|
|
647
|
-
"defaultMessage": "Сортировать по {label}",
|
|
648
|
-
"description": "Aria label for a sortable Table header button when the column is unsorted. `label` is the column header text."
|
|
649
|
-
},
|
|
650
|
-
"@astryx.table.sort.sortedBy": {
|
|
651
|
-
"defaultMessage": "Сортировать по {label}, отсортировано {direction}",
|
|
652
|
-
"description": "Aria label for a sorted Table header button. `direction` is the localized direction word from @astryx.table.sort.direction.*."
|
|
653
|
-
},
|
|
654
|
-
"@astryx.table.sort.sortedByWithPriority": {
|
|
655
|
-
"defaultMessage": "Сортировать по {label}, отсортировано {direction}, приоритет {rank, number} из {total, number}",
|
|
656
|
-
"description": "Aria label for a sorted Table header button in multi-sort. `rank` is the 1-based position of this column in the sort order; `total` is the number of sorted columns."
|
|
657
|
-
},
|
|
658
638
|
"@astryx.toast.dismiss": {
|
|
659
639
|
"defaultMessage": "Закрыть уведомление",
|
|
660
640
|
"description": "Screen-reader-only label on the X button of a Toast (transient notification popup). Distinct from `banner.dismiss` (persistent banner)."
|
|
@@ -1480,4 +1460,3 @@
|
|
|
1480
1460
|
"description": "Default summary on the closed trigger of a lab TransferListSelector, stating how many options are currently chosen. Consumers usually override this with a domain phrase (e.g. \"7 columns\")."
|
|
1481
1461
|
}
|
|
1482
1462
|
}
|
|
1483
|
-
|
package/locales/sr-SP.json
CHANGED
|
@@ -635,26 +635,6 @@
|
|
|
635
635
|
"defaultMessage": "Обриши сортирање",
|
|
636
636
|
"description": "Screen-reader-only label on a column header button that will remove the current sort. \"Clear\" here means remove, not transparent. Part of the sort set."
|
|
637
637
|
},
|
|
638
|
-
"@astryx.table.sort.direction.ascending": {
|
|
639
|
-
"defaultMessage": "растуће",
|
|
640
|
-
"description": "Localized direction word interpolated as `direction` into @astryx.table.sort.sortedBy and @astryx.table.sort.sortedByWithPriority."
|
|
641
|
-
},
|
|
642
|
-
"@astryx.table.sort.direction.descending": {
|
|
643
|
-
"defaultMessage": "опадајуће",
|
|
644
|
-
"description": "Localized direction word interpolated as `direction` into @astryx.table.sort.sortedBy and @astryx.table.sort.sortedByWithPriority."
|
|
645
|
-
},
|
|
646
|
-
"@astryx.table.sort.sortBy": {
|
|
647
|
-
"defaultMessage": "Сортирај по {label}",
|
|
648
|
-
"description": "Aria label for a sortable Table header button when the column is unsorted. `label` is the column header text."
|
|
649
|
-
},
|
|
650
|
-
"@astryx.table.sort.sortedBy": {
|
|
651
|
-
"defaultMessage": "Сортирај по {label}, сортирано {direction}",
|
|
652
|
-
"description": "Aria label for a sorted Table header button. `direction` is the localized direction word from @astryx.table.sort.direction.*."
|
|
653
|
-
},
|
|
654
|
-
"@astryx.table.sort.sortedByWithPriority": {
|
|
655
|
-
"defaultMessage": "Сортирај по {label}, сортирано {direction}, приоритет {rank, number} од {total, number}",
|
|
656
|
-
"description": "Aria label for a sorted Table header button in multi-sort. `rank` is the 1-based position of this column in the sort order; `total` is the number of sorted columns."
|
|
657
|
-
},
|
|
658
638
|
"@astryx.toast.dismiss": {
|
|
659
639
|
"defaultMessage": "Одбаци обавештење",
|
|
660
640
|
"description": "Screen-reader-only label on the X button of a Toast (transient notification popup). Distinct from `banner.dismiss` (persistent banner)."
|
|
@@ -1480,4 +1460,3 @@
|
|
|
1480
1460
|
"description": "Default summary on the closed trigger of a lab TransferListSelector, stating how many options are currently chosen. Consumers usually override this with a domain phrase (e.g. \"7 columns\")."
|
|
1481
1461
|
}
|
|
1482
1462
|
}
|
|
1483
|
-
|
package/locales/sv-SE.json
CHANGED
|
@@ -635,26 +635,6 @@
|
|
|
635
635
|
"defaultMessage": "Rensa sortering",
|
|
636
636
|
"description": "Screen-reader-only label on a column header button that will remove the current sort. \"Clear\" here means remove, not transparent. Part of the sort set."
|
|
637
637
|
},
|
|
638
|
-
"@astryx.table.sort.direction.ascending": {
|
|
639
|
-
"defaultMessage": "stigande",
|
|
640
|
-
"description": "Localized direction word interpolated as `direction` into @astryx.table.sort.sortedBy and @astryx.table.sort.sortedByWithPriority."
|
|
641
|
-
},
|
|
642
|
-
"@astryx.table.sort.direction.descending": {
|
|
643
|
-
"defaultMessage": "fallande",
|
|
644
|
-
"description": "Localized direction word interpolated as `direction` into @astryx.table.sort.sortedBy and @astryx.table.sort.sortedByWithPriority."
|
|
645
|
-
},
|
|
646
|
-
"@astryx.table.sort.sortBy": {
|
|
647
|
-
"defaultMessage": "Sortera efter {label}",
|
|
648
|
-
"description": "Aria label for a sortable Table header button when the column is unsorted. `label` is the column header text."
|
|
649
|
-
},
|
|
650
|
-
"@astryx.table.sort.sortedBy": {
|
|
651
|
-
"defaultMessage": "Sortera efter {label}, sorterat {direction}",
|
|
652
|
-
"description": "Aria label for a sorted Table header button. `direction` is the localized direction word from @astryx.table.sort.direction.*."
|
|
653
|
-
},
|
|
654
|
-
"@astryx.table.sort.sortedByWithPriority": {
|
|
655
|
-
"defaultMessage": "Sortera efter {label}, sorterat {direction}, prioritet {rank, number} av {total, number}",
|
|
656
|
-
"description": "Aria label for a sorted Table header button in multi-sort. `rank` is the 1-based position of this column in the sort order; `total` is the number of sorted columns."
|
|
657
|
-
},
|
|
658
638
|
"@astryx.toast.dismiss": {
|
|
659
639
|
"defaultMessage": "Stäng avisering",
|
|
660
640
|
"description": "Screen-reader-only label on the X button of a Toast (transient notification popup). Distinct from `banner.dismiss` (persistent banner)."
|
|
@@ -1480,4 +1460,3 @@
|
|
|
1480
1460
|
"description": "Default summary on the closed trigger of a lab TransferListSelector, stating how many options are currently chosen. Consumers usually override this with a domain phrase (e.g. \"7 columns\")."
|
|
1481
1461
|
}
|
|
1482
1462
|
}
|
|
1483
|
-
|
package/locales/tr-TR.json
CHANGED
|
@@ -635,26 +635,6 @@
|
|
|
635
635
|
"defaultMessage": "Sıralamayı temizle",
|
|
636
636
|
"description": "Screen-reader-only label on a column header button that will remove the current sort. \"Clear\" here means remove, not transparent. Part of the sort set."
|
|
637
637
|
},
|
|
638
|
-
"@astryx.table.sort.direction.ascending": {
|
|
639
|
-
"defaultMessage": "artan",
|
|
640
|
-
"description": "Localized direction word interpolated as `direction` into @astryx.table.sort.sortedBy and @astryx.table.sort.sortedByWithPriority."
|
|
641
|
-
},
|
|
642
|
-
"@astryx.table.sort.direction.descending": {
|
|
643
|
-
"defaultMessage": "azalan",
|
|
644
|
-
"description": "Localized direction word interpolated as `direction` into @astryx.table.sort.sortedBy and @astryx.table.sort.sortedByWithPriority."
|
|
645
|
-
},
|
|
646
|
-
"@astryx.table.sort.sortBy": {
|
|
647
|
-
"defaultMessage": "Şuna göre sırala: {label}",
|
|
648
|
-
"description": "Aria label for a sortable Table header button when the column is unsorted. `label` is the column header text."
|
|
649
|
-
},
|
|
650
|
-
"@astryx.table.sort.sortedBy": {
|
|
651
|
-
"defaultMessage": "Şuna göre sırala: {label}, sıralama: {direction}",
|
|
652
|
-
"description": "Aria label for a sorted Table header button. `direction` is the localized direction word from @astryx.table.sort.direction.*."
|
|
653
|
-
},
|
|
654
|
-
"@astryx.table.sort.sortedByWithPriority": {
|
|
655
|
-
"defaultMessage": "Şuna göre sırala: {label}, sıralama: {direction}, öncelik: {total, number} içinden {rank, number}",
|
|
656
|
-
"description": "Aria label for a sorted Table header button in multi-sort. `rank` is the 1-based position of this column in the sort order; `total` is the number of sorted columns."
|
|
657
|
-
},
|
|
658
638
|
"@astryx.toast.dismiss": {
|
|
659
639
|
"defaultMessage": "Bildirimi kapat",
|
|
660
640
|
"description": "Screen-reader-only label on the X button of a Toast (transient notification popup). Distinct from `banner.dismiss` (persistent banner)."
|
|
@@ -1480,4 +1460,3 @@
|
|
|
1480
1460
|
"description": "Default summary on the closed trigger of a lab TransferListSelector, stating how many options are currently chosen. Consumers usually override this with a domain phrase (e.g. \"7 columns\")."
|
|
1481
1461
|
}
|
|
1482
1462
|
}
|
|
1483
|
-
|
package/locales/uk-UA.json
CHANGED
|
@@ -635,26 +635,6 @@
|
|
|
635
635
|
"defaultMessage": "Очистити сортування",
|
|
636
636
|
"description": "Screen-reader-only label on a column header button that will remove the current sort. \"Clear\" here means remove, not transparent. Part of the sort set."
|
|
637
637
|
},
|
|
638
|
-
"@astryx.table.sort.direction.ascending": {
|
|
639
|
-
"defaultMessage": "за зростанням",
|
|
640
|
-
"description": "Localized direction word interpolated as `direction` into @astryx.table.sort.sortedBy and @astryx.table.sort.sortedByWithPriority."
|
|
641
|
-
},
|
|
642
|
-
"@astryx.table.sort.direction.descending": {
|
|
643
|
-
"defaultMessage": "за спаданням",
|
|
644
|
-
"description": "Localized direction word interpolated as `direction` into @astryx.table.sort.sortedBy and @astryx.table.sort.sortedByWithPriority."
|
|
645
|
-
},
|
|
646
|
-
"@astryx.table.sort.sortBy": {
|
|
647
|
-
"defaultMessage": "Сортувати за {label}",
|
|
648
|
-
"description": "Aria label for a sortable Table header button when the column is unsorted. `label` is the column header text."
|
|
649
|
-
},
|
|
650
|
-
"@astryx.table.sort.sortedBy": {
|
|
651
|
-
"defaultMessage": "Сортувати за {label}, відсортовано {direction}",
|
|
652
|
-
"description": "Aria label for a sorted Table header button. `direction` is the localized direction word from @astryx.table.sort.direction.*."
|
|
653
|
-
},
|
|
654
|
-
"@astryx.table.sort.sortedByWithPriority": {
|
|
655
|
-
"defaultMessage": "Сортувати за {label}, відсортовано {direction}, пріоритет {rank, number} з {total, number}",
|
|
656
|
-
"description": "Aria label for a sorted Table header button in multi-sort. `rank` is the 1-based position of this column in the sort order; `total` is the number of sorted columns."
|
|
657
|
-
},
|
|
658
638
|
"@astryx.toast.dismiss": {
|
|
659
639
|
"defaultMessage": "Закрити сповіщення",
|
|
660
640
|
"description": "Screen-reader-only label on the X button of a Toast (transient notification popup). Distinct from `banner.dismiss` (persistent banner)."
|
|
@@ -1480,4 +1460,3 @@
|
|
|
1480
1460
|
"description": "Default summary on the closed trigger of a lab TransferListSelector, stating how many options are currently chosen. Consumers usually override this with a domain phrase (e.g. \"7 columns\")."
|
|
1481
1461
|
}
|
|
1482
1462
|
}
|
|
1483
|
-
|
package/locales/vi-VN.json
CHANGED
|
@@ -635,26 +635,6 @@
|
|
|
635
635
|
"defaultMessage": "Xóa sắp xếp",
|
|
636
636
|
"description": "Screen-reader-only label on a column header button that will remove the current sort. \"Clear\" here means remove, not transparent. Part of the sort set."
|
|
637
637
|
},
|
|
638
|
-
"@astryx.table.sort.direction.ascending": {
|
|
639
|
-
"defaultMessage": "tăng dần",
|
|
640
|
-
"description": "Localized direction word interpolated as `direction` into @astryx.table.sort.sortedBy and @astryx.table.sort.sortedByWithPriority."
|
|
641
|
-
},
|
|
642
|
-
"@astryx.table.sort.direction.descending": {
|
|
643
|
-
"defaultMessage": "giảm dần",
|
|
644
|
-
"description": "Localized direction word interpolated as `direction` into @astryx.table.sort.sortedBy and @astryx.table.sort.sortedByWithPriority."
|
|
645
|
-
},
|
|
646
|
-
"@astryx.table.sort.sortBy": {
|
|
647
|
-
"defaultMessage": "Sắp xếp theo {label}",
|
|
648
|
-
"description": "Aria label for a sortable Table header button when the column is unsorted. `label` is the column header text."
|
|
649
|
-
},
|
|
650
|
-
"@astryx.table.sort.sortedBy": {
|
|
651
|
-
"defaultMessage": "Sắp xếp theo {label}, {direction}",
|
|
652
|
-
"description": "Aria label for a sorted Table header button. `direction` is the localized direction word from @astryx.table.sort.direction.*."
|
|
653
|
-
},
|
|
654
|
-
"@astryx.table.sort.sortedByWithPriority": {
|
|
655
|
-
"defaultMessage": "Sắp xếp theo {label}, {direction}, ưu tiên {rank, number} trên {total, number}",
|
|
656
|
-
"description": "Aria label for a sorted Table header button in multi-sort. `rank` is the 1-based position of this column in the sort order; `total` is the number of sorted columns."
|
|
657
|
-
},
|
|
658
638
|
"@astryx.toast.dismiss": {
|
|
659
639
|
"defaultMessage": "Bỏ qua thông báo",
|
|
660
640
|
"description": "Screen-reader-only label on the X button of a Toast (transient notification popup). Distinct from `banner.dismiss` (persistent banner)."
|
|
@@ -1480,4 +1460,3 @@
|
|
|
1480
1460
|
"description": "Default summary on the closed trigger of a lab TransferListSelector, stating how many options are currently chosen. Consumers usually override this with a domain phrase (e.g. \"7 columns\")."
|
|
1481
1461
|
}
|
|
1482
1462
|
}
|
|
1483
|
-
|
package/locales/zh-CN.json
CHANGED
|
@@ -635,26 +635,6 @@
|
|
|
635
635
|
"defaultMessage": "清除排序",
|
|
636
636
|
"description": "Screen-reader-only label on a column header button that will remove the current sort. \"Clear\" here means remove, not transparent. Part of the sort set."
|
|
637
637
|
},
|
|
638
|
-
"@astryx.table.sort.direction.ascending": {
|
|
639
|
-
"defaultMessage": "升序",
|
|
640
|
-
"description": "Localized direction word interpolated as `direction` into @astryx.table.sort.sortedBy and @astryx.table.sort.sortedByWithPriority."
|
|
641
|
-
},
|
|
642
|
-
"@astryx.table.sort.direction.descending": {
|
|
643
|
-
"defaultMessage": "降序",
|
|
644
|
-
"description": "Localized direction word interpolated as `direction` into @astryx.table.sort.sortedBy and @astryx.table.sort.sortedByWithPriority."
|
|
645
|
-
},
|
|
646
|
-
"@astryx.table.sort.sortBy": {
|
|
647
|
-
"defaultMessage": "按 {label} 排序",
|
|
648
|
-
"description": "Aria label for a sortable Table header button when the column is unsorted. `label` is the column header text."
|
|
649
|
-
},
|
|
650
|
-
"@astryx.table.sort.sortedBy": {
|
|
651
|
-
"defaultMessage": "按 {label} 排序,{direction}",
|
|
652
|
-
"description": "Aria label for a sorted Table header button. `direction` is the localized direction word from @astryx.table.sort.direction.*."
|
|
653
|
-
},
|
|
654
|
-
"@astryx.table.sort.sortedByWithPriority": {
|
|
655
|
-
"defaultMessage": "按 {label} 排序,{direction},优先级 {rank, number}/{total, number}",
|
|
656
|
-
"description": "Aria label for a sorted Table header button in multi-sort. `rank` is the 1-based position of this column in the sort order; `total` is the number of sorted columns."
|
|
657
|
-
},
|
|
658
638
|
"@astryx.toast.dismiss": {
|
|
659
639
|
"defaultMessage": "关闭通知",
|
|
660
640
|
"description": "Screen-reader-only label on the X button of a Toast (transient notification popup). Distinct from `banner.dismiss` (persistent banner)."
|
|
@@ -1480,4 +1460,3 @@
|
|
|
1480
1460
|
"description": "Default summary on the closed trigger of a lab TransferListSelector, stating how many options are currently chosen. Consumers usually override this with a domain phrase (e.g. \"7 columns\")."
|
|
1481
1461
|
}
|
|
1482
1462
|
}
|
|
1483
|
-
|
package/locales/zh-TW.json
CHANGED
|
@@ -635,26 +635,6 @@
|
|
|
635
635
|
"defaultMessage": "清除排序",
|
|
636
636
|
"description": "Screen-reader-only label on a column header button that will remove the current sort. \"Clear\" here means remove, not transparent. Part of the sort set."
|
|
637
637
|
},
|
|
638
|
-
"@astryx.table.sort.direction.ascending": {
|
|
639
|
-
"defaultMessage": "遞增",
|
|
640
|
-
"description": "Localized direction word interpolated as `direction` into @astryx.table.sort.sortedBy and @astryx.table.sort.sortedByWithPriority."
|
|
641
|
-
},
|
|
642
|
-
"@astryx.table.sort.direction.descending": {
|
|
643
|
-
"defaultMessage": "遞減",
|
|
644
|
-
"description": "Localized direction word interpolated as `direction` into @astryx.table.sort.sortedBy and @astryx.table.sort.sortedByWithPriority."
|
|
645
|
-
},
|
|
646
|
-
"@astryx.table.sort.sortBy": {
|
|
647
|
-
"defaultMessage": "依 {label} 排序",
|
|
648
|
-
"description": "Aria label for a sortable Table header button when the column is unsorted. `label` is the column header text."
|
|
649
|
-
},
|
|
650
|
-
"@astryx.table.sort.sortedBy": {
|
|
651
|
-
"defaultMessage": "依 {label} 排序,{direction}",
|
|
652
|
-
"description": "Aria label for a sorted Table header button. `direction` is the localized direction word from @astryx.table.sort.direction.*."
|
|
653
|
-
},
|
|
654
|
-
"@astryx.table.sort.sortedByWithPriority": {
|
|
655
|
-
"defaultMessage": "依 {label} 排序,{direction},優先順序 {rank, number}/{total, number}",
|
|
656
|
-
"description": "Aria label for a sorted Table header button in multi-sort. `rank` is the 1-based position of this column in the sort order; `total` is the number of sorted columns."
|
|
657
|
-
},
|
|
658
638
|
"@astryx.toast.dismiss": {
|
|
659
639
|
"defaultMessage": "關閉通知",
|
|
660
640
|
"description": "Screen-reader-only label on the X button of a Toast (transient notification popup). Distinct from `banner.dismiss` (persistent banner)."
|
|
@@ -1480,4 +1460,3 @@
|
|
|
1480
1460
|
"description": "Default summary on the closed trigger of a lab TransferListSelector, stating how many options are currently chosen. Consumers usually override this with a domain phrase (e.g. \"7 columns\")."
|
|
1481
1461
|
}
|
|
1482
1462
|
}
|
|
1483
|
-
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@astryxdesign/core",
|
|
3
|
-
"version": "0.7.6-canary.
|
|
3
|
+
"version": "0.7.6-canary.f73623d",
|
|
4
4
|
"displayName": "Astryx Core",
|
|
5
5
|
"description": "The component library. Accessible, themeable React components with built-in spacing, dark mode, and StyleX styling.",
|
|
6
6
|
"author": "Meta Open Source",
|
|
@@ -847,9 +847,9 @@
|
|
|
847
847
|
"react-dom": ">=19.0.0"
|
|
848
848
|
},
|
|
849
849
|
"devDependencies": {
|
|
850
|
-
"@astryxdesign/a11y-spec": "0.7.6-canary.
|
|
851
|
-
"@astryxdesign/cli": "0.7.6-canary.
|
|
852
|
-
"@astryxdesign/interaction-harness": "0.7.6-canary.
|
|
850
|
+
"@astryxdesign/a11y-spec": "0.7.6-canary.f73623d",
|
|
851
|
+
"@astryxdesign/cli": "0.7.6-canary.f73623d",
|
|
852
|
+
"@astryxdesign/interaction-harness": "0.7.6-canary.f73623d",
|
|
853
853
|
"@babel/cli": "^7.29.7",
|
|
854
854
|
"@babel/core": "^7.29.7",
|
|
855
855
|
"@babel/preset-react": "^7.29.7",
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
schema_version: 3
|
|
3
|
-
template_version:
|
|
3
|
+
template_version: 7
|
|
4
4
|
kind: component
|
|
5
5
|
id: component:ChatLayout
|
|
6
|
-
authority:
|
|
6
|
+
authority: current
|
|
7
7
|
archive_reason: null
|
|
8
8
|
superseded_by: null
|
|
9
|
-
approved_by:
|
|
10
|
-
approved_at:
|
|
9
|
+
approved_by: cixzhang
|
|
10
|
+
approved_at: 2026-10-31
|
|
11
11
|
owners: [cixzhang]
|
|
12
12
|
review_triggers:
|
|
13
13
|
[public-api, behavior, layout, scrolling, accessibility, theming, testing]
|
|
@@ -38,13 +38,6 @@ system_specs: [spec:AST-025, spec:AST-029]
|
|
|
38
38
|
|
|
39
39
|
# ChatLayout component contract
|
|
40
40
|
|
|
41
|
-
This record is an **observational backfill** written during the 2026-09-23
|
|
42
|
-
component audit under `spec:AST-029/FR3–FR4`. Every row below describes behavior
|
|
43
|
-
already shipped on `main` and verified against source, focused tests, and
|
|
44
|
-
consumer docs. It adds, improves, removes and reinterprets nothing. Rows whose
|
|
45
|
-
basis is only current behavior are marked `verify`; unresolved questions stay in
|
|
46
|
-
Open questions rather than being settled here.
|
|
47
|
-
|
|
48
41
|
## Contract at a glance
|
|
49
42
|
|
|
50
43
|
| Area | Contract |
|
|
@@ -52,8 +45,8 @@ Open questions rather than being settled here.
|
|
|
52
45
|
| Public contract | `children`, `composer`, `emptyState`, `scrollButton`, `scrollRef`, `density`, plus `BaseProps<HTMLDivElement>` and `ref` on the layout root. |
|
|
53
46
|
| Behavior | The root is a flex column; the message area grows and never shrinks; the dock is sticky when the root scrolls and fixed when `scrollRef` names an outer scroller. |
|
|
54
47
|
| End-user impact | A chat transcript scrolls under a composer that stays reachable, auto-follows streaming output, and offers a scroll-to-bottom affordance when the reader has moved away from the bottom. |
|
|
55
|
-
| Builder impact | None
|
|
56
|
-
| Compatibility/readiness |
|
|
48
|
+
| Builder impact | None. |
|
|
49
|
+
| Compatibility/readiness | Records shipped behavior; no public change. Two owner questions stay open. |
|
|
57
50
|
| Review checks | Reject any row that states unshipped behavior, promises a default this component does not apply, or resolves OQ1 or OQ2 without an owner decision. |
|
|
58
51
|
| Governing rules | `architecture:public-component-api/INV1, INV5–INV6, INV8`; `architecture:component-style-authoring/INV1–INV3, INV5`; `architecture:theme-tokens/INV3`; `spec:AST-025/FR12` (not adopted). |
|
|
59
52
|
|
|
@@ -72,9 +65,8 @@ Consumer usage, prop syntax, and examples belong in `ChatLayout.doc.mjs`.
|
|
|
72
65
|
|
|
73
66
|
## Compatibility and migration
|
|
74
67
|
|
|
75
|
-
- Released default preserved: yes
|
|
76
|
-
|
|
77
|
-
- Compatibility class: no change. This record is descriptive.
|
|
68
|
+
- Released default preserved: `yes`
|
|
69
|
+
- Compatibility class: records shipped behavior; no public change
|
|
78
70
|
- Controlled/uncontrolled behavior: not applicable; the component holds no
|
|
79
71
|
controllable value.
|
|
80
72
|
- Migration decision: none.
|
|
@@ -126,17 +118,17 @@ has a safe theme-independent baseline, so it stays closed under
|
|
|
126
118
|
|
|
127
119
|
## Behavioral and layout contract
|
|
128
120
|
|
|
129
|
-
| ID |
|
|
130
|
-
| --- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
131
|
-
| FR1 | The root MUST be a flex column, so an in-flow sticky dock's height is part of the root's height rather than added on top of it. |
|
|
132
|
-
| FR2 | The message area MUST grow into leftover space and MUST NOT shrink below its content height, so short transcripts fill the root exactly and long ones overflow it. |
|
|
133
|
-
| FR3 | With no `scrollRef`, the root MUST be the scroll container and the dock MUST be `position: sticky`. |
|
|
134
|
-
| FR4 | With a `scrollRef`, the root MUST NOT become a scroll container and the dock MUST be `position: fixed`. |
|
|
135
|
-
| FR5 | `emptyState` MUST replace `children` exactly when `children` is `null`, `undefined`, `false`, or an empty array, and MUST NOT replace any other children. |
|
|
136
|
-
| FR6 | `scrollButton` MUST distinguish three cases: omitted selects the wired default, `null` renders nothing, and a supplied node replaces the default. |
|
|
137
|
-
| FR7 | `density` MUST reflect on the root as the `chat-layout` target's `data-density`, and MUST select the dock, message-area, dock-inner, and blur-layer geometry together. |
|
|
138
|
-
| FR8 | The layout MUST publish its scroll container and message content refs through `ChatLayoutContext` so the message list can register the observed content box. |
|
|
139
|
-
| FR9 | Accepted `ref`, DOM/data/ARIA props, `className`, `style`, and `xstyle` MUST reach and compose on the layout root. | `architecture:public-component-api/INV5–INV6, INV8`
|
|
121
|
+
| ID | Invariant | Basis |
|
|
122
|
+
| --- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- |
|
|
123
|
+
| FR1 | The root MUST be a flex column, so an in-flow sticky dock's height is part of the root's height rather than added on top of it. | Current source and tests |
|
|
124
|
+
| FR2 | The message area MUST grow into leftover space and MUST NOT shrink below its content height, so short transcripts fill the root exactly and long ones overflow it. | Current source and tests |
|
|
125
|
+
| FR3 | With no `scrollRef`, the root MUST be the scroll container and the dock MUST be `position: sticky`. | Current source and tests |
|
|
126
|
+
| FR4 | With a `scrollRef`, the root MUST NOT become a scroll container and the dock MUST be `position: fixed`. | Current source and tests |
|
|
127
|
+
| FR5 | `emptyState` MUST replace `children` exactly when `children` is `null`, `undefined`, `false`, or an empty array, and MUST NOT replace any other children. | Current source and tests |
|
|
128
|
+
| FR6 | `scrollButton` MUST distinguish three cases: omitted selects the wired default, `null` renders nothing, and a supplied node replaces the default. | Current source and tests |
|
|
129
|
+
| FR7 | `density` MUST reflect on the root as the `chat-layout` target's `data-density`, and MUST select the dock, message-area, dock-inner, and blur-layer geometry together. | Current source, tests, and docs |
|
|
130
|
+
| FR8 | The layout MUST publish its scroll container and message content refs through `ChatLayoutContext` so the message list can register the observed content box. | Current source |
|
|
131
|
+
| FR9 | Accepted `ref`, DOM/data/ARIA props, `className`, `style`, and `xstyle` MUST reach and compose on the layout root. | `architecture:public-component-api/INV5–INV6, INV8` |
|
|
140
132
|
|
|
141
133
|
### Allowed variation
|
|
142
134
|
|
|
@@ -202,18 +194,18 @@ has a safe theme-independent baseline, so it stays closed under
|
|
|
202
194
|
minimum height — remains a named component design decision.
|
|
203
195
|
- The component declares no portable token and no public custom property.
|
|
204
196
|
|
|
205
|
-
### Theming reachability
|
|
197
|
+
### Theming reachability
|
|
206
198
|
|
|
207
|
-
|
|
199
|
+
Dispositions for ChatLayout's five anatomy parts. This record carries no
|
|
208
200
|
`anatomy-theming:v1` block; the block is optional during migration, and see OQ2.
|
|
209
201
|
|
|
210
202
|
| Anatomy part | Disposition |
|
|
211
203
|
| ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
212
204
|
| Message area | `none` — reachability-gap: an internal element with no `themeProps` call. `chat-layout` sits on the scrolling root, so a theme cannot reach the transcript column's own padding or width cap. |
|
|
213
|
-
| Frosted glass dock | `none` —
|
|
205
|
+
| Frosted glass dock | `none` — unsettled: the dock, its inner column, and the blur layer paint the signature surface and carry no target; see OQ2. |
|
|
214
206
|
| Scroll-to-bottom button | `delegatesTo` the `chat-layout-scroll-button` target, whose canonical owner in the current inventory is `component:Chat`. |
|
|
215
207
|
| Composer | `delegatesTo` the `chat-composer` target, whose canonical owner in the current inventory is `component:Chat`. |
|
|
216
|
-
| Empty state | `none` —
|
|
208
|
+
| Empty state | `none` — intentional: the empty-state box only centres caller content, which is layout plumbing. |
|
|
217
209
|
|
|
218
210
|
The `chat-layout` target itself is declared on the Chat family document
|
|
219
211
|
(`Chat.doc.mjs`) rather than on `ChatLayout.doc.mjs`.
|
|
@@ -238,16 +230,29 @@ The `chat-layout` target itself is declared on the Chat family document
|
|
|
238
230
|
| -------- | -------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- | ------------------------------------------------------------------------------------------------- | --------------------- |
|
|
239
231
|
| FR1, FR2 | `ChatLayout.test.tsx` self-scroll layout contract | self-scroll, short and long transcript | Restoring `min-height: 100%` on the message area re-adds the dock's height and the root overflows | `audit:ChatLayout/§4` |
|
|
240
232
|
| FR3, FR4 | `ChatLayout.test.tsx` dock positioning | no `scrollRef`; external `scrollRef` | Swapping sticky and fixed detaches the dock from the element that actually scrolls | `audit:ChatLayout/§4` |
|
|
241
|
-
| FR5 | `ChatLayout.test.tsx` empty-state cases
|
|
242
|
-
| FR6 | `ChatLayout.test.tsx` scroll-button cases |
|
|
233
|
+
| FR5 | `ChatLayout.test.tsx` empty-state cases; `useChatNewMessages.test.tsx` conditional list case | empty array; populated children | Treating populated children as empty hides the transcript | `audit:ChatLayout/§4` |
|
|
234
|
+
| FR6 | `ChatLayout.test.tsx` scroll-button cases | custom node | Rendering the default in place of a supplied node fails | `audit:ChatLayout/§4` |
|
|
243
235
|
| FR7 | `ChatLayout.test.tsx` density cases; `themingTargets.test.ts` | compact; balanced; spacious | Dropping the reflected attribute makes the theming axis unselectable | `audit:ChatLayout/§2` |
|
|
244
|
-
| FR8 | `
|
|
236
|
+
| FR8 | `ChatLayout.test.tsx` "first-fill scroll positioning" cases; `useChatNewMessages.test.tsx` conditional-list case | first fill; streaming growth | Losing the published refs stops auto-scroll from observing content growth | `audit:ChatLayout/§7` |
|
|
245
237
|
| AR1, AR2 | `ChatLayoutScrollButton.test.tsx` and `ChatLayout.test.tsx` tab-order cases; `ChatLayoutScrollButton.a11y.chromium.spec.ts` in real Chromium | hidden at rest; visible; re-hidden after activation | Reverting to `opacity`-only hiding puts an invisible control back in the tab order | `audit:ChatLayout/§1` |
|
|
246
|
-
|
|
238
|
+
|
|
239
|
+
Read from source, with no focused test yet:
|
|
240
|
+
|
|
241
|
+
- FR3, FR4: whether the root is the scroll container.
|
|
242
|
+
- FR5: `null` and `undefined` children selecting the empty state.
|
|
243
|
+
- FR6: `null` rendering nothing, an omitted `scrollButton` selecting the wired
|
|
244
|
+
default, and the default not rendering beside a supplied node.
|
|
245
|
+
- FR8: the published scroll container.
|
|
246
|
+
- FR7: the dock, message-area, dock-inner, and blur geometry for each density.
|
|
247
|
+
- FR9: `ref`, DOM props, `className`, `style`, and `xstyle` on the root.
|
|
248
|
+
- AR2: the new-messages label replacing the catalog name.
|
|
249
|
+
- AR3: the catalog strings; AR4: no landmark or name on caller regions.
|
|
250
|
+
- PR1–PR2: no layout measurement of the component's own, and the pooled
|
|
251
|
+
observer.
|
|
247
252
|
|
|
248
253
|
## Decision log
|
|
249
254
|
|
|
250
|
-
|
|
255
|
+
No component-local decision is recorded.
|
|
251
256
|
|
|
252
257
|
## Open questions
|
|
253
258
|
|