Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
b79f5b4
fix: measure intrinsic text height at child cross-axis width
DavidWilliamBalbino Sep 13, 2026
ef981e6
fix: resolve intrinsic percentage widths only at containing block
DavidWilliamBalbino Sep 13, 2026
451e296
fix: use consistent platform metrics for text wrapping
DavidWilliamBalbino Sep 13, 2026
7137867
test: await formatted input delivery on the UI thread
DavidWilliamBalbino Sep 13, 2026
d6a6a87
fix: measure uppercase fallback glyphs without clipping short labels
DavidWilliamBalbino Sep 13, 2026
f83eaa3
fix(android): avoid double padding in custom host child frames
DavidWilliamBalbino Sep 13, 2026
3f6e17d
fix(android): keep virtual cell frames physical in RTL holders
DavidWilliamBalbino Sep 13, 2026
634ef37
fix(layout): measure row height with resolved flex child widths
DavidWilliamBalbino Sep 13, 2026
ebd00a3
fix(layout): size horizontal scroll content without label compression
DavidWilliamBalbino Sep 13, 2026
aa9a9df
fix(android): redraw scroll indicators when visibility changes
DavidWilliamBalbino Sep 13, 2026
7470fbc
fix(scroll): preserve persistent indicators and expose native appearance
DavidWilliamBalbino Sep 13, 2026
c223515
fix(android): expose tooling constructor for scroll container
DavidWilliamBalbino Sep 13, 2026
c2548cc
test(android): retain failing persistent-indicator window captures
DavidWilliamBalbino Sep 13, 2026
a904d22
test(android): collect renderer frames through Gradle test output
DavidWilliamBalbino Sep 13, 2026
69ee5cc
test(android): distinguish fixture content from inherited canvas color
DavidWilliamBalbino Sep 13, 2026
46bfe50
test(android): await presented content before indicator capture
DavidWilliamBalbino Sep 14, 2026
61ad1a2
docs: confirm indicator readiness fix across Android CI gates
DavidWilliamBalbino Sep 14, 2026
f22f558
fix(android): retain dialog viewport sizing for full-window modal con…
DavidWilliamBalbino Sep 14, 2026
3e62949
fix(android): preserve flattened row controls during viewport reduction
DavidWilliamBalbino Sep 14, 2026
19f1c0e
fix(layout): align and stretch native grid rows consistently
DavidWilliamBalbino Sep 14, 2026
d9d5b30
fix(android): stabilize intrinsic text baselines while preserving cen…
DavidWilliamBalbino Sep 14, 2026
5d1fbab
feat(layout): add shared minimum-width auto-fit grid columns
DavidWilliamBalbino Sep 14, 2026
e5e7628
fix(android): preserve input selection across password visibility cha…
DavidWilliamBalbino Sep 14, 2026
896ddae
fix(android): keep inactive input values at their leading text
DavidWilliamBalbino Sep 14, 2026
1d879ed
docs: verify leading input text in Android showcase
DavidWilliamBalbino Sep 14, 2026
704549b
feat(engine): add validated responsive grid template contract
DavidWilliamBalbino Sep 14, 2026
663957c
feat(native): integrate responsive grid templates into shared layout
DavidWilliamBalbino Sep 14, 2026
6a54f53
feat(native): expose validated responsive grid plans in PHP SDK
DavidWilliamBalbino Sep 14, 2026
649ec19
fix(native): reject invalid dynamic style dimensions
DavidWilliamBalbino Sep 14, 2026
e21d417
fix(native): isolate reactive style caches and validate metadata
DavidWilliamBalbino Sep 14, 2026
a3b551f
fix(native): preserve responsive cascade precedence and validate merges
DavidWilliamBalbino Sep 14, 2026
7d463a8
fix(native): validate selectors and compare cascade specificity exactly
DavidWilliamBalbino Sep 14, 2026
2654c90
fix(native): validate template metadata and close renderer static errors
DavidWilliamBalbino Sep 14, 2026
8338bec
fix(android): mount inserted descendants in retained virtual cells
DavidWilliamBalbino Sep 14, 2026
b84bd2e
test(ios): cover conditional insertion in retained virtual cells
DavidWilliamBalbino Sep 14, 2026
e840141
fix(android): preserve accessibility for partially visible virtual rows
DavidWilliamBalbino Sep 14, 2026
807b76c
fix(android): retain native list accessibility delegate behavior
DavidWilliamBalbino Sep 14, 2026
8e8c352
feat(android): expose reusable overlay collision resolution
DavidWilliamBalbino Sep 14, 2026
2e35530
style(engine): format responsive grid layout and regressions
DavidWilliamBalbino Sep 14, 2026
e963ef5
chore(native): prepare 1.0.28 candidate for expanded plugin API
DavidWilliamBalbino Sep 14, 2026
8346f69
docs(native): record completed platform and accessibility contracts
DavidWilliamBalbino Sep 14, 2026
f3f2311
docs(native): retain verified 1.0.28 candidate evidence
DavidWilliamBalbino Sep 14, 2026
7265316
feat(native): add scoped child visibility layout operation
DavidWilliamBalbino Sep 14, 2026
1d3cb56
feat(native): wire scoped child visibility on Android and UIKit
DavidWilliamBalbino Sep 14, 2026
defacc0
fix(android): reconcile deferred authored input values on blur
DavidWilliamBalbino Sep 14, 2026
91d515d
fix(android): accept signed decimal input without changing digit keyb…
DavidWilliamBalbino Sep 14, 2026
4882875
fix(ios): honor keyboard type and input mode contracts
DavidWilliamBalbino Sep 14, 2026
820b42d
fix(ios): apply secure text traits and disambiguate no-keyboard mode
DavidWilliamBalbino Sep 14, 2026
f8d2551
fix(ios): enforce input length on paste and composition commit
DavidWilliamBalbino Sep 14, 2026
7a9bee7
fix(ios): preserve readonly input semantics across editing paths
DavidWilliamBalbino Sep 14, 2026
cef35fc
fix(ios): map input completion hints and return key traits
DavidWilliamBalbino Sep 14, 2026
68d50ad
fix(ios): retain current submit text with isolated callback ownership
DavidWilliamBalbino Sep 14, 2026
48e5532
fix(ios): honor input submit and blur lifecycle semantics
DavidWilliamBalbino Sep 14, 2026
431a586
fix(ios): apply controlled input selection and verify submit registra…
DavidWilliamBalbino Sep 14, 2026
7130ee9
fix(ios): honor mounted autofocus and software keyboard suppression
DavidWilliamBalbino Sep 14, 2026
1f791f6
fix(native): resolve Composer SDK and pin Android renderer to release
DavidWilliamBalbino Oct 4, 2026
954391c
merge: integrate Native iOS input and renderer fixes
DavidWilliamBalbino Oct 4, 2026
76f72bf
perf(native): share Gradle cache and certify exact release renderer
DavidWilliamBalbino Oct 4, 2026
5d14bd3
release: prepare PAM Native 1.0.30
DavidWilliamBalbino Oct 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,7 @@ jobs:
path: |
android/app/build/reports/androidTests/connected/
android/app/build/outputs/androidTest-results/connected/
android/app/build/outputs/connected_android_test_additional_output/
android/macrobenchmark/build/reports/androidTests/connected/
android/macrobenchmark/build/outputs/androidTest-results/connected/
android/macrobenchmark/build/outputs/connected_android_test_additional_output/
Expand Down
25 changes: 16 additions & 9 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -388,16 +388,14 @@ jobs:
ref: main
path: pam-cli
persist-credentials: false
- uses: actions/checkout@v7
with:
repository: push-in/pam-native-ui
ref: 20ae14301c019fa0ca43c6977f80e74a80eb1bf6
path: pam-native-ui-candidate
persist-credentials: false
- uses: actions/download-artifact@v8
with:
name: pam-native-cli-linux-x86_64
path: candidate-cli
- uses: actions/download-artifact@v8
with:
name: pam-native-android
path: candidate-renderer
- uses: actions/setup-java@v5
with:
distribution: temurin
Expand Down Expand Up @@ -426,16 +424,25 @@ jobs:
candidate=$(find candidate-cli -maxdepth 1 -type f -name 'pam-native-cli-*-linux-x86_64' -print -quit)
test -n "${candidate}"
chmod +x "${candidate}"
candidate_package=$(mktemp -d "${RUNNER_TEMP}/pam-native-package.XXXXXXXX")
git archive HEAD | tar -x -C "${candidate_package}"
version=${PAM_RELEASE_TAG#v}
renderer="pam-native-android-renderer-${version}.tar.gz"
(cd candidate-renderer && sha256sum --check "${renderer}.sha256")
tar -xzf "candidate-renderer/${renderer}" -C "${candidate_package}" \
--strip-components=1 \
"pam-native-android-renderer-${version}/target/aarch64-linux-android/release/libpam_native_engine.a" \
"pam-native-android-renderer-${version}/target/x86_64-linux-android/release/libpam_native_engine.a"
printf '%s\n' "${version}" >"${candidate_package}/target/pam-native-engine-version"
printf 'PAM_BIN=%s\n' "${GITHUB_WORKSPACE}/pam-cli/target/release/pam" >>"${GITHUB_ENV}"
printf 'PAM_HOME=%s\n' "${pam_home}" >>"${GITHUB_ENV}"
printf 'PAM_NATIVE_CLI=%s\n' "$(realpath "${candidate}")" >>"${GITHUB_ENV}"
printf 'PAM_NATIVE_PACKAGE_PATH=%s\n' "${candidate_package}" >>"${GITHUB_ENV}"
- name: Prove every documented pam init and pam dev journey
uses: reactivecircus/android-emulator-runner@v2
env:
PAM_NATIVE_PACKAGE_PATH: ${{ github.workspace }}/packages/native
PAM_NATIVE_PACKAGE_PATH: ${{ env.PAM_NATIVE_PACKAGE_PATH }}
PAM_HOME: ${{ env.PAM_HOME }}
PAM_NATIVE_HOME: ${{ github.workspace }}
PAM_MOBILE_UI_PACKAGE_PATH: ${{ github.workspace }}/pam-native-ui-candidate
PAM_NATIVE_CLI: ${{ env.PAM_NATIVE_CLI }}
PAM_COMMUNITY_GATE_TIMEOUT_SECONDS: '1200'
with:
Expand Down
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
# Changelog

## 1.0.30 - 2026-10-03

- Resolve the SDK from the installed Composer package and install the Android
renderer for the exact PAM Native version, preventing host and engine ABI
mismatches during clean first runs.
- Complete iOS input editing contracts for keyboard modes, secure and readonly
fields, length limits, selection, submit, blur and autofocus. Preserve native
child visibility and responsive layout behavior across Android and iOS.
- Reuse Gradle dependencies across projects while removing project build outputs
after each command. Certify both Core and official UI starters with rendered
screen evidence and the exact candidate Android renderer.

## 1.0.29 - 2026-09-22

- Restore intrinsic row and text measurement: rows of flexible controls keep
Expand Down
6 changes: 3 additions & 3 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ members = [
exclude = ["pam-cli"]

[workspace.package]
version = "1.0.29"
version = "1.0.30"
edition = "2024"
rust-version = "1.88"
license = "Apache-2.0"
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,7 @@ installation is intended for custom hosts and framework contributors; most
applications should start with `pam init` or `pam add`:

```bash
pam composer require pushinbr/pam-native:^0.7
pam composer require pushinbr/pam-native:^1.0
```

## Community
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,31 @@ package dev.pam.nativeapp.render
import android.view.Gravity
import android.view.ViewGroup
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith

@RunWith(AndroidJUnit4::class)
class PamModalHostInstrumentedTest {
@Test
fun windowViewportOwnershipTracksPresentationChanges() {
val instrumentation = InstrumentationRegistry.getInstrumentation()
instrumentation.runOnMainSync {
val host = PamModalHost(instrumentation.targetContext)
host.setVisible(false)
for (presentation in listOf(1, 2, 3, 1)) {
host.setPresentation(presentation)
assertEquals(
"Window ownership for presentation $presentation",
presentation == 1,
host.usesWindowSizedContent(),
)
}
host.close()
}
}

@Test
fun dialogContentKeepsItsIntrinsicCardSizeAndIsCentered() {
val params = modalChildLayoutParams(presentation = 2, sheetHeight = 640)
Expand Down
Loading
Loading