FastAPI backend (Python 3.11, MSSQL ODBC for SambaPOS, Azure DI OCR),
kitchen_db on central PG. React/TS/Vite frontend with navy sidebar layout.
Backend: auth.py (APP_SLUG=kitchen, SimpleNamespace — archive routes use
.kitchen_id/.is_admin without modification), main.py (51 migrations, scheduler,
internal router for KDS bookings feed), api/internal.py, full archive API
(31 routers: invoices, recipes, menus, sambapos, resos, newbook, disputes,
purchase_orders, etc.), models, migrations, OCR pipeline.
kitchen_id pinned to 1 (B1 — single hotel).
Frontend: AuthGate (app=kitchen, token shim for archive compat — B5b pending),
Layout (navy sidebar, 6 sections, Lucide icons, teal --app-primary),
App.tsx (Outlet pattern, UploadApp outside Layout), index.css (full :root block).
strict: false — archive components have type issues; build clean.
Note: 45 archive components call fetch('/api/...') without /kitchen/ prefix
(B5b). Runtime 404s; deferred until after initial testing.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
204 lines
No EOL
7.8 KiB
TypeScript
204 lines
No EOL
7.8 KiB
TypeScript
import PDFDocument from "../PDFDocument";
|
|
import PDFFont from "../PDFFont";
|
|
import { AppearanceMapping } from "./appearances";
|
|
import { Color } from "../colors";
|
|
import { Rotation } from "../rotations";
|
|
import { PDFRef, PDFWidgetAnnotation, PDFOperator, PDFName, PDFDict, PDFAcroTerminal } from "../../core";
|
|
import { ImageAlignment } from '../image';
|
|
import PDFImage from '../PDFImage';
|
|
export interface FieldAppearanceOptions {
|
|
x?: number;
|
|
y?: number;
|
|
width?: number;
|
|
height?: number;
|
|
textColor?: Color;
|
|
backgroundColor?: Color;
|
|
borderColor?: Color;
|
|
borderWidth?: number;
|
|
rotate?: Rotation;
|
|
font?: PDFFont;
|
|
hidden?: boolean;
|
|
}
|
|
export declare const assertFieldAppearanceOptions: (options?: FieldAppearanceOptions | undefined) => void;
|
|
/**
|
|
* Represents a field of a [[PDFForm]].
|
|
*
|
|
* This class is effectively abstract. All fields in a [[PDFForm]] will
|
|
* actually be an instance of a subclass of this class.
|
|
*
|
|
* Note that each field in a PDF is represented by a single field object.
|
|
* However, a given field object may be rendered at multiple locations within
|
|
* the document (across one or more pages). The rendering of a field is
|
|
* controlled by its widgets. Each widget causes its field to be displayed at a
|
|
* particular location in the document.
|
|
*
|
|
* Most of the time each field in a PDF has only a single widget, and thus is
|
|
* only rendered once. However, if a field is rendered multiple times, it will
|
|
* have multiple widgets - one for each location it is rendered.
|
|
*
|
|
* This abstraction of field objects and widgets is defined in the PDF
|
|
* specification and dictates how PDF files store fields and where they are
|
|
* to be rendered.
|
|
*/
|
|
export default class PDFField {
|
|
/** The low-level PDFAcroTerminal wrapped by this field. */
|
|
readonly acroField: PDFAcroTerminal;
|
|
/** The unique reference assigned to this field within the document. */
|
|
readonly ref: PDFRef;
|
|
/** The document to which this field belongs. */
|
|
readonly doc: PDFDocument;
|
|
protected constructor(acroField: PDFAcroTerminal, ref: PDFRef, doc: PDFDocument);
|
|
/**
|
|
* Get the fully qualified name of this field. For example:
|
|
* ```js
|
|
* const fields = form.getFields()
|
|
* fields.forEach(field => {
|
|
* const name = field.getName()
|
|
* console.log('Field name:', name)
|
|
* })
|
|
* ```
|
|
* Note that PDF fields are structured as a tree. Each field is the
|
|
* descendent of a series of ancestor nodes all the way up to the form node,
|
|
* which is always the root of the tree. Each node in the tree (except for
|
|
* the form node) has a partial name. Partial names can be composed of any
|
|
* unicode characters except a period (`.`). The fully qualified name of a
|
|
* field is composed of the partial names of all its ancestors joined
|
|
* with periods. This means that splitting the fully qualified name on
|
|
* periods and taking the last element of the resulting array will give you
|
|
* the partial name of a specific field.
|
|
* @returns The fully qualified name of this field.
|
|
*/
|
|
getName(): string;
|
|
/**
|
|
* Returns `true` if this field is read only. This means that PDF readers
|
|
* will not allow users to interact with the field or change its value. See
|
|
* [[PDFField.enableReadOnly]] and [[PDFField.disableReadOnly]].
|
|
* For example:
|
|
* ```js
|
|
* const field = form.getField('some.field')
|
|
* if (field.isReadOnly()) console.log('Read only is enabled')
|
|
* ```
|
|
* @returns Whether or not this is a read only field.
|
|
*/
|
|
isReadOnly(): boolean;
|
|
/**
|
|
* Prevent PDF readers from allowing users to interact with this field or
|
|
* change its value. The field will not respond to mouse or keyboard input.
|
|
* For example:
|
|
* ```js
|
|
* const field = form.getField('some.field')
|
|
* field.enableReadOnly()
|
|
* ```
|
|
* Useful for fields whose values are computed, imported from a database, or
|
|
* prefilled by software before being displayed to the user.
|
|
*/
|
|
enableReadOnly(): void;
|
|
/**
|
|
* Allow users to interact with this field and change its value in PDF
|
|
* readers via mouse and keyboard input. For example:
|
|
* ```js
|
|
* const field = form.getField('some.field')
|
|
* field.disableReadOnly()
|
|
* ```
|
|
*/
|
|
disableReadOnly(): void;
|
|
/**
|
|
* Returns `true` if this field must have a value when the form is submitted.
|
|
* See [[PDFField.enableRequired]] and [[PDFField.disableRequired]].
|
|
* For example:
|
|
* ```js
|
|
* const field = form.getField('some.field')
|
|
* if (field.isRequired()) console.log('Field is required')
|
|
* ```
|
|
* @returns Whether or not this field is required.
|
|
*/
|
|
isRequired(): boolean;
|
|
/**
|
|
* Require this field to have a value when the form is submitted.
|
|
* For example:
|
|
* ```js
|
|
* const field = form.getField('some.field')
|
|
* field.enableRequired()
|
|
* ```
|
|
*/
|
|
enableRequired(): void;
|
|
/**
|
|
* Do not require this field to have a value when the form is submitted.
|
|
* For example:
|
|
* ```js
|
|
* const field = form.getField('some.field')
|
|
* field.disableRequired()
|
|
* ```
|
|
*/
|
|
disableRequired(): void;
|
|
/**
|
|
* Returns `true` if this field's value should be exported when the form is
|
|
* submitted. See [[PDFField.enableExporting]] and
|
|
* [[PDFField.disableExporting]].
|
|
* For example:
|
|
* ```js
|
|
* const field = form.getField('some.field')
|
|
* if (field.isExported()) console.log('Exporting is enabled')
|
|
* ```
|
|
* @returns Whether or not this field's value should be exported.
|
|
*/
|
|
isExported(): boolean;
|
|
/**
|
|
* Indicate that this field's value should be exported when the form is
|
|
* submitted in a PDF reader. For example:
|
|
* ```js
|
|
* const field = form.getField('some.field')
|
|
* field.enableExporting()
|
|
* ```
|
|
*/
|
|
enableExporting(): void;
|
|
/**
|
|
* Indicate that this field's value should **not** be exported when the form
|
|
* is submitted in a PDF reader. For example:
|
|
* ```js
|
|
* const field = form.getField('some.field')
|
|
* field.disableExporting()
|
|
* ```
|
|
*/
|
|
disableExporting(): void;
|
|
/** @ignore */
|
|
needsAppearancesUpdate(): boolean;
|
|
/** @ignore */
|
|
defaultUpdateAppearances(_font: PDFFont): void;
|
|
protected markAsDirty(): void;
|
|
protected markAsClean(): void;
|
|
protected isDirty(): boolean;
|
|
protected createWidget(options: {
|
|
x: number;
|
|
y: number;
|
|
width: number;
|
|
height: number;
|
|
textColor?: Color;
|
|
backgroundColor?: Color;
|
|
borderColor?: Color;
|
|
borderWidth: number;
|
|
rotate: Rotation;
|
|
caption?: string;
|
|
hidden?: boolean;
|
|
page?: PDFRef;
|
|
}): PDFWidgetAnnotation;
|
|
protected updateWidgetAppearanceWithFont(widget: PDFWidgetAnnotation, font: PDFFont, { normal, rollover, down }: AppearanceMapping<PDFOperator[]>): void;
|
|
protected updateOnOffWidgetAppearance(widget: PDFWidgetAnnotation, onValue: PDFName, { normal, rollover, down, }: AppearanceMapping<{
|
|
on: PDFOperator[];
|
|
off: PDFOperator[];
|
|
}>): void;
|
|
protected updateWidgetAppearances(widget: PDFWidgetAnnotation, { normal, rollover, down }: AppearanceMapping<PDFRef | PDFDict>): void;
|
|
private createAppearanceStream;
|
|
/**
|
|
* Create a FormXObject of the supplied image and add it to context.
|
|
* The FormXObject size is calculated based on the widget (including
|
|
* the alignment).
|
|
* @param widget The widget that should display the image.
|
|
* @param alignment The alignment of the image.
|
|
* @param image The image that should be displayed.
|
|
* @returns The ref for the FormXObject that was added to the context.
|
|
*/
|
|
protected createImageAppearanceStream(widget: PDFWidgetAnnotation, image: PDFImage, alignment: ImageAlignment): PDFRef;
|
|
private createAppearanceDict;
|
|
}
|
|
//# sourceMappingURL=PDFField.d.ts.map
|