PageSourceSearch

https://niho.life/_next/static/chunks/68255-37c070ad19005c6f.js

js niho.life collected 2026-10-08 06:33:18 UTC 34,315 bytes, 353 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[68255],{13747:(e,t,n)=>{n.d(t,{SK:()=>i,Y8:()=>s,gH:()=>a});var r=n(1850);let o="/playground/fonts/v1/noto-sans-jp/";function a(e){try{let t=new URL(e);if("https:"!==t.protocol&&"http:"!==t.protocol||t.username||t.password||"/"!==t.pathname||t.search||t.hash)return;return new URL(o,t.origin).toString()}catch{return}}function s(e){try{let t=new URL(e);return("https:"===t.protocol||"http:"===t.protocol)&&""===t.username&&""===t.password&&""===t.search&&""===t.hash&&t.pathname===o}catch{return!1}}function i(e){return e&&s(e)?["@font-face{font-family:'"+r.rz+"';font-style:normal;font-display:swap;font-weight:400;src:url("+e+"noto-sans-jp-japanese-400-normal.woff2) format('woff2')}","@font-face{font-family:'"+r.rz+"';font-style:normal;font-display:swap;font-weight:700;src:url("+e+"noto-sans-jp-japanese-700-normal.woff2) format('woff2')}"].join(""):""}},28480:(e,t,n)=>{n.d(t,{An:()=>y,IN:()=>a,Pb:()=>u,VL:()=>f,bU:()=>m,mc:()=>v,vC:()=>h});var r=n(1850),o=n(13747);let a="allow-scripts",s=`(() => {
2  const root = document.documentElement;
3  const sessionNonce = root.dataset.session || "";
4  const releaseDigest = root.dataset.release || "";
5  const language = root.dataset.language || "ja";
6  const strings = JSON.parse(root.dataset.strings || "{}");
7  const editableValues = JSON.parse(root.dataset.editableValues || "{}");
8  const assets = JSON.parse(root.dataset.assets || "{}");
9  const capabilities = JSON.parse(root.dataset.capabilities || "[]");
10  const pending = new Map();
11  const maxInFlight = ${r.gT};
12  const maxRequestBytes = ${r.RL};
13  let sequence = 0;
14  const interpolate = (text, params) => Object.entries(params || {}).reduce(
15    (result, [key, value]) => result.split("{" + key + "}").join(String(value)),
16    text,
17  );
18  const call = (method, payload = null, idempotencyKey = null) => new Promise((resolve, reject) => {
19    if (pending.size >= maxInFlight) {
20      reject(new Error("NIHO playground RPC in-flight limit exceeded"));
21      return;
22    }
23    const requestId = "tab_" + (++sequence) + "_" + Date.now();
24    const request = { requestId, bridgeVersion: "0.1.0", releaseDigest, sessionNonce, method, idempotencyKey, payload };
25    if (new TextEncoder().encode(JSON.stringify(request)).byteLength > maxRequestBytes) {
26      reject(new Error("NIHO playground RPC request too large"));
27      return;
28    }
29    const timeout = setTimeout(() => {
30      pending.delete(requestId);
31      reject(new Error("NIHO playground RPC timeout"));
32    }, 5000);
33    pending.set(requestId, { resolve, reject, timeout });
34    parent.postMessage({
35      channel: "niho.playground.v0",
36      kind: "rpc",
37      sessionNonce,
38      releaseDigest,
39      request,
40    }, "*");
41  });
42  const mutationKey = () => typeof crypto.randomUUID === "function"
43    ? crypto.randomUUID()
44    : "mutation_" + Date.now() + "_" + Math.random().toString(16).slice(2);
45  addEventListener("message", (event) => {
46    const data = event.data;
47    if (event.source !== parent || !data || data.channel !== "niho.playground.v0" || data.kind !== "rpc-response") return;
48    if (data.sessionNonce !== sessionNonce || data.releaseDigest !== releaseDigest || !data.response) return;
49    const entry = pending.get(data.response.requestId);
50    if (!entry) return;
51    clearTimeout(entry.timeout);
52    pending.delete(data.response.requestId);
53    if (data.response.ok) entry.resolve(data.response.value);
54    else entry.reject(Object.assign(new Error(data.response.error.messageKey), { code: data.response.error.code }));
55  });
56  const api = {
57    viewer: { get: () => call("viewer.get") },
58    spot: { get: () => call("spot.get") },
59    settings: { get: (key) => Object.prototype.hasOwnProperty.call(editableValues, key) ? editableValues[key] : undefined },
60    assets: { url: (key) => Object.prototype.hasOwnProperty.call(assets, key) ? assets[key] : undefined },
61    t: (key, params) => {
62      if (!capabilities.includes("strings.resolve")) throw new Error("NIHO playground capability denied");
63      return interpolate(strings[language]?.[key] ?? strings.ja?.[key] ?? key, params);
64    },
65    diag: {
66      ready: () => call("diag.ready"),
67      error: (input) => call("diag.error", input),
68    },
69    ui: { confirm: (input) => call("ui.confirm", input) },
70    devices: {
71      list: () => call("devices.list"),
72      execute: (input) => call("devices.execute", input, mutationKey()),
73    },
74    records: {
75      consent: (input) => call("records.consent", input, mutationKey()),
76      list: (input) => call("records.list", input),
77      append: (input) => call("records.append", input, mutationKey()),
78      delete: (input) => call("records.delete", input, mutationKey()),
79    },
80    scripts: { status: () => call("scripts.status") },
81  };
82  Object.defineProperty(window, "niho", { value: Object.freeze(api), configurable: false, writable: false });
83})();`,i=`(() => {
84  const root = document.documentElement;
85  const sessionNonce = root.dataset.session || "";
86  const releaseDigest = root.dataset.release || "";
87  const authoringDigest = root.dataset.authoringDigest || "";
88  const allowedNodes = new Set(JSON.parse(root.dataset.authoringNodes || "[]"));
89  let enabled = false;
90  let selectedNodeId = null;
91  const renderSelection = () => {
92    document.querySelectorAll("[data-niho-authoring-selected]").forEach((node) => node.removeAttribute("data-niho-authoring-selected"));
93    if (!enabled || !selectedNodeId || !allowedNodes.has(selectedNodeId)) return;
94    const node = document.querySelector('[data-niho-node="' + CSS.escape(selectedNodeId) + '"]');
95    if (node) node.setAttribute("data-niho-authoring-selected", "true");
96  };
97  addEventListener("message", (event) => {
98    const data = event.data;
99    if (event.source !== parent || !data || data.channel !== "niho.playground.authoring.v0" || data.kind !== "state") return;
100    if (data.sessionNonce !== sessionNonce || data.releaseDigest !== releaseDigest || data.authoringDigest !== authoringDigest) return;
101    enabled = data.enabled === true;
102    selectedNodeId = typeof data.selectedNodeId === "string" && allowedNodes.has(data.selectedNodeId) ? data.selectedNodeId : null;
103    renderSelection();
104  });
105  document.addEventListener("click", (event) => {
106    if (!enabled || !(event.target instanceof Element)) return;
107    const node = event.target.closest("[data-niho-node]");
108    const nodeId = node?.getAttribute("data-niho-node") || "";
109    if (!allowedNodes.has(nodeId)) return;
110    event.preventDefault();
111    event.stopPropagation();
112    event.stopImmediatePropagation();
113    parent.postMessage({
114      channel: "niho.playground.authoring.v0",
115      kind: "node-select",
116      sessionNonce,
117      releaseDigest,
118      authoringDigest,
119      nodeId,
120    }, "*");
121  }, true);
122})();`,d=["ELEMENT_CLICK","FORM_SUBMIT","INPUT_CHANGE","LIST_ITEM_CLICK"],c=`(() => {
123  var root = document.documentElement;
124  var sessionNonce = root.dataset.session || "";
125  var releaseDigest = root.dataset.release || "";
126  var NODE_ID_PATTERN = /^[A-Za-z][A-Za-z0-9-]{0,79}$/;
127  var bindings = [];
128  try {
129    bindings = JSON.parse(root.dataset.workflowBindings || "[]");
130  } catch (error) {
131    bindings = [];
132  }
133  var boundByEvent = { ELEMENT_CLICK: {}, FORM_SUBMIT: {}, INPUT_CHANGE: {}, LIST_ITEM_CLICK: {} };
134  bindings.forEach(function (binding) {
135    if (!binding || typeof binding.nodeId !== "string" || !NODE_ID_PATTERN.test(binding.nodeId)) return;
136    var set = boundByEvent[binding.event];
137    if (set) set[binding.nodeId] = true;
138  });
139  var post = function (message) {
140    parent.postMessage(Object.assign({
141      channel: "niho.playground.workflow.v1",
142      sessionNonce: sessionNonce,
143      releaseDigest: releaseDigest,
144    }, message), "*");
145  };
146  var findBoundAncestor = function (start, boundSet) {
147    var node = start;
148    while (node && node.nodeType === 1) {
149      if (node.hasAttribute("data-niho-node")) {
150        var nodeId = node.getAttribute("data-niho-node") || "";
151        if (NODE_ID_PATTERN.test(nodeId) && boundSet[nodeId]) return { nodeId: nodeId, element: node };
152      }
153      node = node.parentElement;
154    }
155    return null;
156  };
157  // 一覧の項目(#15566): data-niho-record-id を持つ祖先(LISTが記録ごとに描くli)を探す。
158  // record idはこのDOM属性由来なので、親はcacheに無いrecord idのeventを信用しない
159  // (member-playground-tab.tsx参照)。
160  var findRecordAncestor = function (start) {
161    var node = start;
162    while (node && node.nodeType === 1) {
163      if (node.hasAttribute("data-niho-record-id")) return node;
164      node = node.parentElement;
165    }
166    return null;
167  };
168  var readFieldValue = function (field) {
169    var tag = field.tagName;
170    var type = (field.getAttribute("type") || "").toLowerCase();
171    if (tag === "INPUT" && type === "checkbox") return field.checked;
172    if (tag === "INPUT" && (type === "number" || type === "range")) {
173      if (field.value === "") return null;
174      var parsed = Number(field.value);
175      return isNaN(parsed) ? null : parsed;
176    }
177    if (tag !== "INPUT" && tag !== "TEXTAREA" && tag !== "SELECT") {
178      // CHOICE (#15567): the [data-niho-field] element is the choices
179      // container, not a form control itself. The submitted value is the
180      // selected option's stable node ID (radio value), or null when unset.
181      var checkedOption = field.querySelector('input[type="radio"]:checked');
182      return checkedOption ? checkedOption.value : null;
183    }
184    if (typeof field.value === "string") return field.value;
185    return field.textContent || "";
186  };
187  var collectFormInputs = function (container) {
188    var inputs = {};
189    if (!container) return inputs;
190    var fields = container.querySelectorAll("[data-niho-field]");
191    for (var index = 0; index < fields.length; index += 1) {
192      var field = fields[index];
193      var key = field.getAttribute("data-niho-field");
194      if (!key) continue;
195      inputs[key] = readFieldValue(field);
196    }
197    return inputs;
198  };
199  document.addEventListener("click", function (event) {
200    var match = findBoundAncestor(event.target, boundByEvent.ELEMENT_CLICK);
201    if (!match) return;
202    post({ kind: "event", nodeId: match.nodeId, eventType: "ELEMENT_CLICK" });
203  }, true);
204  document.addEventListener("submit", function (event) {
205    var target = event.target;
206    if (!target || target.tagName !== "FORM") return;
207    var match = findBoundAncestor(target, boundByEvent.FORM_SUBMIT);
208    if (!match) return;
209    event.preventDefault();
210    post({ kind: "event", nodeId: match.nodeId, eventType: "FORM_SUBMIT", formInputs: collectFormInputs(match.element) });
211  }, true);
212  document.addEventListener("change", function (event) {
213    var match = findBoundAncestor(event.target, boundByEvent.INPUT_CHANGE);
214    if (!match) return;
215    post({ kind: "event", nodeId: match.nodeId, eventType: "INPUT_CHANGE", formInputs: collectFormInputs(match.element) });
216  }, true);
217  document.addEventListener("click", function (event) {
218    // 一覧の項目を押したとき(#15566): クリックの祖先に記録の行([data-niho-record-id])と、
219    // 束縛された一覧(LIST)のnodeがあれば送る。ELEMENT_CLICKとは別のlistenerにして、
220    // 同じclickで両方が独立に判定できるようにする(一覧の行の中に別のbound buttonがあっても
221    // 互いを妨げない)。
222    var recordNode = findRecordAncestor(event.target);
223    if (!recordNode) return;
224    var match = findBoundAncestor(recordNode, boundByEvent.LIST_ITEM_CLICK);
225    if (!match) return;
226    var recordId = recordNode.getAttribute("data-niho-record-id") || "";
227    if (!recordId) return;
228    post({ kind: "event", nodeId: match.nodeId, eventType: "LIST_ITEM_CLICK", recordId: recordId });
229  }, true);
230  addEventListener("message", function (event) {
231    var data = event.data;
232    if (event.source !== parent || !data || data.channel !== "niho.playground.workflow.v1") return;
233    if (data.sessionNonce !== sessionNonce || data.releaseDigest !== releaseDigest) return;
234    if (data.kind === "effect") {
235      var effect = data.effect;
236      if (!effect) return;
237      if (effect.type === "DATA_CHANGED") {
238        // 一覧(LIST、#15566)の再取得契機。nodeIdを持たないので、一覧の描画runtime
239        // (tab-app-definition-codegen.ts生成物)がdocument全体で購読する。
240        if (typeof effect.collectionKey === "string") {
241          document.dispatchEvent(new CustomEvent("niho:data-changed", { detail: { collectionKey: effect.collectionKey } }));
242        }
243        return;
244      }
245      if (typeof effect.nodeId !== "string" || !NODE_ID_PATTERN.test(effect.nodeId)) return;
246      var node = document.querySelector('[data-niho-node="' + CSS.escape(effect.nodeId) + '"]');
247      if (!node) return;
248      if (effect.type === "UI_UPDATE") {
249        if (effect.target === "VISIBILITY") node.hidden = effect.value !== true;
250        else if (effect.target === "TEXT") node.textContent = effect.value === null || effect.value === undefined ? "" : String(effect.value);
251      } else if (effect.type === "FORM_RESET") {
252        var form = node.tagName === "FORM" ? node : node.querySelector("form");
253        if (form) form.reset();
254      }
255      return;
256    }
257    if (data.kind === "run-state") {
258      if (typeof data.nodeId !== "string" || !NODE_ID_PATTERN.test(data.nodeId)) return;
259      var runNode = document.querySelector('[data-niho-node="' + CSS.escape(data.nodeId) + '"]');
260      if (!runNode) return;
261      var running = data.running === true;
262      if (running) runNode.setAttribute("aria-busy", "true");
263      else runNode.removeAttribute("aria-busy");
264      var controls = runNode.querySelectorAll("button, input[type=submit]");
265      for (var controlIndex = 0; controlIndex < controls.length; controlIndex += 1) {
266        controls[controlIndex].disabled = running;
267      }
268      if (runNode.matches && runNode.matches("button, input[type=submit]")) runNode.disabled = running;
269    }
270  });
271})();`,l=/^[A-Za-z][A-Za-z0-9-]{0,79}$/;function u(e){if(!e.data||"object"!=typeof e.data||Array.isArray(e.data))return!1;let t=e.data,n=new Set(["channel","kind","sessionNonce","releaseDigest","nodeId","eventType","formInputs","recordId"]);if(!Object.keys(t).every(e=>n.has(e))||"niho.playground.workflow.v1"!==t.channel||"event"!==t.kind||t.sessionNonce!==e.sessionNonce||t.releaseDigest!==e.releaseDigest||"string"!=typeof t.nodeId||!l.test(t.nodeId)||!d.includes(t.eventType)||void 0!==t.formInputs&&!function(e){let t;if(!e||"object"!=typeof e||Array.isArray(e))return!1;let n=Object.entries(e);if(n.length>50)return!1;for(let[,e]of n)if(null!==e&&"string"!=typeof e&&"number"!=typeof e&&"boolean"!=typeof e)return!1;try{t=new TextEncoder().encode(JSON.stringify(e)).byteLength}catch{return!1}return t<=8192}(t.formInputs))return!1;if("LIST_ITEM_CLICK"===t.eventType){var r;if(!("string"==typeof(r=t.recordId)&&r.trim().length>0&&r.length<=200))return!1}else if(void 0!==t.recordId)return!1;return e.bindings.some(e=>e.nodeId===t.nodeId&&e.event===t.eventType)}function f(e){return!!e.sourceMatches&&"null"===e.eventOrigin&&u(e)}let p=`(() => {
272  const source = document.getElementById("niho-lottie");
273  const player = window.lottie;
274  if (!source || !player || typeof player.loadAnimation !== "function") return;
275  let documents = {};
276  try {
277    documents = JSON.parse(source.textContent || "{}");
278  } catch (error) {
279    return;
280  }
281  const reducedMotion = document.documentElement.dataset.reducedMotion === "true";
282  const mounted = new Map();
283  const isElement = (node) => Boolean(node) && node.nodeType === 1;
284  const readSpec = (node) => ({
285    key: node.getAttribute("data-niho-lottie") || "",
286    loop: node.getAttribute("data-niho-lottie-loop") === "true",
287  });
288  const destroy = (node) => {
289    const entry = mounted.get(node);
290    if (!entry) return;
291    mounted.delete(node);
292    if (!entry.animation) return;
293    try {
294      entry.animation.destroy();
295    } catch (error) {}
296  };
297  const mount = (node) => {
298    const spec = readSpec(node);
299    const entry = mounted.get(node);
300    if (entry && entry.key === spec.key && entry.loop === spec.loop) return;
301    if (entry) destroy(node);
302    if (!Object.prototype.hasOwnProperty.call(documents, spec.key)) return;
303    try {
304      const animation = player.loadAnimation({
305        container: node,
306        renderer: "svg",
307        loop: spec.loop,
308        autoplay: !reducedMotion,
309        animationData: JSON.parse(JSON.stringify(documents[spec.key])),
310      });
311      mounted.set(node, { key: spec.key, loop: spec.loop, animation: animation });
312      if (reducedMotion) animation.goToAndStop(0, true);
313    } catch (error) {
314      mounted.set(node, { key: spec.key, loop: spec.loop, animation: null });
315    }
316  };
317  const evaluate = (node) => {
318    if (!isElement(node)) return;
319    if (!node.hasAttribute("data-niho-lottie")) {
320      destroy(node);
321      return;
322    }
323    mount(node);
324  };
325  const scan = (node) => {
326    if (!isElement(node)) return;
327    evaluate(node);
328    node.querySelectorAll("[data-niho-lottie]").forEach(mount);
329  };
330  const unmount = (node) => {
331    if (!isElement(node)) return;
332    mounted.forEach((entry, mountedNode) => {
333      if (mountedNode !== node && !node.contains(mountedNode)) return;
334      destroy(mountedNode);
335    });
336  };
337  scan(document.body);
338  new MutationObserver((records) => {
339    records.forEach((record) => {
340      if (record.type === "attributes") {
341        evaluate(record.target);
342        return;
343      }
344      record.removedNodes.forEach(unmount);
345      record.addedNodes.forEach(scan);
346    });
347  }).observe(document.body, {
348    childList: true,
349    subtree: true,
350    attributes: true,
351    attributeFilter: ["data-niho-lottie", "data-niho-lottie-loop"],
352  });
353})();`;function g(e){return e.replaceAll("&","&amp;").replaceAll('"',"&quot;").replaceAll("<","&lt;").replaceAll(">","&gt;")}function h(e){let t=[...new Set(e.assetSources??[])].filter(e=>/^https?:\/\/[A-Za-z0-9.:-]+\/[A-Za-z0-9._~\-/]*\/$/.test(e)).map(e=>` ${e}`).join(""),n=e.webFontSource&&(0,o.Y8)(e.webFontSource)?e.webFontSource:void 0,r=(0,o.SK)(n),a=e.authoring?" 'sha256-V7cndJyGKYVrIgptdP+zji7iulmgebCHPJnsjvHW/Cc='":"",d=e.lottieDocuments??{},l=Object.keys(d).length>0?e.lottieRenderer:void 0,u=l?` 'sha256-${l.sha256Base64}' 'sha256-KSvf9dUr1NGEjP9Xs1vj/GGZ/CJ+n6nCJod+E5YiLoU='`:"",f=void 0!==e.workflowBindings?" 'sha256-Ev3mVkscGeVGs9PzTIeWZI2e5V2+ExjYn8zrzDEafcc='":"",h=`default-src 'none'; script-src 'sha256-DEdqQ44xdel8X/reCqMgohaMxmq1spPzjR0/5zL3hHI=' 'sha256-${e.bundleScriptSha256Base64}'${a}${u}${f}; style-src 'unsafe-inline'; img-src data:${t}; connect-src 'none'; font-src${n?` ${n}`:" 'none'"}; media-src 'none'; worker-src 'none'; frame-src 'none'; form-action 'none'; base-uri 'none'; object-src 'none'`,m=e.prefersReducedMotion?"*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}":"",y=e.authoring?` data-authoring-digest="${g(e.authoring.digest)}" data-authoring-nodes="${g(JSON.stringify(e.authoring.nodeIds))}"`:"",v=e.authoring?'[data-niho-authoring-selected="true"]{outline:3px solid #245c4f!important;outline-offset:2px!important}':"",E=e.authoring?`<script>${i}</script>`:"",I=void 0!==e.workflowBindings?` data-workflow-bindings="${g(JSON.stringify(e.workflowBindings))}"`:"",b=void 0!==e.workflowBindings?`<script>${c}</script>`:"",N=l?`<script type="application/json" id="niho-lottie">${JSON.stringify(d).replace(/</gu,"\\u003c")}</script>`:"",w=l?`<script>${l.source}</script><script>${p}</script>`:"",S=l?"[data-niho-lottie]{display:block}":"";return`<!doctype html><html data-session="${g(e.sessionNonce)}" data-release="${g(e.releaseDigest)}" data-language="${g(e.language)}" data-strings="${g(JSON.stringify(e.strings))}" data-editable-values="${g(JSON.stringify(e.editableValues??{}))}" data-assets="${g(JSON.stringify(e.assets??{}))}" data-capabilities="${g(JSON.stringify(e.effectiveCapabilities))}" data-reduced-motion="${e.prefersReducedMotion?"true":"false"}"${y}${I}><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta http-equiv="Content-Security-Policy" content="${g(h)}"><style>${r}html,body{margin:0;min-height:100%;font-family:system-ui,-apple-system,sans-serif;color:#292524;background:#fff}*{box-sizing:border-box}${S}${m}${v}</style></head><body><main id="app"><div id="tab-root"></div></main>${N}<script>${s}</script>${E}${w}${b}<script>${e.bundleJavaScript}</script></body></html>`}function m(e){if(!e.sourceMatches||"null"!==e.eventOrigin||!e.data||"object"!=typeof e.data||Array.isArray(e.data))return!1;let t=e.data,n=["channel","kind","sessionNonce","releaseDigest","authoringDigest","nodeId"];return!(Object.keys(t).length!==n.length||n.some(e=>!Object.hasOwn(t,e)))&&"niho.playground.authoring.v0"===t.channel&&"node-select"===t.kind&&t.sessionNonce===e.sessionNonce&&t.releaseDigest===e.releaseDigest&&t.authoringDigest===e.authoringDigest&&"string"==typeof t.nodeId&&e.nodeIds.includes(t.nodeId)}function y(e){if(!e.sourceMatches||"null"!==e.eventOrigin||!e.data||"object"!=typeof e.data||Array.isArray(e.data))return!1;let t=e.data;return"niho.playground.v0"===t.channel&&"rpc"===t.kind&&t.sessionNonce===e.sessionNonce&&t.releaseDigest===e.releaseDigest&&!!t.request&&"object"==typeof t.request&&t.request.sessionNonce===e.sessionNonce&&t.request.releaseDigest===e.releaseDigest&&"0.1.0"===t.request.bridgeVersion}class v{constructor(e){this.onHardFailure=e,this.hardFailures=0,this.timer=null}arm(e){this.cancel(),this.timer=setTimeout(()=>{this.timer=null,this.hardFailures+=1,this.onHardFailure(this.hardFailures>=2)},e?2e3:5e3)}ready(){this.cancel(),this.hardFailures=0}recordHardFailure(){this.cancel(),this.hardFailures+=1,this.onHardFailure(this.hardFailures>=2)}cancel(){null!==this.timer&&clearTimeout(this.timer),this.timer=null}}},57550:(e,t,n)=>{n.d(t,{J:()=>i});var r=n(30779);function o(e,t){"AGGREGATE"===e.kind&&t.add(e.schemaKey)}function a(e,t,n){"FORM_INPUT"===e.kind&&e.nodeId===t&&n.set(e.fieldKey,e.type)}function s(){return new Date}function i(e){let{workflow:t,sink:n}=e,i=e.now??s,d=(0,r.IJ)(),c=function(e){let t=new Set,n=[];
353for(let o of e.workflows){var r;let e=o.event;if("TAB_OPEN"===e.type||"ELEMENT_CLICK"!==(r=e.type)&&"FORM_SUBMIT"!==r&&"INPUT_CHANGE"!==r&&"LIST_ITEM_CLICK"!==r)continue;let a=`${e.type}:${e.nodeId}`;t.has(a)||(t.add(a),n.push({nodeId:e.nodeId,event:e.type}))}return n}(t.definition),l=new Map(e.dataSchemas.map(e=>[e.key,{...e}])),u={...t.runtimeContext.localStateDefaults},f=!1;async function p(e){let t=l.get(e);return!t||!t.consentRequired||!!t.consented||!!await n.requestConsent({purpose:t.purpose})&&(await n.consent(e,t.version),t.consented=!0,!0)}function g(e){return"string"==typeof e?e:""}async function h(s,c,h,m){var y,v,E;let I,b,N=(I=new Set,s.steps.forEach(e=>(function e(t,n){"ACTION"===t.kind?function(e,t){switch(e.kind){case"UI_UPDATE":case"LOCAL_STATE_SET":o(e.value,t);return;case"LOCAL_STATE_INCREMENT":o(e.delta,t);return;case"UI_MESSAGE":o(e.message,t);return;case"UI_CONFIRM":o(e.title,t),o(e.message,t);return;case"RECORDS_APPEND":Object.values(e.values).forEach(e=>o(e,t));return;case"RECORDS_DELETE":o(e.recordId,t);return;case"DEVICES_EXECUTE":Object.values(e.params).forEach(e=>o(e,t));return;case"FORM_RESET":case"RECORDS_READ":case"DEVICES_READ":return}}(t.action,n):(!function e(t,n){switch(t.kind){case"COMPARE":o(t.left,n),o(t.right,n);return;case"IS_EMPTY":o(t.ref,n);return;case"NOT":e(t.item,n);return;case"ALL":case"ANY":t.items.forEach(t=>e(t,n));return}}(t.condition,n),t.then.forEach(t=>e(t,n)),t.else.forEach(t=>e(t,n)))})(e,I)),[...I]),w={};for(let e of N){let t=l.get(e);w[e]=(null==t?void 0:t.consentRequired)&&!t.consented?0:await n.countRecords(e)}let S=!1,T=async e=>{let t=e.action;switch(t.kind){case"RECORDS_READ":{let e=l.get(t.schemaKey);if((null==e?void 0:e.consentRequired)&&!e.consented)return{values:{totalCount:0,hasRecords:!1}};let r=await n.countRecords(t.schemaKey);return{values:{totalCount:r,hasRecords:r>0}}}case"RECORDS_APPEND":{if(!await p(t.schemaKey))throw S=!0,Error("member declined record consent");let r=Object.fromEntries(Object.keys(t.values).map(t=>[t,e.values[`values.${t}`]??null]).filter(e=>{let[,t]=e;return null!==t}));return await n.appendRecord(t.schemaKey,r,e.idempotencyKey),{values:{}}}case"RECORDS_DELETE":{if(!await p(t.schemaKey))throw S=!0,Error("member declined record consent");let r=e.values.recordId;if("string"!=typeof r||0===r.length)throw Error("recordId is required for RECORDS_DELETE");return await n.deleteRecord(t.schemaKey,r,e.idempotencyKey),{values:{}}}case"DEVICES_READ":{let e=await n.readDevice(t.deviceKey);return{values:{power:e.power,brightnessPercent:e.brightnessPercent}}}case"DEVICES_EXECUTE":{let r=Object.fromEntries(Object.keys(t.params).map(t=>[t,e.values[`params.${t}`]??null]));return await n.executeDevice(t.deviceKey,t.operation,r,e.idempotencyKey),{values:{}}}case"UI_CONFIRM":return{values:{confirmed:await n.confirm({title:g(e.values.title),message:g(e.values.message),intent:t.intent})}};case"UI_MESSAGE":return n.message({tone:t.tone,message:g(e.values.message)}),{values:{}};case"UI_UPDATE":return n.effect({type:"UI_UPDATE",nodeId:t.nodeId,target:t.target,value:e.values.value??null}),{values:{}};case"FORM_RESET":return n.effect({type:"FORM_RESET",nodeId:t.nodeId}),{values:{}};default:return{values:{}}}},O="TAB_OPEN"===c.type?null:c.nodeId,R=h&&O?(b=new Map,s.steps.forEach(e=>(function e(t,n,r){"ACTION"===t.kind?function(e,t,n){switch(e.kind){case"UI_UPDATE":case"LOCAL_STATE_SET":a(e.value,t,n);return;case"LOCAL_STATE_INCREMENT":a(e.delta,t,n);return;case"UI_MESSAGE":a(e.message,t,n);return;case"UI_CONFIRM":a(e.title,t,n),a(e.message,t,n);return;case"RECORDS_APPEND":Object.values(e.values).forEach(e=>a(e,t,n));return;case"RECORDS_DELETE":a(e.recordId,t,n);return;case"DEVICES_EXECUTE":Object.values(e.params).forEach(e=>a(e,t,n));return;case"FORM_RESET":case"RECORDS_READ":case"DEVICES_READ":return}}(t.action,n,r):(!function e(t,n,r){switch(t.kind){case"COMPARE":a(t.left,n,r),a(t.right,n,r);return;case"IS_EMPTY":a(t.ref,n,r);return;case"NOT":e(t.item,n,r);return;case"ALL":case"ANY":t.items.forEach(t=>e(t,n,r));return}}(t.condition,n,r),t.then.forEach(t=>e(t,n,r)),t.else.forEach(t=>e(t,n,r)))})(e,O,b)),y=b,Object.fromEntries(Object.entries(h).map(e=>{var t;let[n,r]=e;return[n,("NUMBER"===(t=y.get(n))||"DATE"===t)&&""===r?null:r]}))):h;O&&n.runState(O,!0);try{let o,a=await (0,r.PC)(s,{event:c,...R&&O?{formInputs:{[O]:R}}:{},...m&&O?{listItems:{[O]:m}}:{},viewer:{role:e.viewer.role,language:e.viewer.language,prefersReducedMotion:e.viewer.prefersReducedMotion,prefersHighContrast:e.viewer.prefersHighContrast},spot:{displayName:e.spot.displayName,theme:e.spot.theme},dataFieldTypes:t.runtimeContext.dataFieldTypes,localStateTypes:t.runtimeContext.localStateTypes,aggregates:w,localState:u,now:(E=i(),o=e=>String(e).padStart(2,"0"),{date:`${E.getFullYear()}-${o(E.getMonth()+1)}-${o(E.getDate())}`,datetime:E.toISOString()})},{adapter:T},d);if(f)return;u={...a.localState},null==(v=e.onTrace)||v.call(e,{workflowId:s.id,status:a.status,trace:a.trace}),"ERROR"!==a.status||S||n.message({tone:"ERROR",message:"うまく動きませんでした。時間をおいてもう一度お試しください。"})}finally{O&&n.runState(O,!1)}}return{bindings:c,async dispatch(e){if(f)return;let n="TAB_OPEN"===e.type?{type:"TAB_OPEN"}:e.nodeId?{type:e.type,nodeId:e.nodeId}:null;if(n)for(let o of t.definition.workflows.filter(e=>
353(0,r.HN)(e,n))){if(f)return;await h(o,n,e.formInputs,e.listItem)}},dispose(){f=!0}}}},68936:(e,t,n)=>{n.d(t,{_:()=>d});var r=n(95155),o=n(12115),a=n(28480),s=n(13747),i=n(1850);function d(e){var t;let{cached:d,onRpc:c,onRuntimeFailure:l,releaseDigest:u}=e,f=(0,o.useRef)(null),p=(0,o.useRef)(0),[g,h]=(0,o.useState)(!1),[m,y]=(0,o.useState)(!1),[v,E]=(0,o.useState)(0),[I,b]=(0,o.useState)(null),[N]=(0,o.useState)(()=>crypto.randomUUID()),w=(0,o.useRef)(l);w.current=l;let S=(0,o.useRef)(e.onRuntimeEvent);S.current=e.onRuntimeEvent;let T=(0,o.useRef)(null);null===T.current&&(T.current=new a.mc(e=>{y(!0),S.current({phase:"READY_TIMEOUT",fingerprintSource:{code:"ready-timeout"}}),w.current(e)}));let O=T.current;(0,o.useEffect)(()=>()=>O.cancel(),[O]),(0,o.useEffect)(()=>{b((0,s.gH)(window.location.origin)??"")},[]),(0,o.useEffect)(()=>{let t=e=>{var t,n;null==(n=f.current)||null==(t=n.contentWindow)||t.postMessage({channel:"niho.playground.v0",kind:"rpc-response",sessionNonce:N,releaseDigest:u,response:e},"*")},n=n=>{var r,o,s;let d=e.authoring;if((null==d?void 0:d.enabled)&&(0,a.bU)({data:n.data,eventOrigin:n.origin,sourceMatches:n.source===(null==(r=f.current)?void 0:r.contentWindow),sessionNonce:N,releaseDigest:u,authoringDigest:d.digest,nodeIds:d.nodeIds}))return void d.onSelectNode(n.data.nodeId);let l=e.workflow;if(l&&(0,a.VL)({data:n.data,eventOrigin:n.origin,sourceMatches:n.source===(null==(o=f.current)?void 0:o.contentWindow),sessionNonce:N,releaseDigest:u,bindings:l.bindings}))return void l.onEvent({nodeId:n.data.nodeId,eventType:n.data.eventType,...void 0!==n.data.formInputs?{formInputs:n.data.formInputs}:{},...void 0!==n.data.recordId?{recordId:n.data.recordId}:{}});if(!(0,a.An)({data:n.data,eventOrigin:n.origin,sourceMatches:n.source===(null==(s=f.current)?void 0:s.contentWindow),sessionNonce:N,releaseDigest:u}))return;let g=n.data.request;(function(e){try{let t=JSON.stringify(e);return"string"==typeof t?new TextEncoder().encode(t).byteLength:1/0}catch{return 1/0}})(g)>i.RL||p.current>=i.gT?t({requestId:g.requestId,ok:!1,error:{code:"INVALID_REQUEST",messageKey:"playground.rpc.resourceLimit",retryable:!1}}):(p.current+=1,c(g).then(e=>{"diag.ready"===g.method&&e.ok&&(O.ready(),y(!1),S.current({phase:"READY"})),t(e)}).finally(()=>{p.current=Math.max(0,p.current-1)}))};return window.addEventListener("message",n),()=>window.removeEventListener("message",n)},[c,e.authoring,e.workflow,u,N,O]);let R=(0,o.useCallback)(()=>{var t,n;let r=e.authoring;r&&(null==(n=f.current)||null==(t=n.contentWindow)||t.postMessage({channel:"niho.playground.authoring.v0",kind:"state",sessionNonce:N,releaseDigest:u,authoringDigest:r.digest,enabled:r.enabled,selectedNodeId:r.selectedNodeId},"*"))},[e.authoring,u,N]),D=(0,o.useCallback)(()=>{let t=e.workflow;t&&t.onChannelReady({postEffect:e=>{var t,n;null==(n=f.current)||null==(t=n.contentWindow)||t.postMessage({channel:"niho.playground.workflow.v1",kind:"effect",sessionNonce:N,releaseDigest:u,effect:e},"*")},setRunState:(e,t)=>{var n,r;null==(r=f.current)||null==(n=r.contentWindow)||n.postMessage({channel:"niho.playground.workflow.v1",kind:"run-state",sessionNonce:N,releaseDigest:u,nodeId:e,running:t},"*")}})},[e.workflow,u,N]);(0,o.useEffect)(()=>{R(),D()},[D,R,v]);let k=Object.keys(e.lottieDocuments??{}).length>0,[A,C]=(0,o.useState)({status:"loading"});(0,o.useEffect)(()=>{if(!k)return;let e=!0;return n.e(51456).then(n.bind(n,51456)).then(t=>{e&&C({status:"ready",source:t.PLAYGROUND_LOTTIE_RENDERER_SOURCE,sha256Base64:t.PLAYGROUND_LOTTIE_RENDERER_SHA256_BASE64})}).catch(()=>{e&&C({status:"unavailable"})}),()=>{e=!1}},[k]);let _=k&&"loading"===A.status,M=(0,a.vC)({sessionNonce:N,releaseDigest:u,bundleJavaScript:e.bundleJavaScript,bundleScriptSha256Base64:e.bundleScriptSha256Base64,language:e.language,strings:e.strings,editableValues:e.editableValues,assets:e.assets,assetSources:e.assetSources,webFontSource:I??void 0,lottieDocuments:e.lottieDocuments,lottieRenderer:"ready"===A.status?A:void 0,effectiveCapabilities:(0,i.vT)(e.effectiveCapabilities),prefersReducedMotion:e.prefersReducedMotion,authoring:e.authoring?{digest:e.authoring.digest,nodeIds:e.authoring.nodeIds}:void 0,workflowBindings:null==(t=e.workflow)?void 0:t.bindings}),x=_||null===I;return(0,o.useEffect)(()=>
353{if(!x)return O.arm(d),()=>O.cancel()},[d,v,M,x,O]),(0,r.jsxs)("section",{"aria-label":e.title,className:"relative min-h-[20rem] overflow-hidden rounded-2xl border border-stone-200 bg-white",children:[!1!==e.showMemberChrome?(0,r.jsxs)("div",{className:"flex min-h-11 items-center justify-between gap-3 border-b border-stone-200 bg-stone-50 px-3 text-xs text-stone-700",children:[(0,r.jsxs)("span",{className:"truncate",children:["このタブは ",e.spotName," が作成"]}),(0,r.jsx)("button",{type:"button",className:"min-h-9 rounded-full px-3 underline",onClick:()=>h(e=>!e),children:"タブ情報"})]}):null,!1!==e.showMemberChrome&&g?(0,r.jsxs)("div",{className:"border-b border-stone-200 bg-white p-4 text-sm",role:"region","aria-label":"タブ情報",children:[(0,r.jsx)("p",{className:"font-medium",children:e.title}),(0,r.jsxs)("p",{className:"mt-1 break-all text-xs text-stone-600",children:["版 ",e.releaseDigest.slice(0,22),"…"]}),(0,r.jsxs)("div",{className:"mt-3 flex flex-wrap gap-2",children:[(0,r.jsx)("button",{type:"button",className:"min-h-11 rounded-lg border px-3 disabled:opacity-50",disabled:e.reportPending,onClick:()=>e.onReport("POLICY"),children:"通報する"}),(0,r.jsx)("button",{type:"button",className:"min-h-11 rounded-lg border px-3 disabled:opacity-50",disabled:e.reportPending,onClick:()=>e.onReport("BUG"),children:e.reportPending?"送信中…":"不具合を報告"}),(0,r.jsx)("button",{type:"button",className:"min-h-11 rounded-lg border px-3",onClick:e.onHide,children:"このタブを非表示"})]})]}):null,m&&!1!==e.showMemberChrome?(0,r.jsxs)("div",{className:"grid min-h-[18rem] place-content-center gap-3 p-6 text-center",role:"status",children:[(0,r.jsx)("p",{className:"font-medium",children:"このタブを読み込めませんでした"}),(0,r.jsx)("button",{type:"button",className:"min-h-11 rounded-lg border px-4",onClick:()=>{y(!1),E(e=>e+1)},children:"もう一度試す"})]}):null,e.workflowBanner?(0,r.jsx)("div",{className:"px-4 pt-3",children:e.workflowBanner}):null,x?(0,r.jsx)("div",{className:"grid min-h-[18rem] place-content-center p-6 text-center text-sm text-stone-600",role:"status",children:"読み込んでいます…"}):(0,r.jsx)("iframe",{ref:f,title:e.title,srcDoc:M,sandbox:a.IN,className:m?"hidden":"h-[32rem] w-full border-0",referrerPolicy:"no-referrer",allow:"",onLoad:()=>{R(),D()}},v)]})}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.