REAL SHOWCASE SOURCEstack-constraint-modes

1 个文件 · 59 行 · TypeScript

// ===== showcase/src/examples/components/stack_constraint_modes.ts ===== import {  RenderAdaptiveGridPanel,  RenderBorder,  RenderPageHeader,  RenderParagraph,  RenderStackPanel,  RenderText,} from 'ds-ui' const stepRegion = (title: string, background: 'panel' | 'selected'): RenderBorder => {  const content = new RenderStackPanel({ orientation: 'vertical', spacing: 4, crossAxisAlignment: 'stretch' })  content.addChild(new RenderText(title, { role: 'title', weight: 'semibold' }))  content.addChild(new RenderText('按内容测量', { role: 'secondary' }))  return new RenderBorder({ background, padding: 10, child: content })} const alignmentCard = (title: string, stretchMainAxis: boolean): RenderStackPanel => {  const first = stepRegion('步骤一', 'selected')  first.width = 150  const second = stepRegion('步骤二', 'panel')  second.width = 150  const aligned = new RenderStackPanel({    orientation: 'vertical',    spacing: 10,    mainAxisAlignment: 'center',    crossAxisAlignment: 'center',  })  aligned.addChild(first)  aligned.addChild(second)  if (!stretchMainAxis) aligned.verticalAlignment = 'start'   const area = new RenderBorder({ background: 'muted', padding: 10, height: 190, child: aligned })  const card = new RenderStackPanel({ orientation: 'vertical', spacing: 8, crossAxisAlignment: 'stretch' })  card.addChild(new RenderText(title, { role: 'title', weight: 'semibold' }))  card.addChild(new RenderParagraph(stretchMainAxis    ? '子 Stack 获得完整高度,mainAxisAlignment 可以分配剩余空间。'    : '子 Stack 按内容收缩,没有剩余主轴空间,因此 center 不产生偏移。'))  card.addChild(area)  return card} export function createStackConstraintModesExample(): RenderStackPanel {  const comparison = new RenderAdaptiveGridPanel({    minColumnWidth: 280,    minColumns: 1,    maxColumns: 2,    columnGap: 16,    rowGap: 16,  })  comparison.addChild(alignmentCard('完整槽位 / 可居中', true))  comparison.addChild(alignmentCard('按内容收缩 / 无偏移', false))   const panel = new RenderStackPanel({ orientation: 'vertical', spacing: 16, padding: 24, crossAxisAlignment: 'stretch' })  panel.addChild(new RenderPageHeader({ title: 'mainAxisAlignment 的约束前提', description: '对比 tight 与 loose 槽位中的居中效果。' }))  panel.addChild(comparison)  return panel}