@camstack/ui-library 1.2.16 → 1.2.18

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.
@@ -55,6 +55,34 @@ export declare const GRID_PAIRED: "grid grid-cols-1 lg:grid-cols-2";
55
55
  export declare const SPLIT_PANEL_OUTER: "flex flex-col-reverse md:flex-row";
56
56
  /** Sidebar narrow lane in a SPLIT_PANEL_OUTER layout. */
57
57
  export declare const SPLIT_PANEL_SIDE: "w-full md:w-44 lg:w-52 md:flex-shrink-0 border-b md:border-b-0 md:border-l border-border";
58
+ /**
59
+ * The tier boundary at which a settings label/value row stops stacking.
60
+ *
61
+ * Below it (L1 — compact) the row is ONE column: label on its own line, value
62
+ * on the next at full width. Above it the row is label-left / value-right as
63
+ * before. The two-column form needs `SETTING_ROW_LABEL`'s lane plus a readable
64
+ * value beside it; a phone has neither, and the failure mode is not "cramped"
65
+ * but "the value is the part that gets cut" — the one thing the operator
66
+ * opened the page to read.
67
+ */
68
+ export declare const SETTING_ROW_STACK_BREAKPOINT: "sm";
69
+ /** Outer row: single column at L1, label/value columns from `sm` up. */
70
+ export declare const SETTING_ROW: "flex min-w-0 flex-col gap-0.5 py-1.5 sm:flex-row sm:items-center";
71
+ /** Label lane. Full width (and free to wrap) at L1; a fixed lane from `sm` up. */
72
+ export declare const SETTING_ROW_LABEL: "min-w-0 text-[11px] leading-tight text-foreground-subtle sm:w-32 sm:shrink-0 sm:pr-2";
73
+ /**
74
+ * Value lane — the value text plus its trailing affordances (copy / reveal).
75
+ * `w-full` at L1 so the value owns the whole row once the label is above it;
76
+ * `sm:flex-1` makes it share the row again from `sm` up.
77
+ */
78
+ export declare const SETTING_ROW_VALUE: "flex w-full min-w-0 items-center gap-1 sm:flex-1";
79
+ /**
80
+ * The value text itself. `break-all` lets an opaque token (a key, a URL) wrap
81
+ * at L1 instead of being cut mid-word; `sm:truncate` restores the single-line
82
+ * desktop form, where the row is wide enough for truncation to be a choice
83
+ * rather than data loss.
84
+ */
85
+ export declare const SETTING_ROW_VALUE_TEXT: "min-w-0 break-all text-xs text-foreground sm:truncate";
58
86
  /** Section header label (uppercase tracking-wider). */
59
87
  export declare const TEXT_SECTION_LABEL: "text-[10px] sm:text-[11px] font-semibold text-foreground uppercase tracking-wider";
60
88
  /** Field label inside a row. */
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Predicates over a Tailwind class string, used by layout tests to assert a
3
+ * responsive DECISION rather than a class literal.
4
+ *
5
+ * Why this exists: the two mobile defects fixed in 2026-08 were both "a
6
+ * utility that should have been behind a breakpoint was applied at every
7
+ * width" — a pinned first table column, a truncated settings value. The
8
+ * invariant worth guarding is exactly that: `sticky` must not appear
9
+ * unconditionally on the name column, `truncate` must not appear
10
+ * unconditionally on a settings value. Asserting the whole `className`
11
+ * byte-for-byte would guard something else (churn) and would go stale the
12
+ * first time a padding token moves — see `docs/architecture/ui.md`,
13
+ * "Frozen-string tests have an expiry date".
14
+ *
15
+ * A Tailwind class is `variant:variant:utility`. Everything before the last
16
+ * `:` is a condition (breakpoint, state, container query); a class with no
17
+ * `:` applies at every width and in every state.
18
+ */
19
+ /** Split a class string into non-empty tokens. `undefined` ⇒ no tokens. */
20
+ export declare function classTokens(className: string | undefined): readonly string[];
21
+ /**
22
+ * True when `utility` is applied with NO condition — i.e. at every width.
23
+ * `hasUnconditionalClass('md:sticky', 'sticky')` is false: that is the point.
24
+ */
25
+ export declare function hasUnconditionalClass(className: string | undefined, utility: string): boolean;
26
+ /** True when `utility` is applied behind the given `variant` (e.g. `md`). */
27
+ export declare function hasVariantClass(className: string | undefined, variant: string, utility: string): boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/ui-library",
3
- "version": "1.2.16",
3
+ "version": "1.2.18",
4
4
  "type": "module",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.js",