import { Enhancer as Enhancer_2 } from './enhance'; /** * 属性評価結果の詳細です。 */ declare interface AttributeEvaluationDetail { /** 評価済みの値 */ value: string | false | unknown | null; /** 未解決参照が含まれていたかどうか */ hasUnresolvedReference: boolean; } /** * コメントフラグメント。 * コメントノードを表現します。 */ declare class CommentFragment extends Fragment { /** コメント文字列 */ private text; /** 更新スキップフラグ(オブザーバーによる無限ループ対応) */ private skipMutation; /** * コメントフラグメントのコンストラクタ。 * 対象コメントノードの内容を初期化します。 * * @param target 対象コメントノード */ constructor(target: Comment); /** * フラグメントをクローンします。 * * @returns クローンされたフラグメント */ clone(): Fragment; /** * フラグメントの対象ノードを取得します。 * * @returns フラグメントの対象ノード */ getTarget(): Comment; /** * コンテンツを更新します。 * * @param text テキスト * @return 更新のPromise */ setContent(text: string): Promise; } /** * アプリケーションの中心的な制御を行うクラスです。 * Fragment の初期化、属性変化の処理、条件分岐・繰り返し処理を管理します。 */ export declare class Core { /** 属性エイリアスのサフィックス */ private static readonly ATTRIBUTE_ALIAS_SUFFIX; /** 優先処理する属性のサフィックス(処理順序で定義) */ private static readonly PRIORITY_ATTRIBUTE_SUFFIXES; /** 遅延処理する属性のサフィックス */ private static readonly DEFERRED_ATTRIBUTE_SUFFIXES; /** * 走査中の「初期値の反映が終わるまで」を表す Promise。 * * フォームを収集する取得(`data-{event}-fetch-form`)は、初期値が入力欄へ載る * 前に走ると空の条件で送ってしまうため、これを待ってから起動します(課題 52)。 * 走査が終わると `null` に戻り、後から追加した要素は待ちません。 */ private static initialValueRestore; /** evaluateAll で再評価対象から除外する特殊属性のサフィックス */ private static readonly EVALUATE_ALL_EXCLUDED_ATTRIBUTE_SUFFIXES; /** 属性内プレースホルダ検出用の正規表現 */ private static readonly ATTRIBUTE_PLACEHOLDER_REGEX; /** * 行スコープ判定で「属性値そのものが式」とみなす `data-*` 属性のサフィックス。 * `{{...}}` を伴わずに式を書く属性だけを列挙する。 */ private static readonly ROW_LOCAL_EXPRESSION_ATTRIBUTES; /** * 行スコープ判定で「属性値が式ではない」とみなす `data-*` 属性のサフィックス。 * ここに無い `data-*` 属性は、行の外を参照し得るものとして安全側に扱う。 */ private static readonly ROW_LOCAL_STATIC_ATTRIBUTES; /** * 行スコープ判定で「属性値が式ではない」とみなす行操作の宣言。 * * `data-{event}-row-next` のようにイベント名を含むため、サフィックスの後半で * 判定します。値は空またはセレクタで、描画のたびに評価する式ではありません * (`{{...}}` を含む値は先に別の分岐で行スコープと照合しています)。 * * 列挙しないと、行操作のボタンを置いただけで「行の外を参照している」と判定され、 * 要素データが同値の行でも子孫の再評価を省略できなくなります。行操作は一覧の * 並べ替えそのものなので、除外すると並べ替えのたびに全行を再評価します。 */ private static readonly ROW_LOCAL_ROW_OPERATIONS; /** data-fetch の自動再評価状態 */ private static readonly REACTIVE_FETCH_STATES; /** data-import の自動再評価状態 */ private static readonly REACTIVE_IMPORT_STATES; /** data-derive subtree skip の開発用プロファイル */ private static readonly DERIVE_SUBTREE_PROFILES; /** data-each の差分更新の再入制御状態 */ private static readonly EACH_UPDATE_STATES; /** * data-each-rendered-change(既定の `once` モード)で change を発火済みの要素。 * 再帰的な発火ループを避けるため、要素ごとに一度だけ発火させるために使用します。 */ private static readonly EACH_RENDERED_CHANGE_FIRED; /** * data-each-rendered-change の不正な属性値を警告済みの要素。 * 描画確定ごとに同じ警告を出し続けないために使用します。 */ private static readonly EACH_RENDERED_CHANGE_WARNED; /** * `data-each-key` の重複を警告済みの項目名。 * 描画のたびに同じ警告を出し続けないために使用します。 */ private static readonly WARNED_DUPLICATE_EACH_KEYS; /** * 遅延属性かどうか(完全名で判定)を判定します。 * * @param name 属性名 * @returns 遅延属性かどうか */ private static isDeferredAttributeName; /** * evaluateAll で再評価対象から除外する特殊属性かどうかを判定します。 * * @param name 属性名 * @returns 除外対象かどうか */ private static isEvaluateAllExcludedAttributeName; /** * evaluateAll で通常属性を再評価すべきかを判定します。 * * @param name 属性名 * @param value 属性の生値 * @returns 再評価する場合は true */ private static shouldReevaluateAttribute; /** * data-attr-* 形式の属性名から実際に更新する属性名を取得します。 * * @param name 属性名 * @returns 実際の属性名。data-attr-* でない場合は null */ private static getAliasedAttributeName; /** * 実属性の変更が data-attr-* の内部反映かどうかを判定します。 * * @param element 対象要素 * @param name 変更された属性名 * @returns data-attr-* の内部反映なら true */ static isAliasedAttributeReflection(element: HTMLElement, name: string): boolean; /** * プレースホルダを含む通常属性を再評価します。 * 内部状態の更新は同期的に行い、DOM 反映は fragment 側の非同期更新に委ねます。 * * @param fragment 対象フラグメント * @returns 再評価完了の Promise */ private static reevaluateInterpolatedAttributes; /** * 指定フラグメントの直下の子孫評価を再実行します。 * * @param fragment 対象フラグメント * @returns 再評価完了の Promise */ private static reevaluateChildren; /** * 配下の入力欄からユーザー編集の印を解除します。 * * 明示的に値を供給する操作(フェッチ応答とそれに伴う `data-{event}-bind` の反映、 * `data-{event}-reset`、`data-{event}-copy`、`data-each` の行データ差し替え)から * 呼び出します。解除後の再評価では宣言バインドの評価結果が入力欄へ再適用され、 * 「再取得したのに古い入力が残る」状態になりません。 * * 逆に、`change` / `input` の双方向コミットや `data-url-param` の再評価のような * 「値の供給ではない更新」からは呼び出しません。呼び出すと編集値が評価結果へ * 巻き戻ります。フェッチを伴わない `change` / `input` の `data-{event}-bind` も * 双方向コミットに含みます(`Procedure` の `twoWayCommitBind` を参照)。 * * @param fragment 対象フラグメント(配下すべてが対象) * @param upTo この通し番号までの編集を解除対象とする(既定は現在の最新) * @return 戻り値はありません。 */ static clearUserEditMarks(fragment: ElementFragment, upTo?: number): void; /** * data-fetch の再評価状態を取得します。 * * @param element 対象要素 * @returns 再評価状態 */ private static getReactiveFetchState; /** * data-import の再評価状態を取得します。 * * @param element 対象要素 * @returns 再評価状態 */ private static getReactiveImportState; /** * bind 更新時に data-fetch / data-import を専用ルートで再評価します。 * * @param fragment 対象フラグメント * @param skipFragments 再評価をスキップするフラグメント集合 * @returns 再評価完了の Promise */ private static reevaluateReactiveSpecialAttributes; /** * data-fetch をシグネチャ比較付きで実行します。 * * @param fragment 対象フラグメント * @returns 実行完了の Promise */ private static executeManagedFetch; /** * data-import を URL 比較付きで実行します。 * * @param fragment 対象フラグメント * @returns 実行完了の Promise */ private static executeManagedImport; /** * 取り込んだ断片を取り込み先のフラグメントの子として繋ぎます。 * * `data-import` は `innerHTML` で子を差し替えるため、フラグメント木は自動では * 追従しません。繋がないまま評価すると、断片の要素は親を持たないフラグメントに * なり、祖先をたどれないため評価スコープが空になります(`{{...}}` が空表示に * なり、`data-if` が常に偽になる)。DOM 上は取り込み先の子なので、通常の子要素と * 同じスコープ解決になるように繋ぎ直します。 * * @param fragment 取り込み先のフラグメント * @return 戻り値はありません。 */ private static adoptImportedChildren; /** * 指定された要素と、その子要素をスキャンし、Fragmentを生成します。 * * @param element スキャン対象の要素 * @returns Promise (スキャンが完了したときに解決される) */ static scan(element: HTMLElement): Promise; /** * 指定された要素と、その子要素をスキャンします。 * * `applyEnhancers` が false のときは、走査の最後に外部ライブラリ連携を適用しません。 * `data-if` の分岐の子を走査するときに使います。適用は、分岐の外の初期値の反映 * (外側の走査の最後)や、揃った選択肢への値の載せ直しの後に行います(課題 55)。 * * @param element スキャン対象の要素 * @param applyEnhancers 走査の最後に外部ライブラリ連携を適用するかどうか * @returns Promise (スキャンが完了したときに解決される) */ private static scanElement; /** * 非表示から表示へ切り替わった分岐へ、外部ライブラリ連携を適用します。 * * 表示と同じ更新で与えた値は、`data-each` の行が揃った後に載せ直されます * (`Core.setBindingData()` の載せ直しの段)。その前に `init` を呼ぶと、`