Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 54 additions & 3 deletions .github/workflows/docs-gate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,41 @@ name: Docs Quality Gate

# Runs the docs quality gate (Vale/Google style, cspell, frontmatter schema,
# link check) on every PR. The gate ratchets to the docs CHANGED in the PR
# (git merge-base origin/main HEAD), so it never blocks on pre-existing legacy
# pages — only new or modified docs must pass.
# (git merge-base against the PR's target branch), so untouched legacy pages
# never block it.
#
# The ratchet is FILE-scoped, not line-scoped: editing any part of a page means
# the WHOLE page must pass. docs/ still carries a large Vale backlog spread
# over many legacy pages, so a one-word edit to one of them can surface that
# page's entire share of it. Run `vale docs` for the count; do not trust a
# figure quoted here or anywhere else, because it moves both when main brings
# in pages and when a cleanup lands, and this branch did both.
#
# That is deliberate - it is what stops the debt growing - but it is the
# gate's most surprising behaviour, so budget for it when touching an old
# page.
#
# Two things are outside the gate's reach, by construction rather than by
# accident:
#
# - versioned_docs/. The gate diffs `-- docs` only, so nothing under
# versioned_docs/ is ever linted. How much that costs depends on where
# docusaurus.config.ts points lastVersion, so read it rather than assuming
# either state. While lastVersion is "current" - as it is today, the 8.6
# release having retired the 8.5.3 snapshot - docs/ is what the site root
# serves, and a fix there is live immediately; the snapshots only serve
# their own older URLs. While it is pinned to a snapshot, as during a beta
# cycle, that snapshot is what the root serves, so a defect fixed in docs/
# stays live for readers until the next snapshot is cut and has to be
# fixed in the snapshot by hand.
# - prose inside ::: admonitions, which .vale.ini's BlockIgnores blanks
# wholesale. Linting the block bodies adds 41 findings across docs/, as
# Google.Units +16, Google.EmDash +13, Google.Latin +11 and
# Google.Quotes +1, Units the largest single bucket. Worth doing, but
# as its own change. How many land in scope depends entirely on which
# files a branch touches, so measure it for yours rather than reusing a
# figure: an earlier count here said 17, taken before partials entered
# the file list, and partials hide admonition findings of their own.

on:
pull_request:
Expand Down Expand Up @@ -38,7 +71,25 @@ jobs:

- name: Install Vale (pinned)
run: |
VALE_VERSION=3.7.1
# The version the rules in styles/Scandit/ were measured against -
# both of them encode behaviour that is version-specific, down to
# which regex constructs the token engine honours, and a local pass
# on one version proves nothing about another.
#
# CI only. scripts/setup-vale.cjs does not install Vale at all - it
# checks for it, prints winget/brew guidance if it is missing, and
# exits 0 - so locally Vale may be any version, or absent, in which
# case docs:gate prints "Vale not installed" and skips the prose
# checks entirely. A contributor can pass the local gate and still
# meet a red CI job. Same story one level down for the rules:
# NOTE this pins the Vale BINARY only. `.vale.ini` requests the Google
# package by bare name, .gitignore excludes styles/Google/, and
# `docs:gate:setup` runs `vale sync`, so the Google rules are whatever
# the registry serves at job time - and Google supplies the large majority of
# corpus errors. A Google release that adds or tightens a rule can
# therefore turn this gate red with no change in the repo. Pin the
# package too (a release URL in `Packages`) if that ever bites.
VALE_VERSION=3.15.1
curl -sSfL "https://github.com/errata-ai/vale/releases/download/v${VALE_VERSION}/vale_${VALE_VERSION}_Linux_64-bit.tar.gz" \
| sudo tar -xz -C /usr/local/bin vale
vale -v
Expand Down
4 changes: 4 additions & 0 deletions .vale.ini
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ mdx = md

[*.{md,mdx}]
BasedOnStyles = Google, Scandit
# Replaced by Scandit.Spacing: Google's rule cannot tell a sentence boundary
# from a dotted code identifier, and in these docs it is almost always the
# latter. See styles/Scandit/Spacing.yml for the measurement.
Google.Spacing = NO
# Docusaurus/MDX constructs Vale shouldn't lint as prose:
BlockIgnores = (?s)^import .*$, (?s)^export .*$, (?s):::.*?:::
TokenIgnores = (\{[^}]*\}), (<[^>]+>)
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ npm run docs:gate:setup # syncs the Google style package into styles/Google/ (g
**The ratchet means old content can suddenly fail.** The base for the diff is the PR's true fork point, not "since your last commit" — so a long-lived branch (like a release branch that hasn't merged `main` in a while) can surface Vale violations from *anyone's* earlier commit the first time the gate actually runs against it, not just from what you just touched. If a gate failure lists files you didn't edit, check `git log <merge-base>..HEAD -- <file>` before assuming your change caused it.

**Style rules that come up constantly in release notes and prose:**
- Bare dotted API/property references in prose (`someObject.SomeMethod`) get misread by Vale as a run-on sentence (`Google.Spacing`, "should have one space"). Wrap them in backticks — `` `someObject.SomeMethod` `` — matching how every other API reference in these docs is formatted. This is the correct fix, not a lint workaround: Vale's markdown parser treats backtick spans as code and exempts them from prose rules.
- Bare dotted API/property references in prose (`someObject.SomeMethod`) get misread by Vale as a run-on sentence (`Scandit.Spacing`, which asks for "one space after the sentence punctuation - unless it is a code identifier"). Wrap them in backticks — `` `someObject.SomeMethod` `` — matching how every other API reference in these docs is formatted. This is the correct fix, not a lint workaround: Vale's markdown parser treats backtick spans as code and exempts them from prose rules.
- No `e.g.` — write `for example,` (`Google.Latin`).
- No spaces around an em or en dash used as a connector or aside — `California–Driver's License`, `brushes—green, red, grey—and` (`Google.EmDash`).
- Commas and periods go inside closing quotation marks (`Google.Quotes`).
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ There are three types of input data you must configure:

## Standard Input

Standard inputs are fixed values or predefined fields. They are useful when you need to always attach the same kind of information (e.g., device ID, operator ID).
Standard inputs are fixed values or predefined fields. They are useful when you need to always attach the same kind of information (for example, device ID, operator ID).

| Field | Description |
|-------|-------------|
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ This guide explains how to configure output data for the **Custom Data Transfer*
|-------|-------------|
| `type` | Always set to `standard` for this configuration type. |
| `behavior` | Defines how new data is written. Options: <br></br> - `replace`: overwrite existing data <br></br> - `append`: add new rows or entries. |
| `target` | Defines the destination for the output (e.g., Google Sheets, CSV, API). |
| `target` | Defines the destination for the output (for example, Google Sheets, CSV, API). |
| `parserOptions` | (Optional) Array of parser configuration objects. |
| `timestampOptions` | (Optional) Controls how timestamps are handled. |
| `grouped` | Boolean (default: `true`). If `false`, the same barcode will be repeated when quantity > 1. |
Expand All @@ -40,7 +40,7 @@ When `type=barcodeValue`, the following `barcodeValue.type` options are availabl
| Type | Description |
|------|-------------|
| `barcodeData` | Raw scanned barcode data. |
| `symbology` | Symbology type (e.g., QR, Code128). |
| `symbology` | Symbology type (for example, QR, Code128). |
| `symbolCount` | Number of symbols in the barcode. |
| `quantity` | Quantity derived from scanning. |
| `timestamp` | Timestamp of the scan (see `timestampOptions`). |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ keywords:

# Custom Data Transfer

The **Custom Data Transfer** feature in Scandit Express lets you import and export data using a configurable CSV file or Google Sheet. By aligning data formats between Scandit Express and your system, this feature ensures seamless integration into your workflow without the need for coding or reformatting.
The **Custom Data Transfer** feature in Scandit Express lets you import and export data using a configurable CSV file or Google Sheet. By aligning data formats between Scandit Express and your system, this feature fits into your workflow without the need for coding or reformatting.

## Key Benefits

Expand Down
6 changes: 3 additions & 3 deletions docs/hosted/express/configuration/express-find.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ keywords:

# Find Items

Powered by [MatrixScan Find](https://www.scandit.com/products/matrixscan-find/), a feature available in the Scandit Smart Data Capture SDK, this mode enables you to speed up finding and picking workflows by scanning multiple items at once and highlighting the correct item(s) in real-time using an AR overlay.
Powered by [MatrixScan Find](https://www.scandit.com/products/matrixscan-find/), a feature available in the Scandit Smart Data Capture SDK, this mode enables you to speed up finding and picking workflows by scanning multiple items at once and highlighting the correct items in real-time using an AR overlay.

## Create the Find List

Expand Down Expand Up @@ -61,7 +61,7 @@ Remember to use URL encoding for the list name and the list of barcodes:

### Integrate into Your App

You can also integrate the links for your Find List(s) (with the barcodes to find embedded in them) in your own application. Follow the instructions above to create your list, and then display the link in your app or your website. If a user clicks on the link it will start Scandit Express and show the list of codes that need to be found.
You can also integrate the links for your Find Lists (with the barcodes to find embedded in them) in your own application. Follow the instructions above to create your list, and then display the link in your app or your website. If a user clicks on the link it will start Scandit Express and show the list of codes that need to be found.

To integrate specific barcodes to find, you need to:

Expand All @@ -85,7 +85,7 @@ You can also integrate the links for your Find List(s) (with the barcodes to fin
}
```

The space in QR codes is limited, so if you have more codes that can fit into a single QR code you can create multiple codes. A good rule of thumb is to limit to 2000 barcode characters for a single QR code. Simply adjust the “partsTotal” field (`"partsTotal": 2`) and number each code using the `"part"` field accordingly (`"part": 1` and `"part": 2`).
The space in QR codes is limited, so if you have more codes that can fit into a single QR code you can create multiple codes. A good rule of thumb is to limit to 2000 barcode characters for a single QR code. Adjust the “partsTotal” field (`"partsTotal": 2`) and number each code using the `"part"` field accordingly (`"part": 1` and `"part": 2`).

2. Generate a QR code from the JSON string and display it to the user.

Expand Down
4 changes: 2 additions & 2 deletions docs/hosted/express/configuration/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,8 @@ This feature is only supported for Android devices, and must be enabled by the S

* Your Scandit account email address.
* The project name you want to enable the feature for.
* The device model(s) you want to enable the feature for.
* The key code(s) you want to use to trigger the barcode scanner.
* The device models you want to enable the feature for.
* The key codes you want to use to trigger the barcode scanner.

:::tip
You can identify the key code with key code identifier apps available in the Play Store, such as [KeyEvent Display](https://play.google.com/store/apps/details?id=aws.apps.keyeventdisplay).
Expand Down
2 changes: 1 addition & 1 deletion docs/hosted/express/configuration/inventory-count.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ On start, you will have two options:

* **Count without List** which will allow you to start scanning products and then export a list of them.
* **Load Order List** which allows you to load a predefined list of barcodes and then scan products to see if they are on the list. Lists can be loaded:
- From a **deep-link URL** (e.g. `https://express.scandit.com/count/list?listName=myList&data=123,456,789`)
- From a **deep-link URL** (for example, `https://express.scandit.com/count/list?listName=myList&data=123,456,789`)
- From a **QR code** encoding the same URL
- From **multiple QR codes** (for very large lists)

Expand Down
8 changes: 4 additions & 4 deletions docs/hosted/express/getting-started/rollout.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ To automatically synchronize your Scandit Express configuration with Scandit, yo
If your MDM system requires an AppConfig configuration, you can generate one [here](https://appconfig.jamfresearch.com/generator) by selecting Scandit Express as: `com.scandit.KeyboardWedge2/current`.
:::

### 3rd-Party Instructions
### Third-Party Instructions {#3rd-party-instructions}

This section provides links to the relevant sections of the documentation for popular MDM/EMM solutions:

Expand All @@ -57,7 +57,7 @@ This section provides links to the relevant sections of the documentation for po
Scandit Express for Android supports MDM/EMM deployment via [Android Managed Configurations](https://developer.android.com/work/managed-configurations).

:::warning
Please note that Scandit Express might not be compatible with some Android for Work configurations (e.g. 3rd-party keyboards such as Scandit Express can typically not be installed in a work profile).
Please note that Scandit Express might not be compatible with some Android for Work configurations (for example, third-party keyboards such as Scandit Express can typically not be installed in a work profile).

Scandit recommends setting Android devices as either ["fully managed"](https://support.google.com/work/android/answer/9562029?hl=en&ref_topic=9563482&sjid=2353681360583047853-EU) and ["dedicated devices"](https://support.google.com/work/android/answer/9560920?hl=en&ref_topic=9563482&sjid=2353681360583047853-EU).
:::
Expand Down Expand Up @@ -95,7 +95,7 @@ To automatically synchronize your Scandit Express configuration with Scandit, yo

![Add Project Code](/img/express/rollout_android_2.png)

### 3rd-Party Instructions
### Third-Party Instructions {#3rd-party-instructions-1}

This section provides links to the relevant sections of the documentation for popular MDM/EMM solutions:

Expand All @@ -108,7 +108,7 @@ This section provides links to the relevant sections of the documentation for po

## Updating Configuration

To update the configuration of Scandit Express on all devices, simply change the configuration in the Scandit Dashboard. The new configuration will be automatically distributed to all devices.
To update the configuration of Scandit Express on all devices, change the configuration in the Scandit Dashboard. The new configuration will be automatically distributed to all devices.

Scandit Express automatically updates the license and configuration when restarted, but if you need to force a reload:

Expand Down
2 changes: 1 addition & 1 deletion docs/hosted/express/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ keywords:
- express
---

Scandit Express is an application that enables you to instantly add barcode scanning to any existing app or software tool on a smart device.It requires no software changes or coding effort, and is compatible with any app or system, even those that cannot be modified. By adding a keyboard that has a scan button above the standard keys (a keyboard wedge), it allows users to scan barcodes directly into any input field.
Scandit Express is an application that enables you to instantly add barcode scanning to any existing app or software tool on a smart device. It requires no software changes or coding effort, and is compatible with any app or system, even those that cannot be modified. By adding a keyboard that has a scan button above the standard keys (a keyboard wedge), it allows users to scan barcodes directly into any input field.


Scandit Express is built for enterprise use and supports distribution through mobile device management (MDM) and enterprise mobility management (EMM) systems.
Expand Down
2 changes: 1 addition & 1 deletion docs/hosted/id-bolt/callbacks.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ The `CapturedId` object contains the extracted data from the scanned document. T
| `dateOfExpiry` | `DateResult` | Expiration date of the document | 1.0 |
| `isExpired` | `boolean` | Whether the document is expired | 1.0 |
| `dateOfIssue` | `DateResult` | Date when the document was issued | 1.0 |
| `documentType` | `DocumentType` | Type of document (e.g. `"Passport"`, `"IdCard"`, `"DriverLicense"`, `"VisaIcao"`, `"ResidencePermit"`, `"HealthInsuranceCard"`, `"RegionSpecific"`) | 1.0 |
| `documentType` | `DocumentType` | Type of document (for example, `"Passport"`, `"IdCard"`, `"DriverLicense"`, `"VisaIcao"`, `"ResidencePermit"`, `"HealthInsuranceCard"`, `"RegionSpecific"`) | 1.0 |
| `documentSubtype` | `string \| null` | Subtype of the document, if applicable | 2.1 |
| `capturedResultTypes` | `string[]` | Types of data that were captured | 1.0 |
| `nationalityISO` | `string \| null` | ISO code of the nationality | 2.1 |
Expand Down
4 changes: 2 additions & 2 deletions docs/hosted/id-bolt/data-handling.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ Each `AnonymizedFieldEntry` specifies a document type and the fields to anonymiz

| Property | Type | Description | Since |
| ---------- | ------------------- | ----------------------------------------------------------------------------------------------- | ----- |
| `document` | `IdCaptureDocument` | The document type this entry applies to (e.g. `new Passport(Region.Any)`, `new IdCard("USA")`). | 2.2 |
| `document` | `IdCaptureDocument` | The document type this entry applies to (for example, `new Passport(Region.Any)`, `new IdCard("USA")`). | 2.2 |
| `fields` | `IdFieldType[]` | The fields to anonymize for this document type. | 2.2 |

### Available Field Types
Expand Down Expand Up @@ -147,4 +147,4 @@ The `IdFieldType` enum defines the fields that can be anonymized:

### Result

The `CapturedId` object returned in the `onCompletion` callback includes an `anonymizedFields` property — an array of `IdFieldType` values indicating which fields were actually anonymized for the scanned document.
The `CapturedId` object returned in the `onCompletion` callback includes an `anonymizedFields` property—an array of `IdFieldType` values indicating which fields were actually anonymized for the scanned document.
Loading
Loading