@xenosystem/components 0.9.1 → 0.9.2

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/catalog.json CHANGED
@@ -730,7 +730,7 @@
730
730
  {
731
731
  "name": "PanelFrame",
732
732
  "file": "frame.tsx",
733
- "doc": "The canonical standalone panel frame — header bar + content well, separated by the panel gap.\r\n\n@example\r\n```tsx\r\n<PanelFrame title=\"Layers\" actions={<IconButton icon={<PlusIcon />} label=\"Add layer\" />}>\r\n <RowList>…</RowList>\r\n</PanelFrame>\r\n```",
733
+ "doc": "The canonical standalone panel frame — header bar + content well, separated by the panel gap.\n\n@example\n```tsx\n<PanelFrame title=\"Layers\" actions={<IconButton icon={<PlusIcon />} label=\"Add layer\" />}>\n <RowList>…</RowList>\n</PanelFrame>\n```",
734
734
  "props": "PanelFrameProps",
735
735
  "propList": [
736
736
  {
@@ -774,7 +774,7 @@
774
774
  {
775
775
  "name": "Toolbar",
776
776
  "file": "frame.tsx",
777
- "doc": "A dense horizontal control strip. Height matches the panel header so a toolbar stacked under a\r\nframe header reads as one continuous chrome band.\r\n\n@example\r\n```tsx\r\n<Toolbar left={<SearchField value={q} onChange={setQ} />} right={<IconButton … />} />\r\n```",
777
+ "doc": "A dense horizontal control strip. Height matches the panel header so a toolbar stacked under a\nframe header reads as one continuous chrome band.\n\n@example\n```tsx\n<Toolbar left={<SearchField value={q} onChange={setQ} />} right={<IconButton … />} />\n```",
778
778
  "props": "ToolbarProps",
779
779
  "propList": [
780
780
  {
@@ -858,7 +858,7 @@
858
858
  {
859
859
  "name": "ScrollArea",
860
860
  "file": "frame.tsx",
861
- "doc": "A flex-filling scroll container with the canonical thin rectangular thumb and an unbroken\r\nheight chain (`flex: 1 1 0; min-height: 0`) — the shape DESIGN_SYSTEM §3.1 requires so panels\r\nnever reach for `max-height: calc(100vh - N)`.",
861
+ "doc": "A flex-filling scroll container with the canonical thin rectangular thumb and an unbroken\nheight chain (`flex: 1 1 0; min-height: 0`) — the shape DESIGN_SYSTEM §3.1 requires so panels\nnever reach for `max-height: calc(100vh - N)`.",
862
862
  "props": "ScrollAreaProps",
863
863
  "propList": [
864
864
  {
@@ -875,6 +875,26 @@
875
875
  }
876
876
  ]
877
877
  },
878
+ {
879
+ "name": "Column",
880
+ "file": "frame.tsx",
881
+ "doc": "The panel's vertical stack — a toolbar, a flexing body, a status bar — filling the panel with an\nunbroken height chain (`height: 100%; min-height: 0`). Every block wrote `<div style={{ display:\n'flex', flexDirection: 'column', height: '100%', minHeight: 0 }}>` by hand; as a unit it is the root\na declaration can name.",
882
+ "props": "ColumnProps",
883
+ "propList": [
884
+ {
885
+ "name": "children",
886
+ "type": "ReactNode",
887
+ "optional": true,
888
+ "doc": ""
889
+ },
890
+ {
891
+ "name": "className",
892
+ "type": "string",
893
+ "optional": true,
894
+ "doc": ""
895
+ }
896
+ ]
897
+ },
878
898
  {
879
899
  "name": "Badge",
880
900
  "file": "indicators.tsx",
@@ -93,6 +93,18 @@ interface ScrollAreaProps {
93
93
  * never reach for `max-height: calc(100vh - N)`.
94
94
  */
95
95
  declare function ScrollArea({ children, className }: ScrollAreaProps): ReactNode;
96
+ /** Props for {@link Column}. */
97
+ interface ColumnProps {
98
+ children?: ReactNode;
99
+ className?: string;
100
+ }
101
+ /**
102
+ * The panel's vertical stack — a toolbar, a flexing body, a status bar — filling the panel with an
103
+ * unbroken height chain (`height: 100%; min-height: 0`). Every block wrote `<div style={{ display:
104
+ * 'flex', flexDirection: 'column', height: '100%', minHeight: 0 }}>` by hand; as a unit it is the root
105
+ * a declaration can name.
106
+ */
107
+ declare function Column({ children, className }: ColumnProps): ReactNode;
96
108
 
97
109
  /**
98
110
  * `Section` — the collapsible titled group.
@@ -1170,6 +1182,7 @@ declare const COMPONENTS: {
1170
1182
  readonly 'chrome/ToolbarGroup': typeof ToolbarGroup;
1171
1183
  readonly 'chrome/Divider': typeof Divider;
1172
1184
  readonly 'chrome/ScrollArea': typeof ScrollArea;
1185
+ readonly 'chrome/Column': typeof Column;
1173
1186
  readonly 'chrome/Badge': typeof Badge;
1174
1187
  readonly 'chrome/StatusDot': typeof StatusDot;
1175
1188
  readonly 'chrome/StatusBadge': typeof StatusBadge;
@@ -1205,4 +1218,4 @@ interface GalleryEntry {
1205
1218
  /** The entries, one per unit × state. Adding a unit to {@link COMPONENTS} without an entry here fails the family's test. */
1206
1219
  declare function gallery(): GalleryEntry[];
1207
1220
 
1208
- export { Badge, type BadgeProps, CLS_BADGE, CLS_BAR, CLS_BAR_SEGMENT, CLS_DIVIDER, CLS_DOT, CLS_EMPTY, CLS_ERROR, CLS_FIELD, CLS_FIELD_CONTROL, CLS_FIELD_GROUP, CLS_FIELD_HINT, CLS_FIELD_LABEL, CLS_ICON_BUTTON, CLS_ICON_FRAME, CLS_LOADING, CLS_PANEL, CLS_PANEL_CONTENT, CLS_PANEL_CONTENT_NO_HEADER, CLS_PANEL_HEADER, CLS_PANEL_TITLE, CLS_ROW, CLS_ROWLIST, CLS_ROW_ICON, CLS_ROW_LABEL, CLS_ROW_META, CLS_ROW_TRAILING, CLS_SCROLL, CLS_SEARCH, CLS_SEARCH_INPUT, CLS_SECTION, CLS_SECTION_ACTIONS, CLS_SECTION_BODY, CLS_SECTION_CHEVRON, CLS_SECTION_HEADER, CLS_SECTION_TITLE, CLS_SECTION_TRIGGER, CLS_SEGMENT, CLS_SEGMENTED, CLS_STAT, CLS_STATE, CLS_STATE_HINT, CLS_STATE_ICON, CLS_STATE_PROGRESS, CLS_STATE_TITLE, CLS_STATUSBAR, CLS_STAT_LABEL, CLS_STAT_SUB, CLS_STAT_VALUE, CLS_TEXT_BUTTON, CLS_TOGGLE, CLS_TOGGLE_KNOB, CLS_TOOLBAR, CLS_TOOLBAR_GROUP, COMPONENTS, ChevronGlyph, ClearGlyph, Composer, type ComposerProps, Divider, type DividerProps, EmptyState, type EmptyStateProps, ErrorState, type ErrorStateProps, Field, FieldGroup, type FieldGroupProps, type FieldProps, type GalleryEntry, IconButton, type IconButtonProps, IconFrame, type IconFrameProps, LoadingState, type LoadingStateProps, PANEL_COLORS, PANEL_DISABLED_OPACITY, PANEL_METRICS, PANEL_PRIMITIVES_CSS, PANEL_PRIMITIVES_STYLE_ID, PANEL_TONES, type PanelColors, PanelFrame, type PanelFrameProps, type PanelMetrics, type PanelTone, type PrimitivesInjectTarget, ProportionBar, type ProportionBarProps, type ProportionSegment, Row, RowList, type RowListProps, type RowProps, type RowState, ScrollArea, type ScrollAreaProps, SearchField, type SearchFieldProps, SearchGlyph, Section, type SectionProps, type SegmentOption, SegmentedControl, type SegmentedControlProps, Sparkline, type SparklineProps, StatTile, type StatTileProps, StatusBadge, type StatusBadgeProps, StatusBar, type StatusBarProps, StatusDot, type StatusDotProps, TextButton, type TextButtonProps, Toggle, type ToggleProps, Toolbar, ToolbarGroup, type ToolbarGroupProps, type ToolbarProps, badgeClass, composerWantsSubmit, cx, dotClass, ensurePanelPrimitivesInjected, gallery, iconButtonClass, nextSegmentValue, rowClass, sectionClass, usePanelPrimitives };
1221
+ export { Badge, type BadgeProps, CLS_BADGE, CLS_BAR, CLS_BAR_SEGMENT, CLS_DIVIDER, CLS_DOT, CLS_EMPTY, CLS_ERROR, CLS_FIELD, CLS_FIELD_CONTROL, CLS_FIELD_GROUP, CLS_FIELD_HINT, CLS_FIELD_LABEL, CLS_ICON_BUTTON, CLS_ICON_FRAME, CLS_LOADING, CLS_PANEL, CLS_PANEL_CONTENT, CLS_PANEL_CONTENT_NO_HEADER, CLS_PANEL_HEADER, CLS_PANEL_TITLE, CLS_ROW, CLS_ROWLIST, CLS_ROW_ICON, CLS_ROW_LABEL, CLS_ROW_META, CLS_ROW_TRAILING, CLS_SCROLL, CLS_SEARCH, CLS_SEARCH_INPUT, CLS_SECTION, CLS_SECTION_ACTIONS, CLS_SECTION_BODY, CLS_SECTION_CHEVRON, CLS_SECTION_HEADER, CLS_SECTION_TITLE, CLS_SECTION_TRIGGER, CLS_SEGMENT, CLS_SEGMENTED, CLS_STAT, CLS_STATE, CLS_STATE_HINT, CLS_STATE_ICON, CLS_STATE_PROGRESS, CLS_STATE_TITLE, CLS_STATUSBAR, CLS_STAT_LABEL, CLS_STAT_SUB, CLS_STAT_VALUE, CLS_TEXT_BUTTON, CLS_TOGGLE, CLS_TOGGLE_KNOB, CLS_TOOLBAR, CLS_TOOLBAR_GROUP, COMPONENTS, ChevronGlyph, ClearGlyph, Column, type ColumnProps, Composer, type ComposerProps, Divider, type DividerProps, EmptyState, type EmptyStateProps, ErrorState, type ErrorStateProps, Field, FieldGroup, type FieldGroupProps, type FieldProps, type GalleryEntry, IconButton, type IconButtonProps, IconFrame, type IconFrameProps, LoadingState, type LoadingStateProps, PANEL_COLORS, PANEL_DISABLED_OPACITY, PANEL_METRICS, PANEL_PRIMITIVES_CSS, PANEL_PRIMITIVES_STYLE_ID, PANEL_TONES, type PanelColors, PanelFrame, type PanelFrameProps, type PanelMetrics, type PanelTone, type PrimitivesInjectTarget, ProportionBar, type ProportionBarProps, type ProportionSegment, Row, RowList, type RowListProps, type RowProps, type RowState, ScrollArea, type ScrollAreaProps, SearchField, type SearchFieldProps, SearchGlyph, Section, type SectionProps, type SegmentOption, SegmentedControl, type SegmentedControlProps, Sparkline, type SparklineProps, StatTile, type StatTileProps, StatusBadge, type StatusBadgeProps, StatusBar, type StatusBarProps, StatusDot, type StatusDotProps, TextButton, type TextButtonProps, Toggle, type ToggleProps, Toolbar, ToolbarGroup, type ToolbarGroupProps, type ToolbarProps, badgeClass, composerWantsSubmit, cx, dotClass, ensurePanelPrimitivesInjected, gallery, iconButtonClass, nextSegmentValue, rowClass, sectionClass, usePanelPrimitives };
@@ -53,6 +53,7 @@ var CLS_STAT_SUB = "xc-stat-sub";
53
53
  var CLS_BAR = "xc-bar";
54
54
  var CLS_BAR_SEGMENT = "xc-bar-segment";
55
55
  var CLS_SCROLL = "xc-scroll";
56
+ var CLS_COLUMN = "xc-column";
56
57
  var PANEL_TONES = Object.freeze([
57
58
  "neutral",
58
59
  "info",
@@ -655,6 +656,14 @@ div.xc-section-trigger {
655
656
  color: ${DIM};
656
657
  }
657
658
 
659
+ /* \u2500\u2500 Column \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
660
+ .xc-column {
661
+ display: flex;
662
+ flex-direction: column;
663
+ height: 100%;
664
+ min-height: 0;
665
+ }
666
+
658
667
  /* \u2500\u2500 Composer \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
659
668
  .xc-composer {
660
669
  display: block;
@@ -1150,6 +1159,10 @@ function ScrollArea({ children, className }) {
1150
1159
  usePanelPrimitives();
1151
1160
  return /* @__PURE__ */ jsx("div", { className: cx(CLS_SCROLL, className), children });
1152
1161
  }
1162
+ function Column({ children, className }) {
1163
+ usePanelPrimitives();
1164
+ return /* @__PURE__ */ jsx("div", { className: cx(CLS_COLUMN, className), children });
1165
+ }
1153
1166
 
1154
1167
  // src/chrome/section.tsx
1155
1168
  import { useState as useState3 } from "react";
@@ -1792,6 +1805,7 @@ var COMPONENTS = {
1792
1805
  "chrome/ToolbarGroup": ToolbarGroup,
1793
1806
  "chrome/Divider": Divider,
1794
1807
  "chrome/ScrollArea": ScrollArea,
1808
+ "chrome/Column": Column,
1795
1809
  "chrome/Badge": Badge,
1796
1810
  "chrome/StatusDot": StatusDot,
1797
1811
  "chrome/StatusBadge": StatusBadge,
@@ -1857,6 +1871,11 @@ function gallery() {
1857
1871
  /* @__PURE__ */ jsx7(Divider, { vertical: true }),
1858
1872
  /* @__PURE__ */ jsx7("span", { children: "b" })
1859
1873
  ] }));
1874
+ door("Column", "default", () => /* @__PURE__ */ jsxs7(Column, { children: [
1875
+ /* @__PURE__ */ jsx7(Toolbar, { left: /* @__PURE__ */ jsx7(TextButton, { onClick: noop, children: "Action" }) }),
1876
+ /* @__PURE__ */ jsx7(ScrollArea, { children: /* @__PURE__ */ jsx7("p", { style: { margin: 8 }, children: "body" }) }),
1877
+ /* @__PURE__ */ jsx7(StatusBar, { left: "status" })
1878
+ ] }));
1860
1879
  door("ScrollArea", "default", () => /* @__PURE__ */ jsx7(ScrollArea, { children: Array.from({ length: 30 }, (_, i) => /* @__PURE__ */ jsxs7("p", { style: { margin: 4 }, children: [
1861
1880
  "line ",
1862
1881
  i + 1
@@ -1947,6 +1966,7 @@ export {
1947
1966
  COMPONENTS,
1948
1967
  ChevronGlyph,
1949
1968
  ClearGlyph,
1969
+ Column,
1950
1970
  Composer,
1951
1971
  Divider,
1952
1972
  EmptyState,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xenosystem/components",
3
- "version": "0.9.1",
3
+ "version": "0.9.2",
4
4
  "description": "XENO Components \u2014 rung 2 of the front ladder: molecules composed from @xenosystem/elements, with no host contract. Families as subpaths: /auth, /navigation, /feedback, /data.",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",