@gjsify/adwaita-react-native 0.47.0 → 0.48.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/README.md +79 -86
- package/lib/esm/index.gtk.js +1 -1
- package/lib/esm/index.js +1 -1
- package/lib/esm/index.native.js +1 -1
- package/lib/esm/widgets/combo-row.native.js +1 -1
- package/lib/esm/widgets/spin-row.gtk.js +1 -1
- package/lib/esm/widgets/spin-row.native.js +1 -1
- package/lib/types/index.d.ts +0 -28
- package/lib/types/index.gtk.d.ts +0 -28
- package/lib/types/index.native.d.ts +0 -28
- package/lib/types/props.d.ts +27 -26
- package/lib/types/widgets/spin-row.gtk.d.ts +7 -13
- package/lib/types/widgets/spin-row.native.d.ts +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -4,9 +4,9 @@ Adwaita widgets with **one API surface and two implementations**: the real `Adw.
|
|
|
4
4
|
widget on GTK4, React Native primitives on a phone.
|
|
5
5
|
|
|
6
6
|
```tsx
|
|
7
|
-
import {
|
|
7
|
+
import { Adw } from '@gjsify/adwaita-react-native';
|
|
8
8
|
|
|
9
|
-
<
|
|
9
|
+
<Adw.Clamp maximumSize={400}>{content}</Adw.Clamp>;
|
|
10
10
|
```
|
|
11
11
|
|
|
12
12
|
On GTK that is `Adw.Clamp` through [`@gjsify/gtk-host`](../gtk-host). On Android and
|
|
@@ -15,11 +15,19 @@ iOS it is a `View` whose width and offset come from
|
|
|
15
15
|
`adw_clamp_layout_allocate` — libadwaita's own easing curve, not a `maxWidth`
|
|
16
16
|
approximation.
|
|
17
17
|
|
|
18
|
+
**`Adw.<Name>` is the only spelling the package root has**, and the sameness above is the
|
|
19
|
+
point: the member is libadwaita's own type name with its namespace prefix read back off
|
|
20
|
+
it (ADR 0034 clause 1 + § Amendment 8). There are no `AdwClamp` class exports at the root
|
|
21
|
+
any more. One widget on its own comes from its subpath —
|
|
22
|
+
`import { AdwClamp } from '@gjsify/adwaita-react-native/widgets/clamp'` — where that
|
|
23
|
+
identifier is the widget's only name and not a second one; the prop TYPES keep their flat
|
|
24
|
+
spelling for the same reason, since `Adw.ClampProps` names nothing libadwaita has.
|
|
25
|
+
|
|
18
26
|
## What this is, honestly
|
|
19
27
|
|
|
20
28
|
**Not a widget set yet.** The table below is the whole of it, and every row carries the
|
|
21
29
|
whole vertical — both platform halves, the resolution mechanism, the `exports` entry, a
|
|
22
|
-
gate, and a suite on each side that reads the REAL tree. `
|
|
30
|
+
gate, and a suite on each side that reads the REAL tree. `Adw.Bin` and `Adw.Clamp` came
|
|
23
31
|
first and proved that shape; the groups since are where it starts earning its keep, and
|
|
24
32
|
the content-and-feedback widgets are the clearest case — each has a DERIVATION as its
|
|
25
33
|
shared half (an initials hash, a palette index, a queue policy, a ring geometry), so the
|
|
@@ -58,34 +66,34 @@ a GTK-only consumer does not need it installed.
|
|
|
58
66
|
|
|
59
67
|
| widget | props | notes |
|
|
60
68
|
|---|---|---|
|
|
61
|
-
| `
|
|
62
|
-
| `
|
|
63
|
-
| `
|
|
64
|
-
| `
|
|
65
|
-
| `
|
|
66
|
-
| `
|
|
67
|
-
| `
|
|
68
|
-
| `
|
|
69
|
-
| `
|
|
70
|
-
| `
|
|
71
|
-
| `
|
|
72
|
-
| `
|
|
73
|
-
| `
|
|
74
|
-
| `
|
|
75
|
-
| `
|
|
76
|
-
| `
|
|
77
|
-
| `
|
|
78
|
-
| `
|
|
79
|
-
| `
|
|
80
|
-
| `
|
|
81
|
-
| `
|
|
82
|
-
| `
|
|
83
|
-
| `
|
|
84
|
-
| `
|
|
85
|
-
| `
|
|
86
|
-
| `
|
|
87
|
-
| `
|
|
88
|
-
| `
|
|
69
|
+
| `Adw.ActionRow` | `title`, `subtitle`, `activatable` (false), `onActivated`, `children` | The fundamental boxed-list row. `children` are the SUFFIX |
|
|
70
|
+
| `Adw.Avatar` | `size` (**required**), `text`, `showInitials`, `iconName` | Initials and palette entry from one port of `extract_initials_from_text` + `set_class_color`. `size` is required because libadwaita's default is the `-1` "ask the stylesheet" sentinel and neither renderer here has one |
|
|
71
|
+
| `Adw.Banner` | `title`, `buttonLabel`, `revealed`, `useMarkup`, `buttonStyle`, `onButtonClicked` | An omitted `useMarkup` is FALSE on both halves — the value the widget reads back, not the TRUE its `GParamSpec` declares |
|
|
72
|
+
| `Adw.Bin` | `children` | One child, no layout of its own |
|
|
73
|
+
| `Adw.ButtonContent` | `iconName`, `label`, `useUnderline`, `canShrink` | Four derivations from the core, including the 6px gap that is `border-spacing` and not `GtkBox:spacing` |
|
|
74
|
+
| `Adw.ButtonRow` | `title`, `onActivated` | A row that behaves like a button — always activatable, and holds no children at all |
|
|
75
|
+
| `Adw.Clamp` | `children`, `maximumSize` (600), `tighteningThreshold` (400) | Constrain a child's width and centre it, on libadwaita's easing curve |
|
|
76
|
+
| `Adw.ComboRow` | `title`, `subtitle`, `model`, `selected`, `useSubtitle`, `onNotifySelected` | Pick one item of a list. `model` keeps libadwaita's NAME and takes `@gjsify/adwaita-core`'s option vocabulary instead of a `Gio.ListModel` — the GTK half builds the real `Gtk.StringList`. One item or none is not a choice: no chevron, and the row is not activatable. `useSubtitle` MOVES the value into the subtitle rather than adding a second copy of it |
|
|
77
|
+
| `Adw.EntryRow` | `title`, `text`, `maxLength` (0), `editable` (true), `showApplyButton` (false), `onNotifyText`, `onApply`, `onEntryActivated` | The row IS the entry. `max-length` counts CHARACTERS |
|
|
78
|
+
| `Adw.ExpanderRow` | `title`, `subtitle`, `expanded` (false), `onNotifyExpanded`, `children` | `children` are the DISCLOSED rows. The header toggles, the disclosure does not |
|
|
79
|
+
| `Adw.HeaderBar` | `start`, `titleWidget`, `title`, `subtitle`, `end` | The three slots as PROPS, in draw order. No window controls: a phone has none |
|
|
80
|
+
| `Adw.NavigationPage` | `children`, `title`, `tag`, `canPop` (true) | One page of a navigation view, or one pane of a navigation split view. A widget on GTK because `adw_navigation_view_add` takes one; three properties and no drawing of its own |
|
|
81
|
+
| `Adw.NavigationSplitView` | `children` (the content), `sidebar`, `sidebarTag`, `contentTag`, `sidebarTitle`, `contentTitle`, `collapsed`, `showContent`, `sidebarPosition`, plus the four sizing props | Sidebar beside content; a navigation stack when collapsed. Both panes are wrapped in an `Adw.NavigationPage` on GTK, because the two slots take nothing else |
|
|
82
|
+
| `Adw.NavigationView` | `children` (the pages, first is the root), `animateTransitions` (true), `popOnEscape` (true), `ref` (`push`, `pop`, `popToTag`, `replaceWithTags`, `visiblePageTag`, `canGoBack`, `backButtonTooltip`) | A page stack. Pushed BY TAG through the ref, never by prop — `Adw.NavigationView:visible-page` is read-only |
|
|
83
|
+
| `Adw.OverlaySplitView` | `children` (the content), `sidebar`, `collapsed`, `showSidebar` (true), `pinSidebar`, `sidebarPosition`, `enableShowGesture` (true), `enableHideGesture` (true), `onNotifyShowSidebar`, plus the four sizing props | Sidebar that slides OVER the content when collapsed. Collapsing hides an unpinned sidebar itself, which is what `onNotifyShowSidebar` reports |
|
|
84
|
+
| `Adw.PasswordEntryRow` | `title`, `text`, `maxLength`, `editable`, `showApplyButton`, `onNotifyText`, `onApply`, `onEntryActivated` | `Adw.EntryRow`'s surface exactly — the subclass declares no property of its own. `maxLength` counts CHARACTERS through the core, never `TextInput.maxLength`'s UTF-16 units |
|
|
85
|
+
| `Adw.PreferencesGroup` | `children` (the rows), `title`, `description` | A titled card. Five visibility answers from one `derivePreferencesGroupHeader` call; the card hides itself at zero rows while its header stays |
|
|
86
|
+
| `Adw.PreferencesPage` | `children` (the groups), `title`, `iconName`, `name`, `description`, `descriptionCentered`, `useUnderline` | Four of the five properties are identity a view switcher reads, drawn by neither half — as in libadwaita. Only `description` is painted |
|
|
87
|
+
| `Adw.SpinRow` | `title`, `subtitle`, `value`, `adjustment`, `digits`, `onNotifyValue` | The range is one `adjustment` — `@gjsify/adwaita-core`'s portable `Gtk.Adjustment` (ADR 0047), the same value the two sibling Adwaita renderers take. Every mutation clamps, including a bound that moves under the value |
|
|
88
|
+
| `Adw.Spinner` | `widthRequest`, `heightRequest` | The BOX and the RING are two numbers: an unbounded box around a ring capped at 64 |
|
|
89
|
+
| `Adw.StatusPage` | `children`, `iconName`, `title`, `description` | A centred empty state. The icon draws on GTK only |
|
|
90
|
+
| `Adw.SwitchRow` | `title`, `subtitle`, `active` (false), `onNotifyActive` | Controlled. The whole row toggles, not only the handle |
|
|
91
|
+
| `Adw.ToastOverlay` | `children`, `ref` (`addToast`, `dismissAll`) | One toast at a time. A toast is PUSHED through the ref, never declared as a prop — `add_toast` is a call |
|
|
92
|
+
| `Adw.ToolbarView` | `children` (the content), `topBar`, `bottomBar`, `topBarStyle` (`flat`), `bottomBarStyle` (`flat`), `extendContentToTopEdge` (false), `extendContentToBottomEdge` (false) | Content framed by bars. The two styles reach the real widget on GTK and draw nothing on a phone |
|
|
93
|
+
| `Adw.ViewStack` | `pages` (`name`, `title`, `iconName`, `visible`, `badgeNumber`, `needsAttention`, `useUnderline`, `child`), `visibleChildName`, `onNotifyVisibleChild` | Named pages, one visible. A page is a PROP OBJECT because `Adw.ViewStackPage` is a GObject and not a widget |
|
|
94
|
+
| `Adw.ViewSwitcher` | `Adw.ViewStack`'s props plus `policy` (`narrow`) | A button row over the stack. It BUNDLES the stack libadwaita keeps separate, as both other renderers do — on GTK it still builds a real `Adw.ViewStack` and binds it to `Adw.ViewSwitcher:stack` |
|
|
95
|
+
| `Adw.WindowTitle` | `title`, `subtitle` | Two labels; an EMPTY one takes no space, a blank one does |
|
|
96
|
+
| `Adw.WrapBox` | `children` plus libadwaita's fourteen: `childSpacing`/`childSpacingUnit`, `lineSpacing`/`lineSpacingUnit`, `align`, `justify`, `justifyLastLine`, `lineHomogeneous`, `naturalLineLength`/`naturalLineLengthUnit`, `packDirection`, `wrapReverse`, `wrapPolicy`, `orientation` | Children flow onto new lines. The line DECISION is `@gjsify/adwaita-core`'s, the line BREAKING is Yoga's |
|
|
89
97
|
|
|
90
98
|
Props are libadwaita's own names, camelCased — `maximumSize` is `AdwClamp:maximum-size`,
|
|
91
99
|
not a React Native `maxWidth` — so the property you look up in libadwaita's documentation
|
|
@@ -96,8 +104,8 @@ A signal is named the way [`@gjsify/gtk-host`](../gtk-host)'s generated surface
|
|
|
96
104
|
half hands the prop straight to the host and a second spelling here would be a translation
|
|
97
105
|
table nothing checks.
|
|
98
106
|
|
|
99
|
-
**A slot is a prop, never a `slot`-carrying child.** `
|
|
100
|
-
`
|
|
107
|
+
**A slot is a prop, never a `slot`-carrying child.** `Adw.HeaderBar`'s three ends and
|
|
108
|
+
`Adw.ToolbarView`'s two bars are props because gtk-host routes a child by a `slot` prop on
|
|
101
109
|
the CHILD, and a prop of a React component is an arbitrary `ReactNode` with nothing to
|
|
102
110
|
write it on — `cloneElement` sets a prop on a COMPOSITE component, which forwards
|
|
103
111
|
nothing, so the slot would be silently dropped for exactly the children this package
|
|
@@ -120,7 +128,7 @@ side.
|
|
|
120
128
|
`@gjsify/adwaita-core`'s tokens through, so what the React Native half carries is layout
|
|
121
129
|
and visibility. Inventing a styling seam is a decision this slice does not make.
|
|
122
130
|
|
|
123
|
-
### `
|
|
131
|
+
### `Adw.ExpanderRow` needs a curated placement, and this package added it
|
|
124
132
|
|
|
125
133
|
`Adw.ExpanderRow` was in `@gjsify/gtk-host`'s GENERATED table, which knows the tag and no
|
|
126
134
|
placement rule, so every child of an `<adw-expander-row>` was an `uncurated-placement`
|
|
@@ -190,8 +198,8 @@ nothing:
|
|
|
190
198
|
| the millisecond→second conversion cannot turn a brief toast into a permanent one | `Adw.Toast:timeout` counts whole seconds and reads back 5 on a default toast; `DEFAULT_TOAST_TIMEOUT` counts 5000 ms. The conversion is `ceil`, asserted against libadwaita's own default rather than against itself — `Math.round(400 / 1000)` is 0, which is "until dismissed" |
|
|
191
199
|
| the spinner's box and its ring are held on the half where each is a node | GTK measures the BOX (`[16, 16]` unrequested, 200 requested, no upper bound); React Native asserts the RING, which on GTK is an `AdwSpinnerPaintable` and not a widget at all — 64 points with an 8-point stroke inside a 200-point box |
|
|
192
200
|
| the rows share libadwaita's derivations rather than re-deriving them | the React Native half runs `@gjsify/adwaita-core` and the GTK half reads the answer back off the real widget: `activatable` false on `Adw.ActionRow` and `BUTTON_ROW_ACTIVATABLE` true on `Adw.ButtonRow`, the `notify` gate that stays SILENT for a set to the value already held on both the switch row and the expander, and `max-length` keeping `'🔒é'` — 2 characters, 3 UTF-16 units — where `TextInput.maxLength` would cut the pair in half |
|
|
193
|
-
| `
|
|
194
|
-
| `
|
|
201
|
+
| `Adw.ExpanderRow`: the disclosure is an ALLOCATION, not a flag | the live GTK tree, with animations off: the disclosed row is unmapped at 0×0 and still PARENTED while collapsed, and 596 wide below the header once revealed, with the expander's height equal to its header list plus its revealer to the point (109 = 55 + 54 on libadwaita 1.9.3) |
|
|
202
|
+
| `Adw.ExpanderRow`: an unechoed toggle survives the next render, on both halves | a second render with the prop unchanged, asserted on each side — the GTK one against the real widget through `@gjsify/gtk-host`'s patch-on-change, the React Native one through `ExpanderState` |
|
|
195
203
|
|
|
196
204
|
**Not proven: the row THEME.** What the rows lay out is structure — `flexDirection: 'row'`
|
|
197
205
|
is what makes a row a row — and what they do not carry is padding, the type scale, the
|
|
@@ -210,7 +218,7 @@ and until then it is a gap, not a formality.
|
|
|
210
218
|
These are places where the two halves cannot be made identical, written down rather
|
|
211
219
|
than smoothed over.
|
|
212
220
|
|
|
213
|
-
- **`
|
|
221
|
+
- **`Adw.PreferencesPage` is not a scroller on React Native.** `Adw.PreferencesPage` wraps
|
|
214
222
|
its groups in a `GtkScrolledWindow`; this half emits the column and a consumer wraps it.
|
|
215
223
|
Not a shortcut: `testing/react-native.ts` may only double a React Native component that
|
|
216
224
|
IS a host element with its props forwarded, and `ScrollView` is a COMPOSITE that renders
|
|
@@ -218,17 +226,17 @@ than smoothed over.
|
|
|
218
226
|
A double of it would be a nesting real React Native never emits, and every assertion
|
|
219
227
|
written against it would be about the double — the measured reason `spinner.native.tsx`
|
|
220
228
|
refuses `ActivityIndicator`. The same wrapper carries the page's CLAMP:
|
|
221
|
-
`adw-preferences-page.ui` puts an `
|
|
222
|
-
centres the groups at the clamp width while this half stretches them. `
|
|
229
|
+
`adw-preferences-page.ui` puts an `Adw.Clamp` inside the scrolled window, so a wide window
|
|
230
|
+
centres the groups at the clamp width while this half stretches them. `Adw.Clamp` is in
|
|
223
231
|
this package, so a consumer that wants both wraps with both.
|
|
224
|
-
- **`
|
|
232
|
+
- **`Adw.PreferencesGroup` has no `header-suffix` and no `separate-rows`.** The first is a
|
|
225
233
|
placement question, not a naming one: `header-suffix` holds a WIDGET, so a React surface
|
|
226
234
|
has to spell it as a slot, and the group's curated descriptor in `@gjsify/gtk-host` is
|
|
227
235
|
`ordered` — `add`/`remove`, `remove-all` to reorder, because `Adw.PreferencesGroup.insert`
|
|
228
236
|
does not exist on libadwaita 1.x — which has no slots at all. Adding one changes a
|
|
229
237
|
placement policy other conformance vectors already assert, with its own measurement. The
|
|
230
238
|
second is pure card styling, and this package's React Native half draws no theme.
|
|
231
|
-
- **`
|
|
239
|
+
- **`Adw.PreferencesGroup`'s `single-line` header state is derived and not drawn.** It is a
|
|
232
240
|
stylesheet number — `min-height: 34px` against `margin-bottom: 6px` — and there is no
|
|
233
241
|
theme layer here to spend it in. It is computed because it comes out of the same core call
|
|
234
242
|
as the four states that ARE drawn.
|
|
@@ -238,12 +246,12 @@ than smoothed over.
|
|
|
238
246
|
paints the string verbatim and passes `useMarkup: false`, which is the case
|
|
239
247
|
`derivePreferencesGroupHeader` documents that value for, and which both sibling renderers
|
|
240
248
|
pass as well.
|
|
241
|
-
- **`
|
|
249
|
+
- **`Adw.ComboRow` has no popover on React Native.** `Adw.ComboRow` opens a `GtkPopover` over
|
|
242
250
|
a `GtkListView`; a row with no overlay layer cannot. The press advances to the next option
|
|
243
251
|
and wraps, which still runs the real `ComboState.select` guard — bounds and
|
|
244
252
|
no-op-on-same — so the arithmetic underneath is the shipped one and only the gesture is
|
|
245
253
|
this half's own.
|
|
246
|
-
- **`
|
|
254
|
+
- **`Adw.ComboRow`'s `useSubtitle` publishes the value at once on React Native and on the
|
|
247
255
|
next selection change on GTK.** What both halves DO agree on is that the value is drawn in
|
|
248
256
|
one place: `adw-combo-row.ui` binds the inline value view's `visible` to `use-subtitle`
|
|
249
257
|
with `sync-create|invert-boolean`, and this half hides its trailing label the same way.
|
|
@@ -254,40 +262,25 @@ than smoothed over.
|
|
|
254
262
|
`use-subtitle` on and is replaced by the next selection change. Measured on libadwaita
|
|
255
263
|
1.9.3 and asserted on both halves. Reproducing the lag here would mean carrying a
|
|
256
264
|
libadwaita ordering artefact into a renderer that has no reason for it.
|
|
257
|
-
- **`
|
|
258
|
-
Adwaita renderers spell it `min`/`max`/`step`.** Those are
|
|
259
|
-
`adw_spin_row_new_with_range`'s PARAMETER names; these are `Gtk.Adjustment`'s own GObject
|
|
260
|
-
property names for the same three values, and this package's rule is that a caller writes
|
|
261
|
-
the property they would look up in libadwaita's documentation. The arithmetic is still
|
|
262
|
-
shared — both halves map onto `@gjsify/adwaita-core`'s `SpinState`, which uses the short
|
|
263
|
-
names internally.
|
|
264
|
-
- **`AdwSpinRow`'s decimal separator is the process locale's on GTK and always `.` on React
|
|
265
|
+
- **`Adw.SpinRow`'s decimal separator is the process locale's on GTK and always `.` on React
|
|
265
266
|
Native.** `gtk_spin_button_update` formats the displayed value through the C library's
|
|
266
267
|
locale — measured on gjs 1.88.1 under a de_DE locale, a `digits={2}` row of 3.14159 reads
|
|
267
268
|
`3,14` — while `Number.prototype.toFixed` is specified never to localise and gives `3.14`
|
|
268
269
|
on every machine there is. The two halves therefore agree on the DIGIT COUNT and differ by
|
|
269
270
|
one character. Both suites assert the digits; neither builds its expectation from the
|
|
270
271
|
locale, because a test that did would be measuring the machine it runs on.
|
|
271
|
-
-
|
|
272
|
-
GTK half builds one new `Gtk.Adjustment` from `lower`, `upper` and `stepIncrement`
|
|
273
|
-
together, so moving 0…100/50 to 200…300/250 is a single step. The React Native half
|
|
274
|
-
applies each property in its own effect — one per setter, because each has its own guard
|
|
275
|
-
in the C — so it passes through an inverted range: `setMin(200)` runs while the maximum is
|
|
276
|
-
still 100, and `SpinState`'s clamp answers the maximum. `onNotifyValue` therefore reports
|
|
277
|
-
`100, 200, 250` where GTK reports the end state. The settled value is the same on both,
|
|
278
|
-
React batches the renders, and the stream is asserted so that changing it is a decision.
|
|
279
|
-
- **`AdwSpinRow` carries no `climb-rate`, `snap-to-ticks`, `numeric`, `update-policy` or
|
|
272
|
+
- **`Adw.SpinRow` carries no `climb-rate`, `snap-to-ticks`, `numeric`, `update-policy` or
|
|
280
273
|
`wrap`.** Each needs an editable text entry or a key-repeat timer the React Native half
|
|
281
274
|
does not have, so carrying them would mean a property GTK honours and the phone ignores.
|
|
282
275
|
Neither sibling renderer has them either.
|
|
283
|
-
- **`
|
|
276
|
+
- **`Adw.PasswordEntryRow`'s caps-lock indicator is present and can never show.**
|
|
284
277
|
`indicatorVisible` is `editing && show_indicator`, and `show_indicator` is pushed from
|
|
285
278
|
`!revealed && capsLockOn` — but React Native exposes no keyboard modifier state, and this
|
|
286
279
|
surface carries no prop libadwaita does not have, so nothing can set it. The node stays in
|
|
287
280
|
the tree, hidden, and a test asserts that: "no caps-lock warning" and "no caps-lock
|
|
288
281
|
support" must not be the same picture. `@gjsify/adwaita-nativescript` hit the same wall
|
|
289
282
|
and answered it with a host seam, which is a surface this package does not have.
|
|
290
|
-
- **`
|
|
283
|
+
- **`Adw.PasswordEntryRow` publishes no `revealed`, where both sibling renderers do.**
|
|
291
284
|
`Adw.PasswordEntryRow` declares no property of its own — its generated prop interface is
|
|
292
285
|
empty over `AdwEntryRowProps` — and the peek state is private to the widget. A `revealed`
|
|
293
286
|
prop would be the one place this surface invents a name; the button owns it on both halves.
|
|
@@ -300,13 +293,13 @@ than smoothed over.
|
|
|
300
293
|
shared fallback. The accessible NAMES beside them do come from the core, so
|
|
301
294
|
"Show Password"/"Hide Password"/"Apply"/"Caps Lock is on" are one string in one place
|
|
302
295
|
across three renderers.
|
|
303
|
-
- **`
|
|
296
|
+
- **`Adw.Clamp` ignores the child's intrinsic minimum on React Native.** libadwaita's
|
|
304
297
|
clamp is a two-pass measure-then-allocate, and a child minimum wider than the clamp
|
|
305
298
|
RAISES all three thresholds — which is how such a child still gets its minimum
|
|
306
299
|
instead of being cut off. React Native has no such pass: `onLayout` reports a size
|
|
307
300
|
after layout and never the child's intrinsic minimum. So `childMin`/`childNat` are
|
|
308
301
|
passed as 0, and a child wider than the clamp is compressed here and is not on GTK.
|
|
309
|
-
- **`
|
|
302
|
+
- **`Adw.Clamp`'s `small`/`medium`/`large` size class is not carried.** libadwaita stamps
|
|
310
303
|
it on the child as a style class; React Native has no class system to stamp it into,
|
|
311
304
|
and inventing a styling seam is a decision this slice does not make.
|
|
312
305
|
- **One unclamped frame.** Before the first `onLayout` there is no available width, so
|
|
@@ -318,30 +311,30 @@ than smoothed over.
|
|
|
318
311
|
such limit and renders both. Both behaviours are pinned by a test on each side, so
|
|
319
312
|
neither can move alone. Refusing more than one child on both halves would close it and
|
|
320
313
|
is a surface decision this slice does not make.
|
|
321
|
-
- **`
|
|
314
|
+
- **`Adw.HeaderBar` resolves an unauthored title on GTK and leaves it blank on a phone.**
|
|
322
315
|
Authoring neither `title` nor `subtitle` installs no title widget at all, so
|
|
323
316
|
libadwaita's `update_title` (adw-header-bar.c:475) walks navigation page → dialog →
|
|
324
317
|
window → application name and puts what it finds in the centre; a phone has none of
|
|
325
318
|
those to walk. Both sides are asserted — the GTK suite reads the window's own title
|
|
326
319
|
back out of the bar, the React Native suite reads two collapsed labels.
|
|
327
|
-
- **`
|
|
320
|
+
- **`Adw.HeaderBar` has a `title`/`subtitle` that `Adw.HeaderBar` does not.** The real
|
|
328
321
|
widget has no `title` property; its derived centre is a plain `gtk_label_new (NULL)`
|
|
329
|
-
with no subtitle at all, and an app that wants one sets an `
|
|
322
|
+
with no subtitle at all, and an app that wants one sets an `Adw.WindowTitle` as its
|
|
330
323
|
title widget. A declarative surface wants the attribute, so authoring either installs
|
|
331
|
-
an `
|
|
324
|
+
an `Adw.WindowTitle` centre. This is the same divergence `@gjsify/adwaita-web` and
|
|
332
325
|
`@gjsify/adwaita-nativescript` carry, recorded as `HeaderBarRenderState.derivedSubtitle`
|
|
333
326
|
in `@gjsify/adwaita-core`.
|
|
334
327
|
- **Neither renderer here resolves an icon theme, so `iconName` is accepted and not
|
|
335
328
|
drawn.** `icon-name` names an entry in an ICON THEME and React Native has none — no
|
|
336
329
|
`Image` source a GNOME symbolic name resolves to, and no renderer for the SVG
|
|
337
330
|
`@gjsify/adwaita-nativescript` substituted instead. Drawing the name as text would put
|
|
338
|
-
the literal `folder-symbolic` on screen. So `
|
|
331
|
+
the literal `folder-symbolic` on screen. So `Adw.StatusPage` shows no icon, `Adw.Avatar`'s
|
|
339
332
|
icon mode is a coloured circle with the initials hidden where GTK draws
|
|
340
|
-
`adw-avatar-default-symbolic`, and `
|
|
333
|
+
`adw-avatar-default-symbolic`, and `Adw.ButtonContent`'s icon slot sits in the row with
|
|
341
334
|
libadwaita's own `hexpand` and holds no glyph. The props are carried so a GTK consumer's
|
|
342
335
|
props stay portable, and the ABSENCE of an icon node is asserted in each case, so the
|
|
343
336
|
day one appears it is a decision and not a drift.
|
|
344
|
-
- **`
|
|
337
|
+
- **`Adw.ToolbarView` does not run libadwaita's allocation on React Native, and cannot.**
|
|
345
338
|
`adw_toolbar_view_size_allocate` is two chained CLAMPs over the bars' MINIMUM and
|
|
346
339
|
NATURAL heights — ported as `toolbarViewAllocate` and held to vectors — and React
|
|
347
340
|
Native hands a component an already-laid-out size and never a child's intrinsic
|
|
@@ -349,40 +342,40 @@ than smoothed over.
|
|
|
349
342
|
the identity and dress a pass-through up as libadwaita's arithmetic. The consequence is
|
|
350
343
|
one-directional: a STRETCHY bar keeps its natural height where libadwaita would shrink
|
|
351
344
|
it toward its minimum to protect the content.
|
|
352
|
-
- **`
|
|
345
|
+
- **`Adw.ToolbarView`'s four style classes have nowhere to land on a phone.** `raised`,
|
|
353
346
|
`border`, `undershoot-top` and `undershoot-bottom` are what `topBarStyle` and
|
|
354
347
|
`bottomBarStyle` derive; React Native has no class system to stamp them into. Both
|
|
355
348
|
props are carried and reach no style, which is asserted on the React Native side and
|
|
356
349
|
measured against libadwaita's own `update_undershoots` on the GTK side.
|
|
357
|
-
- **`
|
|
350
|
+
- **`Adw.WrapBox`'s `naturalLineLength` is a MAX SIZE on React Native.** libadwaita caps
|
|
358
351
|
the box's NATURAL size REQUEST and leaves a larger allocation free to happen; neither
|
|
359
352
|
CSS nor Yoga has a property that caps only the intrinsic contribution, so this half
|
|
360
353
|
writes `maxWidth`/`maxHeight`. `@gjsify/adwaita-web` records the same deliberate
|
|
361
354
|
deviation. Limiting line length inside a popover — the intended use — behaves the same
|
|
362
355
|
either way.
|
|
363
|
-
- **`
|
|
356
|
+
- **`Adw.WrapBox` wraps every child in a `View` of its own.** `flex-grow` and `flex-shrink`
|
|
364
357
|
belong to the CHILD, and this component does not own its children's styles:
|
|
365
358
|
NativeScript sets them as attached properties and the browser publishes a custom
|
|
366
359
|
property its stylesheet reads, and neither seam exists here. The wrapper is therefore
|
|
367
360
|
visible in the tree and is asserted rather than left as an implementation detail.
|
|
368
|
-
- **`
|
|
361
|
+
- **`Adw.WrapBox`'s `align` is snapped to three positions on both non-GTK renderers.** C
|
|
369
362
|
offsets the whole line block by `roundf (length_delta * align)` — a continuum — and
|
|
370
363
|
flexbox has `flex-start`, `center` and `flex-end`. The snap is the renderers'
|
|
371
364
|
approximation and not libadwaita's rule, which is why it lives in
|
|
372
365
|
`@gjsify/adwaita-core`'s `wrapBoxFlexStyle` rather than in a conformance vector. The
|
|
373
366
|
GTK half runs none of it: `Adw.WrapBox` is `adw-wrap-layout.c` itself, and the suite
|
|
374
367
|
reads the continuum back off the live tree.
|
|
375
|
-
- **`
|
|
368
|
+
- **`Adw.Avatar`'s font size is the CAP, not a measurement.** `update_font_size` scales
|
|
376
369
|
the label's measured aspect ratio against `avatarMaxFontSize(size)`; React Native
|
|
377
370
|
reports a text box only through `onLayout`, i.e. after layout — the same missing
|
|
378
|
-
measure pass that makes `
|
|
371
|
+
measure pass that makes `Adw.Clamp` pass `childMin: 0`. Using the cap alone stays inside
|
|
379
372
|
libadwaita's bound. The NativeScript port's `size * 0.4` heuristic is deliberately not
|
|
380
373
|
copied: it is not monotonic in `size` and exceeds the cap above ~54 points.
|
|
381
|
-
- **`
|
|
374
|
+
- **`Adw.ButtonContent` cannot stamp `image-text-button`.** `adw_button_content_root` puts
|
|
382
375
|
the class on the nearest `GtkButton` ancestor, and this package ships no button for it
|
|
383
376
|
to find. `buttonContentStyleTargetIndex` holds the retarget rule for a renderer that has
|
|
384
377
|
a tree to walk; when a button lands here, that is the call to make.
|
|
385
|
-
- **`
|
|
378
|
+
- **`Adw.Spinner` draws the track and not the arc.** `AdwSpinnerPaintable`'s segment
|
|
386
379
|
extends, overlaps, contracts and idles on an ease-in-out-sine while the whole figure
|
|
387
380
|
turns, and drawing it needs a path renderer that is not a dependency of this package.
|
|
388
381
|
What is drawn is the circle underneath — `ADW_SPINNER_TRACK_OPACITY` of the current
|
|
@@ -400,7 +393,7 @@ than smoothed over.
|
|
|
400
393
|
`adw_toast_overlay_dismiss_all` animates the strip out over real time, and pumping the
|
|
401
394
|
main context for ~1.6s leaves the `AdwToastWidget` in place — measured. GTK asserts that
|
|
402
395
|
the call lands and costs no diagnostic; the removal is asserted where the queue is ours.
|
|
403
|
-
- **`
|
|
396
|
+
- **`Adw.Banner` reduces markup to its plain text.** React Native has no inline-markup
|
|
404
397
|
layer, and painting `<b>Metered</b>` literally is further from what GTK draws than
|
|
405
398
|
painting `Metered` is. Unparseable markup keeps the raw string, which is Pango's own
|
|
406
399
|
fallback.
|
|
@@ -425,7 +418,7 @@ than smoothed over.
|
|
|
425
418
|
Native has no slot mechanism, and giving the surface a `prefix` PROP taking a node would
|
|
426
419
|
be a second child channel that only one half implements, so the surface offers `children`
|
|
427
420
|
only — the suffix on the action row, the disclosure on the expander.
|
|
428
|
-
- **`
|
|
421
|
+
- **`Adw.ExpanderRow` carries no `enable-expansion` and no `show-enable-switch`.** The
|
|
429
422
|
enable switch is a SECOND control inside the row with its own veto over the disclosure,
|
|
430
423
|
and the rule tying the two flags together lives in no shared place:
|
|
431
424
|
`@gjsify/adwaita-core`'s `ExpanderState` — what all three renderers compose — models the
|
|
@@ -438,11 +431,11 @@ than smoothed over.
|
|
|
438
431
|
libadwaita 1.9.3, a `Gtk.Label` disclosed child leaks on unmount behind a single
|
|
439
432
|
`Gtk-WARNING`, an `Adw.ActionRow` round-trips cleanly. The curated descriptor carries the
|
|
440
433
|
measurement. A React Native `View` has no such rule.
|
|
441
|
-
- **`
|
|
434
|
+
- **`Adw.EntryRow`'s empty↔filled cross-fade is a hard swap.** libadwaita animates between
|
|
442
435
|
the placeholder and the floating title over its own duration; the React Native half
|
|
443
436
|
switches at the two endpoints, the same compromise `@gjsify/adwaita-nativescript` makes,
|
|
444
437
|
because a cross-fade needs an animation seam this slice does not add.
|
|
445
|
-
- **`
|
|
438
|
+
- **`Adw.SwitchRow` is strictly controlled and `Adw.SwitchRow` is not.** React Native's own
|
|
446
439
|
contract for `Switch` is that the component renders the `value` prop whatever the user
|
|
447
440
|
does, so a toggle the consumer declines to echo back is not kept here — where GTK keeps
|
|
448
441
|
it. The other two stateful rows go the GTK way (see [Widgets](#widgets)); this one goes
|
|
@@ -472,7 +465,7 @@ than smoothed over.
|
|
|
472
465
|
the sidebar can take its full share of a view too narrow for both panes, and the view
|
|
473
466
|
cannot refuse to be narrower than its contents the way GTK does (the GTK suite asserts
|
|
474
467
|
that refusal at 380 against `measureSplitViewHorizontal`; the React Native suite cannot
|
|
475
|
-
ask). Same class as `
|
|
468
|
+
ask). Same class as `Adw.Clamp`'s `childMin`.
|
|
476
469
|
- **The two sidebar-width rules can only be told apart one at a time on GTK.**
|
|
477
470
|
`resolveNavigationSidebarWidth` caps the sidebar's MAX BOUND by `width - content_min`
|
|
478
471
|
and `resolveOverlaySidebarWidth` caps the RESULT, which the core's own vectors separate
|
|
@@ -504,7 +497,7 @@ than smoothed over.
|
|
|
504
497
|
differs is the push/pop DIRECTION, which a renderer spends on a slide and this one has
|
|
505
498
|
none of. The position IS asserted where it is observable: the docked draw order.
|
|
506
499
|
- **`sidebarTitle` and `contentTitle` reach a real page on GTK and nothing on a phone.**
|
|
507
|
-
They are `Adw.NavigationPage:title` of the wrap `
|
|
500
|
+
They are `Adw.NavigationPage:title` of the wrap `Adw.NavigationSplitView` puts around each
|
|
508
501
|
pane, which libadwaita uses for the header of a collapsed view. The React Native half has
|
|
509
502
|
no header bar to put a title in, so it carries them and draws neither — the same shape as
|
|
510
503
|
`iconName`.
|
|
@@ -527,7 +520,7 @@ than smoothed over.
|
|
|
527
520
|
would be read off (measured — the GTK half used to report `''` there, a name no page
|
|
528
521
|
carries), and on the other half the core's auto-pick lands before the subscription
|
|
529
522
|
exists. Both halves are asserted at the two ends of that.
|
|
530
|
-
- **`
|
|
523
|
+
- **`Adw.ViewSwitcher` bundles the stack libadwaita keeps separate.** `Adw.ViewSwitcher:stack`
|
|
531
524
|
points at an `Adw.ViewStack` elsewhere in the tree, and a React prop cannot hold a widget
|
|
532
525
|
that does not exist yet on the half where widgets exist at all. Both other renderers made
|
|
533
526
|
the same call. On GTK nothing is simulated: the component builds a real `Adw.ViewStack`
|
package/lib/esm/index.gtk.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{AdwActionRow as e}from"./widgets/action-row.gtk.js";import{AdwAvatar as t}from"./widgets/avatar.gtk.js";import{AdwBanner as n}from"./widgets/banner.gtk.js";import{AdwBin as r}from"./widgets/bin.gtk.js";import{AdwButtonContent as i}from"./widgets/button-content.gtk.js";import{AdwButtonRow as a}from"./widgets/button-row.gtk.js";import{AdwClamp as o}from"./widgets/clamp.gtk.js";import{AdwComboRow as s}from"./widgets/combo-row.gtk.js";import{AdwEntryRow as c}from"./widgets/entry-row.gtk.js";import{AdwExpanderRow as l}from"./widgets/expander-row.gtk.js";import{AdwHeaderBar as u}from"./widgets/header-bar.gtk.js";import{AdwNavigationPage as d}from"./widgets/navigation-page.gtk.js";import{AdwNavigationSplitView as f}from"./widgets/navigation-split-view.gtk.js";import{AdwNavigationView as p}from"./widgets/navigation-view.gtk.js";import{AdwOverlaySplitView as m}from"./widgets/overlay-split-view.gtk.js";import{AdwPasswordEntryRow as h}from"./widgets/password-entry-row.gtk.js";import{AdwPreferencesGroup as g}from"./widgets/preferences-group.gtk.js";import{AdwPreferencesPage as _}from"./widgets/preferences-page.gtk.js";import{AdwSpinRow as v}from"./widgets/spin-row.gtk.js";import{AdwSpinner as y}from"./widgets/spinner.gtk.js";import{AdwStatusPage as b}from"./widgets/status-page.gtk.js";import{AdwSwitchRow as x}from"./widgets/switch-row.gtk.js";import{AdwToastOverlay as S}from"./widgets/toast-overlay.gtk.js";import{AdwToolbarView as C}from"./widgets/toolbar-view.gtk.js";import{AdwViewStack as w}from"./widgets/view-stack.gtk.js";import{AdwViewSwitcher as T}from"./widgets/view-switcher.gtk.js";import{AdwWindowTitle as E}from"./widgets/window-title.gtk.js";import{AdwWrapBox as D}from"./widgets/wrap-box.gtk.js";const O={ActionRow:e,Avatar:t,Banner:n,Bin:r,ButtonContent:i,ButtonRow:a,Clamp:o,ComboRow:s,EntryRow:c,ExpanderRow:l,HeaderBar:u,NavigationPage:d,NavigationSplitView:f,NavigationView:p,OverlaySplitView:m,PasswordEntryRow:h,PreferencesGroup:g,PreferencesPage:_,SpinRow:v,Spinner:y,StatusPage:b,SwitchRow:x,ToastOverlay:S,ToolbarView:C,ViewStack:w,ViewSwitcher:T,WindowTitle:E,WrapBox:D};export{O as Adw
|
|
1
|
+
import{AdwActionRow as e}from"./widgets/action-row.gtk.js";import{AdwAvatar as t}from"./widgets/avatar.gtk.js";import{AdwBanner as n}from"./widgets/banner.gtk.js";import{AdwBin as r}from"./widgets/bin.gtk.js";import{AdwButtonContent as i}from"./widgets/button-content.gtk.js";import{AdwButtonRow as a}from"./widgets/button-row.gtk.js";import{AdwClamp as o}from"./widgets/clamp.gtk.js";import{AdwComboRow as s}from"./widgets/combo-row.gtk.js";import{AdwEntryRow as c}from"./widgets/entry-row.gtk.js";import{AdwExpanderRow as l}from"./widgets/expander-row.gtk.js";import{AdwHeaderBar as u}from"./widgets/header-bar.gtk.js";import{AdwNavigationPage as d}from"./widgets/navigation-page.gtk.js";import{AdwNavigationSplitView as f}from"./widgets/navigation-split-view.gtk.js";import{AdwNavigationView as p}from"./widgets/navigation-view.gtk.js";import{AdwOverlaySplitView as m}from"./widgets/overlay-split-view.gtk.js";import{AdwPasswordEntryRow as h}from"./widgets/password-entry-row.gtk.js";import{AdwPreferencesGroup as g}from"./widgets/preferences-group.gtk.js";import{AdwPreferencesPage as _}from"./widgets/preferences-page.gtk.js";import{AdwSpinRow as v}from"./widgets/spin-row.gtk.js";import{AdwSpinner as y}from"./widgets/spinner.gtk.js";import{AdwStatusPage as b}from"./widgets/status-page.gtk.js";import{AdwSwitchRow as x}from"./widgets/switch-row.gtk.js";import{AdwToastOverlay as S}from"./widgets/toast-overlay.gtk.js";import{AdwToolbarView as C}from"./widgets/toolbar-view.gtk.js";import{AdwViewStack as w}from"./widgets/view-stack.gtk.js";import{AdwViewSwitcher as T}from"./widgets/view-switcher.gtk.js";import{AdwWindowTitle as E}from"./widgets/window-title.gtk.js";import{AdwWrapBox as D}from"./widgets/wrap-box.gtk.js";const O={ActionRow:e,Avatar:t,Banner:n,Bin:r,ButtonContent:i,ButtonRow:a,Clamp:o,ComboRow:s,EntryRow:c,ExpanderRow:l,HeaderBar:u,NavigationPage:d,NavigationSplitView:f,NavigationView:p,OverlaySplitView:m,PasswordEntryRow:h,PreferencesGroup:g,PreferencesPage:_,SpinRow:v,Spinner:y,StatusPage:b,SwitchRow:x,ToastOverlay:S,ToolbarView:C,ViewStack:w,ViewSwitcher:T,WindowTitle:E,WrapBox:D};export{O as Adw};
|
package/lib/esm/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{AdwActionRow as e}from"./widgets/action-row.js";import{AdwAvatar as t}from"./widgets/avatar.js";import{AdwBanner as n}from"./widgets/banner.js";import{AdwBin as r}from"./widgets/bin.js";import{AdwButtonContent as i}from"./widgets/button-content.js";import{AdwButtonRow as a}from"./widgets/button-row.js";import{AdwClamp as o}from"./widgets/clamp.js";import{AdwComboRow as s}from"./widgets/combo-row.js";import{AdwEntryRow as c}from"./widgets/entry-row.js";import{AdwExpanderRow as l}from"./widgets/expander-row.js";import{AdwHeaderBar as u}from"./widgets/header-bar.js";import{AdwNavigationPage as d}from"./widgets/navigation-page.js";import{AdwNavigationSplitView as f}from"./widgets/navigation-split-view.js";import{AdwNavigationView as p}from"./widgets/navigation-view.js";import{AdwOverlaySplitView as m}from"./widgets/overlay-split-view.js";import{AdwPasswordEntryRow as h}from"./widgets/password-entry-row.js";import{AdwPreferencesGroup as g}from"./widgets/preferences-group.js";import{AdwPreferencesPage as _}from"./widgets/preferences-page.js";import{AdwSpinRow as v}from"./widgets/spin-row.js";import{AdwSpinner as y}from"./widgets/spinner.js";import{AdwStatusPage as b}from"./widgets/status-page.js";import{AdwSwitchRow as x}from"./widgets/switch-row.js";import{AdwToastOverlay as S}from"./widgets/toast-overlay.js";import{AdwToolbarView as C}from"./widgets/toolbar-view.js";import{AdwViewStack as w}from"./widgets/view-stack.js";import{AdwViewSwitcher as T}from"./widgets/view-switcher.js";import{AdwWindowTitle as E}from"./widgets/window-title.js";import{AdwWrapBox as D}from"./widgets/wrap-box.js";const O={ActionRow:e,Avatar:t,Banner:n,Bin:r,ButtonContent:i,ButtonRow:a,Clamp:o,ComboRow:s,EntryRow:c,ExpanderRow:l,HeaderBar:u,NavigationPage:d,NavigationSplitView:f,NavigationView:p,OverlaySplitView:m,PasswordEntryRow:h,PreferencesGroup:g,PreferencesPage:_,SpinRow:v,Spinner:y,StatusPage:b,SwitchRow:x,ToastOverlay:S,ToolbarView:C,ViewStack:w,ViewSwitcher:T,WindowTitle:E,WrapBox:D};export{O as Adw
|
|
1
|
+
import{AdwActionRow as e}from"./widgets/action-row.js";import{AdwAvatar as t}from"./widgets/avatar.js";import{AdwBanner as n}from"./widgets/banner.js";import{AdwBin as r}from"./widgets/bin.js";import{AdwButtonContent as i}from"./widgets/button-content.js";import{AdwButtonRow as a}from"./widgets/button-row.js";import{AdwClamp as o}from"./widgets/clamp.js";import{AdwComboRow as s}from"./widgets/combo-row.js";import{AdwEntryRow as c}from"./widgets/entry-row.js";import{AdwExpanderRow as l}from"./widgets/expander-row.js";import{AdwHeaderBar as u}from"./widgets/header-bar.js";import{AdwNavigationPage as d}from"./widgets/navigation-page.js";import{AdwNavigationSplitView as f}from"./widgets/navigation-split-view.js";import{AdwNavigationView as p}from"./widgets/navigation-view.js";import{AdwOverlaySplitView as m}from"./widgets/overlay-split-view.js";import{AdwPasswordEntryRow as h}from"./widgets/password-entry-row.js";import{AdwPreferencesGroup as g}from"./widgets/preferences-group.js";import{AdwPreferencesPage as _}from"./widgets/preferences-page.js";import{AdwSpinRow as v}from"./widgets/spin-row.js";import{AdwSpinner as y}from"./widgets/spinner.js";import{AdwStatusPage as b}from"./widgets/status-page.js";import{AdwSwitchRow as x}from"./widgets/switch-row.js";import{AdwToastOverlay as S}from"./widgets/toast-overlay.js";import{AdwToolbarView as C}from"./widgets/toolbar-view.js";import{AdwViewStack as w}from"./widgets/view-stack.js";import{AdwViewSwitcher as T}from"./widgets/view-switcher.js";import{AdwWindowTitle as E}from"./widgets/window-title.js";import{AdwWrapBox as D}from"./widgets/wrap-box.js";const O={ActionRow:e,Avatar:t,Banner:n,Bin:r,ButtonContent:i,ButtonRow:a,Clamp:o,ComboRow:s,EntryRow:c,ExpanderRow:l,HeaderBar:u,NavigationPage:d,NavigationSplitView:f,NavigationView:p,OverlaySplitView:m,PasswordEntryRow:h,PreferencesGroup:g,PreferencesPage:_,SpinRow:v,Spinner:y,StatusPage:b,SwitchRow:x,ToastOverlay:S,ToolbarView:C,ViewStack:w,ViewSwitcher:T,WindowTitle:E,WrapBox:D};export{O as Adw};
|
package/lib/esm/index.native.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{AdwActionRow as e}from"./widgets/action-row.native.js";import{AdwAvatar as t}from"./widgets/avatar.native.js";import{AdwBanner as n}from"./widgets/banner.native.js";import{AdwBin as r}from"./widgets/bin.native.js";import{AdwButtonContent as i}from"./widgets/button-content.native.js";import{AdwButtonRow as a}from"./widgets/button-row.native.js";import{AdwClamp as o}from"./widgets/clamp.native.js";import{AdwComboRow as s}from"./widgets/combo-row.native.js";import{AdwEntryRow as c}from"./widgets/entry-row.native.js";import{AdwExpanderRow as l}from"./widgets/expander-row.native.js";import{AdwWindowTitle as u}from"./widgets/window-title.native.js";import{AdwHeaderBar as d}from"./widgets/header-bar.native.js";import{AdwNavigationPage as f}from"./widgets/navigation-page.native.js";import{AdwNavigationSplitView as p}from"./widgets/navigation-split-view.native.js";import{AdwNavigationView as m}from"./widgets/navigation-view.native.js";import{AdwOverlaySplitView as h}from"./widgets/overlay-split-view.native.js";import{AdwPasswordEntryRow as g}from"./widgets/password-entry-row.native.js";import{AdwPreferencesGroup as _}from"./widgets/preferences-group.native.js";import{AdwPreferencesPage as v}from"./widgets/preferences-page.native.js";import{AdwSpinRow as y}from"./widgets/spin-row.native.js";import{AdwSpinner as b}from"./widgets/spinner.native.js";import{AdwStatusPage as x}from"./widgets/status-page.native.js";import{AdwSwitchRow as S}from"./widgets/switch-row.native.js";import{AdwToastOverlay as C}from"./widgets/toast-overlay.native.js";import{AdwToolbarView as w}from"./widgets/toolbar-view.native.js";import{AdwViewStack as T}from"./widgets/view-stack.native.js";import{AdwViewSwitcher as E}from"./widgets/view-switcher.native.js";import{AdwWrapBox as D}from"./widgets/wrap-box.native.js";const O={ActionRow:e,Avatar:t,Banner:n,Bin:r,ButtonContent:i,ButtonRow:a,Clamp:o,ComboRow:s,EntryRow:c,ExpanderRow:l,HeaderBar:d,NavigationPage:f,NavigationSplitView:p,NavigationView:m,OverlaySplitView:h,PasswordEntryRow:g,PreferencesGroup:_,PreferencesPage:v,SpinRow:y,Spinner:b,StatusPage:x,SwitchRow:S,ToastOverlay:C,ToolbarView:w,ViewStack:T,ViewSwitcher:E,WindowTitle:u,WrapBox:D};export{O as Adw
|
|
1
|
+
import{AdwActionRow as e}from"./widgets/action-row.native.js";import{AdwAvatar as t}from"./widgets/avatar.native.js";import{AdwBanner as n}from"./widgets/banner.native.js";import{AdwBin as r}from"./widgets/bin.native.js";import{AdwButtonContent as i}from"./widgets/button-content.native.js";import{AdwButtonRow as a}from"./widgets/button-row.native.js";import{AdwClamp as o}from"./widgets/clamp.native.js";import{AdwComboRow as s}from"./widgets/combo-row.native.js";import{AdwEntryRow as c}from"./widgets/entry-row.native.js";import{AdwExpanderRow as l}from"./widgets/expander-row.native.js";import{AdwWindowTitle as u}from"./widgets/window-title.native.js";import{AdwHeaderBar as d}from"./widgets/header-bar.native.js";import{AdwNavigationPage as f}from"./widgets/navigation-page.native.js";import{AdwNavigationSplitView as p}from"./widgets/navigation-split-view.native.js";import{AdwNavigationView as m}from"./widgets/navigation-view.native.js";import{AdwOverlaySplitView as h}from"./widgets/overlay-split-view.native.js";import{AdwPasswordEntryRow as g}from"./widgets/password-entry-row.native.js";import{AdwPreferencesGroup as _}from"./widgets/preferences-group.native.js";import{AdwPreferencesPage as v}from"./widgets/preferences-page.native.js";import{AdwSpinRow as y}from"./widgets/spin-row.native.js";import{AdwSpinner as b}from"./widgets/spinner.native.js";import{AdwStatusPage as x}from"./widgets/status-page.native.js";import{AdwSwitchRow as S}from"./widgets/switch-row.native.js";import{AdwToastOverlay as C}from"./widgets/toast-overlay.native.js";import{AdwToolbarView as w}from"./widgets/toolbar-view.native.js";import{AdwViewStack as T}from"./widgets/view-stack.native.js";import{AdwViewSwitcher as E}from"./widgets/view-switcher.native.js";import{AdwWrapBox as D}from"./widgets/wrap-box.native.js";const O={ActionRow:e,Avatar:t,Banner:n,Bin:r,ButtonContent:i,ButtonRow:a,Clamp:o,ComboRow:s,EntryRow:c,ExpanderRow:l,HeaderBar:d,NavigationPage:f,NavigationSplitView:p,NavigationView:m,OverlaySplitView:h,PasswordEntryRow:g,PreferencesGroup:_,PreferencesPage:v,SpinRow:y,Spinner:b,StatusPage:x,SwitchRow:S,ToastOverlay:C,ToolbarView:w,ViewStack:T,ViewSwitcher:E,WindowTitle:u,WrapBox:D};export{O as Adw};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../_virtual/_rolldown/runtime.js";import{ADW_ROW_HIDDEN_STYLE as e,ADW_ROW_STYLE as t,AdwRowLabels as n}from"../row-shell.native.js";import{ComboState as r,normalizeComboOptions as i}from"@gjsify/adwaita-core";import{useCallback as a,useEffect as o,useRef as s,useState as c}from"react";import{Pressable as l,Text as u,View as d}from"react-native";import{jsx as f,jsxs as p}from"react/jsx-runtime";const optionsKey=e=>i(e).map(e=>`${e.value}\u0000${e.label}`).join(``);function AdwComboRow({title:m,subtitle:h,model:g,selected:_,useSubtitle:v,onNotifySelected:y}){let[b]=c(()=>{let e=new r;return e.
|
|
1
|
+
import"../_virtual/_rolldown/runtime.js";import{ADW_ROW_HIDDEN_STYLE as e,ADW_ROW_STYLE as t,AdwRowLabels as n}from"../row-shell.native.js";import{ComboState as r,normalizeComboOptions as i}from"@gjsify/adwaita-core";import{useCallback as a,useEffect as o,useRef as s,useState as c}from"react";import{Pressable as l,Text as u,View as d}from"react-native";import{jsx as f,jsxs as p}from"react/jsx-runtime";const optionsKey=e=>i(e).map(e=>`${e.value}\u0000${e.label}`).join(``);function AdwComboRow({title:m,subtitle:h,model:g,selected:_,useSubtitle:v,onNotifySelected:y}){let[b]=c(()=>{let e=new r;return e.setModel(i(g)),_!==void 0&&e.setSelectedIndex(_),e}),[x,S]=c(()=>({selected:b.selectedIndex,label:b.selectedLabel,presentsChooser:b.presentsChooser}));o(()=>b.subscribe(e=>{S({selected:e.selected,label:e.label,presentsChooser:b.presentsChooser}),y?.(e.selected)}),[b,y]);let C=optionsKey(g),w=s(C);o(()=>{w.current!==C&&(w.current=C,b.setModel(i(g)))},[b,C]),o(()=>{_!==void 0&&b.setSelectedIndex(_)},[b,_]);let T=a(()=>{b.select((b.selectedIndex+1)%b.count)},[b]);return p(l,{style:t,accessibilityRole:`combobox`,disabled:!x.presentsChooser,onPress:T,children:[f(n,{title:m,subtitle:v===!0?x.label:h}),f(u,{style:v===!0?e:void 0,children:x.label}),f(d,{style:x.presentsChooser?void 0:e,children:f(u,{children:`▾`})})]})}export{AdwComboRow};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../_virtual/_rolldown/runtime.js";import{jsx as e}from"@gjsify/gtk-host/react/jsx-runtime";import t from"gi://Gtk?version=4.0";import{useCallback as
|
|
1
|
+
import"../_virtual/_rolldown/runtime.js";import{jsx as e}from"@gjsify/gtk-host/react/jsx-runtime";import{ADW_ADJUSTMENT_DEFAULTS as t,clampAdjustmentValue as n,normalizeAdjustment as r}from"@gjsify/adwaita-core";import i from"gi://Gtk?version=4.0";import{useCallback as a,useMemo as o,useRef as s}from"react";const c=t;function AdwSpinRow({title:t,subtitle:c,value:l,adjustment:u,digits:d,onNotifyValue:f}){let p=s(null),m=r(u),h=n(m,l??m.value),g=o(()=>new i.Adjustment({lower:m.lower,upper:m.upper,stepIncrement:m.stepIncrement,pageIncrement:m.pageIncrement,pageSize:m.pageSize,value:h}),[m.lower,m.upper,m.stepIncrement,m.pageIncrement,m.pageSize,h]),_=a(()=>{let e=p.current;e!==null&&f?.(e.value)},[f]);return e(`adw-spin-row`,{ref:p,title:t,subtitle:c,adjustment:g,digits:d,onNotifyValue:f===void 0?void 0:_})}export{c as ADW_SPIN_ROW_DEFAULTS,AdwSpinRow};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../_virtual/_rolldown/runtime.js";import{ADW_ROW_STYLE as e,AdwRowLabels as t}from"../row-shell.native.js";import{SpinState as n}from"@gjsify/adwaita-core";import{useCallback as
|
|
1
|
+
import"../_virtual/_rolldown/runtime.js";import{ADW_ROW_STYLE as e,AdwRowLabels as t}from"../row-shell.native.js";import{SpinState as n,adjustmentRange as r,normalizeAdjustment as i}from"@gjsify/adwaita-core";import{useCallback as a,useEffect as o,useMemo as s,useState as c}from"react";import{Pressable as l,Text as u}from"react-native";import{jsx as d,jsxs as f}from"react/jsx-runtime";function AdwSpinRow({title:p,subtitle:m,value:h,adjustment:g,digits:_,onNotifyValue:v}){let[y]=c(()=>{let e=new n;return e.configure(g),h!==void 0&&e.setValue(h),e}),[b,x]=c(()=>y.value),[S,C]=c(()=>r(y.adjustment)),w=s(()=>i(g),[g?.lower,g?.upper,g?.stepIncrement,g?.pageIncrement,g?.pageSize,g?.value]),T=h??g?.value;o(()=>y.subscribe(e=>{x(e.value),v?.(e.value)}),[y,v]),o(()=>y.subscribeChanged(e=>C(r(e))),[y]),o(()=>{let{value:e,...t}=w;y.configure(T===void 0?t:{...t,value:T})},[y,w,T]);let E=a(()=>{y.decrement()},[y]),D=a(()=>{y.increment()},[y]);return f(l,{style:e,accessibilityRole:`adjustable`,children:[d(t,{title:p,subtitle:m}),d(u,{children:b.toFixed(_??0)}),d(l,{accessibilityRole:`button`,disabled:b<=S[0],onPress:E,children:d(u,{children:`−`})}),d(l,{accessibilityRole:`button`,disabled:b>=S[1],onPress:D,children:d(u,{children:`+`})})]})}export{AdwSpinRow};
|
package/lib/types/index.d.ts
CHANGED
|
@@ -1,32 +1,4 @@
|
|
|
1
1
|
export type { AdwActionRowProps, AdwAvatarProps, AdwBannerProps, AdwBinProps, AdwButtonContentProps, AdwButtonRowProps, AdwClampProps, AdwComboRowProps, AdwEntryRowProps, AdwExpanderRowProps, AdwHeaderBarProps, AdwNavigationPageProps, AdwNavigationSplitViewProps, AdwNavigationViewHandle, AdwNavigationViewProps, AdwOverlaySplitViewProps, AdwPasswordEntryRowProps, AdwPreferencesGroupProps, AdwPreferencesPageProps, AdwRowProps, AdwSidebarWidthProps, AdwSpinRowProps, AdwSpinnerProps, AdwStatusPageProps, AdwSwitchRowProps, AdwToastOverlayHandle, AdwToastOverlayProps, AdwToolbarViewProps, AdwViewStackPageProps, AdwViewStackProps, AdwViewSwitcherProps, AdwWidgetProps, AdwWindowTitleProps, AdwWrapBoxProps, } from './props.js';
|
|
2
|
-
export { AdwActionRow } from './widgets/action-row.js';
|
|
3
|
-
export { AdwAvatar } from './widgets/avatar.js';
|
|
4
|
-
export { AdwBanner } from './widgets/banner.js';
|
|
5
|
-
export { AdwBin } from './widgets/bin.js';
|
|
6
|
-
export { AdwButtonContent } from './widgets/button-content.js';
|
|
7
|
-
export { AdwButtonRow } from './widgets/button-row.js';
|
|
8
|
-
export { AdwClamp } from './widgets/clamp.js';
|
|
9
|
-
export { AdwComboRow } from './widgets/combo-row.js';
|
|
10
|
-
export { AdwEntryRow } from './widgets/entry-row.js';
|
|
11
|
-
export { AdwExpanderRow } from './widgets/expander-row.js';
|
|
12
|
-
export { AdwHeaderBar } from './widgets/header-bar.js';
|
|
13
|
-
export { AdwNavigationPage } from './widgets/navigation-page.js';
|
|
14
|
-
export { AdwNavigationSplitView } from './widgets/navigation-split-view.js';
|
|
15
|
-
export { AdwNavigationView } from './widgets/navigation-view.js';
|
|
16
|
-
export { AdwOverlaySplitView } from './widgets/overlay-split-view.js';
|
|
17
|
-
export { AdwPasswordEntryRow } from './widgets/password-entry-row.js';
|
|
18
|
-
export { AdwPreferencesGroup } from './widgets/preferences-group.js';
|
|
19
|
-
export { AdwPreferencesPage } from './widgets/preferences-page.js';
|
|
20
|
-
export { AdwSpinRow } from './widgets/spin-row.js';
|
|
21
|
-
export { AdwSpinner } from './widgets/spinner.js';
|
|
22
|
-
export { AdwStatusPage } from './widgets/status-page.js';
|
|
23
|
-
export { AdwSwitchRow } from './widgets/switch-row.js';
|
|
24
|
-
export { AdwToastOverlay } from './widgets/toast-overlay.js';
|
|
25
|
-
export { AdwToolbarView } from './widgets/toolbar-view.js';
|
|
26
|
-
export { AdwViewStack } from './widgets/view-stack.js';
|
|
27
|
-
export { AdwViewSwitcher } from './widgets/view-switcher.js';
|
|
28
|
-
export { AdwWindowTitle } from './widgets/window-title.js';
|
|
29
|
-
export { AdwWrapBox } from './widgets/wrap-box.js';
|
|
30
2
|
import { AdwActionRow as ActionRow } from './widgets/action-row.js';
|
|
31
3
|
import { AdwAvatar as Avatar } from './widgets/avatar.js';
|
|
32
4
|
import { AdwBanner as Banner } from './widgets/banner.js';
|
package/lib/types/index.gtk.d.ts
CHANGED
|
@@ -1,32 +1,4 @@
|
|
|
1
1
|
export type { AdwActionRowProps, AdwAvatarProps, AdwBannerProps, AdwBinProps, AdwButtonContentProps, AdwButtonRowProps, AdwClampProps, AdwComboRowProps, AdwEntryRowProps, AdwExpanderRowProps, AdwHeaderBarProps, AdwNavigationPageProps, AdwNavigationSplitViewProps, AdwNavigationViewHandle, AdwNavigationViewProps, AdwOverlaySplitViewProps, AdwPasswordEntryRowProps, AdwPreferencesGroupProps, AdwPreferencesPageProps, AdwRowProps, AdwSidebarWidthProps, AdwSpinRowProps, AdwSpinnerProps, AdwStatusPageProps, AdwSwitchRowProps, AdwToastOverlayHandle, AdwToastOverlayProps, AdwToolbarViewProps, AdwViewStackPageProps, AdwViewStackProps, AdwViewSwitcherProps, AdwWidgetProps, AdwWindowTitleProps, AdwWrapBoxProps, } from './props.js';
|
|
2
|
-
export { AdwActionRow } from './widgets/action-row.gtk.js';
|
|
3
|
-
export { AdwAvatar } from './widgets/avatar.gtk.js';
|
|
4
|
-
export { AdwBanner } from './widgets/banner.gtk.js';
|
|
5
|
-
export { AdwBin } from './widgets/bin.gtk.js';
|
|
6
|
-
export { AdwButtonContent } from './widgets/button-content.gtk.js';
|
|
7
|
-
export { AdwButtonRow } from './widgets/button-row.gtk.js';
|
|
8
|
-
export { AdwClamp } from './widgets/clamp.gtk.js';
|
|
9
|
-
export { AdwComboRow } from './widgets/combo-row.gtk.js';
|
|
10
|
-
export { AdwEntryRow } from './widgets/entry-row.gtk.js';
|
|
11
|
-
export { AdwExpanderRow } from './widgets/expander-row.gtk.js';
|
|
12
|
-
export { AdwHeaderBar } from './widgets/header-bar.gtk.js';
|
|
13
|
-
export { AdwNavigationPage } from './widgets/navigation-page.gtk.js';
|
|
14
|
-
export { AdwNavigationSplitView } from './widgets/navigation-split-view.gtk.js';
|
|
15
|
-
export { AdwNavigationView } from './widgets/navigation-view.gtk.js';
|
|
16
|
-
export { AdwOverlaySplitView } from './widgets/overlay-split-view.gtk.js';
|
|
17
|
-
export { AdwPasswordEntryRow } from './widgets/password-entry-row.gtk.js';
|
|
18
|
-
export { AdwPreferencesGroup } from './widgets/preferences-group.gtk.js';
|
|
19
|
-
export { AdwPreferencesPage } from './widgets/preferences-page.gtk.js';
|
|
20
|
-
export { AdwSpinRow } from './widgets/spin-row.gtk.js';
|
|
21
|
-
export { AdwSpinner } from './widgets/spinner.gtk.js';
|
|
22
|
-
export { AdwStatusPage } from './widgets/status-page.gtk.js';
|
|
23
|
-
export { AdwSwitchRow } from './widgets/switch-row.gtk.js';
|
|
24
|
-
export { AdwToastOverlay } from './widgets/toast-overlay.gtk.js';
|
|
25
|
-
export { AdwToolbarView } from './widgets/toolbar-view.gtk.js';
|
|
26
|
-
export { AdwViewStack } from './widgets/view-stack.gtk.js';
|
|
27
|
-
export { AdwViewSwitcher } from './widgets/view-switcher.gtk.js';
|
|
28
|
-
export { AdwWindowTitle } from './widgets/window-title.gtk.js';
|
|
29
|
-
export { AdwWrapBox } from './widgets/wrap-box.gtk.js';
|
|
30
2
|
import { AdwActionRow as ActionRow } from './widgets/action-row.gtk.js';
|
|
31
3
|
import { AdwAvatar as Avatar } from './widgets/avatar.gtk.js';
|
|
32
4
|
import { AdwBanner as Banner } from './widgets/banner.gtk.js';
|
|
@@ -1,32 +1,4 @@
|
|
|
1
1
|
export type { AdwActionRowProps, AdwAvatarProps, AdwBannerProps, AdwBinProps, AdwButtonContentProps, AdwButtonRowProps, AdwClampProps, AdwComboRowProps, AdwEntryRowProps, AdwExpanderRowProps, AdwHeaderBarProps, AdwNavigationPageProps, AdwNavigationSplitViewProps, AdwNavigationViewHandle, AdwNavigationViewProps, AdwOverlaySplitViewProps, AdwPasswordEntryRowProps, AdwPreferencesGroupProps, AdwPreferencesPageProps, AdwRowProps, AdwSidebarWidthProps, AdwSpinRowProps, AdwSpinnerProps, AdwStatusPageProps, AdwSwitchRowProps, AdwToastOverlayHandle, AdwToastOverlayProps, AdwToolbarViewProps, AdwViewStackPageProps, AdwViewStackProps, AdwViewSwitcherProps, AdwWidgetProps, AdwWindowTitleProps, AdwWrapBoxProps, } from './props.js';
|
|
2
|
-
export { AdwActionRow } from './widgets/action-row.native.js';
|
|
3
|
-
export { AdwAvatar } from './widgets/avatar.native.js';
|
|
4
|
-
export { AdwBanner } from './widgets/banner.native.js';
|
|
5
|
-
export { AdwBin } from './widgets/bin.native.js';
|
|
6
|
-
export { AdwButtonContent } from './widgets/button-content.native.js';
|
|
7
|
-
export { AdwButtonRow } from './widgets/button-row.native.js';
|
|
8
|
-
export { AdwClamp } from './widgets/clamp.native.js';
|
|
9
|
-
export { AdwComboRow } from './widgets/combo-row.native.js';
|
|
10
|
-
export { AdwEntryRow } from './widgets/entry-row.native.js';
|
|
11
|
-
export { AdwExpanderRow } from './widgets/expander-row.native.js';
|
|
12
|
-
export { AdwHeaderBar } from './widgets/header-bar.native.js';
|
|
13
|
-
export { AdwNavigationPage } from './widgets/navigation-page.native.js';
|
|
14
|
-
export { AdwNavigationSplitView } from './widgets/navigation-split-view.native.js';
|
|
15
|
-
export { AdwNavigationView } from './widgets/navigation-view.native.js';
|
|
16
|
-
export { AdwOverlaySplitView } from './widgets/overlay-split-view.native.js';
|
|
17
|
-
export { AdwPasswordEntryRow } from './widgets/password-entry-row.native.js';
|
|
18
|
-
export { AdwPreferencesGroup } from './widgets/preferences-group.native.js';
|
|
19
|
-
export { AdwPreferencesPage } from './widgets/preferences-page.native.js';
|
|
20
|
-
export { AdwSpinRow } from './widgets/spin-row.native.js';
|
|
21
|
-
export { AdwSpinner } from './widgets/spinner.native.js';
|
|
22
|
-
export { AdwStatusPage } from './widgets/status-page.native.js';
|
|
23
|
-
export { AdwSwitchRow } from './widgets/switch-row.native.js';
|
|
24
|
-
export { AdwToastOverlay } from './widgets/toast-overlay.native.js';
|
|
25
|
-
export { AdwToolbarView } from './widgets/toolbar-view.native.js';
|
|
26
|
-
export { AdwViewStack } from './widgets/view-stack.native.js';
|
|
27
|
-
export { AdwViewSwitcher } from './widgets/view-switcher.native.js';
|
|
28
|
-
export { AdwWindowTitle } from './widgets/window-title.native.js';
|
|
29
|
-
export { AdwWrapBox } from './widgets/wrap-box.native.js';
|
|
30
2
|
import { AdwActionRow as ActionRow } from './widgets/action-row.native.js';
|
|
31
3
|
import { AdwAvatar as Avatar } from './widgets/avatar.native.js';
|
|
32
4
|
import { AdwBanner as Banner } from './widgets/banner.native.js';
|
package/lib/types/props.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AdwAdjustmentInput, AdwBannerButtonStyle, AdwLengthUnit, AdwListModelInput, AdwPackType, AdwToast, AdwToolbarStyle, AdwViewSwitcherPolicy, AdwWrapBoxJustify, AdwWrapBoxOrientation, AdwWrapBoxPackDirection, AdwWrapPolicy } from '@gjsify/adwaita-core';
|
|
2
2
|
import type { ReactNode, Ref } from 'react';
|
|
3
3
|
/**
|
|
4
4
|
* What a widget that HOLDS a child accepts.
|
|
@@ -475,11 +475,12 @@ export interface AdwPreferencesGroupProps extends AdwWidgetProps {
|
|
|
475
475
|
* `model` IS THE LIBADWAITA NAME AND NOT THE LIBADWAITA TYPE, which is the one liberty this
|
|
476
476
|
* surface takes and the reason it can exist at all. `AdwComboRow:model` is a
|
|
477
477
|
* `Gio.ListModel`; a props file that may import neither `gi://Gio` nor `react-native` cannot
|
|
478
|
-
* name that type, and the gallery refuses the widget
|
|
479
|
-
* (`adwaita-gallery-trees.mjs`: "its
|
|
480
|
-
* the
|
|
481
|
-
* `
|
|
482
|
-
* `@gjsify/adwaita-nativescript` already accept —
|
|
478
|
+
* name that type, and the gallery still refuses the widget — no longer for the value but for
|
|
479
|
+
* the seam (`adwaita-gallery-trees.mjs`: "its model is a Gio.ListModel, and nothing turns
|
|
480
|
+
* the portable list form into one at the ParamSpec seam"). What both halves CAN share is
|
|
481
|
+
* `@gjsify/adwaita-core`'s `AdwListModelInput` — the portable list model (ADR 0046), the
|
|
482
|
+
* item vocabulary `<adw-combo-row>` and `@gjsify/adwaita-nativescript` already accept —
|
|
483
|
+
* so the property keeps libadwaita's name
|
|
483
484
|
* and takes the shared description of a model. The GTK half turns it into the real
|
|
484
485
|
* `Gtk.StringList` it has to be; the React Native half feeds it to `ComboState`.
|
|
485
486
|
*
|
|
@@ -502,7 +503,7 @@ export interface AdwPreferencesGroupProps extends AdwWidgetProps {
|
|
|
502
503
|
*/
|
|
503
504
|
export interface AdwComboRowProps extends AdwRowProps {
|
|
504
505
|
/** `model` — the selectable items. See above on the type. */
|
|
505
|
-
model?:
|
|
506
|
+
model?: AdwListModelInput;
|
|
506
507
|
/** `selected` — the position of the selected item. Default 0. */
|
|
507
508
|
selected?: number;
|
|
508
509
|
/**
|
|
@@ -525,19 +526,15 @@ export interface AdwComboRowProps extends AdwRowProps {
|
|
|
525
526
|
*
|
|
526
527
|
* The two labels are {@link AdwRowProps}', as on every other boxed-list row here.
|
|
527
528
|
*
|
|
528
|
-
* THE RANGE IS
|
|
529
|
-
*
|
|
530
|
-
*
|
|
531
|
-
*
|
|
532
|
-
* are the ADJUSTMENT's own GObject property names — `Gtk.Adjustment:lower`, `:upper`,
|
|
533
|
-
* `:step-increment` — rather than a fourth private spelling.
|
|
529
|
+
* THE RANGE IS ONE OBJECT, as libadwaita spells it. `AdwSpinRow:adjustment` is a
|
|
530
|
+
* `Gtk.Adjustment` — a GObject that is not a widget — and this file names the portable form
|
|
531
|
+
* of it, `@gjsify/adwaita-core`'s {@link AdwAdjustmentInput} (ADR 0047), which is the value
|
|
532
|
+
* all four surfaces take under this one key.
|
|
534
533
|
*
|
|
535
|
-
*
|
|
536
|
-
*
|
|
537
|
-
*
|
|
538
|
-
*
|
|
539
|
-
* `min`/`max`/`step` internally; both halves here map onto that, so the arithmetic is still
|
|
540
|
-
* shared and only the spelling at the surface differs.
|
|
534
|
+
* IT USED TO BE THREE SCALARS HERE, hoisted onto the ROW: `lower`, `upper` and
|
|
535
|
+
* `stepIncrement` — the adjustment's own GObject property names, on an object that has
|
|
536
|
+
* none of them. The right vocabulary in the wrong place, and a fourth shape beside the two
|
|
537
|
+
* sibling renderers' `min`/`max`/`step`. All three converged on the one key the row has.
|
|
541
538
|
*
|
|
542
539
|
* `digits` IS A ROW PROPERTY AND NOT AN ADJUSTMENT ONE — `AdwSpinRow:digits`, the number of
|
|
543
540
|
* decimal places DISPLAYED. It is carried because it is the only one of the row's own
|
|
@@ -550,14 +547,18 @@ export interface AdwComboRowProps extends AdwRowProps {
|
|
|
550
547
|
* sibling renderer has them either.
|
|
551
548
|
*/
|
|
552
549
|
export interface AdwSpinRowProps extends AdwRowProps {
|
|
553
|
-
/** `value` — the current number, clamped into {@link
|
|
550
|
+
/** `value` — the current number, clamped into the {@link adjustment}'s range. Default 0. */
|
|
554
551
|
value?: number;
|
|
555
|
-
/**
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
552
|
+
/**
|
|
553
|
+
* `adjustment` — the range this row steps through, as `@gjsify/adwaita-core`'s portable
|
|
554
|
+
* {@link AdwAdjustmentInput} (ADR 0047).
|
|
555
|
+
*
|
|
556
|
+
* It used to be three flat props here (`lower`, `upper`, `stepIncrement`), which were
|
|
557
|
+
* `Gtk.Adjustment`'s own field names hoisted onto the ROW — the right vocabulary in the
|
|
558
|
+
* wrong place, since `Adw.SpinRow` has no such properties. Unwritten fields take
|
|
559
|
+
* `ADW_ADJUSTMENT_DEFAULTS`, so `adjustment={{ upper: 20 }}` is 0…20 step 1.
|
|
560
|
+
*/
|
|
561
|
+
adjustment?: AdwAdjustmentInput;
|
|
561
562
|
/** `digits` — decimal places DISPLAYED. Default 0. */
|
|
562
563
|
digits?: number;
|
|
563
564
|
/**
|
|
@@ -2,19 +2,13 @@
|
|
|
2
2
|
import { type ReactElement } from 'react';
|
|
3
3
|
import type { AdwSpinRowProps } from '../props.js';
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* The defaults both halves fall back to — re-exported from `@gjsify/adwaita-core`, which is
|
|
6
|
+
* where they moved with the value they describe (ADR 0047).
|
|
6
7
|
*
|
|
7
|
-
*
|
|
8
|
-
* own literals. They are not libadwaita's: a bare
|
|
9
|
-
* which is a spin row that cannot move.
|
|
10
|
-
* sibling renderers use it, and the GTK half adopts it here rather than shipping a widget
|
|
11
|
-
* whose omitted range means something else than it does on a phone.
|
|
8
|
+
* Kept exported under this name because the spec asserts the two halves against ONE table
|
|
9
|
+
* rather than each against its own literals. They are not libadwaita's: a bare
|
|
10
|
+
* `Gtk.Adjustment` is 0…0 with a step of 0, which is a spin row that cannot move.
|
|
12
11
|
*/
|
|
13
|
-
export declare const ADW_SPIN_ROW_DEFAULTS:
|
|
14
|
-
readonly lower: 0;
|
|
15
|
-
readonly upper: 100;
|
|
16
|
-
readonly stepIncrement: 1;
|
|
17
|
-
readonly value: 0;
|
|
18
|
-
};
|
|
12
|
+
export declare const ADW_SPIN_ROW_DEFAULTS: import("@gjsify/adwaita-core").AdwAdjustment;
|
|
19
13
|
/** {@link import('./spin-row.js').AdwSpinRow} on GTK. */
|
|
20
|
-
export declare function AdwSpinRow({ title, subtitle, value,
|
|
14
|
+
export declare function AdwSpinRow({ title, subtitle, value, adjustment, digits, onNotifyValue, }: AdwSpinRowProps): ReactElement | null;
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
import { type ReactElement } from 'react';
|
|
3
3
|
import type { AdwSpinRowProps } from '../props.js';
|
|
4
4
|
/** {@link import('./spin-row.js').AdwSpinRow} on React Native. */
|
|
5
|
-
export declare function AdwSpinRow({ title, subtitle, value,
|
|
5
|
+
export declare function AdwSpinRow({ title, subtitle, value, adjustment, digits, onNotifyValue, }: AdwSpinRowProps): ReactElement | null;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gjsify/adwaita-react-native",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.48.0",
|
|
4
4
|
"description": "Adwaita widgets with one API surface and two implementations — the real Adw.* widget on GTK4, React Native primitives on a phone",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"module": "lib/esm/index.js",
|
|
@@ -182,8 +182,8 @@
|
|
|
182
182
|
"design-system"
|
|
183
183
|
],
|
|
184
184
|
"dependencies": {
|
|
185
|
-
"@gjsify/adwaita-core": "^0.
|
|
186
|
-
"@gjsify/gtk-host": "^0.
|
|
185
|
+
"@gjsify/adwaita-core": "^0.48.0",
|
|
186
|
+
"@gjsify/gtk-host": "^0.48.0"
|
|
187
187
|
},
|
|
188
188
|
"peerDependencies": {
|
|
189
189
|
"react": "^19.2.0",
|
|
@@ -198,8 +198,8 @@
|
|
|
198
198
|
"@girs/adw-1": "4.6.0",
|
|
199
199
|
"@girs/gjs": "4.6.0",
|
|
200
200
|
"@girs/gtk-4.0": "4.6.0",
|
|
201
|
-
"@gjsify/cli": "^0.
|
|
202
|
-
"@gjsify/unit": "^0.
|
|
201
|
+
"@gjsify/cli": "^0.48.0",
|
|
202
|
+
"@gjsify/unit": "^0.48.0",
|
|
203
203
|
"@types/node": "^25.9.2",
|
|
204
204
|
"@types/react": "^19.2.2",
|
|
205
205
|
"@types/react-test-renderer": "^19.1.0",
|