Initial kitchen scaffold — Phase 1 kitchen port (build-verified 2026-07-11)

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>
This commit is contained in:
jtricerolph 2026-07-12 12:15:39 +00:00
commit 8d688b459d
10003 changed files with 1928395 additions and 0 deletions

View file

@ -0,0 +1,130 @@
export default class TimeScale extends Scale {
static id: string;
/**
* @type {any}
*/
static defaults: any;
/**
* @param {object} props
*/
constructor(props: object);
/** @type {{data: number[], labels: number[], all: number[]}} */
_cache: {
data: number[];
labels: number[];
all: number[];
};
/** @type {Unit} */
_unit: Unit;
/** @type {Unit=} */
_majorUnit: Unit | undefined;
_offsets: {};
_normalized: boolean;
_parseOpts: {
parser: any;
round: any;
isoWeekday: any;
};
init(scaleOpts: any, opts?: {}): void;
_adapter: DateAdapter;
/**
* @param {*} raw
* @param {number?} [index]
* @return {number}
*/
parse(raw: any, index?: number | null): number;
/**
* @private
*/
private _getLabelBounds;
/**
* Returns the start and end offsets from edges in the form of {start, end}
* where each value is a relative width to the scale and ranges between 0 and 1.
* They add extra margins on the both sides by scaling down the original scale.
* Offsets are added when the `offset` option is true.
* @param {number[]} timestamps
* @protected
*/
protected initOffsets(timestamps?: number[]): void;
/**
* Generates a maximum of `capacity` timestamps between min and max, rounded to the
* `minor` unit using the given scale time `options`.
* Important: this method can return ticks outside the min and max range, it's the
* responsibility of the calling code to clamp values if needed.
* @protected
*/
protected _generate(): number[];
/**
* @param {number} value
* @return {string}
*/
getLabelForValue(value: number): string;
/**
* @param {number} value
* @param {string|undefined} format
* @return {string}
*/
format(value: number, format: string | undefined): string;
/**
* Function to format an individual tick mark
* @param {number} time
* @param {number} index
* @param {object[]} ticks
* @param {string|undefined} [format]
* @return {string}
* @private
*/
private _tickFormatFunction;
/**
* @param {object[]} ticks
*/
generateTickLabels(ticks: object[]): void;
/**
* @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)
* @return {number}
*/
getDecimalForValue(value: number): number;
/**
* @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)
* @return {number}
*/
getPixelForValue(value: number): number;
/**
* @param {number} pixel
* @return {number}
*/
getValueForPixel(pixel: number): number;
/**
* @param {string} label
* @return {{w:number, h:number}}
* @private
*/
private _getLabelSize;
/**
* @param {number} exampleTime
* @return {number}
* @private
*/
private _getLabelCapacity;
/**
* @protected
*/
protected getDataTimestamps(): any;
/**
* @protected
*/
protected getLabelTimestamps(): number[];
/**
* @param {number[]} values
* @protected
*/
protected normalize(values: number[]): number[];
}
export type Unit = import('../core/core.adapters.js').TimeUnit;
export type Interval = {
common: boolean;
size: number;
steps?: number;
};
export type DateAdapter = import('../core/core.adapters.js').DateAdapter;
import Scale from "../core/core.scale.js";