@axiapps/axi-design 1.18.0 → 1.19.0

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/axi.css CHANGED
@@ -922,6 +922,29 @@ textarea.axi-input {
922
922
  padding-inline: var(--axi-gutter);
923
923
  display: flex; align-items: center; gap: 22px; min-height: 66px; flex-wrap: wrap;
924
924
  }
925
+ /* Above --axi-page the row stops growing: the cap is on this box, not on the
926
+ window, so from 1280px up the masthead has exactly one width to fit in and
927
+ wrapping there is not a fallback, it is a permanent second line - one tab
928
+ too many and the last item in source order drops, on a 4K display as surely
929
+ as on a laptop. So the wide row does not wrap; it takes the width out of the
930
+ search field instead (below), and the strip scrolls only if that runs out.
931
+ Under the cap the window really is too narrow and wrapping is the honest
932
+ answer, which is why this is a floor and not a blanket `nowrap`. */
933
+ @media (min-width: 1280px) {
934
+ .axi-mast__in { flex-wrap: nowrap; }
935
+ }
936
+ /* Nothing in the row gives up width unless it is named below. */
937
+ .axi-mast__in > * { flex-shrink: 0; }
938
+ /* The field is the one control here that is still entirely itself 70px
939
+ narrower - a placeholder that elides costs nothing, where a clipped tab
940
+ costs a destination. Flexbox shrinks proportionally, not in order, and a
941
+ merely-larger factor still took a couple of pixels off the last tab; the
942
+ number is this big to make that share round to nothing, so the effect is
943
+ the ordering CSS has no other way to say. Once the field is at its floor -
944
+ still wide enough to read as a search box rather than a smudge - whatever
945
+ is left over goes to the strip, which scrolls. */
946
+ .axi-mast .axi-search,
947
+ .axi-mast .docs-search { flex-shrink: 1000; min-width: 200px; }
925
948
  .axi-brand { display: flex; align-items: center; gap: 12px; text-decoration: none; }
926
949
  /* The sigil is the diamond motif scaled up with a glyph on top. The diamond is
927
950
  a rotated pseudo-element behind the text rather than a rotated box, so the
@@ -955,8 +978,14 @@ textarea.axi-input {
955
978
  .axi-tabs { display: flex; gap: 8px; }
956
979
  /* The auto margin belongs to the masthead, not to the strip: it is a statement
957
980
  about where the tabs sit in that row, and a strip standing on its own -
958
- spanning a view instead of ending a header - has nothing to push away from. */
959
- .axi-mast .axi-tabs { margin-left: auto; }
981
+ spanning a view instead of ending a header - has nothing to push away from.
982
+ The overflow belongs to the masthead for the same reason. This row is capped
983
+ at --axi-page, so the brand, the strip, the search field and the two selects
984
+ divide 1244px however wide the window is, and flex-wrap breaks a line before
985
+ it shrinks an item - so one tab too many sent the last item in source order
986
+ to a second row instead of taking width off the widest one. The strip is the
987
+ item that can give: it scrolls, and the row stays a row. */
988
+ .axi-mast .axi-tabs { margin-left: auto; flex-shrink: 1; min-width: 0; overflow-x: auto; }
960
989
  .axi-tabs a,
961
990
  .axi-tabs button {
962
991
  padding: 8px 16px;
@@ -1051,6 +1080,14 @@ textarea.axi-input {
1051
1080
  border-right: var(--axi-border-panel) solid var(--axi-ink-line);
1052
1081
  border-radius: 0;
1053
1082
  }
1083
+ /* A rail the page scrolls behind, rather than one the page sits beside.
1084
+ It is the same object, so it keeps every other rule; the one thing that
1085
+ changes is the surface it is printed on. --axi-surface is a translucent
1086
+ tint under a theme like glass, which reads as a pane only while the
1087
+ content behind it holds still — the moment a table scrolls past, the
1088
+ rows show through the nav. --axi-surface-float is the surface for
1089
+ exactly that case, so say it once here instead of in each consumer. */
1090
+ .axi-rail--float { background: var(--axi-surface-float); }
1054
1091
  .axi-rail__nav { display: flex; flex-direction: column; gap: 2px; }
1055
1092
  .axi-rail__item {
1056
1093
  display: flex;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@axiapps/axi-design",
3
- "version": "1.18.0",
3
+ "version": "1.19.0",
4
4
  "description": "The design language for the axi suite — flat and outlined, dark, drawn in saturated ink.",
5
5
  "type": "module",
6
6
  "license": "MIT",
package/src/shells.css CHANGED
@@ -23,6 +23,29 @@
23
23
  padding-inline: var(--axi-gutter);
24
24
  display: flex; align-items: center; gap: 22px; min-height: 66px; flex-wrap: wrap;
25
25
  }
26
+ /* Above --axi-page the row stops growing: the cap is on this box, not on the
27
+ window, so from 1280px up the masthead has exactly one width to fit in and
28
+ wrapping there is not a fallback, it is a permanent second line - one tab
29
+ too many and the last item in source order drops, on a 4K display as surely
30
+ as on a laptop. So the wide row does not wrap; it takes the width out of the
31
+ search field instead (below), and the strip scrolls only if that runs out.
32
+ Under the cap the window really is too narrow and wrapping is the honest
33
+ answer, which is why this is a floor and not a blanket `nowrap`. */
34
+ @media (min-width: 1280px) {
35
+ .axi-mast__in { flex-wrap: nowrap; }
36
+ }
37
+ /* Nothing in the row gives up width unless it is named below. */
38
+ .axi-mast__in > * { flex-shrink: 0; }
39
+ /* The field is the one control here that is still entirely itself 70px
40
+ narrower - a placeholder that elides costs nothing, where a clipped tab
41
+ costs a destination. Flexbox shrinks proportionally, not in order, and a
42
+ merely-larger factor still took a couple of pixels off the last tab; the
43
+ number is this big to make that share round to nothing, so the effect is
44
+ the ordering CSS has no other way to say. Once the field is at its floor -
45
+ still wide enough to read as a search box rather than a smudge - whatever
46
+ is left over goes to the strip, which scrolls. */
47
+ .axi-mast .axi-search,
48
+ .axi-mast .docs-search { flex-shrink: 1000; min-width: 200px; }
26
49
  .axi-brand { display: flex; align-items: center; gap: 12px; text-decoration: none; }
27
50
  /* The sigil is the diamond motif scaled up with a glyph on top. The diamond is
28
51
  a rotated pseudo-element behind the text rather than a rotated box, so the
@@ -56,8 +79,14 @@
56
79
  .axi-tabs { display: flex; gap: 8px; }
57
80
  /* The auto margin belongs to the masthead, not to the strip: it is a statement
58
81
  about where the tabs sit in that row, and a strip standing on its own -
59
- spanning a view instead of ending a header - has nothing to push away from. */
60
- .axi-mast .axi-tabs { margin-left: auto; }
82
+ spanning a view instead of ending a header - has nothing to push away from.
83
+ The overflow belongs to the masthead for the same reason. This row is capped
84
+ at --axi-page, so the brand, the strip, the search field and the two selects
85
+ divide 1244px however wide the window is, and flex-wrap breaks a line before
86
+ it shrinks an item - so one tab too many sent the last item in source order
87
+ to a second row instead of taking width off the widest one. The strip is the
88
+ item that can give: it scrolls, and the row stays a row. */
89
+ .axi-mast .axi-tabs { margin-left: auto; flex-shrink: 1; min-width: 0; overflow-x: auto; }
61
90
  .axi-tabs a,
62
91
  .axi-tabs button {
63
92
  padding: 8px 16px;
@@ -152,6 +181,14 @@
152
181
  border-right: var(--axi-border-panel) solid var(--axi-ink-line);
153
182
  border-radius: 0;
154
183
  }
184
+ /* A rail the page scrolls behind, rather than one the page sits beside.
185
+ It is the same object, so it keeps every other rule; the one thing that
186
+ changes is the surface it is printed on. --axi-surface is a translucent
187
+ tint under a theme like glass, which reads as a pane only while the
188
+ content behind it holds still — the moment a table scrolls past, the
189
+ rows show through the nav. --axi-surface-float is the surface for
190
+ exactly that case, so say it once here instead of in each consumer. */
191
+ .axi-rail--float { background: var(--axi-surface-float); }
155
192
  .axi-rail__nav { display: flex; flex-direction: column; gap: 2px; }
156
193
  .axi-rail__item {
157
194
  display: flex;