@alfakit/core 0.1.11 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/components.css +19 -0
- package/dist/advanced-fields.d.ts +6 -0
- package/dist/advanced-fields.d.ts.map +1 -1
- package/dist/advanced-fields.js +20 -1
- package/dist/advanced-fields.js.map +1 -1
- package/dist/chart.d.ts.map +1 -1
- package/dist/chart.js +23 -15
- package/dist/chart.js.map +1 -1
- package/dist/conflicts.d.ts.map +1 -1
- package/dist/conflicts.js +3 -5
- package/dist/conflicts.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -3
- package/dist/item-actions.d.ts +10 -0
- package/dist/item-actions.d.ts.map +1 -1
- package/dist/item-actions.js +8 -1
- package/dist/item-actions.js.map +1 -1
- package/dist/prefetch.d.ts.map +1 -1
- package/dist/prefetch.js +5 -2
- package/dist/prefetch.js.map +1 -1
- package/dist/presence.d.ts +0 -4
- package/dist/presence.d.ts.map +1 -1
- package/dist/presence.js +15 -2
- package/dist/presence.js.map +1 -1
- package/dist/schema/components.d.ts +5 -0
- package/dist/schema/components.d.ts.map +1 -1
- package/dist/schema/components.js.map +1 -1
- package/dist/schema/form.d.ts +2 -0
- package/dist/schema/form.d.ts.map +1 -1
- package/dist/schema/form.js.map +1 -1
- package/dist/starter-kit.d.ts.map +1 -1
- package/dist/starter-kit.js +17 -2
- package/dist/starter-kit.js.map +1 -1
- package/package.json +1 -1
package/dist/conflicts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conflicts.js","names":[],"sources":["../src/conflicts.ts"],"sourcesContent":["import type { FormStore } from './form'\nimport { requestJson, router } from './http'\nimport { listenForRecordChanges, type EchoLike, type RecordChange } from './realtime'\nimport type { RecordKey } from './schema/common'\nimport type { FormBlock } from './schema/form'\nimport type { PageSchema } from './schema/panel'\nimport { createStore, type Store } from './store'\n\n/** Request input the Edit page's save sends the loaded record version in (`RecordVersion::INPUT`). */\nexport const RECORD_VERSION_INPUT = 'recordVersion'\n\n/** Validation error key of a save refused because of a conflict (`RecordVersion::CONFLICT_ERROR`). */\nexport const CONFLICT_ERROR_KEY = 'alfakitConflict'\n\n// ---------------------------------------------------------------- Page-wide state\n\nlet recordVersion: string | null = null\nlet lastSubmitAt = 0\nlet conflictForm: FormStore | null = null\nconst saveConflictListeners = new Set<() => void>()\n\n/** The version the next save sends (set by the conflict monitor of the open Edit page). */\nexport function setRecordVersion(version: string | null): void {\n recordVersion = version\n}\n\n/** What `ActionRunner` adds to page actions as `recordVersion` (null outside Edit pages). */\nexport function currentRecordVersion(): string | null {\n return recordVersion\n}\n\n/** Called by `ActionRunner` when it sends a page action with the record version. */\nexport function markRecordSubmitted(now: number = Date.now()): void {\n lastSubmitAt = now\n}\n\n/** Called by `ActionRunner` when the server refused a save (`alfakitConflict` error). */\nexport function reportSaveConflict(): void {\n saveConflictListeners.forEach((listener) => listener())\n}\n\n/** Run `listener` when a save is refused. Returns the cleanup. */\nexport function onSaveConflict(listener: () => void): () => void {\n saveConflictListeners.add(listener)\n\n return () => {\n saveConflictListeners.delete(listener)\n }\n}\n\n/** The Edit page's form publishes its store so the banner can diff and merge it. */\nexport function registerConflictForm(store: FormStore): () => void {\n conflictForm = store\n\n return () => {\n if (conflictForm === store) conflictForm = null\n }\n}\n\nexport function getConflictForm(): FormStore | null {\n return conflictForm\n}\n\n/** The page's main form block (`form`), wherever it sits in the content. */\nexport function findPageFormBlock(\n page: Pick<PageSchema, 'content'> | null | undefined,\n): FormBlock | null {\n const search = (blocks: unknown[]): FormBlock | null => {\n for (const block of blocks) {\n if (!block || typeof block !== 'object') continue\n\n const candidate = block as Record<string, unknown>\n\n if (candidate.type === 'Form' && candidate.component === 'form')\n return candidate as unknown as FormBlock\n\n for (const value of Object.values(candidate)) {\n if (Array.isArray(value)) {\n const found = search(value)\n\n if (found) return found\n } else if (\n value &&\n typeof value === 'object' &&\n (value as { type?: unknown }).type === 'Form'\n ) {\n const found = search([value])\n\n if (found) return found\n }\n }\n }\n\n return null\n }\n\n return search(page?.content ?? [])\n}\n\n// ---------------------------------------------------------------- Monitor\n\n/** A field somebody else changed, with the saved value and the user's unsaved one. */\nexport interface ConflictField {\n path: string\n label: string\n /** The saved value, as text (null: empty). */\n theirs: string | null\n /** The user's current value, as text (null: empty). */\n mine: string | null\n /** The saved value as form state, to adopt it (\"use theirs\"). */\n value: unknown\n /** Both changed the field, differently. */\n conflicting: boolean\n}\n\nexport interface EditConflict {\n /** `broadcast`: another user saved (realtime); `save`: the server refused this save. */\n source: 'broadcast' | 'save'\n event: RecordChange['event'] | 'updated'\n /** Who saved, when known. */\n by: RecordKey | null\n /** Their name, when known (from the record's presence channel). */\n name: string | null\n /** When it happened (milliseconds). */\n at: number\n}\n\nexport interface ConflictMonitorState {\n conflict: EditConflict | null\n /** The changed fields, once reviewed. */\n fields: ConflictField[] | null\n loading: boolean\n /** Loading the changes failed. */\n failed: boolean\n}\n\nexport interface ConflictMonitorOptions {\n /** The loaded record version (`page.conflicts.version`). */\n version: string\n /** Page context token. */\n token: string\n /** `panel.endpoints.conflicts`. */\n endpoint?: string\n /** The record's presence channel (`page.presence.channel`), with `realtime()`. */\n channel?: string | null\n /** The form state the page was loaded with. */\n original?: Record<string, unknown>\n /** The current user's key: their own saves in another tab still count, this tab's don't. */\n self?: RecordKey | null\n /** Name of a user on the record (presence), for \"Dana saved changes\". */\n resolveName?: (id: RecordKey) => string | null\n echo?: EchoLike | null\n now?: () => number\n}\n\n/**\n * Edit-conflict detection for one Edit page: sends the loaded version with saves, shows a\n * conflict when another user saves the record (broadcast) or the server refuses a save,\n * and offers review (a diff against the unsaved values), reload and keep-mine.\n */\nexport class ConflictMonitor {\n readonly store: Store<ConflictMonitorState> = createStore<ConflictMonitorState>({\n conflict: null,\n fields: null,\n loading: false,\n failed: false,\n })\n\n private latestVersion: string | null = null\n private token: string\n\n constructor(private readonly options: ConflictMonitorOptions) {\n this.token = options.token\n }\n\n /** The page's context token is re-issued with every response. */\n setToken(token: string): void {\n this.token = token\n }\n\n get state(): ConflictMonitorState {\n return this.store.get()\n }\n\n start(): () => void {\n setRecordVersion(this.options.version)\n\n const stopSave = onSaveConflict(() => this.flag({ source: 'save', event: 'updated', by: null }))\n const stopListening = this.options.channel\n ? listenForRecordChanges(this.options.channel, (change) => this.onChange(change), {\n kind: 'presence',\n echo: this.options.echo,\n })\n : () => {}\n\n return () => {\n stopSave()\n stopListening()\n\n if (currentRecordVersion() === this.options.version) setRecordVersion(null)\n }\n }\n\n /** A broadcast change of the record. */\n onChange(change: RecordChange): void {\n if (change.event === 'created') return\n\n const now = this.now()\n\n // This tab's own save (when its socket id didn't reach the server).\n if (this.isSelf(change.by) && now - lastSubmitAt < 10_000) return\n\n this.flag({\n source: 'broadcast',\n event: change.event,\n by: change.by ?? null,\n at: change.at ?? now,\n })\n }\n\n /** Load what changed: label, saved value and the user's unsaved value per field. */\n async review(): Promise<ConflictField[]> {\n if (!this.options.endpoint) return []\n\n this.store.update({ loading: true, failed: false })\n\n try {\n const response = await requestJson<{ version: string | null; fields: ConflictField[] }>(\n this.options.endpoint,\n {\n method: 'POST',\n body: {\n token: this.token,\n original: this.options.original ?? {},\n state: conflictForm?.state.values ?? this.options.original ?? {},\n },\n },\n )\n\n this.latestVersion = response.version\n this.store.update({ fields: response.fields, loading: false })\n\n return response.fields\n } catch {\n this.store.update({ loading: false, failed: true })\n\n return []\n }\n }\n\n /** Keep the unsaved values: the next save overwrites the other user's changes. */\n async keepMine(): Promise<void> {\n if (this.latestVersion === null) await this.review()\n\n if (this.latestVersion !== null) setRecordVersion(this.latestVersion)\n\n this.store.set({ conflict: null, fields: null, loading: false, failed: false })\n }\n\n /** Adopt the saved value of one field into the form. */\n useTheirs(path: string): void {\n const field = this.state.fields?.find((candidate) => candidate.path === path)\n\n if (!field) return\n\n conflictForm?.setValue(path, field.value)\n\n const fields = (this.state.fields ?? []).filter((candidate) => candidate.path !== path)\n this.store.update({ fields })\n }\n\n /** Discard the unsaved values and load the saved record. */\n reload(): void {\n if (typeof window === 'undefined') return\n\n const form = conflictForm\n\n router.reload({\n onSuccess: (page) => {\n const block = findPageFormBlock((page.props as { page?: PageSchema }).page)\n\n if (block && form) form.fill(block)\n },\n })\n\n this.store.set({ conflict: null, fields: null, loading: false, failed: false })\n }\n\n /** Hide the banner without doing anything. */\n dismiss(): void {\n this.store.update({ conflict: null })\n }\n\n private flag(conflict: Omit<EditConflict, 'name' | 'at'> & { at?: number }): void {\n const name =\n conflict.by !== null && conflict.by !== undefined\n ? (this.options.resolveName?.(conflict.by) ?? null)\n : null\n\n this.latestVersion = null\n this.store.set({\n conflict: { ...conflict, name, at: conflict.at ?? this.now() },\n fields: null,\n loading: false,\n failed: false,\n })\n }\n\n private isSelf(id: RecordKey | null | undefined): boolean {\n return (\n id !== null &&\n id !== undefined &&\n this.options.self !== null &&\n this.options.self !== undefined &&\n String(id) === String(this.options.self)\n )\n }\n\n private now(): number {\n return this.options.now?.() ?? Date.now()\n }\n}\n\n/**\n * The banner's translation key and English fallback for a conflict (`:name` and `:time`\n * are replaced by the renderer, `:time` with `LocaleFormatter.relative()`).\n */\nexport function conflictMessage(conflict: EditConflict): { key: string; fallback: string } {\n if (conflict.source === 'save') {\n return {\n key: 'realtime.conflict.refused',\n fallback: 'Your changes were not saved: this record was changed after you opened it.',\n }\n }\n\n const deleted = conflict.event === 'deleted'\n\n if (conflict.name) {\n return deleted\n ? { key: 'realtime.conflict.deleted_by', fallback: ':name deleted this record :time' }\n : { key: 'realtime.conflict.saved_by', fallback: ':name saved changes :time' }\n }\n\n return deleted\n ? { key: 'realtime.conflict.deleted_by_someone', fallback: 'Someone deleted this record :time' }\n : { key: 'realtime.conflict.saved_by_someone', fallback: 'Someone saved changes :time' }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"conflicts.js","names":[],"sources":["../src/conflicts.ts"],"sourcesContent":["import type { FormStore } from './form'\nimport { requestJson, router } from './http'\nimport { listenForRecordChanges, type EchoLike, type RecordChange } from './realtime'\nimport type { RecordKey } from './schema/common'\nimport type { FormBlock } from './schema/form'\nimport type { PageSchema } from './schema/panel'\nimport { createStore, type Store } from './store'\n\n/** Request input the Edit page's save sends the loaded record version in (`RecordVersion::INPUT`). */\nexport const RECORD_VERSION_INPUT = 'recordVersion'\n\n/** Validation error key of a save refused because of a conflict (`RecordVersion::CONFLICT_ERROR`). */\nexport const CONFLICT_ERROR_KEY = 'alfakitConflict'\n\n// ---------------------------------------------------------------- Page-wide state\n\nlet recordVersion: string | null = null\nlet lastSubmitAt = 0\nlet conflictForm: FormStore | null = null\nconst saveConflictListeners = new Set<() => void>()\n\n/** The version the next save sends (set by the conflict monitor of the open Edit page). */\nexport function setRecordVersion(version: string | null): void {\n recordVersion = version\n}\n\n/** What `ActionRunner` adds to page actions as `recordVersion` (null outside Edit pages). */\nexport function currentRecordVersion(): string | null {\n return recordVersion\n}\n\n/** Called by `ActionRunner` when it sends a page action with the record version. */\nexport function markRecordSubmitted(now: number = Date.now()): void {\n lastSubmitAt = now\n}\n\n/** Called by `ActionRunner` when the server refused a save (`alfakitConflict` error). */\nexport function reportSaveConflict(): void {\n saveConflictListeners.forEach((listener) => listener())\n}\n\n/** Run `listener` when a save is refused. Returns the cleanup. */\nexport function onSaveConflict(listener: () => void): () => void {\n saveConflictListeners.add(listener)\n\n return () => {\n saveConflictListeners.delete(listener)\n }\n}\n\n/** The Edit page's form publishes its store so the banner can diff and merge it. */\nexport function registerConflictForm(store: FormStore): () => void {\n conflictForm = store\n\n return () => {\n if (conflictForm === store) conflictForm = null\n }\n}\n\nexport function getConflictForm(): FormStore | null {\n return conflictForm\n}\n\n/** The page's main form block (`form`), wherever it sits in the content. */\nexport function findPageFormBlock(\n page: Pick<PageSchema, 'content'> | null | undefined,\n): FormBlock | null {\n const search = (blocks: unknown[]): FormBlock | null => {\n for (const block of blocks) {\n if (!block || typeof block !== 'object') continue\n\n const candidate = block as Record<string, unknown>\n\n if (candidate.type === 'Form' && candidate.component === 'form')\n return candidate as unknown as FormBlock\n\n // Any wrapper, e.g. the edit form inside combined relation manager tabs\n // (`RelationManagers.content.block`, W-S5-03). Form state is data, never blocks.\n for (const [key, value] of Object.entries(candidate)) {\n if (key === 'state' || !value || typeof value !== 'object') continue\n\n const found = search(Array.isArray(value) ? value : [value])\n\n if (found) return found\n }\n }\n\n return null\n }\n\n return search(page?.content ?? [])\n}\n\n// ---------------------------------------------------------------- Monitor\n\n/** A field somebody else changed, with the saved value and the user's unsaved one. */\nexport interface ConflictField {\n path: string\n label: string\n /** The saved value, as text (null: empty). */\n theirs: string | null\n /** The user's current value, as text (null: empty). */\n mine: string | null\n /** The saved value as form state, to adopt it (\"use theirs\"). */\n value: unknown\n /** Both changed the field, differently. */\n conflicting: boolean\n}\n\nexport interface EditConflict {\n /** `broadcast`: another user saved (realtime); `save`: the server refused this save. */\n source: 'broadcast' | 'save'\n event: RecordChange['event'] | 'updated'\n /** Who saved, when known. */\n by: RecordKey | null\n /** Their name, when known (from the record's presence channel). */\n name: string | null\n /** When it happened (milliseconds). */\n at: number\n}\n\nexport interface ConflictMonitorState {\n conflict: EditConflict | null\n /** The changed fields, once reviewed. */\n fields: ConflictField[] | null\n loading: boolean\n /** Loading the changes failed. */\n failed: boolean\n}\n\nexport interface ConflictMonitorOptions {\n /** The loaded record version (`page.conflicts.version`). */\n version: string\n /** Page context token. */\n token: string\n /** `panel.endpoints.conflicts`. */\n endpoint?: string\n /** The record's presence channel (`page.presence.channel`), with `realtime()`. */\n channel?: string | null\n /** The form state the page was loaded with. */\n original?: Record<string, unknown>\n /** The current user's key: their own saves in another tab still count, this tab's don't. */\n self?: RecordKey | null\n /** Name of a user on the record (presence), for \"Dana saved changes\". */\n resolveName?: (id: RecordKey) => string | null\n echo?: EchoLike | null\n now?: () => number\n}\n\n/**\n * Edit-conflict detection for one Edit page: sends the loaded version with saves, shows a\n * conflict when another user saves the record (broadcast) or the server refuses a save,\n * and offers review (a diff against the unsaved values), reload and keep-mine.\n */\nexport class ConflictMonitor {\n readonly store: Store<ConflictMonitorState> = createStore<ConflictMonitorState>({\n conflict: null,\n fields: null,\n loading: false,\n failed: false,\n })\n\n private latestVersion: string | null = null\n private token: string\n\n constructor(private readonly options: ConflictMonitorOptions) {\n this.token = options.token\n }\n\n /** The page's context token is re-issued with every response. */\n setToken(token: string): void {\n this.token = token\n }\n\n get state(): ConflictMonitorState {\n return this.store.get()\n }\n\n start(): () => void {\n setRecordVersion(this.options.version)\n\n const stopSave = onSaveConflict(() => this.flag({ source: 'save', event: 'updated', by: null }))\n const stopListening = this.options.channel\n ? listenForRecordChanges(this.options.channel, (change) => this.onChange(change), {\n kind: 'presence',\n echo: this.options.echo,\n })\n : () => {}\n\n return () => {\n stopSave()\n stopListening()\n\n if (currentRecordVersion() === this.options.version) setRecordVersion(null)\n }\n }\n\n /** A broadcast change of the record. */\n onChange(change: RecordChange): void {\n if (change.event === 'created') return\n\n const now = this.now()\n\n // This tab's own save (when its socket id didn't reach the server).\n if (this.isSelf(change.by) && now - lastSubmitAt < 10_000) return\n\n this.flag({\n source: 'broadcast',\n event: change.event,\n by: change.by ?? null,\n at: change.at ?? now,\n })\n }\n\n /** Load what changed: label, saved value and the user's unsaved value per field. */\n async review(): Promise<ConflictField[]> {\n if (!this.options.endpoint) return []\n\n this.store.update({ loading: true, failed: false })\n\n try {\n const response = await requestJson<{ version: string | null; fields: ConflictField[] }>(\n this.options.endpoint,\n {\n method: 'POST',\n body: {\n token: this.token,\n original: this.options.original ?? {},\n state: conflictForm?.state.values ?? this.options.original ?? {},\n },\n },\n )\n\n this.latestVersion = response.version\n this.store.update({ fields: response.fields, loading: false })\n\n return response.fields\n } catch {\n this.store.update({ loading: false, failed: true })\n\n return []\n }\n }\n\n /** Keep the unsaved values: the next save overwrites the other user's changes. */\n async keepMine(): Promise<void> {\n if (this.latestVersion === null) await this.review()\n\n if (this.latestVersion !== null) setRecordVersion(this.latestVersion)\n\n this.store.set({ conflict: null, fields: null, loading: false, failed: false })\n }\n\n /** Adopt the saved value of one field into the form. */\n useTheirs(path: string): void {\n const field = this.state.fields?.find((candidate) => candidate.path === path)\n\n if (!field) return\n\n conflictForm?.setValue(path, field.value)\n\n const fields = (this.state.fields ?? []).filter((candidate) => candidate.path !== path)\n this.store.update({ fields })\n }\n\n /** Discard the unsaved values and load the saved record. */\n reload(): void {\n if (typeof window === 'undefined') return\n\n const form = conflictForm\n\n router.reload({\n onSuccess: (page) => {\n const block = findPageFormBlock((page.props as { page?: PageSchema }).page)\n\n if (block && form) form.fill(block)\n },\n })\n\n this.store.set({ conflict: null, fields: null, loading: false, failed: false })\n }\n\n /** Hide the banner without doing anything. */\n dismiss(): void {\n this.store.update({ conflict: null })\n }\n\n private flag(conflict: Omit<EditConflict, 'name' | 'at'> & { at?: number }): void {\n const name =\n conflict.by !== null && conflict.by !== undefined\n ? (this.options.resolveName?.(conflict.by) ?? null)\n : null\n\n this.latestVersion = null\n this.store.set({\n conflict: { ...conflict, name, at: conflict.at ?? this.now() },\n fields: null,\n loading: false,\n failed: false,\n })\n }\n\n private isSelf(id: RecordKey | null | undefined): boolean {\n return (\n id !== null &&\n id !== undefined &&\n this.options.self !== null &&\n this.options.self !== undefined &&\n String(id) === String(this.options.self)\n )\n }\n\n private now(): number {\n return this.options.now?.() ?? Date.now()\n }\n}\n\n/**\n * The banner's translation key and English fallback for a conflict (`:name` and `:time`\n * are replaced by the renderer, `:time` with `LocaleFormatter.relative()`).\n */\nexport function conflictMessage(conflict: EditConflict): { key: string; fallback: string } {\n if (conflict.source === 'save') {\n return {\n key: 'realtime.conflict.refused',\n fallback: 'Your changes were not saved: this record was changed after you opened it.',\n }\n }\n\n const deleted = conflict.event === 'deleted'\n\n if (conflict.name) {\n return deleted\n ? { key: 'realtime.conflict.deleted_by', fallback: ':name deleted this record :time' }\n : { key: 'realtime.conflict.saved_by', fallback: ':name saved changes :time' }\n }\n\n return deleted\n ? { key: 'realtime.conflict.deleted_by_someone', fallback: 'Someone deleted this record :time' }\n : { key: 'realtime.conflict.saved_by_someone', fallback: 'Someone saved changes :time' }\n}\n"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ import { Listener, Store, createStore, derived } from "./store.js";
|
|
|
14
14
|
import { ALL_SELECTED_RECORDS_ARGUMENT, FILTERS_FORM_WIDTH_CLASSES, FILTERS_MODAL_WIDTH_CLASSES, FILTERS_SIDEBAR_WIDTH_CLASSES, FiltersPlacement, REMAINING_TEXT_SIZE_CLASSES, SELECTED_RECORDS_ARGUMENT, STACKED_TABLE_CLASSES, SelectionLimits, SelectionState, TableEndpoints, TableQuery, TableSelection, TableVisitCallbacks, actionsAccessSelectedRecords, buildTableUrl, canSelectAllRecords, filterSelectColumnOptions, filtersCollapsible, filtersFormWidthClass, filtersPlacement, isPageFullySelected, optionText, registerTablePersistence, remainingTextSizeClass, reorderTable, reorderingListsAllRecords, searchTableColumnOptions, selectColumnEmptyMessage, selectedRecordsArguments, stackedCellClasses, startTableReordering, stopTableReordering, tableQueryKey, updateTableCell, visibleColumns, visitTable } from "./table.js";
|
|
15
15
|
import { FormState, FormStore, FormStoreOptions, GuardedVisit, IndexedState, RepeaterItemState, appendRepeaterItem, cloneIndexedState, cloneRepeaterItem, collectFields, componentHasErrors, fieldDomId, fieldError, findFieldByPath, formIdPrefix, formIdentity, isLeavingVisit, moveIndexedState, moveRepeaterItem, removeIndexedState, removeRepeaterItem, tabFromQuery, tabQueryValue, tabToReveal, wizardStepToReveal } from "./form.js";
|
|
16
16
|
import { ActionButtonSize, ActionContext, ActionRunner, ActionRunnerOptions, ActionRunnerState, CREATE_ANOTHER_ARGUMENT, DropdownPlacement, ExecuteOptions, OpenModal, actionEndpoint, bindsKeyBindings, confirmModalClose, createAnotherState, flattenActionGroup, groupMenuItems, guardModalUnload, iconButtonSize, isActionLoading, isActionProcessing, isModalHiddenByChild, menuActionContext, modalFooterAlignment, parseDropdownPlacement, resolveActionSize, shouldConfirmModalClose, slideOverSide, startDownload } from "./actions.js";
|
|
17
|
-
import { BuilderBlockGroup, BuilderPickerRect, ModalTablePaging, SliderPip, TextEdit, builderBlockCounts, builderItemLabel, builderItemSchema, builderItems, builderPickerMove, canAddBuilderBlock, concurrencyLimiter, cssAspectRatio, fileUploadAccept, fileUploadPaths, filterBuilderBlocks, groupBuilderBlocks, indentCode, insertBuilderItem, insertUploadedFile, modalTablePaging, modalTableQuery, modalTableSelected, newlineWithIndent, pickerFilterFormOptions, sliderBehavior, sliderBlocksTap, sliderBounds, sliderDirection, sliderFillSections, sliderFillStyle, sliderFromPrimitive, sliderHasTooltips, sliderNextValues, sliderPercent, sliderPips, sliderPrimitive, sliderShift, sliderShowsTooltip, sliderSnap, sliderState, sliderToPrimitive, sliderValueAt, sliderValues, startSliderRangeDrag, toggleButtonsNext, toggleButtonsSelected, toggleModalTableKey, uploadedFileLinks } from "./advanced-fields.js";
|
|
17
|
+
import { BuilderBlockGroup, BuilderPickerRect, ModalTablePaging, SliderPip, TextEdit, builderBlockCounts, builderItemLabel, builderItemSchema, builderItems, builderPickerMove, canAddBuilderBlock, concurrencyLimiter, cssAspectRatio, fileUploadAccept, fileUploadEntries, fileUploadPaths, filterBuilderBlocks, groupBuilderBlocks, indentCode, insertBuilderItem, insertUploadedFile, modalTablePaging, modalTableQuery, modalTableSelected, newlineWithIndent, pickerFilterFormOptions, sliderBehavior, sliderBlocksTap, sliderBounds, sliderDirection, sliderFillSections, sliderFillStyle, sliderFromPrimitive, sliderHasTooltips, sliderNextValues, sliderPercent, sliderPips, sliderPrimitive, sliderShift, sliderShowsTooltip, sliderSnap, sliderState, sliderToPrimitive, sliderValueAt, sliderValues, startSliderRangeDrag, toggleButtonsNext, toggleButtonsSelected, toggleModalTableKey, uploadedFileLinks } from "./advanced-fields.js";
|
|
18
18
|
import { AI_STREAM_REGISTRY_KEY, AiStreamController, AiStreamOptions, AiStreamState, AiStreamStatus, StreamAnnouncer, StreamEvent, parseEventStream, readEventStream } from "./ai-stream.js";
|
|
19
19
|
import { HttpError, JsonRequestOptions, PAGE_EXPIRED_STATUS, buildQuery, csrfHeader, inertiaPost, inertiaReload, inertiaVisit, reloadExpiredPage, reloadOnExpiredPage, requestJson, router } from "./http.js";
|
|
20
20
|
import { AiActionStatus, AiConversationSchema, AiCopilotSchema, AiMessageRole, AiMessageSchema, AiProposedActionSchema, AiSetupNoticeSchema, AiStreamSchema } from "./schema/ai.js";
|
|
@@ -72,7 +72,7 @@ import { IconSource, iconAlias, iconAliasOverride, iconSource, isIconAlias, item
|
|
|
72
72
|
import { canEditImage, canEditImageName, editableImageName, fetchEditableImage, filesFromClipboard, imageEditorOptionsKey, loadEditorImage } from "./image-files.js";
|
|
73
73
|
import { CropHandle, CropRect, IMAGE_EDITOR_ZOOM_STEP, ImageEditor, ImageEditorData, ImageEditorDragMode, ImageEditorMode, ImageEditorOptions, ImageEditorPoint, ImageEditorState } from "./image-editor.js";
|
|
74
74
|
import { ImplicitSubmitEvent, isImplicitSubmit } from "./implicit-submit.js";
|
|
75
|
-
import { ITEM_MOVE_ATTRIBUTE, ItemActionFallback, ItemMoveDirection, ItemMoveTracker, addActionJustify, focusMovedItem, itemActionContext, reorderedItemKeys, resolveItemAction, runsItemActionOnServer, withItemActionState } from "./item-actions.js";
|
|
75
|
+
import { ITEM_MOVE_ATTRIBUTE, ItemActionFallback, ItemMoveDirection, ItemMoveTracker, addActionJustify, focusMovedItem, itemActionContext, itemExtraActions, reorderedItemKeys, resolveItemAction, runsItemActionOnServer, withItemActionState } from "./item-actions.js";
|
|
76
76
|
import { KANBAN_NO_LANE, KANBAN_REGISTRY_KEY, KanbanController, KanbanEnvironment, KanbanKeyResult, KanbanLocation, KanbanPicked, KanbanPointerOptions, KanbanRefusal, KanbanState, KanbanTarget, attachKanbanPointer, createKanbanFiltersStore, kanbanActiveFilters, kanbanCardPosition, kanbanCardsIn, kanbanInitials, kanbanMovePayload, kanbanRefusal, kanbanWipState, locateKanbanCard, moveKanbanCard } from "./kanban.js";
|
|
77
77
|
import { LAZY_PROP, LazyComponentCache, isLazyPlaceholder, lazyComponentCache, relationGroupBadgeTarget, relationManagerBadgeTarget, resolveDeferredBadge, resolveDeferredGroupBadge, resolveLazyComponents } from "./lazy.js";
|
|
78
78
|
import { LiveUpdates, LiveUpdatesOptions, LiveUpdatesState, shownRecordKeys } from "./live.js";
|
|
@@ -133,4 +133,4 @@ import { applyMask } from "./utils/mask.js";
|
|
|
133
133
|
import { PathSegment, deletePath, getPath, hasPath, joinPath, parentPath, replacePlaceholder, setPath, splitPath, templateForIndex } from "./utils/path.js";
|
|
134
134
|
import { DEFAULT_VIRTUALIZE_THRESHOLD, VIRTUAL_ESTIMATES, VirtualList, VirtualListOptions, VirtualRange, firstErroredItemIndex, hasNewErrors, virtualizeOptions } from "./virtual.js";
|
|
135
135
|
import { WIZARD_STEP_QUERY_KEY, completedStepIcon, initialWizardStep, persistWizardStep, wizardRequestedStepIndex, wizardStepFieldPaths, wizardStepQueryKey } from "./wizard.js";
|
|
136
|
-
export { ACTION_PATH_SEPARATOR, ACTIVE_TAB_QUERY_KEY, AI_COPILOT_REGISTRY_KEY, AI_STREAM_REGISTRY_KEY, ALL_SELECTED_RECORDS_ARGUMENT, ActionButtonSize, ActionContext, ActionGroupSchema, ActionModalCancelledResponse, ActionModalSchema, ActionResultEditor, ActionResultFlash, ActionRunner, ActionRunnerOptions, ActionRunnerState, ActionSchema, ActionVariant, ActionsComponentSchema, Affixes, AiActionStatus, AiConversationSchema, AiCopilotSchema, AiMessageRole, AiMessageSchema, AiProposedActionSchema, AiSetupNoticeSchema, AiStreamController, AiStreamOptions, AiStreamSchema, AiStreamState, AiStreamStatus, AlfakitFlash, AlfakitOptions, AlfakitPageProps, Alignment, AnalyticsBreakdownRowSchema, AnalyticsBreakdownTabSchema, AnalyticsBreakdownWidgetSchema, AnalyticsTracker, AnalyticsTrackerOptions, AnyActionSchema, AnyPaginationSchema, Appearance, AppendingPaginationSchema, Attributes, BOTTOM_NAVIGATION_SLOTS, BROADCAST_NOTIFICATION, BUILT_IN_COLORS, BUILT_IN_WIDGET_TYPES, BaseColumnSchema, BaseComponent, BaseEntry, BaseField, BaseWidgetSchema, BlockProps, BottomNavigationItems, BreadcrumbSchema, Breakpoint, Breakpoints, BuilderBlockGroup, BuilderBlockSchema, BuilderItemSchema, BuilderItemState, BuilderPickerRect, BuilderSchema, BulkToggleActionSchema, CALENDAR_ARGUMENTS_KEY, CALENDAR_EVENT_DROP_ACTION, CALENDAR_EVENT_RESIZE_ACTION, CALENDAR_FETCH_EVENTS_ACTION, CALENDAR_REGISTRY_KEY, CLOSE_NOTIFICATION_EVENT, CMS_BLOCK_PREFIX, CMS_BUILT_IN_BLOCKS, CMS_FOOTER_KEY, CMS_FORM_KEY, CMS_HEADER_KEY, CMS_PAGE_COMPONENT, CMS_PREVIEW_DEVICES, CMS_PREVIEW_STORAGE_KEY, COMMANDS_COMPONENT, CONFLICT_ERROR_KEY, CONSTRAINT_PICKER_WIDTH_CLASSES, CONTAINER_BREAKPOINTS, CREATE_ANOTHER_ARGUMENT, CalendarChangeResult, CalendarEnvironment, CalendarEventApi, CalendarEventChangeInfo, CalendarEventClickInfo, CalendarEventSchema, CalendarFetchInfo, CalendarSelectInfo, CalendarView, CalendarWidgetSchema, CallPageMethodOptions, CalloutSchema, CellSchema, ChartConfigInput, ChartConfigOutput, ChartEmptyStateSchema, ChartFiltersFormSchema, ChartFormatter, ChartWidgetSchema, CheckboxColumnSchema, CheckboxListSchema, CheckboxSchema, CmsAdminBarSchema, CmsAlternateSchema, CmsAspectRatio, CmsAutosave, CmsAutosaveOptions, CmsAutosaveResult, CmsAutosaveSnapshot, CmsAutosaveStatus, CmsBlockSchema, CmsBreadcrumbSchema, CmsBuiltInBlocks, CmsCallToActionBlockData, CmsColumnsBlockData, CmsEditorStatusSchema, CmsEmbedBlockData, CmsFaqBlockData, CmsFeatureSchema, CmsFeaturesBlockData, CmsFormBlockData, CmsGalleryBlockData, CmsHeadTags, CmsHeroBlockData, CmsImageBlockData, CmsImageSchema, CmsLinkSchema, CmsLinkTag, CmsLivePreviewSchema, CmsMenuItemSchema, CmsMenuSchema, CmsMetaTag, CmsPageProps, CmsPageSchema, CmsPayload, CmsPreviewDevice, CmsRichTextBlockData, CmsSectionBlockData, CmsSeoSchema, CmsSiteSchema, CmsTestimonialSchema, CmsTestimonialsBlockData, CodeEditorSchema, CodeEntrySchema, CodeToken, CodeTokenKind, Color, ColorColumnSchema, ColorEntrySchema, ColorFormat, ColorPickerSchema, ColumnGroupHeaderCell, ColumnGroupSchema, ColumnLayoutColumnRef, ColumnLayoutNode, ColumnLayoutSchema, ColumnManagerPosition, ColumnProps, ColumnSchema, ColumnSpanValue, ColumnSummariesSchema, CommandPaletteLinkSchema, CommandPaletteResponse, CommandPaletteSchema, CommandSchema, ComponentDiscovery, ComponentRegistry, ConflictField, ConflictMonitor, ConflictMonitorOptions, ConflictMonitorState, ConflictsSchema, ConstraintPickerSection, ContainerBreakpoint, ContentBlock, ContentSlotItem, ContentSlotName, ContentSlotSchema, ContentSlots, CopilotController, CopilotControllerOptions, CopilotState, CopilotTotals, CopilotView, CropHandle, CropRect, CursorPaginationSchema, CustomBlockGroup, CustomBlockNodeOptions, CustomBlockPreview, CustomBlockResult, CustomWidgetSchema, DATABASE_NOTIFICATIONS_EVENT, DATABASE_NOTIFICATIONS_SENT, DEFAULT_ACTION_QUERY_KEYS, DEFAULT_LINK_PROTOCOLS, DEFAULT_VIRTUALIZE_THRESHOLD, DISCOVERY_FOLDERS, DashboardCustomizeSchema, DashboardEditor, DashboardEditorOptions, DashboardEditorState, DashboardLayoutEntry, DashboardLibraryWidget, DashboardMove, DashboardSpanOption, DashboardTranslator, DatabaseNotificationsResponse, DatePickerSchema, Debounced, DebugClosure, DebugDeprecation, DebugNode, DebugRecorder, DebugRequest, DebugRequestOutcome, DebugSchema, DebugServerTimings, DebugState, DefaultActionOpener, DefaultActionSchema, DeferredBadgeSchema, DeferredRequestOptions, DeferredTabBadges, DeprecationOptions, DevToolsClass, DevToolsContext, DevToolsSchema, Direction, DiscoveredEntry, DiscoveryFolder, DiscoveryKey, DiscoveryModules, DiscoveryOptions, DropdownPlacement, EchoChannelLike, EchoConnectionOptions, EchoEventChannel, EchoFactory, EchoLike, EchoPresenceChannelLike, EchoWithChannels, EditConflict, EditableColumnSchema, EditorAttachments, EditorSuggestions, EmptyStateComponentSchema, EmptyStateSchema, EntryProps, EntrySchema, ErrorNotificationEntrySchema, ErrorNotificationsSchema, ExecuteOptions, FIELD_ACTION_PREFIX, FIELD_TYPES, FILAMENT_CLOSE_NOTIFICATION_EVENT, FILE_MANAGER_DRAG_TYPE, FILE_MANAGER_PICKER_REGISTRY_KEY, FILE_MANAGER_REGISTRY_KEY, FILTERS_FORM_WIDTH_CLASSES, FILTERS_MODAL_WIDTH_CLASSES, FILTERS_SIDEBAR_WIDTH_CLASSES, FieldActionContextOptions, FieldActionResponse, FieldActions, FieldAriaAttributes, FieldAriaSource, FieldDescriptionIds, FieldProps, FieldSchema, FieldsetSchema, FileManagerActionNames, FileManagerBreadcrumbSchema, FileManagerClick, FileManagerController, FileManagerDataTransfer, FileManagerDetailsSchema, FileManagerDialog, FileManagerEntrySchema, FileManagerEnvironment, FileManagerFolderSchema, FileManagerKeyEvent, FileManagerKeyResult, FileManagerKind, FileManagerLinkSchema, FileManagerListingSchema, FileManagerPermissionsSchema, FileManagerPickedFileSchema, FileManagerPickerSchema, FileManagerPreviewSchema, FileManagerPreviewState, FileManagerResult, FileManagerSchema, FileManagerSort, FileManagerSortField, FileManagerState, FileManagerUpload, FileManagerUploader, FileUploadImageEditorSchema, FileUploadPositions, FileUploadSchema, FilterFormSync, FilterIndicator, FilterSchema, FiltersFormWidth, FiltersPlacement, FlashNotificationTracker, FlatNavigationItem, FlexSchema, FloatingToolbarEditor, FloatingToolbarState, FormBlock, FormPayload, FormState, FormStore, FormStoreOptions, FormattedStateProps, FusedGroupSchema, GLOBAL_SEARCH_DEBOUNCE, GRID_MAX_COLUMNS, GRID_MIN_COLUMNS, GlobalSearchGroupSchema, GlobalSearchResultSchema, GridBounds, GridCell, GridLayoutSchema, GridSchema, GroupSchema, GroupedTableRow, GuardedVisit, HELPDESK_ACTIVITY_EVENT, HELPDESK_SHORTCUTS, HELPDESK_TYPING_MS, HeadingTag, HelpdeskActivity, HelpdeskAttachment, HelpdeskBadge, HelpdeskChatClient, HelpdeskChatConfig, HelpdeskChatConversation, HelpdeskChatMessage, HelpdeskChatOptions, HelpdeskChatResponse, HelpdeskChatState, HelpdeskComposerMode, HelpdeskInboxController, HelpdeskInboxEnvironment, HelpdeskInboxList, HelpdeskInboxSchema, HelpdeskInboxState, HelpdeskMessage, HelpdeskSla, HelpdeskTicket, HelpdeskTicketSummary, HelpdeskView, HiddenSchema, HtmlSchema, HttpError, IMAGE_EDITOR_ZOOM_STEP, ITEM_MOVE_ATTRIBUTE, IconCellItem, IconColumnSchema, IconEntrySchema, IconName, IconPickerOption, IconPickerResponse, IconPickerSchema, IconPickerSearch, IconPickerSearchState, IconPickerSetSchema, IconPickerSource, IconPosition, IconSchema, IconSource, ImageCellSchema, ImageColumnSchema, ImageEditor, ImageEditorData, ImageEditorDragMode, ImageEditorMode, ImageEditorOptions, ImageEditorPoint, ImageEditorState, ImageEntrySchema, ImageGeometry, ImageSchema, ImageStackProps, ImageTransformOptions, ImpersonationSchema, ImplicitSubmitEvent, IndexedState, InfolistBlock, ItemActionFallback, ItemActionName, ItemActionSchema, ItemActionsItemProps, ItemActionsProps, ItemActionsSchema, ItemMoveDirection, ItemMoveTracker, JsonEntry, JsonKind, JsonRequestOptions, JsonSearchResult, KANBAN_NO_LANE, KANBAN_REGISTRY_KEY, KanbanAssigneeSchema, KanbanBadgeSchema, KanbanCardSchema, KanbanColumnSchema, KanbanController, KanbanEnvironment, KanbanFetchResult, KanbanFiltersSchema, KanbanKeyResult, KanbanLaneSchema, KanbanLocation, KanbanMoveResult, KanbanPicked, KanbanPointerOptions, KanbanRefusal, KanbanSchema, KanbanState, KanbanTarget, KanbanWidgetSchema, KeyLike, KeyValueEntrySchema, KeyValueSchema, KeyboardShortcutsSchema, LABEL_SLOTS, LAZY_PROP, LanguageSwitcherPosition, LatestRequest, LayoutSchema, LazyComponentCache, LazyRelationManagerSchema, LazyWidgetSchema, LinksBlock, ListTabSchema, ListTabsProps, Listener, LiveConfig, LivePropsOptions, LiveUpdates, LiveUpdatesOptions, LiveUpdatesSchema, LiveUpdatesState, LoadTableTotalsOptions, LoadedRichEditorExtensions, LocaleFormatter, LocaleSchema, LocalizationSchema, MAX_DEBUG_REQUESTS, MERGE_TAG_TRIGGER, MenuItemSchema, MergedRefresh, ModalTablePaging, ModalTableSelectResponse, ModalTableSelectSchema, MoneyInputSchema, MoneyOptions, NOT_PROSE_CLASS, NavigationBadgeSchema, NavigationGroupSchema, NavigationItemSchema, NavigationStateSchema, NotificationActionSchema, NotificationCenter, NotificationCenterState, NotificationEndpoints, NotificationSchema, NotificationUndoSchema, OPEN_DATABASE_NOTIFICATIONS_EVENT, OneTimeCodeInputSchema, OneTimeCodeSubmitter, OpenModal, Operation, Option, OptionGroup, OptionOrGroup, OptionsGridDirection, PAGE_EXPIRED_STATUS, PALETTE_GROUP_ORDER, PANEL_TOAST_OFFSET, PASSWORD_CONFIRMATION_INPUT, POLL_HEADER, POLL_PROP, PREFETCH_CACHE_FOR, PRESENCE_STATE_WHISPER, PageComponentProps, PageEventsOptions, PageLayout, PageMethodArguments, PageMethodCallOptions, PageMethodError, PageMethodResponse, PageMethodRuntime, PageSchema, PaginationSchema, PaletteGroup, PaletteItem, PaletteItemKind, PaletteLabels, PaletteSources, PanelDesignSchema, PanelEndpoints, PanelLayoutSchema, PanelSchema, PanelThemeSchema, PanelUserSchema, ParsedKeyBinding, PartialFormPayload, PastePlan, PathSegment, PersistStorage, PlaceholderSchema, PollScheduler, PolledComponents, PresenceMember, PresenceRoom, PresenceRoomOptions, PresenceRoomState, PresenceSchema, PresenceState, PwaInstallOutcome, PwaPushOutcome, PwaPushSchema, PwaPushStatus, PwaSchema, PwaState, QueryBuilderConstraintRule, QueryBuilderConstraintSchema, QueryBuilderGroup, QueryBuilderGroupRule, QueryBuilderInput, QueryBuilderOperatorSchema, QueryBuilderRule, QueryBuilderRulesSchema, RECORD_CHANGED_EVENT, RECORD_VERSION_INPUT, RELATION_MANAGERS_CONTENT_TAB, RELATION_QUERY_KEY, REMAINING_TEXT_SIZE_CLASSES, RadioSchema, RealtimeConfig, RealtimeSchema, RealtimeSubscriptionOptions, RecordChange, RecordKey, RecordVersionChangeSchema, RecordVersionSchema, RecordVersionsSchema, RegisteredShortcut, RelationGroupSchema, RelationManagerSchema, RelationManagerTab, RelationManagersBlock, RelationManagersContentTabSchema, RepeatableEntrySchema, RepeaterItemSchema, RepeaterItemState, RepeaterSchema, RichEditorCustomBlockSchema, RichEditorExtensionLoader, RichEditorMentionSchema, RichEditorMergeTagSchema, RichEditorPanel, RichEditorRemote, RichEditorSchema, RichEditorToolSchema, RichEditorToolbarGroupSchema, RulePath, SCHEMA_CONTRACT_VERSION, SELECTED_RECORDS_ARGUMENT, SEMANTIC_COLORS, SHORTCUT_IDS, SPREADSHEET_CLASSES, SPREADSHEET_ISSUE_MESSAGES, STACKED_TABLE_CLASSES, STARTER_KIT_COPILOT_SHORTCUT, STARTER_KIT_TOASTER_ID, SchemaBlock, SchemaComponent, SchemaComponentContext, SchemaComponentContextValue, SchemaComponentProps, SchemaContractCheck, SchemaPatch, SchemaRefreshResponse, SectionSchema, SelectColumnSchema, SelectOptionsResponse, SelectSchema, SelectionLimits, SelectionState, ShortcutDefinition, ShortcutGroup, ShortcutListGroup, ShortcutListItem, ShortcutOptions, ShortcutRecorder, ShortcutRegistry, ShortcutRegistryOptions, SimplePaginationSchema, Size, SliderBehavior, SliderNonLinearPoint, SliderPip, SliderPipSchema, SliderSchema, SlotDataValue, SlotItemSchema, SonnerPosition, SplitLayoutSchema, SpreadsheetAnnouncement, SpreadsheetCellKind, SpreadsheetChange, SpreadsheetColumn, SpreadsheetEdit, SpreadsheetGrid, SpreadsheetKey, SpreadsheetKeyResult, SpreadsheetRow, SpreadsheetSaveResult, SpreadsheetState, StackLayoutSchema, StandaloneComponentSchema, StandaloneComponentState, StandaloneDefaults, StarterKitBreadcrumb, StarterKitDashboardWidgetsSchema, StarterKitNavGroup, StarterKitNavItem, StarterKitNavigationSchema, StarterKitUserMenuItem, StarterKitWidgets, StarterKitWidgetsSchema, StatSchema, StatsOverviewWidgetSchema, StepSchema, StepValidationHaltedResponse, Store, StreamAnnouncer, StreamEvent, SubNavigationSchema, SuggestionEditor, SuggestionItem, SuggestionMatch, SuggestionState, SummaryValueSchema, TABLE_TOOLBAR_BUTTONS, TENANT_MENU_COMPONENT, TOOLBAR_COMMANDS, TRANSLATION_MANAGER_REGISTRY_KEY, TREE_REGISTRY_KEY, TabSchema, TableBlock, TableColumnSchema, TableDeferredTotalsSchema, TableEndpoints, TableGroupOptionSchema, TableGroupingSchema, TablePersistedStateKey, TableQuery, TableRecordGroupSchema, TableRecordSchema, TableSchema, TableSelection, TableSortSchema, TableSpreadsheetSchema, TableSummariesSchema, TableSummaryRowSchema, TableTotalsSchema, TableTriggerActionKey, TableTriggerActionSchema, TableTriggerModalSchema, TableViewItemSchema, TableViewOperation, TableViewResponse, TableViewsSchema, TableVisitCallbacks, TableWidgetSchema, TabsSchema, TagsInputSchema, TemporaryUploadOptions, TemporaryUploadResult, TenantSchema, TextAlignment, TextColumnSchema, TextEdit, TextEntrySchema, TextInputColumnSchema, TextInputSchema, TextSchema, TextStyleProps, TextareaSchema, ToastPosition, ToggleButtonsSchema, ToggleColumnSchema, ToggleSchema, ToolCommandContext, ToolbarCommand, ToolbarContext, ToolbarEditor, ToolbarKeyboardOptions, TranslatableLocaleSchema, TranslatableSchema, TranslationCellRef, TranslationCellSchema, TranslationFilter, TranslationHistoryEntry, TranslationHistoryState, TranslationKeyResult, TranslationLocaleSchema, TranslationManagerController, TranslationManagerEnvironment, TranslationManagerSchema, TranslationManagerState, TranslationProgressSchema, TranslationRowSchema, TranslationRowsResult, TranslationSaveResult, TranslationSuggestionSchema, Translator, TreeController, TreeDropPosition, TreeEnvironment, TreeKeyResult, TreeMove, TreeNodeSchema, TreeRow, TreeSaveResult, TreeSchema, TreeState, TreeStructureItem, TreeWidgetSchema, TriggerButtonDefaults, TriggerButtonView, USER_MENU_COMPONENT, UndoShortcuts, UnorderedListSchema, UploadedFile, VIRTUAL_ESTIMATES, VerticalAlignment, ViewColumnSchema, ViewEntrySchema, ViewSchema, VirtualList, VirtualListOptions, VirtualRange, VirtualizeSchema, WIZARD_STEP_QUERY_KEY, WidgetProps, WidgetSchema, WidgetsBlock, Width, WizardProgress, WizardSchema, acquireChannel, actionEndpoint, actionFormComponent, actionFormParams, actionPath, actionsAccessSelectedRecords, actionsAlignmentClass, activeTableView, addActionJustify, addGroup, addRule, allToolbarButtons, analyticsAllowed, analyticsChangeColor, analyticsInitialTab, announceDatabaseNotificationsSent, appendRepeaterItem, applyAppearance, applyBodyAttributes, applyDocumentLocale, applyEditorActionResult, applyFormRefresh, applyMask, applyPanelColors, applyPanelFavicon, applyPanelTheme, applyPwaUpdate, applySchemaPatches, ariaSort, asHelpdeskActivity, attachKanbanPointer, attachToolbarKeyboard, beginTableLoading, bindUndo, bindingFromEvent, bindsKeyBindings, bottomNavigationItems, buildChartConfig, buildQuery, buildTableUrl, builderBlockCounts, builderItemLabel, builderItemSchema, builderItems, builderPickerMove, byteLength, cachedTableTotals, calendarActionContext, calendarIdentity, calendarOptions, calendarWallTime, callCmsAutosave, callPageMethod, canAddBuilderBlock, canEditImage, canEditImageName, canInstallPwa, canNestGroup, canSelectAllRecords, cancelChunkedUpload, chartColorVariable, chartFiltersUrl, checkSchemaContract, clearRichEditorExtensions, clientErrorNotification, cloneIndexedState, cloneRepeaterItem, cloneTreeNodes, closeNotification, cmsAspectClass, cmsBlockKey, cmsBlocks, cmsColumnsClass, cmsGridClass, cmsHeadTags, cmsLinkRel, cmsPayload, cmsPreviewFitsBeside, cmsPreviewOpensByDefault, cmsPreviewOpensOnLoad, cmsPreviewPaneWidth, cmsWidthClass, coerceSpreadsheetValue, collapsesLanguageSwitcher, collectFieldStatePaths, collectFields, colorAlpha, colorToHex, columnDraftChanged, columnGroupHeaderRow, columnManagerPosition, columnOrderChanged, columnOrderClasses, columnRegistryKey, columnSpanClasses, columnStartClasses, columnVisibilityClasses, commandLabel, commandPaletteItems, commandShortcutId, completedStepIcon, componentHasErrors, concurrencyLimiter, configureCharts, configureRealtime, confirmModalClose, conflictMessage, constraintPickerClasses, constraintPickerSections, containerColumnSpanClasses, containerGridColumnsClasses, copilotBlocks, countCodeLines, createAnalyticsTracker, createAnotherState, createCmsTranslator, createKanbanFiltersStore, createLatestRequest, createRule, createSchemaComponentContext, createStore, csrfHeader, cssAspectRatio, currencyDecimals, currentPageQuery, currentRecordVersion, currentSocketId, currentStarterKitPanel, currentStarterKitPanelId, customBlockNodeConfig, customColorClasses, customPageProps, dashboardMoveForKey, debounce, debugRecorder, defaultActionContext, defaultActionKey, defaultVisibleColumns, deferredComponentReference, deferredHasErrors, deletePath, deprecate, deprecationMessage, derived, detailsNodeConfigs, discoveryKey, distributePageFormErrors, documentNonce, dropTreeNode, editableImageName, effectiveErrorNotifications, endTableLoading, errorNotificationOutcome, extremePageLinks, fetchEditableImage, fetchStandaloneComponents, fieldActionComponent, fieldActionContext, fieldAria, fieldDomId, fieldError, fieldIds, fieldMemory, fileAttachmentError, fileManagerAcceptAttribute, fileManagerAccepts, fileManagerErrorMessage, fileManagerExpiry, fileManagerSize, fileUploadAccept, fileUploadPaths, filesFromClipboard, filterBuilderBlocks, filterCommandPalette, filterFormComponents, filterQueryBuilderOptions, filterSelectColumnOptions, filterSuggestionItems, filterTenants, filtersAreDeferred, filtersCollapsible, filtersFormWidthClass, filtersPlacement, findAutofocusField, findConstraint, findFieldByPath, findGridContext, findOperator, findPageFormBlock, findStandalonePropName, findSuggestionMatch, firstErroredItemIndex, firstErrors, fixedContainingBlockOffset, flattenActionGroup, flattenNavigationItems, flattenTreeStructure, flexItemClasses, flexLayoutClasses, floatingToolbarStyle, focusAutofocusField, focusMovedItem, focusTableSearch, focusToolbar, forgetFieldMemory, formActionsVisible, formIdPrefix, formIdentity, formRefreshFor, formatBytes, formatColor, formatKeyBinding, formatPhpDate, formatShortcut, fuzzyScore, getChartFormatters, getChartPlugins, getConflictForm, getEcho, getPageForm, getPath, getScriptData, getStoredAppearance, globalSearchDebounce, globalSearchStatus, globalSearchSuffix, gridColumnsClasses, gridContent, gridNodeConfigs, groupAt, groupBuilderBlocks, groupCustomBlocks, groupMenuItems, groupTableRows, groupTableViews, groupTriggerButton, guardModalUnload, hasActiveNavigationItem, hasCommandPalette, hasContainerBreakpoints, hasDevTools, hasMobilePreset, hasNewErrors, hasPath, hasRelationManagerTabs, hasRichEditorExtension, hasSlots, hasThemeSwitcher, hasTopbar, headingTag, helpdeskChatString, helpdeskFileSize, helpdeskSlaTone, highlightCode, highlightMarkConfig, htmlLabelToText, htmlToMarkdown, iconAlias, iconAliasOverride, iconButtonSize, iconGridMove, iconPickerPreview, iconSource, imageEditorOptionsKey, imageGeometry, indentCode, inertiaPost, inertiaReload, inertiaVisit, initialCollapsedGroups, initialTranslatableLocale, initialWizardStep, initializeAppearance, initials, insertBuilderItem, insertUploadedFile, inspectableProps, installErrorNotifications, installPrefetchInvalidation, installSpaUrlExceptions, installStarterKitRuntime, interpolate, invalidatePrefetchedPages, invalidateTableTotals, isActionGroup, isActionLoading, isActionProcessing, isAlfakitPage, isAllowedLinkUrl, isAppendingPagination, isCustomBlockResult, isCustomColorName, isCustomSvgIcon, isDeferredPlaceholder, isEditableTarget, isField, isFieldActionContext, isGroupedColumn, isHighlightedLanguage, isIconAlias, isImplicitSubmit, isIosSafari, isLazyPlaceholder, isLeavingVisit, isMacLike, isModalHiddenByChild, isModalSubmitVisible, isMutatingRequest, isNavigationItemActive, isOptionGroup, isPageFullySelected, isPartialFormPayload, isRealtimeEnabled, isRightToLeft, isSafeColor, isStandalone, isStandaloneComponent, isStarterKitPanel, isTableLoading, isToolbarGroup, isToolbarShortcut, isUndoFinished, isUndoShortcut, isValidShortcut, itemActionContext, itemActionIcon, joinPath, jsonEntries, jsonKind, jsonScalar, jsonSize, kanbanActiveFilters, kanbanCardPosition, kanbanCardsIn, kanbanInitials, kanbanMovePayload, kanbanRefusal, kanbanWipState, keepMoveButtonFocus, latestServerTiming, layoutColumnNames, layoutNodeGrows, layoutVisibilityClasses, lazyComponentCache, lazyComponents, leadExtensionConfig, limitedListItems, linkExtensionOptions, listTabIds, listTabUrl, listenForPageEvents, listenForRecordChanges, loadDeferredBadge, loadDeferredComponent, loadEditorImage, loadRichEditorExtensions, loadScript, loadStarterKitPanel, loadStyle, loadTableTotals, loadedStarterKitPanel, locateKanbanCard, logicalArrowKey, markFailedLazyWidgets, markRecordSubmitted, matchesKeyBinding, matchesShortcutStep, matchesUrlPattern, maxColumns, mentionNodeConfig, mentionText, menuActionContext, mergeAttributes, mergeChartOptions, mergeDeferredComponent, mergePolledComponents, mergeRefreshResponse, mergeStatePatch, mergeTagNodeConfig, mergeTagText, mobileCardLayout, mobileTable, modalFooterAlignment, modalTablePaging, modalTableQuery, modalTableSelected, moveColumn, moveColumnInManager, moveColumnTo, moveIndexedState, moveKanbanCard, moveListItem, moveRepeaterItem, moveTreeNode, navigationItemText, navigationItemUrl, nestedActionContext, newlineWithIndent, nextPageQuery, nextToolbarItem, normalizeRichEditorExtensions, normalizeRuleTree, notificationTintStyles, observeThemeChanges, onCloseNotification, onDatabaseNotificationsSent, onOpenDatabaseNotifications, onPageFormsChanged, onSaveConflict, oneTimeCodeDigits, openDatabaseNotifications, openDefaultAction, openRequestedStarterKitSearch, optimistic, optionText, orderColumnsBy, overlayPlacementDirection, pageFlash, pageFormName, pageSelectionState, paginationTotal, paletteGroupKey, panelAppearance, panelUploadOptions, parentPath, parseAspectRatio, parseDropdownPlacement, parseEventStream, parseGridColumns, parseInterval, parseKeyBinding, parseServerTiming, parseTsv, performUndo, persistWizardStep, pickerFilterFormOptions, pollComponent, pollPageProps, pollScheduler, postFormWithProgress, preferCurrentStarterKitPanel, prefetchTablePage, presenceInitials, prettyJson, previousPageQuery, primaryColumnName, promptPwaInstall, propsPollScheduler, pwaStore, queryBuilderInputType, queryBuilderOptions, readEventStream, readPersisted, realtimeHeaders, realtimeSettings, recordActionsAtStart, registerChartFormatters, registerChartPlugins, registerConflictForm, registerFormSubmitter, registerKeyBindings, registerPageForm, registerRichEditorExtensions, registerShortcut, registerStandaloneProp, registerStarterKitCopilotShortcut, registerStarterKitSearchShortcut, registerTablePersistence, relationGroupBadgeTarget, relationManagerBadgeTarget, relationManagerTabs, relationTabFromQuery, relationTabSlug, reloadExpiredPage, reloadOnExpiredPage, reloadPageProps, reloadPolledComponents, remainingTextSizeClass, rememberedCmsPreview, removeAllFilterIndicators, removeFilterIndicator, removeIndexedState, removeRepeaterItem, removeRule, reorderOffset, reorderTable, reorderedItemKeys, reorderingListsAllRecords, replaceComponentByKey, replacePlaceholder, reportRequestError, reportSaveConflict, reportSchemaContractMismatch, reportWizardProgress, reportedDeprecations, requestJson, requestStarterKitCopilot, requestStarterKitLanguages, requestStarterKitSearch, requestTableView, requiresFullPageLoad, reserveCmsPreviewSpace, resetChartRegistrations, resetDeprecations, resetPwa, resetRealtime, resetSchemaContractReports, resetStarterKitPanels, resetTableTotals, resizableImageAttributes, resizableImageOptions, resolveActionSize, resolveAppearance, resolveChartCallbacks, resolveContainerStatePath, resolveCssColor, resolveDeferredBadge, resolveDeferredGroupBadge, resolveEcho, resolveErrorNotification, resolveFirst, resolveFloatingToolbar, resolveItemAction, resolveLazyComponents, resolveNavigation, resolvePanelNavigation, resolvePartialProps, resolveRequestErrorNotification, resolveStatePath, resolveStickyOffset, resolveToastPosition, revealAutofocusField, router, runEditorCommands, runPageMethod, runsItemActionOnServer, saveColumnOrder, saveShortcutOverrides, saveSpreadsheetChanges, scheduleAutofocus, schemaComponentNames, schemaContractMajor, schemaContractMismatchMessage, schemaGapClass, scorePaletteItem, searchJson, searchTableColumnOptions, selectAllState, selectColumnEmptyMessage, selectPlural, selectedRecordsArguments, setAppearance, setCombinator, setIconAliases, setPath, setRecordVersion, setRequestErrorReporter, setTextColor, shortcutOverlayGroups, shortcutSteps, shortcuts, shortcutsClash, shouldChunkUpload, shouldConfirmModalClose, shouldResyncForm, shownRecordKeys, showsLanguageSwitcher, showsTableToolbar, sidebarDefaultOpen, sidebarWidthStyle, skeletonRowCount, slideOverSide, sliderBehavior, sliderBlocksTap, sliderBounds, sliderDirection, sliderFillSections, sliderFillStyle, sliderFromPrimitive, sliderHasTooltips, sliderNextValues, sliderPercent, sliderPips, sliderPrimitive, sliderShift, sliderShowsTooltip, sliderSnap, sliderState, sliderToPrimitive, sliderValueAt, sliderValues, slotAlignmentClass, slotDataMatches, slotItems, smallMarkConfig, splitClasses, splitPath, spreadsheetAnnouncement, spreadsheetAria, spreadsheetCellClass, spreadsheetCellId, spreadsheetCellKey, spreadsheetCellKind, spreadsheetColumns, spreadsheetRows, spreadsheetSelectionSize, stackClasses, stackedCellClasses, stackedImageStyle, standaloneDirection, standalonePageSchema, standalonePanelSchema, standaloneWidgetCount, startAnalytics, startDownload, startPwa, startSliderRangeDrag, startTableReordering, startUndoCountdown, starterKitBreadcrumbsFromProps, starterKitCopilot, starterKitDashboardWidgets, starterKitNavigation, starterKitNavigations, starterKitPanelLocale, starterKitWidgets, starterKitWidgetsPage, starterKitWidgetsPanel, stickyCollisionPadding, stopTableReordering, submitFormById, subscribeToNotifications, subscribeToPush, subscriptMarkConfig, superscriptMarkConfig, switchLocale, syncStarterKitPage, syncToolbarTabStops, t, tabFromQuery, tabKeyTarget, tabQueryValue, tabToReveal, tableColumnAlignmentClass, tableColumnCells, tableLoadingStore, tableQueryKey, tableTotalsFailed, tableTotalsStore, tableViewError, tableViewFollowUp, tableViewUrl, takeRequestedStarterKitCopilot, takeRequestedStarterKitLanguages, templateForIndex, tenantNameText, textAlignExtensionConfig, textColorMarkConfig, timeInputStep, toAsciiDigits, toEditorDocument, toStarterKitBreadcrumbs, toStarterKitNavGroups, toStarterKitUserMenuItems, toTsv, toggleButtonsNext, toggleButtonsSelected, toggleCollapsedGroup, toggleModalTableKey, togglePushNotifications, toggleVisibleColumn, toolCommand, toolbarButtonLabel, toolbarCommands, toolbarItems, toolbarPanel, trackAnalyticsEvent, transformImage, translatableLocaleField, translatableLocalesWithErrors, translationCellValue, translator, treeParentKeys, treeSubtreeHeight, triggerButtonView, undoShortcuts, uniqueId, unsubscribeFromPush, updateGroup, updateRule, updateTableCell, uploadPageMethodFiles, uploadTemporaryFile, uploadWithProgress, uploadedFileLinks, urlBase64ToUint8Array, usesDefaultImageStack, usesStarterKitHostLayout, virtualizeOptions, visibleColumns, visiblePresenceMembers, visibleTreeRows, visitTable, visitTableView, wallClockNow, watchPageProps, whenIdle, whenVisible, widgetPollTarget, widgetRegistryKeys, withAlpha, withColorAlpha, withDeferredTabBadges, withEcho, withItemActionState, withTableTotals, withoutDefaultActionQuery, withoutRequired, wizardProgressStore, wizardRequestedStepIndex, wizardStepFieldPaths, wizardStepQueryKey, wizardStepToReveal, writePersisted };
|
|
136
|
+
export { ACTION_PATH_SEPARATOR, ACTIVE_TAB_QUERY_KEY, AI_COPILOT_REGISTRY_KEY, AI_STREAM_REGISTRY_KEY, ALL_SELECTED_RECORDS_ARGUMENT, ActionButtonSize, ActionContext, ActionGroupSchema, ActionModalCancelledResponse, ActionModalSchema, ActionResultEditor, ActionResultFlash, ActionRunner, ActionRunnerOptions, ActionRunnerState, ActionSchema, ActionVariant, ActionsComponentSchema, Affixes, AiActionStatus, AiConversationSchema, AiCopilotSchema, AiMessageRole, AiMessageSchema, AiProposedActionSchema, AiSetupNoticeSchema, AiStreamController, AiStreamOptions, AiStreamSchema, AiStreamState, AiStreamStatus, AlfakitFlash, AlfakitOptions, AlfakitPageProps, Alignment, AnalyticsBreakdownRowSchema, AnalyticsBreakdownTabSchema, AnalyticsBreakdownWidgetSchema, AnalyticsTracker, AnalyticsTrackerOptions, AnyActionSchema, AnyPaginationSchema, Appearance, AppendingPaginationSchema, Attributes, BOTTOM_NAVIGATION_SLOTS, BROADCAST_NOTIFICATION, BUILT_IN_COLORS, BUILT_IN_WIDGET_TYPES, BaseColumnSchema, BaseComponent, BaseEntry, BaseField, BaseWidgetSchema, BlockProps, BottomNavigationItems, BreadcrumbSchema, Breakpoint, Breakpoints, BuilderBlockGroup, BuilderBlockSchema, BuilderItemSchema, BuilderItemState, BuilderPickerRect, BuilderSchema, BulkToggleActionSchema, CALENDAR_ARGUMENTS_KEY, CALENDAR_EVENT_DROP_ACTION, CALENDAR_EVENT_RESIZE_ACTION, CALENDAR_FETCH_EVENTS_ACTION, CALENDAR_REGISTRY_KEY, CLOSE_NOTIFICATION_EVENT, CMS_BLOCK_PREFIX, CMS_BUILT_IN_BLOCKS, CMS_FOOTER_KEY, CMS_FORM_KEY, CMS_HEADER_KEY, CMS_PAGE_COMPONENT, CMS_PREVIEW_DEVICES, CMS_PREVIEW_STORAGE_KEY, COMMANDS_COMPONENT, CONFLICT_ERROR_KEY, CONSTRAINT_PICKER_WIDTH_CLASSES, CONTAINER_BREAKPOINTS, CREATE_ANOTHER_ARGUMENT, CalendarChangeResult, CalendarEnvironment, CalendarEventApi, CalendarEventChangeInfo, CalendarEventClickInfo, CalendarEventSchema, CalendarFetchInfo, CalendarSelectInfo, CalendarView, CalendarWidgetSchema, CallPageMethodOptions, CalloutSchema, CellSchema, ChartConfigInput, ChartConfigOutput, ChartEmptyStateSchema, ChartFiltersFormSchema, ChartFormatter, ChartWidgetSchema, CheckboxColumnSchema, CheckboxListSchema, CheckboxSchema, CmsAdminBarSchema, CmsAlternateSchema, CmsAspectRatio, CmsAutosave, CmsAutosaveOptions, CmsAutosaveResult, CmsAutosaveSnapshot, CmsAutosaveStatus, CmsBlockSchema, CmsBreadcrumbSchema, CmsBuiltInBlocks, CmsCallToActionBlockData, CmsColumnsBlockData, CmsEditorStatusSchema, CmsEmbedBlockData, CmsFaqBlockData, CmsFeatureSchema, CmsFeaturesBlockData, CmsFormBlockData, CmsGalleryBlockData, CmsHeadTags, CmsHeroBlockData, CmsImageBlockData, CmsImageSchema, CmsLinkSchema, CmsLinkTag, CmsLivePreviewSchema, CmsMenuItemSchema, CmsMenuSchema, CmsMetaTag, CmsPageProps, CmsPageSchema, CmsPayload, CmsPreviewDevice, CmsRichTextBlockData, CmsSectionBlockData, CmsSeoSchema, CmsSiteSchema, CmsTestimonialSchema, CmsTestimonialsBlockData, CodeEditorSchema, CodeEntrySchema, CodeToken, CodeTokenKind, Color, ColorColumnSchema, ColorEntrySchema, ColorFormat, ColorPickerSchema, ColumnGroupHeaderCell, ColumnGroupSchema, ColumnLayoutColumnRef, ColumnLayoutNode, ColumnLayoutSchema, ColumnManagerPosition, ColumnProps, ColumnSchema, ColumnSpanValue, ColumnSummariesSchema, CommandPaletteLinkSchema, CommandPaletteResponse, CommandPaletteSchema, CommandSchema, ComponentDiscovery, ComponentRegistry, ConflictField, ConflictMonitor, ConflictMonitorOptions, ConflictMonitorState, ConflictsSchema, ConstraintPickerSection, ContainerBreakpoint, ContentBlock, ContentSlotItem, ContentSlotName, ContentSlotSchema, ContentSlots, CopilotController, CopilotControllerOptions, CopilotState, CopilotTotals, CopilotView, CropHandle, CropRect, CursorPaginationSchema, CustomBlockGroup, CustomBlockNodeOptions, CustomBlockPreview, CustomBlockResult, CustomWidgetSchema, DATABASE_NOTIFICATIONS_EVENT, DATABASE_NOTIFICATIONS_SENT, DEFAULT_ACTION_QUERY_KEYS, DEFAULT_LINK_PROTOCOLS, DEFAULT_VIRTUALIZE_THRESHOLD, DISCOVERY_FOLDERS, DashboardCustomizeSchema, DashboardEditor, DashboardEditorOptions, DashboardEditorState, DashboardLayoutEntry, DashboardLibraryWidget, DashboardMove, DashboardSpanOption, DashboardTranslator, DatabaseNotificationsResponse, DatePickerSchema, Debounced, DebugClosure, DebugDeprecation, DebugNode, DebugRecorder, DebugRequest, DebugRequestOutcome, DebugSchema, DebugServerTimings, DebugState, DefaultActionOpener, DefaultActionSchema, DeferredBadgeSchema, DeferredRequestOptions, DeferredTabBadges, DeprecationOptions, DevToolsClass, DevToolsContext, DevToolsSchema, Direction, DiscoveredEntry, DiscoveryFolder, DiscoveryKey, DiscoveryModules, DiscoveryOptions, DropdownPlacement, EchoChannelLike, EchoConnectionOptions, EchoEventChannel, EchoFactory, EchoLike, EchoPresenceChannelLike, EchoWithChannels, EditConflict, EditableColumnSchema, EditorAttachments, EditorSuggestions, EmptyStateComponentSchema, EmptyStateSchema, EntryProps, EntrySchema, ErrorNotificationEntrySchema, ErrorNotificationsSchema, ExecuteOptions, FIELD_ACTION_PREFIX, FIELD_TYPES, FILAMENT_CLOSE_NOTIFICATION_EVENT, FILE_MANAGER_DRAG_TYPE, FILE_MANAGER_PICKER_REGISTRY_KEY, FILE_MANAGER_REGISTRY_KEY, FILTERS_FORM_WIDTH_CLASSES, FILTERS_MODAL_WIDTH_CLASSES, FILTERS_SIDEBAR_WIDTH_CLASSES, FieldActionContextOptions, FieldActionResponse, FieldActions, FieldAriaAttributes, FieldAriaSource, FieldDescriptionIds, FieldProps, FieldSchema, FieldsetSchema, FileManagerActionNames, FileManagerBreadcrumbSchema, FileManagerClick, FileManagerController, FileManagerDataTransfer, FileManagerDetailsSchema, FileManagerDialog, FileManagerEntrySchema, FileManagerEnvironment, FileManagerFolderSchema, FileManagerKeyEvent, FileManagerKeyResult, FileManagerKind, FileManagerLinkSchema, FileManagerListingSchema, FileManagerPermissionsSchema, FileManagerPickedFileSchema, FileManagerPickerSchema, FileManagerPreviewSchema, FileManagerPreviewState, FileManagerResult, FileManagerSchema, FileManagerSort, FileManagerSortField, FileManagerState, FileManagerUpload, FileManagerUploader, FileUploadImageEditorSchema, FileUploadPositions, FileUploadSchema, FilterFormSync, FilterIndicator, FilterSchema, FiltersFormWidth, FiltersPlacement, FlashNotificationTracker, FlatNavigationItem, FlexSchema, FloatingToolbarEditor, FloatingToolbarState, FormBlock, FormPayload, FormState, FormStore, FormStoreOptions, FormattedStateProps, FusedGroupSchema, GLOBAL_SEARCH_DEBOUNCE, GRID_MAX_COLUMNS, GRID_MIN_COLUMNS, GlobalSearchGroupSchema, GlobalSearchResultSchema, GridBounds, GridCell, GridLayoutSchema, GridSchema, GroupSchema, GroupedTableRow, GuardedVisit, HELPDESK_ACTIVITY_EVENT, HELPDESK_SHORTCUTS, HELPDESK_TYPING_MS, HeadingTag, HelpdeskActivity, HelpdeskAttachment, HelpdeskBadge, HelpdeskChatClient, HelpdeskChatConfig, HelpdeskChatConversation, HelpdeskChatMessage, HelpdeskChatOptions, HelpdeskChatResponse, HelpdeskChatState, HelpdeskComposerMode, HelpdeskInboxController, HelpdeskInboxEnvironment, HelpdeskInboxList, HelpdeskInboxSchema, HelpdeskInboxState, HelpdeskMessage, HelpdeskSla, HelpdeskTicket, HelpdeskTicketSummary, HelpdeskView, HiddenSchema, HtmlSchema, HttpError, IMAGE_EDITOR_ZOOM_STEP, ITEM_MOVE_ATTRIBUTE, IconCellItem, IconColumnSchema, IconEntrySchema, IconName, IconPickerOption, IconPickerResponse, IconPickerSchema, IconPickerSearch, IconPickerSearchState, IconPickerSetSchema, IconPickerSource, IconPosition, IconSchema, IconSource, ImageCellSchema, ImageColumnSchema, ImageEditor, ImageEditorData, ImageEditorDragMode, ImageEditorMode, ImageEditorOptions, ImageEditorPoint, ImageEditorState, ImageEntrySchema, ImageGeometry, ImageSchema, ImageStackProps, ImageTransformOptions, ImpersonationSchema, ImplicitSubmitEvent, IndexedState, InfolistBlock, ItemActionFallback, ItemActionName, ItemActionSchema, ItemActionsItemProps, ItemActionsProps, ItemActionsSchema, ItemMoveDirection, ItemMoveTracker, JsonEntry, JsonKind, JsonRequestOptions, JsonSearchResult, KANBAN_NO_LANE, KANBAN_REGISTRY_KEY, KanbanAssigneeSchema, KanbanBadgeSchema, KanbanCardSchema, KanbanColumnSchema, KanbanController, KanbanEnvironment, KanbanFetchResult, KanbanFiltersSchema, KanbanKeyResult, KanbanLaneSchema, KanbanLocation, KanbanMoveResult, KanbanPicked, KanbanPointerOptions, KanbanRefusal, KanbanSchema, KanbanState, KanbanTarget, KanbanWidgetSchema, KeyLike, KeyValueEntrySchema, KeyValueSchema, KeyboardShortcutsSchema, LABEL_SLOTS, LAZY_PROP, LanguageSwitcherPosition, LatestRequest, LayoutSchema, LazyComponentCache, LazyRelationManagerSchema, LazyWidgetSchema, LinksBlock, ListTabSchema, ListTabsProps, Listener, LiveConfig, LivePropsOptions, LiveUpdates, LiveUpdatesOptions, LiveUpdatesSchema, LiveUpdatesState, LoadTableTotalsOptions, LoadedRichEditorExtensions, LocaleFormatter, LocaleSchema, LocalizationSchema, MAX_DEBUG_REQUESTS, MERGE_TAG_TRIGGER, MenuItemSchema, MergedRefresh, ModalTablePaging, ModalTableSelectResponse, ModalTableSelectSchema, MoneyInputSchema, MoneyOptions, NOT_PROSE_CLASS, NavigationBadgeSchema, NavigationGroupSchema, NavigationItemSchema, NavigationStateSchema, NotificationActionSchema, NotificationCenter, NotificationCenterState, NotificationEndpoints, NotificationSchema, NotificationUndoSchema, OPEN_DATABASE_NOTIFICATIONS_EVENT, OneTimeCodeInputSchema, OneTimeCodeSubmitter, OpenModal, Operation, Option, OptionGroup, OptionOrGroup, OptionsGridDirection, PAGE_EXPIRED_STATUS, PALETTE_GROUP_ORDER, PANEL_TOAST_OFFSET, PASSWORD_CONFIRMATION_INPUT, POLL_HEADER, POLL_PROP, PREFETCH_CACHE_FOR, PRESENCE_STATE_WHISPER, PageComponentProps, PageEventsOptions, PageLayout, PageMethodArguments, PageMethodCallOptions, PageMethodError, PageMethodResponse, PageMethodRuntime, PageSchema, PaginationSchema, PaletteGroup, PaletteItem, PaletteItemKind, PaletteLabels, PaletteSources, PanelDesignSchema, PanelEndpoints, PanelLayoutSchema, PanelSchema, PanelThemeSchema, PanelUserSchema, ParsedKeyBinding, PartialFormPayload, PastePlan, PathSegment, PersistStorage, PlaceholderSchema, PollScheduler, PolledComponents, PresenceMember, PresenceRoom, PresenceRoomOptions, PresenceRoomState, PresenceSchema, PresenceState, PwaInstallOutcome, PwaPushOutcome, PwaPushSchema, PwaPushStatus, PwaSchema, PwaState, QueryBuilderConstraintRule, QueryBuilderConstraintSchema, QueryBuilderGroup, QueryBuilderGroupRule, QueryBuilderInput, QueryBuilderOperatorSchema, QueryBuilderRule, QueryBuilderRulesSchema, RECORD_CHANGED_EVENT, RECORD_VERSION_INPUT, RELATION_MANAGERS_CONTENT_TAB, RELATION_QUERY_KEY, REMAINING_TEXT_SIZE_CLASSES, RadioSchema, RealtimeConfig, RealtimeSchema, RealtimeSubscriptionOptions, RecordChange, RecordKey, RecordVersionChangeSchema, RecordVersionSchema, RecordVersionsSchema, RegisteredShortcut, RelationGroupSchema, RelationManagerSchema, RelationManagerTab, RelationManagersBlock, RelationManagersContentTabSchema, RepeatableEntrySchema, RepeaterItemSchema, RepeaterItemState, RepeaterSchema, RichEditorCustomBlockSchema, RichEditorExtensionLoader, RichEditorMentionSchema, RichEditorMergeTagSchema, RichEditorPanel, RichEditorRemote, RichEditorSchema, RichEditorToolSchema, RichEditorToolbarGroupSchema, RulePath, SCHEMA_CONTRACT_VERSION, SELECTED_RECORDS_ARGUMENT, SEMANTIC_COLORS, SHORTCUT_IDS, SPREADSHEET_CLASSES, SPREADSHEET_ISSUE_MESSAGES, STACKED_TABLE_CLASSES, STARTER_KIT_COPILOT_SHORTCUT, STARTER_KIT_TOASTER_ID, SchemaBlock, SchemaComponent, SchemaComponentContext, SchemaComponentContextValue, SchemaComponentProps, SchemaContractCheck, SchemaPatch, SchemaRefreshResponse, SectionSchema, SelectColumnSchema, SelectOptionsResponse, SelectSchema, SelectionLimits, SelectionState, ShortcutDefinition, ShortcutGroup, ShortcutListGroup, ShortcutListItem, ShortcutOptions, ShortcutRecorder, ShortcutRegistry, ShortcutRegistryOptions, SimplePaginationSchema, Size, SliderBehavior, SliderNonLinearPoint, SliderPip, SliderPipSchema, SliderSchema, SlotDataValue, SlotItemSchema, SonnerPosition, SplitLayoutSchema, SpreadsheetAnnouncement, SpreadsheetCellKind, SpreadsheetChange, SpreadsheetColumn, SpreadsheetEdit, SpreadsheetGrid, SpreadsheetKey, SpreadsheetKeyResult, SpreadsheetRow, SpreadsheetSaveResult, SpreadsheetState, StackLayoutSchema, StandaloneComponentSchema, StandaloneComponentState, StandaloneDefaults, StarterKitBreadcrumb, StarterKitDashboardWidgetsSchema, StarterKitNavGroup, StarterKitNavItem, StarterKitNavigationSchema, StarterKitUserMenuItem, StarterKitWidgets, StarterKitWidgetsSchema, StatSchema, StatsOverviewWidgetSchema, StepSchema, StepValidationHaltedResponse, Store, StreamAnnouncer, StreamEvent, SubNavigationSchema, SuggestionEditor, SuggestionItem, SuggestionMatch, SuggestionState, SummaryValueSchema, TABLE_TOOLBAR_BUTTONS, TENANT_MENU_COMPONENT, TOOLBAR_COMMANDS, TRANSLATION_MANAGER_REGISTRY_KEY, TREE_REGISTRY_KEY, TabSchema, TableBlock, TableColumnSchema, TableDeferredTotalsSchema, TableEndpoints, TableGroupOptionSchema, TableGroupingSchema, TablePersistedStateKey, TableQuery, TableRecordGroupSchema, TableRecordSchema, TableSchema, TableSelection, TableSortSchema, TableSpreadsheetSchema, TableSummariesSchema, TableSummaryRowSchema, TableTotalsSchema, TableTriggerActionKey, TableTriggerActionSchema, TableTriggerModalSchema, TableViewItemSchema, TableViewOperation, TableViewResponse, TableViewsSchema, TableVisitCallbacks, TableWidgetSchema, TabsSchema, TagsInputSchema, TemporaryUploadOptions, TemporaryUploadResult, TenantSchema, TextAlignment, TextColumnSchema, TextEdit, TextEntrySchema, TextInputColumnSchema, TextInputSchema, TextSchema, TextStyleProps, TextareaSchema, ToastPosition, ToggleButtonsSchema, ToggleColumnSchema, ToggleSchema, ToolCommandContext, ToolbarCommand, ToolbarContext, ToolbarEditor, ToolbarKeyboardOptions, TranslatableLocaleSchema, TranslatableSchema, TranslationCellRef, TranslationCellSchema, TranslationFilter, TranslationHistoryEntry, TranslationHistoryState, TranslationKeyResult, TranslationLocaleSchema, TranslationManagerController, TranslationManagerEnvironment, TranslationManagerSchema, TranslationManagerState, TranslationProgressSchema, TranslationRowSchema, TranslationRowsResult, TranslationSaveResult, TranslationSuggestionSchema, Translator, TreeController, TreeDropPosition, TreeEnvironment, TreeKeyResult, TreeMove, TreeNodeSchema, TreeRow, TreeSaveResult, TreeSchema, TreeState, TreeStructureItem, TreeWidgetSchema, TriggerButtonDefaults, TriggerButtonView, USER_MENU_COMPONENT, UndoShortcuts, UnorderedListSchema, UploadedFile, VIRTUAL_ESTIMATES, VerticalAlignment, ViewColumnSchema, ViewEntrySchema, ViewSchema, VirtualList, VirtualListOptions, VirtualRange, VirtualizeSchema, WIZARD_STEP_QUERY_KEY, WidgetProps, WidgetSchema, WidgetsBlock, Width, WizardProgress, WizardSchema, acquireChannel, actionEndpoint, actionFormComponent, actionFormParams, actionPath, actionsAccessSelectedRecords, actionsAlignmentClass, activeTableView, addActionJustify, addGroup, addRule, allToolbarButtons, analyticsAllowed, analyticsChangeColor, analyticsInitialTab, announceDatabaseNotificationsSent, appendRepeaterItem, applyAppearance, applyBodyAttributes, applyDocumentLocale, applyEditorActionResult, applyFormRefresh, applyMask, applyPanelColors, applyPanelFavicon, applyPanelTheme, applyPwaUpdate, applySchemaPatches, ariaSort, asHelpdeskActivity, attachKanbanPointer, attachToolbarKeyboard, beginTableLoading, bindUndo, bindingFromEvent, bindsKeyBindings, bottomNavigationItems, buildChartConfig, buildQuery, buildTableUrl, builderBlockCounts, builderItemLabel, builderItemSchema, builderItems, builderPickerMove, byteLength, cachedTableTotals, calendarActionContext, calendarIdentity, calendarOptions, calendarWallTime, callCmsAutosave, callPageMethod, canAddBuilderBlock, canEditImage, canEditImageName, canInstallPwa, canNestGroup, canSelectAllRecords, cancelChunkedUpload, chartColorVariable, chartFiltersUrl, checkSchemaContract, clearRichEditorExtensions, clientErrorNotification, cloneIndexedState, cloneRepeaterItem, cloneTreeNodes, closeNotification, cmsAspectClass, cmsBlockKey, cmsBlocks, cmsColumnsClass, cmsGridClass, cmsHeadTags, cmsLinkRel, cmsPayload, cmsPreviewFitsBeside, cmsPreviewOpensByDefault, cmsPreviewOpensOnLoad, cmsPreviewPaneWidth, cmsWidthClass, coerceSpreadsheetValue, collapsesLanguageSwitcher, collectFieldStatePaths, collectFields, colorAlpha, colorToHex, columnDraftChanged, columnGroupHeaderRow, columnManagerPosition, columnOrderChanged, columnOrderClasses, columnRegistryKey, columnSpanClasses, columnStartClasses, columnVisibilityClasses, commandLabel, commandPaletteItems, commandShortcutId, completedStepIcon, componentHasErrors, concurrencyLimiter, configureCharts, configureRealtime, confirmModalClose, conflictMessage, constraintPickerClasses, constraintPickerSections, containerColumnSpanClasses, containerGridColumnsClasses, copilotBlocks, countCodeLines, createAnalyticsTracker, createAnotherState, createCmsTranslator, createKanbanFiltersStore, createLatestRequest, createRule, createSchemaComponentContext, createStore, csrfHeader, cssAspectRatio, currencyDecimals, currentPageQuery, currentRecordVersion, currentSocketId, currentStarterKitPanel, currentStarterKitPanelId, customBlockNodeConfig, customColorClasses, customPageProps, dashboardMoveForKey, debounce, debugRecorder, defaultActionContext, defaultActionKey, defaultVisibleColumns, deferredComponentReference, deferredHasErrors, deletePath, deprecate, deprecationMessage, derived, detailsNodeConfigs, discoveryKey, distributePageFormErrors, documentNonce, dropTreeNode, editableImageName, effectiveErrorNotifications, endTableLoading, errorNotificationOutcome, extremePageLinks, fetchEditableImage, fetchStandaloneComponents, fieldActionComponent, fieldActionContext, fieldAria, fieldDomId, fieldError, fieldIds, fieldMemory, fileAttachmentError, fileManagerAcceptAttribute, fileManagerAccepts, fileManagerErrorMessage, fileManagerExpiry, fileManagerSize, fileUploadAccept, fileUploadEntries, fileUploadPaths, filesFromClipboard, filterBuilderBlocks, filterCommandPalette, filterFormComponents, filterQueryBuilderOptions, filterSelectColumnOptions, filterSuggestionItems, filterTenants, filtersAreDeferred, filtersCollapsible, filtersFormWidthClass, filtersPlacement, findAutofocusField, findConstraint, findFieldByPath, findGridContext, findOperator, findPageFormBlock, findStandalonePropName, findSuggestionMatch, firstErroredItemIndex, firstErrors, fixedContainingBlockOffset, flattenActionGroup, flattenNavigationItems, flattenTreeStructure, flexItemClasses, flexLayoutClasses, floatingToolbarStyle, focusAutofocusField, focusMovedItem, focusTableSearch, focusToolbar, forgetFieldMemory, formActionsVisible, formIdPrefix, formIdentity, formRefreshFor, formatBytes, formatColor, formatKeyBinding, formatPhpDate, formatShortcut, fuzzyScore, getChartFormatters, getChartPlugins, getConflictForm, getEcho, getPageForm, getPath, getScriptData, getStoredAppearance, globalSearchDebounce, globalSearchStatus, globalSearchSuffix, gridColumnsClasses, gridContent, gridNodeConfigs, groupAt, groupBuilderBlocks, groupCustomBlocks, groupMenuItems, groupTableRows, groupTableViews, groupTriggerButton, guardModalUnload, hasActiveNavigationItem, hasCommandPalette, hasContainerBreakpoints, hasDevTools, hasMobilePreset, hasNewErrors, hasPath, hasRelationManagerTabs, hasRichEditorExtension, hasSlots, hasThemeSwitcher, hasTopbar, headingTag, helpdeskChatString, helpdeskFileSize, helpdeskSlaTone, highlightCode, highlightMarkConfig, htmlLabelToText, htmlToMarkdown, iconAlias, iconAliasOverride, iconButtonSize, iconGridMove, iconPickerPreview, iconSource, imageEditorOptionsKey, imageGeometry, indentCode, inertiaPost, inertiaReload, inertiaVisit, initialCollapsedGroups, initialTranslatableLocale, initialWizardStep, initializeAppearance, initials, insertBuilderItem, insertUploadedFile, inspectableProps, installErrorNotifications, installPrefetchInvalidation, installSpaUrlExceptions, installStarterKitRuntime, interpolate, invalidatePrefetchedPages, invalidateTableTotals, isActionGroup, isActionLoading, isActionProcessing, isAlfakitPage, isAllowedLinkUrl, isAppendingPagination, isCustomBlockResult, isCustomColorName, isCustomSvgIcon, isDeferredPlaceholder, isEditableTarget, isField, isFieldActionContext, isGroupedColumn, isHighlightedLanguage, isIconAlias, isImplicitSubmit, isIosSafari, isLazyPlaceholder, isLeavingVisit, isMacLike, isModalHiddenByChild, isModalSubmitVisible, isMutatingRequest, isNavigationItemActive, isOptionGroup, isPageFullySelected, isPartialFormPayload, isRealtimeEnabled, isRightToLeft, isSafeColor, isStandalone, isStandaloneComponent, isStarterKitPanel, isTableLoading, isToolbarGroup, isToolbarShortcut, isUndoFinished, isUndoShortcut, isValidShortcut, itemActionContext, itemActionIcon, itemExtraActions, joinPath, jsonEntries, jsonKind, jsonScalar, jsonSize, kanbanActiveFilters, kanbanCardPosition, kanbanCardsIn, kanbanInitials, kanbanMovePayload, kanbanRefusal, kanbanWipState, keepMoveButtonFocus, latestServerTiming, layoutColumnNames, layoutNodeGrows, layoutVisibilityClasses, lazyComponentCache, lazyComponents, leadExtensionConfig, limitedListItems, linkExtensionOptions, listTabIds, listTabUrl, listenForPageEvents, listenForRecordChanges, loadDeferredBadge, loadDeferredComponent, loadEditorImage, loadRichEditorExtensions, loadScript, loadStarterKitPanel, loadStyle, loadTableTotals, loadedStarterKitPanel, locateKanbanCard, logicalArrowKey, markFailedLazyWidgets, markRecordSubmitted, matchesKeyBinding, matchesShortcutStep, matchesUrlPattern, maxColumns, mentionNodeConfig, mentionText, menuActionContext, mergeAttributes, mergeChartOptions, mergeDeferredComponent, mergePolledComponents, mergeRefreshResponse, mergeStatePatch, mergeTagNodeConfig, mergeTagText, mobileCardLayout, mobileTable, modalFooterAlignment, modalTablePaging, modalTableQuery, modalTableSelected, moveColumn, moveColumnInManager, moveColumnTo, moveIndexedState, moveKanbanCard, moveListItem, moveRepeaterItem, moveTreeNode, navigationItemText, navigationItemUrl, nestedActionContext, newlineWithIndent, nextPageQuery, nextToolbarItem, normalizeRichEditorExtensions, normalizeRuleTree, notificationTintStyles, observeThemeChanges, onCloseNotification, onDatabaseNotificationsSent, onOpenDatabaseNotifications, onPageFormsChanged, onSaveConflict, oneTimeCodeDigits, openDatabaseNotifications, openDefaultAction, openRequestedStarterKitSearch, optimistic, optionText, orderColumnsBy, overlayPlacementDirection, pageFlash, pageFormName, pageSelectionState, paginationTotal, paletteGroupKey, panelAppearance, panelUploadOptions, parentPath, parseAspectRatio, parseDropdownPlacement, parseEventStream, parseGridColumns, parseInterval, parseKeyBinding, parseServerTiming, parseTsv, performUndo, persistWizardStep, pickerFilterFormOptions, pollComponent, pollPageProps, pollScheduler, postFormWithProgress, preferCurrentStarterKitPanel, prefetchTablePage, presenceInitials, prettyJson, previousPageQuery, primaryColumnName, promptPwaInstall, propsPollScheduler, pwaStore, queryBuilderInputType, queryBuilderOptions, readEventStream, readPersisted, realtimeHeaders, realtimeSettings, recordActionsAtStart, registerChartFormatters, registerChartPlugins, registerConflictForm, registerFormSubmitter, registerKeyBindings, registerPageForm, registerRichEditorExtensions, registerShortcut, registerStandaloneProp, registerStarterKitCopilotShortcut, registerStarterKitSearchShortcut, registerTablePersistence, relationGroupBadgeTarget, relationManagerBadgeTarget, relationManagerTabs, relationTabFromQuery, relationTabSlug, reloadExpiredPage, reloadOnExpiredPage, reloadPageProps, reloadPolledComponents, remainingTextSizeClass, rememberedCmsPreview, removeAllFilterIndicators, removeFilterIndicator, removeIndexedState, removeRepeaterItem, removeRule, reorderOffset, reorderTable, reorderedItemKeys, reorderingListsAllRecords, replaceComponentByKey, replacePlaceholder, reportRequestError, reportSaveConflict, reportSchemaContractMismatch, reportWizardProgress, reportedDeprecations, requestJson, requestStarterKitCopilot, requestStarterKitLanguages, requestStarterKitSearch, requestTableView, requiresFullPageLoad, reserveCmsPreviewSpace, resetChartRegistrations, resetDeprecations, resetPwa, resetRealtime, resetSchemaContractReports, resetStarterKitPanels, resetTableTotals, resizableImageAttributes, resizableImageOptions, resolveActionSize, resolveAppearance, resolveChartCallbacks, resolveContainerStatePath, resolveCssColor, resolveDeferredBadge, resolveDeferredGroupBadge, resolveEcho, resolveErrorNotification, resolveFirst, resolveFloatingToolbar, resolveItemAction, resolveLazyComponents, resolveNavigation, resolvePanelNavigation, resolvePartialProps, resolveRequestErrorNotification, resolveStatePath, resolveStickyOffset, resolveToastPosition, revealAutofocusField, router, runEditorCommands, runPageMethod, runsItemActionOnServer, saveColumnOrder, saveShortcutOverrides, saveSpreadsheetChanges, scheduleAutofocus, schemaComponentNames, schemaContractMajor, schemaContractMismatchMessage, schemaGapClass, scorePaletteItem, searchJson, searchTableColumnOptions, selectAllState, selectColumnEmptyMessage, selectPlural, selectedRecordsArguments, setAppearance, setCombinator, setIconAliases, setPath, setRecordVersion, setRequestErrorReporter, setTextColor, shortcutOverlayGroups, shortcutSteps, shortcuts, shortcutsClash, shouldChunkUpload, shouldConfirmModalClose, shouldResyncForm, shownRecordKeys, showsLanguageSwitcher, showsTableToolbar, sidebarDefaultOpen, sidebarWidthStyle, skeletonRowCount, slideOverSide, sliderBehavior, sliderBlocksTap, sliderBounds, sliderDirection, sliderFillSections, sliderFillStyle, sliderFromPrimitive, sliderHasTooltips, sliderNextValues, sliderPercent, sliderPips, sliderPrimitive, sliderShift, sliderShowsTooltip, sliderSnap, sliderState, sliderToPrimitive, sliderValueAt, sliderValues, slotAlignmentClass, slotDataMatches, slotItems, smallMarkConfig, splitClasses, splitPath, spreadsheetAnnouncement, spreadsheetAria, spreadsheetCellClass, spreadsheetCellId, spreadsheetCellKey, spreadsheetCellKind, spreadsheetColumns, spreadsheetRows, spreadsheetSelectionSize, stackClasses, stackedCellClasses, stackedImageStyle, standaloneDirection, standalonePageSchema, standalonePanelSchema, standaloneWidgetCount, startAnalytics, startDownload, startPwa, startSliderRangeDrag, startTableReordering, startUndoCountdown, starterKitBreadcrumbsFromProps, starterKitCopilot, starterKitDashboardWidgets, starterKitNavigation, starterKitNavigations, starterKitPanelLocale, starterKitWidgets, starterKitWidgetsPage, starterKitWidgetsPanel, stickyCollisionPadding, stopTableReordering, submitFormById, subscribeToNotifications, subscribeToPush, subscriptMarkConfig, superscriptMarkConfig, switchLocale, syncStarterKitPage, syncToolbarTabStops, t, tabFromQuery, tabKeyTarget, tabQueryValue, tabToReveal, tableColumnAlignmentClass, tableColumnCells, tableLoadingStore, tableQueryKey, tableTotalsFailed, tableTotalsStore, tableViewError, tableViewFollowUp, tableViewUrl, takeRequestedStarterKitCopilot, takeRequestedStarterKitLanguages, templateForIndex, tenantNameText, textAlignExtensionConfig, textColorMarkConfig, timeInputStep, toAsciiDigits, toEditorDocument, toStarterKitBreadcrumbs, toStarterKitNavGroups, toStarterKitUserMenuItems, toTsv, toggleButtonsNext, toggleButtonsSelected, toggleCollapsedGroup, toggleModalTableKey, togglePushNotifications, toggleVisibleColumn, toolCommand, toolbarButtonLabel, toolbarCommands, toolbarItems, toolbarPanel, trackAnalyticsEvent, transformImage, translatableLocaleField, translatableLocalesWithErrors, translationCellValue, translator, treeParentKeys, treeSubtreeHeight, triggerButtonView, undoShortcuts, uniqueId, unsubscribeFromPush, updateGroup, updateRule, updateTableCell, uploadPageMethodFiles, uploadTemporaryFile, uploadWithProgress, uploadedFileLinks, urlBase64ToUint8Array, usesDefaultImageStack, usesStarterKitHostLayout, virtualizeOptions, visibleColumns, visiblePresenceMembers, visibleTreeRows, visitTable, visitTableView, wallClockNow, watchPageProps, whenIdle, whenVisible, widgetPollTarget, widgetRegistryKeys, withAlpha, withColorAlpha, withDeferredTabBadges, withEcho, withItemActionState, withTableTotals, withoutDefaultActionQuery, withoutRequired, wizardProgressStore, wizardRequestedStepIndex, wizardStepFieldPaths, wizardStepQueryKey, wizardStepToReveal, writePersisted };
|
package/dist/index.js
CHANGED
|
@@ -13,7 +13,7 @@ import { CONFLICT_ERROR_KEY, ConflictMonitor, RECORD_VERSION_INPUT, conflictMess
|
|
|
13
13
|
import { FIELD_ACTION_PREFIX, actionFormParams, fieldActionComponent, fieldActionContext, isFieldActionContext } from "./field-actions.js";
|
|
14
14
|
import { pageFlash } from "./flash.js";
|
|
15
15
|
import { deletePath, getPath, hasPath, joinPath, parentPath, replacePlaceholder, setPath, splitPath, templateForIndex } from "./utils/path.js";
|
|
16
|
-
import { builderBlockCounts, builderItemLabel, builderItemSchema, builderItems, builderPickerMove, canAddBuilderBlock, concurrencyLimiter, cssAspectRatio, fileUploadAccept, fileUploadPaths, filterBuilderBlocks, groupBuilderBlocks, indentCode, insertBuilderItem, insertUploadedFile, modalTablePaging, modalTableQuery, modalTableSelected, newlineWithIndent, pickerFilterFormOptions, sliderBehavior, sliderBlocksTap, sliderBounds, sliderDirection, sliderFillSections, sliderFillStyle, sliderFromPrimitive, sliderHasTooltips, sliderNextValues, sliderPercent, sliderPips, sliderPrimitive, sliderShift, sliderShowsTooltip, sliderSnap, sliderState, sliderToPrimitive, sliderValueAt, sliderValues, startSliderRangeDrag, toggleButtonsNext, toggleButtonsSelected, toggleModalTableKey, uploadedFileLinks } from "./advanced-fields.js";
|
|
16
|
+
import { builderBlockCounts, builderItemLabel, builderItemSchema, builderItems, builderPickerMove, canAddBuilderBlock, concurrencyLimiter, cssAspectRatio, fileUploadAccept, fileUploadEntries, fileUploadPaths, filterBuilderBlocks, groupBuilderBlocks, indentCode, insertBuilderItem, insertUploadedFile, modalTablePaging, modalTableQuery, modalTableSelected, newlineWithIndent, pickerFilterFormOptions, sliderBehavior, sliderBlocksTap, sliderBounds, sliderDirection, sliderFillSections, sliderFillStyle, sliderFromPrimitive, sliderHasTooltips, sliderNextValues, sliderPercent, sliderPips, sliderPrimitive, sliderShift, sliderShowsTooltip, sliderSnap, sliderState, sliderToPrimitive, sliderValueAt, sliderValues, startSliderRangeDrag, toggleButtonsNext, toggleButtonsSelected, toggleModalTableKey, uploadedFileLinks } from "./advanced-fields.js";
|
|
17
17
|
import { effectiveErrorNotifications, errorNotificationOutcome, installErrorNotifications, reportRequestError, resolveErrorNotification, resolveRequestErrorNotification, setRequestErrorReporter } from "./error-notifications.js";
|
|
18
18
|
import { isPartialFormPayload } from "./schema/form.js";
|
|
19
19
|
import { applySchemaPatches, mergeRefreshResponse, mergeStatePatch } from "./partial.js";
|
|
@@ -67,7 +67,7 @@ import { imageGeometry, parseAspectRatio, transformImage } from "./utils/image.j
|
|
|
67
67
|
import { canEditImage, canEditImageName, editableImageName, fetchEditableImage, filesFromClipboard, imageEditorOptionsKey, loadEditorImage } from "./image-files.js";
|
|
68
68
|
import { IMAGE_EDITOR_ZOOM_STEP, ImageEditor } from "./image-editor.js";
|
|
69
69
|
import { isImplicitSubmit } from "./implicit-submit.js";
|
|
70
|
-
import { ITEM_MOVE_ATTRIBUTE, ItemMoveTracker, addActionJustify, focusMovedItem, itemActionContext, reorderedItemKeys, resolveItemAction, runsItemActionOnServer, withItemActionState } from "./item-actions.js";
|
|
70
|
+
import { ITEM_MOVE_ATTRIBUTE, ItemMoveTracker, addActionJustify, focusMovedItem, itemActionContext, itemExtraActions, reorderedItemKeys, resolveItemAction, runsItemActionOnServer, withItemActionState } from "./item-actions.js";
|
|
71
71
|
import { KANBAN_NO_LANE, KANBAN_REGISTRY_KEY, KanbanController, attachKanbanPointer, createKanbanFiltersStore, kanbanActiveFilters, kanbanCardPosition, kanbanCardsIn, kanbanInitials, kanbanMovePayload, kanbanRefusal, kanbanWipState, locateKanbanCard, moveKanbanCard } from "./kanban.js";
|
|
72
72
|
import { LiveUpdates, shownRecordKeys } from "./live.js";
|
|
73
73
|
import { BOTTOM_NAVIGATION_SLOTS, bottomNavigationItems, hasMobilePreset, isNavigationItemActive, mobileCardLayout, mobileTable, navigationItemUrl } from "./mobile.js";
|
|
@@ -111,4 +111,4 @@ import { createLatestRequest } from "./utils/latest.js";
|
|
|
111
111
|
import { applyMask } from "./utils/mask.js";
|
|
112
112
|
import { DEFAULT_VIRTUALIZE_THRESHOLD, VIRTUAL_ESTIMATES, VirtualList, firstErroredItemIndex, hasNewErrors, virtualizeOptions } from "./virtual.js";
|
|
113
113
|
import { WIZARD_STEP_QUERY_KEY, completedStepIcon, initialWizardStep, persistWizardStep, wizardRequestedStepIndex, wizardStepFieldPaths, wizardStepQueryKey } from "./wizard.js";
|
|
114
|
-
export { ACTION_PATH_SEPARATOR, ACTIVE_TAB_QUERY_KEY, AI_COPILOT_REGISTRY_KEY, AI_STREAM_REGISTRY_KEY, ALL_SELECTED_RECORDS_ARGUMENT, ActionRunner, AiStreamController, BOTTOM_NAVIGATION_SLOTS, BROADCAST_NOTIFICATION, BUILT_IN_COLORS, BUILT_IN_WIDGET_TYPES, CALENDAR_ARGUMENTS_KEY, CALENDAR_EVENT_DROP_ACTION, CALENDAR_EVENT_RESIZE_ACTION, CALENDAR_FETCH_EVENTS_ACTION, CALENDAR_REGISTRY_KEY, CLOSE_NOTIFICATION_EVENT, CMS_BLOCK_PREFIX, CMS_BUILT_IN_BLOCKS, CMS_FOOTER_KEY, CMS_FORM_KEY, CMS_HEADER_KEY, CMS_PAGE_COMPONENT, CMS_PREVIEW_DEVICES, CMS_PREVIEW_STORAGE_KEY, COMMANDS_COMPONENT, CONFLICT_ERROR_KEY, CONSTRAINT_PICKER_WIDTH_CLASSES, CONTAINER_BREAKPOINTS, CREATE_ANOTHER_ARGUMENT, CmsAutosave, ComponentDiscovery, ComponentRegistry, ConflictMonitor, CopilotController, DATABASE_NOTIFICATIONS_EVENT, DATABASE_NOTIFICATIONS_SENT, DEFAULT_ACTION_QUERY_KEYS, DEFAULT_LINK_PROTOCOLS, DEFAULT_VIRTUALIZE_THRESHOLD, DISCOVERY_FOLDERS, DashboardEditor, DebugRecorder, EditorAttachments, EditorSuggestions, FIELD_ACTION_PREFIX, FIELD_TYPES, FILAMENT_CLOSE_NOTIFICATION_EVENT, FILE_MANAGER_DRAG_TYPE, FILE_MANAGER_PICKER_REGISTRY_KEY, FILE_MANAGER_REGISTRY_KEY, FILTERS_FORM_WIDTH_CLASSES, FILTERS_MODAL_WIDTH_CLASSES, FILTERS_SIDEBAR_WIDTH_CLASSES, FileManagerController, FilterFormSync, FlashNotificationTracker, FormStore, GLOBAL_SEARCH_DEBOUNCE, GRID_MAX_COLUMNS, GRID_MIN_COLUMNS, HELPDESK_ACTIVITY_EVENT, HELPDESK_SHORTCUTS, HELPDESK_TYPING_MS, HelpdeskChatClient, HelpdeskInboxController, HttpError, IMAGE_EDITOR_ZOOM_STEP, ITEM_MOVE_ATTRIBUTE, IconPickerSearch, ImageEditor, ItemMoveTracker, KANBAN_NO_LANE, KANBAN_REGISTRY_KEY, KanbanController, LABEL_SLOTS, LAZY_PROP, LazyComponentCache, LiveUpdates, LocaleFormatter, MAX_DEBUG_REQUESTS, MERGE_TAG_TRIGGER, NOT_PROSE_CLASS, NotificationCenter, OPEN_DATABASE_NOTIFICATIONS_EVENT, OneTimeCodeSubmitter, PAGE_EXPIRED_STATUS, PALETTE_GROUP_ORDER, PANEL_TOAST_OFFSET, PASSWORD_CONFIRMATION_INPUT, POLL_HEADER, POLL_PROP, PREFETCH_CACHE_FOR, PRESENCE_STATE_WHISPER, PageMethodError, PollScheduler, PresenceRoom, RECORD_CHANGED_EVENT, RECORD_VERSION_INPUT, RELATION_MANAGERS_CONTENT_TAB, RELATION_QUERY_KEY, REMAINING_TEXT_SIZE_CLASSES, RichEditorRemote, SCHEMA_CONTRACT_VERSION, SELECTED_RECORDS_ARGUMENT, SEMANTIC_COLORS, SHORTCUT_IDS, SPREADSHEET_CLASSES, SPREADSHEET_ISSUE_MESSAGES, STACKED_TABLE_CLASSES, STARTER_KIT_COPILOT_SHORTCUT, STARTER_KIT_TOASTER_ID, ShortcutRecorder, ShortcutRegistry, SpreadsheetGrid, StandaloneComponentState, StreamAnnouncer, TABLE_TOOLBAR_BUTTONS, TENANT_MENU_COMPONENT, TOOLBAR_COMMANDS, TRANSLATION_MANAGER_REGISTRY_KEY, TREE_REGISTRY_KEY, TableSelection, TranslationManagerController, Translator, TreeController, USER_MENU_COMPONENT, UndoShortcuts, VIRTUAL_ESTIMATES, VirtualList, WIZARD_STEP_QUERY_KEY, acquireChannel, actionEndpoint, actionFormComponent, actionFormParams, actionPath, actionsAccessSelectedRecords, actionsAlignmentClass, activeTableView, addActionJustify, addGroup, addRule, allToolbarButtons, analyticsAllowed, analyticsChangeColor, analyticsInitialTab, announceDatabaseNotificationsSent, appendRepeaterItem, applyAppearance, applyBodyAttributes, applyDocumentLocale, applyEditorActionResult, applyFormRefresh, applyMask, applyPanelColors, applyPanelFavicon, applyPanelTheme, applyPwaUpdate, applySchemaPatches, ariaSort, asHelpdeskActivity, attachKanbanPointer, attachToolbarKeyboard, beginTableLoading, bindUndo, bindingFromEvent, bindsKeyBindings, bottomNavigationItems, buildChartConfig, buildQuery, buildTableUrl, builderBlockCounts, builderItemLabel, builderItemSchema, builderItems, builderPickerMove, byteLength, cachedTableTotals, calendarActionContext, calendarIdentity, calendarOptions, calendarWallTime, callCmsAutosave, callPageMethod, canAddBuilderBlock, canEditImage, canEditImageName, canInstallPwa, canNestGroup, canSelectAllRecords, cancelChunkedUpload, chartColorVariable, chartFiltersUrl, checkSchemaContract, clearRichEditorExtensions, clientErrorNotification, cloneIndexedState, cloneRepeaterItem, cloneTreeNodes, closeNotification, cmsAspectClass, cmsBlockKey, cmsBlocks, cmsColumnsClass, cmsGridClass, cmsHeadTags, cmsLinkRel, cmsPayload, cmsPreviewFitsBeside, cmsPreviewOpensByDefault, cmsPreviewOpensOnLoad, cmsPreviewPaneWidth, cmsWidthClass, coerceSpreadsheetValue, collapsesLanguageSwitcher, collectFieldStatePaths, collectFields, colorAlpha, colorToHex, columnDraftChanged, columnGroupHeaderRow, columnManagerPosition, columnOrderChanged, columnOrderClasses, columnRegistryKey, columnSpanClasses, columnStartClasses, columnVisibilityClasses, commandLabel, commandPaletteItems, commandShortcutId, completedStepIcon, componentHasErrors, concurrencyLimiter, configureCharts, configureRealtime, confirmModalClose, conflictMessage, constraintPickerClasses, constraintPickerSections, containerColumnSpanClasses, containerGridColumnsClasses, copilotBlocks, countCodeLines, createAnalyticsTracker, createAnotherState, createCmsTranslator, createKanbanFiltersStore, createLatestRequest, createRule, createSchemaComponentContext, createStore, csrfHeader, cssAspectRatio, currencyDecimals, currentPageQuery, currentRecordVersion, currentSocketId, currentStarterKitPanel, currentStarterKitPanelId, customBlockNodeConfig, customColorClasses, customPageProps, dashboardMoveForKey, debounce, debugRecorder, defaultActionContext, defaultActionKey, defaultVisibleColumns, deferredComponentReference, deferredHasErrors, deletePath, deprecate, deprecationMessage, derived, detailsNodeConfigs, discoveryKey, distributePageFormErrors, documentNonce, dropTreeNode, editableImageName, effectiveErrorNotifications, endTableLoading, errorNotificationOutcome, extremePageLinks, fetchEditableImage, fetchStandaloneComponents, fieldActionComponent, fieldActionContext, fieldAria, fieldDomId, fieldError, fieldIds, fieldMemory, fileAttachmentError, fileManagerAcceptAttribute, fileManagerAccepts, fileManagerErrorMessage, fileManagerExpiry, fileManagerSize, fileUploadAccept, fileUploadPaths, filesFromClipboard, filterBuilderBlocks, filterCommandPalette, filterFormComponents, filterQueryBuilderOptions, filterSelectColumnOptions, filterSuggestionItems, filterTenants, filtersAreDeferred, filtersCollapsible, filtersFormWidthClass, filtersPlacement, findAutofocusField, findConstraint, findFieldByPath, findGridContext, findOperator, findPageFormBlock, findStandalonePropName, findSuggestionMatch, firstErroredItemIndex, firstErrors, fixedContainingBlockOffset, flattenActionGroup, flattenNavigationItems, flattenTreeStructure, flexItemClasses, flexLayoutClasses, floatingToolbarStyle, focusAutofocusField, focusMovedItem, focusTableSearch, focusToolbar, forgetFieldMemory, formActionsVisible, formIdPrefix, formIdentity, formRefreshFor, formatBytes, formatColor, formatKeyBinding, formatPhpDate, formatShortcut, fuzzyScore, getChartFormatters, getChartPlugins, getConflictForm, getEcho, getPageForm, getPath, getScriptData, getStoredAppearance, globalSearchDebounce, globalSearchStatus, globalSearchSuffix, gridColumnsClasses, gridContent, gridNodeConfigs, groupAt, groupBuilderBlocks, groupCustomBlocks, groupMenuItems, groupTableRows, groupTableViews, groupTriggerButton, guardModalUnload, hasActiveNavigationItem, hasCommandPalette, hasContainerBreakpoints, hasDevTools, hasMobilePreset, hasNewErrors, hasPath, hasRelationManagerTabs, hasRichEditorExtension, hasSlots, hasThemeSwitcher, hasTopbar, headingTag, helpdeskChatString, helpdeskFileSize, helpdeskSlaTone, highlightCode, highlightMarkConfig, htmlLabelToText, htmlToMarkdown, iconAlias, iconAliasOverride, iconButtonSize, iconGridMove, iconPickerPreview, iconSource, imageEditorOptionsKey, imageGeometry, indentCode, inertiaPost, inertiaReload, inertiaVisit, initialCollapsedGroups, initialTranslatableLocale, initialWizardStep, initializeAppearance, initials, insertBuilderItem, insertUploadedFile, inspectableProps, installErrorNotifications, installPrefetchInvalidation, installSpaUrlExceptions, installStarterKitRuntime, interpolate, invalidatePrefetchedPages, invalidateTableTotals, isActionGroup, isActionLoading, isActionProcessing, isAlfakitPage, isAllowedLinkUrl, isAppendingPagination, isCustomBlockResult, isCustomColorName, isCustomSvgIcon, isDeferredPlaceholder, isEditableTarget, isField, isFieldActionContext, isGroupedColumn, isHighlightedLanguage, isIconAlias, isImplicitSubmit, isIosSafari, isLazyPlaceholder, isLeavingVisit, isMacLike, isModalHiddenByChild, isModalSubmitVisible, isMutatingRequest, isNavigationItemActive, isOptionGroup, isPageFullySelected, isPartialFormPayload, isRealtimeEnabled, isRightToLeft, isSafeColor, isStandalone, isStandaloneComponent, isStarterKitPanel, isTableLoading, isToolbarGroup, isToolbarShortcut, isUndoFinished, isUndoShortcut, isValidShortcut, itemActionContext, itemActionIcon, joinPath, jsonEntries, jsonKind, jsonScalar, jsonSize, kanbanActiveFilters, kanbanCardPosition, kanbanCardsIn, kanbanInitials, kanbanMovePayload, kanbanRefusal, kanbanWipState, keepMoveButtonFocus, latestServerTiming, layoutColumnNames, layoutNodeGrows, layoutVisibilityClasses, lazyComponentCache, lazyComponents, leadExtensionConfig, limitedListItems, linkExtensionOptions, listTabIds, listTabUrl, listenForPageEvents, listenForRecordChanges, loadDeferredBadge, loadDeferredComponent, loadEditorImage, loadRichEditorExtensions, loadScript, loadStarterKitPanel, loadStyle, loadTableTotals, loadedStarterKitPanel, locateKanbanCard, logicalArrowKey, markFailedLazyWidgets, markRecordSubmitted, matchesKeyBinding, matchesShortcutStep, matchesUrlPattern, maxColumns, mentionNodeConfig, mentionText, menuActionContext, mergeAttributes, mergeChartOptions, mergeDeferredComponent, mergePolledComponents, mergeRefreshResponse, mergeStatePatch, mergeTagNodeConfig, mergeTagText, mobileCardLayout, mobileTable, modalFooterAlignment, modalTablePaging, modalTableQuery, modalTableSelected, moveColumn, moveColumnInManager, moveColumnTo, moveIndexedState, moveKanbanCard, moveListItem, moveRepeaterItem, moveTreeNode, navigationItemText, navigationItemUrl, nestedActionContext, newlineWithIndent, nextPageQuery, nextToolbarItem, normalizeRichEditorExtensions, normalizeRuleTree, notificationTintStyles, observeThemeChanges, onCloseNotification, onDatabaseNotificationsSent, onOpenDatabaseNotifications, onPageFormsChanged, onSaveConflict, oneTimeCodeDigits, openDatabaseNotifications, openDefaultAction, openRequestedStarterKitSearch, optimistic, optionText, orderColumnsBy, overlayPlacementDirection, pageFlash, pageFormName, pageSelectionState, paginationTotal, paletteGroupKey, panelAppearance, panelUploadOptions, parentPath, parseAspectRatio, parseDropdownPlacement, parseEventStream, parseGridColumns, parseInterval, parseKeyBinding, parseServerTiming, parseTsv, performUndo, persistWizardStep, pickerFilterFormOptions, pollComponent, pollPageProps, pollScheduler, postFormWithProgress, preferCurrentStarterKitPanel, prefetchTablePage, presenceInitials, prettyJson, previousPageQuery, primaryColumnName, promptPwaInstall, propsPollScheduler, pwaStore, queryBuilderInputType, queryBuilderOptions, readEventStream, readPersisted, realtimeHeaders, realtimeSettings, recordActionsAtStart, registerChartFormatters, registerChartPlugins, registerConflictForm, registerFormSubmitter, registerKeyBindings, registerPageForm, registerRichEditorExtensions, registerShortcut, registerStandaloneProp, registerStarterKitCopilotShortcut, registerStarterKitSearchShortcut, registerTablePersistence, relationGroupBadgeTarget, relationManagerBadgeTarget, relationManagerTabs, relationTabFromQuery, relationTabSlug, reloadExpiredPage, reloadOnExpiredPage, reloadPageProps, reloadPolledComponents, remainingTextSizeClass, rememberedCmsPreview, removeAllFilterIndicators, removeFilterIndicator, removeIndexedState, removeRepeaterItem, removeRule, reorderOffset, reorderTable, reorderedItemKeys, reorderingListsAllRecords, replaceComponentByKey, replacePlaceholder, reportRequestError, reportSaveConflict, reportSchemaContractMismatch, reportWizardProgress, reportedDeprecations, requestJson, requestStarterKitCopilot, requestStarterKitLanguages, requestStarterKitSearch, requestTableView, requiresFullPageLoad, reserveCmsPreviewSpace, resetChartRegistrations, resetDeprecations, resetPwa, resetRealtime, resetSchemaContractReports, resetStarterKitPanels, resetTableTotals, resizableImageAttributes, resizableImageOptions, resolveActionSize, resolveAppearance, resolveChartCallbacks, resolveContainerStatePath, resolveCssColor, resolveDeferredBadge, resolveDeferredGroupBadge, resolveEcho, resolveErrorNotification, resolveFirst, resolveFloatingToolbar, resolveItemAction, resolveLazyComponents, resolveNavigation, resolvePanelNavigation, resolvePartialProps, resolveRequestErrorNotification, resolveStatePath, resolveStickyOffset, resolveToastPosition, revealAutofocusField, router, runEditorCommands, runPageMethod, runsItemActionOnServer, saveColumnOrder, saveShortcutOverrides, saveSpreadsheetChanges, scheduleAutofocus, schemaComponentNames, schemaContractMajor, schemaContractMismatchMessage, schemaGapClass, scorePaletteItem, searchJson, searchTableColumnOptions, selectAllState, selectColumnEmptyMessage, selectPlural, selectedRecordsArguments, setAppearance, setCombinator, setIconAliases, setPath, setRecordVersion, setRequestErrorReporter, setTextColor, shortcutOverlayGroups, shortcutSteps, shortcuts, shortcutsClash, shouldChunkUpload, shouldConfirmModalClose, shouldResyncForm, shownRecordKeys, showsLanguageSwitcher, showsTableToolbar, sidebarDefaultOpen, sidebarWidthStyle, skeletonRowCount, slideOverSide, sliderBehavior, sliderBlocksTap, sliderBounds, sliderDirection, sliderFillSections, sliderFillStyle, sliderFromPrimitive, sliderHasTooltips, sliderNextValues, sliderPercent, sliderPips, sliderPrimitive, sliderShift, sliderShowsTooltip, sliderSnap, sliderState, sliderToPrimitive, sliderValueAt, sliderValues, slotAlignmentClass, slotDataMatches, slotItems, smallMarkConfig, splitClasses, splitPath, spreadsheetAnnouncement, spreadsheetAria, spreadsheetCellClass, spreadsheetCellId, spreadsheetCellKey, spreadsheetCellKind, spreadsheetColumns, spreadsheetRows, spreadsheetSelectionSize, stackClasses, stackedCellClasses, stackedImageStyle, standaloneDirection, standalonePageSchema, standalonePanelSchema, standaloneWidgetCount, startAnalytics, startDownload, startPwa, startSliderRangeDrag, startTableReordering, startUndoCountdown, starterKitBreadcrumbsFromProps, starterKitCopilot, starterKitDashboardWidgets, starterKitNavigation, starterKitNavigations, starterKitPanelLocale, starterKitWidgets, starterKitWidgetsPage, starterKitWidgetsPanel, stickyCollisionPadding, stopTableReordering, submitFormById, subscribeToNotifications, subscribeToPush, subscriptMarkConfig, superscriptMarkConfig, switchLocale, syncStarterKitPage, syncToolbarTabStops, t, tabFromQuery, tabKeyTarget, tabQueryValue, tabToReveal, tableColumnAlignmentClass, tableColumnCells, tableLoadingStore, tableQueryKey, tableTotalsFailed, tableTotalsStore, tableViewError, tableViewFollowUp, tableViewUrl, takeRequestedStarterKitCopilot, takeRequestedStarterKitLanguages, templateForIndex, tenantNameText, textAlignExtensionConfig, textColorMarkConfig, timeInputStep, toAsciiDigits, toEditorDocument, toStarterKitBreadcrumbs, toStarterKitNavGroups, toStarterKitUserMenuItems, toTsv, toggleButtonsNext, toggleButtonsSelected, toggleCollapsedGroup, toggleModalTableKey, togglePushNotifications, toggleVisibleColumn, toolCommand, toolbarButtonLabel, toolbarCommands, toolbarItems, toolbarPanel, trackAnalyticsEvent, transformImage, translatableLocaleField, translatableLocalesWithErrors, translationCellValue, translator, treeParentKeys, treeSubtreeHeight, triggerButtonView, undoShortcuts, uniqueId, unsubscribeFromPush, updateGroup, updateRule, updateTableCell, uploadPageMethodFiles, uploadTemporaryFile, uploadWithProgress, uploadedFileLinks, urlBase64ToUint8Array, usesDefaultImageStack, usesStarterKitHostLayout, virtualizeOptions, visibleColumns, visiblePresenceMembers, visibleTreeRows, visitTable, visitTableView, wallClockNow, watchPageProps, whenIdle, whenVisible, widgetPollTarget, widgetRegistryKeys, withAlpha, withColorAlpha, withDeferredTabBadges, withEcho, withItemActionState, withTableTotals, withoutDefaultActionQuery, withoutRequired, wizardProgressStore, wizardRequestedStepIndex, wizardStepFieldPaths, wizardStepQueryKey, wizardStepToReveal, writePersisted };
|
|
114
|
+
export { ACTION_PATH_SEPARATOR, ACTIVE_TAB_QUERY_KEY, AI_COPILOT_REGISTRY_KEY, AI_STREAM_REGISTRY_KEY, ALL_SELECTED_RECORDS_ARGUMENT, ActionRunner, AiStreamController, BOTTOM_NAVIGATION_SLOTS, BROADCAST_NOTIFICATION, BUILT_IN_COLORS, BUILT_IN_WIDGET_TYPES, CALENDAR_ARGUMENTS_KEY, CALENDAR_EVENT_DROP_ACTION, CALENDAR_EVENT_RESIZE_ACTION, CALENDAR_FETCH_EVENTS_ACTION, CALENDAR_REGISTRY_KEY, CLOSE_NOTIFICATION_EVENT, CMS_BLOCK_PREFIX, CMS_BUILT_IN_BLOCKS, CMS_FOOTER_KEY, CMS_FORM_KEY, CMS_HEADER_KEY, CMS_PAGE_COMPONENT, CMS_PREVIEW_DEVICES, CMS_PREVIEW_STORAGE_KEY, COMMANDS_COMPONENT, CONFLICT_ERROR_KEY, CONSTRAINT_PICKER_WIDTH_CLASSES, CONTAINER_BREAKPOINTS, CREATE_ANOTHER_ARGUMENT, CmsAutosave, ComponentDiscovery, ComponentRegistry, ConflictMonitor, CopilotController, DATABASE_NOTIFICATIONS_EVENT, DATABASE_NOTIFICATIONS_SENT, DEFAULT_ACTION_QUERY_KEYS, DEFAULT_LINK_PROTOCOLS, DEFAULT_VIRTUALIZE_THRESHOLD, DISCOVERY_FOLDERS, DashboardEditor, DebugRecorder, EditorAttachments, EditorSuggestions, FIELD_ACTION_PREFIX, FIELD_TYPES, FILAMENT_CLOSE_NOTIFICATION_EVENT, FILE_MANAGER_DRAG_TYPE, FILE_MANAGER_PICKER_REGISTRY_KEY, FILE_MANAGER_REGISTRY_KEY, FILTERS_FORM_WIDTH_CLASSES, FILTERS_MODAL_WIDTH_CLASSES, FILTERS_SIDEBAR_WIDTH_CLASSES, FileManagerController, FilterFormSync, FlashNotificationTracker, FormStore, GLOBAL_SEARCH_DEBOUNCE, GRID_MAX_COLUMNS, GRID_MIN_COLUMNS, HELPDESK_ACTIVITY_EVENT, HELPDESK_SHORTCUTS, HELPDESK_TYPING_MS, HelpdeskChatClient, HelpdeskInboxController, HttpError, IMAGE_EDITOR_ZOOM_STEP, ITEM_MOVE_ATTRIBUTE, IconPickerSearch, ImageEditor, ItemMoveTracker, KANBAN_NO_LANE, KANBAN_REGISTRY_KEY, KanbanController, LABEL_SLOTS, LAZY_PROP, LazyComponentCache, LiveUpdates, LocaleFormatter, MAX_DEBUG_REQUESTS, MERGE_TAG_TRIGGER, NOT_PROSE_CLASS, NotificationCenter, OPEN_DATABASE_NOTIFICATIONS_EVENT, OneTimeCodeSubmitter, PAGE_EXPIRED_STATUS, PALETTE_GROUP_ORDER, PANEL_TOAST_OFFSET, PASSWORD_CONFIRMATION_INPUT, POLL_HEADER, POLL_PROP, PREFETCH_CACHE_FOR, PRESENCE_STATE_WHISPER, PageMethodError, PollScheduler, PresenceRoom, RECORD_CHANGED_EVENT, RECORD_VERSION_INPUT, RELATION_MANAGERS_CONTENT_TAB, RELATION_QUERY_KEY, REMAINING_TEXT_SIZE_CLASSES, RichEditorRemote, SCHEMA_CONTRACT_VERSION, SELECTED_RECORDS_ARGUMENT, SEMANTIC_COLORS, SHORTCUT_IDS, SPREADSHEET_CLASSES, SPREADSHEET_ISSUE_MESSAGES, STACKED_TABLE_CLASSES, STARTER_KIT_COPILOT_SHORTCUT, STARTER_KIT_TOASTER_ID, ShortcutRecorder, ShortcutRegistry, SpreadsheetGrid, StandaloneComponentState, StreamAnnouncer, TABLE_TOOLBAR_BUTTONS, TENANT_MENU_COMPONENT, TOOLBAR_COMMANDS, TRANSLATION_MANAGER_REGISTRY_KEY, TREE_REGISTRY_KEY, TableSelection, TranslationManagerController, Translator, TreeController, USER_MENU_COMPONENT, UndoShortcuts, VIRTUAL_ESTIMATES, VirtualList, WIZARD_STEP_QUERY_KEY, acquireChannel, actionEndpoint, actionFormComponent, actionFormParams, actionPath, actionsAccessSelectedRecords, actionsAlignmentClass, activeTableView, addActionJustify, addGroup, addRule, allToolbarButtons, analyticsAllowed, analyticsChangeColor, analyticsInitialTab, announceDatabaseNotificationsSent, appendRepeaterItem, applyAppearance, applyBodyAttributes, applyDocumentLocale, applyEditorActionResult, applyFormRefresh, applyMask, applyPanelColors, applyPanelFavicon, applyPanelTheme, applyPwaUpdate, applySchemaPatches, ariaSort, asHelpdeskActivity, attachKanbanPointer, attachToolbarKeyboard, beginTableLoading, bindUndo, bindingFromEvent, bindsKeyBindings, bottomNavigationItems, buildChartConfig, buildQuery, buildTableUrl, builderBlockCounts, builderItemLabel, builderItemSchema, builderItems, builderPickerMove, byteLength, cachedTableTotals, calendarActionContext, calendarIdentity, calendarOptions, calendarWallTime, callCmsAutosave, callPageMethod, canAddBuilderBlock, canEditImage, canEditImageName, canInstallPwa, canNestGroup, canSelectAllRecords, cancelChunkedUpload, chartColorVariable, chartFiltersUrl, checkSchemaContract, clearRichEditorExtensions, clientErrorNotification, cloneIndexedState, cloneRepeaterItem, cloneTreeNodes, closeNotification, cmsAspectClass, cmsBlockKey, cmsBlocks, cmsColumnsClass, cmsGridClass, cmsHeadTags, cmsLinkRel, cmsPayload, cmsPreviewFitsBeside, cmsPreviewOpensByDefault, cmsPreviewOpensOnLoad, cmsPreviewPaneWidth, cmsWidthClass, coerceSpreadsheetValue, collapsesLanguageSwitcher, collectFieldStatePaths, collectFields, colorAlpha, colorToHex, columnDraftChanged, columnGroupHeaderRow, columnManagerPosition, columnOrderChanged, columnOrderClasses, columnRegistryKey, columnSpanClasses, columnStartClasses, columnVisibilityClasses, commandLabel, commandPaletteItems, commandShortcutId, completedStepIcon, componentHasErrors, concurrencyLimiter, configureCharts, configureRealtime, confirmModalClose, conflictMessage, constraintPickerClasses, constraintPickerSections, containerColumnSpanClasses, containerGridColumnsClasses, copilotBlocks, countCodeLines, createAnalyticsTracker, createAnotherState, createCmsTranslator, createKanbanFiltersStore, createLatestRequest, createRule, createSchemaComponentContext, createStore, csrfHeader, cssAspectRatio, currencyDecimals, currentPageQuery, currentRecordVersion, currentSocketId, currentStarterKitPanel, currentStarterKitPanelId, customBlockNodeConfig, customColorClasses, customPageProps, dashboardMoveForKey, debounce, debugRecorder, defaultActionContext, defaultActionKey, defaultVisibleColumns, deferredComponentReference, deferredHasErrors, deletePath, deprecate, deprecationMessage, derived, detailsNodeConfigs, discoveryKey, distributePageFormErrors, documentNonce, dropTreeNode, editableImageName, effectiveErrorNotifications, endTableLoading, errorNotificationOutcome, extremePageLinks, fetchEditableImage, fetchStandaloneComponents, fieldActionComponent, fieldActionContext, fieldAria, fieldDomId, fieldError, fieldIds, fieldMemory, fileAttachmentError, fileManagerAcceptAttribute, fileManagerAccepts, fileManagerErrorMessage, fileManagerExpiry, fileManagerSize, fileUploadAccept, fileUploadEntries, fileUploadPaths, filesFromClipboard, filterBuilderBlocks, filterCommandPalette, filterFormComponents, filterQueryBuilderOptions, filterSelectColumnOptions, filterSuggestionItems, filterTenants, filtersAreDeferred, filtersCollapsible, filtersFormWidthClass, filtersPlacement, findAutofocusField, findConstraint, findFieldByPath, findGridContext, findOperator, findPageFormBlock, findStandalonePropName, findSuggestionMatch, firstErroredItemIndex, firstErrors, fixedContainingBlockOffset, flattenActionGroup, flattenNavigationItems, flattenTreeStructure, flexItemClasses, flexLayoutClasses, floatingToolbarStyle, focusAutofocusField, focusMovedItem, focusTableSearch, focusToolbar, forgetFieldMemory, formActionsVisible, formIdPrefix, formIdentity, formRefreshFor, formatBytes, formatColor, formatKeyBinding, formatPhpDate, formatShortcut, fuzzyScore, getChartFormatters, getChartPlugins, getConflictForm, getEcho, getPageForm, getPath, getScriptData, getStoredAppearance, globalSearchDebounce, globalSearchStatus, globalSearchSuffix, gridColumnsClasses, gridContent, gridNodeConfigs, groupAt, groupBuilderBlocks, groupCustomBlocks, groupMenuItems, groupTableRows, groupTableViews, groupTriggerButton, guardModalUnload, hasActiveNavigationItem, hasCommandPalette, hasContainerBreakpoints, hasDevTools, hasMobilePreset, hasNewErrors, hasPath, hasRelationManagerTabs, hasRichEditorExtension, hasSlots, hasThemeSwitcher, hasTopbar, headingTag, helpdeskChatString, helpdeskFileSize, helpdeskSlaTone, highlightCode, highlightMarkConfig, htmlLabelToText, htmlToMarkdown, iconAlias, iconAliasOverride, iconButtonSize, iconGridMove, iconPickerPreview, iconSource, imageEditorOptionsKey, imageGeometry, indentCode, inertiaPost, inertiaReload, inertiaVisit, initialCollapsedGroups, initialTranslatableLocale, initialWizardStep, initializeAppearance, initials, insertBuilderItem, insertUploadedFile, inspectableProps, installErrorNotifications, installPrefetchInvalidation, installSpaUrlExceptions, installStarterKitRuntime, interpolate, invalidatePrefetchedPages, invalidateTableTotals, isActionGroup, isActionLoading, isActionProcessing, isAlfakitPage, isAllowedLinkUrl, isAppendingPagination, isCustomBlockResult, isCustomColorName, isCustomSvgIcon, isDeferredPlaceholder, isEditableTarget, isField, isFieldActionContext, isGroupedColumn, isHighlightedLanguage, isIconAlias, isImplicitSubmit, isIosSafari, isLazyPlaceholder, isLeavingVisit, isMacLike, isModalHiddenByChild, isModalSubmitVisible, isMutatingRequest, isNavigationItemActive, isOptionGroup, isPageFullySelected, isPartialFormPayload, isRealtimeEnabled, isRightToLeft, isSafeColor, isStandalone, isStandaloneComponent, isStarterKitPanel, isTableLoading, isToolbarGroup, isToolbarShortcut, isUndoFinished, isUndoShortcut, isValidShortcut, itemActionContext, itemActionIcon, itemExtraActions, joinPath, jsonEntries, jsonKind, jsonScalar, jsonSize, kanbanActiveFilters, kanbanCardPosition, kanbanCardsIn, kanbanInitials, kanbanMovePayload, kanbanRefusal, kanbanWipState, keepMoveButtonFocus, latestServerTiming, layoutColumnNames, layoutNodeGrows, layoutVisibilityClasses, lazyComponentCache, lazyComponents, leadExtensionConfig, limitedListItems, linkExtensionOptions, listTabIds, listTabUrl, listenForPageEvents, listenForRecordChanges, loadDeferredBadge, loadDeferredComponent, loadEditorImage, loadRichEditorExtensions, loadScript, loadStarterKitPanel, loadStyle, loadTableTotals, loadedStarterKitPanel, locateKanbanCard, logicalArrowKey, markFailedLazyWidgets, markRecordSubmitted, matchesKeyBinding, matchesShortcutStep, matchesUrlPattern, maxColumns, mentionNodeConfig, mentionText, menuActionContext, mergeAttributes, mergeChartOptions, mergeDeferredComponent, mergePolledComponents, mergeRefreshResponse, mergeStatePatch, mergeTagNodeConfig, mergeTagText, mobileCardLayout, mobileTable, modalFooterAlignment, modalTablePaging, modalTableQuery, modalTableSelected, moveColumn, moveColumnInManager, moveColumnTo, moveIndexedState, moveKanbanCard, moveListItem, moveRepeaterItem, moveTreeNode, navigationItemText, navigationItemUrl, nestedActionContext, newlineWithIndent, nextPageQuery, nextToolbarItem, normalizeRichEditorExtensions, normalizeRuleTree, notificationTintStyles, observeThemeChanges, onCloseNotification, onDatabaseNotificationsSent, onOpenDatabaseNotifications, onPageFormsChanged, onSaveConflict, oneTimeCodeDigits, openDatabaseNotifications, openDefaultAction, openRequestedStarterKitSearch, optimistic, optionText, orderColumnsBy, overlayPlacementDirection, pageFlash, pageFormName, pageSelectionState, paginationTotal, paletteGroupKey, panelAppearance, panelUploadOptions, parentPath, parseAspectRatio, parseDropdownPlacement, parseEventStream, parseGridColumns, parseInterval, parseKeyBinding, parseServerTiming, parseTsv, performUndo, persistWizardStep, pickerFilterFormOptions, pollComponent, pollPageProps, pollScheduler, postFormWithProgress, preferCurrentStarterKitPanel, prefetchTablePage, presenceInitials, prettyJson, previousPageQuery, primaryColumnName, promptPwaInstall, propsPollScheduler, pwaStore, queryBuilderInputType, queryBuilderOptions, readEventStream, readPersisted, realtimeHeaders, realtimeSettings, recordActionsAtStart, registerChartFormatters, registerChartPlugins, registerConflictForm, registerFormSubmitter, registerKeyBindings, registerPageForm, registerRichEditorExtensions, registerShortcut, registerStandaloneProp, registerStarterKitCopilotShortcut, registerStarterKitSearchShortcut, registerTablePersistence, relationGroupBadgeTarget, relationManagerBadgeTarget, relationManagerTabs, relationTabFromQuery, relationTabSlug, reloadExpiredPage, reloadOnExpiredPage, reloadPageProps, reloadPolledComponents, remainingTextSizeClass, rememberedCmsPreview, removeAllFilterIndicators, removeFilterIndicator, removeIndexedState, removeRepeaterItem, removeRule, reorderOffset, reorderTable, reorderedItemKeys, reorderingListsAllRecords, replaceComponentByKey, replacePlaceholder, reportRequestError, reportSaveConflict, reportSchemaContractMismatch, reportWizardProgress, reportedDeprecations, requestJson, requestStarterKitCopilot, requestStarterKitLanguages, requestStarterKitSearch, requestTableView, requiresFullPageLoad, reserveCmsPreviewSpace, resetChartRegistrations, resetDeprecations, resetPwa, resetRealtime, resetSchemaContractReports, resetStarterKitPanels, resetTableTotals, resizableImageAttributes, resizableImageOptions, resolveActionSize, resolveAppearance, resolveChartCallbacks, resolveContainerStatePath, resolveCssColor, resolveDeferredBadge, resolveDeferredGroupBadge, resolveEcho, resolveErrorNotification, resolveFirst, resolveFloatingToolbar, resolveItemAction, resolveLazyComponents, resolveNavigation, resolvePanelNavigation, resolvePartialProps, resolveRequestErrorNotification, resolveStatePath, resolveStickyOffset, resolveToastPosition, revealAutofocusField, router, runEditorCommands, runPageMethod, runsItemActionOnServer, saveColumnOrder, saveShortcutOverrides, saveSpreadsheetChanges, scheduleAutofocus, schemaComponentNames, schemaContractMajor, schemaContractMismatchMessage, schemaGapClass, scorePaletteItem, searchJson, searchTableColumnOptions, selectAllState, selectColumnEmptyMessage, selectPlural, selectedRecordsArguments, setAppearance, setCombinator, setIconAliases, setPath, setRecordVersion, setRequestErrorReporter, setTextColor, shortcutOverlayGroups, shortcutSteps, shortcuts, shortcutsClash, shouldChunkUpload, shouldConfirmModalClose, shouldResyncForm, shownRecordKeys, showsLanguageSwitcher, showsTableToolbar, sidebarDefaultOpen, sidebarWidthStyle, skeletonRowCount, slideOverSide, sliderBehavior, sliderBlocksTap, sliderBounds, sliderDirection, sliderFillSections, sliderFillStyle, sliderFromPrimitive, sliderHasTooltips, sliderNextValues, sliderPercent, sliderPips, sliderPrimitive, sliderShift, sliderShowsTooltip, sliderSnap, sliderState, sliderToPrimitive, sliderValueAt, sliderValues, slotAlignmentClass, slotDataMatches, slotItems, smallMarkConfig, splitClasses, splitPath, spreadsheetAnnouncement, spreadsheetAria, spreadsheetCellClass, spreadsheetCellId, spreadsheetCellKey, spreadsheetCellKind, spreadsheetColumns, spreadsheetRows, spreadsheetSelectionSize, stackClasses, stackedCellClasses, stackedImageStyle, standaloneDirection, standalonePageSchema, standalonePanelSchema, standaloneWidgetCount, startAnalytics, startDownload, startPwa, startSliderRangeDrag, startTableReordering, startUndoCountdown, starterKitBreadcrumbsFromProps, starterKitCopilot, starterKitDashboardWidgets, starterKitNavigation, starterKitNavigations, starterKitPanelLocale, starterKitWidgets, starterKitWidgetsPage, starterKitWidgetsPanel, stickyCollisionPadding, stopTableReordering, submitFormById, subscribeToNotifications, subscribeToPush, subscriptMarkConfig, superscriptMarkConfig, switchLocale, syncStarterKitPage, syncToolbarTabStops, t, tabFromQuery, tabKeyTarget, tabQueryValue, tabToReveal, tableColumnAlignmentClass, tableColumnCells, tableLoadingStore, tableQueryKey, tableTotalsFailed, tableTotalsStore, tableViewError, tableViewFollowUp, tableViewUrl, takeRequestedStarterKitCopilot, takeRequestedStarterKitLanguages, templateForIndex, tenantNameText, textAlignExtensionConfig, textColorMarkConfig, timeInputStep, toAsciiDigits, toEditorDocument, toStarterKitBreadcrumbs, toStarterKitNavGroups, toStarterKitUserMenuItems, toTsv, toggleButtonsNext, toggleButtonsSelected, toggleCollapsedGroup, toggleModalTableKey, togglePushNotifications, toggleVisibleColumn, toolCommand, toolbarButtonLabel, toolbarCommands, toolbarItems, toolbarPanel, trackAnalyticsEvent, transformImage, translatableLocaleField, translatableLocalesWithErrors, translationCellValue, translator, treeParentKeys, treeSubtreeHeight, triggerButtonView, undoShortcuts, uniqueId, unsubscribeFromPush, updateGroup, updateRule, updateTableCell, uploadPageMethodFiles, uploadTemporaryFile, uploadWithProgress, uploadedFileLinks, urlBase64ToUint8Array, usesDefaultImageStack, usesStarterKitHostLayout, virtualizeOptions, visibleColumns, visiblePresenceMembers, visibleTreeRows, visitTable, visitTableView, wallClockNow, watchPageProps, whenIdle, whenVisible, widgetPollTarget, widgetRegistryKeys, withAlpha, withColorAlpha, withDeferredTabBadges, withEcho, withItemActionState, withTableTotals, withoutDefaultActionQuery, withoutRequired, wizardProgressStore, wizardRequestedStepIndex, wizardStepFieldPaths, wizardStepQueryKey, wizardStepToReveal, writePersisted };
|
package/dist/item-actions.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ActionVariant, Color } from "./schema/common.js";
|
|
2
|
+
import { ActionSchema } from "./schema/actions.js";
|
|
2
3
|
import { ItemActionName, ItemActionSchema, ItemActionsSchema } from "./schema/components.js";
|
|
3
4
|
import { ActionContext } from "./actions.js";
|
|
4
5
|
//#region src/item-actions.d.ts
|
|
@@ -9,6 +10,15 @@ export interface ItemActionFallback {
|
|
|
9
10
|
color?: Color;
|
|
10
11
|
variant?: ActionVariant;
|
|
11
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* The `extraItemActions()` of an item: its own when the server rendered it, else the
|
|
15
|
+
* field's (evaluated without an item) for an item the browser added (W-S2-04).
|
|
16
|
+
*/
|
|
17
|
+
export declare function itemExtraActions(field: {
|
|
18
|
+
extraItemActions?: ActionSchema[];
|
|
19
|
+
}, item: {
|
|
20
|
+
actions?: ActionSchema[];
|
|
21
|
+
} | undefined): ActionSchema[] | undefined;
|
|
12
22
|
/**
|
|
13
23
|
* The schema to render for the built-in action `name` of a Repeater, Builder or KeyValue:
|
|
14
24
|
* the item's own (customised actions are evaluated per item), else the field's (the server
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"item-actions.d.ts","names":[],"sources":["../src/item-actions.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"item-actions.d.ts","names":[],"sources":["../src/item-actions.ts"],"mappings":";;;;;;iBAMiB;EACf;EACA;EACA,QAAQ;EACR,UAAU;;;;;;wBAOI,iBACd;EAAS,mBAAmB;GAC5B;EAAQ,UAAU;gBACjB;;;;;;;wBAUa,kBACd,MAAM,gBACN;EAAS,cAAc;GACvB;EAAQ,cAAc;eACtB,UAAU,qBACT;;wBAoBa,uBAAuB,QAAQ;;wBAK/B,kBACd,SAAS,eACT,MAAM,0BACL;;wBAKa,oBACd,QAAQ,kBACR;EAAS;EAAoB,aAAa;IACzC;;wBAWa,kBAAkB,eAAe,cAAc;;wBAY/C,iBAAiB;YAUrB;;qBAGC;;;;;;qBAOA;UACH;;EAGR,MAAM,cAAc;MAQhB;;;;;EAQJ,OAAO,WAAW;;EAWlB;;;wBAMc,eACd,WAAW,YACX,eACA,WAAW"}
|
package/dist/item-actions.js
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
//#region src/item-actions.ts
|
|
2
2
|
/**
|
|
3
|
+
* The `extraItemActions()` of an item: its own when the server rendered it, else the
|
|
4
|
+
* field's (evaluated without an item) for an item the browser added (W-S2-04).
|
|
5
|
+
*/
|
|
6
|
+
function itemExtraActions(field, item) {
|
|
7
|
+
return item ? item.actions : field.extraItemActions;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
3
10
|
* The schema to render for the built-in action `name` of a Repeater, Builder or KeyValue:
|
|
4
11
|
* the item's own (customised actions are evaluated per item), else the field's (the server
|
|
5
12
|
* only sends customised actions), else a default built from `fallback`. Null means hidden;
|
|
@@ -100,6 +107,6 @@ function focusMovedItem(container, index, direction) {
|
|
|
100
107
|
return Boolean(target);
|
|
101
108
|
}
|
|
102
109
|
//#endregion
|
|
103
|
-
export { ITEM_MOVE_ATTRIBUTE, ItemMoveTracker, addActionJustify, focusMovedItem, itemActionContext, reorderedItemKeys, resolveItemAction, runsItemActionOnServer, withItemActionState };
|
|
110
|
+
export { ITEM_MOVE_ATTRIBUTE, ItemMoveTracker, addActionJustify, focusMovedItem, itemActionContext, itemExtraActions, reorderedItemKeys, resolveItemAction, runsItemActionOnServer, withItemActionState };
|
|
104
111
|
|
|
105
112
|
//# sourceMappingURL=item-actions.js.map
|
package/dist/item-actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"item-actions.js","names":[],"sources":["../src/item-actions.ts"],"sourcesContent":["import type { ActionContext } from './actions'\nimport type { ActionVariant, Color } from './schema/common'\nimport type { ItemActionName, ItemActionSchema, ItemActionsSchema } from './schema/components'\n\n/** What a renderer shows for a built-in item action the server didn't describe. */\nexport interface ItemActionFallback {\n label: string\n icon: string\n color?: Color\n variant?: ActionVariant\n}\n\n/**\n * The schema to render for the built-in action `name` of a Repeater, Builder or KeyValue:\n * the item's own (customised actions are evaluated per item), else the field's (the server\n * only sends customised actions), else a default built from `fallback`. Null means hidden;\n * whether the field allows the action at all comes from its switches (`deletable` …).\n */\nexport function resolveItemAction(\n name: ItemActionName,\n field: { itemActions?: ItemActionsSchema },\n item: { itemActions?: ItemActionsSchema } | undefined,\n fallback: ItemActionFallback,\n): ItemActionSchema | null {\n if (item?.itemActions && name in item.itemActions) {\n return item.itemActions[name] ?? null\n }\n\n if (field.itemActions && name in field.itemActions) {\n return field.itemActions[name] ?? null\n }\n\n return {\n type: 'Action',\n name,\n label: fallback.label,\n icon: fallback.icon,\n color: fallback.color ?? 'gray',\n variant: fallback.variant ?? 'icon-button',\n }\n}\n\n/** Whether the item action must run through the server (it was customised). */\nexport function runsItemActionOnServer(action: ItemActionSchema | null | undefined): boolean {\n return Boolean(action?.server)\n}\n\n/** The action context of an item action: the field's context plus its arguments. */\nexport function itemActionContext(\n context: ActionContext,\n args: Record<string, unknown>,\n): ActionContext {\n return { ...context, arguments: { ...context.arguments, ...args } }\n}\n\n/** A copy of an item action schema with render-time overrides (disabled, attributes). */\nexport function withItemActionState(\n action: ItemActionSchema,\n state: { disabled?: boolean; attributes?: Record<string, string> },\n): ItemActionSchema {\n return {\n ...action,\n disabled: Boolean(action.disabled || state.disabled) || undefined,\n extraAttributes: state.attributes\n ? { ...action.extraAttributes, ...state.attributes }\n : action.extraAttributes,\n }\n}\n\n/** The item keys (positions) after moving the item at `from` to `to`. */\nexport function reorderedItemKeys(count: number, from: number, to: number): string[] {\n const keys = Array.from({ length: count }, (_, index) => String(index))\n\n if (from === to || from < 0 || to < 0 || from >= count || to >= count) return keys\n\n const [moved] = keys.splice(from, 1)\n keys.splice(to, 0, moved as string)\n\n return keys\n}\n\n/** Flex alignment of the add button (`addActionAlignment()`). */\nexport function addActionJustify(alignment: string | undefined): 'start' | 'center' | 'end' {\n return alignment === 'center'\n ? 'center'\n : alignment === 'end' || alignment === 'right'\n ? 'end'\n : 'start'\n}\n\n// ---------------------------------------------------------------- Reordering with buttons\n\nexport type ItemMoveDirection = 'up' | 'down'\n\n/** The attribute that marks an item's move up / down buttons (`data-item-move=\"up\"`). */\nexport const ITEM_MOVE_ATTRIBUTE = 'data-item-move'\n\n/**\n * A move made with an item's move up / down buttons, for screen reader and keyboard users:\n * one move at a time (a press while the previous move is still rendering is ignored), then\n * focus goes back to the moved item's button (or its other one at the ends of the list).\n */\nexport class ItemMoveTracker {\n private pending: { index: number; direction: ItemMoveDirection } | null = null\n\n /** Start a move from `from` to `to`; false when another move hasn't finished. */\n begin(from: number, to: number): boolean {\n if (this.pending || from === to) return false\n\n this.pending = { index: to, direction: to < from ? 'up' : 'down' }\n\n return true\n }\n\n get isMoving(): boolean {\n return this.pending !== null\n }\n\n /**\n * After the list re-rendered: focus the moved item's move button inside `container`\n * (items carry `data-index`). Ends the move either way.\n */\n finish(container: ParentNode | null | undefined): boolean {\n const pending = this.pending\n\n this.pending = null\n\n if (!pending || !container) return false\n\n return focusMovedItem(container, pending.index, pending.direction)\n }\n\n /** Forget the pending move without focusing (the move was cancelled). */\n cancel(): void {\n this.pending = null\n }\n}\n\n/** Focus the move button of the item at `index` (its other one when that is disabled). */\nexport function focusMovedItem(\n container: ParentNode,\n index: number,\n direction: ItemMoveDirection,\n): boolean {\n const item = container.querySelector(`[data-index=\"${index}\"]`)\n\n if (!item) return false\n\n const button = (name: ItemMoveDirection) =>\n item.querySelector<HTMLElement>(`[${ITEM_MOVE_ATTRIBUTE}=\"${name}\"]:not(:disabled)`)\n const target = button(direction) ?? button(direction === 'up' ? 'down' : 'up')\n\n target?.focus()\n\n return Boolean(target)\n}\n"],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"item-actions.js","names":[],"sources":["../src/item-actions.ts"],"sourcesContent":["import type { ActionContext } from './actions'\nimport type { ActionSchema } from './schema/actions'\nimport type { ActionVariant, Color } from './schema/common'\nimport type { ItemActionName, ItemActionSchema, ItemActionsSchema } from './schema/components'\n\n/** What a renderer shows for a built-in item action the server didn't describe. */\nexport interface ItemActionFallback {\n label: string\n icon: string\n color?: Color\n variant?: ActionVariant\n}\n\n/**\n * The `extraItemActions()` of an item: its own when the server rendered it, else the\n * field's (evaluated without an item) for an item the browser added (W-S2-04).\n */\nexport function itemExtraActions(\n field: { extraItemActions?: ActionSchema[] },\n item: { actions?: ActionSchema[] } | undefined,\n): ActionSchema[] | undefined {\n return item ? item.actions : field.extraItemActions\n}\n\n/**\n * The schema to render for the built-in action `name` of a Repeater, Builder or KeyValue:\n * the item's own (customised actions are evaluated per item), else the field's (the server\n * only sends customised actions), else a default built from `fallback`. Null means hidden;\n * whether the field allows the action at all comes from its switches (`deletable` …).\n */\nexport function resolveItemAction(\n name: ItemActionName,\n field: { itemActions?: ItemActionsSchema },\n item: { itemActions?: ItemActionsSchema } | undefined,\n fallback: ItemActionFallback,\n): ItemActionSchema | null {\n if (item?.itemActions && name in item.itemActions) {\n return item.itemActions[name] ?? null\n }\n\n if (field.itemActions && name in field.itemActions) {\n return field.itemActions[name] ?? null\n }\n\n return {\n type: 'Action',\n name,\n label: fallback.label,\n icon: fallback.icon,\n color: fallback.color ?? 'gray',\n variant: fallback.variant ?? 'icon-button',\n }\n}\n\n/** Whether the item action must run through the server (it was customised). */\nexport function runsItemActionOnServer(action: ItemActionSchema | null | undefined): boolean {\n return Boolean(action?.server)\n}\n\n/** The action context of an item action: the field's context plus its arguments. */\nexport function itemActionContext(\n context: ActionContext,\n args: Record<string, unknown>,\n): ActionContext {\n return { ...context, arguments: { ...context.arguments, ...args } }\n}\n\n/** A copy of an item action schema with render-time overrides (disabled, attributes). */\nexport function withItemActionState(\n action: ItemActionSchema,\n state: { disabled?: boolean; attributes?: Record<string, string> },\n): ItemActionSchema {\n return {\n ...action,\n disabled: Boolean(action.disabled || state.disabled) || undefined,\n extraAttributes: state.attributes\n ? { ...action.extraAttributes, ...state.attributes }\n : action.extraAttributes,\n }\n}\n\n/** The item keys (positions) after moving the item at `from` to `to`. */\nexport function reorderedItemKeys(count: number, from: number, to: number): string[] {\n const keys = Array.from({ length: count }, (_, index) => String(index))\n\n if (from === to || from < 0 || to < 0 || from >= count || to >= count) return keys\n\n const [moved] = keys.splice(from, 1)\n keys.splice(to, 0, moved as string)\n\n return keys\n}\n\n/** Flex alignment of the add button (`addActionAlignment()`). */\nexport function addActionJustify(alignment: string | undefined): 'start' | 'center' | 'end' {\n return alignment === 'center'\n ? 'center'\n : alignment === 'end' || alignment === 'right'\n ? 'end'\n : 'start'\n}\n\n// ---------------------------------------------------------------- Reordering with buttons\n\nexport type ItemMoveDirection = 'up' | 'down'\n\n/** The attribute that marks an item's move up / down buttons (`data-item-move=\"up\"`). */\nexport const ITEM_MOVE_ATTRIBUTE = 'data-item-move'\n\n/**\n * A move made with an item's move up / down buttons, for screen reader and keyboard users:\n * one move at a time (a press while the previous move is still rendering is ignored), then\n * focus goes back to the moved item's button (or its other one at the ends of the list).\n */\nexport class ItemMoveTracker {\n private pending: { index: number; direction: ItemMoveDirection } | null = null\n\n /** Start a move from `from` to `to`; false when another move hasn't finished. */\n begin(from: number, to: number): boolean {\n if (this.pending || from === to) return false\n\n this.pending = { index: to, direction: to < from ? 'up' : 'down' }\n\n return true\n }\n\n get isMoving(): boolean {\n return this.pending !== null\n }\n\n /**\n * After the list re-rendered: focus the moved item's move button inside `container`\n * (items carry `data-index`). Ends the move either way.\n */\n finish(container: ParentNode | null | undefined): boolean {\n const pending = this.pending\n\n this.pending = null\n\n if (!pending || !container) return false\n\n return focusMovedItem(container, pending.index, pending.direction)\n }\n\n /** Forget the pending move without focusing (the move was cancelled). */\n cancel(): void {\n this.pending = null\n }\n}\n\n/** Focus the move button of the item at `index` (its other one when that is disabled). */\nexport function focusMovedItem(\n container: ParentNode,\n index: number,\n direction: ItemMoveDirection,\n): boolean {\n const item = container.querySelector(`[data-index=\"${index}\"]`)\n\n if (!item) return false\n\n const button = (name: ItemMoveDirection) =>\n item.querySelector<HTMLElement>(`[${ITEM_MOVE_ATTRIBUTE}=\"${name}\"]:not(:disabled)`)\n const target = button(direction) ?? button(direction === 'up' ? 'down' : 'up')\n\n target?.focus()\n\n return Boolean(target)\n}\n"],"mappings":";;;;;AAiBA,SAAgB,iBACd,OACA,MAC4B;CAC5B,OAAO,OAAO,KAAK,UAAU,MAAM;AACrC;;;;;;;AAQA,SAAgB,kBACd,MACA,OACA,MACA,UACyB;CACzB,IAAI,MAAM,eAAe,QAAQ,KAAK,aACpC,OAAO,KAAK,YAAY,SAAS;CAGnC,IAAI,MAAM,eAAe,QAAQ,MAAM,aACrC,OAAO,MAAM,YAAY,SAAS;CAGpC,OAAO;EACL,MAAM;EACN;EACA,OAAO,SAAS;EAChB,MAAM,SAAS;EACf,OAAO,SAAS,SAAS;EACzB,SAAS,SAAS,WAAW;CAC/B;AACF;;AAGA,SAAgB,uBAAuB,QAAsD;CAC3F,OAAO,QAAQ,QAAQ,MAAM;AAC/B;;AAGA,SAAgB,kBACd,SACA,MACe;CACf,OAAO;EAAE,GAAG;EAAS,WAAW;GAAE,GAAG,QAAQ;GAAW,GAAG;EAAK;CAAE;AACpE;;AAGA,SAAgB,oBACd,QACA,OACkB;CAClB,OAAO;EACL,GAAG;EACH,UAAU,QAAQ,OAAO,YAAY,MAAM,QAAQ,KAAK,KAAA;EACxD,iBAAiB,MAAM,aACnB;GAAE,GAAG,OAAO;GAAiB,GAAG,MAAM;EAAW,IACjD,OAAO;CACb;AACF;;AAGA,SAAgB,kBAAkB,OAAe,MAAc,IAAsB;CACnF,MAAM,OAAO,MAAM,KAAK,EAAE,QAAQ,MAAM,IAAI,GAAG,UAAU,OAAO,KAAK,CAAC;CAEtE,IAAI,SAAS,MAAM,OAAO,KAAK,KAAK,KAAK,QAAQ,SAAS,MAAM,OAAO,OAAO;CAE9E,MAAM,CAAC,SAAS,KAAK,OAAO,MAAM,CAAC;CACnC,KAAK,OAAO,IAAI,GAAG,KAAe;CAElC,OAAO;AACT;;AAGA,SAAgB,iBAAiB,WAA2D;CAC1F,OAAO,cAAc,WACjB,WACA,cAAc,SAAS,cAAc,UACnC,QACA;AACR;;AAOA,MAAa,sBAAsB;;;;;;AAOnC,IAAa,kBAAb,MAA6B;CAC3B,UAA0E;;CAG1E,MAAM,MAAc,IAAqB;EACvC,IAAI,KAAK,WAAW,SAAS,IAAI,OAAO;EAExC,KAAK,UAAU;GAAE,OAAO;GAAI,WAAW,KAAK,OAAO,OAAO;EAAO;EAEjE,OAAO;CACT;CAEA,IAAI,WAAoB;EACtB,OAAO,KAAK,YAAY;CAC1B;;;;;CAMA,OAAO,WAAmD;EACxD,MAAM,UAAU,KAAK;EAErB,KAAK,UAAU;EAEf,IAAI,CAAC,WAAW,CAAC,WAAW,OAAO;EAEnC,OAAO,eAAe,WAAW,QAAQ,OAAO,QAAQ,SAAS;CACnE;;CAGA,SAAe;EACb,KAAK,UAAU;CACjB;AACF;;AAGA,SAAgB,eACd,WACA,OACA,WACS;CACT,MAAM,OAAO,UAAU,cAAc,gBAAgB,MAAM,GAAG;CAE9D,IAAI,CAAC,MAAM,OAAO;CAElB,MAAM,UAAU,SACd,KAAK,cAA2B,IAAI,oBAAoB,IAAI,KAAK,kBAAkB;CACrF,MAAM,SAAS,OAAO,SAAS,KAAK,OAAO,cAAc,OAAO,SAAS,IAAI;CAE7E,QAAQ,MAAM;CAEd,OAAO,QAAQ,MAAM;AACvB"}
|
package/dist/prefetch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefetch.d.ts","names":[],"sources":["../src/prefetch.ts"],"mappings":";;;;;;qBASa;;;;;wBAMG,kBACd,gCACA,SAAS,YACT;;;;wBA2Bc;;
|
|
1
|
+
{"version":3,"file":"prefetch.d.ts","names":[],"sources":["../src/prefetch.ts"],"mappings":";;;;;;qBASa;;;;;wBAMG,kBACd,gCACA,SAAS,YACT;;;;wBA2Bc;;wBAgBA,kBAAkB,aAAa;;;;;;;wBAkB/B"}
|
package/dist/prefetch.js
CHANGED
|
@@ -35,8 +35,11 @@ function invalidatePrefetchedPages() {
|
|
|
35
35
|
router.flushAll();
|
|
36
36
|
invalidateTableTotals();
|
|
37
37
|
}
|
|
38
|
-
/**
|
|
39
|
-
|
|
38
|
+
/**
|
|
39
|
+
* Internal endpoints that change records or what a page shows (actions, inline edits,
|
|
40
|
+
* reordering, undo, page methods, saved views and column order: W-S2-14).
|
|
41
|
+
*/
|
|
42
|
+
const MUTATING_ENDPOINT = /\/(?:actions(?:\/undo)?|table\/(?:cell|cells|reorder|views|columns)|pages\/call)\/?$/;
|
|
40
43
|
/** Whether a successful request to `url` with `method` may have changed records. */
|
|
41
44
|
function isMutatingRequest(url, method) {
|
|
42
45
|
if (method.toUpperCase() === "GET") return false;
|
package/dist/prefetch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefetch.js","names":[],"sources":["../src/prefetch.ts"],"sourcesContent":["import { router } from '@inertiajs/core'\nimport { resolvePartialProps } from './partial-props'\nimport { buildTableUrl, type TableQuery } from './table'\nimport { invalidateTableTotals } from './table-totals'\n\n/**\n * How long a prefetched page is reused: navigation links (Inertia `<Link prefetch>`) and\n * a table's next page. Short, and dropped after every mutation.\n */\nexport const PREFETCH_CACHE_FOR = '10s'\n\n/**\n * Prefetch a table page (hovering or focusing \"next\") with the same visit `visitTable()`\n * makes, so the click is answered from the cache. Browser only.\n */\nexport function prefetchTablePage(\n identifier: string | undefined,\n changes: TableQuery,\n only: string[] = ['page'],\n): void {\n if (typeof window === 'undefined') return\n\n const resolved = resolvePartialProps(only)\n\n router.prefetch(\n buildTableUrl(window.location.href, identifier, changes),\n {\n preserveState: true,\n preserveScroll: true,\n replace: true,\n ...(resolved === undefined ? {} : { only: resolved }),\n },\n { cacheFor: PREFETCH_CACHE_FOR },\n )\n}\n\n/** Mutations so far; a page last shown before the latest one has stale props. */\nlet mutationCount = 0\n\n/** The mutation count when each URL was last shown. */\nconst shownAt = new Map<string, number>()\n\n/**\n * Drop prefetched pages and mark deferred table totals stale: records may have changed.\n */\nexport function invalidatePrefetchedPages(): void {\n if (typeof window === 'undefined') return\n\n mutationCount++\n router.flushAll()\n invalidateTableTotals()\n}\n\n
|
|
1
|
+
{"version":3,"file":"prefetch.js","names":[],"sources":["../src/prefetch.ts"],"sourcesContent":["import { router } from '@inertiajs/core'\nimport { resolvePartialProps } from './partial-props'\nimport { buildTableUrl, type TableQuery } from './table'\nimport { invalidateTableTotals } from './table-totals'\n\n/**\n * How long a prefetched page is reused: navigation links (Inertia `<Link prefetch>`) and\n * a table's next page. Short, and dropped after every mutation.\n */\nexport const PREFETCH_CACHE_FOR = '10s'\n\n/**\n * Prefetch a table page (hovering or focusing \"next\") with the same visit `visitTable()`\n * makes, so the click is answered from the cache. Browser only.\n */\nexport function prefetchTablePage(\n identifier: string | undefined,\n changes: TableQuery,\n only: string[] = ['page'],\n): void {\n if (typeof window === 'undefined') return\n\n const resolved = resolvePartialProps(only)\n\n router.prefetch(\n buildTableUrl(window.location.href, identifier, changes),\n {\n preserveState: true,\n preserveScroll: true,\n replace: true,\n ...(resolved === undefined ? {} : { only: resolved }),\n },\n { cacheFor: PREFETCH_CACHE_FOR },\n )\n}\n\n/** Mutations so far; a page last shown before the latest one has stale props. */\nlet mutationCount = 0\n\n/** The mutation count when each URL was last shown. */\nconst shownAt = new Map<string, number>()\n\n/**\n * Drop prefetched pages and mark deferred table totals stale: records may have changed.\n */\nexport function invalidatePrefetchedPages(): void {\n if (typeof window === 'undefined') return\n\n mutationCount++\n router.flushAll()\n invalidateTableTotals()\n}\n\n/**\n * Internal endpoints that change records or what a page shows (actions, inline edits,\n * reordering, undo, page methods, saved views and column order: W-S2-14).\n */\nconst MUTATING_ENDPOINT =\n /\\/(?:actions(?:\\/undo)?|table\\/(?:cell|cells|reorder|views|columns)|pages\\/call)\\/?$/\n\n/** Whether a successful request to `url` with `method` may have changed records. */\nexport function isMutatingRequest(url: string, method: string): boolean {\n if (method.toUpperCase() === 'GET') return false\n\n try {\n return MUTATING_ENDPOINT.test(new URL(url, 'http://localhost').pathname)\n } catch {\n return false\n }\n}\n\nlet installed = false\n\n/**\n * Invalidate prefetched pages and table totals after every Inertia visit that is not a\n * GET (actions, form saves), and reload a page the browser's Back or Forward button\n * restores from history when records changed since it was shown: Inertia restores the\n * saved props without asking the server. Returns a function that removes the listeners.\n */\nexport function installPrefetchInvalidation(): () => void {\n // Panels and standalone components on one page share the listeners.\n if (typeof window === 'undefined' || installed) return () => {}\n\n installed = true\n let restoring = false\n const onPopstate = (): void => {\n restoring = true\n }\n window.addEventListener('popstate', onPopstate)\n\n // A visit started after the popstate (a hash-only change fires no navigate) is not a restore.\n const removeStart = router.on('start', () => {\n restoring = false\n })\n const removeFinish = router.on('finish', (event) => {\n if (event.detail.visit.method !== 'get') invalidatePrefetchedPages()\n })\n const removeNavigate = router.on('navigate', (event) => {\n const url = event.detail.page.url\n const restored = restoring\n restoring = false\n\n // A URL never shown in this page load may come from before it: reload it too.\n if (restored && (shownAt.get(url) ?? -1) < mutationCount) {\n // Without the restored state: forms fill their inputs when they mount, so a reload that\n // kept it showed the saved page's old values (a restored page has no unsaved input).\n // `router.reload()` always keeps the state, hence the visit.\n router.visit(window.location.href, {\n preserveScroll: true,\n preserveState: false,\n replace: true,\n async: true,\n headers: { 'Cache-Control': 'no-cache' },\n })\n return\n }\n\n shownAt.set(url, mutationCount)\n })\n\n return () => {\n installed = false\n window.removeEventListener('popstate', onPopstate)\n removeStart()\n removeFinish()\n removeNavigate()\n }\n}\n"],"mappings":";;;;;;;;;AASA,MAAa,qBAAqB;;;;;AAMlC,SAAgB,kBACd,YACA,SACA,OAAiB,CAAC,MAAM,GAClB;CACN,IAAI,OAAO,WAAW,aAAa;CAEnC,MAAM,WAAW,oBAAoB,IAAI;CAEzC,OAAO,SACL,cAAc,OAAO,SAAS,MAAM,YAAY,OAAO,GACvD;EACE,eAAe;EACf,gBAAgB;EAChB,SAAS;EACT,GAAI,aAAa,KAAA,IAAY,CAAC,IAAI,EAAE,MAAM,SAAS;CACrD,GACA,EAAE,UAAA,MAA6B,CACjC;AACF;;AAGA,IAAI,gBAAgB;;AAGpB,MAAM,0BAAU,IAAI,IAAoB;;;;AAKxC,SAAgB,4BAAkC;CAChD,IAAI,OAAO,WAAW,aAAa;CAEnC;CACA,OAAO,SAAS;CAChB,sBAAsB;AACxB;;;;;AAMA,MAAM,oBACJ;;AAGF,SAAgB,kBAAkB,KAAa,QAAyB;CACtE,IAAI,OAAO,YAAY,MAAM,OAAO,OAAO;CAE3C,IAAI;EACF,OAAO,kBAAkB,KAAK,IAAI,IAAI,KAAK,kBAAkB,CAAC,CAAC,QAAQ;CACzE,QAAQ;EACN,OAAO;CACT;AACF;AAEA,IAAI,YAAY;;;;;;;AAQhB,SAAgB,8BAA0C;CAExD,IAAI,OAAO,WAAW,eAAe,WAAW,aAAa,CAAC;CAE9D,YAAY;CACZ,IAAI,YAAY;CAChB,MAAM,mBAAyB;EAC7B,YAAY;CACd;CACA,OAAO,iBAAiB,YAAY,UAAU;CAG9C,MAAM,cAAc,OAAO,GAAG,eAAe;EAC3C,YAAY;CACd,CAAC;CACD,MAAM,eAAe,OAAO,GAAG,WAAW,UAAU;EAClD,IAAI,MAAM,OAAO,MAAM,WAAW,OAAO,0BAA0B;CACrE,CAAC;CACD,MAAM,iBAAiB,OAAO,GAAG,aAAa,UAAU;EACtD,MAAM,MAAM,MAAM,OAAO,KAAK;EAC9B,MAAM,WAAW;EACjB,YAAY;EAGZ,IAAI,aAAa,QAAQ,IAAI,GAAG,KAAK,MAAM,eAAe;GAIxD,OAAO,MAAM,OAAO,SAAS,MAAM;IACjC,gBAAgB;IAChB,eAAe;IACf,SAAS;IACT,OAAO;IACP,SAAS,EAAE,iBAAiB,WAAW;GACzC,CAAC;GACD;EACF;EAEA,QAAQ,IAAI,KAAK,aAAa;CAChC,CAAC;CAED,aAAa;EACX,YAAY;EACZ,OAAO,oBAAoB,YAAY,UAAU;EACjD,YAAY;EACZ,aAAa;EACb,eAAe;CACjB;AACF"}
|
package/dist/presence.d.ts
CHANGED
|
@@ -23,10 +23,6 @@ export interface PresenceRoomOptions extends PresenceSchema {
|
|
|
23
23
|
self?: RecordKey | null;
|
|
24
24
|
echo?: EchoLike | null;
|
|
25
25
|
}
|
|
26
|
-
/**
|
|
27
|
-
* Who else is on a record page: joins the record's presence channel and tracks its members
|
|
28
|
-
* and their editing/viewing state (shared with whispers). Renderers show `store` as avatars.
|
|
29
|
-
*/
|
|
30
26
|
export declare class PresenceRoom {
|
|
31
27
|
private readonly options;
|
|
32
28
|
readonly store: Store<PresenceRoomState>;
|
package/dist/presence.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presence.d.ts","names":[],"sources":["../src/presence.ts"],"mappings":";;;;;;iBAMiB;EACf,IAAI;EACJ;EACA;EACA,OAAO;;iBAGQ;;EAEf,SAAS;;EAET;;;qBAMW;iBAgBI,4BAA4B;;EAE3C,OAAO;EACP,OAAO
|
|
1
|
+
{"version":3,"file":"presence.d.ts","names":[],"sources":["../src/presence.ts"],"mappings":";;;;;;iBAMiB;EACf,IAAI;EACJ;EACA;EACA,OAAO;;iBAGQ;;EAEf,SAAS;;EAET;;;qBAMW;iBAgBI,4BAA4B;;EAE3C,OAAO;EACP,OAAO;;qBAwBI;mBAYkB;WAXpB,OAAO,MAAM;mBAKL;;mBAEA;UACT;UACA;EAEqB,YAAA,SAAS;MAIlC,WAAW;;EAKf,WAAW,IAAI;;SAKR,KAAK,kBAAkB;;EAK9B;;EAsGA,SAAS,OAAO;UAOR;UAMA;UAMA;;;wBAUM,iBAAiB;;wBASjB,uBACd,SAAS,kBACT;EACG,OAAO;EAAkB"}
|
package/dist/presence.js
CHANGED
|
@@ -18,6 +18,16 @@ function asMember(value) {
|
|
|
18
18
|
* Who else is on a record page: joins the record's presence channel and tracks its members
|
|
19
19
|
* and their editing/viewing state (shared with whispers). Renderers show `store` as avatars.
|
|
20
20
|
*/
|
|
21
|
+
/**
|
|
22
|
+
* The members of a presence channel whose subscription already succeeded (Pusher protocol:
|
|
23
|
+
* Reverb, Pusher), as `here` would list them; null before that or with another connector.
|
|
24
|
+
*/
|
|
25
|
+
function subscribedMembers(channel) {
|
|
26
|
+
const subscription = channel.subscription;
|
|
27
|
+
const members = subscription?.members?.members;
|
|
28
|
+
if (!subscription?.subscribed || !members || typeof members !== "object") return null;
|
|
29
|
+
return Object.values(members);
|
|
30
|
+
}
|
|
21
31
|
var PresenceRoom = class {
|
|
22
32
|
options;
|
|
23
33
|
store = createStore({
|
|
@@ -57,14 +67,17 @@ var PresenceRoom = class {
|
|
|
57
67
|
channel.whisper?.(PRESENCE_STATE_WHISPER, data);
|
|
58
68
|
} catch {}
|
|
59
69
|
};
|
|
60
|
-
|
|
70
|
+
const here = (members) => {
|
|
61
71
|
if (!active) return;
|
|
62
72
|
this.store.set({
|
|
63
73
|
connected: true,
|
|
64
74
|
members: members.map(asMember).filter((m) => m !== null).map((m) => this.withState(m)).filter((member) => !this.isSelf(member.id))
|
|
65
75
|
});
|
|
66
76
|
this.announce();
|
|
67
|
-
}
|
|
77
|
+
};
|
|
78
|
+
channel.here(here);
|
|
79
|
+
const joined = subscribedMembers(channel);
|
|
80
|
+
if (joined) here(joined);
|
|
68
81
|
channel.joining((value) => {
|
|
69
82
|
const member = asMember(value);
|
|
70
83
|
if (!active || !member || this.isSelf(member.id)) return;
|
package/dist/presence.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presence.js","names":[],"sources":["../src/presence.ts"],"sourcesContent":["import { acquireChannel, withEcho, type EchoLike } from './realtime'\nimport type { RecordKey } from './schema/common'\nimport type { PresenceSchema, PresenceState } from './schema/realtime'\nimport { createStore, type Store } from './store'\n\n/** Another user on the same record (what `RealtimeChannels::member()` shares). */\nexport interface PresenceMember {\n id: RecordKey\n name: string\n avatar?: string | null\n state: PresenceState\n}\n\nexport interface PresenceRoomState {\n /** Other users on the record, in the order they arrived; never the current user. */\n members: PresenceMember[]\n /** The channel was joined (Echo is available and the user may see the record). */\n connected: boolean\n}\n\nconst rooms = new Map<string, PresenceRoom>()\n\n/** Whisper (client event) carrying a member's editing/viewing state. */\nexport const PRESENCE_STATE_WHISPER = 'alfakit-presence'\n\nfunction asMember(value: unknown): Omit<PresenceMember, 'state'> | null {\n if (!value || typeof value !== 'object') return null\n\n const { id, name, avatar } = value as Record<string, unknown>\n\n if (typeof id !== 'string' && typeof id !== 'number') return null\n\n return {\n id,\n name: typeof name === 'string' && name !== '' ? name : String(id),\n avatar: typeof avatar === 'string' && avatar !== '' ? avatar : null,\n }\n}\n\nexport interface PresenceRoomOptions extends PresenceSchema {\n /** The current user's key (left out of `members`). */\n self?: RecordKey | null\n echo?: EchoLike | null\n}\n\n/**\n * Who else is on a record page: joins the record's presence channel and tracks its members\n * and their editing/viewing state (shared with whispers). Renderers show `store` as avatars.\n */\nexport class PresenceRoom {\n readonly store: Store<PresenceRoomState> = createStore<PresenceRoomState>({\n members: [],\n connected: false,\n })\n\n private readonly states = new Map<string, PresenceState>()\n /** Names of everybody seen on the channel, also after they left (\"Dana saved changes\"). */\n private readonly names = new Map<string, string>()\n private whisper: ((data: Record<string, unknown>) => void) | null = null\n private state: PresenceState\n\n constructor(private readonly options: PresenceRoomOptions) {\n this.state = options.state\n }\n\n get members(): PresenceMember[] {\n return this.store.get().members\n }\n\n /** The name of a user seen on the record, if any. */\n memberName(id: RecordKey): string | null {\n return this.names.get(String(id)) ?? null\n }\n\n /** The started room of a presence channel (the conflict banner reads names from it). */\n static find(channel: string): PresenceRoom | null {\n return rooms.get(channel) ?? null\n }\n\n /** Join the channel. Returns the function that leaves it. */\n start(): () => void {\n rooms.set(this.options.channel, this)\n\n const stop = withEcho(\n (echo) => {\n const acquired = acquireChannel(echo, 'presence', this.options.channel)\n\n if (!acquired) return\n\n const channel = acquired.channel\n let active = true\n\n this.whisper = (data) => {\n try {\n channel.whisper?.(PRESENCE_STATE_WHISPER, data)\n } catch {\n // Client events can be disabled on the server; presence still works.\n }\n }\n\n channel.here((members) => {\n if (!active) return\n\n this.store.set({\n connected: true,\n members: members\n .map(asMember)\n .filter((m) => m !== null)\n .map((m) => this.withState(m))\n .filter((member) => !this.isSelf(member.id)),\n })\n this.announce()\n })\n\n channel.joining((value) => {\n const member = asMember(value)\n\n if (!active || !member || this.isSelf(member.id)) return\n\n this.store.update({\n members: [\n ...this.members.filter((existing) => String(existing.id) !== String(member.id)),\n this.withState(member),\n ],\n })\n // Tell the newcomer what this page does.\n this.announce()\n })\n\n channel.leaving((value) => {\n const member = asMember(value)\n\n if (!active || !member) return\n\n this.states.delete(String(member.id))\n this.store.update({\n members: this.members.filter((existing) => String(existing.id) !== String(member.id)),\n })\n })\n\n channel.listenForWhisper?.(PRESENCE_STATE_WHISPER, (data) => {\n const id = data.id\n const state = data.state\n\n if (!active || (typeof id !== 'string' && typeof id !== 'number')) return\n if (state !== 'editing' && state !== 'viewing') return\n\n this.states.set(String(id), state)\n this.store.update({\n members: this.members.map((member) =>\n String(member.id) === String(id) ? { ...member, state } : member,\n ),\n })\n })\n\n return () => {\n active = false\n this.whisper = null\n acquired.release()\n this.store.set({ members: [], connected: false })\n }\n },\n { echo: this.options.echo },\n )\n\n return () => {\n stop()\n\n if (rooms.get(this.options.channel) === this) rooms.delete(this.options.channel)\n }\n }\n\n /** Change this page's state (e.g. to `editing` once the form has unsaved changes). */\n setState(state: PresenceState): void {\n if (state === this.state) return\n\n this.state = state\n this.announce()\n }\n\n private announce(): void {\n if (this.options.self === undefined || this.options.self === null) return\n\n this.whisper?.({ id: this.options.self, state: this.state })\n }\n\n private withState(member: Omit<PresenceMember, 'state'>): PresenceMember {\n this.names.set(String(member.id), member.name)\n\n return { ...member, state: this.states.get(String(member.id)) ?? 'viewing' }\n }\n\n private isSelf(id: RecordKey): boolean {\n return (\n this.options.self !== undefined &&\n this.options.self !== null &&\n String(id) === String(this.options.self)\n )\n }\n}\n\n/** Initials for an avatar without an image (\"Dana Scully\" → \"DS\"). */\nexport function presenceInitials(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean)\n\n return (\n parts.length > 1 ? `${parts[0]![0]}${parts.at(-1)![0]}` : (parts[0] ?? '?').slice(0, 2)\n ).toLocaleUpperCase()\n}\n\n/** At most `limit` avatars, and how many more are not shown. */\nexport function visiblePresenceMembers(\n members: PresenceMember[],\n limit = 4,\n): { shown: PresenceMember[]; overflow: number } {\n return { shown: members.slice(0, limit), overflow: Math.max(0, members.length - limit) }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"presence.js","names":[],"sources":["../src/presence.ts"],"sourcesContent":["import { acquireChannel, withEcho, type EchoLike } from './realtime'\nimport type { RecordKey } from './schema/common'\nimport type { PresenceSchema, PresenceState } from './schema/realtime'\nimport { createStore, type Store } from './store'\n\n/** Another user on the same record (what `RealtimeChannels::member()` shares). */\nexport interface PresenceMember {\n id: RecordKey\n name: string\n avatar?: string | null\n state: PresenceState\n}\n\nexport interface PresenceRoomState {\n /** Other users on the record, in the order they arrived; never the current user. */\n members: PresenceMember[]\n /** The channel was joined (Echo is available and the user may see the record). */\n connected: boolean\n}\n\nconst rooms = new Map<string, PresenceRoom>()\n\n/** Whisper (client event) carrying a member's editing/viewing state. */\nexport const PRESENCE_STATE_WHISPER = 'alfakit-presence'\n\nfunction asMember(value: unknown): Omit<PresenceMember, 'state'> | null {\n if (!value || typeof value !== 'object') return null\n\n const { id, name, avatar } = value as Record<string, unknown>\n\n if (typeof id !== 'string' && typeof id !== 'number') return null\n\n return {\n id,\n name: typeof name === 'string' && name !== '' ? name : String(id),\n avatar: typeof avatar === 'string' && avatar !== '' ? avatar : null,\n }\n}\n\nexport interface PresenceRoomOptions extends PresenceSchema {\n /** The current user's key (left out of `members`). */\n self?: RecordKey | null\n echo?: EchoLike | null\n}\n\n/**\n * Who else is on a record page: joins the record's presence channel and tracks its members\n * and their editing/viewing state (shared with whispers). Renderers show `store` as avatars.\n */\n/**\n * The members of a presence channel whose subscription already succeeded (Pusher protocol:\n * Reverb, Pusher), as `here` would list them; null before that or with another connector.\n */\nfunction subscribedMembers(channel: unknown): unknown[] | null {\n const subscription = (\n channel as {\n subscription?: { subscribed?: boolean; members?: { members?: Record<string, unknown> } }\n }\n ).subscription\n const members = subscription?.members?.members\n\n if (!subscription?.subscribed || !members || typeof members !== 'object') return null\n\n return Object.values(members)\n}\n\nexport class PresenceRoom {\n readonly store: Store<PresenceRoomState> = createStore<PresenceRoomState>({\n members: [],\n connected: false,\n })\n\n private readonly states = new Map<string, PresenceState>()\n /** Names of everybody seen on the channel, also after they left (\"Dana saved changes\"). */\n private readonly names = new Map<string, string>()\n private whisper: ((data: Record<string, unknown>) => void) | null = null\n private state: PresenceState\n\n constructor(private readonly options: PresenceRoomOptions) {\n this.state = options.state\n }\n\n get members(): PresenceMember[] {\n return this.store.get().members\n }\n\n /** The name of a user seen on the record, if any. */\n memberName(id: RecordKey): string | null {\n return this.names.get(String(id)) ?? null\n }\n\n /** The started room of a presence channel (the conflict banner reads names from it). */\n static find(channel: string): PresenceRoom | null {\n return rooms.get(channel) ?? null\n }\n\n /** Join the channel. Returns the function that leaves it. */\n start(): () => void {\n rooms.set(this.options.channel, this)\n\n const stop = withEcho(\n (echo) => {\n const acquired = acquireChannel(echo, 'presence', this.options.channel)\n\n if (!acquired) return\n\n const channel = acquired.channel\n let active = true\n\n this.whisper = (data) => {\n try {\n channel.whisper?.(PRESENCE_STATE_WHISPER, data)\n } catch {\n // Client events can be disabled on the server; presence still works.\n }\n }\n\n const here = (members: unknown[]) => {\n if (!active) return\n\n this.store.set({\n connected: true,\n members: members\n .map(asMember)\n .filter((m) => m !== null)\n .map((m) => this.withState(m))\n .filter((member) => !this.isSelf(member.id)),\n })\n this.announce()\n }\n\n channel.here(here)\n\n // A channel another part of the page already joined (the conflict monitor, a room\n // re-created by a re-render) fired `here` before this listener existed: take the\n // members it already has (W-S5-05).\n const joined = subscribedMembers(channel)\n\n if (joined) here(joined)\n\n channel.joining((value) => {\n const member = asMember(value)\n\n if (!active || !member || this.isSelf(member.id)) return\n\n this.store.update({\n members: [\n ...this.members.filter((existing) => String(existing.id) !== String(member.id)),\n this.withState(member),\n ],\n })\n // Tell the newcomer what this page does.\n this.announce()\n })\n\n channel.leaving((value) => {\n const member = asMember(value)\n\n if (!active || !member) return\n\n this.states.delete(String(member.id))\n this.store.update({\n members: this.members.filter((existing) => String(existing.id) !== String(member.id)),\n })\n })\n\n channel.listenForWhisper?.(PRESENCE_STATE_WHISPER, (data) => {\n const id = data.id\n const state = data.state\n\n if (!active || (typeof id !== 'string' && typeof id !== 'number')) return\n if (state !== 'editing' && state !== 'viewing') return\n\n this.states.set(String(id), state)\n this.store.update({\n members: this.members.map((member) =>\n String(member.id) === String(id) ? { ...member, state } : member,\n ),\n })\n })\n\n return () => {\n active = false\n this.whisper = null\n acquired.release()\n this.store.set({ members: [], connected: false })\n }\n },\n { echo: this.options.echo },\n )\n\n return () => {\n stop()\n\n if (rooms.get(this.options.channel) === this) rooms.delete(this.options.channel)\n }\n }\n\n /** Change this page's state (e.g. to `editing` once the form has unsaved changes). */\n setState(state: PresenceState): void {\n if (state === this.state) return\n\n this.state = state\n this.announce()\n }\n\n private announce(): void {\n if (this.options.self === undefined || this.options.self === null) return\n\n this.whisper?.({ id: this.options.self, state: this.state })\n }\n\n private withState(member: Omit<PresenceMember, 'state'>): PresenceMember {\n this.names.set(String(member.id), member.name)\n\n return { ...member, state: this.states.get(String(member.id)) ?? 'viewing' }\n }\n\n private isSelf(id: RecordKey): boolean {\n return (\n this.options.self !== undefined &&\n this.options.self !== null &&\n String(id) === String(this.options.self)\n )\n }\n}\n\n/** Initials for an avatar without an image (\"Dana Scully\" → \"DS\"). */\nexport function presenceInitials(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean)\n\n return (\n parts.length > 1 ? `${parts[0]![0]}${parts.at(-1)![0]}` : (parts[0] ?? '?').slice(0, 2)\n ).toLocaleUpperCase()\n}\n\n/** At most `limit` avatars, and how many more are not shown. */\nexport function visiblePresenceMembers(\n members: PresenceMember[],\n limit = 4,\n): { shown: PresenceMember[]; overflow: number } {\n return { shown: members.slice(0, limit), overflow: Math.max(0, members.length - limit) }\n}\n"],"mappings":"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"}
|