diff --git a/scripts/check-mobile-ui-evidence.mjs b/scripts/check-mobile-ui-evidence.mjs index 4181fef..a94fe75 100644 --- a/scripts/check-mobile-ui-evidence.mjs +++ b/scripts/check-mobile-ui-evidence.mjs @@ -14,6 +14,7 @@ const componentDocs = JSON.parse( const components = tags(componentDirectory, '.png'); const gifs = tags(gifDirectory, '.gif'); const staticComponents = new Set(contract.staticComponents); +const candidateComponents = new Set(contract.candidateComponents ?? []); const failures = []; const documentedComponents = new Map( componentDocs.components.map((component) => [component.tag, component]), @@ -25,10 +26,18 @@ if ( || contract.capture?.api !== 31 || contract.capture?.densityDpi !== 420 || contract.capture?.screenCount !== 90 - || contract.capture?.interactionComponentCount !== contract.expectedComponentCount + || contract.capture?.interactionComponentCount !== contract.expectedComponentCount - candidateComponents.size ) { failures.push('physical Android capture provenance is missing or incomplete'); } +if ( + contract.candidateCapture?.api !== 36 + || contract.candidateCapture?.densityDpi !== 420 + || contract.candidateCapture?.componentCount !== candidateComponents.size + || !/^[a-f0-9]{64}$/.test(contract.candidateCapture?.buildSha256 ?? '') +) { + failures.push('emulator candidate capture provenance is missing or incomplete'); +} if (components.size !== contract.expectedComponentCount) { failures.push( @@ -52,7 +61,7 @@ for (const tag of staticComponents) { for (const tag of components) { const image = readFileSync(join(componentDirectory, `${tag}.png`)); if (!isPng(image)) failures.push(`${tag}.png is not a valid PNG asset`); - if (!staticComponents.has(tag) && !gifs.has(tag)) { + if (!staticComponents.has(tag) && !candidateComponents.has(tag) && !gifs.has(tag)) { failures.push(`${tag} is interactive but has no Android interaction GIF`); } const docs = documentedComponents.get(tag); @@ -74,6 +83,10 @@ for (const tag of components) { } } +for (const tag of candidateComponents) { + if (!components.has(tag)) failures.push(`${tag} candidate has no screenshot`); +} + for (const tag of documentedComponents.keys()) { if (!components.has(tag)) failures.push(`${tag} API record has no matching screenshot/page`); } @@ -90,8 +103,10 @@ if (failures.length > 0) { } console.log( - `PAM Native UI evidence complete: ${components.size}/${contract.expectedComponentCount} screenshots, ` + - `${components.size - staticComponents.size} interactive GIFs, ${staticComponents.size} static specimens, ` + + `PAM Native UI asset inventory validated (not release approval): ${components.size}/${contract.expectedComponentCount} screenshots, ` + + `${gifs.size} physical interaction GIFs, ` + + `${[...candidateComponents].filter((tag) => !staticComponents.has(tag)).length} emulator interactions awaiting physical GIFs, ` + + `${staticComponents.size} static specimens, ` + `${documentedComponents.size} component API records.`, ); diff --git a/src/assets/mobile-ui/components/p-app-scaffold.png b/src/assets/mobile-ui/components/p-app-scaffold.png new file mode 100644 index 0000000..19a5667 Binary files /dev/null and b/src/assets/mobile-ui/components/p-app-scaffold.png differ diff --git a/src/assets/mobile-ui/components/p-bottom-app-bar.png b/src/assets/mobile-ui/components/p-bottom-app-bar.png new file mode 100644 index 0000000..c6742e3 Binary files /dev/null and b/src/assets/mobile-ui/components/p-bottom-app-bar.png differ diff --git a/src/assets/mobile-ui/components/p-chart.png b/src/assets/mobile-ui/components/p-chart.png new file mode 100644 index 0000000..893fac2 Binary files /dev/null and b/src/assets/mobile-ui/components/p-chart.png differ diff --git a/src/assets/mobile-ui/components/p-command-palette.png b/src/assets/mobile-ui/components/p-command-palette.png new file mode 100644 index 0000000..31313b8 Binary files /dev/null and b/src/assets/mobile-ui/components/p-command-palette.png differ diff --git a/src/assets/mobile-ui/components/p-currency-field.png b/src/assets/mobile-ui/components/p-currency-field.png new file mode 100644 index 0000000..3d21d63 Binary files /dev/null and b/src/assets/mobile-ui/components/p-currency-field.png differ diff --git a/src/assets/mobile-ui/components/p-data-grid.png b/src/assets/mobile-ui/components/p-data-grid.png new file mode 100644 index 0000000..4803fd6 Binary files /dev/null and b/src/assets/mobile-ui/components/p-data-grid.png differ diff --git a/src/assets/mobile-ui/components/p-date-range-picker.png b/src/assets/mobile-ui/components/p-date-range-picker.png new file mode 100644 index 0000000..ee2eabf Binary files /dev/null and b/src/assets/mobile-ui/components/p-date-range-picker.png differ diff --git a/src/assets/mobile-ui/components/p-file-input.png b/src/assets/mobile-ui/components/p-file-input.png new file mode 100644 index 0000000..3c8a16b Binary files /dev/null and b/src/assets/mobile-ui/components/p-file-input.png differ diff --git a/src/assets/mobile-ui/components/p-filter-bar.png b/src/assets/mobile-ui/components/p-filter-bar.png new file mode 100644 index 0000000..a897d3e Binary files /dev/null and b/src/assets/mobile-ui/components/p-filter-bar.png differ diff --git a/src/assets/mobile-ui/components/p-masked-field.png b/src/assets/mobile-ui/components/p-masked-field.png new file mode 100644 index 0000000..0288782 Binary files /dev/null and b/src/assets/mobile-ui/components/p-masked-field.png differ diff --git a/src/assets/mobile-ui/components/p-multi-select.png b/src/assets/mobile-ui/components/p-multi-select.png new file mode 100644 index 0000000..8271737 Binary files /dev/null and b/src/assets/mobile-ui/components/p-multi-select.png differ diff --git a/src/assets/mobile-ui/components/p-navigation-bar.png b/src/assets/mobile-ui/components/p-navigation-bar.png new file mode 100644 index 0000000..b40d46a Binary files /dev/null and b/src/assets/mobile-ui/components/p-navigation-bar.png differ diff --git a/src/assets/mobile-ui/components/p-navigation-drawer.png b/src/assets/mobile-ui/components/p-navigation-drawer.png new file mode 100644 index 0000000..2e59334 Binary files /dev/null and b/src/assets/mobile-ui/components/p-navigation-drawer.png differ diff --git a/src/assets/mobile-ui/components/p-navigation-rail.png b/src/assets/mobile-ui/components/p-navigation-rail.png new file mode 100644 index 0000000..d072725 Binary files /dev/null and b/src/assets/mobile-ui/components/p-navigation-rail.png differ diff --git a/src/assets/mobile-ui/components/p-pagination.png b/src/assets/mobile-ui/components/p-pagination.png new file mode 100644 index 0000000..f40c257 Binary files /dev/null and b/src/assets/mobile-ui/components/p-pagination.png differ diff --git a/src/assets/mobile-ui/components/p-password-field.png b/src/assets/mobile-ui/components/p-password-field.png new file mode 100644 index 0000000..3cd2b22 Binary files /dev/null and b/src/assets/mobile-ui/components/p-password-field.png differ diff --git a/src/assets/mobile-ui/components/p-popover.png b/src/assets/mobile-ui/components/p-popover.png new file mode 100644 index 0000000..1aa17c5 Binary files /dev/null and b/src/assets/mobile-ui/components/p-popover.png differ diff --git a/src/assets/mobile-ui/components/p-progress-button.png b/src/assets/mobile-ui/components/p-progress-button.png new file mode 100644 index 0000000..f27b093 Binary files /dev/null and b/src/assets/mobile-ui/components/p-progress-button.png differ diff --git a/src/assets/mobile-ui/components/p-pull-to-refresh.png b/src/assets/mobile-ui/components/p-pull-to-refresh.png new file mode 100644 index 0000000..602ef75 Binary files /dev/null and b/src/assets/mobile-ui/components/p-pull-to-refresh.png differ diff --git a/src/assets/mobile-ui/components/p-reorderable-list.png b/src/assets/mobile-ui/components/p-reorderable-list.png new file mode 100644 index 0000000..2c29045 Binary files /dev/null and b/src/assets/mobile-ui/components/p-reorderable-list.png differ diff --git a/src/assets/mobile-ui/components/p-responsive-grid.png b/src/assets/mobile-ui/components/p-responsive-grid.png new file mode 100644 index 0000000..3e1ae2d Binary files /dev/null and b/src/assets/mobile-ui/components/p-responsive-grid.png differ diff --git a/src/assets/mobile-ui/components/p-result-state.png b/src/assets/mobile-ui/components/p-result-state.png new file mode 100644 index 0000000..92942dc Binary files /dev/null and b/src/assets/mobile-ui/components/p-result-state.png differ diff --git a/src/assets/mobile-ui/components/p-search-bar.png b/src/assets/mobile-ui/components/p-search-bar.png new file mode 100644 index 0000000..183f075 Binary files /dev/null and b/src/assets/mobile-ui/components/p-search-bar.png differ diff --git a/src/assets/mobile-ui/components/p-section-list.png b/src/assets/mobile-ui/components/p-section-list.png new file mode 100644 index 0000000..e0ad14d Binary files /dev/null and b/src/assets/mobile-ui/components/p-section-list.png differ diff --git a/src/assets/mobile-ui/components/p-segmented-button.png b/src/assets/mobile-ui/components/p-segmented-button.png new file mode 100644 index 0000000..a970a7d Binary files /dev/null and b/src/assets/mobile-ui/components/p-segmented-button.png differ diff --git a/src/assets/mobile-ui/components/p-swipe-actions.png b/src/assets/mobile-ui/components/p-swipe-actions.png new file mode 100644 index 0000000..7fc8b23 Binary files /dev/null and b/src/assets/mobile-ui/components/p-swipe-actions.png differ diff --git a/src/assets/mobile-ui/components/p-tag-input.png b/src/assets/mobile-ui/components/p-tag-input.png new file mode 100644 index 0000000..698fda7 Binary files /dev/null and b/src/assets/mobile-ui/components/p-tag-input.png differ diff --git a/src/assets/mobile-ui/components/p-time-range-picker.png b/src/assets/mobile-ui/components/p-time-range-picker.png new file mode 100644 index 0000000..de2a1c0 Binary files /dev/null and b/src/assets/mobile-ui/components/p-time-range-picker.png differ diff --git a/src/assets/mobile-ui/components/p-tree-select.png b/src/assets/mobile-ui/components/p-tree-select.png new file mode 100644 index 0000000..ecb10f2 Binary files /dev/null and b/src/assets/mobile-ui/components/p-tree-select.png differ diff --git a/src/assets/mobile-ui/components/p-virtual-list.png b/src/assets/mobile-ui/components/p-virtual-list.png new file mode 100644 index 0000000..382eacf Binary files /dev/null and b/src/assets/mobile-ui/components/p-virtual-list.png differ diff --git a/src/components/PamNativeUiGallery.astro b/src/components/PamNativeUiGallery.astro index af87b5a..5bd5f0c 100644 --- a/src/components/PamNativeUiGallery.astro +++ b/src/components/PamNativeUiGallery.astro @@ -1,4 +1,6 @@ --- +import evidenceContract from '../data/mobile-ui-evidence.json'; + const modules = import.meta.glob('../assets/mobile-ui/components/p-*.png', { eager: true, query: '?url', @@ -35,9 +37,9 @@ const componentBase = `${siteBase}mobile-ui/components`; {`${tag} diff --git a/src/content/docs/packages/mobile-ui-architecture.mdx b/src/content/docs/packages/mobile-ui-architecture.mdx index f4ff422..23d9f58 100644 --- a/src/content/docs/packages/mobile-ui-architecture.mdx +++ b/src/content/docs/packages/mobile-ui-architecture.mdx @@ -49,6 +49,12 @@ Compatibility means equivalent public intent and state—not pixel-identical Android and iOS controls. Platform conventions are preserved when they produce the more native result. +Registry entries and implementation coverage do not establish runtime approval. +A passing PHP rendering matrix is not a substitute for device interactions, +visual review, accessibility checks or platform-specific execution. Treat a +verification gate as complete only when its evidence covers the release candidate +and the required platform; Android evidence cannot establish iOS validation. + ## Performance claims Performance evidence belongs to reproducible benchmarks with device, OS, @@ -68,4 +74,4 @@ Before shipping: See [PAM Native UI](/packages/mobile-ui/) for installation and authoring, and the [component catalog](/packages/mobile-ui-catalog/) -for the verified public surface. +for the documented public surface. diff --git a/src/content/docs/packages/mobile-ui-catalog.mdx b/src/content/docs/packages/mobile-ui-catalog.mdx index fb115f5..4adbd49 100644 --- a/src/content/docs/packages/mobile-ui-catalog.mdx +++ b/src/content/docs/packages/mobile-ui-catalog.mdx @@ -1,6 +1,6 @@ --- title: PAM Native UI component catalog -description: Complete verified catalog of PAM Native UI retained-native Material 3 tags for Android and iOS. +description: PAM Native UI component catalog with APIs, historical Android captures and separately identified candidate evidence. --- import PamNativeUiGallery from '../../../components/PamNativeUiGallery.astro'; @@ -20,25 +20,35 @@ import calendarDayGif from '../../../assets/mobile-ui/gifs/p-calendar-day.gif?ur import carouselGif from '../../../assets/mobile-ui/gifs/p-carousel.gif?url'; Every tag below creates or configures retained native UI. The release parity -manifest is the source of truth for this verified surface: **62 modules and 84 +manifest is the source of truth for the current surface: **92 modules and 114 component parts**, on both Android and iOS. The README, generated map, parity schema and executable release gate all use -this same 62-module/84-component contract. +this same 92-module/114-component contract. ## Android showcase application -The catalog below is also a real Android application. These images were -captured from the release renderer on a physical Samsung SM-G973F running -Android 12 (API 31) at 420 dpi—not from HTML, an emulator or a design mockup. -The publication gate verified **90/90 screens** and real interaction on +The media below records specific historical builds, not approval of the latest +source or every component state. Route execution, asset availability and package +compatibility checks are separate from complete visual, accessibility and +performance approval. New captures must identify their build and review scope; +do not treat an older screenshot as proof of a later correction. + +The catalog below is also a real Android application. The original showcase +set was captured from the release renderer on a physical Samsung SM-G973F +running Android 12 (API 31) at 420 dpi—not from HTML or a design mockup. That +physical pass verified **90/90 screens** and real interaction on the original **84/84 component routes**, including input, selection, drag, scroll and native -overlay flows. No blank render, invalid viewport or overlapping text is -accepted into this page. +overlay flows. + +The 30 components added in the current expansion have separate Android 16 +(API 36) emulator evidence and remain explicitly marked as candidates until +their physical Samsung interaction pass is recorded. Emulator evidence is +never presented as physical-device approval.
PAM Native UI showcase home on a physical Samsung Android device
Showcase home
-
Complete PAM Native UI component workbench on a physical Samsung Android device
84 components
+
Original PAM Native UI component workbench on a physical Samsung Android device
Original 84-component workbench
PAM Native UI actions showcase on a physical Samsung Android device
Actions
PAM Native UI forms showcase on a physical Samsung Android device
Forms
PAM Native UI data showcase on a physical Samsung Android device
Data
@@ -91,6 +101,18 @@ reuse views rather than recreate them. | Trees | `p-treeview`, `p-treeview-item` | | Floating actions | `p-speed-dial` | +## Universal application components + +| Area | Tags | +| --- | --- | +| Application shell | `p-app-scaffold`, `p-navigation-bar`, `p-navigation-rail`, `p-navigation-drawer`, `p-bottom-app-bar` | +| Search and commands | `p-search-bar`, `p-command-palette`, `p-filter-bar`, `p-pagination` | +| Advanced input | `p-password-field`, `p-masked-field`, `p-currency-field`, `p-tag-input`, `p-multi-select`, `p-file-input` | +| Date and selection | `p-date-range-picker`, `p-time-range-picker`, `p-segmented-button`, `p-tree-select` | +| Adaptive data | `p-responsive-grid`, `p-virtual-list`, `p-section-list`, `p-reorderable-list`, `p-data-grid` | +| Gestures and refresh | `p-swipe-actions`, `p-pull-to-refresh` | +| Feedback and visualization | `p-popover`, `p-progress-button`, `p-result-state`, `p-chart` | + ## Product composition Typed forms bind schema, values, errors, loading and submit behavior without diff --git a/src/content/docs/packages/mobile-ui.mdx b/src/content/docs/packages/mobile-ui.mdx index fee6ebc..f72bcba 100644 --- a/src/content/docs/packages/mobile-ui.mdx +++ b/src/content/docs/packages/mobile-ui.mdx @@ -41,18 +41,19 @@ Author with declarative `p-*` tags: ``` -Or compose the same native tree with typed PHP facades: +Or compose controls with typed PHP facades. Inside your component's render +method, bind the existing `shipOrder` method as a closure: ```php use Pam\MobileUi\Component\Button; use Pam\MobileUi\Component\Card; +use Pam\MobileUi\Enum\ColorToken; -$content = Card::make() - ->class('p-4 gap-3') +$content = Card::make(['class' => 'p-4 gap-3']) ->child( Button::make('Ship order') - ->onPress('shipOrder') - ->color('primary'), + ->onPress($this->shipOrder(...)) + ->color(ColorToken::Primary), ); ``` diff --git a/src/data/mobile-ui-components.json b/src/data/mobile-ui-components.json index 5a04e9c..0395e45 100644 --- a/src/data/mobile-ui-components.json +++ b/src/data/mobile-ui-components.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "componentCount": 84, + "componentCount": 114, "source": "push-in/pam-native-ui", "components": [ { @@ -306,6 +306,62 @@ "p-app-bar" ] }, + { + "tag": "p-app-scaffold", + "class": "PAppScaffold", + "namespace": "Pam\\MobileUi\\Material\\PAppScaffold", + "module": "app-scaffold", + "family": "Navigation and progress", + "summary": "Navigation and progress component rendered through the retained-native Android and UIKit pipeline.", + "interactive": false, + "profiles": [ + "Phone", + "Edge to edge", + "Keyboard aware", + "Compact" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PAppScaffold preview\"" + ] + }, + { + "name": "density", + "types": [ + "string" + ], + "examples": [ + "\"compact\"" + ] + }, + { + "name": "edges", + "types": [ + "string" + ], + "examples": [ + "\"top,bottom\"", + "\"left,right\"", + "\"top,bottom,left,right\"" + ] + }, + { + "name": "keyboardAware", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + } + ], + "related": [] + }, { "tag": "p-autocomplete", "class": "PAutocomplete", @@ -882,6 +938,69 @@ "p-banner" ] }, + { + "tag": "p-bottom-app-bar", + "class": "PBottomAppBar", + "namespace": "Pam\\MobileUi\\Material\\PBottomAppBar", + "module": "bottom-app-bar", + "family": "Navigation and progress", + "summary": "Navigation and progress component rendered through the retained-native Android and UIKit pipeline.", + "interactive": true, + "profiles": [ + "Actions", + "With FAB", + "Elevated", + "Tonal" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PBottomAppBar preview\"" + ] + }, + { + "name": "actionCount", + "types": [ + "int" + ], + "examples": [ + 3 + ] + }, + { + "name": "elevation", + "types": [ + "int" + ], + "examples": [ + 4 + ] + }, + { + "name": "fab", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "variant", + "types": [ + "string" + ], + "examples": [ + "\"tonal\"" + ] + } + ], + "related": [] + }, { "tag": "p-bottom-sheet", "class": "PBottomSheet", @@ -1907,7 +2026,11 @@ "summary": "Surfaces and media component rendered through the retained-native Android and UIKit pipeline.", "interactive": true, "profiles": [ - "Default" + "Default", + "Selected", + "Disabled", + "Compact", + "Immersive" ], "props": [ { @@ -1918,12 +2041,133 @@ "examples": [ "\"PCarouselItem preview\"" ] + }, + { + "name": "disabled", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "height", + "types": [ + "int" + ], + "examples": [ + 180, + 320 + ] + }, + { + "name": "hideDelimiters", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "selected", + "types": [ + "bool" + ], + "examples": [ + "true" + ] } ], "related": [ "p-carousel" ] }, + { + "tag": "p-chart", + "class": "PChart", + "namespace": "Pam\\MobileUi\\Material\\PChart", + "module": "chart", + "family": "Data display", + "summary": "Data display component rendered through the retained-native Android and UIKit pipeline.", + "interactive": false, + "profiles": [ + "Default", + "Line", + "Area", + "Bars" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"Revenue increased from 12 to 64\"" + ] + }, + { + "name": "fill", + "types": [ + "bool" + ], + "examples": [ + "true", + "false" + ] + }, + { + "name": "lineWidth", + "types": [ + "int" + ], + "examples": [ + 3 + ] + }, + { + "name": "showPoints", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "smooth", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "type", + "types": [ + "string" + ], + "examples": [ + "\"area\"", + "\"trend\"", + "\"bar\"" + ] + }, + { + "name": "values", + "types": [ + "string" + ], + "examples": [ + "\"12,18,14,26,22,34,31,42,38,52,48,64\"" + ] + } + ], + "related": [] + }, { "tag": "p-checkbox", "class": "PCheckbox", @@ -2562,22 +2806,18 @@ "related": [] }, { - "tag": "p-data-table", - "class": "PDataTable", - "namespace": "Pam\\MobileUi\\Material\\PDataTable", - "module": "data-table", - "family": "Data display", - "summary": "Data display component rendered through the retained-native Android and UIKit pipeline.", - "interactive": false, + "tag": "p-command-palette", + "class": "PCommandPalette", + "namespace": "Pam\\MobileUi\\Material\\PCommandPalette", + "module": "command-palette", + "family": "Overlays and feedback", + "summary": "Overlays and feedback component rendered through the retained-native Android and UIKit pipeline.", + "interactive": true, "profiles": [ - "Standard", - "Compact", - "Comfortable", - "Striped", - "Selectable", - "Loading", - "Empty", - "Mobile" + "Commands", + "Navigation", + "Selected", + "Empty" ], "props": [ { @@ -2586,49 +2826,276 @@ "string" ], "examples": [ - "\"PDataTable preview\"" - ] - }, - { - "name": "density", - "types": [ - "string" - ], - "examples": [ - "\"compact\"" + "\"PCommandPalette preview\"" ] }, { - "name": "headers", + "name": "items", "types": [ "array" ], "examples": [] }, { - "name": "itemHeight", + "name": "label", "types": [ - "int" + "string" ], "examples": [ - 52 + "\"Quick actions\"", + "\"Navigate\"", + "\"Build target\"", + "\"No matches\"" ] }, { - "name": "itemValue", + "name": "modelValue", "types": [ "string" ], "examples": [ - "\"id\"" + "\"Build Android\"" ] }, { - "name": "items", + "name": "open", "types": [ - "array" + "bool" ], - "examples": [] + "examples": [ + "true", + "false" + ] + } + ], + "related": [] + }, + { + "tag": "p-currency-field", + "class": "PCurrencyField", + "namespace": "Pam\\MobileUi\\Material\\PCurrencyField", + "module": "currency-field", + "family": "Forms and editing", + "summary": "Forms and editing component rendered through the retained-native Android and UIKit pipeline.", + "interactive": true, + "profiles": [ + "BRL", + "USD", + "No cents", + "Error" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PCurrencyField preview\"" + ] + }, + { + "name": "decimalDigits", + "types": [ + "int" + ], + "examples": [ + 2, + 0 + ] + }, + { + "name": "error", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "label", + "types": [ + "string" + ], + "examples": [ + "\"Investment\"", + "\"Revenue\"", + "\"Budget\"", + "\"Amount\"" + ] + }, + { + "name": "locale", + "types": [ + "string" + ], + "examples": [ + "\"pt-BR\"", + "\"en-US\"" + ] + }, + { + "name": "modelValue", + "types": [ + "string" + ], + "examples": [ + "\"128450\"", + "\"948025\"", + "\"12000\"" + ] + }, + { + "name": "prefix", + "types": [ + "string" + ], + "examples": [ + "\"R$ \"", + "\"$ \"" + ] + } + ], + "related": [] + }, + { + "tag": "p-data-grid", + "class": "PDataGrid", + "namespace": "Pam\\MobileUi\\Material\\PDataGrid", + "module": "data-grid", + "family": "Data display", + "summary": "Data display component rendered through the retained-native Android and UIKit pipeline.", + "interactive": true, + "profiles": [ + "Default", + "Selectable", + "Compact", + "Loading" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PDataGrid preview\"" + ] + }, + { + "name": "density", + "types": [ + "string" + ], + "examples": [ + "\"compact\"" + ] + }, + { + "name": "headers", + "types": [ + "array" + ], + "examples": [] + }, + { + "name": "items", + "types": [ + "array" + ], + "examples": [] + }, + { + "name": "loading", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "showSelect", + "types": [ + "bool" + ], + "examples": [ + "false", + "true" + ] + } + ], + "related": [] + }, + { + "tag": "p-data-table", + "class": "PDataTable", + "namespace": "Pam\\MobileUi\\Material\\PDataTable", + "module": "data-table", + "family": "Data display", + "summary": "Data display component rendered through the retained-native Android and UIKit pipeline.", + "interactive": false, + "profiles": [ + "Standard", + "Compact", + "Comfortable", + "Striped", + "Selectable", + "Loading", + "Empty", + "Mobile" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PDataTable preview\"" + ] + }, + { + "name": "density", + "types": [ + "string" + ], + "examples": [ + "\"compact\"" + ] + }, + { + "name": "headers", + "types": [ + "array" + ], + "examples": [] + }, + { + "name": "itemHeight", + "types": [ + "int" + ], + "examples": [ + 52 + ] + }, + { + "name": "itemValue", + "types": [ + "string" + ], + "examples": [ + "\"id\"" + ] + }, + { + "name": "items", + "types": [ + "array" + ], + "examples": [] }, { "name": "loading", @@ -3201,6 +3668,56 @@ ], "related": [] }, + { + "tag": "p-date-range-picker", + "class": "PDateRangePicker", + "namespace": "Pam\\MobileUi\\Material\\PDateRangePicker", + "module": "date-range-picker", + "family": "Dates and time", + "summary": "Dates and time component rendered through the retained-native Android and UIKit pipeline.", + "interactive": true, + "profiles": [ + "Selected range", + "Open range", + "With week", + "Disabled dates" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PDateRangePicker preview\"" + ] + }, + { + "name": "disabledDates", + "types": [ + "array" + ], + "examples": [] + }, + { + "name": "modelValue", + "types": [ + "array" + ], + "examples": [] + }, + { + "name": "showWeek", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + } + ], + "related": [] + }, { "tag": "p-dialog", "class": "PDialog", @@ -3942,16 +4459,142 @@ "related": [] }, { - "tag": "p-form", - "class": "PForm", - "namespace": "Pam\\MobileUi\\Material\\PForm", - "module": "form", + "tag": "p-file-input", + "class": "PFileInput", + "namespace": "Pam\\MobileUi\\Material\\PFileInput", + "module": "file-input", "family": "Forms and editing", "summary": "Forms and editing component rendered through the retained-native Android and UIKit pipeline.", "interactive": true, "profiles": [ - "Default", - "Focused", + "Single file", + "Multiple files", + "Selected", + "Disabled" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PFileInput preview\"" + ] + }, + { + "name": "disabled", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "label", + "types": [ + "string" + ], + "examples": [ + "\"Contract\"", + "\"Attachments\"", + "\"Resume\"" + ] + }, + { + "name": "limit", + "types": [ + "int" + ], + "examples": [ + 5 + ] + }, + { + "name": "multiple", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "text", + "types": [ + "string" + ], + "examples": [ + "\"Choose document\"", + "\"Choose files\"", + "\"resume.pdf\"" + ] + } + ], + "related": [] + }, + { + "tag": "p-filter-bar", + "class": "PFilterBar", + "namespace": "Pam\\MobileUi\\Material\\PFilterBar", + "module": "filter-bar", + "family": "Forms and editing", + "summary": "Forms and editing component rendered through the retained-native Android and UIKit pipeline.", + "interactive": true, + "profiles": [ + "Orders", + "Multiple", + "Empty", + "Disabled" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PFilterBar preview\"" + ] + }, + { + "name": "disabled", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "items", + "types": [ + "array" + ], + "examples": [] + }, + { + "name": "modelValue", + "types": [ + "array" + ], + "examples": [] + } + ], + "related": [] + }, + { + "tag": "p-form", + "class": "PForm", + "namespace": "Pam\\MobileUi\\Material\\PForm", + "module": "form", + "family": "Forms and editing", + "summary": "Forms and editing component rendered through the retained-native Android and UIKit pipeline.", + "interactive": true, + "profiles": [ + "Default", + "Focused", "Required", "Disabled", "Read Only", @@ -4667,6 +5310,82 @@ "p-list" ] }, + { + "tag": "p-masked-field", + "class": "PMaskedField", + "namespace": "Pam\\MobileUi\\Material\\PMaskedField", + "module": "masked-field", + "family": "Forms and editing", + "summary": "Forms and editing component rendered through the retained-native Android and UIKit pipeline.", + "interactive": true, + "profiles": [ + "Phone", + "Document", + "Focused", + "Error" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PMaskedField preview\"" + ] + }, + { + "name": "error", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "focused", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "label", + "types": [ + "string" + ], + "examples": [ + "\"Mobile phone\"", + "\"CPF\"", + "\"Phone\"" + ] + }, + { + "name": "modelValue", + "types": [ + "string" + ], + "examples": [ + "\"11987654321\"", + "\"12345678901\"" + ] + }, + { + "name": "pattern", + "types": [ + "string" + ], + "examples": [ + "\"(##) #####-####\"", + "\"###.###.###-##\"" + ] + } + ], + "related": [] + }, { "tag": "p-menu", "class": "PMenu", @@ -4790,33 +5509,18 @@ "related": [] }, { - "tag": "p-number-input", - "class": "PNumberInput", - "namespace": "Pam\\MobileUi\\Material\\PNumberInput", - "module": "number-input", + "tag": "p-multi-select", + "class": "PMultiSelect", + "namespace": "Pam\\MobileUi\\Material\\PMultiSelect", + "module": "multi-select", "family": "Forms and editing", "summary": "Forms and editing component rendered through the retained-native Android and UIKit pipeline.", "interactive": true, "profiles": [ - "Default", - "Comfortable", - "Compact", - "Disabled", - "Read Only", - "Error", - "Filled", - "Outlined", - "Underlined", - "Solo", - "Solo inverted", - "Solo filled", - "Plain", - "Hint and required", - "Inset Controls", - "Split Controls", - "Stacked Controls", - "Precision", - "Reverse" + "Teams", + "Searchable", + "Empty", + "Error" ], "props": [ { @@ -4825,80 +5529,367 @@ "string" ], "examples": [ - "\"PNumberInput preview\"" + "\"PMultiSelect preview\"" ] }, { - "name": "controlVariant", + "name": "error", "types": [ - "string" + "bool" ], "examples": [ - "\"inset\"", - "\"split\"", - "\"stacked\"" + "true" ] }, { - "name": "density", + "name": "items", "types": [ - "string" + "array" ], - "examples": [ - "\"comfortable\"", - "\"compact\"" - ] + "examples": [] }, { - "name": "disabled", + "name": "label", "types": [ - "bool" + "string" ], "examples": [ - "true" + "\"Teams\"", + "\"People\"", + "\"Categories\"" ] }, { - "name": "error", + "name": "modelValue", "types": [ - "bool" + "array" ], - "examples": [ - "true" - ] + "examples": [] }, { - "name": "helper", + "name": "placeholder", "types": [ "string" ], "examples": [ - "\"This value needs attention\"", - "\"Required field\"" + "\"Choose categories\"" ] - }, + } + ], + "related": [] + }, + { + "tag": "p-navigation-bar", + "class": "PNavigationBar", + "namespace": "Pam\\MobileUi\\Material\\PNavigationBar", + "module": "navigation-bar", + "family": "Navigation and progress", + "summary": "Navigation and progress component rendered through the retained-native Android and UIKit pipeline.", + "interactive": true, + "profiles": [ + "Three destinations", + "Four destinations", + "Five destinations", + "Tonal" + ], + "props": [ { - "name": "label", + "name": "accessibilityLabel", "types": [ "string" ], "examples": [ - "\"PNumberInput\"" + "\"PNavigationBar preview\"" ] }, { - "name": "max", + "name": "destinations", "types": [ "int" ], "examples": [ - 20 + 3, + 4, + 5 ] }, { - "name": "min", + "name": "modelValue", "types": [ - "int" + "string" + ], + "examples": [ + "\"components\"" + ] + }, + { + "name": "variant", + "types": [ + "string" + ], + "examples": [ + "\"tonal\"" + ] + } + ], + "related": [] + }, + { + "tag": "p-navigation-drawer", + "class": "PNavigationDrawer", + "namespace": "Pam\\MobileUi\\Material\\PNavigationDrawer", + "module": "navigation-drawer", + "family": "Navigation and progress", + "summary": "Navigation and progress component rendered through the retained-native Android and UIKit pipeline.", + "interactive": true, + "profiles": [ + "Front", + "Slide", + "End edge", + "Permanent" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PNavigationDrawer preview\"" + ] + }, + { + "name": "items", + "types": [ + "array" + ], + "examples": [] + }, + { + "name": "modelValue", + "types": [ + "string" + ], + "examples": [ + "\"Home\"" + ] + }, + { + "name": "open", + "types": [ + "bool" + ], + "examples": [ + "true", + "false" + ] + }, + { + "name": "position", + "types": [ + "string" + ], + "examples": [ + "\"end\"" + ] + }, + { + "name": "type", + "types": [ + "string" + ], + "examples": [ + "\"front\"", + "\"slide\"", + "\"permanent\"" + ] + } + ], + "related": [] + }, + { + "tag": "p-navigation-rail", + "class": "PNavigationRail", + "namespace": "Pam\\MobileUi\\Material\\PNavigationRail", + "module": "navigation-rail", + "family": "Navigation and progress", + "summary": "Navigation and progress component rendered through the retained-native Android and UIKit pipeline.", + "interactive": true, + "profiles": [ + "Standard", + "Expanded", + "With FAB", + "Compact" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PNavigationRail preview\"" + ] + }, + { + "name": "density", + "types": [ + "string" + ], + "examples": [ + "\"compact\"" + ] + }, + { + "name": "destinations", + "types": [ + "int" + ], + "examples": [ + 4 + ] + }, + { + "name": "expanded", + "types": [ + "bool" + ], + "examples": [ + "false", + "true" + ] + }, + { + "name": "fab", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "modelValue", + "types": [ + "string" + ], + "examples": [ + "\"components\"" + ] + } + ], + "related": [] + }, + { + "tag": "p-number-input", + "class": "PNumberInput", + "namespace": "Pam\\MobileUi\\Material\\PNumberInput", + "module": "number-input", + "family": "Forms and editing", + "summary": "Forms and editing component rendered through the retained-native Android and UIKit pipeline.", + "interactive": true, + "profiles": [ + "Default", + "Comfortable", + "Compact", + "Disabled", + "Read Only", + "Error", + "Filled", + "Outlined", + "Underlined", + "Solo", + "Solo inverted", + "Solo filled", + "Plain", + "Hint and required", + "Inset Controls", + "Split Controls", + "Stacked Controls", + "Precision", + "Reverse" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PNumberInput preview\"" + ] + }, + { + "name": "controlVariant", + "types": [ + "string" + ], + "examples": [ + "\"inset\"", + "\"split\"", + "\"stacked\"" + ] + }, + { + "name": "density", + "types": [ + "string" + ], + "examples": [ + "\"comfortable\"", + "\"compact\"" + ] + }, + { + "name": "disabled", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "error", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "helper", + "types": [ + "string" + ], + "examples": [ + "\"This value needs attention\"", + "\"Required field\"" + ] + }, + { + "name": "label", + "types": [ + "string" + ], + "examples": [ + "\"PNumberInput\"" + ] + }, + { + "name": "max", + "types": [ + "int" + ], + "examples": [ + 20 + ] + }, + { + "name": "min", + "types": [ + "int" ], "examples": [ 0 @@ -5195,14 +6186,270 @@ "related": [] }, { - "tag": "p-progress-circular", - "class": "PProgressCircular", - "namespace": "Pam\\MobileUi\\Material\\PProgressCircular", - "module": "progress-circular", - "family": "Overlays and feedback", - "summary": "Overlays and feedback component rendered through the retained-native Android and UIKit pipeline.", - "interactive": false, - "profiles": [ + "tag": "p-pagination", + "class": "PPagination", + "namespace": "Pam\\MobileUi\\Material\\PPagination", + "module": "pagination", + "family": "Navigation and progress", + "summary": "Navigation and progress component rendered through the retained-native Android and UIKit pipeline.", + "interactive": true, + "profiles": [ + "First page", + "Middle page", + "Last page", + "Compact" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PPagination preview\"" + ] + }, + { + "name": "length", + "types": [ + "int" + ], + "examples": [ + 5, + 7, + 12 + ] + }, + { + "name": "modelValue", + "types": [ + "int" + ], + "examples": [ + 1, + 3, + 5, + 4 + ] + }, + { + "name": "totalVisible", + "types": [ + "int" + ], + "examples": [ + 5 + ] + } + ], + "related": [] + }, + { + "tag": "p-password-field", + "class": "PPasswordField", + "namespace": "Pam\\MobileUi\\Material\\PPasswordField", + "module": "password-field", + "family": "Forms and editing", + "summary": "Forms and editing component rendered through the retained-native Android and UIKit pipeline.", + "interactive": true, + "profiles": [ + "Secure", + "Revealed", + "Error", + "Disabled" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PPasswordField preview\"" + ] + }, + { + "name": "autoComplete", + "types": [ + "string" + ], + "examples": [ + "\"password\"" + ] + }, + { + "name": "disabled", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "error", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "errorMessage", + "types": [ + "string" + ], + "examples": [ + "\"Use at least 12 characters\"" + ] + }, + { + "name": "label", + "types": [ + "string" + ], + "examples": [ + "\"Password\"" + ] + }, + { + "name": "modelValue", + "types": [ + "string" + ], + "examples": [ + "\"PAM-native-2026\"" + ] + }, + { + "name": "revealed", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + } + ], + "related": [] + }, + { + "tag": "p-popover", + "class": "PPopover", + "namespace": "Pam\\MobileUi\\Material\\PPopover", + "module": "popover", + "family": "Overlays and feedback", + "summary": "Overlays and feedback component rendered through the retained-native Android and UIKit pipeline.", + "interactive": true, + "profiles": [ + "Bottom", + "Top", + "Left", + "Right" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PPopover preview\"" + ] + }, + { + "name": "open", + "types": [ + "bool" + ], + "examples": [ + "false" + ] + }, + { + "name": "placement", + "types": [ + "int" + ], + "examples": [ + 4, + 1, + 7, + 10 + ] + } + ], + "related": [] + }, + { + "tag": "p-progress-button", + "class": "PProgressButton", + "namespace": "Pam\\MobileUi\\Material\\PProgressButton", + "module": "progress-button", + "family": "Overlays and feedback", + "summary": "Overlays and feedback component rendered through the retained-native Android and UIKit pipeline.", + "interactive": true, + "profiles": [ + "Queued", + "Uploading", + "Almost done", + "Indeterminate" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PProgressButton preview\"" + ] + }, + { + "name": "indeterminate", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "progress", + "types": [ + "int" + ], + "examples": [ + 0, + 42, + 88 + ] + }, + { + "name": "text", + "types": [ + "string" + ], + "examples": [ + "\"Upload\"", + "\"Uploading 42%\"", + "\"Publishing 88%\"", + "\"Preparing\"" + ] + } + ], + "related": [] + }, + { + "tag": "p-progress-circular", + "class": "PProgressCircular", + "namespace": "Pam\\MobileUi\\Material\\PProgressCircular", + "module": "progress-circular", + "family": "Overlays and feedback", + "summary": "Overlays and feedback component rendered through the retained-native Android and UIKit pipeline.", + "interactive": false, + "profiles": [ "Default", "Primary", "Secondary", @@ -5503,31 +6750,18 @@ "related": [] }, { - "tag": "p-radio", - "class": "PRadio", - "namespace": "Pam\\MobileUi\\Material\\PRadio", - "module": "radio", - "family": "Selection controls", - "summary": "Selection controls component rendered through the retained-native Android and UIKit pipeline.", + "tag": "p-pull-to-refresh", + "class": "PPullToRefresh", + "namespace": "Pam\\MobileUi\\Material\\PPullToRefresh", + "module": "pull-to-refresh", + "family": "Data display", + "summary": "Data display component rendered through the retained-native Android and UIKit pipeline.", "interactive": true, "profiles": [ - "Default", - "X Small", - "Small", - "Large", - "X Large", - "Comfortable", - "Compact", - "Off", - "On", - "Disabled", - "Read Only", - "Error", - "Primary", - "Success", - "Warning", - "Error Color", - "Inline" + "Ready", + "Refreshing", + "Offset", + "Disabled" ], "props": [ { @@ -5536,11 +6770,11 @@ "string" ], "examples": [ - "\"PRadio preview\"" + "\"PPullToRefresh preview\"" ] }, { - "name": "checked", + "name": "enabled", "types": [ "bool" ], @@ -5550,21 +6784,90 @@ ] }, { - "name": "color", + "name": "progressViewOffset", "types": [ - "string" + "int" ], "examples": [ - "\"primary\"", - "\"success\"", - "\"warning\"", - "\"error\"" + 24 ] }, { - "name": "density", + "name": "refreshing", "types": [ - "string" + "bool" + ], + "examples": [ + "false", + "true" + ] + } + ], + "related": [] + }, + { + "tag": "p-radio", + "class": "PRadio", + "namespace": "Pam\\MobileUi\\Material\\PRadio", + "module": "radio", + "family": "Selection controls", + "summary": "Selection controls component rendered through the retained-native Android and UIKit pipeline.", + "interactive": true, + "profiles": [ + "Default", + "X Small", + "Small", + "Large", + "X Large", + "Comfortable", + "Compact", + "Off", + "On", + "Disabled", + "Read Only", + "Error", + "Primary", + "Success", + "Warning", + "Error Color", + "Inline" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PRadio preview\"" + ] + }, + { + "name": "checked", + "types": [ + "bool" + ], + "examples": [ + "true", + "false" + ] + }, + { + "name": "color", + "types": [ + "string" + ], + "examples": [ + "\"primary\"", + "\"success\"", + "\"warning\"", + "\"error\"" + ] + }, + { + "name": "density", + "types": [ + "string" ], "examples": [ "\"comfortable\"", @@ -5862,63 +7165,389 @@ "examples": [] }, { - "name": "ticks", + "name": "ticks", + "types": [ + "bool", + "string" + ], + "examples": [ + "true", + "\"always\"" + ] + }, + { + "name": "trackColor", + "types": [ + "string" + ], + "examples": [ + "\"secondary\"" + ] + }, + { + "name": "vertical", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + } + ], + "related": [] + }, + { + "tag": "p-rating", + "class": "PRating", + "namespace": "Pam\\MobileUi\\Material\\PRating", + "module": "rating", + "family": "Selection controls", + "summary": "Selection controls component rendered through the retained-native Android and UIKit pipeline.", + "interactive": true, + "profiles": [ + "Default", + "Primary", + "Secondary", + "Success", + "Information", + "Warning", + "Error", + "X Small", + "Small", + "Large", + "X Large", + "Half Increments", + "Clearable", + "Hover", + "Read Only", + "Length 10", + "Dense" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PRating preview\"" + ] + }, + { + "name": "clearable", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "color", + "types": [ + "string" + ], + "examples": [ + "\"primary\"", + "\"secondary\"", + "\"success\"", + "\"info\"", + "\"warning\"", + "\"error\"" + ] + }, + { + "name": "density", + "types": [ + "string" + ], + "examples": [ + "\"compact\"" + ] + }, + { + "name": "halfIncrements", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "hover", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "length", + "types": [ + "int" + ], + "examples": [ + 5, + 10 + ] + }, + { + "name": "max", + "types": [ + "int" + ], + "examples": [ + 5 + ] + }, + { + "name": "min", + "types": [ + "int" + ], + "examples": [ + 0 + ] + }, + { + "name": "modelValue", + "types": [ + "int", + "float" + ], + "examples": [ + 4, + "3.5", + 7 + ] + }, + { + "name": "readonly", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "size", + "types": [ + "string" + ], + "examples": [ + "\"x-small\"", + "\"small\"", + "\"large\"", + "\"x-large\"" + ] + }, + { + "name": "step", + "types": [ + "int", + "float" + ], + "examples": [ + 1, + "0.5" + ] + } + ], + "related": [] + }, + { + "tag": "p-reorderable-list", + "class": "PReorderableList", + "namespace": "Pam\\MobileUi\\Material\\PReorderableList", + "module": "reorderable-list", + "family": "Data display", + "summary": "Data display component rendered through the retained-native Android and UIKit pipeline.", + "interactive": true, + "profiles": [ + "Default", + "Priorities", + "Compact", + "Disabled" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PReorderableList preview\"" + ] + }, + { + "name": "density", + "types": [ + "string" + ], + "examples": [ + "\"compact\"" + ] + }, + { + "name": "disabled", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "items", + "types": [ + "array" + ], + "examples": [] + } + ], + "related": [] + }, + { + "tag": "p-responsive-grid", + "class": "PResponsiveGrid", + "namespace": "Pam\\MobileUi\\Material\\PResponsiveGrid", + "module": "responsive-grid", + "family": "Surfaces and media", + "summary": "Surfaces and media component rendered through the retained-native Android and UIKit pipeline.", + "interactive": false, + "profiles": [ + "Single Column", + "Two Columns", + "Three Columns", + "Four Columns" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PResponsiveGrid preview\"" + ] + }, + { + "name": "columnGap", + "types": [ + "int" + ], + "examples": [ + 12 + ] + }, + { + "name": "columns", + "types": [ + "int" + ], + "examples": [ + 1, + 2, + 3, + 4 + ] + }, + { + "name": "rowGap", + "types": [ + "int" + ], + "examples": [ + 12 + ] + } + ], + "related": [] + }, + { + "tag": "p-result-state", + "class": "PResultState", + "namespace": "Pam\\MobileUi\\Material\\PResultState", + "module": "result-state", + "family": "Overlays and feedback", + "summary": "Overlays and feedback component rendered through the retained-native Android and UIKit pipeline.", + "interactive": false, + "profiles": [ + "Default", + "Success", + "Warning", + "Error" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PResultState preview\"" + ] + }, + { + "name": "actionLabel", + "types": [ + "string" + ], + "examples": [ + "\"View report\"" + ] + }, + { + "name": "description", "types": [ - "bool", "string" ], "examples": [ - "true", - "\"always\"" + "\"Every validation passed on the native runtime.\"" ] }, { - "name": "trackColor", + "name": "status", "types": [ "string" ], "examples": [ - "\"secondary\"" + "\"success\"", + "\"warning\"", + "\"error\"" ] }, { - "name": "vertical", + "name": "title", "types": [ - "bool" + "string" ], "examples": [ - "true" + "\"Ready to launch\"", + "\"Payment complete\"", + "\"Review required\"", + "\"Something went wrong\"" ] } ], "related": [] }, { - "tag": "p-rating", - "class": "PRating", - "namespace": "Pam\\MobileUi\\Material\\PRating", - "module": "rating", - "family": "Selection controls", - "summary": "Selection controls component rendered through the retained-native Android and UIKit pipeline.", + "tag": "p-search-bar", + "class": "PSearchBar", + "namespace": "Pam\\MobileUi\\Material\\PSearchBar", + "module": "search-bar", + "family": "Forms and editing", + "summary": "Forms and editing component rendered through the retained-native Android and UIKit pipeline.", "interactive": true, "profiles": [ - "Default", - "Primary", - "Secondary", - "Success", - "Information", - "Warning", - "Error", - "X Small", - "Small", - "Large", - "X Large", - "Half Increments", - "Clearable", - "Hover", - "Read Only", - "Length 10", - "Dense" + "Resting", + "Focused", + "With query", + "Outlined" ], "props": [ { @@ -5927,11 +7556,11 @@ "string" ], "examples": [ - "\"PRating preview\"" + "\"Search components\"" ] }, { - "name": "clearable", + "name": "focused", "types": [ "bool" ], @@ -5940,30 +7569,25 @@ ] }, { - "name": "color", + "name": "label", "types": [ "string" ], "examples": [ - "\"primary\"", - "\"secondary\"", - "\"success\"", - "\"info\"", - "\"warning\"", - "\"error\"" + "\"Search\"" ] }, { - "name": "density", + "name": "modelValue", "types": [ "string" ], "examples": [ - "\"compact\"" + "\"Navigation\"" ] }, { - "name": "halfIncrements", + "name": "outlined", "types": [ "bool" ], @@ -5972,56 +7596,106 @@ ] }, { - "name": "hover", + "name": "placeholder", "types": [ - "bool" + "string" ], "examples": [ - "true" + "\"Search components\"" ] - }, + } + ], + "related": [] + }, + { + "tag": "p-section-list", + "class": "PSectionList", + "namespace": "Pam\\MobileUi\\Material\\PSectionList", + "module": "section-list", + "family": "Data display", + "summary": "Data display component rendered through the retained-native Android and UIKit pipeline.", + "interactive": true, + "profiles": [ + "Default", + "Compact", + "Comfortable", + "No Indicator" + ], + "props": [ { - "name": "length", + "name": "accessibilityLabel", "types": [ - "int" + "string" ], "examples": [ - 5, - 10 + "\"PSectionList preview\"" ] }, { - "name": "max", + "name": "prefetch", "types": [ "int" ], "examples": [ - 5 + 8 ] }, { - "name": "min", + "name": "rowHeight", "types": [ "int" ], "examples": [ - 0 + 52, + 44, + 60 ] }, { - "name": "modelValue", + "name": "sections", "types": [ - "int", - "float" + "array" + ], + "examples": [] + }, + { + "name": "showsScrollIndicator", + "types": [ + "bool" ], "examples": [ - 4, - "3.5", - 7 + "false" + ] + } + ], + "related": [] + }, + { + "tag": "p-segmented-button", + "class": "PSegmentedButton", + "namespace": "Pam\\MobileUi\\Material\\PSegmentedButton", + "module": "segmented-button", + "family": "Forms and editing", + "summary": "Forms and editing component rendered through the retained-native Android and UIKit pipeline.", + "interactive": true, + "profiles": [ + "Single", + "Multiple", + "Icons", + "Disabled" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PSegmentedButton preview\"" ] }, { - "name": "readonly", + "name": "disabled", "types": [ "bool" ], @@ -6030,26 +7704,33 @@ ] }, { - "name": "size", + "name": "icons", "types": [ - "string" + "bool" ], "examples": [ - "\"x-small\"", - "\"small\"", - "\"large\"", - "\"x-large\"" + "true" ] }, { - "name": "step", + "name": "modelValue", "types": [ "int", - "float" + "array", + "string" ], "examples": [ 1, - "0.5" + "\"week\"" + ] + }, + { + "name": "multiple", + "types": [ + "bool" + ], + "examples": [ + "true" ] } ], @@ -8176,6 +9857,74 @@ "p-stepper-actions" ] }, + { + "tag": "p-swipe-actions", + "class": "PSwipeActions", + "namespace": "Pam\\MobileUi\\Material\\PSwipeActions", + "module": "swipe-actions", + "family": "Data display", + "summary": "Data display component rendered through the retained-native Android and UIKit pipeline.", + "interactive": true, + "profiles": [ + "Default", + "Mail", + "Tasks", + "Reduced Motion" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PSwipeActions preview\"" + ] + }, + { + "name": "endLabel", + "types": [ + "string" + ], + "examples": [ + "\"Delete\"", + "\"Later\"" + ] + }, + { + "name": "reduceMotion", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "startLabel", + "types": [ + "string" + ], + "examples": [ + "\"Archive\"", + "\"Read\"", + "\"Done\"" + ] + }, + { + "name": "title", + "types": [ + "string" + ], + "examples": [ + "\"Quarterly design review\"", + "\"Inbox message\"", + "\"Design review\"" + ] + } + ], + "related": [] + }, { "tag": "p-switch", "class": "PSwitch", @@ -8577,13 +10326,83 @@ "string" ], "examples": [ - "\"overview\"" + "\"overview\"" + ] + } + ], + "related": [ + "p-tab" + ] + }, + { + "tag": "p-tag-input", + "class": "PTagInput", + "namespace": "Pam\\MobileUi\\Material\\PTagInput", + "module": "tag-input", + "family": "Forms and editing", + "summary": "Forms and editing component rendered through the retained-native Android and UIKit pipeline.", + "interactive": true, + "profiles": [ + "Skills", + "Create tag", + "Empty", + "Disabled" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PTagInput preview\"" + ] + }, + { + "name": "disabled", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "items", + "types": [ + "array" + ], + "examples": [] + }, + { + "name": "label", + "types": [ + "string" + ], + "examples": [ + "\"Skills\"", + "\"Technologies\"", + "\"Tags\"" + ] + }, + { + "name": "modelValue", + "types": [ + "array" + ], + "examples": [] + }, + { + "name": "placeholder", + "types": [ + "string" + ], + "examples": [ + "\"Add tags\"" ] } ], - "related": [ - "p-tab" - ] + "related": [] }, { "tag": "p-text-field", @@ -9195,6 +11014,58 @@ ], "related": [] }, + { + "tag": "p-time-range-picker", + "class": "PTimeRangePicker", + "namespace": "Pam\\MobileUi\\Material\\PTimeRangePicker", + "module": "time-range-picker", + "family": "Dates and time", + "summary": "Dates and time component rendered through the retained-native Android and UIKit pipeline.", + "interactive": true, + "profiles": [ + "Business hours", + "Appointment", + "12 hour", + "Disabled" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PTimeRangePicker preview\"" + ] + }, + { + "name": "disabled", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "format", + "types": [ + "string" + ], + "examples": [ + "\"12h\"" + ] + }, + { + "name": "modelValue", + "types": [ + "array" + ], + "examples": [] + } + ], + "related": [] + }, { "tag": "p-timeline", "class": "PTimeline", @@ -9519,6 +11390,77 @@ ], "related": [] }, + { + "tag": "p-tree-select", + "class": "PTreeSelect", + "namespace": "Pam\\MobileUi\\Material\\PTreeSelect", + "module": "tree-select", + "family": "Data display", + "summary": "Data display component rendered through the retained-native Android and UIKit pipeline.", + "interactive": true, + "profiles": [ + "Default", + "Collapsed", + "Multiple", + "Compact" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PTreeSelect preview\"" + ] + }, + { + "name": "density", + "types": [ + "string" + ], + "examples": [ + "\"compact\"" + ] + }, + { + "name": "items", + "types": [ + "array" + ], + "examples": [] + }, + { + "name": "modelValue", + "types": [ + "string", + "null", + "array" + ], + "examples": [ + "\"android\"", + "null" + ] + }, + { + "name": "multiple", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "opened", + "types": [ + "array" + ], + "examples": [] + } + ], + "related": [] + }, { "tag": "p-treeview", "class": "PTreeview", @@ -9529,7 +11471,11 @@ "interactive": true, "profiles": [ "Default", - "Compact" + "Compact", + "Collapsed", + "Selected", + "Multiple Selection", + "Disabled" ], "props": [ { @@ -9541,6 +11487,13 @@ "\"PTreeview preview\"" ] }, + { + "name": "defaultExpandedPaths", + "types": [ + "array" + ], + "examples": [] + }, { "name": "density", "types": [ @@ -9550,6 +11503,15 @@ "\"compact\"" ] }, + { + "name": "disabled", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, { "name": "items", "types": [ @@ -9560,12 +11522,22 @@ { "name": "modelValue", "types": [ - "string" + "string", + "array" ], "examples": [ "\"applications/mobile/android\"" ] }, + { + "name": "multiple", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, { "name": "opened", "types": [ @@ -9588,7 +11560,11 @@ "interactive": true, "profiles": [ "Default", - "Compact" + "Compact", + "Collapsed", + "Selected", + "Multiple Selection", + "Disabled" ], "props": [ { @@ -9600,6 +11576,13 @@ "\"PTreeviewItem preview\"" ] }, + { + "name": "defaultExpandedPaths", + "types": [ + "array" + ], + "examples": [] + }, { "name": "density", "types": [ @@ -9608,11 +11591,128 @@ "examples": [ "\"compact\"" ] + }, + { + "name": "disabled", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "modelValue", + "types": [ + "string", + "array" + ], + "examples": [ + "\"applications/mobile/android\"" + ] + }, + { + "name": "multiple", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "opened", + "types": [ + "array" + ], + "examples": [] } ], "related": [ "p-treeview" ] + }, + { + "tag": "p-virtual-list", + "class": "PVirtualList", + "namespace": "Pam\\MobileUi\\Material\\PVirtualList", + "module": "virtual-list", + "family": "Data display", + "summary": "Data display component rendered through the retained-native Android and UIKit pipeline.", + "interactive": true, + "profiles": [ + "Comfortable", + "Compact", + "Two Columns", + "No Indicator" + ], + "props": [ + { + "name": "accessibilityLabel", + "types": [ + "string" + ], + "examples": [ + "\"PVirtualList preview\"" + ] + }, + { + "name": "items", + "types": [ + "array" + ], + "examples": [] + }, + { + "name": "numColumns", + "types": [ + "int" + ], + "examples": [ + 2 + ] + }, + { + "name": "prefetch", + "types": [ + "int" + ], + "examples": [ + 8, + 12 + ] + }, + { + "name": "removeClippedSubviews", + "types": [ + "bool" + ], + "examples": [ + "true" + ] + }, + { + "name": "rowHeight", + "types": [ + "int" + ], + "examples": [ + 56, + 48, + 64 + ] + }, + { + "name": "showsScrollIndicator", + "types": [ + "bool" + ], + "examples": [ + "false" + ] + } + ], + "related": [] } ] } diff --git a/src/data/mobile-ui-emulator-capture.json b/src/data/mobile-ui-emulator-capture.json new file mode 100644 index 0000000..4ff62cb --- /dev/null +++ b/src/data/mobile-ui-emulator-capture.json @@ -0,0 +1,7 @@ +{ + "device": "sdk_gphone64_x86_64", + "api": 36, + "package": "dev.pam.mobileui.catalog.debug", + "componentCount": 114, + "capturedAt": "2026-09-08T12:59:44Z" +} diff --git a/src/data/mobile-ui-emulator-visual-audit.json b/src/data/mobile-ui-emulator-visual-audit.json new file mode 100644 index 0000000..7b196f2 --- /dev/null +++ b/src/data/mobile-ui-emulator-visual-audit.json @@ -0,0 +1,590 @@ +{ + "componentCount": 114, + "densityDpi": 420, + "failures": {}, + "observations": { + "overview.png": [ + "compact visual control 'android.widget.Button' is 451x84px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 890x105px; PAM Native expands its effective target to 126px" + ], + "p-app-bar-nav-icon.png": [ + "compact visual control 'Open navigation' is 126x85px; PAM Native expands its effective target to 126px" + ], + "p-app-bar.png": [ + "compact visual control 'More options' is 106x105px; PAM Native expands its effective target to 126px", + "compact visual control 'More options' is 106x105px; PAM Native expands its effective target to 126px", + "compact visual control 'More options' is 106x105px; PAM Native expands its effective target to 126px", + "compact visual control 'More options' is 106x105px; PAM Native expands its effective target to 126px", + "compact visual control 'More options' is 106x105px; PAM Native expands its effective target to 126px" + ], + "p-banner-actions.png": [ + "compact visual control 'android.widget.Button' is 183x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 214x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 185x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 214x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 373x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 331x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 205x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 183x105px; PAM Native expands its effective target to 126px" + ], + "p-banner.png": [ + "compact visual control 'android.widget.Button' is 183x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 214x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 183x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 214x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 183x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 214x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 183x54px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 214x54px; PAM Native expands its effective target to 126px" + ], + "p-bottom-app-bar.png": [ + "compact visual control 'Home' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Explore' is 106x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Create' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Home' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Explore' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Activity' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Create' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Home' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Explore' is 106x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Create' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Home' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Explore' is 106x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Create' is 105x105px; PAM Native expands its effective target to 126px" + ], + "p-btn-group.png": [ + "compact visual control 'Day' is 168x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Week' is 186x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Month' is 201x105px; PAM Native expands its effective target to 126px", + "compact visual control 'List' is 168x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Board' is 188x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Timeline' is 234x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Today' is 318x105px; PAM Native expands its effective target to 126px", + "compact visual control '7 days' is 318x105px; PAM Native expands its effective target to 126px", + "compact visual control '30 days' is 318x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Grid' is 168x105px; PAM Native expands its effective target to 126px", + "compact visual control 'List' is 168x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Compact' is 245x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Daily' is 171x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Weekly' is 217x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Monthly' is 231x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Bold' is 329x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Italic' is 328x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Underline' is 328x105px; PAM Native expands its effective target to 126px" + ], + "p-btn-toggle.png": [ + "compact visual control 'Day' is 226x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Week' is 259x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Month' is 275x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Walk' is 246x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Ride' is 235x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Drive' is 249x105px; PAM Native expands its effective target to 126px", + "compact visual control 'List' is 334x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Board' is 334x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Calendar' is 334x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Grid' is 227x105px; PAM Native expands its effective target to 126px", + "compact visual control 'List' is 231x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Compact' is 318x105px; PAM Native expands its effective target to 126px", + "compact visual control 'New' is 234x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Recent' is 287x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Saved' is 270x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Left' is 239x84px; PAM Native expands its effective target to 126px", + "compact visual control 'Center' is 278x84px; PAM Native expands its effective target to 126px", + "compact visual control 'Right' is 253x84px; PAM Native expands its effective target to 126px" + ], + "p-btn.png": [ + "compact visual control 'Continue button' is 245x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Create button' is 205x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Confirm button' is 224x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Save draft button' is 276x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Add item button' is 243x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Learn more button' is 287x75px; PAM Native expands its effective target to 126px" + ], + "p-calendar-day.png": [ + "compact visual control 'Calendar Day preview' is 126x85px; PAM Native expands its effective target to 126px", + "compact visual control 'Calendar Day preview' is 126x85px; PAM Native expands its effective target to 126px", + "compact visual control 'Calendar Day preview' is 126x85px; PAM Native expands its effective target to 126px" + ], + "p-calendar.png": [ + "compact visual control 'domingo, julho 12, 2026' is 142x33px; PAM Native expands its effective target to 126px", + "compact visual control 'segunda-feira, julho 13, 2026' is 142x33px; PAM Native expands its effective target to 126px", + "compact visual control 'ter\u00e7a-feira, julho 14, 2026' is 142x33px; PAM Native expands its effective target to 126px", + "compact visual control 'quarta-feira, julho 15, 2026' is 143x33px; PAM Native expands its effective target to 126px", + "compact visual control 'quinta-feira, julho 16, 2026' is 142x33px; PAM Native expands its effective target to 126px", + "compact visual control 'sexta-feira, julho 17, 2026' is 142x33px; PAM Native expands its effective target to 126px", + "compact visual control 's\u00e1bado, julho 18, 2026' is 143x33px; PAM Native expands its effective target to 126px", + "compact visual control 'domingo, julho 19, 2026' is 0x0px; PAM Native expands its effective target to 126px", + "compact visual control 'segunda-feira, julho 20, 2026' is 0x0px; PAM Native expands its effective target to 126px", + "compact visual control 'ter\u00e7a-feira, julho 21, 2026' is 0x0px; PAM Native expands its effective target to 126px", + "compact visual control 'quarta-feira, julho 22, 2026' is 0x0px; PAM Native expands its effective target to 126px", + "compact visual control 'quinta-feira, julho 23, 2026' is 0x0px; PAM Native expands its effective target to 126px", + "compact visual control 'sexta-feira, julho 24, 2026' is 0x0px; PAM Native expands its effective target to 126px", + "compact visual control 's\u00e1bado, julho 25, 2026' is 0x0px; PAM Native expands its effective target to 126px", + "compact visual control 'domingo, julho 26, 2026' is 0x0px; PAM Native expands its effective target to 126px", + "compact visual control 'segunda-feira, julho 27, 2026' is 0x0px; PAM Native expands its effective target to 126px", + "compact visual control 'ter\u00e7a-feira, julho 28, 2026' is 0x0px; PAM Native expands its effective target to 126px", + "compact visual control 'quarta-feira, julho 29, 2026' is 0x0px; PAM Native expands its effective target to 126px", + "compact visual control 'quinta-feira, julho 30, 2026' is 0x0px; PAM Native expands its effective target to 126px", + "compact visual control 'sexta-feira, julho 31, 2026' is 0x0px; PAM Native expands its effective target to 126px", + "compact visual control 's\u00e1bado, agosto 1, 2026' is 0x0px; PAM Native expands its effective target to 126px", + "compact visual control 'domingo, agosto 2, 2026' is 0x0px; PAM Native expands its effective target to 126px", + "compact visual control 'segunda-feira, agosto 3, 2026' is 0x0px; PAM Native expands its effective target to 126px", + "compact visual control 'ter\u00e7a-feira, agosto 4, 2026' is 0x0px; PAM Native expands its effective target to 126px", + "compact visual control 'quarta-feira, agosto 5, 2026' is 0x0px; PAM Native expands its effective target to 126px", + "compact visual control 'quinta-feira, agosto 6, 2026' is 0x0px; PAM Native expands its effective target to 126px", + "compact visual control 'sexta-feira, agosto 7, 2026' is 0x0px; PAM Native expands its effective target to 126px", + "compact visual control 's\u00e1bado, agosto 8, 2026' is 0x0px; PAM Native expands its effective target to 126px" + ], + "p-card-actions.png": [ + "compact visual control 'Cancel' is 205x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Continue' is 245x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Done' is 175x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Continue' is 245x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Keep' is 174x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Delete' is 201x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Review changes' is 377x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Publish release' is 357x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Back' is 175x75px; PAM Native expands its effective target to 126px", + "compact visual control 'Save draft' is 276x75px; PAM Native expands its effective target to 126px", + "compact visual control 'Send' is 175x75px; PAM Native expands its effective target to 126px" + ], + "p-card.png": [ + "compact visual control 'Show card details' is 210x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Continue from card' is 245x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Open native experience card' is 996x117px; PAM Native expands its effective target to 126px" + ], + "p-carousel-item.png": [ + "compact visual control 'Go to slide 1' is 64x21px; PAM Native expands its effective target to 126px", + "compact visual control 'Go to slide 2' is 21x21px; PAM Native expands its effective target to 126px", + "compact visual control 'Go to slide 3' is 21x21px; PAM Native expands its effective target to 126px", + "compact visual control 'Go to slide 1' is 64x21px; PAM Native expands its effective target to 126px", + "compact visual control 'Go to slide 2' is 21x21px; PAM Native expands its effective target to 126px", + "compact visual control 'Go to slide 3' is 21x21px; PAM Native expands its effective target to 126px", + "compact visual control 'Carousel item preview' is 996x27px; PAM Native expands its effective target to 126px" + ], + "p-carousel.png": [ + "compact visual control 'Go to slide 1' is 64x21px; PAM Native expands its effective target to 126px", + "compact visual control 'Go to slide 2' is 21x21px; PAM Native expands its effective target to 126px", + "compact visual control 'Go to slide 3' is 21x21px; PAM Native expands its effective target to 126px", + "compact visual control 'Go to slide 1' is 64x21px; PAM Native expands its effective target to 126px", + "compact visual control 'Go to slide 2' is 21x21px; PAM Native expands its effective target to 126px", + "compact visual control 'Go to slide 3' is 21x21px; PAM Native expands its effective target to 126px", + "compact visual control 'Carousel preview' is 996x27px; PAM Native expands its effective target to 126px", + "compact visual control 'Carousel preview' is 996x27px; PAM Native expands its effective target to 126px" + ], + "p-checkbox.png": [ + "compact visual control 'Checkbox' is 270x22px; PAM Native expands its effective target to 126px" + ], + "p-chip-group.png": [ + "compact visual control 'Design filter' is 164x81px; PAM Native expands its effective target to 126px", + "compact visual control 'Android filter' is 246x81px; PAM Native expands its effective target to 126px", + "compact visual control 'Documentation filter' is 132x81px; PAM Native expands its effective target to 126px", + "compact visual control 'Design filter' is 232x82px; PAM Native expands its effective target to 126px", + "compact visual control 'Android filter' is 246x82px; PAM Native expands its effective target to 126px", + "compact visual control 'Documentation filter' is 133x82px; PAM Native expands its effective target to 126px", + "compact visual control 'Design filter' is 293x81px; PAM Native expands its effective target to 126px", + "compact visual control 'Android filter' is 387x81px; PAM Native expands its effective target to 126px", + "compact visual control 'Documentation filter' is 318x81px; PAM Native expands its effective target to 126px" + ], + "p-chip.png": [ + "compact visual control 'View release details' is 338x84px; PAM Native expands its effective target to 126px", + "compact visual control 'Filter production releases' is 387x84px; PAM Native expands its effective target to 126px", + "compact visual control 'Android filter' is 324x84px; PAM Native expands its effective target to 126px", + "compact visual control 'Remove Android filter' is 84x84px; PAM Native expands its effective target to 126px", + "compact visual control 'Design system tag' is 353x84px; PAM Native expands its effective target to 126px", + "compact visual control 'Ready for accessibility review' is 628x84px; PAM Native expands its effective target to 126px" + ], + "p-color-input.png": [ + "compact visual control 'HEX color value' is 912x73px; PAM Native expands its effective target to 126px", + "compact visual control 'RGB color value' is 912x73px; PAM Native expands its effective target to 126px", + "compact visual control 'HSL color value' is 912x74px; PAM Native expands its effective target to 126px" + ], + "p-currency-field.png": [ + "compact visual control 'Currency Field preview' is 912x74px; PAM Native expands its effective target to 126px", + "compact visual control 'Currency Field preview' is 912x74px; PAM Native expands its effective target to 126px", + "compact visual control 'Currency Field preview' is 912x73px; PAM Native expands its effective target to 126px", + "compact visual control 'Currency Field preview' is 912x73px; PAM Native expands its effective target to 126px" + ], + "p-data-grid.png": [ + "compact visual control 'Select row 3' is 249x21px; PAM Native expands its effective target to 126px" + ], + "p-date-input.png": [ + "compact visual control 'Date Input preview' is 996x43px; PAM Native expands its effective target to 126px" + ], + "p-date-picker.png": [ + "compact visual control 'domingo, junho 28, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'segunda-feira, junho 29, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'ter\u00e7a-feira, junho 30, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'quarta-feira, julho 1, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'quinta-feira, julho 2, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'sexta-feira, julho 3, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 's\u00e1bado, julho 4, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'domingo, julho 5, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'segunda-feira, julho 6, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'ter\u00e7a-feira, julho 7, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'quarta-feira, julho 8, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'quinta-feira, julho 9, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'sexta-feira, julho 10, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 's\u00e1bado, julho 11, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'domingo, julho 12, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'segunda-feira, julho 13, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'ter\u00e7a-feira, julho 14, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'quarta-feira, julho 15, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'quinta-feira, julho 16, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'sexta-feira, julho 17, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 's\u00e1bado, julho 18, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'domingo, julho 19, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'segunda-feira, julho 20, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'ter\u00e7a-feira, julho 21, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'quarta-feira, julho 22, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'quinta-feira, julho 23, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'sexta-feira, julho 24, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 's\u00e1bado, julho 25, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'domingo, julho 26, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'segunda-feira, julho 27, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'ter\u00e7a-feira, julho 28, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'quarta-feira, julho 29, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'quinta-feira, julho 30, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'sexta-feira, julho 31, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 's\u00e1bado, agosto 1, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'domingo, junho 28, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'segunda-feira, junho 29, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'ter\u00e7a-feira, junho 30, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'quarta-feira, julho 1, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'quinta-feira, julho 2, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'sexta-feira, julho 3, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 's\u00e1bado, julho 4, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'domingo, julho 5, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'segunda-feira, julho 6, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'ter\u00e7a-feira, julho 7, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'quarta-feira, julho 8, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'quinta-feira, julho 9, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'sexta-feira, julho 10, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 's\u00e1bado, julho 11, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'domingo, julho 12, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'segunda-feira, julho 13, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'ter\u00e7a-feira, julho 14, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'quarta-feira, julho 15, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'quinta-feira, julho 16, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'sexta-feira, julho 17, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 's\u00e1bado, julho 18, 2026' is 123x126px; PAM Native expands its effective target to 126px", + "compact visual control 'domingo, julho 19, 2026' is 123x33px; PAM Native expands its effective target to 126px", + "compact visual control 'segunda-feira, julho 20, 2026' is 123x33px; PAM Native expands its effective target to 126px", + "compact visual control 'ter\u00e7a-feira, julho 21, 2026' is 123x33px; PAM Native expands its effective target to 126px", + "compact visual control 'quarta-feira, julho 22, 2026' is 123x33px; PAM Native expands its effective target to 126px", + "compact visual control 'quinta-feira, julho 23, 2026' is 123x33px; PAM Native expands its effective target to 126px", + "compact visual control 'sexta-feira, julho 24, 2026' is 123x33px; PAM Native expands its effective target to 126px", + "compact visual control 's\u00e1bado, julho 25, 2026' is 123x33px; PAM Native expands its effective target to 126px", + "compact visual control 'domingo, julho 26, 2026' is 0x0px; PAM Native expands its effective target to 126px", + "compact visual control 'segunda-feira, julho 27, 2026' is 0x0px; PAM Native expands its effective target to 126px", + "compact visual control 'ter\u00e7a-feira, julho 28, 2026' is 0x0px; PAM Native expands its effective target to 126px", + "compact visual control 'quarta-feira, julho 29, 2026' is 0x0px; PAM Native expands its effective target to 126px", + "compact visual control 'quinta-feira, julho 30, 2026' is 0x0px; PAM Native expands its effective target to 126px", + "compact visual control 'sexta-feira, julho 31, 2026' is 0x0px; PAM Native expands its effective target to 126px", + "compact visual control 's\u00e1bado, agosto 1, 2026' is 0x0px; PAM Native expands its effective target to 126px" + ], + "p-dialog.png": [ + "compact visual control 'android.widget.Button' is 546x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 546x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 546x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 546x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 546x105px; PAM Native expands its effective target to 126px" + ], + "p-empty-state.png": [ + "compact visual control 'Create item' is 420x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Create item' is 420x105px; PAM Native expands its effective target to 126px" + ], + "p-expansion-panel-title.png": [ + "compact visual control 'Product details' is 996x96px; PAM Native expands its effective target to 126px" + ], + "p-form.png": [ + "compact visual control 'Project name' is 912x74px; PAM Native expands its effective target to 126px", + "compact visual control 'Project owner' is 912x74px; PAM Native expands its effective target to 126px", + "compact visual control 'Save project' is 996x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Project name' is 912x74px; PAM Native expands its effective target to 126px", + "compact visual control 'Project owner' is 912x74px; PAM Native expands its effective target to 126px", + "compact visual control 'Save project' is 996x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Project name' is 912x73px; PAM Native expands its effective target to 126px", + "compact visual control 'Project owner' is 912x69px; PAM Native expands its effective target to 126px" + ], + "p-icon-btn.png": [ + "compact visual control 'Settings' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Favorite' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Share' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'More options' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Edit project' is 105x105px; PAM Native expands its effective target to 126px" + ], + "p-infinite-scroll.png": [ + "compact visual control 'Infinite Scroll preview' is 996x27px; PAM Native expands its effective target to 126px" + ], + "p-list.png": [ + "compact visual control 'Design system, Tokens and components' is 996x48px; PAM Native expands its effective target to 126px" + ], + "p-masked-field.png": [ + "compact visual control 'Masked Field preview' is 912x74px; PAM Native expands its effective target to 126px", + "compact visual control 'Masked Field preview' is 912x74px; PAM Native expands its effective target to 126px", + "compact visual control 'Masked Field preview' is 912x73px; PAM Native expands its effective target to 126px", + "compact visual control 'Masked Field preview' is 912x73px; PAM Native expands its effective target to 126px" + ], + "p-menu.png": [ + "compact visual control 'android.widget.Button' is 378x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 378x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 378x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 378x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 378x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 378x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 378x48px; PAM Native expands its effective target to 126px" + ], + "p-navigation-bar.png": [ + "compact visual control 'Home' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Explore' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Create' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Home' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Explore' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Create' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Activity' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Home' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Explore' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Create' is 106x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Activity' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Account' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Home' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Explore' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Create' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Activity' is 105x105px; PAM Native expands its effective target to 126px" + ], + "p-navigation-rail.png": [ + "compact visual control 'Home' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Explore' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Create' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Activity' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Home' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Explore' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Create' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Activity' is 105x105px; PAM Native expands its effective target to 126px" + ], + "p-overlay.png": [ + "compact visual control 'android.widget.Button' is 546x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 546x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 546x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 546x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 546x105px; PAM Native expands its effective target to 126px" + ], + "p-password-field.png": [ + "compact visual control 'Password Field preview' is 912x74px; PAM Native expands its effective target to 126px", + "compact visual control 'Password Field preview' is 912x74px; PAM Native expands its effective target to 126px", + "compact visual control 'Password Field preview' is 912x73px; PAM Native expands its effective target to 126px" + ], + "p-progress-button.png": [ + "compact visual control 'Progress Button preview' is 996x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Progress Button preview' is 996x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.FrameLayout' is 383x10px; PAM Native expands its effective target to 126px", + "compact visual control 'Progress Button preview' is 996x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.FrameLayout' is 803x11px; PAM Native expands its effective target to 126px" + ], + "p-progress-circular.png": [ + "compact visual control 'Progress Circular preview' is 84x84px; PAM Native expands its effective target to 126px", + "compact visual control 'Progress Circular preview' is 84x84px; PAM Native expands its effective target to 126px", + "compact visual control 'Progress Circular preview' is 84x84px; PAM Native expands its effective target to 126px", + "compact visual control 'Progress Circular preview' is 84x84px; PAM Native expands its effective target to 126px", + "compact visual control 'Progress Circular preview' is 84x84px; PAM Native expands its effective target to 126px", + "compact visual control 'Progress Circular preview' is 84x64px; PAM Native expands its effective target to 126px" + ], + "p-progress-linear.png": [ + "compact visual control 'Progress Linear preview' is 996x11px; PAM Native expands its effective target to 126px", + "compact visual control 'Progress Linear preview' is 996x10px; PAM Native expands its effective target to 126px", + "compact visual control 'Progress Linear preview' is 996x10px; PAM Native expands its effective target to 126px", + "compact visual control 'Progress Linear preview' is 996x11px; PAM Native expands its effective target to 126px", + "compact visual control 'Progress Linear preview' is 996x11px; PAM Native expands its effective target to 126px", + "compact visual control 'Progress Linear preview' is 996x10px; PAM Native expands its effective target to 126px", + "compact visual control 'Progress Linear preview' is 996x10px; PAM Native expands its effective target to 126px", + "compact visual control 'Progress Linear preview' is 996x11px; PAM Native expands its effective target to 126px", + "compact visual control 'Progress Linear preview' is 996x5px; PAM Native expands its effective target to 126px", + "compact visual control 'Progress Linear preview' is 996x21px; PAM Native expands its effective target to 126px" + ], + "p-radio.png": [ + "compact visual control 'Radio' is 187x22px; PAM Native expands its effective target to 126px" + ], + "p-rating.png": [ + "compact visual control 'Rating preview' is 263x85px; PAM Native expands its effective target to 126px" + ], + "p-reorderable-list.png": [ + "compact visual control 'Reorder Research' is 996x80px; PAM Native expands its effective target to 126px" + ], + "p-slide-group-item.png": [ + "compact visual control 'Overview' is 347x116px; PAM Native expands its effective target to 126px", + "compact visual control 'Android' is 347x115px; PAM Native expands its effective target to 126px", + "compact visual control 'Design system' is 347x116px; PAM Native expands its effective target to 126px" + ], + "p-slide-group.png": [ + "compact visual control 'Overview' is 284x116px; PAM Native expands its effective target to 126px", + "compact visual control 'Design' is 283x116px; PAM Native expands its effective target to 126px", + "compact visual control 'Android' is 284x116px; PAM Native expands its effective target to 126px", + "compact visual control 'iOS' is 40x116px; PAM Native expands its effective target to 126px", + "compact visual control 'Overview' is 284x115px; PAM Native expands its effective target to 126px", + "compact visual control 'Design' is 283x115px; PAM Native expands its effective target to 126px", + "compact visual control 'Android' is 284x115px; PAM Native expands its effective target to 126px", + "compact visual control 'iOS' is 40x115px; PAM Native expands its effective target to 126px", + "compact visual control 'Overview' is 284x115px; PAM Native expands its effective target to 126px", + "compact visual control 'Design' is 283x115px; PAM Native expands its effective target to 126px", + "compact visual control 'Android' is 284x115px; PAM Native expands its effective target to 126px", + "compact visual control 'iOS' is 40x115px; PAM Native expands its effective target to 126px", + "compact visual control 'Overview' is 284x115px; PAM Native expands its effective target to 126px", + "compact visual control 'Design' is 284x116px; PAM Native expands its effective target to 126px", + "compact visual control 'Android' is 284x115px; PAM Native expands its effective target to 126px", + "compact visual control 'iOS' is 284x116px; PAM Native expands its effective target to 126px", + "compact visual control 'Motion' is 284x115px; PAM Native expands its effective target to 126px" + ], + "p-snackbar.png": [ + "compact visual control 'android.widget.Button' is 175x104px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 175x104px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 175x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 175x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 175x104px; PAM Native expands its effective target to 126px" + ], + "p-sparkline.png": [ + "compact visual control 'Sparkline preview' is 996x33px; PAM Native expands its effective target to 126px" + ], + "p-speed-dial.png": [ + "compact visual control 'android.widget.Button' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 105x105px; PAM Native expands its effective target to 126px" + ], + "p-stepper-actions.png": [ + "compact visual control 'Previous step' is 175x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Continue to next step' is 245x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Previous step' is 175x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Continue to next step' is 245x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Previous step' is 175x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Continue to next step' is 245x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Previous step' is 175x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Continue to next step' is 245x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Previous step' is 175x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Continue to next step' is 245x105px; PAM Native expands its effective target to 126px" + ], + "p-stepper-vertical-actions.png": [ + "compact visual control 'Previous step' is 175x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Continue to next step' is 245x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Previous step' is 175x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Continue to next step' is 245x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Previous step' is 175x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Continue to next step' is 245x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Previous step' is 175x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Continue to next step' is 245x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Previous step' is 175x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Continue to next step' is 245x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Previous step' is 175x96px; PAM Native expands its effective target to 126px", + "compact visual control 'Continue to next step' is 245x96px; PAM Native expands its effective target to 126px" + ], + "p-stepper-vertical.png": [ + "compact visual control 'Step 2, Delivery' is 996x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Step 3, Confirm' is 996x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Next step' is 245x105px; PAM Native expands its effective target to 126px" + ], + "p-stepper.png": [ + "compact visual control 'Next step' is 245x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Next step' is 245x105px; PAM Native expands its effective target to 126px" + ], + "p-switch.png": [ + "compact visual control 'Enabled' is 324x85px; PAM Native expands its effective target to 126px" + ], + "p-tab.png": [ + "compact visual control 'Tab preview' is 996x48px; PAM Native expands its effective target to 126px", + "compact visual control 'Overview' is 236x48px; PAM Native expands its effective target to 126px", + "compact visual control 'Details' is 236x48px; PAM Native expands its effective target to 126px" + ], + "p-tabs.png": [ + "compact visual control 'Tabs preview' is 996x48px; PAM Native expands its effective target to 126px", + "compact visual control 'Overview' is 311x48px; PAM Native expands its effective target to 126px", + "compact visual control 'Details' is 311x48px; PAM Native expands its effective target to 126px", + "compact visual control 'Activity' is 311x48px; PAM Native expands its effective target to 126px" + ], + "p-text-field.png": [ + "compact visual control 'Text Field preview' is 912x74px; PAM Native expands its effective target to 126px", + "compact visual control 'Text Field preview' is 912x69px; PAM Native expands its effective target to 126px", + "compact visual control 'Text Field preview' is 912x63px; PAM Native expands its effective target to 126px", + "compact visual control 'Text Field preview' is 912x74px; PAM Native expands its effective target to 126px" + ], + "p-toolbar.png": [ + "compact visual control 'More options' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'More options' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'More options' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'More options' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'More options' is 105x105px; PAM Native expands its effective target to 126px" + ], + "p-tooltip.png": [ + "compact visual control 'android.widget.Button' is 483x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 483x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 483x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 483x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 483x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 483x105px; PAM Native expands its effective target to 126px" + ], + "p-tree-select.png": [ + "compact visual control 'Android' is 996x101px; PAM Native expands its effective target to 126px" + ], + "p-treeview-item.png": [ + "compact visual control 'android' is 891x83px; PAM Native expands its effective target to 126px", + "compact visual control 'ios' is 891x82px; PAM Native expands its effective target to 126px", + "compact visual control 'android' is 891x83px; PAM Native expands its effective target to 126px", + "compact visual control 'ios' is 891x83px; PAM Native expands its effective target to 126px", + "compact visual control 'android' is 891x83px; PAM Native expands its effective target to 126px", + "compact visual control 'ios' is 891x83px; PAM Native expands its effective target to 126px", + "compact visual control 'Treeview Item preview' is 996x39px; PAM Native expands its effective target to 126px" + ], + "p-treeview.png": [ + "compact visual control 'android' is 786x82px; PAM Native expands its effective target to 126px", + "compact visual control 'ios' is 786x83px; PAM Native expands its effective target to 126px", + "compact visual control 'web' is 891x83px; PAM Native expands its effective target to 126px", + "compact visual control 'design-system' is 996x83px; PAM Native expands its effective target to 126px", + "compact visual control 'android' is 786x83px; PAM Native expands its effective target to 126px", + "compact visual control 'ios' is 786x82px; PAM Native expands its effective target to 126px", + "compact visual control 'web' is 891x83px; PAM Native expands its effective target to 126px", + "compact visual control 'design-system' is 996x83px; PAM Native expands its effective target to 126px" + ], + "screen-actions.png": [ + "compact visual control 'android.widget.Button' is 184x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 996x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 482x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 482x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 453x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Favorite' is 105x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 175x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 206x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 219x84px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 143x84px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 280x84px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 349x84px; PAM Native expands its effective target to 126px", + "compact visual control 'Close chip' is 84x84px; PAM Native expands its effective target to 126px" + ], + "screen-all.png": [ + "compact visual control 'android.widget.Button' is 345x84px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 996x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.view.View' is 996x37px; PAM Native expands its effective target to 126px" + ], + "screen-data.png": [ + "compact visual control 'android.widget.Button' is 184x105px; PAM Native expands its effective target to 126px" + ], + "screen-forms.png": [ + "compact visual control 'android.widget.Button' is 184x105px; PAM Native expands its effective target to 126px", + "compact visual control 'Project name' is 912x73px; PAM Native expands its effective target to 126px", + "compact visual control 'Owner' is 912x74px; PAM Native expands its effective target to 126px" + ], + "screen-overlays.png": [ + "compact visual control 'Open component menu' is 184x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 996x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 996x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 996x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 996x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 996x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.Button' is 996x105px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.ProgressBar' is 63x63px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.ProgressBar' is 84x84px; PAM Native expands its effective target to 126px", + "compact visual control 'android.widget.ProgressBar' is 996x11px; PAM Native expands its effective target to 126px" + ] + }, + "screenCount": 120, + "status": "passed" +} diff --git a/src/data/mobile-ui-evidence.json b/src/data/mobile-ui-evidence.json index f501b54..ba8dc81 100644 --- a/src/data/mobile-ui-evidence.json +++ b/src/data/mobile-ui-evidence.json @@ -1,5 +1,5 @@ { - "expectedComponentCount": 84, + "expectedComponentCount": 114, "capture": { "device": "Samsung SM-G973F", "platform": "Android 12", @@ -9,6 +9,48 @@ "interactionComponentCount": 84, "capturedAt": "2026-09-07T15:07:25Z" }, + "candidateCapture": { + "device": "Google sdk_gphone64_x86_64", + "platform": "Android 16", + "api": 36, + "densityDpi": 420, + "viewport": "1080x2400", + "componentCount": 30, + "buildSha256": "b74a742c75f67b39edc7ff5cb1b57420f2c2c14b26d459ba37004184dfc55b5a", + "capturedAt": "2026-09-08T12:59:44Z" + }, + "candidateComponents": [ + "p-app-scaffold", + "p-bottom-app-bar", + "p-chart", + "p-command-palette", + "p-currency-field", + "p-data-grid", + "p-date-range-picker", + "p-file-input", + "p-filter-bar", + "p-masked-field", + "p-multi-select", + "p-navigation-bar", + "p-navigation-drawer", + "p-navigation-rail", + "p-pagination", + "p-password-field", + "p-popover", + "p-progress-button", + "p-pull-to-refresh", + "p-reorderable-list", + "p-responsive-grid", + "p-result-state", + "p-search-bar", + "p-section-list", + "p-segmented-button", + "p-swipe-actions", + "p-tag-input", + "p-time-range-picker", + "p-tree-select", + "p-virtual-list" + ], "staticComponents": [ "p-alert", "p-avatar", @@ -28,6 +70,10 @@ "p-sparkline", "p-stepper-header", "p-stepper-window-item", - "p-timeline" + "p-timeline", + "p-app-scaffold", + "p-chart", + "p-responsive-grid", + "p-result-state" ] } diff --git a/src/pages/mobile-ui/components/[tag].astro b/src/pages/mobile-ui/components/[tag].astro index 0471eac..80ba32d 100644 --- a/src/pages/mobile-ui/components/[tag].astro +++ b/src/pages/mobile-ui/components/[tag].astro @@ -52,6 +52,7 @@ interface Props { const { tag, screenshotUrl, gifUrl, previous, next, component } = Astro.props as Props; const isStatic = evidenceContract.staticComponents.includes(tag); +const isCandidate = evidenceContract.candidateComponents.includes(tag); const title = tag .replace(/^p-/, '') .split('-') @@ -86,14 +87,19 @@ const usage = [ }}>

PAM Native UI · Android evidence

- {tag} rendered by the production retained-native pipeline. The specimen below is a real - Physical Samsung SM-G973F Android 12 (API 31) capture at 420 dpi, not an - HTML recreation. + {tag} rendered by the production retained-native pipeline. The specimen below is a real{' '} + {isCandidate + ? 'Android 16 (API 36) emulator candidate at 420 dpi' + : 'Physical Samsung SM-G973F Android 12 (API 31) capture at 420 dpi'}, not an HTML recreation.

- {isStatic ? 'Physical Samsung layout and component route verified' : 'Physical Samsung layout, route and native interaction verified'} + {isCandidate + ? 'Android emulator candidate verified; physical Samsung approval pending' + : isStatic + ? 'Physical Samsung layout and component route verified' + : 'Physical Samsung layout, route and native interaction verified'}
@@ -108,7 +114,7 @@ const usage = [

Android specimen

- {`${tag} + {`${tag}